<?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>228047</bug_id>
          
          <creation_ts>2021-07-17 03:50:26 -0700</creation_ts>
          <short_desc>Add Pre/Post-Indexed Address Mode to Air for ARM64</short_desc>
          <delta_ts>2021-08-09 07:42:36 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yijia Huang">yijia_huang</reporter>
          <assigned_to name="Yijia Huang">yijia_huang</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1777707</commentid>
    <comment_count>0</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-17 03:50:26 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777708</commentid>
    <comment_count>1</comment_count>
      <attachid>433730</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-17 03:54:42 -0700</bug_when>
    <thetext>Created attachment 433730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777725</commentid>
    <comment_count>2</comment_count>
      <attachid>433734</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-17 16:29:25 -0700</bug_when>
    <thetext>Created attachment 433734
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777732</commentid>
    <comment_count>3</comment_count>
      <attachid>433738</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-17 19:27:25 -0700</bug_when>
    <thetext>Created attachment 433738
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778119</commentid>
    <comment_count>4</comment_count>
      <attachid>433859</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-20 02:00:29 -0700</bug_when>
    <thetext>Created attachment 433859
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778125</commentid>
    <comment_count>5</comment_count>
      <attachid>433864</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-20 02:34:39 -0700</bug_when>
    <thetext>Created attachment 433864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778259</commentid>
    <comment_count>6</comment_count>
      <attachid>433897</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-20 13:34:01 -0700</bug_when>
    <thetext>Created attachment 433897
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778999</commentid>
    <comment_count>7</comment_count>
      <attachid>434069</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-23 00:44:44 -0700</bug_when>
    <thetext>Created attachment 434069
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779086</commentid>
    <comment_count>8</comment_count>
      <attachid>434096</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-23 10:18:22 -0700</bug_when>
    <thetext>Created attachment 434096
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779087</commentid>
    <comment_count>9</comment_count>
      <attachid>434069</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-23 10:19:54 -0700</bug_when>
    <thetext>Comment on attachment 434069
Patch

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

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:522
&gt; +                                m_potentialPreIndex.remove(it);

This remove() doesn&apos;t destroy the MemoryValue*.

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:550
&gt; +                m_potentialPreIndex.remove(it);

Why does this remove() destroy the MemoryValue* here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779093</commentid>
    <comment_count>10</comment_count>
      <attachid>434098</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-23 10:36:13 -0700</bug_when>
    <thetext>Created attachment 434098
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779319</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-24 03:51:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/81053101&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779320</commentid>
    <comment_count>12</comment_count>
      <attachid>434166</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-24 05:20:00 -0700</bug_when>
    <thetext>Created attachment 434166
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779321</commentid>
    <comment_count>13</comment_count>
      <attachid>434167</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-24 05:59:19 -0700</bug_when>
    <thetext>Created attachment 434167
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779339</commentid>
    <comment_count>14</comment_count>
      <attachid>434174</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-24 14:34:14 -0700</bug_when>
    <thetext>Created attachment 434174
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779359</commentid>
    <comment_count>15</comment_count>
      <attachid>434178</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-25 00:01:46 -0700</bug_when>
    <thetext>Created attachment 434178
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779361</commentid>
    <comment_count>16</comment_count>
      <attachid>434179</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-25 03:23:02 -0700</bug_when>
    <thetext>Created attachment 434179
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779370</commentid>
    <comment_count>17</comment_count>
      <attachid>434181</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-25 12:32:59 -0700</bug_when>
    <thetext>Created attachment 434181
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779374</commentid>
    <comment_count>18</comment_count>
      <attachid>434182</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-25 13:14:21 -0700</bug_when>
    <thetext>Created attachment 434182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779420</commentid>
    <comment_count>19</comment_count>
      <attachid>434197</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-26 02:57:51 -0700</bug_when>
    <thetext>Created attachment 434197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779669</commentid>
    <comment_count>20</comment_count>
      <attachid>434197</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-07-26 20:23:41 -0700</bug_when>
    <thetext>Comment on attachment 434197
Patch

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

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:916
&gt; +                    auto tryPotentialPostIndexAddress = [&amp;] () {
&gt; +                        if (!right-&gt;hasIntPtr())
&gt; +                            return;
&gt; +                        intptr_t offset = right-&gt;asIntPtr();
&gt; +                        Value::OffsetType smallOffset = static_cast&lt;Value::OffsetType&gt;(offset);
&gt; +                        if (opcode != Air::Add64 || smallOffset != offset || !Arg::isValidPostIndexForm(smallOffset))
&gt; +                            return;
&gt; +                        m_baseToInst.add(left, &amp;m_insts.last().last());
&gt; +                    };

I think it&apos;s weird to have this code here.  Seems like you want it at the top of the Add case in the main lowering switch statement.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1164
&gt; -                    if (isValidForm(Store32, Arg::ZeroReg, dest.kind()) &amp;&amp; dest.isValidForm(Width32))
&gt; -                        return Inst(Store32, m_value, zeroReg(), dest);
&gt; +                    if (isValidForm(Move32, Arg::ZeroReg, dest.kind()) &amp;&amp; dest.isValidForm(Width32))
&gt; +                        return Inst(Move32, m_value, zeroReg(), dest);

Why do you need to name stores as such?

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2597
&gt; +                if (totalUseCounts(address) == 1 || totalUseCounts(base) &gt; 1)

I don&apos;t get this.  What are you trying to achieve here?

Isn&apos;t the whole point of pre-increment loads that the address has many uses?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779690</commentid>
    <comment_count>21</comment_count>
      <attachid>434272</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-26 22:51:49 -0700</bug_when>
    <thetext>Created attachment 434272
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779691</commentid>
    <comment_count>22</comment_count>
      <attachid>434273</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-26 23:00:26 -0700</bug_when>
    <thetext>Created attachment 434273
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779758</commentid>
    <comment_count>23</comment_count>
      <attachid>434294</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-27 09:23:00 -0700</bug_when>
    <thetext>Created attachment 434294
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779861</commentid>
    <comment_count>24</comment_count>
      <attachid>434376</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-27 15:51:13 -0700</bug_when>
    <thetext>Created attachment 434376
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780002</commentid>
    <comment_count>25</comment_count>
      <attachid>434416</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-28 02:38:20 -0700</bug_when>
    <thetext>Created attachment 434416
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780003</commentid>
    <comment_count>26</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-28 02:39:56 -0700</bug_when>
    <thetext>This is the 5th version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780553</commentid>
    <comment_count>27</comment_count>
      <attachid>434567</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-29 13:52:34 -0700</bug_when>
    <thetext>Created attachment 434567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780569</commentid>
    <comment_count>28</comment_count>
      <attachid>434573</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-29 14:19:10 -0700</bug_when>
    <thetext>Created attachment 434573
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780580</commentid>
    <comment_count>29</comment_count>
      <attachid>434573</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-07-29 14:54:14 -0700</bug_when>
    <thetext>Comment on attachment 434573
Patch

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

I think you have a bug in how your new Arg works - it says that it just Uses its input.

Also, you should factor your phase out into its own file.

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:3165
&gt; +bool canonicalize(Procedure&amp; proc)
&gt; +{
&gt; +    PhaseScope phaseScope(proc, &quot;canonicalize&quot;);
&gt; +    ReduceStrength reduceStrength(proc);
&gt; +    return reduceStrength.canonicalizeIncrementAddress();
&gt; +}

I think you need a more descriptive name at the B3 level namespace than &quot;canonicalize&quot;.  I would call it something like &quot;canonicalizePrePostIncrements&quot; and maybe I would even conditionalize it so it only runs on ARM64.

Also, I wouldn&apos;t make this a method of ReduceStrength.  It doesn&apos;t seem like it needs to be.  Seems like this should be a standalone function, in its own file.  Like &quot;B3CanonicalizePrePostIncrements.h&quot; and &quot;B3CanonicalizePrePostIncrements.cpp&quot;.

&gt; Source/JavaScriptCore/b3/air/AirArg.h:1395
&gt;              functor(m_base, Use, GP, argRole == UseAddr ? argWidth : pointerWidth());

This is wrong now - it&apos;ll claim that pre/post increment &quot;uses&quot; are just Uses.  They are UseDef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780617</commentid>
    <comment_count>30</comment_count>
      <attachid>434582</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-29 16:07:11 -0700</bug_when>
    <thetext>Created attachment 434582
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780663</commentid>
    <comment_count>31</comment_count>
      <attachid>434582</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-07-29 17:35:11 -0700</bug_when>
    <thetext>Comment on attachment 434582
Patch

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

I think this is right?

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:167
&gt; +    return canonicalizePrePostIncrementsImpl(proc);

You could inline the body of the impl here.

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.h:34
&gt; +bool canonicalizePrePostIncrementsImpl(Procedure&amp;);

Don&apos;t need this declared here since you don&apos;t call it from anywhere but the non-impl variant.

&gt; Source/JavaScriptCore/b3/air/AirArg.h:1398
&gt; +        case PreIndex:
&gt; +        case PostIndex:
&gt; +            functor(m_base, UseDef, GP, argRole == UseAddr ? argWidth : pointerWidth());
&gt; +            break;

Fingers crossed that this works!

Ideally we&apos;d audit the compiler to make sure nobody is assuming that only a top-level Arg can be a Def.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780716</commentid>
    <comment_count>32</comment_count>
      <attachid>434610</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-30 00:58:33 -0700</bug_when>
    <thetext>Created attachment 434610
Patch for fixing the layout test failure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780833</commentid>
    <comment_count>33</comment_count>
      <attachid>434641</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-30 10:01:23 -0700</bug_when>
    <thetext>Created attachment 434641
Patch for fixing the layout test failure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780918</commentid>
    <comment_count>34</comment_count>
      <attachid>434656</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-30 12:56:30 -0700</bug_when>
    <thetext>Created attachment 434656
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780937</commentid>
    <comment_count>35</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-30 13:44:55 -0700</bug_when>
    <thetext>Committed r280493 (240125@main): &lt;https://commits.webkit.org/240125@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 434656.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782438</commentid>
    <comment_count>36</comment_count>
      <attachid>434656</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-05 20:33:52 -0700</bug_when>
    <thetext>Comment on attachment 434656
Patch for landing

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

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2568
&gt; +            //     memory = load(base, 0)
&gt; +            //     address = add(base, offset)

This comment is not what the code is doing. The order here is backwards of the canonical form.

Might also be worth noting what Air code we emit for clarity?

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2573
&gt; +                Value* address = m_block-&gt;at(m_index - 1);

Why do we do this if address is already locked? I guess it&apos;s sound because we are always writing to its temp? That said, if it&apos;s locked, some other operation already sucked up this add internal to the other operation. And nobody would use the result of the add. But we&apos;re emitting a move, which may not get elided.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782441</commentid>
    <comment_count>37</comment_count>
      <attachid>434656</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-05 21:03:10 -0700</bug_when>
    <thetext>Comment on attachment 434656
Patch for landing

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

Thanks for reviewing.

&gt;&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2568
&gt;&gt; +            //     address = add(base, offset)
&gt; 
&gt; This comment is not what the code is doing. The order here is backwards of the canonical form.
&gt; 
&gt; Might also be worth noting what Air code we emit for clarity?

The order is fixed in the patch for store instruction. I will add the corresponding Air code in the store patch.

&gt;&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2573
&gt;&gt; +                Value* address = m_block-&gt;at(m_index - 1);
&gt; 
&gt; Why do we do this if address is already locked? I guess it&apos;s sound because we are always writing to its temp? That said, if it&apos;s locked, some other operation already sucked up this add internal to the other operation. And nobody would use the result of the add. But we&apos;re emitting a move, which may not get elided.

I will add a m_locked check on address in the store patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782442</commentid>
    <comment_count>38</comment_count>
      <attachid>434656</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-05 21:04:38 -0700</bug_when>
    <thetext>Comment on attachment 434656
Patch for landing

Thanks for reviewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782546</commentid>
    <comment_count>39</comment_count>
      <attachid>434656</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-06 12:54:16 -0700</bug_when>
    <thetext>Comment on attachment 434656
Patch for landing

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

still reviewing, but a few more comments.

&gt; Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:250
&gt; +    // Describes an address with base address and pre-increment/decrement index.

nit: index =&gt; offset everywhere in these classes

&gt; Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:264
&gt; +    // Describes an address with base address and post-increment/decrement index.

ditto

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:55
&gt; +    BasicBlock* block { nullptr };

this field is totally unused except for one store to it in the candidate search loop

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:76
&gt; +    auto tryPrePostIndex = [&amp;] (Value* value) {

nit: this should be called something like &quot;tryAddPrePostIndexCandidate&quot;

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:110
&gt; +                if (smallOffset != offset || !Arg::isValidPreIndexForm(smallOffset))

I think we should just have one function, but if we stick with two, this should be isValidPostIndexForm, not isValidPreIndexForm

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:144
&gt; +    auto detect = [&amp;] (HashMap&lt;MemoryValue*, Value*&gt; candidates) {

this should be taking like a &quot;const HashMap&amp;&quot; or HashMap&amp;. No need to take the hash map by value.

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:145
&gt; +        for (auto itr = candidates.begin(); itr != candidates.end(); ++itr) {

you should be using the good style for loops:

for (auto pair : candidates)

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:146
&gt; +            MemoryValue* memory = itr-&gt;key;

then pair.key

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:147
&gt; +            Value* address = itr-&gt;value;

and pair.value

&gt; Source/JavaScriptCore/b3/air/AirArg.h:1296
&gt; +    template&lt;typename Int, typename = Value::IsLegalOffset&lt;Int&gt;&gt;
&gt; +    static bool isValidPreIndexForm(Int offset)
&gt; +    {
&gt; +        if (isARM64())
&gt; +            return isValidSignedImm9(offset);
&gt; +        return false;
&gt; +    }
&gt; +
&gt; +    template&lt;typename Int, typename = Value::IsLegalOffset&lt;Int&gt;&gt;
&gt; +    static bool isValidPostIndexForm(Int offset)
&gt; +    {
&gt; +        if (isARM64())
&gt; +            return isValidSignedImm9(offset);
&gt; +        return false;
&gt; +    }

Can we just make one function &quot;isValidIncrementIndexForm&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782547</commentid>
    <comment_count>40</comment_count>
      <attachid>434656</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-06 12:56:25 -0700</bug_when>
    <thetext>Comment on attachment 434656
Patch for landing

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

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:151
&gt; +            if (candidates == preIndexCandidates) {

This is doing a hash table comparison by value each iteration. That&apos;s a crazy O(n) operation. We should do this by passing in a flag or something.
Also, if we pass in the flag, we don&apos;t need to check full control flow equivalence. We know which should forward dominate, which should backwards dominate.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433730</attachid>
            <date>2021-07-17 03:54:42 -0700</date>
            <delta_ts>2021-07-17 16:29:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210717055441.patch</filename>
            <type>text/plain</type>
            <size>4479</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTg1MTNhN2M1Y2U1Y2VkMmQ0YjdhMjA5NTYxMjUzMmRjYTU1YThjLi4wNTMxNGQzMGI3ZWNlNmJm
ZjdkYzk5NWIzOWY3MzdhODJhOWIyNTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAyMS0wNy0xNyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIG1vcmUgSW1tIGZvcm1zIHRvIEFpciBPcGNvZGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODA0NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6cm90
YXRlUmlnaHQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnJvdGF0ZVJp
Z2h0NjQpOgorICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKwogMjAyMS0wNy0x
NiAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEV4
dGVuZFR5cGUgdG8gQWlyOjpBcmcgSW5kZXggdG8gZnVsbHkgdXRpbGl6ZSBhZGRyZXNzIGNvbXB1
dGF0aW9uIGluIG1lbW9yeSBpbnN0cnVjdGlvbiBmb3IgQVJNNjQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggODhm
MzQwYjQ4M2U5NGYwZjZkYzQyNWY0NDhhNDk2YTVlZTEwZmY2Mi4uOWFhYTQxN2JkYWFjNTk5MDcw
YTZkNTQyMGEwYmEwOTVlYzk5MWUzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKQEAgLTEwMTcsNiArMTAxNywxMSBA
QCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnJvcjwzMj4oZGVzdCwgc3JjLCBzaGlmdEFt
bW91bnQpOwogICAgIH0KIAorICAgIHZvaWQgcm90YXRlUmlnaHQzMihSZWdpc3RlcklEIHNoaWZ0
QW1tb3VudCwgUmVnaXN0ZXJJRCBzcmNEc3QpCisgICAgeworICAgICAgICByb3RhdGVSaWdodDMy
KHNyY0RzdCwgc2hpZnRBbW1vdW50LCBzcmNEc3QpOworICAgIH0KKwogICAgIHZvaWQgcm90YXRl
UmlnaHQ2NChSZWdpc3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIucm9yPDY0PihkZXN0LCBzcmMsIGltbS5tX3Zh
bHVlICYgNjMpOwpAQCAtMTAzMiw2ICsxMDM3LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3Nl
bWJsZXIucm9yPDY0PihkZXN0LCBzcmMsIHNoaWZ0QW1tb3VudCk7CiAgICAgfQogCisgICAgdm9p
ZCByb3RhdGVSaWdodDY0KFJlZ2lzdGVySUQgc2hpZnRBbW1vdW50LCBSZWdpc3RlcklEIHNyY0Rz
dCkKKyAgICB7CisgICAgICAgIHJvdGF0ZVJpZ2h0NjQoc3JjRHN0LCBzaGlmdEFtbW91bnQsIHNy
Y0RzdCk7CisgICAgfQorCiAgICAgdm9pZCByc2hpZnQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBzaGlmdEFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3Nl
bWJsZXIuYXNyPDMyPihkZXN0LCBzcmMsIHNoaWZ0QW1vdW50KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCmluZGV4IDU5MWRhM2E0NGY4NWUwMDk2
ZGE2ZDI3ODA5ZWM5OTJiOGJlMTU1ZWMuLjcwMTUxNWQ0NWNmYzI2OTg2ODQyMTFjNjM3NTNkMDJm
NThmNDRhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bj
b2RlLm9wY29kZXMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUu
b3Bjb2RlcwpAQCAtNDI5LDcgKzQyOSw3IEBAIGFybTY0OiBMc2hpZnQzMiBVOkc6MzIsIFU6Rzoz
MiwgWkQ6RzozMgogICAgIFRtcCwgVG1wLCBUbXAKICAgICBUbXAsIEltbSwgVG1wCiAKLXg4NjpM
c2hpZnQzMiBVOkc6MzIsIFVaRDpHOjMyCit4ODYgYXJtNjQ6IExzaGlmdDMyIFU6RzozMiwgVVpE
Okc6MzIKICAgICBUbXAqLCBUbXAKICAgICBJbW0sIFRtcAogCkBAIC00MzcsNyArNDM3LDcgQEAg
YXJtNjQ6IExzaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcCwgVG1w
CiAgICAgVG1wLCBJbW0sIFRtcAogCi14ODZfNjQ6IExzaGlmdDY0IFU6Rzo2NCwgVUQ6Rzo2NAor
eDg2XzY0IGFybTY0OiBMc2hpZnQ2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAqLCBUbXAKICAg
ICBJbW0sIFRtcAogCkBAIC00NDUsNyArNDQ1LDcgQEAgYXJtNjQ6IFJzaGlmdDMyIFU6RzozMiwg
VTpHOjMyLCBaRDpHOjMyCiAgICAgVG1wLCBUbXAsIFRtcAogICAgIFRtcCwgSW1tLCBUbXAKIAot
eDg2OiBSc2hpZnQzMiBVOkc6MzIsIFVaRDpHOjMyCit4ODYgYXJtNjQ6IFJzaGlmdDMyIFU6Rzoz
MiwgVVpEOkc6MzIKICAgICBUbXAqLCBUbXAKICAgICBJbW0sIFRtcAogCkBAIC00NTMsNyArNDUz
LDcgQEAgYXJtNjQ6IFJzaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRt
cCwgVG1wCiAgICAgVG1wLCBJbW0sIFRtcAogCi14ODZfNjQ6IFJzaGlmdDY0IFU6Rzo2NCwgVUQ6
Rzo2NAoreDg2XzY0IGFybTY0OiBSc2hpZnQ2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAqLCBU
bXAKICAgICBJbW0sIFRtcAogCkBAIC00NjEsNyArNDYxLDcgQEAgYXJtNjQ6IFVyc2hpZnQzMiBV
Okc6MzIsIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wLCBUbXAKICAgICBUbXAsIEltbSwg
VG1wCiAKLXg4NjogVXJzaGlmdDMyIFU6RzozMiwgVVpEOkc6MzIKK3g4NiBhcm02NDogVXJzaGlm
dDMyIFU6RzozMiwgVVpEOkc6MzIKICAgICBUbXAqLCBUbXAKICAgICBJbW0sIFRtcAogCkBAIC00
NjksMTEgKzQ2OSwxMSBAQCBhcm02NDogVXJzaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQK
ICAgICBUbXAsIFRtcCwgVG1wCiAgICAgVG1wLCBJbW0sIFRtcAogCi14ODZfNjQ6IFVyc2hpZnQ2
NCBVOkc6NjQsIFVEOkc6NjQKK3g4Nl82NCBhcm02NDogVXJzaGlmdDY0IFU6Rzo2NCwgVUQ6Rzo2
NAogICAgIFRtcCosIFRtcAogICAgIEltbSwgVG1wCiAKLXg4Nl82NDogUm90YXRlUmlnaHQzMiBV
Okc6MzIsIFVaRDpHOjMyCit4ODZfNjQgYXJtNjQ6IFJvdGF0ZVJpZ2h0MzIgVTpHOjMyLCBVWkQ6
RzozMgogICAgIFRtcCosIFRtcAogICAgIEltbSwgVG1wCiAKQEAgLTQ4MSw3ICs0ODEsNyBAQCBh
cm02NDogUm90YXRlUmlnaHQzMiBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1w
LCBUbXAKICAgICBUbXAsIEltbSwgVG1wCiAKLXg4Nl82NDogUm90YXRlUmlnaHQ2NCBVOkc6NjQs
IFVEOkc6NjQKK3g4Nl82NCBhcm02NDogUm90YXRlUmlnaHQ2NCBVOkc6NjQsIFVEOkc6NjQKICAg
ICBUbXAqLCBUbXAKICAgICBJbW0sIFRtcAogCkBAIC01MDUsNiArNTA1LDcgQEAgT3IzMiBVOkc6
MzIsIFU6RzozMiwgWkQ6RzozMgogCiBPcjMyIFU6RzozMiwgVVpEOkc6MzIKICAgICBUbXAsIFRt
cAorICAgIGFybTY0OiBCaXRJbW0sIFRtcAogICAgIHg4NjogSW1tLCBUbXAKICAgICB4ODY6IFRt
cCwgQWRkcgogICAgIHg4NjogVG1wLCBJbmRleApAQCAtNTE5LDYgKzUyMCw3IEBAIE9yMzIgVTpH
OjMyLCBVWkQ6RzozMgogCiA2NDogT3I2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRtcAor
ICAgIGFybTY0OiBCaXRJbW02NCwgVG1wCiAgICAgeDg2OiBJbW0sIFRtcAogICAgIHg4NjogSW1t
LCBBZGRyCiAgICAgeDg2OiBJbW0sIEluZGV4CkBAIC01MzUsNiArNTM3LDcgQEAgWG9yMzIgVTpH
OjMyLCBVOkc6MzIsIFpEOkc6MzIKIAogWG9yMzIgVTpHOjMyLCBVWkQ6RzozMgogICAgIFRtcCwg
VG1wCisgICAgYXJtNjQ6IEJpdEltbSwgVG1wCiAgICAgeDg2OiBJbW0sIFRtcAogICAgIHg4Njog
VG1wLCBBZGRyCiAgICAgeDg2OiBUbXAsIEluZGV4CkBAIC01NDksNiArNTUyLDcgQEAgWG9yMzIg
VTpHOjMyLCBVWkQ6RzozMgogCiA2NDogWG9yNjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBU
bXAKKyAgICBhcm02NDogQml0SW1tNjQsIFRtcAogICAgIHg4NjogVG1wLCBBZGRyCiAgICAgeDg2
OiBUbXAsIEluZGV4CiAgICAgeDg2OiBBZGRyLCBUbXAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433734</attachid>
            <date>2021-07-17 16:29:25 -0700</date>
            <delta_ts>2021-07-17 19:27:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210717182924.patch</filename>
            <type>text/plain</type>
            <size>5193</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTg1MTNhN2M1Y2U1Y2VkMmQ0YjdhMjA5NTYxMjUzMmRjYTU1YThjLi4wNTMxNGQzMGI3ZWNlNmJm
ZjdkYzk5NWIzOWY3MzdhODJhOWIyNTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAyMS0wNy0xNyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIG1vcmUgSW1tIGZvcm1zIHRvIEFpciBPcGNvZGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODA0NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6cm90
YXRlUmlnaHQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnJvdGF0ZVJp
Z2h0NjQpOgorICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKwogMjAyMS0wNy0x
NiAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEV4
dGVuZFR5cGUgdG8gQWlyOjpBcmcgSW5kZXggdG8gZnVsbHkgdXRpbGl6ZSBhZGRyZXNzIGNvbXB1
dGF0aW9uIGluIG1lbW9yeSBpbnN0cnVjdGlvbiBmb3IgQVJNNjQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggODhm
MzQwYjQ4M2U5NGYwZjZkYzQyNWY0NDhhNDk2YTVlZTEwZmY2Mi4uOWFhYTQxN2JkYWFjNTk5MDcw
YTZkNTQyMGEwYmEwOTVlYzk5MWUzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKQEAgLTEwMTcsNiArMTAxNywxMSBA
QCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnJvcjwzMj4oZGVzdCwgc3JjLCBzaGlmdEFt
bW91bnQpOwogICAgIH0KIAorICAgIHZvaWQgcm90YXRlUmlnaHQzMihSZWdpc3RlcklEIHNoaWZ0
QW1tb3VudCwgUmVnaXN0ZXJJRCBzcmNEc3QpCisgICAgeworICAgICAgICByb3RhdGVSaWdodDMy
KHNyY0RzdCwgc2hpZnRBbW1vdW50LCBzcmNEc3QpOworICAgIH0KKwogICAgIHZvaWQgcm90YXRl
UmlnaHQ2NChSZWdpc3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIucm9yPDY0PihkZXN0LCBzcmMsIGltbS5tX3Zh
bHVlICYgNjMpOwpAQCAtMTAzMiw2ICsxMDM3LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3Nl
bWJsZXIucm9yPDY0PihkZXN0LCBzcmMsIHNoaWZ0QW1tb3VudCk7CiAgICAgfQogCisgICAgdm9p
ZCByb3RhdGVSaWdodDY0KFJlZ2lzdGVySUQgc2hpZnRBbW1vdW50LCBSZWdpc3RlcklEIHNyY0Rz
dCkKKyAgICB7CisgICAgICAgIHJvdGF0ZVJpZ2h0NjQoc3JjRHN0LCBzaGlmdEFtbW91bnQsIHNy
Y0RzdCk7CisgICAgfQorCiAgICAgdm9pZCByc2hpZnQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBzaGlmdEFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3Nl
bWJsZXIuYXNyPDMyPihkZXN0LCBzcmMsIHNoaWZ0QW1vdW50KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggNjNhNmZiMTJmYTUyMmNkYWRhZGJiYTk5ZmY2
MjlkNzg3OGEwODQ0OC4uZDU4NWU2M2M0YjM0NGQ1NjQzNzlhN2E4ZWE4NmYxMDBmMDk5OGE5MiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAgLTEwMjcsNiAr
MTAyNywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKHZhbHVl
KSwgdG1wKGFtb3VudCksIHRtcChtX3ZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1w
KSkgeworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcCh2YWx1ZSksIHRtcChtX3ZhbHVlKSk7
CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoYW1vdW50KSwgdG1wKG1fdmFsdWUpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIGFwcGVuZChNb3ZlLCB0
bXAodmFsdWUpLCB0bXAobV92YWx1ZSkpOwogICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGFtb3Vu
dCksIG1fZWN4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5v
cGNvZGVzCmluZGV4IDU5MWRhM2E0NGY4NWUwMDk2ZGE2ZDI3ODA5ZWM5OTJiOGJlMTU1ZWMuLjcw
MTUxNWQ0NWNmYzI2OTg2ODQyMTFjNjM3NTNkMDJmNThmNDRhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwpAQCAtNDI5LDcgKzQyOSw3IEBA
IGFybTY0OiBMc2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wLCBU
bXAKICAgICBUbXAsIEltbSwgVG1wCiAKLXg4NjpMc2hpZnQzMiBVOkc6MzIsIFVaRDpHOjMyCit4
ODYgYXJtNjQ6IExzaGlmdDMyIFU6RzozMiwgVVpEOkc6MzIKICAgICBUbXAqLCBUbXAKICAgICBJ
bW0sIFRtcAogCkBAIC00MzcsNyArNDM3LDcgQEAgYXJtNjQ6IExzaGlmdDY0IFU6Rzo2NCwgVTpH
OjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcCwgVG1wCiAgICAgVG1wLCBJbW0sIFRtcAogCi14ODZf
NjQ6IExzaGlmdDY0IFU6Rzo2NCwgVUQ6Rzo2NAoreDg2XzY0IGFybTY0OiBMc2hpZnQ2NCBVOkc6
NjQsIFVEOkc6NjQKICAgICBUbXAqLCBUbXAKICAgICBJbW0sIFRtcAogCkBAIC00NDUsNyArNDQ1
LDcgQEAgYXJtNjQ6IFJzaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCiAgICAgVG1wLCBU
bXAsIFRtcAogICAgIFRtcCwgSW1tLCBUbXAKIAoteDg2OiBSc2hpZnQzMiBVOkc6MzIsIFVaRDpH
OjMyCit4ODYgYXJtNjQ6IFJzaGlmdDMyIFU6RzozMiwgVVpEOkc6MzIKICAgICBUbXAqLCBUbXAK
ICAgICBJbW0sIFRtcAogCkBAIC00NTMsNyArNDUzLDcgQEAgYXJtNjQ6IFJzaGlmdDY0IFU6Rzo2
NCwgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcCwgVG1wCiAgICAgVG1wLCBJbW0sIFRtcAog
Ci14ODZfNjQ6IFJzaGlmdDY0IFU6Rzo2NCwgVUQ6Rzo2NAoreDg2XzY0IGFybTY0OiBSc2hpZnQ2
NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAqLCBUbXAKICAgICBJbW0sIFRtcAogCkBAIC00NjEs
NyArNDYxLDcgQEAgYXJtNjQ6IFVyc2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogICAg
IFRtcCwgVG1wLCBUbXAKICAgICBUbXAsIEltbSwgVG1wCiAKLXg4NjogVXJzaGlmdDMyIFU6Rzoz
MiwgVVpEOkc6MzIKK3g4NiBhcm02NDogVXJzaGlmdDMyIFU6RzozMiwgVVpEOkc6MzIKICAgICBU
bXAqLCBUbXAKICAgICBJbW0sIFRtcAogCkBAIC00NjksMTEgKzQ2OSwxMSBAQCBhcm02NDogVXJz
aGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcCwgVG1wCiAgICAgVG1w
LCBJbW0sIFRtcAogCi14ODZfNjQ6IFVyc2hpZnQ2NCBVOkc6NjQsIFVEOkc6NjQKK3g4Nl82NCBh
cm02NDogVXJzaGlmdDY0IFU6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCosIFRtcAogICAgIEltbSwg
VG1wCiAKLXg4Nl82NDogUm90YXRlUmlnaHQzMiBVOkc6MzIsIFVaRDpHOjMyCit4ODZfNjQgYXJt
NjQ6IFJvdGF0ZVJpZ2h0MzIgVTpHOjMyLCBVWkQ6RzozMgogICAgIFRtcCosIFRtcAogICAgIElt
bSwgVG1wCiAKQEAgLTQ4MSw3ICs0ODEsNyBAQCBhcm02NDogUm90YXRlUmlnaHQzMiBVOkc6MzIs
IFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wLCBUbXAKICAgICBUbXAsIEltbSwgVG1wCiAK
LXg4Nl82NDogUm90YXRlUmlnaHQ2NCBVOkc6NjQsIFVEOkc6NjQKK3g4Nl82NCBhcm02NDogUm90
YXRlUmlnaHQ2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAqLCBUbXAKICAgICBJbW0sIFRtcAog
CkBAIC01MDUsNiArNTA1LDcgQEAgT3IzMiBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogCiBPcjMy
IFU6RzozMiwgVVpEOkc6MzIKICAgICBUbXAsIFRtcAorICAgIGFybTY0OiBCaXRJbW0sIFRtcAog
ICAgIHg4NjogSW1tLCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgogICAgIHg4NjogVG1wLCBJbmRl
eApAQCAtNTE5LDYgKzUyMCw3IEBAIE9yMzIgVTpHOjMyLCBVWkQ6RzozMgogCiA2NDogT3I2NCBV
Okc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRtcAorICAgIGFybTY0OiBCaXRJbW02NCwgVG1wCiAg
ICAgeDg2OiBJbW0sIFRtcAogICAgIHg4NjogSW1tLCBBZGRyCiAgICAgeDg2OiBJbW0sIEluZGV4
CkBAIC01MzUsNiArNTM3LDcgQEAgWG9yMzIgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKIAogWG9y
MzIgVTpHOjMyLCBVWkQ6RzozMgogICAgIFRtcCwgVG1wCisgICAgYXJtNjQ6IEJpdEltbSwgVG1w
CiAgICAgeDg2OiBJbW0sIFRtcAogICAgIHg4NjogVG1wLCBBZGRyCiAgICAgeDg2OiBUbXAsIElu
ZGV4CkBAIC01NDksNiArNTUyLDcgQEAgWG9yMzIgVTpHOjMyLCBVWkQ6RzozMgogCiA2NDogWG9y
NjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKKyAgICBhcm02NDogQml0SW1tNjQsIFRt
cAogICAgIHg4NjogVG1wLCBBZGRyCiAgICAgeDg2OiBUbXAsIEluZGV4CiAgICAgeDg2OiBBZGRy
LCBUbXAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433738</attachid>
            <date>2021-07-17 19:27:25 -0700</date>
            <delta_ts>2021-07-20 02:00:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210717212724.patch</filename>
            <type>text/plain</type>
            <size>5587</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTg1MTNhN2M1Y2U1Y2VkMmQ0YjdhMjA5NTYxMjUzMmRjYTU1YThjLi5iYTJkZDFhZDlhNDk2MzRk
MWI3NDFmZmRiYWRkYTIwMDBkOTUzY2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAyMS0wNy0xNyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIG1vcmUgSW1tIGZvcm1zIHRvIEFpciBPcGNvZGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODA0NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6cm90
YXRlUmlnaHQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnJvdGF0ZVJp
Z2h0NjQpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvYWly
L0Fpck9wY29kZS5vcGNvZGVzOgorCiAyMDIxLTA3LTE2ICBZaWppYSBIdWFuZyAgPHlpamlhX2h1
YW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgRXh0ZW5kVHlwZSB0byBBaXI6OkFyZyBJbmRl
eCB0byBmdWxseSB1dGlsaXplIGFkZHJlc3MgY29tcHV0YXRpb24gaW4gbWVtb3J5IGluc3RydWN0
aW9uIGZvciBBUk02NApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRleCA4OGYzNDBiNDgzZTk0ZjBmNmRjNDI1ZjQ0OGE0
OTZhNWVlMTBmZjYyLi45YWFhNDE3YmRhYWM1OTkwNzBhNmQ1NDIwYTBiYTA5NWVjOTkxZTNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaApAQCAtMTAxNyw2ICsxMDE3LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3Nl
bWJsZXIucm9yPDMyPihkZXN0LCBzcmMsIHNoaWZ0QW1tb3VudCk7CiAgICAgfQogCisgICAgdm9p
ZCByb3RhdGVSaWdodDMyKFJlZ2lzdGVySUQgc2hpZnRBbW1vdW50LCBSZWdpc3RlcklEIHNyY0Rz
dCkKKyAgICB7CisgICAgICAgIHJvdGF0ZVJpZ2h0MzIoc3JjRHN0LCBzaGlmdEFtbW91bnQsIHNy
Y0RzdCk7CisgICAgfQorCiAgICAgdm9pZCByb3RhdGVSaWdodDY0KFJlZ2lzdGVySUQgc3JjLCBU
cnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2Vt
Ymxlci5yb3I8NjQ+KGRlc3QsIHNyYywgaW1tLm1fdmFsdWUgJiA2Myk7CkBAIC0xMDMyLDYgKzEw
MzcsMTEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5yb3I8NjQ+KGRlc3QsIHNyYywg
c2hpZnRBbW1vdW50KTsKICAgICB9CiAKKyAgICB2b2lkIHJvdGF0ZVJpZ2h0NjQoUmVnaXN0ZXJJ
RCBzaGlmdEFtbW91bnQsIFJlZ2lzdGVySUQgc3JjRHN0KQorICAgIHsKKyAgICAgICAgcm90YXRl
UmlnaHQ2NChzcmNEc3QsIHNoaWZ0QW1tb3VudCwgc3JjRHN0KTsKKyAgICB9CisKICAgICB2b2lk
IHJzaGlmdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hc3I8MzI+KGRlc3QsIHNyYywg
c2hpZnRBbW91bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcApp
bmRleCA2M2E2ZmIxMmZhNTIyY2RhZGFkYmJhOTlmZjYyOWQ3ODc4YTA4NDQ4Li5kNTg1ZTYzYzRi
MzQ0ZDU2NDM3OWE3YThlYTg2ZjEwMGYwOTk4YTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmNwcApAQCAtMTAyNyw2ICsxMDI3LDExIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAodmFsdWUpLCB0bXAoYW1vdW50KSwgdG1wKG1fdmFs
dWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBpZiAoaXNWYWxp
ZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQo
TW92ZSwgdG1wKHZhbHVlKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZChvcGNv
ZGUsIHRtcChhbW91bnQpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAKICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcCh2YWx1ZSksIHRtcChtX3ZhbHVlKSk7
CiAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAoYW1vdW50KSwgbV9lY3gpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXggNTkxZGEzYTQ0Zjg1
ZTAwOTZkYTZkMjc4MDllYzk5MmI4YmUxNTVlYy4uMmQ2ZWIyYTRkNTE5YTM4NTgxNjgxYWQwNGIy
ODZmZjg5NzVhZWRmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzCkBAIC0zNzQsNiArMzc0LDcgQEAgQW5kMzIgVTpHOjMyLCBVWkQ6RzozMgog
ICAgIHg4NjogSW5kZXgsIFRtcAogICAgIHg4NjogSW1tLCBBZGRyCiAgICAgeDg2OiBJbW0sIElu
ZGV4CisgICAgYXJtNjQ6IEJpdEltbSwgVG1wCiAKIDY0OiBBbmQ2NCBVOkc6NjQsIFU6Rzo2NCwg
RDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcApAQCAtMzg4LDYgKzM4OSw3IEBAIHg4Nl82NDogQW5k
NjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBJbmRleAogICAgIEFkZHIsIFRtcAogICAgIElu
ZGV4LCBUbXAKKyAgICBhcm02NDogQml0SW1tNjQsIFRtcAogCiBBbmREb3VibGUgVTpGOjY0LCBV
OkY6NjQsIEQ6Rjo2NAogICAgIFRtcCwgVG1wLCBUbXAKQEAgLTQyOSw3ICs0MzEsNyBAQCBhcm02
NDogTHNoaWZ0MzIgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCwgVG1wCiAg
ICAgVG1wLCBJbW0sIFRtcAogCi14ODY6THNoaWZ0MzIgVTpHOjMyLCBVWkQ6RzozMgoreDg2IGFy
bTY0OiBMc2hpZnQzMiBVOkc6MzIsIFVaRDpHOjMyCiAgICAgVG1wKiwgVG1wCiAgICAgSW1tLCBU
bXAKIApAQCAtNDM3LDcgKzQzOSw3IEBAIGFybTY0OiBMc2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwg
RDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcAogICAgIFRtcCwgSW1tLCBUbXAKIAoteDg2XzY0OiBM
c2hpZnQ2NCBVOkc6NjQsIFVEOkc6NjQKK3g4Nl82NCBhcm02NDogTHNoaWZ0NjQgVTpHOjY0LCBV
RDpHOjY0CiAgICAgVG1wKiwgVG1wCiAgICAgSW1tLCBUbXAKIApAQCAtNDQ1LDcgKzQ0Nyw3IEBA
IGFybTY0OiBSc2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wLCBU
bXAKICAgICBUbXAsIEltbSwgVG1wCiAKLXg4NjogUnNoaWZ0MzIgVTpHOjMyLCBVWkQ6RzozMgor
eDg2IGFybTY0OiBSc2hpZnQzMiBVOkc6MzIsIFVaRDpHOjMyCiAgICAgVG1wKiwgVG1wCiAgICAg
SW1tLCBUbXAKIApAQCAtNDUzLDcgKzQ1NSw3IEBAIGFybTY0OiBSc2hpZnQ2NCBVOkc6NjQsIFU6
Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcAogICAgIFRtcCwgSW1tLCBUbXAKIAoteDg2
XzY0OiBSc2hpZnQ2NCBVOkc6NjQsIFVEOkc6NjQKK3g4Nl82NCBhcm02NDogUnNoaWZ0NjQgVTpH
OjY0LCBVRDpHOjY0CiAgICAgVG1wKiwgVG1wCiAgICAgSW1tLCBUbXAKIApAQCAtNDYxLDcgKzQ2
Myw3IEBAIGFybTY0OiBVcnNoaWZ0MzIgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAs
IFRtcCwgVG1wCiAgICAgVG1wLCBJbW0sIFRtcAogCi14ODY6IFVyc2hpZnQzMiBVOkc6MzIsIFVa
RDpHOjMyCit4ODYgYXJtNjQ6IFVyc2hpZnQzMiBVOkc6MzIsIFVaRDpHOjMyCiAgICAgVG1wKiwg
VG1wCiAgICAgSW1tLCBUbXAKIApAQCAtNDY5LDExICs0NzEsMTEgQEAgYXJtNjQ6IFVyc2hpZnQ2
NCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcAogICAgIFRtcCwgSW1t
LCBUbXAKIAoteDg2XzY0OiBVcnNoaWZ0NjQgVTpHOjY0LCBVRDpHOjY0Cit4ODZfNjQgYXJtNjQ6
IFVyc2hpZnQ2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAqLCBUbXAKICAgICBJbW0sIFRtcAog
Ci14ODZfNjQ6IFJvdGF0ZVJpZ2h0MzIgVTpHOjMyLCBVWkQ6RzozMgoreDg2XzY0IGFybTY0OiBS
b3RhdGVSaWdodDMyIFU6RzozMiwgVVpEOkc6MzIKICAgICBUbXAqLCBUbXAKICAgICBJbW0sIFRt
cAogCkBAIC00ODEsNyArNDgzLDcgQEAgYXJtNjQ6IFJvdGF0ZVJpZ2h0MzIgVTpHOjMyLCBVOkc6
MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCwgVG1wCiAgICAgVG1wLCBJbW0sIFRtcAogCi14ODZf
NjQ6IFJvdGF0ZVJpZ2h0NjQgVTpHOjY0LCBVRDpHOjY0Cit4ODZfNjQgYXJtNjQ6IFJvdGF0ZVJp
Z2h0NjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wKiwgVG1wCiAgICAgSW1tLCBUbXAKIApAQCAt
NTA1LDYgKzUwNyw3IEBAIE9yMzIgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKIAogT3IzMiBVOkc6
MzIsIFVaRDpHOjMyCiAgICAgVG1wLCBUbXAKKyAgICBhcm02NDogQml0SW1tLCBUbXAKICAgICB4
ODY6IEltbSwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKICAgICB4ODY6IFRtcCwgSW5kZXgKQEAg
LTUxOSw2ICs1MjIsNyBAQCBPcjMyIFU6RzozMiwgVVpEOkc6MzIKIAogNjQ6IE9yNjQgVTpHOjY0
LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKKyAgICBhcm02NDogQml0SW1tNjQsIFRtcAogICAgIHg4
NjogSW1tLCBUbXAKICAgICB4ODY6IEltbSwgQWRkcgogICAgIHg4NjogSW1tLCBJbmRleApAQCAt
NTM1LDYgKzUzOSw3IEBAIFhvcjMyIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCiAKIFhvcjMyIFU6
RzozMiwgVVpEOkc6MzIKICAgICBUbXAsIFRtcAorICAgIGFybTY0OiBCaXRJbW0sIFRtcAogICAg
IHg4NjogSW1tLCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgogICAgIHg4NjogVG1wLCBJbmRleApA
QCAtNTQ5LDYgKzU1NCw3IEBAIFhvcjMyIFU6RzozMiwgVVpEOkc6MzIKIAogNjQ6IFhvcjY0IFU6
Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCisgICAgYXJtNjQ6IEJpdEltbTY0LCBUbXAKICAg
ICB4ODY6IFRtcCwgQWRkcgogICAgIHg4NjogVG1wLCBJbmRleAogICAgIHg4NjogQWRkciwgVG1w
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433859</attachid>
            <date>2021-07-20 02:00:29 -0700</date>
            <delta_ts>2021-07-20 02:42:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210720040027.patch</filename>
            <type>text/plain</type>
            <size>20090</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMDI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTg1MTNhN2M1Y2U1Y2VkMmQ0YjdhMjA5NTYxMjUzMmRjYTU1YThjLi5jMGY5YmU2MmM5MDA0MTZl
M2ZmNTgwYTc3MmYxYzdjZDIyMjMxOWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MSBAQAorMjAyMS0wNy0yMCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzOjpQcmVJbmRleEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzOjpQ
b3N0SW5kZXhBZGRyZXNzKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6c3RvcmUzMik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAg
ICAgKEpTQzo6dGVzdFN0b3JlUHJlSW1tMzIpOgorICAgICAgICAoSlNDOjp0ZXN0U3RvcmVQcmVJ
bW02NCk6CisgICAgICAgIChKU0M6OnRlc3RTdG9yZVBvc3RJbW0zMik6CisgICAgICAgIChKU0M6
OnRlc3RTdG9yZVBvc3RJbW02NCk6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJlSW1tMzIpOgor
ICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZUltbTY0KToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQ
b3N0SW1tMzIpOgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFBvc3RJbW02NCk6CisgICAgICAgICog
YjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpqc0hhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmR1bXAgY29uc3QpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyQXJnLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cHJl
SW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnBvc3RJbmRleCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNQcmVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNQb3N0SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUCBjb25z
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCBjb25zdCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZEltbTlGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjppc1ZhbGlkRm9ybSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6
YXNQcmVJbmRleEFkZHJlc3MgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFz
UG9zdEluZGV4QWRkcmVzcyBjb25zdCk6CisgICAgICAgICogYjMvYWlyL0Fpckxvd2VyU3RhY2tB
cmdzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG93ZXJTdGFja0FyZ3MpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dl
bmVyYXRvci5yYjoKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTE2ICBZaWppYSBI
dWFuZyAgPHlpamlhX2h1YW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgRXh0ZW5kVHlwZSB0
byBBaXI6OkFyZyBJbmRleCB0byBmdWxseSB1dGlsaXplIGFkZHJlc3MgY29tcHV0YXRpb24gaW4g
bWVtb3J5IGluc3RydWN0aW9uIGZvciBBUk02NApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAppbmRleCAzZDE5NDlh
NDA3ODVkOTljYTYxNTk1YWFiMDRiZTZmMWQwZDk2YmEzLi44NTExZjMxMDcyN2QzNzIxMzNjNjQw
YTc0YzZjNGFmZGI5MmIzZjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaApAQCAtMjQ1LDYgKzI0NSwzNCBA
QCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9OwogCisgICAgLy8gUHJlSW5kZXhBZGRyZXNzOgor
ICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mgd2l0aCBiYXNlIGFkZHJlc3MgYW5k
IHByZS1pbmNyZW1lbnQgb2Zmc2V0LgorICAgIHN0cnVjdCBQcmVJbmRleEFkZHJlc3MgeworICAg
ICAgICBQcmVJbmRleEFkZHJlc3MoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgaW5kZXgpCisgICAgICAg
ICAgICA6IGJhc2UoYmFzZSkKKyAgICAgICAgICAgICwgaW5kZXgoaW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQgYmFzZTsKKyAgICAgICAgUHJlSW5kZXgg
aW5kZXg7CisgICAgfTsKKworICAgIC8vIFBvc3RJbmRleEFkZHJlc3M6CisgICAgLy8KKyAgICAv
LyBEZXNjcmliZXMgYW4gYWRkcmVzcyB3aXRoIGJhc2UgYWRkcmVzcyBhbmQgcG9zdC1pbmNyZW1l
bnQgb2Zmc2V0LgorICAgIHN0cnVjdCBQb3N0SW5kZXhBZGRyZXNzIHsKKyAgICAgICAgUG9zdElu
ZGV4QWRkcmVzcyhSZWdpc3RlcklEIGJhc2UsIGludCBpbmRleCkKKyAgICAgICAgICAgIDogYmFz
ZShiYXNlKQorICAgICAgICAgICAgLCBpbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgUmVnaXN0ZXJJRCBiYXNlOworICAgICAgICBQb3N0SW5kZXggaW5kZXg7Cisg
ICAgfTsKKwogICAgIC8vIEFic29sdXRlQWRkcmVzczoKICAgICAvLwogICAgIC8vIERlc2NyaWJl
cyBhbiBtZW1vcnkgb3BlcmFuZCBnaXZlbiBieSBhIHBvaW50ZXIuICBGb3IgcmVndWxhciBsb2Fk
ICYgc3RvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggODhmMzQwYjQ4M2U5NGYwZjZkYzQyNWY0NDhhNDk2YTVl
ZTEwZmY2Mi4uNGNhMWEwMjc3ZDAyNDFmZTc1MjNkMzJmOGE1ZDFhZjFmYWZlODViNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0LmgKQEAgLTE0MDUsOSArMTQwNSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWQ8NjQ+KGFk
ZHJlc3MsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgbG9hZDY0KFJlZ2lzdGVySUQgc3JjLCBQ
b3N0SW5kZXggc2ltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgbG9hZDY0KFByZUluZGV4
QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVy
Lmxkcjw2ND4oZGVzdCwgc3JjLCBzaW1tKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDY0Pihk
ZXN0LCBzcmMuYmFzZSwgc3JjLmluZGV4KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQ2NChQb3N0
SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubGRyPDY0PihkZXN0LCBzcmMuYmFzZSwgc3JjLmluZGV4KTsKICAgICB9CiAKICAgICBE
YXRhTGFiZWwzMiBsb2FkNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywg
UmVnaXN0ZXJJRCBkZXN0KQpAQCAtMTUwNCw2ICsxNTA5LDE2IEBAIHB1YmxpYzoKICAgICAgICAg
bG9hZDwzMj4oYWRkcmVzcywgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBsb2FkMzIoUHJlSW5k
ZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubGRyPDMyPihkZXN0LCBzcmMuYmFzZSwgc3JjLmluZGV4KTsKKyAgICB9CisKKyAgICB2b2lk
IGxvYWQzMihQb3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihkZXN0LCBzcmMuYmFzZSwgc3JjLmluZGV4KTsKKyAg
ICB9CisKICAgICBEYXRhTGFiZWwzMiBsb2FkMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgRGF0YUxhYmVsMzIg
bGFiZWwodGhpcyk7CkBAIC0xNjkzLDcgKzE3MDgsMTcgQEAgcHVibGljOgogICAgICAgICBtX2Fz
c2VtYmxlci5hZGQ8NjQ+KG1lbW9yeVRlbXBSZWdpc3RlciwgbWVtb3J5VGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLmluZGV4LCBpbmRleEV4dGVuZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOwog
ICAgICAgICBtX2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgYWRkcmVzcy5iYXNlLCBtZW1vcnlUZW1w
UmVnaXN0ZXIpOwogICAgIH0KLSAgICAKKworICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNy
YywgUHJlSW5kZXhBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8
NjQ+KHNyYywgZGVzdC5iYXNlLCBkZXN0LmluZGV4KTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3Jl
NjQoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgpOworICAgIH0K
KwogICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgY29uc3Qgdm9pZCogYWRkcmVzcykK
ICAgICB7CiAgICAgICAgIHN0b3JlPDY0PihzcmMsIGFkZHJlc3MpOwpAQCAtMTczNywxMSArMTc2
Miw2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmU2NChkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNz
KTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCwgUG9zdEluZGV4IHNpbW0pCi0gICAgewotICAgICAgICBtX2Fzc2VtYmxlci5zdHI8NjQ+
KHNyYywgZGVzdCwgc2ltbSk7Ci0gICAgfQotICAgIAogICAgIERhdGFMYWJlbDMyIHN0b3JlNjRX
aXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCiAg
ICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKQEAgLTE4MzksNiArMTg1OSwx
NiBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7
CiAgICAgfQogCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBQcmVJbmRleEFkZHJl
c3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjwzMj4oc3JjLCBkZXN0LmJh
c2UsIGRlc3QuaW5kZXgpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNy
YywgUG9zdEluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Ry
PDMyPihzcmMsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCk7CisgICAgfQorCiAgICAgRGF0YUxhYmVs
MzIgc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3Mg
YWRkcmVzcykKICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAppbmRleCA3MWNkMjM5OThj
ZTdhMjQxMjAxOTZkMGYwNDU2MjQ2ZDE0ZDkxOGE3Li5iNGM3OWU4YzllNzhjZTZiNjlmMDczYzcy
YzgzOTRiYWJiN2M1OWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL3Rlc3RtYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rl
c3RtYXNtLmNwcApAQCAtMjAyMCw2ICsyMDIwLDQ2IEBAIHZvaWQgdGVzdFN1YldpdGhVbnNpZ25l
ZFJpZ2h0U2hpZnQ2NCgpCiAgICAgICAgIH0KICAgICB9CiB9CisKK3ZvaWQgdGVzdFN0b3JlUHJl
SW1tMzIoKQoreworICAgIAorfQorCit2b2lkIHRlc3RTdG9yZVByZUltbTY0KCkKK3sKKworfQor
Cit2b2lkIHRlc3RTdG9yZVBvc3RJbW0zMigpCit7CisKK30KKwordm9pZCB0ZXN0U3RvcmVQb3N0
SW1tNjQoKQoreworCit9CisKK3ZvaWQgdGVzdExvYWRQcmVJbW0zMigpCit7CisKK30KKwordm9p
ZCB0ZXN0TG9hZFByZUltbTY0KCkKK3sKKworfQorCit2b2lkIHRlc3RMb2FkUG9zdEltbTMyKCkK
K3sKKworfQorCit2b2lkIHRlc3RMb2FkUG9zdEltbTY0KCkKK3sKKworfQogI2VuZGlmCiAKICNp
ZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCkBAIC00Mjc0LDYgKzQzMTQs
MTUgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKSBXVEZfSUdOT1JFU19USFJFQURfU0FG
RVRZX0FOQUxZU0lTCiAgICAgUlVOKHRlc3RTdWJXaXRoTGVmdFNoaWZ0NjQoKSk7CiAgICAgUlVO
KHRlc3RTdWJXaXRoUmlnaHRTaGlmdDY0KCkpOwogICAgIFJVTih0ZXN0U3ViV2l0aFVuc2lnbmVk
UmlnaHRTaGlmdDY0KCkpOworCisgICAgUlVOKHRlc3RTdG9yZVByZUltbTMyKCkpOworICAgIFJV
Tih0ZXN0U3RvcmVQcmVJbW02NCgpKTsKKyAgICBSVU4odGVzdFN0b3JlUG9zdEltbTMyKCkpOwor
ICAgIFJVTih0ZXN0U3RvcmVQb3N0SW1tNjQoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlSW1tMzIo
KSk7CisgICAgUlVOKHRlc3RMb2FkUHJlSW1tNjQoKSk7CisgICAgUlVOKHRlc3RMb2FkUG9zdElt
bTMyKCkpOworICAgIFJVTih0ZXN0TG9hZFBvc3RJbW02NCgpKTsKICNlbmRpZgogCiAjaWYgQ1BV
KEFSTTY0RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9B
aXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXgg
NjNhNmZiMTJmYTUyMmNkYWRhZGJiYTk5ZmY2MjlkNzg3OGEwODQ0OC4uNDYzZDBjZmVjOTYzOGNi
MzY4NDNjNDI4MTczODQyZWY0Mzc5OTE4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJUb0Fpci5jcHAKQEAgLTExMjksMTIgKzExMjksMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBjYXNlIEFpcjo6TW92ZTMyOgotICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZv
cm0oU3RvcmUzMiwgQXJnOjpaZXJvUmVnLCBkZXN0LmtpbmQoKSkgJiYgZGVzdC5pc1ZhbGlkRm9y
bShXaWR0aDMyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KFN0b3JlMzIs
IG1fdmFsdWUsIHplcm9SZWcoKSwgZGVzdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1Zh
bGlkRm9ybShNb3ZlMzIsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxp
ZEZvcm0oV2lkdGgzMikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChNb3Zl
MzIsIG1fdmFsdWUsIHplcm9SZWcoKSwgZGVzdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGNhc2UgQWlyOjpNb3ZlOgotICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNWYWxpZEZvcm0oU3RvcmU2NCwgQXJnOjpaZXJvUmVnLCBkZXN0LmtpbmQoKSkgJiYgZGVz
dC5pc1ZhbGlkRm9ybShXaWR0aDY0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJ
bnN0KFN0b3JlNjQsIG1fdmFsdWUsIHplcm9SZWcoKSwgZGVzdCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpc1ZhbGlkRm9ybShNb3ZlLCBBcmc6Olplcm9SZWcsIGRlc3Qua2luZCgpKSAmJiBk
ZXN0LmlzVmFsaWRGb3JtKFdpZHRoNjQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEluc3QoTW92ZSwgbV92YWx1ZSwgemVyb1JlZygpLCBkZXN0KTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCmluZGV4IDEwM2M2ZWNjYTNkMzE0YmI0ZWQ4YzAyYTRk
MmYwMDljYTY0MWQwMDEuLmI1MDMzZTAyZjI1ODgwOTdiOTVjYjVjOWZmN2M3MmQzMDk0NDQ4YWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKQEAgLTEzMCw2ICsxMzAs
MTEgQEAgdW5zaWduZWQgQXJnOjpqc0hhc2goKSBjb25zdAogICAgICAgICByZXN1bHQgKz0gbV9i
YXNlLmludGVybmFsVmFsdWUoKTsKICAgICAgICAgcmVzdWx0ICs9IG1faW5kZXguaW50ZXJuYWxW
YWx1ZSgpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFByZUluZGV4OgorICAgIGNhc2UgUG9z
dEluZGV4OgorICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb2Zmc2V0
KTsKKyAgICAgICAgcmVzdWx0ICs9IG1fYmFzZS5pbnRlcm5hbFZhbHVlKCk7CisgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9zY2FsZSk7CiAgICAgICAgIHJlc3VsdCArPSBzdGFja1Nsb3QoKS0+aW5kZXgoKTsK
QEAgLTE2MSw3ICsxNjYsNyBAQCB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIHVu
c2lnbmVkPihtX29mZnNldCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBaZXJvUmVnOgot
ICAgICAgICBvdXQucHJpbnQoIiUleHpyIik7CisgICAgICAgIG91dC5wcmludCgiJXh6ciIpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTaW1wbGVBZGRyOgogICAgICAgICBvdXQucHJpbnQo
IigiLCBiYXNlKCksICIpIik7CkBAIC0xODAsNiArMTg1LDEyIEBAIHZvaWQgQXJnOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgp
KTsKICAgICAgICAgb3V0LnByaW50KCIpIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBy
ZUluZGV4OgorICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIsIiwgb2Zmc2V0KCksICIp
ISIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAgIG91dC5w
cmludCgiKCIsIGJhc2UoKSwgIiwiLCBvZmZzZXQoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGlmIChvZmZzZXQoKSkKICAgICAgICAgICAgIG91dC5w
cmludChvZmZzZXQoKSk7CkBAIC0yNjEsNiArMjcyLDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBBcmc6OktpbmQga2luZCkKICAgICBjYXNlIEFyZzo6SW5kZXg6CiAg
ICAgICAgIG91dC5wcmludCgiSW5kZXgiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJn
OjpQcmVJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQcmVJbmRleCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBcmc6OlBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQb3N0SW5k
ZXgiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpSZWxDb25kOgogICAgICAgICBv
dXQucHJpbnQoIlJlbENvbmQiKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmgKaW5kZXggY2U1YTRlNzM3OWFkNjQ0NDVmMGMzYWJkMTI5ZjMyOWI5NDdm
ZTgxMi4uNDlhNmI2MGE0ZjczYzQ1MmRlZWY1ZWQ1NzVhZDJmMzk2ZWE1NWYxYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCkBAIC03Nyw2ICs3Nyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgU3RhY2ssCiAgICAgICAgIENhbGxBcmcsCiAgICAgICAgIEluZGV4LAorICAgICAgICBQ
cmVJbmRleCwKKyAgICAgICAgUG9zdEluZGV4LAogCiAgICAgICAgIC8vIEltbWVkaWF0ZSBvcGVy
YW5kcyB0aGF0IGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3Igb2YgYW4gb3BlcmF0aW9uLiBZb3UgY2Fu
IHRoaW5rIG9mIHRoZW0gYXMKICAgICAgICAgLy8gc2Vjb25kYXJ5IG9wY29kZXMuIFRoZXkgYXJl
IGFsd2F5cyAiVXNlIidkLgpAQCAtNjQ5LDYgKzY1MSwyOCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBBcmc6OmluZGV4KGJhc2UsIGluZGV4LCBzY2FsZSwgMCk7CiAgICAgfQogCisgICAgc3Rh
dGljIEFyZyBwcmVJbmRleChBaXI6OlRtcCBiYXNlLCBpbnQgaW5kZXgpCisgICAgeworICAgICAg
ICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNJbnQ5KGluZGV4KSk7Cisg
ICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQcmVJbmRleDsKKyAg
ICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGlu
ZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgcG9z
dEluZGV4KEFpcjo6VG1wIGJhc2UsIGludCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChi
YXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc0ludDkoaW5kZXgpKTsKKyAgICAgICAgQXJn
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFBvc3RJbmRleDsKKyAgICAgICAgcmVz
dWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGluZGV4OworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIHN0YXRpYyBBcmcgcmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiAgICAgewogICAgICAg
ICBBcmcgcmVzdWx0OwpAQCAtNzk5LDYgKzgyMywxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBraW5kKCkgPT0gSW5kZXg7CiAgICAgfQogCisgICAgYm9vbCBpc1ByZUluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUHJlSW5kZXg7CisgICAgfQorCisgICAg
Ym9vbCBpc1Bvc3RJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09
IFBvc3RJbmRleDsKKyAgICB9CisKICAgICBib29sIGlzTWVtb3J5KCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CkBAIC05ODIsNyArMTAxNiw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGlmIChraW5kKCkgPT0gU3RhY2spCiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG1fc2NhbGUpOwotICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IEFkZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0g
Q2FsbEFyZyB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFk
ZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gQ2FsbEFyZyB8
fCBraW5kKCkgPT0gSW5kZXggfHwga2luZCgpID09IFByZUluZGV4IHx8IGtpbmQoKSA9PSBQb3N0
SW5kZXgpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG1f
b2Zmc2V0KTsKICAgICB9CiAKQEAgLTEwNDQsNiArMTA3OCw4IEBAIHB1YmxpYzoKICAgICAgICAg
Y2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKICAgICAgICAgY2Fz
ZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6
CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAgICAgY2Fz
ZSBSZWxDb25kOgpAQCAtMTA4MSw2ICsxMTE3LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEFk
ZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgogICAgICAgICBjYXNlIEluZGV4
OgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAg
ICAgY2FzZSBTdGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBjYXNlIEJpZ0lt
bTogLy8gWWVzLCB3ZSBhbGxvdyBCaWdJbW0gYXMgYSBkb3VibGUgaW1tZWRpYXRlLiBXZSB1c2Ug
dGhpcyBmb3IgaW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KQEAgLTEyMzcsNiArMTI3NSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBzdGF0aWMgYm9vbCBp
c1ZhbGlkSW1tOUZvcm0oaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0lu
dDkodmFsdWUpOworICAgIH0KKwogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgd2lkdGggdGhl
biB0aGlzIG9wdGltaXN0aWNhbGx5IGFzc3VtZXMgdGhhdCB5b3UncmUgdXNpbmcgdGhlIHJpZ2h0
IHdpZHRoLiBCdXQKICAgICAvLyB0aGUgd2lkdGggaXMgcmVsZXZhbnQgdG8gdmFsaWRpdHksIHNv
IHBhc3NpbmcgYSBudWxsIHdpZHRoIGlzIG9ubHkgdXNlZnVsIGZvciBhc3NlcnRpb25zLiBEb24n
dAogICAgIC8vIHBhc3MgbnVsbCB3aWR0aHMgd2hlbiBjYXNjYWRpbmcgdGhyb3VnaCBBcmdzIGlu
IHRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciEKQEAgLTEyNjUsNiArMTMwOCw5IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkQWRkckZvcm0ob2Zmc2V0KCksIHdpZHRoKTsKICAg
ICAgICAgY2FzZSBJbmRleDoKICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkSW5kZXhGb3JtKHNj
YWxlKCksIG9mZnNldCgpLCB3aWR0aCk7CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAg
IGNhc2UgUG9zdEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRJbW05Rm9ybShvZmZz
ZXQoKSk7CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAg
ICAgICBjYXNlIERvdWJsZUNvbmQ6CkBAIC0xMzgzLDYgKzE0MjksMTggQEAgcHVibGljOgogICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG1fb2Zmc2V0KSwgbV9leHRl
bmQpOwogICAgIH0KIAorICAgIE1hY3JvQXNzZW1ibGVyOjpQcmVJbmRleEFkZHJlc3MgYXNQcmVJ
bmRleEFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUHJlSW5kZXgoKSk7
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzKG1fYmFzZS5n
cHIoKSwgb2Zmc2V0KCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhB
ZGRyZXNzIGFzUG9zdEluZGV4QWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aXNQb3N0SW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4
QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIG9mZnNldCgpKTsKKyAgICB9CisKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBhc1JlbGF0aW9uYWxDb25kaXRpb24oKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKGlzUmVsQ29uZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAKaW5kZXggOTA1ZTYxN2ZiZGUw
ZTJiN2Q3NTU1NjNlNjg4NTg5YmRhZDcyNmM4MC4uNmFkMDU4NDI2N2I4YzdlZTcxNDliMDJmODIz
MTU3MmJlZThjZjhhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJMb3dlclN0YWNrQXJncy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJMb3dlclN0YWNrQXJncy5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCB2b2lkIGxvd2VyU3RhY2tB
cmdzKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQod2lkdGggPT0gV2lkdGgzMik7CiAKICNpZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWlyOjpPcGNvZGUgc3RvcmVPcGNvZGUgPSBTdG9yZTMyOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlID0gTW92ZTMyOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFpcjo6QXJnOjpLaW5kIG9wZXJhbmRLaW5kID0gQXJn
OjpaZXJvUmVnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFpcjo6QXJnIG9wZXJhbmQg
PSBBcmc6Onplcm9SZWcoKTsKICNlbGlmIENQVShYODZfNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRleCA1OTFkYTNhNDRmODVlMDA5NmRh
NmQyNzgwOWVjOTkyYjhiZTE1NWVjLi5lNTk2NGEzMDlmYTcyMjNlYjMyMjlkZjY0YjY4MWE3YWZi
ZDdjODY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29k
ZS5vcGNvZGVzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9w
Y29kZXMKQEAgLTY0Nyw2ICs2NDcsMTIgQEAgTW92ZSBVOkc6UHRyLCBEOkc6UHRyCiAgICAgSW5k
ZXgsIFRtcCBhcyBsb2FkUHRyCiAgICAgVG1wLCBBZGRyIGFzIHN0b3JlUHRyCiAgICAgVG1wLCBJ
bmRleCBhcyBzdG9yZVB0cgorICAgIGFybTY0OiBaZXJvUmVnLCBBZGRyIGFzIHN0b3JlNjQKKyAg
ICBhcm02NDogWmVyb1JlZywgSW5kZXggYXMgc3RvcmU2NAorICAgIGFybTY0OiBQcmVJbmRleCwg
VG1wIGFzIGxvYWQ2NAorICAgIGFybTY0OiBQb3N0SW5kZXgsIFRtcCBhcyBsb2FkNjQKKyAgICBh
cm02NDogVG1wLCBQcmVJbmRleCBhcyBzdG9yZTY0CisgICAgYXJtNjQ6IFRtcCwgUG9zdEluZGV4
IGFzIHN0b3JlNjQKICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZVB0cgogCiAjIFRoaXMgaXMg
Zm9yIG1vdmluZyBiZXR3ZWVuIHNwaWxsIHNsb3RzLgpAQCAtNjY3LDYgKzY3MywxMiBAQCBNb3Zl
MzIgVTpHOjMyLCBaRDpHOjMyCiAgICAgSW5kZXgsIFRtcCBhcyBsb2FkMzIKICAgICBUbXAsIEFk
ZHIgYXMgc3RvcmUzMgogICAgIFRtcCwgSW5kZXggYXMgc3RvcmUzMgorICAgIGFybTY0OiBaZXJv
UmVnLCBBZGRyIGFzIHN0b3JlMzIKKyAgICBhcm02NDogWmVyb1JlZywgSW5kZXggYXMgc3RvcmUz
MgorICAgIGFybTY0OiBQcmVJbmRleCwgVG1wIGFzIGxvYWQzMgorICAgIGFybTY0OiBQb3N0SW5k
ZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBhcm02NDogVG1wLCBQcmVJbmRleCBhcyBzdG9yZTMyCisg
ICAgYXJtNjQ6IFRtcCwgUG9zdEluZGV4IGFzIHN0b3JlMzIKICAgICB4ODY6IEltbSwgVG1wIGFz
IHplcm9FeHRlbmQzMlRvV29yZAogICAgIHg4NjogSW1tLCBBZGRyIGFzIHN0b3JlMzIKICAgICB4
ODY6IEltbSwgSW5kZXggYXMgc3RvcmUzMgpAQCAtNjc1LDE0ICs2ODcsNiBAQCBNb3ZlMzIgVTpH
OjMyLCBaRDpHOjMyCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyLCBTOkc6MzIKICAgICBBZGRyLCBB
ZGRyLCBUbXAKIAotYXJtNjQ6IFN0b3JlMzIgVTpHOjMyLCBaRDpHOjMyCi0gICAgWmVyb1JlZywg
QWRkcgotICAgIFplcm9SZWcsIEluZGV4Ci0KLWFybTY0OiBTdG9yZTY0IFU6Rzo2NCwgRDpHOjY0
Ci0gICAgWmVyb1JlZywgQWRkcgotICAgIFplcm9SZWcsIEluZGV4Ci0KIFNpZ25FeHRlbmQzMlRv
UHRyIFU6RzozMiwgRDpHOlB0cgogICAgIFRtcCwgVG1wCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgppbmRleCAzNzQwZWZkYmRkMTQ2YTM3
ZjZlZGU5ZGRiYzIzZGRiYTAzYjA3NjQ2Li4yZWJjYTczMGU1MWJhYmRhY2UwZTA4MWFkNDA4NTU0
YzIxYThhODQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29k
ZV9nZW5lcmF0b3IucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVf
Z2VuZXJhdG9yLnJiCkBAIC0yMjksNyArMjI5LDcgQEAgZGVmIGlzR0YodG9rZW4pCiBlbmQKIAog
ZGVmIGlzS2luZCh0b2tlbikKLSAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8
KEJpdEltbSl8KEJpdEltbTY0KXwoWmVyb1JlZyl8KFNpbXBsZUFkZHIpfChBZGRyKXwoRXh0ZW5k
ZWRPZmZzZXRBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChT
dGF0dXNDb25kKSlcWi8KKyAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJp
dEltbSl8KEJpdEltbTY0KXwoWmVyb1JlZyl8KFNpbXBsZUFkZHIpfChBZGRyKXwoRXh0ZW5kZWRP
ZmZzZXRBZGRyKXwoSW5kZXgpfChQcmVJbmRleCl8KFBvc3RJbmRleCl8KFJlbENvbmQpfChSZXND
b25kKXwoRG91YmxlQ29uZCl8KFN0YXR1c0NvbmQpKVxaLwogZW5kCiAKIGRlZiBpc0FyY2godG9r
ZW4pCkBAIC0zMDMsNyArMzAzLDcgQEAgY2xhc3MgUGFyc2VyCiAKICAgICBkZWYgY29uc3VtZUtp
bmQKICAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCi0gICAgICAgIHBhcnNlRXJyb3IoIkV4
cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0LCBaZXJvUmVnLCBUbXAs
IFNpbXBsZUFkZHIsIEFkZHIsIEV4dGVuZGVkT2Zmc2V0QWRkciwgSW5kZXgsIFJlbENvbmQsIFJl
c0NvbmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQp
CisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1tLCBCaXRJbW0s
IEJpdEltbTY0LCBaZXJvUmVnLCBUbXAsIFNpbXBsZUFkZHIsIEFkZHIsIEV4dGVuZGVkT2Zmc2V0
QWRkciwgSW5kZXgsIFByZUluZGV4LCBQb3N0SW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJs
ZUNvbmQsIG9yIFN0YXR1c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCiAgICAgICAgIGFk
dmFuY2UKICAgICAgICAgcmVzdWx0CiAgICAgZW5kCkBAIC05MjksNiArOTI5LDEyIEBAIHdyaXRl
SCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4IgogICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkSW5kZXhGb3JtKGFy
Z3NbI3tpbmRleH1dLnNjYWxlKCksIGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpLCAje2FyZy53aWR0
aENvZGV9KSkiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZh
bHNlKTsiCisgICAgICAgICAgICAgICAgd2hlbiAiUHJlSW5kZXgiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRJbW05Rm9ybShhcmdzWyN7aW5kZXh9XS5v
ZmZzZXQoKSkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihm
YWxzZSk7IgorICAgICAgICAgICAgICAgIHdoZW4gIlBvc3RJbmRleCIKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZEltbTlGb3JtKGFyZ3NbI3tpbmRleH1d
Lm9mZnNldCgpKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJO
KGZhbHNlKTsiCiAgICAgICAgICAgICAgICAgd2hlbiAiQmlnSW1tIgogICAgICAgICAgICAgICAg
IHdoZW4gIlJlbENvbmQiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKQEAgLTEyMzUs
NiArMTI0MSwxMCBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNBZGRyZXNzKCkiCiAgICAgICAgICAg
ICAgICAgd2hlbiAiSW5kZXgiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3Nb
I3tpbmRleH1dLmFzQmFzZUluZGV4KCkiCisgICAgICAgICAgICAgICAgd2hlbiAiUHJlSW5kZXgi
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUHJlSW5k
ZXhBZGRyZXNzKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiUG9zdEluZGV4IgorICAgICAgICAg
ICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Bvc3RJbmRleEFkZHJlc3Mo
KSIKICAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAgICAgICBv
dXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKICAgICAg
ICAgICAgICAgICB3aGVuICJSZXNDb25kIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKaW5kZXggNjNlMjY2Nzg4NTIwMThhNzY4MGNhNWYw
NzE0Njk2ODEwNTg4NGIzYi4uNjliYjZiMmJlODE4NzBiNTk4MzMzNjdhZjI2NzViN2Y0ZWYwNTZm
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwCkBAIC0yMzMsOCArMjMzLDggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJhdG8KICAgICBq
aXQucmV0KCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9jYWwwID0gaml0LmxhYmVs
KCk7Ci0gICAgaml0LmxvYWQ2NCh4MSwgUG9zdEluZGV4KDgpLCB4Nik7Ci0gICAgaml0LnN0b3Jl
NjQoeDYsIHgzLCBQb3N0SW5kZXgoOCkpOworICAgIGppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OlBvc3RJbmRleEFkZHJlc3MoeDEsIDgpLCB4Nik7CisgICAgaml0LnN0b3JlNjQoeDYsIE1hY3Jv
QXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgzLCA4KSk7CiAgICAgc21hbGxDb3B5Lmxpbmso
JmppdCk7CiAgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IFRydXN0ZWRJbW0zMig4KSwgeDIpLmxpbmtUbyhsb2NhbDAsICZqaXQpOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGxvY2FsMiA9IGppdC5icmFuY2hBZGQ2NChNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIFRydXN0ZWRJbW0zMig4KSwgeDIpOwo=
</data>
<flag name="commit-queue"
          id="456222"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433864</attachid>
            <date>2021-07-20 02:34:39 -0700</date>
            <delta_ts>2021-07-20 13:33:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210720043438.patch</filename>
            <type>text/plain</type>
            <size>20163</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMDI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTg1MTNhN2M1Y2U1Y2VkMmQ0YjdhMjA5NTYxMjUzMmRjYTU1YThjLi5jMGY5YmU2MmM5MDA0MTZl
M2ZmNTgwYTc3MmYxYzdjZDIyMjMxOWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MSBAQAorMjAyMS0wNy0yMCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzOjpQcmVJbmRleEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzOjpQ
b3N0SW5kZXhBZGRyZXNzKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6c3RvcmUzMik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAg
ICAgKEpTQzo6dGVzdFN0b3JlUHJlSW1tMzIpOgorICAgICAgICAoSlNDOjp0ZXN0U3RvcmVQcmVJ
bW02NCk6CisgICAgICAgIChKU0M6OnRlc3RTdG9yZVBvc3RJbW0zMik6CisgICAgICAgIChKU0M6
OnRlc3RTdG9yZVBvc3RJbW02NCk6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJlSW1tMzIpOgor
ICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZUltbTY0KToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQ
b3N0SW1tMzIpOgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFBvc3RJbW02NCk6CisgICAgICAgICog
YjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpqc0hhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmR1bXAgY29uc3QpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyQXJnLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cHJl
SW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnBvc3RJbmRleCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNQcmVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNQb3N0SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUCBjb25z
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCBjb25zdCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZEltbTlGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjppc1ZhbGlkRm9ybSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6
YXNQcmVJbmRleEFkZHJlc3MgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFz
UG9zdEluZGV4QWRkcmVzcyBjb25zdCk6CisgICAgICAgICogYjMvYWlyL0Fpckxvd2VyU3RhY2tB
cmdzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG93ZXJTdGFja0FyZ3MpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dl
bmVyYXRvci5yYjoKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTE2ICBZaWppYSBI
dWFuZyAgPHlpamlhX2h1YW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgRXh0ZW5kVHlwZSB0
byBBaXI6OkFyZyBJbmRleCB0byBmdWxseSB1dGlsaXplIGFkZHJlc3MgY29tcHV0YXRpb24gaW4g
bWVtb3J5IGluc3RydWN0aW9uIGZvciBBUk02NApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAppbmRleCAzZDE5NDlh
NDA3ODVkOTljYTYxNTk1YWFiMDRiZTZmMWQwZDk2YmEzLi40YThmZjgzM2YxYTNiZjI5NjViNzg4
OTZiNWViNmU5M2I2OTMzZTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaApAQCAtMjQ1LDYgKzI0NSwzNCBA
QCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9OwogCisgICAgLy8gUHJlSW5kZXhBZGRyZXNzOgor
ICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mgd2l0aCBiYXNlIGFkZHJlc3MgYW5k
IHByZS1pbmNyZW1lbnQgb2Zmc2V0LgorICAgIHN0cnVjdCBQcmVJbmRleEFkZHJlc3MgeworICAg
ICAgICBQcmVJbmRleEFkZHJlc3MoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgaW5kZXgpCisgICAgICAg
ICAgICA6IGJhc2UoYmFzZSkKKyAgICAgICAgICAgICwgaW5kZXgoaW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQgYmFzZTsKKyAgICAgICAgaW50IGluZGV4
OworICAgIH07CisKKyAgICAvLyBQb3N0SW5kZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVz
Y3JpYmVzIGFuIGFkZHJlc3Mgd2l0aCBiYXNlIGFkZHJlc3MgYW5kIHBvc3QtaW5jcmVtZW50IG9m
ZnNldC4KKyAgICBzdHJ1Y3QgUG9zdEluZGV4QWRkcmVzcyB7CisgICAgICAgIFBvc3RJbmRleEFk
ZHJlc3MoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFz
ZSkKKyAgICAgICAgICAgICwgaW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZ2lzdGVySUQgYmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKICAg
ICAvLyBBYnNvbHV0ZUFkZHJlc3M6CiAgICAgLy8KICAgICAvLyBEZXNjcmliZXMgYW4gbWVtb3J5
IG9wZXJhbmQgZ2l2ZW4gYnkgYSBwb2ludGVyLiAgRm9yIHJlZ3VsYXIgbG9hZCAmIHN0b3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oCmluZGV4IDg4ZjM0MGI0ODNlOTRmMGY2ZGM0MjVmNDQ4YTQ5NmE1ZWUxMGZmNjIuLmJm
Yjk0MmZkYjdkNjBmZGJlY2VmYjQ1NzhiZGYxNjU4OTIxMDRhN2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0x
NDA1LDkgKzE0MDUsMTQgQEAgcHVibGljOgogICAgICAgICBsb2FkPDY0PihhZGRyZXNzLCBkZXN0
KTsKICAgICB9CiAKLSAgICB2b2lkIGxvYWQ2NChSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4IHNp
bW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIGxvYWQ2NChQcmVJbmRleEFkZHJlc3Mgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRl
c3QsIHNyYywgc2ltbSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLmJh
c2UsIFByZUluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZDY0KFBvc3RJ
bmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sZHI8NjQ+KGRlc3QsIHNyYy5iYXNlLCBQb3N0SW5kZXgoc3JjLmluZGV4KSk7CiAgICAg
fQogCiAgICAgRGF0YUxhYmVsMzIgbG9hZDY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNz
IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKQEAgLTE1MDQsNiArMTUwOSwxNiBAQCBwdWJsaWM6
CiAgICAgICAgIGxvYWQ8MzI+KGFkZHJlc3MsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbG9h
ZDMyKFByZUluZGV4QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxkcjwzMj4oZGVzdCwgc3JjLmJhc2UsIFByZUluZGV4KHNyYy5pbmRleCkp
OworICAgIH0KKworICAgIHZvaWQgbG9hZDMyKFBvc3RJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5i
YXNlLCBQb3N0SW5kZXgoc3JjLmluZGV4KSk7CisgICAgfQorCiAgICAgRGF0YUxhYmVsMzIgbG9h
ZDMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTY5Myw3ICsx
NzA4LDE3IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0PihtZW1vcnlUZW1w
UmVnaXN0ZXIsIG1lbW9yeVRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRU
eXBlKGFkZHJlc3MpLCBhZGRyZXNzLnNjYWxlKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0
PihzcmMsIGFkZHJlc3MuYmFzZSwgbWVtb3J5VGVtcFJlZ2lzdGVyKTsKICAgICB9Ci0gICAgCisK
KyAgICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4QWRkcmVzcyBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QuYmFzZSwgUHJlSW5k
ZXgoZGVzdC5pbmRleCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNy
YywgUG9zdEluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Ry
PDY0PihzcmMsIGRlc3QuYmFzZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKICAg
ICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIGNvbnN0IHZvaWQqIGFkZHJlc3MpCiAgICAg
ewogICAgICAgICBzdG9yZTw2ND4oc3JjLCBhZGRyZXNzKTsKQEAgLTE3MzcsMTEgKzE3NjIsNiBA
QCBwdWJsaWM6CiAgICAgICAgIHN0b3JlNjQoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CiAg
ICAgfQogCi0gICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qs
IFBvc3RJbmRleCBzaW1tKQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMs
IGRlc3QsIHNpbW0pOwotICAgIH0KLSAgICAKICAgICBEYXRhTGFiZWwzMiBzdG9yZTY0V2l0aEFk
ZHJlc3NPZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsK
ICAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CkBAIC0xODM5LDYgKzE4NTksMTYgQEAg
cHVibGljOgogICAgICAgICBzdG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAg
IH0KIAorICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgUHJlSW5kZXhBZGRyZXNzIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgZGVzdC5iYXNlLCBQ
cmVJbmRleChkZXN0LmluZGV4KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVy
SUQgc3JjLCBQb3N0SW5kZXhBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5zdHI8MzI+KHNyYywgZGVzdC5iYXNlLCBQb3N0SW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0K
KwogICAgIERhdGFMYWJlbDMyIHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVy
SUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJl
bCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVz
dG1hc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAK
aW5kZXggNzFjZDIzOTk4Y2U3YTI0MTIwMTk2ZDBmMDQ1NjI0NmQxNGQ5MThhNy4uYjRjNzllOGM5
ZTc4Y2U2YjY5ZjA3M2M3MmM4Mzk0YmFiYjdjNTliOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKQEAgLTIwMjAsNiArMjAyMCw0NiBAQCB2b2lkIHRl
c3RTdWJXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKQogICAgICAgICB9CiAgICAgfQogfQorCit2
b2lkIHRlc3RTdG9yZVByZUltbTMyKCkKK3sKKyAgICAKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVJ
bW02NCgpCit7CisKK30KKwordm9pZCB0ZXN0U3RvcmVQb3N0SW1tMzIoKQoreworCit9CisKK3Zv
aWQgdGVzdFN0b3JlUG9zdEltbTY0KCkKK3sKKworfQorCit2b2lkIHRlc3RMb2FkUHJlSW1tMzIo
KQoreworCit9CisKK3ZvaWQgdGVzdExvYWRQcmVJbW02NCgpCit7CisKK30KKwordm9pZCB0ZXN0
TG9hZFBvc3RJbW0zMigpCit7CisKK30KKwordm9pZCB0ZXN0TG9hZFBvc3RJbW02NCgpCit7CisK
K30KICNlbmRpZgogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpA
QCAtNDI3NCw2ICs0MzE0LDE1IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lH
Tk9SRVNfVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwogICAgIFJVTih0ZXN0U3ViV2l0aExlZnRTaGlm
dDY0KCkpOwogICAgIFJVTih0ZXN0U3ViV2l0aFJpZ2h0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVz
dFN1YldpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0U3RvcmVQcmVJ
bW0zMigpKTsKKyAgICBSVU4odGVzdFN0b3JlUHJlSW1tNjQoKSk7CisgICAgUlVOKHRlc3RTdG9y
ZVBvc3RJbW0zMigpKTsKKyAgICBSVU4odGVzdFN0b3JlUG9zdEltbTY0KCkpOworICAgIFJVTih0
ZXN0TG9hZFByZUltbTMyKCkpOworICAgIFJVTih0ZXN0TG9hZFByZUltbTY0KCkpOworICAgIFJV
Tih0ZXN0TG9hZFBvc3RJbW0zMigpKTsKKyAgICBSVU4odGVzdExvYWRQb3N0SW1tNjQoKSk7CiAj
ZW5kaWYKIAogI2lmIENQVShBUk02NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCmluZGV4IDYzYTZmYjEyZmE1MjJjZGFkYWRiYmE5OWZmNjI5ZDc4NzhhMDg0NDgu
LjQ2M2QwY2ZlYzk2MzhjYjM2ODQzYzQyODE3Mzg0MmVmNDM3OTkxODkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0xMTI5LDEyICsxMTI5LDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgY2FzZSBBaXI6Ok1vdmUzMjoKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzVmFsaWRGb3JtKFN0b3JlMzIsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYm
IGRlc3QuaXNWYWxpZEZvcm0oV2lkdGgzMikpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSW5zdChTdG9yZTMyLCBtX3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNWYWxpZEZvcm0oTW92ZTMyLCBBcmc6Olplcm9SZWcsIGRlc3Qua2luZCgp
KSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdpZHRoMzIpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEluc3QoTW92ZTMyLCBtX3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIEFpcjo6TW92ZToKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFN0b3JlNjQsIEFyZzo6WmVyb1JlZywgZGVz
dC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0oV2lkdGg2NCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gSW5zdChTdG9yZTY0LCBtX3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oTW92ZSwgQXJnOjpaZXJvUmVnLCBk
ZXN0LmtpbmQoKSkgJiYgZGVzdC5pc1ZhbGlkRm9ybShXaWR0aDY0KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBJbnN0KE1vdmUsIG1fdmFsdWUsIHplcm9SZWcoKSwgZGVzdCk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAppbmRleCAxMDNjNmVjY2Ez
ZDMxNGJiNGVkOGMwMmE0ZDJmMDA5Y2E2NDFkMDAxLi5iNTAzM2UwMmYyNTg4MDk3Yjk1Y2I1Yzlm
ZjdjNzJkMzA5NDQ0OGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3Bw
CkBAIC0xMzAsNiArMTMwLDExIEBAIHVuc2lnbmVkIEFyZzo6anNIYXNoKCkgY29uc3QKICAgICAg
ICAgcmVzdWx0ICs9IG1fYmFzZS5pbnRlcm5hbFZhbHVlKCk7CiAgICAgICAgIHJlc3VsdCArPSBt
X2luZGV4LmludGVybmFsVmFsdWUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcmVJbmRl
eDoKKyAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX29mZnNldCk7CisgICAgICAgIHJlc3VsdCArPSBtX2Jhc2UuaW50ZXJuYWxWYWx1
ZSgpOworICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YWNrOgogICAgICAgICByZXN1bHQgKz0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2NhbGUpOwogICAgICAgICByZXN1bHQgKz0gc3RhY2tT
bG90KCktPmluZGV4KCk7CkBAIC0xNjEsNyArMTY2LDcgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50ZigiJDB4JWxseCIsIHN0YXRpY19j
YXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4obV9vZmZzZXQpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgWmVyb1JlZzoKLSAgICAgICAgb3V0LnByaW50KCIlJXh6ciIpOworICAgICAgICBvdXQu
cHJpbnQoIiV4enIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2ltcGxlQWRkcjoKICAg
ICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOwpAQCAtMTgwLDYgKzE4NSwxMiBAQCB2
b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICAgICAgb3V0LnBy
aW50KCIsIiwgc2NhbGUoKSk7CiAgICAgICAgIG91dC5wcmludCgiKSIpOwogICAgICAgICByZXR1
cm47CisgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAi
LCIsIG9mZnNldCgpLCAiKSEiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUG9zdEluZGV4
OgorICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIsIiwgb2Zmc2V0KCksICIpIik7Cisg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIFN0YWNrOgogICAgICAgICBpZiAob2Zmc2V0KCkpCiAg
ICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOwpAQCAtMjYxLDYgKzI3MiwxMiBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpLaW5kIGtpbmQpCiAgICAgY2Fz
ZSBBcmc6OkluZGV4OgogICAgICAgICBvdXQucHJpbnQoIkluZGV4Iik7CiAgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFyZzo6UHJlSW5kZXg6CisgICAgICAgIG91dC5wcmludCgiUHJlSW5kZXgi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpQb3N0SW5kZXg6CisgICAgICAgIG91
dC5wcmludCgiUG9zdEluZGV4Iik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6UmVs
Q29uZDoKICAgICAgICAgb3V0LnByaW50KCJSZWxDb25kIik7CiAgICAgICAgIHJldHVybjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCmluZGV4IGNlNWE0ZTczNzlhZDY0NDQ1ZjBj
M2FiZDEyOWYzMjliOTQ3ZmU4MTIuLjQ5YTZiNjBhNGY3M2M0NTJkZWVmNWVkNTc1YWQyZjM5NmVh
NTVmMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaApAQCAtNzcsNiArNzcs
OCBAQCBwdWJsaWM6CiAgICAgICAgIFN0YWNrLAogICAgICAgICBDYWxsQXJnLAogICAgICAgICBJ
bmRleCwKKyAgICAgICAgUHJlSW5kZXgsCisgICAgICAgIFBvc3RJbmRleCwKIAogICAgICAgICAv
LyBJbW1lZGlhdGUgb3BlcmFuZHMgdGhhdCBjdXN0b21pemUgdGhlIGJlaGF2aW9yIG9mIGFuIG9w
ZXJhdGlvbi4gWW91IGNhbiB0aGluayBvZiB0aGVtIGFzCiAgICAgICAgIC8vIHNlY29uZGFyeSBv
cGNvZGVzLiBUaGV5IGFyZSBhbHdheXMgIlVzZSInZC4KQEAgLTY0OSw2ICs2NTEsMjggQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gQXJnOjppbmRleChiYXNlLCBpbmRleCwgc2NhbGUsIDApOwog
ICAgIH0KIAorICAgIHN0YXRpYyBBcmcgcHJlSW5kZXgoQWlyOjpUbXAgYmFzZSwgaW50IGluZGV4
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlz
SW50OShpbmRleCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gUHJlSW5kZXg7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1
bHQubV9vZmZzZXQgPSBpbmRleDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgQXJnIHBvc3RJbmRleChBaXI6OlRtcCBiYXNlLCBpbnQgaW5kZXgpCisgICAgewor
ICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNJbnQ5KGluZGV4
KSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQb3N0SW5k
ZXg7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9vZmZz
ZXQgPSBpbmRleDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBzdGF0aWMg
QXJnIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9u
KQogICAgIHsKICAgICAgICAgQXJnIHJlc3VsdDsKQEAgLTc5OSw2ICs4MjMsMTYgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OwogICAgIH0KIAorICAgIGJvb2wgaXNQ
cmVJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFByZUluZGV4
OworICAgIH0KKworICAgIGJvb2wgaXNQb3N0SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGtpbmQoKSA9PSBQb3N0SW5kZXg7CisgICAgfQorCiAgICAgYm9vbCBpc01lbW9yeSgp
IGNvbnN0CiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewpAQCAtOTgyLDcgKzEwMTYs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoa2luZCgpID09IFN0YWNrKQogICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX3NjYWxlKTsKLSAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFk
ZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2lu
ZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8
fCBraW5kKCkgPT0gUG9zdEluZGV4KTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVl
OjpPZmZzZXRUeXBlPihtX29mZnNldCk7CiAgICAgfQogCkBAIC0xMDQ0LDYgKzEwNzgsOCBAQCBw
dWJsaWM6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFk
ZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAg
IGNhc2UgUG9zdEluZGV4OgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENhbGxB
cmc6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKQEAgLTEwODEsNiArMTExNyw4IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKICAg
ICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQ
b3N0SW5kZXg6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAg
ICAgICAgY2FzZSBCaWdJbW06IC8vIFllcywgd2UgYWxsb3cgQmlnSW1tIGFzIGEgZG91YmxlIGlt
bWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVudGluZyBzdGFja21hcHMuCkBAIC0xMjM3
LDYgKzEyNzUsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisg
ICAgc3RhdGljIGJvb2wgaXNWYWxpZEltbTlGb3JtKGludDMyX3QgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gaXNJbnQ5KHZhbHVlKTsKKyAgICB9CisKICAgICAvLyBJZiB5b3UgZG9uJ3Qg
cGFzcyBhIHdpZHRoIHRoZW4gdGhpcyBvcHRpbWlzdGljYWxseSBhc3N1bWVzIHRoYXQgeW91J3Jl
IHVzaW5nIHRoZSByaWdodCB3aWR0aC4gQnV0CiAgICAgLy8gdGhlIHdpZHRoIGlzIHJlbGV2YW50
IHRvIHZhbGlkaXR5LCBzbyBwYXNzaW5nIGEgbnVsbCB3aWR0aCBpcyBvbmx5IHVzZWZ1bCBmb3Ig
YXNzZXJ0aW9ucy4gRG9uJ3QKICAgICAvLyBwYXNzIG51bGwgd2lkdGhzIHdoZW4gY2FzY2FkaW5n
IHRocm91Z2ggQXJncyBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IhCkBAIC0xMjY1LDYgKzEz
MDgsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEFkZHJGb3JtKG9mZnNl
dCgpLCB3aWR0aCk7CiAgICAgICAgIGNhc2UgSW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gaXNW
YWxpZEluZGV4Rm9ybShzY2FsZSgpLCBvZmZzZXQoKSwgd2lkdGgpOworICAgICAgICBjYXNlIFBy
ZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpc1Zh
bGlkSW1tOUZvcm0ob2Zmc2V0KCkpOwogICAgICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNh
c2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgpAQCAtMTM4Myw2ICsxNDI5LDE4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPiht
X29mZnNldCksIG1fZXh0ZW5kKTsKICAgICB9CiAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UHJlSW5k
ZXhBZGRyZXNzIGFzUHJlSW5kZXhBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc1ByZUluZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4
QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIG9mZnNldCgpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UG9zdEluZGV4QWRkcmVzcyBhc1Bvc3RJbmRleEFkZHJlc3MoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzUG9zdEluZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXI6OlBvc3RJbmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBvZmZzZXQoKSk7CisgICAgfQor
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFsQ29u
ZGl0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwCmlu
ZGV4IDkwNWU2MTdmYmRlMGUyYjdkNzU1NTYzZTY4ODU4OWJkYWQ3MjZjODAuLjZhZDA1ODQyNjdi
OGM3ZWU3MTQ5YjAyZjgyMzE1NzJiZWU4Y2Y4YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAg
dm9pZCBsb3dlclN0YWNrQXJncyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHdpZHRoID09IFdpZHRoMzIpOwogCiAjaWYgQ1BVKEFSTTY0KQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlID0gU3Rv
cmUzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBzdG9yZU9wY29k
ZSA9IE1vdmUzMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBaXI6OkFyZzo6S2luZCBv
cGVyYW5kS2luZCA9IEFyZzo6WmVyb1JlZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
aXI6OkFyZyBvcGVyYW5kID0gQXJnOjp6ZXJvUmVnKCk7CiAjZWxpZiBDUFUoWDg2XzY0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXggNTkx
ZGEzYTQ0Zjg1ZTAwOTZkYTZkMjc4MDllYzk5MmI4YmUxNTVlYy4uZTU5NjRhMzA5ZmE3MjIzZWIz
MjI5ZGY2NGI2ODFhN2FmYmQ3Yzg2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC02NDcsNiArNjQ3LDEyIEBAIE1vdmUgVTpHOlB0ciwg
RDpHOlB0cgogICAgIEluZGV4LCBUbXAgYXMgbG9hZFB0cgogICAgIFRtcCwgQWRkciBhcyBzdG9y
ZVB0cgogICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQdHIKKyAgICBhcm02NDogWmVyb1JlZywgQWRk
ciBhcyBzdG9yZTY0CisgICAgYXJtNjQ6IFplcm9SZWcsIEluZGV4IGFzIHN0b3JlNjQKKyAgICBh
cm02NDogUHJlSW5kZXgsIFRtcCBhcyBsb2FkNjQKKyAgICBhcm02NDogUG9zdEluZGV4LCBUbXAg
YXMgbG9hZDY0CisgICAgYXJtNjQ6IFRtcCwgUHJlSW5kZXggYXMgc3RvcmU2NAorICAgIGFybTY0
OiBUbXAsIFBvc3RJbmRleCBhcyBzdG9yZTY0CiAgICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmVQ
dHIKIAogIyBUaGlzIGlzIGZvciBtb3ZpbmcgYmV0d2VlbiBzcGlsbCBzbG90cy4KQEAgLTY2Nyw2
ICs2NzMsMTIgQEAgTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIEluZGV4LCBUbXAgYXMgbG9h
ZDMyCiAgICAgVG1wLCBBZGRyIGFzIHN0b3JlMzIKICAgICBUbXAsIEluZGV4IGFzIHN0b3JlMzIK
KyAgICBhcm02NDogWmVyb1JlZywgQWRkciBhcyBzdG9yZTMyCisgICAgYXJtNjQ6IFplcm9SZWcs
IEluZGV4IGFzIHN0b3JlMzIKKyAgICBhcm02NDogUHJlSW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAg
ICBhcm02NDogUG9zdEluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgYXJtNjQ6IFRtcCwgUHJlSW5k
ZXggYXMgc3RvcmUzMgorICAgIGFybTY0OiBUbXAsIFBvc3RJbmRleCBhcyBzdG9yZTMyCiAgICAg
eDg2OiBJbW0sIFRtcCBhcyB6ZXJvRXh0ZW5kMzJUb1dvcmQKICAgICB4ODY6IEltbSwgQWRkciBh
cyBzdG9yZTMyCiAgICAgeDg2OiBJbW0sIEluZGV4IGFzIHN0b3JlMzIKQEAgLTY3NSwxNCArNjg3
LDYgQEAgTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogTW92ZTMyIFU6RzozMiwgWkQ6RzozMiwgUzpH
OjMyCiAgICAgQWRkciwgQWRkciwgVG1wCiAKLWFybTY0OiBTdG9yZTMyIFU6RzozMiwgWkQ6Rzoz
MgotICAgIFplcm9SZWcsIEFkZHIKLSAgICBaZXJvUmVnLCBJbmRleAotCi1hcm02NDogU3RvcmU2
NCBVOkc6NjQsIEQ6Rzo2NAotICAgIFplcm9SZWcsIEFkZHIKLSAgICBaZXJvUmVnLCBJbmRleAot
CiBTaWduRXh0ZW5kMzJUb1B0ciBVOkc6MzIsIEQ6RzpQdHIKICAgICBUbXAsIFRtcAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKaW5kZXgg
Mzc0MGVmZGJkZDE0NmEzN2Y2ZWRlOWRkYmMyM2RkYmEwM2IwNzY0Ni4uMmViY2E3MzBlNTFiYWJk
YWNlMGUwODFhZDQwODU1NGMyMWE4YTg0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgpAQCAtMjI5LDcgKzIyOSw3IEBAIGRlZiBpc0dG
KHRva2VuKQogZW5kCiAKIGRlZiBpc0tpbmQodG9rZW4pCi0gICAgdG9rZW4gPX4gL1xBKChUbXAp
fChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KFplcm9SZWcpfChTaW1wbGVBZGRy
KXwoQWRkcil8KEV4dGVuZGVkT2Zmc2V0QWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQp
fChEb3VibGVDb25kKXwoU3RhdHVzQ29uZCkpXFovCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJ
bW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KFplcm9SZWcpfChTaW1wbGVBZGRyKXwo
QWRkcil8KEV4dGVuZGVkT2Zmc2V0QWRkcil8KEluZGV4KXwoUHJlSW5kZXgpfChQb3N0SW5kZXgp
fChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KIGVuZAog
CiBkZWYgaXNBcmNoKHRva2VuKQpAQCAtMzAzLDcgKzMwMyw3IEBAIGNsYXNzIFBhcnNlcgogCiAg
ICAgZGVmIGNvbnN1bWVLaW5kCiAgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwotICAgICAg
ICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02
NCwgWmVyb1JlZywgVG1wLCBTaW1wbGVBZGRyLCBBZGRyLCBFeHRlbmRlZE9mZnNldEFkZHIsIElu
ZGV4LCBSZWxDb25kLCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVubGVz
cyBpc0tpbmQocmVzdWx0KQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0s
IEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgWmVyb1JlZywgVG1wLCBTaW1wbGVBZGRyLCBBZGRy
LCBFeHRlbmRlZE9mZnNldEFkZHIsIEluZGV4LCBQcmVJbmRleCwgUG9zdEluZGV4LCBSZWxDb25k
LCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVz
dWx0KQogICAgICAgICBhZHZhbmNlCiAgICAgICAgIHJlc3VsdAogICAgIGVuZApAQCAtOTI5LDYg
KzkyOSwxMiBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICB3
aGVuICJJbmRleCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNW
YWxpZEluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5zY2FsZSgpLCBhcmdzWyN7aW5kZXh9XS5vZmZz
ZXQoKSwgI3thcmcud2lkdGhDb2RlfSkpIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
Ik9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIHdoZW4gIlByZUluZGV4Igor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkSW1tOUZvcm0o
YXJnc1sje2luZGV4fV0ub2Zmc2V0KCkpKSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICB3aGVuICJQb3N0SW5kZXgi
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRJbW05Rm9y
bShhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgogICAgICAgICAgICAgICAgIHdoZW4gIkJpZ0ltbSIK
ICAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAgIHdoZW4gIlJl
c0NvbmQiCkBAIC0xMjM1LDYgKzEyNDEsMTAgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7
CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVz
cygpIgogICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4IgogICAgICAgICAgICAgICAgICAgICBv
dXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAgICAgICAg
IHdoZW4gIlByZUluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7
aW5kZXh9XS5hc1ByZUluZGV4QWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIlBvc3RJ
bmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNQ
b3N0SW5kZXhBZGRyZXNzKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29uZCIKICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZWxhdGlvbmFsQ29u
ZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCmluZGV4IDYzZTI2Njc4
ODUyMDE4YTc2ODBjYTVmMDcxNDY5NjgxMDU4ODRiM2IuLjY5YmI2YjJiZTgxODcwYjU5ODMzMzY3
YWYyNjc1YjdmNGVmMDU2ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmNwcApAQCAtMjMzLDggKzIzMyw4IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaml0V3JpdGVUaHVu
a0dlbmVyYXRvCiAgICAgaml0LnJldCgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxv
Y2FsMCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5sb2FkNjQoeDEsIFBvc3RJbmRleCg4KSwgeDYp
OwotICAgIGppdC5zdG9yZTY0KHg2LCB4MywgUG9zdEluZGV4KDgpKTsKKyAgICBqaXQubG9hZDY0
KE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgxLCA4KSwgeDYpOworICAgIGppdC5z
dG9yZTY0KHg2LCBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyh4MywgOCkpOwogICAg
IHNtYWxsQ29weS5saW5rKCZqaXQpOwogICAgIGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgyKS5saW5rVG8obG9jYWwwLCAmaml0
KTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsb2NhbDIgPSBqaXQuYnJhbmNoQWRkNjQoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433897</attachid>
            <date>2021-07-20 13:34:01 -0700</date>
            <delta_ts>2021-07-23 00:44:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210720153400.patch</filename>
            <type>text/plain</type>
            <size>25492</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMDI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTg1MTNhN2M1Y2U1Y2VkMmQ0YjdhMjA5NTYxMjUzMmRjYTU1YThjLi5lZWIzYjk0NjljODhjMjI4
OWRlZTRkODA1YzY3ZDc4OTY1ZDkxYmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MSBAQAorMjAyMS0wNy0yMCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzOjpQcmVJbmRleEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzOjpQ
b3N0SW5kZXhBZGRyZXNzKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6c3RvcmUzMik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAg
ICAgKEpTQzo6dGVzdFN0b3JlUHJlSW5kZXgzMik6CisgICAgICAgIChKU0M6OnRlc3RTdG9yZVBy
ZUluZGV4NjQpOgorICAgICAgICAoSlNDOjp0ZXN0U3RvcmVQb3N0SW5kZXgzMik6CisgICAgICAg
IChKU0M6OnRlc3RTdG9yZVBvc3RJbmRleDY0KToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQcmVJ
bmRleDMyKToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQcmVJbmRleDY0KToKKyAgICAgICAgKEpT
Qzo6dGVzdExvYWRQb3N0SW5kZXgzMik6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUG9zdEluZGV4
NjQpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvYWlyL0Fp
ckFyZy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6anNIYXNoIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdURjo6cHJp
bnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OnByZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwb3N0
SW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUHJlSW5kZXggY29uc3QpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUG9zdEluZGV4IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjpvZmZzZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzR1AgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRlAgY29u
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRJbW05Rm9ybSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZEZvcm0gY29uc3QpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmFzUHJlSW5kZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjphc1Bvc3RJbmRleEFkZHJlc3MgY29uc3QpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJMb3dlclN0YWNrQXJncy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omxvd2VyU3Rh
Y2tBcmdzKToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAgICog
YjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmI6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpqaXRXcml0ZVRodW5rR2VuZXJhdG9yKToKKwogMjAy
MS0wNy0xNiAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIEV4dGVuZFR5cGUgdG8gQWlyOjpBcmcgSW5kZXggdG8gZnVsbHkgdXRpbGl6ZSBhZGRyZXNz
IGNvbXB1dGF0aW9uIGluIG1lbW9yeSBpbnN0cnVjdGlvbiBmb3IgQVJNNjQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKaW5kZXggM2QxOTQ5YTQwNzg1ZDk5Y2E2MTU5NWFhYjA0YmU2ZjFkMGQ5NmJhMy4uNGE4ZmY4
MzNmMWEzYmYyOTY1Yjc4ODk2YjVlYjZlOTNiNjkzM2U1MCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAg
LTI0NSw2ICsyNDUsMzQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8vIFBy
ZUluZGV4QWRkcmVzczoKKyAgICAvLworICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGgg
YmFzZSBhZGRyZXNzIGFuZCBwcmUtaW5jcmVtZW50IG9mZnNldC4KKyAgICBzdHJ1Y3QgUHJlSW5k
ZXhBZGRyZXNzIHsKKyAgICAgICAgUHJlSW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50
IGluZGV4KQorICAgICAgICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7Cisg
ICAgICAgIGludCBpbmRleDsKKyAgICB9OworCisgICAgLy8gUG9zdEluZGV4QWRkcmVzczoKKyAg
ICAvLworICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBw
b3N0LWluY3JlbWVudCBvZmZzZXQuCisgICAgc3RydWN0IFBvc3RJbmRleEFkZHJlc3MgeworICAg
ICAgICBQb3N0SW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAg
ICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRl
eDsKKyAgICB9OworCiAgICAgLy8gQWJzb2x1dGVBZGRyZXNzOgogICAgIC8vCiAgICAgLy8gRGVz
Y3JpYmVzIGFuIG1lbW9yeSBvcGVyYW5kIGdpdmVuIGJ5IGEgcG9pbnRlci4gIEZvciByZWd1bGFy
IGxvYWQgJiBzdG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRleCA4OGYzNDBiNDgzZTk0ZjBmNmRjNDI1ZjQ0OGE0
OTZhNWVlMTBmZjYyLi5iZmI5NDJmZGI3ZDYwZmRiZWNlZmI0NTc4YmRmMTY1ODkyMTA0YTdiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaApAQCAtMTQwNSw5ICsxNDA1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDw2
ND4oYWRkcmVzcywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkNjQoUmVnaXN0ZXJJRCBz
cmMsIFBvc3RJbmRleCBzaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQoUHJl
SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgbV9hc3Nl
bWJsZXIubGRyPDY0PihkZXN0LCBzcmMsIHNpbW0pOworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8
NjQ+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2
b2lkIGxvYWQ2NChQb3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNy
Yy5pbmRleCkpOwogICAgIH0KIAogICAgIERhdGFMYWJlbDMyIGxvYWQ2NFdpdGhBZGRyZXNzT2Zm
c2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCkBAIC0xNTA0LDYgKzE1
MDksMTYgQEAgcHVibGljOgogICAgICAgICBsb2FkPDMyPihhZGRyZXNzLCBkZXN0KTsKICAgICB9
CiAKKyAgICB2b2lkIGxvYWQzMihQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQcmVJ
bmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihQb3N0SW5kZXhBZGRy
ZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRy
PDMyPihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKwogICAg
IERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNz
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlz
KTsKQEAgLTE2OTMsNyArMTcwOCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5k
ZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgIG1f
YXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rlcik7
CiAgICAgfQotICAgIAorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBQcmVJbmRl
eEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBk
ZXN0LmJhc2UsIFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3Jl
NjQoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2UsIFBvc3RJbmRleChkZXN0LmluZGV4
KSk7CisgICAgfQorCiAgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBjb25zdCB2b2lk
KiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgc3RvcmU8NjQ+KHNyYywgYWRkcmVzcyk7CkBAIC0x
NzM3LDExICsxNzYyLDYgQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KGRhdGFUZW1wUmVnaXN0
ZXIsIGFkZHJlc3MpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkZXN0LCBQb3N0SW5kZXggc2ltbSkKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1i
bGVyLnN0cjw2ND4oc3JjLCBkZXN0LCBzaW1tKTsKLSAgICB9Ci0gICAgCiAgICAgRGF0YUxhYmVs
MzIgc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3Mg
YWRkcmVzcykKICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTgz
OSw2ICsxODU5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzKTsKICAgICB9CiAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFBy
ZUluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihz
cmMsIGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKworICAgIHZvaWQg
c3RvcmUzMihSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUG9zdEluZGV4KGRlc3Qu
aW5kZXgpKTsKKyAgICB9CisKICAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZz
ZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAg
RGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvdGVzdG1hc20uY3BwCmluZGV4IDcxY2QyMzk5OGNlN2EyNDEyMDE5NmQwZjA0NTYyNDZkMTRk
OTE4YTcuLjg5ODQ3NDYyMDA4MTFhYWE4MmVkZjFjMmExYWJmNTEyNWU4MTQyMjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCkBAIC0yMDIwLDYgKzIw
MjAsMTc3IEBAIHZvaWQgdGVzdFN1YldpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCiAgICAgICAg
IH0KICAgICB9CiB9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKQoreworICAgIGlu
dDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50cHRyX3QgYWRkciA9IGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMyX3QgaW5kZXggPSBzaXplb2YoaW50
MzJfdCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQzMl90IHNyYykgeworICAgICAgICBh
dXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAqKytwMSA9IDQ7
IHJldHVybiBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3VtZW50R1BS
MCwgQ0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBp
bmRleCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50
MzJfdCogcDEgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QxKDQpKTsKKyAgICBDSEVDS19F
USgqcDEsIDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1zWzFdKTsKKworICAgIGF1dG8gdGVz
dDIgPSBbJl0gKGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3Vl
KGppdCk7CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsgcmV0dXJuIHAyOworICAgICAgICAg
ICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlBvc3RJ
bmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAg
aml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBq
aXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90Pihz
dG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCogcDIgPSBiaXR3aXNlX2Nh
c3Q8aW50MzJfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19FUSgqcDIsIDQpOworICAgIENIRUNL
X0VRKCotLXAyLCA1KTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVQb3N0SW5kZXg2NCgpCit7Cisg
ICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnRwdHJfdCBhZGRyID0gYml0
d2lzZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVv
ZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3Qgc3JjKSB7CisgICAg
ICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICorK3Ax
ID0gNDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAg
ICBpbnQ2NF90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDEoNCkpOworICAgIENI
RUNLX0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEsIG51bXNbMV0pOworCisgICAgYXV0
byB0ZXN0MiA9IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBp
bGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysgPSA1OyByZXR1cm4gcDI7CisgICAg
ICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6
UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAg
ICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAg
ICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRy
X3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2NF90KiBwMiA9IGJpdHdp
c2VfY2FzdDxpbnQ2NF90Kj4odGVzdDIoNSkpOworICAgIENIRUNLX0VRKCpwMiwgNCk7CisgICAg
Q0hFQ0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4MzIoKQor
eworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9
IHNpemVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDMyX3QgcmVwbGFj
ZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAg
IC8vIHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0Lmxv
YWQzMihDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAs
IGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxp
Y2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3Zl
KEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgp
OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90Pihsb2FkLCAmbnVt
c1sxXSk7CisgICAgfTsKKyAgICAKKyAgICBDSEVDS19FUSh0ZXN0MSg0KSwgMyk7CisgICAgQ0hF
Q0tfRVEobnVtc1syXSwgNCk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQzMl90IHJlcGxh
Y2UpIHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0
KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAg
ICAvLyByZXMgPSAqcDIrKzsgKnAyID0gNTsgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIGppdC5s
b2FkMzIoQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgaml0LnN0b3Jl
MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVwbGFjZSksIENDYWxsSGVscGVyczo6SW1w
bGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAg
ICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0
KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KGxvYWQsICZu
dW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVzdDIoNSksIDIpOworICAgIENIRUNL
X0VRKG51bXNbMl0sIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKQorewor
ICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNp
emVvZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkg
eworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8v
IHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2
NChDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGlu
ZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0
QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAg
ICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sx
XSk7CisgICAgfTsKKworICAgIAorICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVD
S19FUShudW1zWzJdLCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3QgcmVwbGFj
ZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAg
IC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0Lmxv
YWQ2NChDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmU2
NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBs
aWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92
ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQo
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4obG9hZCwgJm51
bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tf
RVEobnVtc1syXSwgNSk7Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQp
IHx8IENQVShBUk02NCkKQEAgLTQyNzQsNiArNDQ0NSwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFy
KiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVz
dFN1YldpdGhMZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFN1YldpdGhSaWdodFNoaWZ0NjQo
KSk7CiAgICAgUlVOKHRlc3RTdWJXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CisKKyAgICBS
VU4odGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9yZVByZVBvc3RJ
bmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDMyKCkpOworICAgIFJVTih0
ZXN0TG9hZFByZVBvc3RJbmRleDY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUoQVJNNjRFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCA2M2E2ZmIxMmZhNTIy
Y2RhZGFkYmJhOTlmZjYyOWQ3ODc4YTA4NDQ4Li40NjNkMGNmZWM5NjM4Y2IzNjg0M2M0MjgxNzM4
NDJlZjQzNzk5MTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNw
cApAQCAtMTEyOSwxMiArMTEyOSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgQWly
OjpNb3ZlMzI6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShTdG9yZTMyLCBB
cmc6Olplcm9SZWcsIGRlc3Qua2luZCgpKSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdpZHRoMzIpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoU3RvcmUzMiwgbV92YWx1ZSwgemVy
b1JlZygpLCBkZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKE1vdmUz
MiwgQXJnOjpaZXJvUmVnLCBkZXN0LmtpbmQoKSkgJiYgZGVzdC5pc1ZhbGlkRm9ybShXaWR0aDMy
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KE1vdmUzMiwgbV92YWx1ZSwg
emVyb1JlZygpLCBkZXN0KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgY2FzZSBBaXI6Ok1vdmU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9y
bShTdG9yZTY0LCBBcmc6Olplcm9SZWcsIGRlc3Qua2luZCgpKSAmJiBkZXN0LmlzVmFsaWRGb3Jt
KFdpZHRoNjQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoU3RvcmU2NCwg
bV92YWx1ZSwgemVyb1JlZygpLCBkZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFs
aWRGb3JtKE1vdmUsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZv
cm0oV2lkdGg2NCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChNb3ZlLCBt
X3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5jcHAKaW5kZXggMTAzYzZlY2NhM2QzMTRiYjRlZDhjMDJhNGQyZjAwOWNhNjQxZDAw
MS4uYjUwMzNlMDJmMjU4ODA5N2I5NWNiNWM5ZmY3YzcyZDMwOTQ0NDhhZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcApAQCAtMTMwLDYgKzEzMCwxMSBAQCB1bnNpZ25l
ZCBBcmc6OmpzSGFzaCgpIGNvbnN0CiAgICAgICAgIHJlc3VsdCArPSBtX2Jhc2UuaW50ZXJuYWxW
YWx1ZSgpOwogICAgICAgICByZXN1bHQgKz0gbV9pbmRleC5pbnRlcm5hbFZhbHVlKCk7CiAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUHJlSW5kZXg6CisgICAgY2FzZSBQb3N0SW5kZXg6CisgICAg
ICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vZmZzZXQpOworICAgICAgICBy
ZXN1bHQgKz0gbV9iYXNlLmludGVybmFsVmFsdWUoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBTdGFjazoKICAgICAgICAgcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3NjYWxl
KTsKICAgICAgICAgcmVzdWx0ICs9IHN0YWNrU2xvdCgpLT5pbmRleCgpOwpAQCAtMTYxLDcgKzE2
Niw3IEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91
dC5wcmludGYoIiQweCVsbHgiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KG1fb2Zm
c2V0KSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFplcm9SZWc6Ci0gICAgICAgIG91dC5w
cmludCgiJSV4enIiKTsKKyAgICAgICAgb3V0LnByaW50KCIleHpyIik7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwg
IikiKTsKQEAgLTE4MCw2ICsxODUsMTIgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKICAgICAgICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxlKCkpOwogICAgICAgICBv
dXQucHJpbnQoIikiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJlSW5kZXg6CisgICAg
ICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIiwiLCBvZmZzZXQoKSwgIikhIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFz
ZSgpLCAiLCIsIG9mZnNldCgpLCAiKSIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTdGFj
azoKICAgICAgICAgaWYgKG9mZnNldCgpKQogICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgp
KTsKQEAgLTI2MSw2ICsyNzIsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEFyZzo6S2luZCBraW5kKQogICAgIGNhc2UgQXJnOjpJbmRleDoKICAgICAgICAgb3V0LnBy
aW50KCJJbmRleCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OlByZUluZGV4Ogor
ICAgICAgICBvdXQucHJpbnQoIlByZUluZGV4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFyZzo6UG9zdEluZGV4OgorICAgICAgICBvdXQucHJpbnQoIlBvc3RJbmRleCIpOworICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBBcmc6OlJlbENvbmQ6CiAgICAgICAgIG91dC5wcmludCgiUmVs
Q29uZCIpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
aAppbmRleCBjZTVhNGU3Mzc5YWQ2NDQ0NWYwYzNhYmQxMjlmMzI5Yjk0N2ZlODEyLi40OWE2YjYw
YTRmNzNjNDUyZGVlZjVlZDU3NWFkMmYzOTZlYTU1ZjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmgKQEAgLTc3LDYgKzc3LDggQEAgcHVibGljOgogICAgICAgICBTdGFjaywK
ICAgICAgICAgQ2FsbEFyZywKICAgICAgICAgSW5kZXgsCisgICAgICAgIFByZUluZGV4LAorICAg
ICAgICBQb3N0SW5kZXgsCiAKICAgICAgICAgLy8gSW1tZWRpYXRlIG9wZXJhbmRzIHRoYXQgY3Vz
dG9taXplIHRoZSBiZWhhdmlvciBvZiBhbiBvcGVyYXRpb24uIFlvdSBjYW4gdGhpbmsgb2YgdGhl
bSBhcwogICAgICAgICAvLyBzZWNvbmRhcnkgb3Bjb2Rlcy4gVGhleSBhcmUgYWx3YXlzICJVc2Ui
J2QuCkBAIC02NDksNiArNjUxLDI4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEFyZzo6aW5k
ZXgoYmFzZSwgaW5kZXgsIHNjYWxlLCAwKTsKICAgICB9CiAKKyAgICBzdGF0aWMgQXJnIHByZUlu
ZGV4KEFpcjo6VG1wIGJhc2UsIGludCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNl
LmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc0ludDkoaW5kZXgpKTsKKyAgICAgICAgQXJnIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFByZUluZGV4OworICAgICAgICByZXN1bHQu
bV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBwb3N0SW5kZXgoQWlyOjpU
bXAgYmFzZSwgaW50IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsK
KyAgICAgICAgQVNTRVJUKGlzSW50OShpbmRleCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gUG9zdEluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0g
YmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCiAgICAgc3RhdGljIEFyZyByZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIEFyZyByZXN1bHQ7
CkBAIC03OTksNiArODIzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJ
bmRleDsKICAgICB9CiAKKyAgICBib29sIGlzUHJlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBQcmVJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUG9zdElu
ZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUG9zdEluZGV4Owor
ICAgIH0KKwogICAgIGJvb2wgaXNNZW1vcnkoKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNo
IChraW5kKCkpIHsKQEAgLTk4Miw3ICsxMDE2LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
aWYgKGtpbmQoKSA9PSBTdGFjaykKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1
ZTo6T2Zmc2V0VHlwZT4obV9zY2FsZSk7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8
fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtp
bmQoKSA9PSBJbmRleCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkg
PT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJ
bmRleCB8fCBraW5kKCkgPT0gUHJlSW5kZXggfHwga2luZCgpID09IFBvc3RJbmRleCk7CiAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9vZmZzZXQpOwogICAg
IH0KIApAQCAtMTA0NCw2ICsxMDc4LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEFkZHI6CiAg
ICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgogICAgICAgICBjYXNlIEluZGV4OgorICAg
ICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgY2Fz
ZSBTdGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBjYXNlIFJlbENvbmQ6CkBA
IC0xMDgxLDYgKzExMTcsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAg
Y2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNh
c2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICBjYXNlIFN0YWNr
OgogICAgICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgQmlnSW1tOiAvLyBZZXMsIHdl
IGFsbG93IEJpZ0ltbSBhcyBhIGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVzZSB0aGlzIGZvciBpbXBs
ZW1lbnRpbmcgc3RhY2ttYXBzLgpAQCAtMTIzNyw2ICsxMjc1LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIHN0YXRpYyBib29sIGlzVmFsaWRJbW05Rm9y
bShpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW50OSh2YWx1ZSk7Cisg
ICAgfQorCiAgICAgLy8gSWYgeW91IGRvbid0IHBhc3MgYSB3aWR0aCB0aGVuIHRoaXMgb3B0aW1p
c3RpY2FsbHkgYXNzdW1lcyB0aGF0IHlvdSdyZSB1c2luZyB0aGUgcmlnaHQgd2lkdGguIEJ1dAog
ICAgIC8vIHRoZSB3aWR0aCBpcyByZWxldmFudCB0byB2YWxpZGl0eSwgc28gcGFzc2luZyBhIG51
bGwgd2lkdGggaXMgb25seSB1c2VmdWwgZm9yIGFzc2VydGlvbnMuIERvbid0CiAgICAgLy8gcGFz
cyBudWxsIHdpZHRocyB3aGVuIGNhc2NhZGluZyB0aHJvdWdoIEFyZ3MgaW4gdGhlIGluc3RydWN0
aW9uIHNlbGVjdG9yIQpAQCAtMTI2NSw2ICsxMzA4LDkgQEAgcHVibGljOgogICAgICAgICAgICAg
cmV0dXJuIGlzVmFsaWRBZGRyRm9ybShvZmZzZXQoKSwgd2lkdGgpOwogICAgICAgICBjYXNlIElu
ZGV4OgogICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRJbmRleEZvcm0oc2NhbGUoKSwgb2Zmc2V0
KCksIHdpZHRoKTsKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5k
ZXg6CisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEltbTlGb3JtKG9mZnNldCgpKTsKICAgICAg
ICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91
YmxlQ29uZDoKQEAgLTEzODMsNiArMTQyOSwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9vZmZzZXQpLCBtX2V4dGVuZCk7CiAgICAgfQog
CisgICAgTWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzcyBhc1ByZUluZGV4QWRkcmVzcygp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNQcmVJbmRleCgpKTsKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyOjpQcmVJbmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBvZmZzZXQo
KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MgYXNQb3N0
SW5kZXhBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Bvc3RJbmRleCgp
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKG1fYmFz
ZS5ncHIoKSwgb2Zmc2V0KCkpOworICAgIH0KKwogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uIGFzUmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaXNSZWxDb25kKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcAppbmRleCA5MDVlNjE3ZmJkZTBlMmI3ZDc1NTU2M2U2
ODg1ODliZGFkNzI2YzgwLi42YWQwNTg0MjY3YjhjN2VlNzE0OWIwMmY4MjMxNTcyYmVlOGNmOGFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tB
cmdzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tB
cmdzLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgbG93ZXJTdGFja0FyZ3MoQ29kZSYgY29k
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBX
aWR0aDMyKTsKIAogI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
aXI6Ok9wY29kZSBzdG9yZU9wY29kZSA9IFN0b3JlMzI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQWlyOjpPcGNvZGUgc3RvcmVPcGNvZGUgPSBNb3ZlMzI7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWlyOjpBcmc6OktpbmQgb3BlcmFuZEtpbmQgPSBBcmc6Olplcm9SZWc7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWlyOjpBcmcgb3BlcmFuZCA9IEFyZzo6emVyb1Jl
ZygpOwogI2VsaWYgQ1BVKFg4Nl82NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wY29kZS5vcGNvZGVzCmluZGV4IDU5MWRhM2E0NGY4NWUwMDk2ZGE2ZDI3ODA5ZWM5OTJi
OGJlMTU1ZWMuLmU1OTY0YTMwOWZhNzIyM2ViMzIyOWRmNjRiNjgxYTdhZmJkN2M4NjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwpAQCAtNjQ3
LDYgKzY0NywxMiBAQCBNb3ZlIFU6RzpQdHIsIEQ6RzpQdHIKICAgICBJbmRleCwgVG1wIGFzIGxv
YWRQdHIKICAgICBUbXAsIEFkZHIgYXMgc3RvcmVQdHIKICAgICBUbXAsIEluZGV4IGFzIHN0b3Jl
UHRyCisgICAgYXJtNjQ6IFplcm9SZWcsIEFkZHIgYXMgc3RvcmU2NAorICAgIGFybTY0OiBaZXJv
UmVnLCBJbmRleCBhcyBzdG9yZTY0CisgICAgYXJtNjQ6IFByZUluZGV4LCBUbXAgYXMgbG9hZDY0
CisgICAgYXJtNjQ6IFBvc3RJbmRleCwgVG1wIGFzIGxvYWQ2NAorICAgIGFybTY0OiBUbXAsIFBy
ZUluZGV4IGFzIHN0b3JlNjQKKyAgICBhcm02NDogVG1wLCBQb3N0SW5kZXggYXMgc3RvcmU2NAog
ICAgIHg4NjogSW1tLCBBZGRyIGFzIHN0b3JlUHRyCiAKICMgVGhpcyBpcyBmb3IgbW92aW5nIGJl
dHdlZW4gc3BpbGwgc2xvdHMuCkBAIC02NjcsNiArNjczLDEyIEBAIE1vdmUzMiBVOkc6MzIsIFpE
Okc6MzIKICAgICBJbmRleCwgVG1wIGFzIGxvYWQzMgogICAgIFRtcCwgQWRkciBhcyBzdG9yZTMy
CiAgICAgVG1wLCBJbmRleCBhcyBzdG9yZTMyCisgICAgYXJtNjQ6IFplcm9SZWcsIEFkZHIgYXMg
c3RvcmUzMgorICAgIGFybTY0OiBaZXJvUmVnLCBJbmRleCBhcyBzdG9yZTMyCisgICAgYXJtNjQ6
IFByZUluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgYXJtNjQ6IFBvc3RJbmRleCwgVG1wIGFzIGxv
YWQzMgorICAgIGFybTY0OiBUbXAsIFByZUluZGV4IGFzIHN0b3JlMzIKKyAgICBhcm02NDogVG1w
LCBQb3N0SW5kZXggYXMgc3RvcmUzMgogICAgIHg4NjogSW1tLCBUbXAgYXMgemVyb0V4dGVuZDMy
VG9Xb3JkCiAgICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmUzMgogICAgIHg4NjogSW1tLCBJbmRl
eCBhcyBzdG9yZTMyCkBAIC02NzUsMTQgKzY4Nyw2IEBAIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIK
IE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIsIFM6RzozMgogICAgIEFkZHIsIEFkZHIsIFRtcAogCi1h
cm02NDogU3RvcmUzMiBVOkc6MzIsIFpEOkc6MzIKLSAgICBaZXJvUmVnLCBBZGRyCi0gICAgWmVy
b1JlZywgSW5kZXgKLQotYXJtNjQ6IFN0b3JlNjQgVTpHOjY0LCBEOkc6NjQKLSAgICBaZXJvUmVn
LCBBZGRyCi0gICAgWmVyb1JlZywgSW5kZXgKLQogU2lnbkV4dGVuZDMyVG9QdHIgVTpHOjMyLCBE
Okc6UHRyCiAgICAgVG1wLCBUbXAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9vcGNvZGVfZ2VuZXJhdG9yLnJiCmluZGV4IDM3NDBlZmRiZGQxNDZhMzdmNmVkZTlkZGJjMjNk
ZGJhMDNiMDc2NDYuLjJlYmNhNzMwZTUxYmFiZGFjZTBlMDgxYWQ0MDg1NTRjMjFhOGE4NDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5y
YgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIK
QEAgLTIyOSw3ICsyMjksNyBAQCBkZWYgaXNHRih0b2tlbikKIGVuZAogCiBkZWYgaXNLaW5kKHRv
a2VuKQotICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0
SW1tNjQpfChaZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFkZHIpfChFeHRlbmRlZE9mZnNldEFkZHIp
fChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCl8KFN0YXR1c0NvbmQpKVxa
LworICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1t
NjQpfChaZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFkZHIpfChFeHRlbmRlZE9mZnNldEFkZHIpfChJ
bmRleCl8KFByZUluZGV4KXwoUG9zdEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVD
b25kKXwoU3RhdHVzQ29uZCkpXFovCiBlbmQKIAogZGVmIGlzQXJjaCh0b2tlbikKQEAgLTMwMyw3
ICszMDMsNyBAQCBjbGFzcyBQYXJzZXIKIAogICAgIGRlZiBjb25zdW1lS2luZAogICAgICAgICBy
ZXN1bHQgPSB0b2tlbi5zdHJpbmcKLSAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAo
SW1tLCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFplcm9SZWcsIFRtcCwgU2ltcGxlQWRkciwg
QWRkciwgRXh0ZW5kZWRPZmZzZXRBZGRyLCBJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgRG91Ymxl
Q29uZCwgb3IgU3RhdHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAgcGFy
c2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFpl
cm9SZWcsIFRtcCwgU2ltcGxlQWRkciwgQWRkciwgRXh0ZW5kZWRPZmZzZXRBZGRyLCBJbmRleCwg
UHJlSW5kZXgsIFBvc3RJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgRG91YmxlQ29uZCwgb3IgU3Rh
dHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKICAgICAgICAgYWR2YW5jZQogICAgICAg
ICByZXN1bHQKICAgICBlbmQKQEAgLTkyOSw2ICs5MjksMTIgQEAgd3JpdGVIKCJPcGNvZGVHZW5l
cmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgiCiAgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRJbmRleEZvcm0oYXJnc1sje2luZGV4fV0u
c2NhbGUoKSwgYXJnc1sje2luZGV4fV0ub2Zmc2V0KCksICN7YXJnLndpZHRoQ29kZX0pKSIKICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAg
ICAgICAgICAgICB3aGVuICJQcmVJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoIUFyZzo6aXNWYWxpZEltbTlGb3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpKSkiCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAg
ICAgICAgICAgICAgd2hlbiAiUG9zdEluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImlmICghQXJnOjppc1ZhbGlkSW1tOUZvcm0oYXJnc1sje2luZGV4fV0ub2Zmc2V0KCkpKSIK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKICAg
ICAgICAgICAgICAgICB3aGVuICJCaWdJbW0iCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29u
ZCIKICAgICAgICAgICAgICAgICB3aGVuICJSZXNDb25kIgpAQCAtMTIzNSw2ICsxMjQxLDEwIEBA
IHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgICAgICBvdXRwLnBy
aW50ICJhcmdzWyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIKICAgICAgICAgICAgICAgICB3aGVuICJJ
bmRleCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNC
YXNlSW5kZXgoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJQcmVJbmRleCIKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNQcmVJbmRleEFkZHJlc3MoKSIK
KyAgICAgICAgICAgICAgICB3aGVuICJQb3N0SW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91
dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUG9zdEluZGV4QWRkcmVzcygpIgogICAgICAgICAg
ICAgICAgIHdoZW4gIlJlbENvbmQiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFy
Z3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENvbmRpdGlvbigpIgogICAgICAgICAgICAgICAgIHdo
ZW4gIlJlc0NvbmQiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcAppbmRleCA2M2UyNjY3ODg1MjAxOGE3NjgwY2E1ZjA3MTQ2OTY4MTA1ODg0
YjNiLi42OWJiNmIyYmU4MTg3MGI1OTgzMzM2N2FmMjY3NWI3ZjRlZjA1NmY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKQEAgLTIz
Myw4ICsyMzMsOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGppdFdyaXRlVGh1bmtHZW5lcmF0bwogICAgIGppdC5yZXQoKTsKIAog
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb2NhbDAgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQu
bG9hZDY0KHgxLCBQb3N0SW5kZXgoOCksIHg2KTsKLSAgICBqaXQuc3RvcmU2NCh4NiwgeDMsIFBv
c3RJbmRleCg4KSk7CisgICAgaml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRk
cmVzcyh4MSwgOCksIHg2KTsKKyAgICBqaXQuc3RvcmU2NCh4NiwgTWFjcm9Bc3NlbWJsZXI6OlBv
c3RJbmRleEFkZHJlc3MoeDMsIDgpKTsKICAgICBzbWFsbENvcHkubGluaygmaml0KTsKICAgICBq
aXQuYnJhbmNoU3ViNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgVHJ1c3RlZEltbTMy
KDgpLCB4MikubGlua1RvKGxvY2FsMCwgJmppdCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bG9jYWwyID0gaml0LmJyYW5jaEFkZDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgVHJ1c3RlZElt
bTMyKDgpLCB4Mik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434069</attachid>
            <date>2021-07-23 00:44:44 -0700</date>
            <delta_ts>2021-07-23 10:18:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210723024443.patch</filename>
            <type>text/plain</type>
            <size>45369</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YzJiYTQ4MGQzMzQ0YTVkM2UyNTFiYzUyOGVhMWQ1NDk5YTk0NDQ0Li4zNTA4ZWUzYjc4OGRlOWZi
MTk2ZGM2NzczZDkxYmMyMzczZTc5MTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MCBAQAorMjAyMS0wNy0yMyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzOjpQcmVJbmRleEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzOjpQ
b3N0SW5kZXhBZGRyZXNzKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6c3RvcmUzMik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAg
ICAgKEpTQzo6dGVzdFN0b3JlUHJlUG9zdEluZGV4MzIpOgorICAgICAgICAoSlNDOjp0ZXN0U3Rv
cmVQcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJlUG9zdEluZGV4MzIp
OgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJbmRleDY0KToKKyAgICAgICAgKiBiMy9C
M0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIzL0IzTWVtb3J5VmFsdWUuaDoKKyAgICAgICAg
KiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpqc0hhc2ggY29uc3QpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmR1bXAgY29uc3QpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFs
KToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFy
Zzo6cHJlSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnBvc3RJbmRleCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNQcmVJbmRleCBjb25zdCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNQb3N0SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzTWVtb3J5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpi
YXNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpvZmZzZXQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1AgY29uc3QpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzRlAgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
VmFsaWRQcmVJbmRleEZvcm0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRQ
b3N0SW5kZXhGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkRm9ybSBj
b25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmFzUHJlSW5kZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjphc1Bvc3RJbmRleEFkZHJlc3MgY29uc3QpOgorICAgICAgICAqIGIzL2Fpci9BaXJM
b3dlclN0YWNrQXJncy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omxvd2VyU3RhY2tBcmdz
KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAgICogYjMvYWly
L29wY29kZV9nZW5lcmF0b3IucmI6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgICog
YjMvdGVzdGIzXzMuY3BwOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDMyKToKKyAgICAgICAg
KHRlc3RMb2FkUHJlSW5kZXg2NCk6CisgICAgICAgICh0ZXN0TG9hZFBvc3RJbmRleCk6CisgICAg
ICAgIChhZGRTaHJUZXN0cyk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpqaXRXcml0ZVRodW5rR2VuZXJhdG9yKToKKwogMjAyMS0wNy0yMSAg
S2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBzcGVjdWxh
dGVOZWl0aGVyRG91YmxlTm9yU3RyaW5nTm9ySGVhcEJpZ0ludCBzaG91bGQgb25seSBoYXZlIGEg
c2luZ2xlIEpTVHlwZSBicmFuY2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKaW5kZXggM2QxOTQ5YTQwNzg1ZDk5
Y2E2MTU5NWFhYjA0YmU2ZjFkMGQ5NmJhMy4uMjM1NGM0NTM2OGM3YzBkNWNlOTAxOGFjZmYyODRj
NGEwYTA0MzFhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
YnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAgLTI0NSw2ICsyNDUsMzQgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8vIFByZUluZGV4QWRkcmVzczoKKyAgICAvLwor
ICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwcmUtaW5j
cmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3QgUHJlSW5kZXhBZGRyZXNzIHsKKyAg
ICAgICAgUHJlSW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAg
ICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRl
eDsKKyAgICB9OworCisgICAgLy8gUG9zdEluZGV4QWRkcmVzczoKKyAgICAvLworICAgIC8vIERl
c2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwb3N0LWluY3JlbWVudC9k
ZWNyZW1lbnQgaW5kZXguCisgICAgc3RydWN0IFBvc3RJbmRleEFkZHJlc3MgeworICAgICAgICBQ
b3N0SW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAgICAgICAg
OiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRleDsKKyAg
ICB9OworCiAgICAgLy8gQWJzb2x1dGVBZGRyZXNzOgogICAgIC8vCiAgICAgLy8gRGVzY3JpYmVz
IGFuIG1lbW9yeSBvcGVyYW5kIGdpdmVuIGJ5IGEgcG9pbnRlci4gIEZvciByZWd1bGFyIGxvYWQg
JiBzdG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2
OTA5MGZkLi4yYTkxMmQwZGQyNjYyNmJkNzRlMTAzYmVmOTY1ZjJiYWRmY2UwYmQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaApAQCAtMTQ0NSw5ICsxNDQ1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDw2ND4oYWRk
cmVzcywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkNjQoUmVnaXN0ZXJJRCBzcmMsIFBv
c3RJbmRleCBzaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQoUHJlSW5kZXhB
ZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIu
bGRyPDY0PihkZXN0LCBzcmMsIHNpbW0pOworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRl
c3QsIHNyYy5iYXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxv
YWQ2NChQb3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRl
eCkpOwogICAgIH0KIAogICAgIERhdGFMYWJlbDMyIGxvYWQ2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0
Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCkBAIC0xNTQ0LDYgKzE1NDksMTYg
QEAgcHVibGljOgogICAgICAgICBsb2FkPDMyPihhZGRyZXNzLCBkZXN0KTsKICAgICB9CiAKKyAg
ICB2b2lkIGxvYWQzMihQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRleChz
cmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihQb3N0SW5kZXhBZGRyZXNzIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihk
ZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKwogICAgIERhdGFM
YWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKQEAg
LTE3MzMsNyArMTc0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4o
bWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGlu
ZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgIG1fYXNzZW1i
bGVyLnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rlcik7CiAgICAg
fQotICAgIAorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBQcmVJbmRleEFkZHJl
c3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJh
c2UsIFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlNjQoUmVn
aXN0ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2UsIFBvc3RJbmRleChkZXN0LmluZGV4KSk7Cisg
ICAgfQorCiAgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBjb25zdCB2b2lkKiBhZGRy
ZXNzKQogICAgIHsKICAgICAgICAgc3RvcmU8NjQ+KHNyYywgYWRkcmVzcyk7CkBAIC0xNzc3LDEx
ICsxODAyLDYgQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KGRhdGFUZW1wUmVnaXN0ZXIsIGFk
ZHJlc3MpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0LCBQb3N0SW5kZXggc2ltbSkKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnN0
cjw2ND4oc3JjLCBkZXN0LCBzaW1tKTsKLSAgICB9Ci0gICAgCiAgICAgRGF0YUxhYmVsMzIgc3Rv
cmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVz
cykKICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTg3OSw2ICsx
ODk5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lzdGVyLCBhZGRy
ZXNzKTsKICAgICB9CiAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4
QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRl
c3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUz
MihSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgp
KTsKKyAgICB9CisKICAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRj
aChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgRGF0YUxh
YmVsMzIgbGFiZWwodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL3Rlc3RtYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVz
dG1hc20uY3BwCmluZGV4IGYyMmJmZmNlMTU1NGIwMmMyMjZjMjE0OTJhYjA2N2JhYjM4YzQwYjUu
LjUzNGVmZTE0M2Y3OTBiOTA5ODliYzJjYzYzZmYwOWEwNDY3ZTU1N2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCkBAIC0yMjEyLDYgKzIyMTIsMTc2
IEBAIHZvaWQgdGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCiAgICAgICAgIH0K
ICAgICB9CiB9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKQoreworICAgIGludDMy
X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50cHRyX3QgYWRkciA9IGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMyX3QgaW5kZXggPSBzaXplb2YoaW50MzJf
dCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQzMl90IHNyYykgeworICAgICAgICBhdXRv
IHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBl
bWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAqKytwMSA9IDQ7IHJl
dHVybiBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
Q0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRl
eCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
aW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJf
dCogcDEgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QxKDQpKTsKKyAgICBDSEVDS19FUSgq
cDEsIDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1zWzFdKTsKKworICAgIGF1dG8gdGVzdDIg
PSBbJl0gKGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGpp
dCk7CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsgcmV0dXJuIHAyOworICAgICAgICAgICAg
aml0LnN0b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlBvc3RJbmRl
eEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0
Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQu
cmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9y
ZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCogcDIgPSBiaXR3aXNlX2Nhc3Q8
aW50MzJfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19FUSgqcDIsIDQpOworICAgIENIRUNLX0VR
KCotLXAyLCA1KTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVQb3N0SW5kZXg2NCgpCit7CisgICAg
aW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnRwdHJfdCBhZGRyID0gYml0d2lz
ZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVvZihp
bnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3Qgc3JjKSB7CisgICAgICAg
IGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICorK3AxID0g
NDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRH
UFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEs
IGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJl
dHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBp
bnQ2NF90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDEoNCkpOworICAgIENIRUNL
X0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEsIG51bXNbMV0pOworCisgICAgYXV0byB0
ZXN0MiA9IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysgPSA1OyByZXR1cm4gcDI7CisgICAgICAg
ICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UG9z
dEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAg
ICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAg
IGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+
KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2NF90KiBwMiA9IGJpdHdpc2Vf
Y2FzdDxpbnQ2NF90Kj4odGVzdDIoNSkpOworICAgIENIRUNLX0VRKCpwMiwgNCk7CisgICAgQ0hF
Q0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4MzIoKQorewor
ICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNp
emVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkg
eworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8v
IHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGlu
ZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0
QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAg
ICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90Pihsb2FkLCAmbnVtc1sx
XSk7CisgICAgfTsKKyAgICAKKyAgICBDSEVDS19FUSh0ZXN0MSg0KSwgMyk7CisgICAgQ0hFQ0tf
RVEobnVtc1syXSwgNCk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQzMl90IHJlcGxhY2Up
IHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7
CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAv
LyByZXMgPSAqcDIrKzsgKnAyID0gNTsgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIGppdC5sb2Fk
MzIoQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
aW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgaml0LnN0b3JlMzIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVwbGFjZSksIENDYWxsSGVscGVyczo6SW1wbGlj
aXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICAgICAgaml0Lm1vdmUo
R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7
CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KGxvYWQsICZudW1z
WzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVzdDIoNSksIDIpOworICAgIENIRUNLX0VR
KG51bXNbMl0sIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKQoreworICAg
IGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVv
ZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkgewor
ICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJl
cyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2NChD
Q2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRk
cmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUklu
Zm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7
CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1z
WzJdLCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkgeworICAg
ICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9
ICpwMisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2Fs
bEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW02NChyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJl
c3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAg
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4obG9hZCwgJm51bXNbMV0pOwor
ICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1sy
XSwgNSk7Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShB
Uk02NCkKQEAgLTQ0NzUsNiArNDY0NSwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIp
IFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdFhvck5vdFdp
dGhMZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0NjQoKSk7
CiAgICAgUlVOKHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CisKKyAgICBS
VU4odGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9yZVByZVBvc3RJ
bmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDMyKCkpOworICAgIFJVTih0
ZXN0TG9hZFByZVBvc3RJbmRleDY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUoQVJNNjRFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBkNWZjMzE2NDY1OTY4
ZWI3MzcxYjZmZjFjYzZmODMxN2ZlY2RlNTJlLi5lM2E0MTY3MDVjZWJlN2RkNDA5OGQ1NjNhMDNk
ZGEwM2QwNmNmMDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNw
cApAQCAtNTQ2LDE1ICs1NDYsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBzY2FsZTsKICAgICB9Ci0gICAgCisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4K
KyAgICBBcmcgYWRkcmVzc0FyZyhUbXAgYWRkcmVzcywgSW50IGluZGV4LCBJbmRleEtpbmQgaW5k
ZXhLaW5kID0gSW5kZXhLaW5kOjpOT05FKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpbmRleEtp
bmQpIHsKKyAgICAgICAgY2FzZSBJbmRleEtpbmQ6OlBSRToKKyAgICAgICAgICAgIHJldHVybiBB
cmc6OnByZUluZGV4KGFkZHJlc3MsIGluZGV4KTsKKyAgICAgICAgY2FzZSBJbmRleEtpbmQ6OlBP
U1Q6CisgICAgICAgICAgICByZXR1cm4gQXJnOjpwb3N0SW5kZXgoYWRkcmVzcywgaW5kZXgpOwor
ICAgICAgICBjYXNlIEluZGV4S2luZDo6Tk9ORToKKyAgICAgICAgICAgIHJldHVybiBBcmc6OmFk
ZHIoYWRkcmVzcywgaW5kZXgpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IEFyZygpOworICAgICAgICB9CisgICAgfQorCiAgICAgLy8gVGhpcyB0dXJucyB0aGUgZ2l2ZW4g
b3BlcmFuZCBpbnRvIGFuIGFkZHJlc3MuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBl
bmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+Ci0gICAgQXJnIGVmZmVjdGl2ZUFkZHIo
VmFsdWUqIGFkZHJlc3MsIEludCBvZmZzZXQsIFdpZHRoIHdpZHRoKQorICAgIEFyZyBlZmZlY3Rp
dmVBZGRyKFZhbHVlKiBhZGRyZXNzLCBJbnQgb2Zmc2V0LCBXaWR0aCB3aWR0aCwgSW5kZXhLaW5k
IGluZGV4S2luZCA9IEluZGV4S2luZDo6Tk9ORSkKICAgICB7CiAgICAgICAgIEFTU0VSVChBcmc6
OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIHdpZHRoKSk7CiAgICAgICAgIAogICAgICAgICBhdXRv
IGZhbGxiYWNrID0gWyZdICgpIC0+IEFyZyB7Ci0gICAgICAgICAgICByZXR1cm4gQXJnOjphZGRy
KHRtcChhZGRyZXNzKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBhZGRyZXNzQXJnKHRt
cChhZGRyZXNzKSwgb2Zmc2V0LCBpbmRleEtpbmQpOwogICAgICAgICB9OwogICAgICAgICAKICAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBsb3RzT2ZVc2VzID0gMTA7IC8vIFRoaXMg
aXMgYXJiaXRyYXJ5IGFuZCB3ZSBzaG91bGQgdHVuZSBpdCBldmVudHVhbGx5LgpAQCAtNjAzLDcg
KzYxOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEZyYW1lUG9pbnRl
cjoKLSAgICAgICAgICAgIHJldHVybiBBcmc6OmFkZHIoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBhZGRyZXNzQXJnKFRtcChHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIG9mZnNldCwgaW5kZXhLaW5kKTsKIAogICAgICAgICBj
YXNlIFNsb3RCYXNlOgogICAgICAgICAgICAgcmV0dXJuIEFyZzo6c3RhY2soYWRkcmVzcy0+YXM8
U2xvdEJhc2VWYWx1ZT4oKS0+c2xvdCgpLCBvZmZzZXQpOwpAQCAtNjQxLDcgKzY1Niw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIG9mZnNldCA9IHZhbHVlLT5vZmZzZXQo
KTsKICAgICAgICAgV2lkdGggd2lkdGggPSB2YWx1ZS0+YWNjZXNzV2lkdGgoKTsKIAotICAgICAg
ICBBcmcgcmVzdWx0ID0gZWZmZWN0aXZlQWRkcih2YWx1ZS0+bGFzdENoaWxkKCksIG9mZnNldCwg
d2lkdGgpOworICAgICAgICBBcmcgcmVzdWx0ID0gZWZmZWN0aXZlQWRkcih2YWx1ZS0+bGFzdENo
aWxkKCksIG9mZnNldCwgd2lkdGgsIHZhbHVlLT5pbmRleEtpbmQoKSk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlc3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpOwogCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CkBAIC0xMTQ2LDEyICsxMTYxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBBaXI6Ok1vdmUzMjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFN0b3Jl
MzIsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0oV2lkdGgz
MikpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9yZTMyLCBtX3ZhbHVl
LCB6ZXJvUmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0o
TW92ZTMyLCBBcmc6Olplcm9SZWcsIGRlc3Qua2luZCgpKSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdp
ZHRoMzIpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoTW92ZTMyLCBtX3Zh
bHVlLCB6ZXJvUmVnKCksIGRlc3QpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIEFpcjo6TW92ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFs
aWRGb3JtKFN0b3JlNjQsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxp
ZEZvcm0oV2lkdGg2NCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9y
ZTY0LCBtX3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAo
aXNWYWxpZEZvcm0oTW92ZSwgQXJnOjpaZXJvUmVnLCBkZXN0LmtpbmQoKSkgJiYgZGVzdC5pc1Zh
bGlkRm9ybShXaWR0aDY0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KE1v
dmUsIG1fdmFsdWUsIHplcm9SZWcoKSwgZGVzdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQyNjQsNiArNDI3OSw3IEBA
IHByaXZhdGU6CiAgICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxUbXA+PiBtX3R1cGxlUGhpVG9U
bXBzOyAvLyBUaGlzIGlzIHRoZSBzYW1lIGFzIG1fcGhpVG9UbXAgZm9yIFBoaXMgdGhhdCBhcmUg
VHVwbGVzLgogICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrKiwgQWlyOjpCYXNpY0Jsb2NrKj4g
bV9ibG9ja1RvQmxvY2s7CiAgICAgSGFzaE1hcDxWYXJpYWJsZSosIFZlY3RvcjxUbXA+PiBtX3Zh
cmlhYmxlVG9UbXBzOworICAgIEhhc2hNYXA8VG1wKiwgaW50PiBtX2FkZHJUb09mZnNldDsKIAog
ICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNoaWxkcmVu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKaW5kZXggZTc2ODI2NGMx
M2YxNjdlZjUwNmJiZWEyNjYxNjY3OTNjNjc1NzMzZS4uYWUyNWM5YjBlMmI1YzQzNGVhZTRkZjVk
ZGJjNjYxNGU2NTI5NDdiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TWVtb3J5VmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1
ZS5oCkBAIC0zNCw3ICszNCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
IAorZW51bSBjbGFzcyBJbmRleEtpbmQgOiB1aW50OF90IHsKKyAgICBQUkUsCisgICAgUE9TVCwK
KyAgICBOT05FCit9OworCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBNZW1vcnlWYWx1ZSA6IHB1
YmxpYyBWYWx1ZSB7CisKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKEtpbmQga2lu
ZCkKICAgICB7CkBAIC02OSw2ICs3Niw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBIZWFwUmFuZ2Um
IGZlbmNlUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2ZlbmNlUmFuZ2U7IH0KICAgICB2b2lkIHNl
dEZlbmNlUmFuZ2UoY29uc3QgSGVhcFJhbmdlJiByYW5nZSkgeyBtX2ZlbmNlUmFuZ2UgPSByYW5n
ZTsgfQogCisgICAgSW5kZXhLaW5kIGluZGV4S2luZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhL
aW5kOyB9CisgICAgdm9pZCBzZXRJbmRleEtpbmQoSW5kZXhLaW5kIGtpbmQpIHsgbV9pbmRleEtp
bmQgPSBraW5kOyB9CisKICAgICBib29sIGlzU3RvcmUoKSBjb25zdCB7IHJldHVybiBCMzo6aXNT
dG9yZShvcGNvZGUoKSk7IH0KICAgICBib29sIGlzTG9hZCgpIGNvbnN0IHsgcmV0dXJuIEIzOjpp
c0xvYWQob3Bjb2RlKCkpOyB9CiAKQEAgLTE1MCw2ICsxNjAsNyBAQCBwcml2YXRlOgogICAgIE9m
ZnNldFR5cGUgbV9vZmZzZXQgeyAwIH07CiAgICAgSGVhcFJhbmdlIG1fcmFuZ2UgeyBIZWFwUmFu
Z2U6OnRvcCgpIH07CiAgICAgSGVhcFJhbmdlIG1fZmVuY2VSYW5nZSB7IEhlYXBSYW5nZSgpIH07
CisgICAgSW5kZXhLaW5kIG1faW5kZXhLaW5kIHsgSW5kZXhLaW5kOjpOT05FIH07CiB9OwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Jl
ZHVjZVN0cmVuZ3RoLmNwcAppbmRleCAyMjgwZmQ3NzEyNTJlNzI2MGY2ODUwNTA5MmZkNTQzY2Zl
MDYxODU3Li5kNzNiNTYyNDZiMDM2MTY2ZTIxZGYxM2NmZjFiZjM5ZTIxYzA3ZWFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCkBAIC00MDIsNiAr
NDAyLDQ1IEBAIHByaXZhdGU6CiAgICAgaW50NjRfdCBtX21heCB7IDAgfTsKIH07CiAKK2NsYXNz
IFVzYWdlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVc2FnZSk7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgVXNhZ2UoVmFsdWUqIG5vVXNlLCBWYWx1ZSog
dXNlLCBib29sIGZvdW5kVXNlID0gZmFsc2UpCisgICAgICAgIDogbV9ub1VzZShub1VzZSkKKyAg
ICAgICAgLCBtX3VzZSh1c2UpCisgICAgICAgICwgbV9mb3VuZFVzZShmb3VuZFVzZSkKKyAgICB7
CisgICAgfQorCisgICAgflVzYWdlKCkKKyAgICB7CisgICAgfQorCisgICAgVmFsdWUqIG5vVXNl
KCkgeyByZXR1cm4gbV9ub1VzZTsgfQorCisgICAgVmFsdWUqIHVzZSgpIHsgcmV0dXJuIG1fdXNl
OyB9CisKKyAgICBib29sIGZvdW5kVXNlKCkgeyByZXR1cm4gbV9mb3VuZFVzZTsgfQorICAgIHZv
aWQgc2V0Rm91bmRVc2UoYm9vbCBmb3VuZCkgeyBtX2ZvdW5kVXNlID0gZm91bmQ7IH0KKworcHJp
dmF0ZToKKyAgICAvLyBHaXZlbjoKKyAgICAvLyB4ID0gQWRkKGFkZHIsIGltbTkpCisgICAgLy8g
eSA9IExvYWQoeCkKKyAgICAvLyB6ID0gcHJpbnQoeCkKKworICAgIC8vIFdlIG5lZWQgdG8gY29u
dmVydCBpdCB0bzoKKyAgICAvLyBMb2FkKGFkZHIsIFByZShpbW05KSkKKyAgICAvLyBwcmludChh
ZGRyKQorCisgICAgLy8gU28sIDEpIGFkZHIgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IG90aGVycyBl
eGNlcHQgeAorICAgIC8vICAgICAyKSB4IHNob3VsZCBiZSB1c2VkIGJ5IG90aGVycyBleGNlcHQg
eQorICAgIFZhbHVlKiBtX25vVXNlIHsgbnVsbHB0ciB9OyAvLyB1c2VkIHRvIHN0b3JlIGFkZHIK
KyAgICBWYWx1ZSogbV91c2UgeyBudWxscHRyIH07IC8vIHVzZWQgdG8gc3RvcmUgeAorICAgIGJv
b2wgbV9mb3VuZFVzZSB7IGZhbHNlIH07IC8vIHVzZWQgdG8gdHJhY2sgdGhlIGRpc2NvdmVyeSBv
ZiB0aGUgdXNhZ2Ugb2YgeCBieSBvdGhlcnMKK307CisKIGNsYXNzIFJlZHVjZVN0cmVuZ3RoIHsK
IHB1YmxpYzoKICAgICBSZWR1Y2VTdHJlbmd0aChQcm9jZWR1cmUmIHByb2MpCkBAIC00NzMsNiAr
NTEyLDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgcmVkdWNlVmFsdWVTdHJlbmd0
aCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkgPj0gMikKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VJZlJlZHVuZGFudCgpOworCisjaWYgQ1BVKEFS
TTY0KQorICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBtX3BvdGVudGlhbFByZUlu
ZGV4LmJlZ2luKCk7IGl0ICE9IG1fcG90ZW50aWFsUHJlSW5kZXguZW5kKCk7ICsraXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlID09IGl0LT5rZXkgfHwgbV92YWx1ZSA9
PSBpdC0+dmFsdWUtPnVzZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiBtX3ZhbHVlLT5j
aGlsZHJlbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+
bm9Vc2UoKSA9PSBjaGlsZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bv
dGVudGlhbFByZUluZGV4LnJlbW92ZShpdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT51c2UoKSA9PSBjaGlsZCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRGb3VuZFVzZSh0cnVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUobV9i
bG9jayk7CiAgICAgICAgICAgICB9CkBAIC00ODEsNiArNTM1LDIxIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGhhbmRsZUNoYW5nZWRDRkdJZk5lY2Vzc2FyeSgpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICByZXN1bHQgfD0gbV9jaGFuZ2VkOworCisjaWYgQ1BVKEFSTTY0KQorICAgICAgICAg
ICAgZm9yIChhdXRvIGl0ID0gbV9wb3RlbnRpYWxQcmVJbmRleC5iZWdpbigpOyBpdCAhPSBtX3Bv
dGVudGlhbFByZUluZGV4LmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LT52
YWx1ZS0+Zm91bmRVc2UoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBIZXJlIHdlIGNhbiB0
cmlnZ2VyIHByZS1pbmNyZW1lbnRhbCBpbmRleCBhZGRyZXNzIG1vZGUgaWYgd2UgZmluZCAKKyAg
ICAgICAgICAgICAgICAgICAgLy8gdGhlIEFERChhZGRyLCBpbW05KSB2YWx1ZSBpcyB1c2VkIHNv
bWV3aGVyZSBlbHNlLgorCisgICAgICAgICAgICAgICAgICAgIC8vIEl0IGlzIHNvIHdlcmlkISBU
aGUgdGVzdGFwaSBmYWlscyBvbiB0aGUgdGVzdCBjYXNlIHcvbyBlbnRyaW5nIHRoaXMgYmxvY2sh
CisgICAgICAgICAgICAgICAgICAgIGl0LT5rZXktPnNldEluZGV4S2luZChCMzo6SW5kZXhLaW5k
OjpQUkUpOworICAgICAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnVzZSgpLT5yZXBsYWNlV2l0
aElkZW50aXR5KGl0LT52YWx1ZS0+dXNlKCktPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgbV9pZ25vcmVQcmVQb3N0Q2FuZGlkYXRlcy5hZGQoaXQtPmtleSk7
CisgICAgICAgICAgICAgICAgbV9wb3RlbnRpYWxQcmVJbmRleC5yZW1vdmUoaXQpOworICAgICAg
ICAgICAgfQorI2VuZGlmCiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCAmJiBtX3Byb2Mub3B0
TGV2ZWwoKSA+PSAyKTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX3Byb2Mub3B0TGV2ZWwoKSA8
IDIpIHsKQEAgLTQ4OCw3ICs1NTcsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgc2ltcGxpZnlD
RkcoKTsKICAgICAgICAgICAgIGhhbmRsZUNoYW5nZWRDRkdJZk5lY2Vzc2FyeSgpOwogICAgICAg
ICB9Ci0gICAgICAgIAorCisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBtX2lnbm9yZVByZVBvc3RD
YW5kaWRhdGVzLmNsZWFyKCk7CisgICAgICAgIG1fcG90ZW50aWFsUHJlSW5kZXguY2xlYXIoKTsK
KyNlbmRpZgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTE5MzUsMTQg
KzIwMDgsMzkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIEFsc28gdHVybnMgdGhpczogU3Rv
cmUodmFsdWUsIEFkZChhZGRyZXNzLCBvZmZzZXQxKSwgb2Zmc2V0ID0gb2Zmc2V0MikKICAgICAg
ICAgICAgIC8vIEludG8gdGhpczogU3RvcmUodmFsdWUsIGFkZHJlc3MsIG9mZnNldCA9IG9mZnNl
dDEgKyBvZmZzZXQyKQogICAgICAgICAgICAgaWYgKGFkZHJlc3MtPm9wY29kZSgpID09IEFkZCAm
JiBhZGRyZXNzLT5jaGlsZCgxKS0+aGFzSW50UHRyKCkpIHsKKwogICAgICAgICAgICAgICAgIGlu
dHB0cl90IG9mZnNldCA9IGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludFB0cigpOwogICAgICAgICAg
ICAgICAgIGlmICghc3VtT3ZlcmZsb3dzPGludHB0cl90PihvZmZzZXQsIG1lbW9yeS0+b2Zmc2V0
KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBtZW1vcnktPm9mZnNldCgpOwog
ICAgICAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRp
Y19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoc21hbGxPZmZzZXQgPT0gb2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRy
ZXNzID0gYWRkcmVzcy0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkt
Pmxhc3RDaGlsZCgpID0gYWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+
bGFzdENoaWxkKCkgPSBhZGRyZXNzLT5jaGlsZCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IG1lbW9yeS0+c2V0T2Zmc2V0KHNtYWxsT2Zmc2V0KTsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIHRyeVByZUluZGV4ID0gWyZdICgpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3Byb2Mub3B0TGV2ZWwoKSA8IDIgfHwgbWVt
b3J5LT5vcGNvZGUoKSAhPSBMb2FkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+dHlw
ZSgpICE9IEludDMyICYmIG1lbW9yeS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFBaXI6OkFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybShzbWFsbE9mZnNldCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobV9pZ25vcmVQcmVQb3N0Q2FuZGlkYXRlcy5maW5kKG1lbW9yeSkg
IT0gbV9pZ25vcmVQcmVQb3N0Q2FuZGlkYXRlcy5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtX3BvdGVudGlhbFByZUluZGV4LmZpbmQobWVtb3J5KSAhPSBtX3BvdGVudGlhbFByZUluZGV4
LmVuZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBvbmUgaXMgdHJpY2t5LiBDYW5ub3QgZmlndXJlIG91dCB3aHkgYnV0IHcvbyB0aGlz
IG9uZSB0aGUgdGVzdGFwaSBmYWlscyBhdCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0aGUgdGVzdCBjYXNlICJjaGVja1Jlc3VsdChAIlJhbiBjb2RlIGluIGZpdmUgY29uY3VycmVu
dCBWTXMgdGhhdCBHQydkIiwgb2spOyIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IG9mIGZpbGUgdGVzdGFwaS5tbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRk
cmVzcy0+Y2hpbGQoMCktPm9wY29kZSgpID09IExvYWQpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRyeVByZUluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9wb3RlbnRpYWxQcmVJbmRleC5hZGQobWVtb3J5LCBtYWtlVW5pcXVlPFVzYWdlPihhZGRyZXNz
LT5jaGlsZCgwKSwgYWRkcmVzcywgZmFsc2UpKTsKKyNlbmRpZgogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KQEAgLTMwMzQsNiArMzEzMiw4IEBAIHByaXZhdGU6CiAgICAgSW5zZXJ0aW9uU2V0
IG1faW5zZXJ0aW9uU2V0OwogICAgIEJsb2NrSW5zZXJ0aW9uU2V0IG1fYmxvY2tJbnNlcnRpb25T
ZXQ7CiAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiBtX3ZhbHVlRm9yQ29uc3RhbnQ7Cisg
ICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIHN0ZDo6dW5pcXVlX3B0cjxVc2FnZT4+IG1fcG90ZW50
aWFsUHJlSW5kZXg7CisgICAgSGFzaFNldDxNZW1vcnlWYWx1ZSo+IG1faWdub3JlUHJlUG9zdENh
bmRpZGF0ZXM7CiAgICAgQmFzaWNCbG9jayogbV9yb290IHsgbnVsbHB0ciB9OwogICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9pbmRleCB7IDAgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAppbmRleCAxMDNjNmVjY2EzZDMx
NGJiNGVkOGMwMmE0ZDJmMDA5Y2E2NDFkMDAxLi41NGYwZjk2ZTNjNTU4ZjMzMGY5N2M2NmI4MjQw
MmIzYjE5OTgwMWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCkBA
IC0xMzAsNiArMTMwLDExIEBAIHVuc2lnbmVkIEFyZzo6anNIYXNoKCkgY29uc3QKICAgICAgICAg
cmVzdWx0ICs9IG1fYmFzZS5pbnRlcm5hbFZhbHVlKCk7CiAgICAgICAgIHJlc3VsdCArPSBtX2lu
ZGV4LmludGVybmFsVmFsdWUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcmVJbmRleDoK
KyAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgcmVzdWx0ICs9IG1fb2Zmc2V0OworICAgICAg
ICByZXN1bHQgKz0gbV9iYXNlLmludGVybmFsVmFsdWUoKTsKKyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBTdGFjazoKICAgICAgICAgcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3Nj
YWxlKTsKICAgICAgICAgcmVzdWx0ICs9IHN0YWNrU2xvdCgpLT5pbmRleCgpOwpAQCAtMTYxLDcg
KzE2Niw3IEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAg
IG91dC5wcmludGYoIiQweCVsbHgiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KG1f
b2Zmc2V0KSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFplcm9SZWc6Ci0gICAgICAgIG91
dC5wcmludCgiJSV4enIiKTsKKyAgICAgICAgb3V0LnByaW50KCIleHpyIik7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2Uo
KSwgIikiKTsKQEAgLTE4MCw2ICsxODUsMTIgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKICAgICAgICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxlKCkpOwogICAgICAg
ICBvdXQucHJpbnQoIikiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJlSW5kZXg6Cisg
ICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIixQcmUoIiwgb2Zmc2V0KCksICIpKSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAgIG91dC5wcmludCgi
KCIsIGJhc2UoKSwgIixQb3N0KCIsIG9mZnNldCgpLCAiKSkiKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGlmIChvZmZzZXQoKSkKICAgICAgICAgICAgIG91dC5w
cmludChvZmZzZXQoKSk7CkBAIC0yNjEsNiArMjcyLDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBBcmc6OktpbmQga2luZCkKICAgICBjYXNlIEFyZzo6SW5kZXg6CiAg
ICAgICAgIG91dC5wcmludCgiSW5kZXgiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJn
OjpQcmVJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQcmVJbmRleCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBcmc6OlBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQb3N0SW5k
ZXgiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpSZWxDb25kOgogICAgICAgICBv
dXQucHJpbnQoIlJlbENvbmQiKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmgKaW5kZXggY2U1YTRlNzM3OWFkNjQ0NDVmMGMzYWJkMTI5ZjMyOWI5NDdm
ZTgxMi4uZWEyMjYyOGFlMTJlMTFmZWI0NWRmNjdhY2YzZGE4ZDY4NjBiNGZkOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCkBAIC0xLDMgKzEsNCBAQAorCiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
QEAgLTc3LDYgKzc4LDggQEAgcHVibGljOgogICAgICAgICBTdGFjaywKICAgICAgICAgQ2FsbEFy
ZywKICAgICAgICAgSW5kZXgsCisgICAgICAgIFByZUluZGV4LAorICAgICAgICBQb3N0SW5kZXgs
CiAKICAgICAgICAgLy8gSW1tZWRpYXRlIG9wZXJhbmRzIHRoYXQgY3VzdG9taXplIHRoZSBiZWhh
dmlvciBvZiBhbiBvcGVyYXRpb24uIFlvdSBjYW4gdGhpbmsgb2YgdGhlbSBhcwogICAgICAgICAv
LyBzZWNvbmRhcnkgb3Bjb2Rlcy4gVGhleSBhcmUgYWx3YXlzICJVc2UiJ2QuCkBAIC02NDksNiAr
NjUyLDMwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEFyZzo6aW5kZXgoYmFzZSwgaW5kZXgs
IHNjYWxlLCAwKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1l
ID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgQXJnIHByZUluZGV4KEFp
cjo6VG1wIGJhc2UsIEludCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1Ao
KSk7CisgICAgICAgIEFTU0VSVChpc0ludDkoaW5kZXgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFByZUluZGV4OworICAgICAgICByZXN1bHQubV9iYXNl
ID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9
IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIEFyZyBwb3N0SW5kZXgoQWly
OjpUbXAgYmFzZSwgSW50IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgp
KTsKKyAgICAgICAgQVNTRVJUKGlzSW50OShpbmRleCkpOworICAgICAgICBBcmcgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9raW5kID0gUG9zdEluZGV4OworICAgICAgICByZXN1bHQubV9iYXNl
ID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCiAgICAgc3RhdGljIEFyZyByZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIEFyZyByZXN1
bHQ7CkBAIC03OTksNiArODI2LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9
PSBJbmRleDsKICAgICB9CiAKKyAgICBib29sIGlzUHJlSW5kZXgoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGtpbmQoKSA9PSBQcmVJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUG9z
dEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUG9zdEluZGV4
OworICAgIH0KKwogICAgIGJvb2wgaXNNZW1vcnkoKSBjb25zdAogICAgIHsKICAgICAgICAgc3dp
dGNoIChraW5kKCkpIHsKQEAgLTgwOCw2ICs4NDUsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
U3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAg
ICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTk3Miw3ICsxMDExLDcgQEAgcHVibGljOgogCiAgICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0
CiAgICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09
IEFkZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXgp
OworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIg
fHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXggfHwga2lu
ZCgpID09IFByZUluZGV4IHx8IGtpbmQoKSA9PSBQb3N0SW5kZXgpOwogICAgICAgICByZXR1cm4g
bV9iYXNlOwogICAgIH0KIApAQCAtOTgyLDcgKzEwMjEsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBpZiAoa2luZCgpID09IFN0YWNrKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFZhbHVlOjpPZmZzZXRUeXBlPihtX3NjYWxlKTsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBB
ZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcg
fHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtp
bmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgp
ID09IEluZGV4IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8fCBraW5kKCkgPT0gUG9zdEluZGV4KTsK
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCk7
CiAgICAgfQogCkBAIC0xMDQ0LDYgKzEwODMsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQWRk
cjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6
CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAg
ICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgUmVsQ29u
ZDoKQEAgLTEwODEsNiArMTEyMiw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBZGRyOgogICAg
ICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAg
ICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgIGNhc2Ug
U3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBCaWdJbW06IC8vIFll
cywgd2UgYWxsb3cgQmlnSW1tIGFzIGEgZG91YmxlIGltbWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9y
IGltcGxlbWVudGluZyBzdGFja21hcHMuCkBAIC0xMjM3LDYgKzEyODAsMjIgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50
LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wg
aXNWYWxpZFByZUluZGV4Rm9ybShJbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKGlzQVJN
NjQoKSkKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkU2lnbmVkSW1tOShvZmZzZXQpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0
eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNW
YWxpZFBvc3RJbmRleEZvcm0oSW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChpc0FSTTY0
KCkpCisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFNpZ25lZEltbTkob2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgd2lk
dGggdGhlbiB0aGlzIG9wdGltaXN0aWNhbGx5IGFzc3VtZXMgdGhhdCB5b3UncmUgdXNpbmcgdGhl
IHJpZ2h0IHdpZHRoLiBCdXQKICAgICAvLyB0aGUgd2lkdGggaXMgcmVsZXZhbnQgdG8gdmFsaWRp
dHksIHNvIHBhc3NpbmcgYSBudWxsIHdpZHRoIGlzIG9ubHkgdXNlZnVsIGZvciBhc3NlcnRpb25z
LiBEb24ndAogICAgIC8vIHBhc3MgbnVsbCB3aWR0aHMgd2hlbiBjYXNjYWRpbmcgdGhyb3VnaCBB
cmdzIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciEKQEAgLTEyNjUsNiArMTMyNCwxMCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEFkZHJGb3JtKG9mZnNldCgpLCB3aWR0
aCk7CiAgICAgICAgIGNhc2UgSW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEluZGV4
Rm9ybShzY2FsZSgpLCBvZmZzZXQoKSwgd2lkdGgpOworICAgICAgICBjYXNlIFByZUluZGV4Ogor
ICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRQcmVJbmRleEZvcm0ob2Zmc2V0KCkpOworICAgICAg
ICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkUG9zdEluZGV4Rm9y
bShvZmZzZXQoKSk7CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25k
OgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CkBAIC0xMjg0LDYgKzEzNDcsOCBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgU2ltcGxlQWRkcjoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBj
YXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAg
Y2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBJbmRleDoKQEAgLTEzMjYsNiArMTM5MSw4IEBAIHB1Ymxp
YzoKICAgICAgICAgY2FzZSBTaW1wbGVBZGRyOgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAg
IGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAg
ICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQLCBh
cmdSb2xlID09IFVzZUFkZHIgPyBhcmdXaWR0aCA6IHBvaW50ZXJXaWR0aCgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEluZGV4OgpAQCAtMTM4Myw2ICsxNDUwLDE4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNl
dCksIG1fZXh0ZW5kKTsKICAgICB9CiAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRy
ZXNzIGFzUHJlSW5kZXhBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1By
ZUluZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVz
cyhtX2Jhc2UuZ3ByKCksIG9mZnNldCgpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
UG9zdEluZGV4QWRkcmVzcyBhc1Bvc3RJbmRleEFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzUG9zdEluZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6
OlBvc3RJbmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBvZmZzZXQoKSk7CisgICAgfQorCiAgICAg
TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9u
KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwCmluZGV4IDkw
NWU2MTdmYmRlMGUyYjdkNzU1NTYzZTY4ODU4OWJkYWQ3MjZjODAuLjZhZDA1ODQyNjdiOGM3ZWU3
MTQ5YjAyZjgyMzE1NzJiZWU4Y2Y4YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBs
b3dlclN0YWNrQXJncyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHdpZHRoID09IFdpZHRoMzIpOwogCiAjaWYgQ1BVKEFSTTY0KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlID0gU3RvcmUzMjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBzdG9yZU9wY29kZSA9IE1v
dmUzMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBaXI6OkFyZzo6S2luZCBvcGVyYW5k
S2luZCA9IEFyZzo6WmVyb1JlZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBaXI6OkFy
ZyBvcGVyYW5kID0gQXJnOjp6ZXJvUmVnKCk7CiAjZWxpZiBDUFUoWDg2XzY0KQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXggNjYxZWFkZDIz
NzNjNTRhNGJiYTk0N2E1NGJkYTI1NTdiZGI4YWU0YS4uOWZlYmFkOTg2MzMzYmVjYWFkMzVlZDI1
NGJmMzUyZTAxMDkwNjZiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wY29kZS5vcGNvZGVzCkBAIC02NDcsNiArNjQ3LDEyIEBAIE1vdmUgVTpHOlB0ciwgRDpHOlB0
cgogICAgIEluZGV4LCBUbXAgYXMgbG9hZFB0cgogICAgIFRtcCwgQWRkciBhcyBzdG9yZVB0cgog
ICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQdHIKKyAgICBhcm02NDogWmVyb1JlZywgQWRkciBhcyBz
dG9yZTY0CisgICAgYXJtNjQ6IFplcm9SZWcsIEluZGV4IGFzIHN0b3JlNjQKKyAgICBhcm02NDog
UHJlSW5kZXgsIFRtcCBhcyBsb2FkNjQKKyAgICBhcm02NDogUG9zdEluZGV4LCBUbXAgYXMgbG9h
ZDY0CisgICAgYXJtNjQ6IFRtcCwgUHJlSW5kZXggYXMgc3RvcmU2NAorICAgIGFybTY0OiBUbXAs
IFBvc3RJbmRleCBhcyBzdG9yZTY0CiAgICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmVQdHIKIAog
IyBUaGlzIGlzIGZvciBtb3ZpbmcgYmV0d2VlbiBzcGlsbCBzbG90cy4KQEAgLTY2Nyw2ICs2NzMs
MTIgQEAgTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIEluZGV4LCBUbXAgYXMgbG9hZDMyCiAg
ICAgVG1wLCBBZGRyIGFzIHN0b3JlMzIKICAgICBUbXAsIEluZGV4IGFzIHN0b3JlMzIKKyAgICBh
cm02NDogWmVyb1JlZywgQWRkciBhcyBzdG9yZTMyCisgICAgYXJtNjQ6IFplcm9SZWcsIEluZGV4
IGFzIHN0b3JlMzIKKyAgICBhcm02NDogUHJlSW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBhcm02
NDogUG9zdEluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgYXJtNjQ6IFRtcCwgUHJlSW5kZXggYXMg
c3RvcmUzMgorICAgIGFybTY0OiBUbXAsIFBvc3RJbmRleCBhcyBzdG9yZTMyCiAgICAgeDg2OiBJ
bW0sIFRtcCBhcyB6ZXJvRXh0ZW5kMzJUb1dvcmQKICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9y
ZTMyCiAgICAgeDg2OiBJbW0sIEluZGV4IGFzIHN0b3JlMzIKQEAgLTY3NSwxNCArNjg3LDYgQEAg
TW92ZTMyIFU6RzozMiwgWkQ6RzozMgogTW92ZTMyIFU6RzozMiwgWkQ6RzozMiwgUzpHOjMyCiAg
ICAgQWRkciwgQWRkciwgVG1wCiAKLWFybTY0OiBTdG9yZTMyIFU6RzozMiwgWkQ6RzozMgotICAg
IFplcm9SZWcsIEFkZHIKLSAgICBaZXJvUmVnLCBJbmRleAotCi1hcm02NDogU3RvcmU2NCBVOkc6
NjQsIEQ6Rzo2NAotICAgIFplcm9SZWcsIEFkZHIKLSAgICBaZXJvUmVnLCBJbmRleAotCiBTaWdu
RXh0ZW5kMzJUb1B0ciBVOkc6MzIsIEQ6RzpQdHIKICAgICBUbXAsIFRtcAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKaW5kZXggMzc0MGVm
ZGJkZDE0NmEzN2Y2ZWRlOWRkYmMyM2RkYmEwM2IwNzY0Ni4uZjFiZjFhNDZjZmM4ODllYzE5MzQ2
ZjJjMDZiN2NmNTBmOWUzZGUwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvb3Bjb2RlX2dlbmVyYXRvci5yYgpAQCAtMjI5LDcgKzIyOSw3IEBAIGRlZiBpc0dGKHRva2Vu
KQogZW5kCiAKIGRlZiBpc0tpbmQodG9rZW4pCi0gICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0p
fChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KFplcm9SZWcpfChTaW1wbGVBZGRyKXwoQWRk
cil8KEV4dGVuZGVkT2Zmc2V0QWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3Vi
bGVDb25kKXwoU3RhdHVzQ29uZCkpXFovCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChC
aWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KFplcm9SZWcpfChTaW1wbGVBZGRyKXwoQWRkcil8
KEV4dGVuZGVkT2Zmc2V0QWRkcil8KEluZGV4KXwoUHJlSW5kZXgpfChQb3N0SW5kZXgpfChSZWxD
b25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KIGVuZAogCiBkZWYg
aXNBcmNoKHRva2VuKQpAQCAtMzAzLDcgKzMwMyw3IEBAIGNsYXNzIFBhcnNlcgogCiAgICAgZGVm
IGNvbnN1bWVLaW5kCiAgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwotICAgICAgICBwYXJz
ZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgWmVy
b1JlZywgVG1wLCBTaW1wbGVBZGRyLCBBZGRyLCBFeHRlbmRlZE9mZnNldEFkZHIsIEluZGV4LCBS
ZWxDb25kLCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVubGVzcyBpc0tp
bmQocmVzdWx0KQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0lt
bSwgQml0SW1tLCBCaXRJbW02NCwgWmVyb1JlZywgVG1wLCBTaW1wbGVBZGRyLCBBZGRyLCBFeHRl
bmRlZE9mZnNldEFkZHIsIEluZGV4LCBQcmVJbmRleCwgUG9zdEluZGV4LCBSZWxDb25kLCBSZXND
b25kLCBEb3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQog
ICAgICAgICBhZHZhbmNlCiAgICAgICAgIHJlc3VsdAogICAgIGVuZApAQCAtOTI5LDYgKzkyOSwx
MiBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICB3aGVuICJJ
bmRleCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZElu
ZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5zY2FsZSgpLCBhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSwg
I3thcmcud2lkdGhDb2RlfSkpIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VO
X1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIHdoZW4gIlByZUluZGV4IgorICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKGFy
Z3NbI3tpbmRleH1dLm9mZnNldCgpKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
T1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgd2hlbiAiUG9zdEluZGV4Igor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkUG9zdEluZGV4
Rm9ybShhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSkpIgorICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgogICAgICAgICAgICAgICAgIHdoZW4gIkJpZ0lt
bSIKICAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAgIHdoZW4g
IlJlc0NvbmQiCkBAIC0xMjM1LDYgKzEyNDEsMTAgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQi
KSB7CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQWRk
cmVzcygpIgogICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4IgogICAgICAgICAgICAgICAgICAg
ICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAgICAg
ICAgIHdoZW4gIlByZUluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdz
WyN7aW5kZXh9XS5hc1ByZUluZGV4QWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIlBv
c3RJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0u
YXNQb3N0SW5kZXhBZGRyZXNzKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29uZCIKICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZWxhdGlvbmFs
Q29uZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuaAppbmRleCBjNzAzMmVjMDg0ZGRmZGQ5MzVlNTUyN2ZhYWU5MzU2ODE5ODQ4
MTc5Li45Nzk3YzQyZDkzMmI1MjhjNDkyM2ZjZGE2ZjQ1NzkzMmNiMTU4MTIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0xMTQwLDQgKzExNDAsOCBAQCB2b2lkIGFkZENvcHlUZXN0
cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYp
OwogCiBib29sIHNob3VsZFJ1bihjb25zdCBjaGFyKiBmaWx0ZXIsIGNvbnN0IGNoYXIqIHRlc3RO
YW1lKTsKIAordm9pZCB0ZXN0TG9hZFByZUluZGV4MzIoKTsKK3ZvaWQgdGVzdExvYWRQcmVJbmRl
eDY0KCk7Cit2b2lkIHRlc3RMb2FkUG9zdEluZGV4KCk7CisKICNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKaW5kZXggNGM1MmFkYTljYzQw
MmRkZTUzOTg4Y2M4ZjJmNWU5ZTBkZGUyZTExYy4uYWNhMDkzZjkzMTg1OTdjNWIxMzY5MDU5ODgy
ZTgzYTEwMjdkNjM5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
M18zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCkBAIC0y
OCw2ICsyOCwxNjYgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKK3ZvaWQgdGVzdExvYWRQcmVJ
bmRleDMyKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisg
ICAgICAgIHJldHVybjsKKworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2
LCA3LCA4LCA5LCAxMCB9OworICAgIGludDMyX3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJh
c2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxv
b3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFk
ZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50MzIpOwor
ICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICByb290LT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHJvb3Qt
PmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgMCkpOworICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVt
cCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgVmFsdWUqIHIy
ID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmln
aW4oKSwgcik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbnN0MTAgPSBs
b29wVGVzdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKTsKKyAg
ICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1
YWwsIE9yaWdpbigpLCByMiwgY29uc3QxMCk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9u
ZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgVmFsdWUqIGNvbnN0NCA9IGxv
b3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCk7CisgICAg
VmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4o
KSwgcDIsIGNvbnN0NCk7CisgICAgTWVtb3J5VmFsdWUqIGxvYWQgPSBsb29wQm9keS0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHAzKTsKKyAgICBW
YWx1ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigp
LCByMiwgbG9hZCk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9j
LCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBsb29wQm9k
eS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVk
QmxvY2sobG9vcFRlc3QpKTsKKworICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgIGRvbmUtPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcikpOyAgIAorCisgICAgcHJv
Yy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShw
cm9jKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQzMl90IHsKKyAgICAgICAgaW50
MzJfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAgIHIgKz0gKisr
cHRyOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFu
ZFJ1bjxpbnQzMl90Pihwcm9jLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkp
OworfQorCit2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpCit7CisgICAgaWYgKE9wdGlvbnM6OmRl
ZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQ2NF90IG51
bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQ2NF90KiBw
dHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBw
cm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFi
bGUoSW50NjQpOworCisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIz
OjpTZXQsIE9yaWdpbigpLCByLCByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4o
KSwgSW50NjQsIDApKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OlNldCwgT3JpZ2luKCksIHAsIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgcm9vdC0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9v
cFRlc3QpKTsKKworICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BU
ZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHAp
OworICAgIFZhbHVlKiBjb25zdDEwID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KHByb2MsIE9yaWdpbigpLCAxMCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGNvbnN0MTApOworICAg
IGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwg
Y29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsK
KworICAgIFZhbHVlKiBjb25zdDggPSBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDgpOworICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBjb25zdDgpOworICAgIE1lbW9yeVZhbHVl
KiBsb2FkID0gbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50
NjQsIE9yaWdpbigpLCBwMyk7CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvYWQpOworICAgIGxvb3BCb2R5LT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAg
ICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdp
bigpLCBwLCBwMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBK
dW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICBkb25lLT5h
cHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAor
ICAgICAgICBkb25lLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3Jp
Z2luKCksIHIpKTsgICAKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxp
ZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkg
LT4gaW50NjRfdCB7CisgICAgICAgIGludDY0X3QgciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwg
MTApCisgICAgICAgICAgICByICs9ICorK3B0cjsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsK
KworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYml0d2lzZV9jYXN0
PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKwordm9pZCB0ZXN0TG9hZFBvc3RJbmRleCgp
Cit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwg
OSwgMTAgfTsKKyAgICBpbnQ2NF90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygp
OworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKyAgICBWYXJp
YWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgcm9vdC0+YXBwZW5kTmV3
PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByb290LT5hcHBlbmRJ
bnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50NjQsIDApKTsKKyAgICByb290LT5hcHBlbmRO
ZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdp
bigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIFZhbHVlKiByMiA9IGxvb3BU
ZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIp
OworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJv
YywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25zdDEwID0gbG9vcFRlc3Qt
PmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCk7CisgICAgVmFsdWUq
IGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmln
aW4oKSwgcjIsIGNvbnN0MTApOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
cHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVx
dWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIE1lbW9yeVZhbHVlKiBsb2FkID0gbG9vcEJv
ZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLCBw
Mik7CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRk
LCBPcmlnaW4oKSwgcjIsIGxvYWQpOworICAgIFZhbHVlKiBjb25zdDggPSBsb29wQm9keS0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDgpOworICAgIFZhbHVlKiBwMyA9
IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBjb25z
dDgpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNl
dCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFs
dWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgbG9vcEJvZHktPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxv
b3BUZXN0KSk7CisKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICBkb25lLT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpKTsgICAKKworICAgIHByb2MucmVzZXRS
ZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisK
KyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50NjRfdCB7CisgICAgICAgIGludDY0X3QgciA9
IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9ICpwdHIrKzsKKyAg
ICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50
NjRfdD4ocHJvYywgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKwor
CiB2b2lkIHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzMyKCkKIHsKICAgICBpZiAoSlND
OjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKQEAgLTM2OTcsNiArMzg1NywxMCBA
QCB2b2lkIGFkZFNoclRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJl
ZFRhc2s8dm9pZCgpPj4+JiB0YXNrcykKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZm
ZmZmLCAwKSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMSkpOwogICAg
IFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDYzKSk7CisKKyAgICBSVU4odGVzdExv
YWRQcmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7CisgICAgUlVO
KHRlc3RMb2FkUG9zdEluZGV4KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCmlu
ZGV4IDYzZTI2Njc4ODUyMDE4YTc2ODBjYTVmMDcxNDY5NjgxMDU4ODRiM2IuLjY5YmI2YjJiZTgx
ODcwYjU5ODMzMzY3YWYyNjc1YjdmNGVmMDU2ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcApAQCAtMjMzLDggKzIzMyw4IEBAIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
aml0V3JpdGVUaHVua0dlbmVyYXRvCiAgICAgaml0LnJldCgpOwogCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGxvY2FsMCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5sb2FkNjQoeDEsIFBvc3RJ
bmRleCg4KSwgeDYpOwotICAgIGppdC5zdG9yZTY0KHg2LCB4MywgUG9zdEluZGV4KDgpKTsKKyAg
ICBqaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgxLCA4KSwgeDYp
OworICAgIGppdC5zdG9yZTY0KHg2LCBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyh4
MywgOCkpOwogICAgIHNtYWxsQ29weS5saW5rKCZqaXQpOwogICAgIGppdC5icmFuY2hTdWI2NChN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgyKS5saW5rVG8o
bG9jYWwwLCAmaml0KTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsb2NhbDIgPSBqaXQuYnJh
bmNoQWRkNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434096</attachid>
            <date>2021-07-23 10:18:22 -0700</date>
            <delta_ts>2021-07-23 10:36:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210723121821.patch</filename>
            <type>text/plain</type>
            <size>45423</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YzJiYTQ4MGQzMzQ0YTVkM2UyNTFiYzUyOGVhMWQ1NDk5YTk0NDQ0Li4zNTA4ZWUzYjc4OGRlOWZi
MTk2ZGM2NzczZDkxYmMyMzczZTc5MTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MCBAQAorMjAyMS0wNy0yMyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzOjpQcmVJbmRleEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzOjpQ
b3N0SW5kZXhBZGRyZXNzKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6c3RvcmUzMik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAg
ICAgKEpTQzo6dGVzdFN0b3JlUHJlUG9zdEluZGV4MzIpOgorICAgICAgICAoSlNDOjp0ZXN0U3Rv
cmVQcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJlUG9zdEluZGV4MzIp
OgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJbmRleDY0KToKKyAgICAgICAgKiBiMy9C
M0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIzL0IzTWVtb3J5VmFsdWUuaDoKKyAgICAgICAg
KiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpqc0hhc2ggY29uc3QpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmR1bXAgY29uc3QpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFs
KToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFy
Zzo6cHJlSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnBvc3RJbmRleCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNQcmVJbmRleCBjb25zdCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNQb3N0SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzTWVtb3J5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpi
YXNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpvZmZzZXQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1AgY29uc3QpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzRlAgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
VmFsaWRQcmVJbmRleEZvcm0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRQ
b3N0SW5kZXhGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkRm9ybSBj
b25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmFzUHJlSW5kZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjphc1Bvc3RJbmRleEFkZHJlc3MgY29uc3QpOgorICAgICAgICAqIGIzL2Fpci9BaXJM
b3dlclN0YWNrQXJncy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omxvd2VyU3RhY2tBcmdz
KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAgICogYjMvYWly
L29wY29kZV9nZW5lcmF0b3IucmI6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgICog
YjMvdGVzdGIzXzMuY3BwOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDMyKToKKyAgICAgICAg
KHRlc3RMb2FkUHJlSW5kZXg2NCk6CisgICAgICAgICh0ZXN0TG9hZFBvc3RJbmRleCk6CisgICAg
ICAgIChhZGRTaHJUZXN0cyk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpqaXRXcml0ZVRodW5rR2VuZXJhdG9yKToKKwogMjAyMS0wNy0yMSAg
S2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBzcGVjdWxh
dGVOZWl0aGVyRG91YmxlTm9yU3RyaW5nTm9ySGVhcEJpZ0ludCBzaG91bGQgb25seSBoYXZlIGEg
c2luZ2xlIEpTVHlwZSBicmFuY2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKaW5kZXggM2QxOTQ5YTQwNzg1ZDk5
Y2E2MTU5NWFhYjA0YmU2ZjFkMGQ5NmJhMy4uMjM1NGM0NTM2OGM3YzBkNWNlOTAxOGFjZmYyODRj
NGEwYTA0MzFhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
YnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAgLTI0NSw2ICsyNDUsMzQgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8vIFByZUluZGV4QWRkcmVzczoKKyAgICAvLwor
ICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwcmUtaW5j
cmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3QgUHJlSW5kZXhBZGRyZXNzIHsKKyAg
ICAgICAgUHJlSW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAg
ICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRl
eDsKKyAgICB9OworCisgICAgLy8gUG9zdEluZGV4QWRkcmVzczoKKyAgICAvLworICAgIC8vIERl
c2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwb3N0LWluY3JlbWVudC9k
ZWNyZW1lbnQgaW5kZXguCisgICAgc3RydWN0IFBvc3RJbmRleEFkZHJlc3MgeworICAgICAgICBQ
b3N0SW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAgICAgICAg
OiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRleDsKKyAg
ICB9OworCiAgICAgLy8gQWJzb2x1dGVBZGRyZXNzOgogICAgIC8vCiAgICAgLy8gRGVzY3JpYmVz
IGFuIG1lbW9yeSBvcGVyYW5kIGdpdmVuIGJ5IGEgcG9pbnRlci4gIEZvciByZWd1bGFyIGxvYWQg
JiBzdG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2
OTA5MGZkLi4yYTkxMmQwZGQyNjYyNmJkNzRlMTAzYmVmOTY1ZjJiYWRmY2UwYmQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaApAQCAtMTQ0NSw5ICsxNDQ1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDw2ND4oYWRk
cmVzcywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkNjQoUmVnaXN0ZXJJRCBzcmMsIFBv
c3RJbmRleCBzaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQoUHJlSW5kZXhB
ZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIu
bGRyPDY0PihkZXN0LCBzcmMsIHNpbW0pOworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRl
c3QsIHNyYy5iYXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxv
YWQ2NChQb3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRl
eCkpOwogICAgIH0KIAogICAgIERhdGFMYWJlbDMyIGxvYWQ2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0
Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCkBAIC0xNTQ0LDYgKzE1NDksMTYg
QEAgcHVibGljOgogICAgICAgICBsb2FkPDMyPihhZGRyZXNzLCBkZXN0KTsKICAgICB9CiAKKyAg
ICB2b2lkIGxvYWQzMihQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRleChz
cmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihQb3N0SW5kZXhBZGRyZXNzIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihk
ZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKwogICAgIERhdGFM
YWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKQEAg
LTE3MzMsNyArMTc0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4o
bWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGlu
ZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgIG1fYXNzZW1i
bGVyLnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rlcik7CiAgICAg
fQotICAgIAorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBQcmVJbmRleEFkZHJl
c3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJh
c2UsIFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlNjQoUmVn
aXN0ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2UsIFBvc3RJbmRleChkZXN0LmluZGV4KSk7Cisg
ICAgfQorCiAgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBjb25zdCB2b2lkKiBhZGRy
ZXNzKQogICAgIHsKICAgICAgICAgc3RvcmU8NjQ+KHNyYywgYWRkcmVzcyk7CkBAIC0xNzc3LDEx
ICsxODAyLDYgQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KGRhdGFUZW1wUmVnaXN0ZXIsIGFk
ZHJlc3MpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0LCBQb3N0SW5kZXggc2ltbSkKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnN0
cjw2ND4oc3JjLCBkZXN0LCBzaW1tKTsKLSAgICB9Ci0gICAgCiAgICAgRGF0YUxhYmVsMzIgc3Rv
cmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVz
cykKICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTg3OSw2ICsx
ODk5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lzdGVyLCBhZGRy
ZXNzKTsKICAgICB9CiAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4
QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRl
c3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUz
MihSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgp
KTsKKyAgICB9CisKICAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRj
aChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgRGF0YUxh
YmVsMzIgbGFiZWwodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL3Rlc3RtYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVz
dG1hc20uY3BwCmluZGV4IGYyMmJmZmNlMTU1NGIwMmMyMjZjMjE0OTJhYjA2N2JhYjM4YzQwYjUu
LjUzNGVmZTE0M2Y3OTBiOTA5ODliYzJjYzYzZmYwOWEwNDY3ZTU1N2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCkBAIC0yMjEyLDYgKzIyMTIsMTc2
IEBAIHZvaWQgdGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCiAgICAgICAgIH0K
ICAgICB9CiB9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKQoreworICAgIGludDMy
X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50cHRyX3QgYWRkciA9IGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMyX3QgaW5kZXggPSBzaXplb2YoaW50MzJf
dCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQzMl90IHNyYykgeworICAgICAgICBhdXRv
IHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBl
bWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAqKytwMSA9IDQ7IHJl
dHVybiBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
Q0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRl
eCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
aW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJf
dCogcDEgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QxKDQpKTsKKyAgICBDSEVDS19FUSgq
cDEsIDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1zWzFdKTsKKworICAgIGF1dG8gdGVzdDIg
PSBbJl0gKGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGpp
dCk7CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsgcmV0dXJuIHAyOworICAgICAgICAgICAg
aml0LnN0b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlBvc3RJbmRl
eEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0
Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQu
cmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9y
ZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCogcDIgPSBiaXR3aXNlX2Nhc3Q8
aW50MzJfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19FUSgqcDIsIDQpOworICAgIENIRUNLX0VR
KCotLXAyLCA1KTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVQb3N0SW5kZXg2NCgpCit7CisgICAg
aW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnRwdHJfdCBhZGRyID0gYml0d2lz
ZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVvZihp
bnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3Qgc3JjKSB7CisgICAgICAg
IGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICorK3AxID0g
NDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRH
UFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEs
IGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJl
dHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBp
bnQ2NF90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDEoNCkpOworICAgIENIRUNL
X0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEsIG51bXNbMV0pOworCisgICAgYXV0byB0
ZXN0MiA9IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysgPSA1OyByZXR1cm4gcDI7CisgICAgICAg
ICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UG9z
dEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAg
ICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAg
IGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+
KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2NF90KiBwMiA9IGJpdHdpc2Vf
Y2FzdDxpbnQ2NF90Kj4odGVzdDIoNSkpOworICAgIENIRUNLX0VRKCpwMiwgNCk7CisgICAgQ0hF
Q0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4MzIoKQorewor
ICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNp
emVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkg
eworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8v
IHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGlu
ZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0
QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAg
ICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90Pihsb2FkLCAmbnVtc1sx
XSk7CisgICAgfTsKKyAgICAKKyAgICBDSEVDS19FUSh0ZXN0MSg0KSwgMyk7CisgICAgQ0hFQ0tf
RVEobnVtc1syXSwgNCk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQzMl90IHJlcGxhY2Up
IHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7
CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAv
LyByZXMgPSAqcDIrKzsgKnAyID0gNTsgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIGppdC5sb2Fk
MzIoQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
aW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgaml0LnN0b3JlMzIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVwbGFjZSksIENDYWxsSGVscGVyczo6SW1wbGlj
aXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICAgICAgaml0Lm1vdmUo
R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7
CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KGxvYWQsICZudW1z
WzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVzdDIoNSksIDIpOworICAgIENIRUNLX0VR
KG51bXNbMl0sIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKQoreworICAg
IGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVv
ZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkgewor
ICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJl
cyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2NChD
Q2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRk
cmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUklu
Zm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7
CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1z
WzJdLCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkgeworICAg
ICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9
ICpwMisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2Fs
bEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW02NChyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJl
c3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAg
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4obG9hZCwgJm51bXNbMV0pOwor
ICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1sy
XSwgNSk7Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShB
Uk02NCkKQEAgLTQ0NzUsNiArNDY0NSwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIp
IFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdFhvck5vdFdp
dGhMZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0NjQoKSk7
CiAgICAgUlVOKHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CisKKyAgICBS
VU4odGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9yZVByZVBvc3RJ
bmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDMyKCkpOworICAgIFJVTih0
ZXN0TG9hZFByZVBvc3RJbmRleDY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUoQVJNNjRFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBkNWZjMzE2NDY1OTY4
ZWI3MzcxYjZmZjFjYzZmODMxN2ZlY2RlNTJlLi5lM2E0MTY3MDVjZWJlN2RkNDA5OGQ1NjNhMDNk
ZGEwM2QwNmNmMDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNw
cApAQCAtNTQ2LDE1ICs1NDYsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBzY2FsZTsKICAgICB9Ci0gICAgCisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4K
KyAgICBBcmcgYWRkcmVzc0FyZyhUbXAgYWRkcmVzcywgSW50IGluZGV4LCBJbmRleEtpbmQgaW5k
ZXhLaW5kID0gSW5kZXhLaW5kOjpOT05FKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpbmRleEtp
bmQpIHsKKyAgICAgICAgY2FzZSBJbmRleEtpbmQ6OlBSRToKKyAgICAgICAgICAgIHJldHVybiBB
cmc6OnByZUluZGV4KGFkZHJlc3MsIGluZGV4KTsKKyAgICAgICAgY2FzZSBJbmRleEtpbmQ6OlBP
U1Q6CisgICAgICAgICAgICByZXR1cm4gQXJnOjpwb3N0SW5kZXgoYWRkcmVzcywgaW5kZXgpOwor
ICAgICAgICBjYXNlIEluZGV4S2luZDo6Tk9ORToKKyAgICAgICAgICAgIHJldHVybiBBcmc6OmFk
ZHIoYWRkcmVzcywgaW5kZXgpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IEFyZygpOworICAgICAgICB9CisgICAgfQorCiAgICAgLy8gVGhpcyB0dXJucyB0aGUgZ2l2ZW4g
b3BlcmFuZCBpbnRvIGFuIGFkZHJlc3MuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBl
bmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+Ci0gICAgQXJnIGVmZmVjdGl2ZUFkZHIo
VmFsdWUqIGFkZHJlc3MsIEludCBvZmZzZXQsIFdpZHRoIHdpZHRoKQorICAgIEFyZyBlZmZlY3Rp
dmVBZGRyKFZhbHVlKiBhZGRyZXNzLCBJbnQgb2Zmc2V0LCBXaWR0aCB3aWR0aCwgSW5kZXhLaW5k
IGluZGV4S2luZCA9IEluZGV4S2luZDo6Tk9ORSkKICAgICB7CiAgICAgICAgIEFTU0VSVChBcmc6
OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIHdpZHRoKSk7CiAgICAgICAgIAogICAgICAgICBhdXRv
IGZhbGxiYWNrID0gWyZdICgpIC0+IEFyZyB7Ci0gICAgICAgICAgICByZXR1cm4gQXJnOjphZGRy
KHRtcChhZGRyZXNzKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBhZGRyZXNzQXJnKHRt
cChhZGRyZXNzKSwgb2Zmc2V0LCBpbmRleEtpbmQpOwogICAgICAgICB9OwogICAgICAgICAKICAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBsb3RzT2ZVc2VzID0gMTA7IC8vIFRoaXMg
aXMgYXJiaXRyYXJ5IGFuZCB3ZSBzaG91bGQgdHVuZSBpdCBldmVudHVhbGx5LgpAQCAtNjAzLDcg
KzYxOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEZyYW1lUG9pbnRl
cjoKLSAgICAgICAgICAgIHJldHVybiBBcmc6OmFkZHIoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBhZGRyZXNzQXJnKFRtcChHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIG9mZnNldCwgaW5kZXhLaW5kKTsKIAogICAgICAgICBj
YXNlIFNsb3RCYXNlOgogICAgICAgICAgICAgcmV0dXJuIEFyZzo6c3RhY2soYWRkcmVzcy0+YXM8
U2xvdEJhc2VWYWx1ZT4oKS0+c2xvdCgpLCBvZmZzZXQpOwpAQCAtNjQxLDcgKzY1Niw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIG9mZnNldCA9IHZhbHVlLT5vZmZzZXQo
KTsKICAgICAgICAgV2lkdGggd2lkdGggPSB2YWx1ZS0+YWNjZXNzV2lkdGgoKTsKIAotICAgICAg
ICBBcmcgcmVzdWx0ID0gZWZmZWN0aXZlQWRkcih2YWx1ZS0+bGFzdENoaWxkKCksIG9mZnNldCwg
d2lkdGgpOworICAgICAgICBBcmcgcmVzdWx0ID0gZWZmZWN0aXZlQWRkcih2YWx1ZS0+bGFzdENo
aWxkKCksIG9mZnNldCwgd2lkdGgsIHZhbHVlLT5pbmRleEtpbmQoKSk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlc3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpOwogCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CkBAIC0xMTQ2LDEyICsxMTYxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBBaXI6Ok1vdmUzMjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFN0b3Jl
MzIsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0oV2lkdGgz
MikpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9yZTMyLCBtX3ZhbHVl
LCB6ZXJvUmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0o
TW92ZTMyLCBBcmc6Olplcm9SZWcsIGRlc3Qua2luZCgpKSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdp
ZHRoMzIpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoTW92ZTMyLCBtX3Zh
bHVlLCB6ZXJvUmVnKCksIGRlc3QpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIEFpcjo6TW92ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFs
aWRGb3JtKFN0b3JlNjQsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxp
ZEZvcm0oV2lkdGg2NCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9y
ZTY0LCBtX3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAo
aXNWYWxpZEZvcm0oTW92ZSwgQXJnOjpaZXJvUmVnLCBkZXN0LmtpbmQoKSkgJiYgZGVzdC5pc1Zh
bGlkRm9ybShXaWR0aDY0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KE1v
dmUsIG1fdmFsdWUsIHplcm9SZWcoKSwgZGVzdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQyNjQsNiArNDI3OSw3IEBA
IHByaXZhdGU6CiAgICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxUbXA+PiBtX3R1cGxlUGhpVG9U
bXBzOyAvLyBUaGlzIGlzIHRoZSBzYW1lIGFzIG1fcGhpVG9UbXAgZm9yIFBoaXMgdGhhdCBhcmUg
VHVwbGVzLgogICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrKiwgQWlyOjpCYXNpY0Jsb2NrKj4g
bV9ibG9ja1RvQmxvY2s7CiAgICAgSGFzaE1hcDxWYXJpYWJsZSosIFZlY3RvcjxUbXA+PiBtX3Zh
cmlhYmxlVG9UbXBzOworICAgIEhhc2hNYXA8VG1wKiwgaW50PiBtX2FkZHJUb09mZnNldDsKIAog
ICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNoaWxkcmVu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCmluZGV4IGFlNTlj
NjA5NTNhM2I5MDU0YTIxYzE0NDVkZTEyYTgwNzk5MGJhOTUuLjYzMGJmNjBjM2NkZTdlYzVlYmQy
NzQxY2M3Mzc3YTczYzExNDY4ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM01lbW9yeVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1v
cnlWYWx1ZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CiAKIE1lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQogeworICAgIGRhdGFMb2coIi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIGRlc3RvcnkgTWVtb3J5VmFsdWVcbiIpOwogfQogCiBib29sIE1l
bW9yeVZhbHVlOjppc0xlZ2FsT2Zmc2V0SW1wbChpbnQ2NF90IG9mZnNldCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCmluZGV4IGU3NjgyNjRjMTNmMTY3ZWY1
MDZiYmVhMjY2MTY2NzkzYzY3NTczM2UuLmFlMjVjOWIwZTJiNWM0MzRlYWU0ZGY1ZGRiYzY2MTRl
NjUyOTQ3YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZh
bHVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaApAQCAt
MzQsNyArMzQsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKK2VudW0g
Y2xhc3MgSW5kZXhLaW5kIDogdWludDhfdCB7CisgICAgUFJFLAorICAgIFBPU1QsCisgICAgTk9O
RQorfTsKKwogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFs
dWUgeworCiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhLaW5kIGtpbmQpCiAgICAg
ewpAQCAtNjksNiArNzYsOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSGVhcFJhbmdlJiBmZW5jZVJh
bmdlKCkgY29uc3QgeyByZXR1cm4gbV9mZW5jZVJhbmdlOyB9CiAgICAgdm9pZCBzZXRGZW5jZVJh
bmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9mZW5jZVJhbmdlID0gcmFuZ2U7IH0KIAor
ICAgIEluZGV4S2luZCBpbmRleEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4S2luZDsgfQor
ICAgIHZvaWQgc2V0SW5kZXhLaW5kKEluZGV4S2luZCBraW5kKSB7IG1faW5kZXhLaW5kID0ga2lu
ZDsgfQorCiAgICAgYm9vbCBpc1N0b3JlKCkgY29uc3QgeyByZXR1cm4gQjM6OmlzU3RvcmUob3Bj
b2RlKCkpOyB9CiAgICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7IHJldHVybiBCMzo6aXNMb2FkKG9w
Y29kZSgpKTsgfQogCkBAIC0xNTAsNiArMTYwLDcgQEAgcHJpdmF0ZToKICAgICBPZmZzZXRUeXBl
IG1fb2Zmc2V0IHsgMCB9OwogICAgIEhlYXBSYW5nZSBtX3JhbmdlIHsgSGVhcFJhbmdlOjp0b3Ao
KSB9OwogICAgIEhlYXBSYW5nZSBtX2ZlbmNlUmFuZ2UgeyBIZWFwUmFuZ2UoKSB9OworICAgIElu
ZGV4S2luZCBtX2luZGV4S2luZCB7IEluZGV4S2luZDo6Tk9ORSB9OwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJl
bmd0aC5jcHAKaW5kZXggMjI4MGZkNzcxMjUyZTcyNjBmNjg1MDUwOTJmZDU0M2NmZTA2MTg1Ny4u
ZDI5MThmNGZlYzNhOGE1NGQxN2I3NGJkZWVjYmM3YmJkZmNkYjg5YiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcApAQCAtNDAyLDYgKzQwMiw0NyBA
QCBwcml2YXRlOgogICAgIGludDY0X3QgbV9tYXggeyAwIH07CiB9OwogCitjbGFzcyBVc2FnZSB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXNhZ2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIFVzYWdlKFZhbHVlKiBub1VzZSwgVmFsdWUqIHVzZSwgYm9v
bCBmb3VuZFVzZSA9IGZhbHNlKQorICAgICAgICA6IG1fbm9Vc2Uobm9Vc2UpCisgICAgICAgICwg
bV91c2UodXNlKQorICAgICAgICAsIG1fZm91bmRVc2UoZm91bmRVc2UpCisgICAgeworICAgIH0K
KworICAgIH5Vc2FnZSgpCisgICAgeworICAgICAgICBtX25vVXNlID0gbnVsbHB0cjsKKyAgICAg
ICAgbV91c2UgPSBudWxscHRyOworICAgIH0KKworICAgIFZhbHVlKiBub1VzZSgpIHsgcmV0dXJu
IG1fbm9Vc2U7IH0KKworICAgIFZhbHVlKiB1c2UoKSB7IHJldHVybiBtX3VzZTsgfQorCisgICAg
Ym9vbCBmb3VuZFVzZSgpIHsgcmV0dXJuIG1fZm91bmRVc2U7IH0KKyAgICB2b2lkIHNldEZvdW5k
VXNlKGJvb2wgZm91bmQpIHsgbV9mb3VuZFVzZSA9IGZvdW5kOyB9CisKK3ByaXZhdGU6CisgICAg
Ly8gR2l2ZW46CisgICAgLy8geCA9IEFkZChhZGRyLCBpbW05KQorICAgIC8vIHkgPSBMb2FkKHgp
CisgICAgLy8geiA9IHByaW50KHgpCisKKyAgICAvLyBXZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG86
CisgICAgLy8gTG9hZChhZGRyLCBQcmUoaW1tOSkpCisgICAgLy8gcHJpbnQoYWRkcikKKworICAg
IC8vIFNvLCAxKSBhZGRyIHNob3VsZCBub3QgYmUgdXNlZCBieSBvdGhlcnMgZXhjZXB0IHgKKyAg
ICAvLyAgICAgMikgeCBzaG91bGQgYmUgdXNlZCBieSBvdGhlcnMgZXhjZXB0IHkKKyAgICBWYWx1
ZSogbV9ub1VzZSB7IG51bGxwdHIgfTsgLy8gdXNlZCB0byBzdG9yZSBhZGRyCisgICAgVmFsdWUq
IG1fdXNlIHsgbnVsbHB0ciB9OyAvLyB1c2VkIHRvIHN0b3JlIHgKKyAgICBib29sIG1fZm91bmRV
c2UgeyBmYWxzZSB9OyAvLyB1c2VkIHRvIHRyYWNrIHRoZSBkaXNjb3Zlcnkgb2YgdGhlIHVzYWdl
IG9mIHggYnkgb3RoZXJzCit9OworCiBjbGFzcyBSZWR1Y2VTdHJlbmd0aCB7CiBwdWJsaWM6CiAg
ICAgUmVkdWNlU3RyZW5ndGgoUHJvY2VkdXJlJiBwcm9jKQpAQCAtNDczLDYgKzUxNCwyMSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIHJlZHVjZVZhbHVlU3RyZW5ndGgoKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgpID49IDIpCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXBsYWNlSWZSZWR1bmRhbnQoKTsKKworI2lmIENQVShBUk02NCkKKyAgICAg
ICAgICAgICAgICAgICAgbV9wcmVJbmRleENhbmRpZGF0ZXMucmVtb3ZlSWYoCisgICAgICAgICAg
ICAgICAgICAgICAgICBbJl0gKEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBzdGQ6OnVuaXF1ZV9wdHI8
VXNhZ2U+Pjo6S2V5VmFsdWVQYWlyVHlwZSYgZW50cnkpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlID09IGVudHJ5LmtleSB8fCBtX3ZhbHVlID09IGVu
dHJ5LnZhbHVlLT51c2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDog
bV92YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZW50cnkudmFsdWUtPm5vVXNlKCkgPT0gY2hpbGQpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGVudHJ5LnZhbHVlLT51c2UoKSA9PSBjaGlsZCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlLT5zZXRGb3VuZFVzZSh0cnVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisjZW5kaWYKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShtX2Jsb2NrKTsK
ICAgICAgICAgICAgIH0KQEAgLTQ4MSw2ICs1MzcsMTkgQEAgcHVibGljOgogICAgICAgICAgICAg
aGFuZGxlQ2hhbmdlZENGR0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHJlc3VsdCB8PSBtX2NoYW5nZWQ7CisKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgICAgICBmb3Ig
KGF1dG8gaXQgPSBtX3ByZUluZGV4Q2FuZGlkYXRlcy5iZWdpbigpOyBpdCAhPSBtX3ByZUluZGV4
Q2FuZGlkYXRlcy5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgICAgIGlmIChpdC0+dmFsdWUt
PmZvdW5kVXNlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSBjYW4gdHJpZ2dl
ciBwcmUtaW5jcmVtZW50YWwgaW5kZXggYWRkcmVzcyBtb2RlIGlmIHdlIGZpbmQgCisgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZSBBREQoYWRkciwgaW1tOSkgdmFsdWUgaXMgdXNlZCBzb21ld2hl
cmUgZWxzZS4KKyAgICAgICAgICAgICAgICAgICAgaXQtPmtleS0+c2V0SW5kZXhLaW5kKEIzOjpJ
bmRleEtpbmQ6OlBSRSk7CisgICAgICAgICAgICAgICAgICAgIGl0LT52YWx1ZS0+dXNlKCktPnJl
cGxhY2VXaXRoSWRlbnRpdHkoaXQtPnZhbHVlLT51c2UoKS0+Y2hpbGQoMCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2lnbm9yZVByZVBvc3RDYW5kaWRhdGVzLmFkZChp
dC0+a2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcHJlSW5kZXhDYW5kaWRhdGVz
LmNsZWFyKCk7CisjZW5kaWYKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkICYmIG1fcHJvYy5v
cHRMZXZlbCgpID49IDIpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgp
IDwgMikgewpAQCAtNDg4LDcgKzU1NywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzaW1wbGlm
eUNGRygpOwogICAgICAgICAgICAgaGFuZGxlQ2hhbmdlZENGR0lmTmVjZXNzYXJ5KCk7CiAgICAg
ICAgIH0KLSAgICAgICAgCisKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIG1faWdub3JlUHJlUG9z
dENhbmRpZGF0ZXMuY2xlYXIoKTsKKyNlbmRpZgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAKQEAgLTE5MzUsMTQgKzIwMDcsMzIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8v
IEFsc28gdHVybnMgdGhpczogU3RvcmUodmFsdWUsIEFkZChhZGRyZXNzLCBvZmZzZXQxKSwgb2Zm
c2V0ID0gb2Zmc2V0MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogU3RvcmUodmFsdWUsIGFk
ZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQogICAgICAgICAgICAgaWYgKGFkZHJl
c3MtPm9wY29kZSgpID09IEFkZCAmJiBhZGRyZXNzLT5jaGlsZCgxKS0+aGFzSW50UHRyKCkpIHsK
KwogICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IGFkZHJlc3MtPmNoaWxkKDEpLT5h
c0ludFB0cigpOwogICAgICAgICAgICAgICAgIGlmICghc3VtT3ZlcmZsb3dzPGludHB0cl90Pihv
ZmZzZXQsIG1lbW9yeS0+b2Zmc2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAr
PSBtZW1vcnktPm9mZnNldCgpOwogICAgICAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlw
ZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgPT0gb2Zmc2V0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzcy0+Y2hpbGQoMCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtZW1vcnktPmxhc3RDaGlsZCgpID0gYWRkcmVzczsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1lbW9yeS0+bGFzdENoaWxkKCkgPSBhZGRyZXNzLT5jaGlsZCgwKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+c2V0T2Zmc2V0KHNtYWxsT2Zmc2V0KTsKKyNp
ZiBDUFUoQVJNNjQpCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRyeVByZUluZGV4ID0g
WyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3Byb2Mu
b3B0TGV2ZWwoKSA8IDIgfHwgbWVtb3J5LT5vcGNvZGUoKSAhPSBMb2FkKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1lbW9yeS0+dHlwZSgpICE9IEludDMyICYmIG1lbW9yeS0+dHlwZSgpICE9IElu
dDY0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBaXI6OkFyZzo6aXNWYWxpZFByZUluZGV4Rm9y
bShzbWFsbE9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9pZ25vcmVQcmVQb3N0Q2Fu
ZGlkYXRlcy5maW5kKG1lbW9yeSkgIT0gbV9pZ25vcmVQcmVQb3N0Q2FuZGlkYXRlcy5lbmQoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX3ByZUluZGV4Q2FuZGlkYXRlcy5maW5kKG1lbW9yeSkg
IT0gbV9wcmVJbmRleENhbmRpZGF0ZXMuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0cnlQcmVJbmRleCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJl
SW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnksIG1ha2VVbmlxdWU8VXNhZ2U+KGFkZHJlc3MtPmNo
aWxkKDApLCBhZGRyZXNzLCBmYWxzZSkpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMzAzNCw2ICszMTI0LDggQEAgcHJpdmF0ZToKICAgICBJbnNlcnRpb25TZXQgbV9p
bnNlcnRpb25TZXQ7CiAgICAgQmxvY2tJbnNlcnRpb25TZXQgbV9ibG9ja0luc2VydGlvblNldDsK
ICAgICBIYXNoTWFwPFZhbHVlS2V5LCBWYWx1ZSo+IG1fdmFsdWVGb3JDb25zdGFudDsKKyAgICBI
YXNoTWFwPE1lbW9yeVZhbHVlKiwgc3RkOjp1bmlxdWVfcHRyPFVzYWdlPj4gbV9wcmVJbmRleENh
bmRpZGF0ZXM7CisgICAgSGFzaFNldDxNZW1vcnlWYWx1ZSo+IG1faWdub3JlUHJlUG9zdENhbmRp
ZGF0ZXM7CiAgICAgQmFzaWNCbG9jayogbV9yb290IHsgbnVsbHB0ciB9OwogICAgIEJhc2ljQmxv
Y2sqIG1fYmxvY2sgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9pbmRleCB7IDAgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAppbmRleCAxMDNjNmVjY2EzZDMxNGJi
NGVkOGMwMmE0ZDJmMDA5Y2E2NDFkMDAxLi41NGYwZjk2ZTNjNTU4ZjMzMGY5N2M2NmI4MjQwMmIz
YjE5OTgwMWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCkBAIC0x
MzAsNiArMTMwLDExIEBAIHVuc2lnbmVkIEFyZzo6anNIYXNoKCkgY29uc3QKICAgICAgICAgcmVz
dWx0ICs9IG1fYmFzZS5pbnRlcm5hbFZhbHVlKCk7CiAgICAgICAgIHJlc3VsdCArPSBtX2luZGV4
LmludGVybmFsVmFsdWUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcmVJbmRleDoKKyAg
ICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgcmVzdWx0ICs9IG1fb2Zmc2V0OworICAgICAgICBy
ZXN1bHQgKz0gbV9iYXNlLmludGVybmFsVmFsdWUoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBTdGFjazoKICAgICAgICAgcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3NjYWxl
KTsKICAgICAgICAgcmVzdWx0ICs9IHN0YWNrU2xvdCgpLT5pbmRleCgpOwpAQCAtMTYxLDcgKzE2
Niw3IEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91
dC5wcmludGYoIiQweCVsbHgiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KG1fb2Zm
c2V0KSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFplcm9SZWc6Ci0gICAgICAgIG91dC5w
cmludCgiJSV4enIiKTsKKyAgICAgICAgb3V0LnByaW50KCIleHpyIik7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwg
IikiKTsKQEAgLTE4MCw2ICsxODUsMTIgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKICAgICAgICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxlKCkpOwogICAgICAgICBv
dXQucHJpbnQoIikiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJlSW5kZXg6CisgICAg
ICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIixQcmUoIiwgb2Zmc2V0KCksICIpKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAgIG91dC5wcmludCgiKCIs
IGJhc2UoKSwgIixQb3N0KCIsIG9mZnNldCgpLCAiKSkiKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgU3RhY2s6CiAgICAgICAgIGlmIChvZmZzZXQoKSkKICAgICAgICAgICAgIG91dC5wcmlu
dChvZmZzZXQoKSk7CkBAIC0yNjEsNiArMjcyLDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBBcmc6OktpbmQga2luZCkKICAgICBjYXNlIEFyZzo6SW5kZXg6CiAgICAg
ICAgIG91dC5wcmludCgiSW5kZXgiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpQ
cmVJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQcmVJbmRleCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBcmc6OlBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQb3N0SW5kZXgi
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpSZWxDb25kOgogICAgICAgICBvdXQu
cHJpbnQoIlJlbENvbmQiKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnLmgKaW5kZXggY2U1YTRlNzM3OWFkNjQ0NDVmMGMzYWJkMTI5ZjMyOWI5NDdmZTgx
Mi4uZWEyMjYyOGFlMTJlMTFmZWI0NWRmNjdhY2YzZGE4ZDY4NjBiNGZkOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCkBAIC0xLDMgKzEsNCBAQAorCiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAg
LTc3LDYgKzc4LDggQEAgcHVibGljOgogICAgICAgICBTdGFjaywKICAgICAgICAgQ2FsbEFyZywK
ICAgICAgICAgSW5kZXgsCisgICAgICAgIFByZUluZGV4LAorICAgICAgICBQb3N0SW5kZXgsCiAK
ICAgICAgICAgLy8gSW1tZWRpYXRlIG9wZXJhbmRzIHRoYXQgY3VzdG9taXplIHRoZSBiZWhhdmlv
ciBvZiBhbiBvcGVyYXRpb24uIFlvdSBjYW4gdGhpbmsgb2YgdGhlbSBhcwogICAgICAgICAvLyBz
ZWNvbmRhcnkgb3Bjb2Rlcy4gVGhleSBhcmUgYWx3YXlzICJVc2UiJ2QuCkBAIC02NDksNiArNjUy
LDMwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEFyZzo6aW5kZXgoYmFzZSwgaW5kZXgsIHNj
YWxlLCAwKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0g
VmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgQXJnIHByZUluZGV4KEFpcjo6
VG1wIGJhc2UsIEludCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7
CisgICAgICAgIEFTU0VSVChpc0ludDkoaW5kZXgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IFByZUluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0g
YmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZh
bHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIEFyZyBwb3N0SW5kZXgoQWlyOjpU
bXAgYmFzZSwgSW50IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsK
KyAgICAgICAgQVNTRVJUKGlzSW50OShpbmRleCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gUG9zdEluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0g
YmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCiAgICAgc3RhdGljIEFyZyByZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIEFyZyByZXN1bHQ7
CkBAIC03OTksNiArODI2LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJ
bmRleDsKICAgICB9CiAKKyAgICBib29sIGlzUHJlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBQcmVJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUG9zdElu
ZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUG9zdEluZGV4Owor
ICAgIH0KKwogICAgIGJvb2wgaXNNZW1vcnkoKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNo
IChraW5kKCkpIHsKQEAgLTgwOCw2ICs4NDUsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU3Rh
Y2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAg
Y2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTk3Miw3ICsxMDExLDcgQEAgcHVibGljOgogCiAgICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0CiAg
ICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFk
ZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXgpOwor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwg
a2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXggfHwga2luZCgp
ID09IFByZUluZGV4IHx8IGtpbmQoKSA9PSBQb3N0SW5kZXgpOwogICAgICAgICByZXR1cm4gbV9i
YXNlOwogICAgIH0KIApAQCAtOTgyLDcgKzEwMjEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBpZiAoa2luZCgpID09IFN0YWNrKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZh
bHVlOjpPZmZzZXRUeXBlPihtX3NjYWxlKTsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRy
IHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwg
a2luZCgpID09IEluZGV4KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQo
KSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09
IEluZGV4IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8fCBraW5kKCkgPT0gUG9zdEluZGV4KTsKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCk7CiAg
ICAgfQogCkBAIC0xMDQ0LDYgKzEwODMsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQWRkcjoK
ICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6Cisg
ICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICBj
YXNlIFN0YWNrOgogICAgICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoK
QEAgLTEwODEsNiArMTEyMiw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAg
ICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAg
Y2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgIGNhc2UgU3Rh
Y2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBCaWdJbW06IC8vIFllcywg
d2UgYWxsb3cgQmlnSW1tIGFzIGEgZG91YmxlIGltbWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGlt
cGxlbWVudGluZyBzdGFja21hcHMuCkBAIC0xMjM3LDYgKzEyODAsMjIgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0
eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNW
YWxpZFByZUluZGV4Rm9ybShJbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKGlzQVJNNjQo
KSkKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkU2lnbmVkSW1tOShvZmZzZXQpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBl
bmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxp
ZFBvc3RJbmRleEZvcm0oSW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChpc0FSTTY0KCkp
CisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFNpZ25lZEltbTkob2Zmc2V0KTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgd2lkdGgg
dGhlbiB0aGlzIG9wdGltaXN0aWNhbGx5IGFzc3VtZXMgdGhhdCB5b3UncmUgdXNpbmcgdGhlIHJp
Z2h0IHdpZHRoLiBCdXQKICAgICAvLyB0aGUgd2lkdGggaXMgcmVsZXZhbnQgdG8gdmFsaWRpdHks
IHNvIHBhc3NpbmcgYSBudWxsIHdpZHRoIGlzIG9ubHkgdXNlZnVsIGZvciBhc3NlcnRpb25zLiBE
b24ndAogICAgIC8vIHBhc3MgbnVsbCB3aWR0aHMgd2hlbiBjYXNjYWRpbmcgdGhyb3VnaCBBcmdz
IGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciEKQEAgLTEyNjUsNiArMTMyNCwxMCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEFkZHJGb3JtKG9mZnNldCgpLCB3aWR0aCk7
CiAgICAgICAgIGNhc2UgSW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEluZGV4Rm9y
bShzY2FsZSgpLCBvZmZzZXQoKSwgd2lkdGgpOworICAgICAgICBjYXNlIFByZUluZGV4OgorICAg
ICAgICAgICAgcmV0dXJuIGlzVmFsaWRQcmVJbmRleEZvcm0ob2Zmc2V0KCkpOworICAgICAgICBj
YXNlIFBvc3RJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkUG9zdEluZGV4Rm9ybShv
ZmZzZXQoKSk7CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgog
ICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CkBAIC0xMjg0LDYgKzEzNDcsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIGNhc2UgU2ltcGxlQWRkcjoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNl
IEV4dGVuZGVkT2Zmc2V0QWRkcjoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2Fz
ZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBJbmRleDoKQEAgLTEzMjYsNiArMTM5MSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBTaW1wbGVBZGRyOgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGNh
c2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBj
YXNlIFBvc3RJbmRleDoKICAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQLCBhcmdS
b2xlID09IFVzZUFkZHIgPyBhcmdXaWR0aCA6IHBvaW50ZXJXaWR0aCgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEluZGV4OgpAQCAtMTM4Myw2ICsxNDUwLDE4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCks
IG1fZXh0ZW5kKTsKICAgICB9CiAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNz
IGFzUHJlSW5kZXhBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ByZUlu
ZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzcyht
X2Jhc2UuZ3ByKCksIG9mZnNldCgpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UG9z
dEluZGV4QWRkcmVzcyBhc1Bvc3RJbmRleEFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzUG9zdEluZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlBv
c3RJbmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBvZmZzZXQoKSk7CisgICAgfQorCiAgICAgTWFj
cm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwCmluZGV4IDkwNWU2
MTdmYmRlMGUyYjdkNzU1NTYzZTY4ODU4OWJkYWQ3MjZjODAuLjZhZDA1ODQyNjdiOGM3ZWU3MTQ5
YjAyZjgyMzE1NzJiZWU4Y2Y4YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBsb3dl
clN0YWNrQXJncyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHdpZHRoID09IFdpZHRoMzIpOwogCiAjaWYgQ1BVKEFSTTY0KQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlID0gU3RvcmUzMjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBzdG9yZU9wY29kZSA9IE1vdmUz
MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBaXI6OkFyZzo6S2luZCBvcGVyYW5kS2lu
ZCA9IEFyZzo6WmVyb1JlZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBaXI6OkFyZyBv
cGVyYW5kID0gQXJnOjp6ZXJvUmVnKCk7CiAjZWxpZiBDUFUoWDg2XzY0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXggNjYxZWFkZDIzNzNj
NTRhNGJiYTk0N2E1NGJkYTI1NTdiZGI4YWU0YS4uOWZlYmFkOTg2MzMzYmVjYWFkMzVlZDI1NGJm
MzUyZTAxMDkwNjZiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzCkBAIC02NDcsNiArNjQ3LDEyIEBAIE1vdmUgVTpHOlB0ciwgRDpHOlB0cgog
ICAgIEluZGV4LCBUbXAgYXMgbG9hZFB0cgogICAgIFRtcCwgQWRkciBhcyBzdG9yZVB0cgogICAg
IFRtcCwgSW5kZXggYXMgc3RvcmVQdHIKKyAgICBhcm02NDogWmVyb1JlZywgQWRkciBhcyBzdG9y
ZTY0CisgICAgYXJtNjQ6IFplcm9SZWcsIEluZGV4IGFzIHN0b3JlNjQKKyAgICBhcm02NDogUHJl
SW5kZXgsIFRtcCBhcyBsb2FkNjQKKyAgICBhcm02NDogUG9zdEluZGV4LCBUbXAgYXMgbG9hZDY0
CisgICAgYXJtNjQ6IFRtcCwgUHJlSW5kZXggYXMgc3RvcmU2NAorICAgIGFybTY0OiBUbXAsIFBv
c3RJbmRleCBhcyBzdG9yZTY0CiAgICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmVQdHIKIAogIyBU
aGlzIGlzIGZvciBtb3ZpbmcgYmV0d2VlbiBzcGlsbCBzbG90cy4KQEAgLTY2Nyw2ICs2NzMsMTIg
QEAgTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIEluZGV4LCBUbXAgYXMgbG9hZDMyCiAgICAg
VG1wLCBBZGRyIGFzIHN0b3JlMzIKICAgICBUbXAsIEluZGV4IGFzIHN0b3JlMzIKKyAgICBhcm02
NDogWmVyb1JlZywgQWRkciBhcyBzdG9yZTMyCisgICAgYXJtNjQ6IFplcm9SZWcsIEluZGV4IGFz
IHN0b3JlMzIKKyAgICBhcm02NDogUHJlSW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBhcm02NDog
UG9zdEluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgYXJtNjQ6IFRtcCwgUHJlSW5kZXggYXMgc3Rv
cmUzMgorICAgIGFybTY0OiBUbXAsIFBvc3RJbmRleCBhcyBzdG9yZTMyCiAgICAgeDg2OiBJbW0s
IFRtcCBhcyB6ZXJvRXh0ZW5kMzJUb1dvcmQKICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZTMy
CiAgICAgeDg2OiBJbW0sIEluZGV4IGFzIHN0b3JlMzIKQEAgLTY3NSwxNCArNjg3LDYgQEAgTW92
ZTMyIFU6RzozMiwgWkQ6RzozMgogTW92ZTMyIFU6RzozMiwgWkQ6RzozMiwgUzpHOjMyCiAgICAg
QWRkciwgQWRkciwgVG1wCiAKLWFybTY0OiBTdG9yZTMyIFU6RzozMiwgWkQ6RzozMgotICAgIFpl
cm9SZWcsIEFkZHIKLSAgICBaZXJvUmVnLCBJbmRleAotCi1hcm02NDogU3RvcmU2NCBVOkc6NjQs
IEQ6Rzo2NAotICAgIFplcm9SZWcsIEFkZHIKLSAgICBaZXJvUmVnLCBJbmRleAotCiBTaWduRXh0
ZW5kMzJUb1B0ciBVOkc6MzIsIEQ6RzpQdHIKICAgICBUbXAsIFRtcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKaW5kZXggMzc0MGVmZGJk
ZDE0NmEzN2Y2ZWRlOWRkYmMyM2RkYmEwM2IwNzY0Ni4uZjFiZjFhNDZjZmM4ODllYzE5MzQ2ZjJj
MDZiN2NmNTBmOWUzZGUwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9vcGNvZGVfZ2VuZXJhdG9yLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
b3Bjb2RlX2dlbmVyYXRvci5yYgpAQCAtMjI5LDcgKzIyOSw3IEBAIGRlZiBpc0dGKHRva2VuKQog
ZW5kCiAKIGRlZiBpc0tpbmQodG9rZW4pCi0gICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChC
aWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KFplcm9SZWcpfChTaW1wbGVBZGRyKXwoQWRkcil8
KEV4dGVuZGVkT2Zmc2V0QWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVD
b25kKXwoU3RhdHVzQ29uZCkpXFovCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJ
bW0pfChCaXRJbW0pfChCaXRJbW02NCl8KFplcm9SZWcpfChTaW1wbGVBZGRyKXwoQWRkcil8KEV4
dGVuZGVkT2Zmc2V0QWRkcil8KEluZGV4KXwoUHJlSW5kZXgpfChQb3N0SW5kZXgpfChSZWxDb25k
KXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KIGVuZAogCiBkZWYgaXNB
cmNoKHRva2VuKQpAQCAtMzAzLDcgKzMwMyw3IEBAIGNsYXNzIFBhcnNlcgogCiAgICAgZGVmIGNv
bnN1bWVLaW5kCiAgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwotICAgICAgICBwYXJzZUVy
cm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgWmVyb1Jl
ZywgVG1wLCBTaW1wbGVBZGRyLCBBZGRyLCBFeHRlbmRlZE9mZnNldEFkZHIsIEluZGV4LCBSZWxD
b25kLCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVubGVzcyBpc0tpbmQo
cmVzdWx0KQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwg
Qml0SW1tLCBCaXRJbW02NCwgWmVyb1JlZywgVG1wLCBTaW1wbGVBZGRyLCBBZGRyLCBFeHRlbmRl
ZE9mZnNldEFkZHIsIEluZGV4LCBQcmVJbmRleCwgUG9zdEluZGV4LCBSZWxDb25kLCBSZXNDb25k
LCBEb3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQogICAg
ICAgICBhZHZhbmNlCiAgICAgICAgIHJlc3VsdAogICAgIGVuZApAQCAtOTI5LDYgKzkyOSwxMiBA
QCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICB3aGVuICJJbmRl
eCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZEluZGV4
Rm9ybShhcmdzWyN7aW5kZXh9XS5zY2FsZSgpLCBhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSwgI3th
cmcud2lkdGhDb2RlfSkpIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JF
VFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIHdoZW4gIlByZUluZGV4IgorICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKGFyZ3Nb
I3tpbmRleH1dLm9mZnNldCgpKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BH
RU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgd2hlbiAiUG9zdEluZGV4IgorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9y
bShhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgogICAgICAgICAgICAgICAgIHdoZW4gIkJpZ0ltbSIK
ICAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAgIHdoZW4gIlJl
c0NvbmQiCkBAIC0xMjM1LDYgKzEyNDEsMTAgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7
CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVz
cygpIgogICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4IgogICAgICAgICAgICAgICAgICAgICBv
dXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAgICAgICAg
IHdoZW4gIlByZUluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7
aW5kZXh9XS5hc1ByZUluZGV4QWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIlBvc3RJ
bmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNQ
b3N0SW5kZXhBZGRyZXNzKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29uZCIKICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZWxhdGlvbmFsQ29u
ZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuaAppbmRleCBjNzAzMmVjMDg0ZGRmZGQ5MzVlNTUyN2ZhYWU5MzU2ODE5ODQ4MTc5
Li45Nzk3YzQyZDkzMmI1MjhjNDkyM2ZjZGE2ZjQ1NzkzMmNiMTU4MTIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5oCkBAIC0xMTQwLDQgKzExNDAsOCBAQCB2b2lkIGFkZENvcHlUZXN0cyhj
b25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYpOwog
CiBib29sIHNob3VsZFJ1bihjb25zdCBjaGFyKiBmaWx0ZXIsIGNvbnN0IGNoYXIqIHRlc3ROYW1l
KTsKIAordm9pZCB0ZXN0TG9hZFByZUluZGV4MzIoKTsKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDY0
KCk7Cit2b2lkIHRlc3RMb2FkUG9zdEluZGV4KCk7CisKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKaW5kZXggNGM1MmFkYTljYzQwMmRk
ZTUzOTg4Y2M4ZjJmNWU5ZTBkZGUyZTExYy4uYWNhMDkzZjkzMTg1OTdjNWIxMzY5MDU5ODgyZTgz
YTEwMjdkNjM5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCkBAIC0yOCw2
ICsyOCwxNjYgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKK3ZvaWQgdGVzdExvYWRQcmVJbmRl
eDMyKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3
LCA4LCA5LCAxMCB9OworICAgIGludDMyX3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BC
b2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJs
b2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50MzIpOworICAg
IFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICByb290LT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHJvb3QtPmFw
cGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgMCkpOworICAgIHJvb3QtPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwg
T3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgVmFsdWUqIHIyID0g
bG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4o
KSwgcik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVl
Pihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbnN0MTAgPSBsb29w
VGVzdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKTsKKyAgICBW
YWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWws
IE9yaWdpbigpLCByMiwgY29uc3QxMCk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSks
IEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgVmFsdWUqIGNvbnN0NCA9IGxvb3BC
b2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCk7CisgICAgVmFs
dWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwg
cDIsIGNvbnN0NCk7CisgICAgTWVtb3J5VmFsdWUqIGxvYWQgPSBsb29wQm9keS0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHAzKTsKKyAgICBWYWx1
ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBy
MiwgbG9hZCk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBC
Mzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFi
bGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBsb29wQm9keS0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxv
Y2sobG9vcFRlc3QpKTsKKworICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgIGRvbmUtPmFwcGVuZE5ldzxWYXJp
YWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcikpOyAgIAorCisgICAgcHJvYy5y
ZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9j
KTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQzMl90IHsKKyAgICAgICAgaW50MzJf
dCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAgIHIgKz0gKisrcHRy
OworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1
bjxpbnQzMl90Pihwcm9jLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOwor
fQorCit2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQ2NF90IG51bXNb
XSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQ2NF90KiBwdHIg
PSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9j
LmFkZFZhcmlhYmxlKEludDY0KTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUo
SW50NjQpOworCisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpT
ZXQsIE9yaWdpbigpLCByLCByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwg
SW50NjQsIDApKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6
OlNldCwgT3JpZ2luKCksIHAsIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRl
c3QpKTsKKworICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOwor
ICAgIFZhbHVlKiBjb25zdDEwID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAxMCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGNvbnN0MTApOworICAgIGxv
b3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29u
ZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKwor
ICAgIFZhbHVlKiBjb25zdDggPSBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDgpOworICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBjb25zdDgpOworICAgIE1lbW9yeVZhbHVlKiBs
b2FkID0gbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQs
IE9yaWdpbigpLCBwMyk7CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvYWQpOworICAgIGxvb3BCb2R5LT5hcHBlbmRO
ZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBs
b29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigp
LCBwLCBwMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1w
LCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICBkb25lLT5hcHBl
bmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAg
ICAgICBkb25lLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2lu
KCksIHIpKTsgICAKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0
ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4g
aW50NjRfdCB7CisgICAgICAgIGludDY0X3QgciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTAp
CisgICAgICAgICAgICByICs9ICorK3B0cjsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKwor
ICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYml0d2lzZV9jYXN0PGlu
dHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKwordm9pZCB0ZXN0TG9hZFBvc3RJbmRleCgpCit7
CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwg
MTAgfTsKKyAgICBpbnQ2NF90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7Cisg
ICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBs
b29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOwor
CisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKyAgICBWYXJpYWJs
ZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgcm9vdC0+YXBwZW5kTmV3PFZh
cmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByb290LT5hcHBlbmRJbnRD
b25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50NjQsIDApKTsKKyAgICByb290LT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigp
LCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOwor
ICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25zdDEwID0gbG9vcFRlc3QtPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCk7CisgICAgVmFsdWUqIGNv
bmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4o
KSwgcjIsIGNvbnN0MTApOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJv
YywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIE1lbW9yeVZhbHVlKiBsb2FkID0gbG9vcEJvZHkt
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLCBwMik7
CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBP
cmlnaW4oKSwgcjIsIGxvYWQpOworICAgIFZhbHVlKiBjb25zdDggPSBsb29wQm9keS0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDgpOworICAgIFZhbHVlKiBwMyA9IGxv
b3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBjb25zdDgp
OworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwg
T3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BU
ZXN0KSk7CisKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICBkb25lLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpKTsgICAKKworICAgIHByb2MucmVzZXRSZWFj
aGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAg
ICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50NjRfdCB7CisgICAgICAgIGludDY0X3QgciA9IDA7
CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9ICpwdHIrKzsKKyAgICAg
ICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50NjRf
dD4ocHJvYywgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKworCiB2
b2lkIHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzMyKCkKIHsKICAgICBpZiAoSlNDOjpP
cHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKQEAgLTM2OTcsNiArMzg1NywxMCBAQCB2
b2lkIGFkZFNoclRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRh
c2s8dm9pZCgpPj4+JiB0YXNrcykKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZm
LCAwKSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMSkpOwogICAgIFJV
Tih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDYzKSk7CisKKyAgICBSVU4odGVzdExvYWRQ
cmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7CisgICAgUlVOKHRl
c3RMb2FkUG9zdEluZGV4KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCmluZGV4
IDYzZTI2Njc4ODUyMDE4YTc2ODBjYTVmMDcxNDY5NjgxMDU4ODRiM2IuLjY5YmI2YjJiZTgxODcw
YjU5ODMzMzY3YWYyNjc1YjdmNGVmMDU2ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcApAQCAtMjMzLDggKzIzMyw4IEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaml0
V3JpdGVUaHVua0dlbmVyYXRvCiAgICAgaml0LnJldCgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIGxvY2FsMCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5sb2FkNjQoeDEsIFBvc3RJbmRl
eCg4KSwgeDYpOwotICAgIGppdC5zdG9yZTY0KHg2LCB4MywgUG9zdEluZGV4KDgpKTsKKyAgICBq
aXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgxLCA4KSwgeDYpOwor
ICAgIGppdC5zdG9yZTY0KHg2LCBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyh4Mywg
OCkpOwogICAgIHNtYWxsQ29weS5saW5rKCZqaXQpOwogICAgIGppdC5icmFuY2hTdWI2NChNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgyKS5saW5rVG8obG9j
YWwwLCAmaml0KTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsb2NhbDIgPSBqaXQuYnJhbmNo
QWRkNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434098</attachid>
            <date>2021-07-23 10:36:13 -0700</date>
            <delta_ts>2021-07-24 05:19:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210723123612.patch</filename>
            <type>text/plain</type>
            <size>44553</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YzJiYTQ4MGQzMzQ0YTVkM2UyNTFiYzUyOGVhMWQ1NDk5YTk0NDQ0Li4zNTA4ZWUzYjc4OGRlOWZi
MTk2ZGM2NzczZDkxYmMyMzczZTc5MTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MCBAQAorMjAyMS0wNy0yMyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzOjpQcmVJbmRleEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzOjpQ
b3N0SW5kZXhBZGRyZXNzKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6c3RvcmUzMik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAg
ICAgKEpTQzo6dGVzdFN0b3JlUHJlUG9zdEluZGV4MzIpOgorICAgICAgICAoSlNDOjp0ZXN0U3Rv
cmVQcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJlUG9zdEluZGV4MzIp
OgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJbmRleDY0KToKKyAgICAgICAgKiBiMy9C
M0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIzL0IzTWVtb3J5VmFsdWUuaDoKKyAgICAgICAg
KiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpqc0hhc2ggY29uc3QpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmR1bXAgY29uc3QpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFs
KToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFy
Zzo6cHJlSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnBvc3RJbmRleCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNQcmVJbmRleCBjb25zdCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNQb3N0SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzTWVtb3J5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpi
YXNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpvZmZzZXQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1AgY29uc3QpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzRlAgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
VmFsaWRQcmVJbmRleEZvcm0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRQ
b3N0SW5kZXhGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkRm9ybSBj
b25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmFzUHJlSW5kZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjphc1Bvc3RJbmRleEFkZHJlc3MgY29uc3QpOgorICAgICAgICAqIGIzL2Fpci9BaXJM
b3dlclN0YWNrQXJncy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omxvd2VyU3RhY2tBcmdz
KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAgICogYjMvYWly
L29wY29kZV9nZW5lcmF0b3IucmI6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgICog
YjMvdGVzdGIzXzMuY3BwOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDMyKToKKyAgICAgICAg
KHRlc3RMb2FkUHJlSW5kZXg2NCk6CisgICAgICAgICh0ZXN0TG9hZFBvc3RJbmRleCk6CisgICAg
ICAgIChhZGRTaHJUZXN0cyk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpqaXRXcml0ZVRodW5rR2VuZXJhdG9yKToKKwogMjAyMS0wNy0yMSAg
S2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBzcGVjdWxh
dGVOZWl0aGVyRG91YmxlTm9yU3RyaW5nTm9ySGVhcEJpZ0ludCBzaG91bGQgb25seSBoYXZlIGEg
c2luZ2xlIEpTVHlwZSBicmFuY2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKaW5kZXggM2QxOTQ5YTQwNzg1ZDk5
Y2E2MTU5NWFhYjA0YmU2ZjFkMGQ5NmJhMy4uMjM1NGM0NTM2OGM3YzBkNWNlOTAxOGFjZmYyODRj
NGEwYTA0MzFhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
YnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAgLTI0NSw2ICsyNDUsMzQgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8vIFByZUluZGV4QWRkcmVzczoKKyAgICAvLwor
ICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwcmUtaW5j
cmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3QgUHJlSW5kZXhBZGRyZXNzIHsKKyAg
ICAgICAgUHJlSW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAg
ICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRl
eDsKKyAgICB9OworCisgICAgLy8gUG9zdEluZGV4QWRkcmVzczoKKyAgICAvLworICAgIC8vIERl
c2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwb3N0LWluY3JlbWVudC9k
ZWNyZW1lbnQgaW5kZXguCisgICAgc3RydWN0IFBvc3RJbmRleEFkZHJlc3MgeworICAgICAgICBQ
b3N0SW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAgICAgICAg
OiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRleDsKKyAg
ICB9OworCiAgICAgLy8gQWJzb2x1dGVBZGRyZXNzOgogICAgIC8vCiAgICAgLy8gRGVzY3JpYmVz
IGFuIG1lbW9yeSBvcGVyYW5kIGdpdmVuIGJ5IGEgcG9pbnRlci4gIEZvciByZWd1bGFyIGxvYWQg
JiBzdG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2
OTA5MGZkLi4yYTkxMmQwZGQyNjYyNmJkNzRlMTAzYmVmOTY1ZjJiYWRmY2UwYmQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaApAQCAtMTQ0NSw5ICsxNDQ1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDw2ND4oYWRk
cmVzcywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkNjQoUmVnaXN0ZXJJRCBzcmMsIFBv
c3RJbmRleCBzaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQoUHJlSW5kZXhB
ZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIu
bGRyPDY0PihkZXN0LCBzcmMsIHNpbW0pOworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRl
c3QsIHNyYy5iYXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxv
YWQ2NChQb3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRl
eCkpOwogICAgIH0KIAogICAgIERhdGFMYWJlbDMyIGxvYWQ2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0
Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCkBAIC0xNTQ0LDYgKzE1NDksMTYg
QEAgcHVibGljOgogICAgICAgICBsb2FkPDMyPihhZGRyZXNzLCBkZXN0KTsKICAgICB9CiAKKyAg
ICB2b2lkIGxvYWQzMihQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRleChz
cmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihQb3N0SW5kZXhBZGRyZXNzIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihk
ZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKwogICAgIERhdGFM
YWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKQEAg
LTE3MzMsNyArMTc0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4o
bWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGlu
ZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgIG1fYXNzZW1i
bGVyLnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rlcik7CiAgICAg
fQotICAgIAorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBQcmVJbmRleEFkZHJl
c3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJh
c2UsIFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlNjQoUmVn
aXN0ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2UsIFBvc3RJbmRleChkZXN0LmluZGV4KSk7Cisg
ICAgfQorCiAgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBjb25zdCB2b2lkKiBhZGRy
ZXNzKQogICAgIHsKICAgICAgICAgc3RvcmU8NjQ+KHNyYywgYWRkcmVzcyk7CkBAIC0xNzc3LDEx
ICsxODAyLDYgQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KGRhdGFUZW1wUmVnaXN0ZXIsIGFk
ZHJlc3MpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0LCBQb3N0SW5kZXggc2ltbSkKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnN0
cjw2ND4oc3JjLCBkZXN0LCBzaW1tKTsKLSAgICB9Ci0gICAgCiAgICAgRGF0YUxhYmVsMzIgc3Rv
cmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVz
cykKICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTg3OSw2ICsx
ODk5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lzdGVyLCBhZGRy
ZXNzKTsKICAgICB9CiAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4
QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRl
c3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUz
MihSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgp
KTsKKyAgICB9CisKICAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRj
aChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgRGF0YUxh
YmVsMzIgbGFiZWwodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL3Rlc3RtYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVz
dG1hc20uY3BwCmluZGV4IGYyMmJmZmNlMTU1NGIwMmMyMjZjMjE0OTJhYjA2N2JhYjM4YzQwYjUu
LjUzNGVmZTE0M2Y3OTBiOTA5ODliYzJjYzYzZmYwOWEwNDY3ZTU1N2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCkBAIC0yMjEyLDYgKzIyMTIsMTc2
IEBAIHZvaWQgdGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCiAgICAgICAgIH0K
ICAgICB9CiB9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKQoreworICAgIGludDMy
X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50cHRyX3QgYWRkciA9IGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMyX3QgaW5kZXggPSBzaXplb2YoaW50MzJf
dCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQzMl90IHNyYykgeworICAgICAgICBhdXRv
IHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBl
bWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAqKytwMSA9IDQ7IHJl
dHVybiBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
Q0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRl
eCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
aW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJf
dCogcDEgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QxKDQpKTsKKyAgICBDSEVDS19FUSgq
cDEsIDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1zWzFdKTsKKworICAgIGF1dG8gdGVzdDIg
PSBbJl0gKGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGpp
dCk7CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsgcmV0dXJuIHAyOworICAgICAgICAgICAg
aml0LnN0b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlBvc3RJbmRl
eEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0
Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQu
cmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9y
ZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCogcDIgPSBiaXR3aXNlX2Nhc3Q8
aW50MzJfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19FUSgqcDIsIDQpOworICAgIENIRUNLX0VR
KCotLXAyLCA1KTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVQb3N0SW5kZXg2NCgpCit7CisgICAg
aW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnRwdHJfdCBhZGRyID0gYml0d2lz
ZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVvZihp
bnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3Qgc3JjKSB7CisgICAgICAg
IGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICorK3AxID0g
NDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRH
UFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEs
IGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJl
dHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBp
bnQ2NF90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDEoNCkpOworICAgIENIRUNL
X0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEsIG51bXNbMV0pOworCisgICAgYXV0byB0
ZXN0MiA9IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysgPSA1OyByZXR1cm4gcDI7CisgICAgICAg
ICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UG9z
dEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAg
ICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAg
IGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+
KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2NF90KiBwMiA9IGJpdHdpc2Vf
Y2FzdDxpbnQ2NF90Kj4odGVzdDIoNSkpOworICAgIENIRUNLX0VRKCpwMiwgNCk7CisgICAgQ0hF
Q0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4MzIoKQorewor
ICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNp
emVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkg
eworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8v
IHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGlu
ZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0
QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAg
ICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90Pihsb2FkLCAmbnVtc1sx
XSk7CisgICAgfTsKKyAgICAKKyAgICBDSEVDS19FUSh0ZXN0MSg0KSwgMyk7CisgICAgQ0hFQ0tf
RVEobnVtc1syXSwgNCk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQzMl90IHJlcGxhY2Up
IHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7
CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAv
LyByZXMgPSAqcDIrKzsgKnAyID0gNTsgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIGppdC5sb2Fk
MzIoQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
aW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgaml0LnN0b3JlMzIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVwbGFjZSksIENDYWxsSGVscGVyczo6SW1wbGlj
aXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICAgICAgaml0Lm1vdmUo
R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7
CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KGxvYWQsICZudW1z
WzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVzdDIoNSksIDIpOworICAgIENIRUNLX0VR
KG51bXNbMl0sIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKQoreworICAg
IGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVv
ZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkgewor
ICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJl
cyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2NChD
Q2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRk
cmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUklu
Zm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7
CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1z
WzJdLCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkgeworICAg
ICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9
ICpwMisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2Fs
bEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW02NChyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJl
c3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAg
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4obG9hZCwgJm51bXNbMV0pOwor
ICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1sy
XSwgNSk7Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShB
Uk02NCkKQEAgLTQ0NzUsNiArNDY0NSwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIp
IFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdFhvck5vdFdp
dGhMZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0NjQoKSk7
CiAgICAgUlVOKHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CisKKyAgICBS
VU4odGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9yZVByZVBvc3RJ
bmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDMyKCkpOworICAgIFJVTih0
ZXN0TG9hZFByZVBvc3RJbmRleDY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUoQVJNNjRFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBkNWZjMzE2NDY1OTY4
ZWI3MzcxYjZmZjFjYzZmODMxN2ZlY2RlNTJlLi4xNDU1ZWEzNGNkZTUyOTk5ZDVjODZmMjUzNjli
YjJlNjc0YWU5ZjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNw
cApAQCAtNTQ2LDE1ICs1NDYsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBzY2FsZTsKICAgICB9Ci0gICAgCisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4K
KyAgICBBcmcgYWRkcmVzc0FyZyhUbXAgYWRkcmVzcywgSW50IGluZGV4LCBJbmRleEtpbmQgaW5k
ZXhLaW5kID0gSW5kZXhLaW5kOjpOT05FKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpbmRleEtp
bmQpIHsKKyAgICAgICAgY2FzZSBJbmRleEtpbmQ6OlBSRToKKyAgICAgICAgICAgIHJldHVybiBB
cmc6OnByZUluZGV4KGFkZHJlc3MsIGluZGV4KTsKKyAgICAgICAgY2FzZSBJbmRleEtpbmQ6OlBP
U1Q6CisgICAgICAgICAgICByZXR1cm4gQXJnOjpwb3N0SW5kZXgoYWRkcmVzcywgaW5kZXgpOwor
ICAgICAgICBjYXNlIEluZGV4S2luZDo6Tk9ORToKKyAgICAgICAgICAgIHJldHVybiBBcmc6OmFk
ZHIoYWRkcmVzcywgaW5kZXgpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IEFyZygpOworICAgICAgICB9CisgICAgfQorCiAgICAgLy8gVGhpcyB0dXJucyB0aGUgZ2l2ZW4g
b3BlcmFuZCBpbnRvIGFuIGFkZHJlc3MuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBl
bmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+Ci0gICAgQXJnIGVmZmVjdGl2ZUFkZHIo
VmFsdWUqIGFkZHJlc3MsIEludCBvZmZzZXQsIFdpZHRoIHdpZHRoKQorICAgIEFyZyBlZmZlY3Rp
dmVBZGRyKFZhbHVlKiBhZGRyZXNzLCBJbnQgb2Zmc2V0LCBXaWR0aCB3aWR0aCwgSW5kZXhLaW5k
IGluZGV4S2luZCA9IEluZGV4S2luZDo6Tk9ORSkKICAgICB7CiAgICAgICAgIEFTU0VSVChBcmc6
OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIHdpZHRoKSk7CiAgICAgICAgIAogICAgICAgICBhdXRv
IGZhbGxiYWNrID0gWyZdICgpIC0+IEFyZyB7Ci0gICAgICAgICAgICByZXR1cm4gQXJnOjphZGRy
KHRtcChhZGRyZXNzKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBhZGRyZXNzQXJnKHRt
cChhZGRyZXNzKSwgb2Zmc2V0LCBpbmRleEtpbmQpOwogICAgICAgICB9OwogICAgICAgICAKICAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBsb3RzT2ZVc2VzID0gMTA7IC8vIFRoaXMg
aXMgYXJiaXRyYXJ5IGFuZCB3ZSBzaG91bGQgdHVuZSBpdCBldmVudHVhbGx5LgpAQCAtNjAzLDcg
KzYxOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEZyYW1lUG9pbnRl
cjoKLSAgICAgICAgICAgIHJldHVybiBBcmc6OmFkZHIoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBhZGRyZXNzQXJnKFRtcChHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIG9mZnNldCwgaW5kZXhLaW5kKTsKIAogICAgICAgICBj
YXNlIFNsb3RCYXNlOgogICAgICAgICAgICAgcmV0dXJuIEFyZzo6c3RhY2soYWRkcmVzcy0+YXM8
U2xvdEJhc2VWYWx1ZT4oKS0+c2xvdCgpLCBvZmZzZXQpOwpAQCAtNjQxLDcgKzY1Niw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIG9mZnNldCA9IHZhbHVlLT5vZmZzZXQo
KTsKICAgICAgICAgV2lkdGggd2lkdGggPSB2YWx1ZS0+YWNjZXNzV2lkdGgoKTsKIAotICAgICAg
ICBBcmcgcmVzdWx0ID0gZWZmZWN0aXZlQWRkcih2YWx1ZS0+bGFzdENoaWxkKCksIG9mZnNldCwg
d2lkdGgpOworICAgICAgICBBcmcgcmVzdWx0ID0gZWZmZWN0aXZlQWRkcih2YWx1ZS0+bGFzdENo
aWxkKCksIG9mZnNldCwgd2lkdGgsIHZhbHVlLT5pbmRleEtpbmQoKSk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlc3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpOwogCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CkBAIC0xMTQ2LDEyICsxMTYxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBBaXI6Ok1vdmUzMjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFN0b3Jl
MzIsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0oV2lkdGgz
MikpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9yZTMyLCBtX3ZhbHVl
LCB6ZXJvUmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0o
TW92ZTMyLCBBcmc6Olplcm9SZWcsIGRlc3Qua2luZCgpKSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdp
ZHRoMzIpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoTW92ZTMyLCBtX3Zh
bHVlLCB6ZXJvUmVnKCksIGRlc3QpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIEFpcjo6TW92ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFs
aWRGb3JtKFN0b3JlNjQsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxp
ZEZvcm0oV2lkdGg2NCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9y
ZTY0LCBtX3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAo
aXNWYWxpZEZvcm0oTW92ZSwgQXJnOjpaZXJvUmVnLCBkZXN0LmtpbmQoKSkgJiYgZGVzdC5pc1Zh
bGlkRm9ybShXaWR0aDY0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KE1v
dmUsIG1fdmFsdWUsIHplcm9SZWcoKSwgZGVzdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNNZW1vcnlWYWx1ZS5oCmluZGV4IGU3NjgyNjRjMTNmMTY3ZWY1MDZiYmVhMjY2MTY2Nzkz
YzY3NTczM2UuLmFlMjVjOWIwZTJiNWM0MzRlYWU0ZGY1ZGRiYzY2MTRlNjUyOTQ3YmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaApAQCAtMzQsNyArMzQsMTQgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKK2VudW0gY2xhc3MgSW5kZXhLaW5k
IDogdWludDhfdCB7CisgICAgUFJFLAorICAgIFBPU1QsCisgICAgTk9ORQorfTsKKwogY2xhc3Mg
SlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworCiBwdWJsaWM6
CiAgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhLaW5kIGtpbmQpCiAgICAgewpAQCAtNjksNiArNzYs
OSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSGVhcFJhbmdlJiBmZW5jZVJhbmdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9mZW5jZVJhbmdlOyB9CiAgICAgdm9pZCBzZXRGZW5jZVJhbmdlKGNvbnN0IEhlYXBS
YW5nZSYgcmFuZ2UpIHsgbV9mZW5jZVJhbmdlID0gcmFuZ2U7IH0KIAorICAgIEluZGV4S2luZCBp
bmRleEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4S2luZDsgfQorICAgIHZvaWQgc2V0SW5k
ZXhLaW5kKEluZGV4S2luZCBraW5kKSB7IG1faW5kZXhLaW5kID0ga2luZDsgfQorCiAgICAgYm9v
bCBpc1N0b3JlKCkgY29uc3QgeyByZXR1cm4gQjM6OmlzU3RvcmUob3Bjb2RlKCkpOyB9CiAgICAg
Ym9vbCBpc0xvYWQoKSBjb25zdCB7IHJldHVybiBCMzo6aXNMb2FkKG9wY29kZSgpKTsgfQogCkBA
IC0xNTAsNiArMTYwLDcgQEAgcHJpdmF0ZToKICAgICBPZmZzZXRUeXBlIG1fb2Zmc2V0IHsgMCB9
OwogICAgIEhlYXBSYW5nZSBtX3JhbmdlIHsgSGVhcFJhbmdlOjp0b3AoKSB9OwogICAgIEhlYXBS
YW5nZSBtX2ZlbmNlUmFuZ2UgeyBIZWFwUmFuZ2UoKSB9OworICAgIEluZGV4S2luZCBtX2luZGV4
S2luZCB7IEluZGV4S2luZDo6Tk9ORSB9OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKaW5kZXgg
MjI4MGZkNzcxMjUyZTcyNjBmNjg1MDUwOTJmZDU0M2NmZTA2MTg1Ny4uZDI5MThmNGZlYzNhOGE1
NGQxN2I3NGJkZWVjYmM3YmJkZmNkYjg5YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1JlZHVjZVN0cmVuZ3RoLmNwcApAQCAtNDAyLDYgKzQwMiw0NyBAQCBwcml2YXRlOgogICAg
IGludDY0X3QgbV9tYXggeyAwIH07CiB9OwogCitjbGFzcyBVc2FnZSB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoVXNhZ2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIFVzYWdlKFZhbHVlKiBub1VzZSwgVmFsdWUqIHVzZSwgYm9vbCBmb3VuZFVzZSA9IGZh
bHNlKQorICAgICAgICA6IG1fbm9Vc2Uobm9Vc2UpCisgICAgICAgICwgbV91c2UodXNlKQorICAg
ICAgICAsIG1fZm91bmRVc2UoZm91bmRVc2UpCisgICAgeworICAgIH0KKworICAgIH5Vc2FnZSgp
CisgICAgeworICAgICAgICBtX25vVXNlID0gbnVsbHB0cjsKKyAgICAgICAgbV91c2UgPSBudWxs
cHRyOworICAgIH0KKworICAgIFZhbHVlKiBub1VzZSgpIHsgcmV0dXJuIG1fbm9Vc2U7IH0KKwor
ICAgIFZhbHVlKiB1c2UoKSB7IHJldHVybiBtX3VzZTsgfQorCisgICAgYm9vbCBmb3VuZFVzZSgp
IHsgcmV0dXJuIG1fZm91bmRVc2U7IH0KKyAgICB2b2lkIHNldEZvdW5kVXNlKGJvb2wgZm91bmQp
IHsgbV9mb3VuZFVzZSA9IGZvdW5kOyB9CisKK3ByaXZhdGU6CisgICAgLy8gR2l2ZW46CisgICAg
Ly8geCA9IEFkZChhZGRyLCBpbW05KQorICAgIC8vIHkgPSBMb2FkKHgpCisgICAgLy8geiA9IHBy
aW50KHgpCisKKyAgICAvLyBXZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG86CisgICAgLy8gTG9hZChh
ZGRyLCBQcmUoaW1tOSkpCisgICAgLy8gcHJpbnQoYWRkcikKKworICAgIC8vIFNvLCAxKSBhZGRy
IHNob3VsZCBub3QgYmUgdXNlZCBieSBvdGhlcnMgZXhjZXB0IHgKKyAgICAvLyAgICAgMikgeCBz
aG91bGQgYmUgdXNlZCBieSBvdGhlcnMgZXhjZXB0IHkKKyAgICBWYWx1ZSogbV9ub1VzZSB7IG51
bGxwdHIgfTsgLy8gdXNlZCB0byBzdG9yZSBhZGRyCisgICAgVmFsdWUqIG1fdXNlIHsgbnVsbHB0
ciB9OyAvLyB1c2VkIHRvIHN0b3JlIHgKKyAgICBib29sIG1fZm91bmRVc2UgeyBmYWxzZSB9OyAv
LyB1c2VkIHRvIHRyYWNrIHRoZSBkaXNjb3Zlcnkgb2YgdGhlIHVzYWdlIG9mIHggYnkgb3RoZXJz
Cit9OworCiBjbGFzcyBSZWR1Y2VTdHJlbmd0aCB7CiBwdWJsaWM6CiAgICAgUmVkdWNlU3RyZW5n
dGgoUHJvY2VkdXJlJiBwcm9jKQpAQCAtNDczLDYgKzUxNCwyMSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIHJlZHVjZVZhbHVlU3RyZW5ndGgoKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKG1fcHJvYy5vcHRMZXZlbCgpID49IDIpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXBs
YWNlSWZSZWR1bmRhbnQoKTsKKworI2lmIENQVShBUk02NCkKKyAgICAgICAgICAgICAgICAgICAg
bV9wcmVJbmRleENhbmRpZGF0ZXMucmVtb3ZlSWYoCisgICAgICAgICAgICAgICAgICAgICAgICBb
Jl0gKEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBzdGQ6OnVuaXF1ZV9wdHI8VXNhZ2U+Pjo6S2V5VmFs
dWVQYWlyVHlwZSYgZW50cnkpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChtX3ZhbHVlID09IGVudHJ5LmtleSB8fCBtX3ZhbHVlID09IGVudHJ5LnZhbHVlLT51c2Uo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogbV92YWx1ZS0+Y2hpbGRy
ZW4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkudmFsdWUt
Pm5vVXNlKCkgPT0gY2hpbGQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnZh
bHVlLT51c2UoKSA9PSBjaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVudHJ5LnZhbHVlLT5zZXRGb3VuZFVzZSh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShtX2Jsb2NrKTsKICAgICAgICAgICAgIH0K
QEAgLTQ4MSw2ICs1MzcsMTkgQEAgcHVibGljOgogICAgICAgICAgICAgaGFuZGxlQ2hhbmdlZENG
R0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJlc3VsdCB8PSBtX2No
YW5nZWQ7CisKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBtX3By
ZUluZGV4Q2FuZGlkYXRlcy5iZWdpbigpOyBpdCAhPSBtX3ByZUluZGV4Q2FuZGlkYXRlcy5lbmQo
KTsgKytpdCkgeworICAgICAgICAgICAgICAgIGlmIChpdC0+dmFsdWUtPmZvdW5kVXNlKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSBjYW4gdHJpZ2dlciBwcmUtaW5jcmVtZW50
YWwgaW5kZXggYWRkcmVzcyBtb2RlIGlmIHdlIGZpbmQgCisgICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBBREQoYWRkciwgaW1tOSkgdmFsdWUgaXMgdXNlZCBzb21ld2hlcmUgZWxzZS4KKyAgICAg
ICAgICAgICAgICAgICAgaXQtPmtleS0+c2V0SW5kZXhLaW5kKEIzOjpJbmRleEtpbmQ6OlBSRSk7
CisgICAgICAgICAgICAgICAgICAgIGl0LT52YWx1ZS0+dXNlKCktPnJlcGxhY2VXaXRoSWRlbnRp
dHkoaXQtPnZhbHVlLT51c2UoKS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBtX2lnbm9yZVByZVBvc3RDYW5kaWRhdGVzLmFkZChpdC0+a2V5KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1fcHJlSW5kZXhDYW5kaWRhdGVzLmNsZWFyKCk7CisjZW5k
aWYKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkICYmIG1fcHJvYy5vcHRMZXZlbCgpID49IDIp
OwogICAgICAgICAKICAgICAgICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgpIDwgMikgewpAQCAtNDg4
LDcgKzU1NywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzaW1wbGlmeUNGRygpOwogICAgICAg
ICAgICAgaGFuZGxlQ2hhbmdlZENGR0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIH0KLSAgICAgICAg
CisKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIG1faWdub3JlUHJlUG9zdENhbmRpZGF0ZXMuY2xl
YXIoKTsKKyNlbmRpZgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTE5
MzUsMTQgKzIwMDcsMzIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIEFsc28gdHVybnMgdGhp
czogU3RvcmUodmFsdWUsIEFkZChhZGRyZXNzLCBvZmZzZXQxKSwgb2Zmc2V0ID0gb2Zmc2V0MikK
ICAgICAgICAgICAgIC8vIEludG8gdGhpczogU3RvcmUodmFsdWUsIGFkZHJlc3MsIG9mZnNldCA9
IG9mZnNldDEgKyBvZmZzZXQyKQogICAgICAgICAgICAgaWYgKGFkZHJlc3MtPm9wY29kZSgpID09
IEFkZCAmJiBhZGRyZXNzLT5jaGlsZCgxKS0+aGFzSW50UHRyKCkpIHsKKwogICAgICAgICAgICAg
ICAgIGludHB0cl90IG9mZnNldCA9IGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludFB0cigpOwogICAg
ICAgICAgICAgICAgIGlmICghc3VtT3ZlcmZsb3dzPGludHB0cl90PihvZmZzZXQsIG1lbW9yeS0+
b2Zmc2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBtZW1vcnktPm9mZnNl
dCgpOwogICAgICAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9
IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoc21hbGxPZmZzZXQgPT0gb2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhZGRyZXNzID0gYWRkcmVzcy0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
ZW1vcnktPmxhc3RDaGlsZCgpID0gYWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1l
bW9yeS0+bGFzdENoaWxkKCkgPSBhZGRyZXNzLT5jaGlsZCgwKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1lbW9yeS0+c2V0T2Zmc2V0KHNtYWxsT2Zmc2V0KTsKKyNpZiBDUFUoQVJNNjQpCisg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRyeVByZUluZGV4ID0gWyZdICgpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3Byb2Mub3B0TGV2ZWwoKSA8IDIg
fHwgbWVtb3J5LT5vcGNvZGUoKSAhPSBMb2FkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lbW9y
eS0+dHlwZSgpICE9IEludDMyICYmIG1lbW9yeS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFBaXI6OkFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybShzbWFsbE9mZnNldCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobV9pZ25vcmVQcmVQb3N0Q2FuZGlkYXRlcy5maW5kKG1l
bW9yeSkgIT0gbV9pZ25vcmVQcmVQb3N0Q2FuZGlkYXRlcy5lbmQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX3ByZUluZGV4Q2FuZGlkYXRlcy5maW5kKG1lbW9yeSkgIT0gbV9wcmVJbmRleENh
bmRpZGF0ZXMuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cnlQcmVJ
bmRleCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJlSW5kZXhDYW5kaWRhdGVz
LmFkZChtZW1vcnksIG1ha2VVbmlxdWU8VXNhZ2U+KGFkZHJlc3MtPmNoaWxkKDApLCBhZGRyZXNz
LCBmYWxzZSkpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMzAzNCw2
ICszMTI0LDggQEAgcHJpdmF0ZToKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiAg
ICAgQmxvY2tJbnNlcnRpb25TZXQgbV9ibG9ja0luc2VydGlvblNldDsKICAgICBIYXNoTWFwPFZh
bHVlS2V5LCBWYWx1ZSo+IG1fdmFsdWVGb3JDb25zdGFudDsKKyAgICBIYXNoTWFwPE1lbW9yeVZh
bHVlKiwgc3RkOjp1bmlxdWVfcHRyPFVzYWdlPj4gbV9wcmVJbmRleENhbmRpZGF0ZXM7CisgICAg
SGFzaFNldDxNZW1vcnlWYWx1ZSo+IG1faWdub3JlUHJlUG9zdENhbmRpZGF0ZXM7CiAgICAgQmFz
aWNCbG9jayogbV9yb290IHsgbnVsbHB0ciB9OwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2sgeyBu
dWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9pbmRleCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnLmNwcAppbmRleCAxMDNjNmVjY2EzZDMxNGJiNGVkOGMwMmE0ZDJmMDA5
Y2E2NDFkMDAxLi41NGYwZjk2ZTNjNTU4ZjMzMGY5N2M2NmI4MjQwMmIzYjE5OTgwMWNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCkBAIC0xMzAsNiArMTMwLDExIEBA
IHVuc2lnbmVkIEFyZzo6anNIYXNoKCkgY29uc3QKICAgICAgICAgcmVzdWx0ICs9IG1fYmFzZS5p
bnRlcm5hbFZhbHVlKCk7CiAgICAgICAgIHJlc3VsdCArPSBtX2luZGV4LmludGVybmFsVmFsdWUo
KTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcmVJbmRleDoKKyAgICBjYXNlIFBvc3RJbmRl
eDoKKyAgICAgICAgcmVzdWx0ICs9IG1fb2Zmc2V0OworICAgICAgICByZXN1bHQgKz0gbV9iYXNl
LmludGVybmFsVmFsdWUoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdGFjazoKICAgICAg
ICAgcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3NjYWxlKTsKICAgICAgICAgcmVz
dWx0ICs9IHN0YWNrU2xvdCgpLT5pbmRleCgpOwpAQCAtMTYxLDcgKzE2Niw3IEBAIHZvaWQgQXJn
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludGYoIiQweCVs
bHgiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KG1fb2Zmc2V0KSk7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIFplcm9SZWc6Ci0gICAgICAgIG91dC5wcmludCgiJSV4enIiKTsK
KyAgICAgICAgb3V0LnByaW50KCIleHpyIik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNp
bXBsZUFkZHI6CiAgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIikiKTsKQEAgLTE4MCw2
ICsxODUsMTIgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAg
ICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxlKCkpOwogICAgICAgICBvdXQucHJpbnQoIikiKTsK
ICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIG91dC5wcmludCgi
KCIsIGJhc2UoKSwgIixQcmUoIiwgb2Zmc2V0KCksICIpKSIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIixQb3N0
KCIsIG9mZnNldCgpLCAiKSkiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU3RhY2s6CiAg
ICAgICAgIGlmIChvZmZzZXQoKSkKICAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CkBA
IC0yNjEsNiArMjcyLDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBB
cmc6OktpbmQga2luZCkKICAgICBjYXNlIEFyZzo6SW5kZXg6CiAgICAgICAgIG91dC5wcmludCgi
SW5kZXgiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpQcmVJbmRleDoKKyAgICAg
ICAgb3V0LnByaW50KCJQcmVJbmRleCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6
OlBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQb3N0SW5kZXgiKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQXJnOjpSZWxDb25kOgogICAgICAgICBvdXQucHJpbnQoIlJlbENvbmQi
KTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKaW5k
ZXggY2U1YTRlNzM3OWFkNjQ0NDVmMGMzYWJkMTI5ZjMyOWI5NDdmZTgxMi4uZWEyMjYyOGFlMTJl
MTFmZWI0NWRmNjdhY2YzZGE4ZDY4NjBiNGZkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5oCkBAIC0xLDMgKzEsNCBAQAorCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTc3LDYgKzc4LDggQEAg
cHVibGljOgogICAgICAgICBTdGFjaywKICAgICAgICAgQ2FsbEFyZywKICAgICAgICAgSW5kZXgs
CisgICAgICAgIFByZUluZGV4LAorICAgICAgICBQb3N0SW5kZXgsCiAKICAgICAgICAgLy8gSW1t
ZWRpYXRlIG9wZXJhbmRzIHRoYXQgY3VzdG9taXplIHRoZSBiZWhhdmlvciBvZiBhbiBvcGVyYXRp
b24uIFlvdSBjYW4gdGhpbmsgb2YgdGhlbSBhcwogICAgICAgICAvLyBzZWNvbmRhcnkgb3Bjb2Rl
cy4gVGhleSBhcmUgYWx3YXlzICJVc2UiJ2QuCkBAIC02NDksNiArNjUyLDMwIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIEFyZzo6aW5kZXgoYmFzZSwgaW5kZXgsIHNjYWxlLCAwKTsKICAgICB9
CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxP
ZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgQXJnIHByZUluZGV4KEFpcjo6VG1wIGJhc2UsIEludCBp
bmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VS
VChpc0ludDkoaW5kZXgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IFByZUluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zm
c2V0PEludD4+CisgICAgc3RhdGljIEFyZyBwb3N0SW5kZXgoQWlyOjpUbXAgYmFzZSwgSW50IGlu
ZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJU
KGlzSW50OShpbmRleCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9r
aW5kID0gUG9zdEluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CiAgICAgc3RhdGljIEFyZyByZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIEFyZyByZXN1bHQ7CkBAIC03OTksNiArODI2
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKICAgICB9CiAK
KyAgICBib29sIGlzUHJlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBQcmVJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUG9zdEluZGV4KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUG9zdEluZGV4OworICAgIH0KKwogICAgIGJv
b2wgaXNNZW1vcnkoKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKQEAg
LTgwOCw2ICs4NDUsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNh
c2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoK
KyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk3Miw3ICsxMDExLDcg
QEAgcHVibGljOgogCiAgICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0CiAgICAgewotICAgICAgICBB
U1NFUlQoa2luZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwga2luZCgpID09
IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBBU1NFUlQo
a2luZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEV4dGVu
ZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXggfHwga2luZCgpID09IFByZUluZGV4IHx8
IGtpbmQoKSA9PSBQb3N0SW5kZXgpOwogICAgICAgICByZXR1cm4gbV9iYXNlOwogICAgIH0KIApA
QCAtOTgyLDcgKzEwMjEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoa2luZCgpID09
IFN0YWNrKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBl
PihtX3NjYWxlKTsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBF
eHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4
KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9m
ZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4IHx8IGtpbmQo
KSA9PSBQcmVJbmRleCB8fCBraW5kKCkgPT0gUG9zdEluZGV4KTsKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCk7CiAgICAgfQogCkBAIC0xMDQ0
LDYgKzEwODMsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBF
eHRlbmRlZE9mZnNldEFkZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJl
SW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICBjYXNlIFN0YWNrOgogICAg
ICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKQEAgLTEwODEsNiArMTEy
Miw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVk
T2Zmc2V0QWRkcjoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoK
KyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNh
c2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBCaWdJbW06IC8vIFllcywgd2UgYWxsb3cgQmlnSW1t
IGFzIGEgZG91YmxlIGltbWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVudGluZyBzdGFj
a21hcHMuCkBAIC0xMjM3LDYgKzEyODAsMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVl
OjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFByZUluZGV4Rm9y
bShJbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAg
IHJldHVybiBpc1ZhbGlkU2lnbmVkSW1tOShvZmZzZXQpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJ
c0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFBvc3RJbmRleEZvcm0o
SW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBy
ZXR1cm4gaXNWYWxpZFNpZ25lZEltbTkob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKwogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgd2lkdGggdGhlbiB0aGlzIG9wdGlt
aXN0aWNhbGx5IGFzc3VtZXMgdGhhdCB5b3UncmUgdXNpbmcgdGhlIHJpZ2h0IHdpZHRoLiBCdXQK
ICAgICAvLyB0aGUgd2lkdGggaXMgcmVsZXZhbnQgdG8gdmFsaWRpdHksIHNvIHBhc3NpbmcgYSBu
dWxsIHdpZHRoIGlzIG9ubHkgdXNlZnVsIGZvciBhc3NlcnRpb25zLiBEb24ndAogICAgIC8vIHBh
c3MgbnVsbCB3aWR0aHMgd2hlbiBjYXNjYWRpbmcgdGhyb3VnaCBBcmdzIGluIHRoZSBpbnN0cnVj
dGlvbiBzZWxlY3RvciEKQEAgLTEyNjUsNiArMTMyNCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm4gaXNWYWxpZEFkZHJGb3JtKG9mZnNldCgpLCB3aWR0aCk7CiAgICAgICAgIGNhc2Ug
SW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEluZGV4Rm9ybShzY2FsZSgpLCBvZmZz
ZXQoKSwgd2lkdGgpOworICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICAgICAgcmV0dXJu
IGlzVmFsaWRQcmVJbmRleEZvcm0ob2Zmc2V0KCkpOworICAgICAgICBjYXNlIFBvc3RJbmRleDoK
KyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkUG9zdEluZGV4Rm9ybShvZmZzZXQoKSk7CiAgICAg
ICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERv
dWJsZUNvbmQ6CkBAIC0xMjg0LDYgKzEzNDcsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU2lt
cGxlQWRkcjoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0
QWRkcjoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAg
ICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBJbmRleDoKQEAgLTEzMjYsNiArMTM5MSw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBT
aW1wbGVBZGRyOgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZz
ZXRBZGRyOgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoK
ICAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQLCBhcmdSb2xlID09IFVzZUFkZHIg
PyBhcmdXaWR0aCA6IHBvaW50ZXJXaWR0aCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEluZGV4OgpAQCAtMTM4Myw2ICsxNDUwLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCksIG1fZXh0ZW5kKTsKICAg
ICB9CiAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzIGFzUHJlSW5kZXhBZGRy
ZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ByZUluZGV4KCkpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIG9m
ZnNldCgpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyBh
c1Bvc3RJbmRleEFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUG9zdElu
ZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3Mo
bV9iYXNlLmdwcigpLCBvZmZzZXQoKSk7CisgICAgfQorCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwCmluZGV4IDkwNWU2MTdmYmRlMGUyYjdkNzU1
NTYzZTY4ODU4OWJkYWQ3MjZjODAuLjZhZDA1ODQyNjdiOGM3ZWU3MTQ5YjAyZjgyMzE1NzJiZWU4
Y2Y4YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJT
dGFja0FyZ3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJT
dGFja0FyZ3MuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBsb3dlclN0YWNrQXJncyhDb2Rl
JiBjb2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdpZHRo
ID09IFdpZHRoMzIpOwogCiAjaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlID0gU3RvcmUzMjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBaXI6Ok9wY29kZSBzdG9yZU9wY29kZSA9IE1vdmUzMjsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBaXI6OkFyZzo6S2luZCBvcGVyYW5kS2luZCA9IEFyZzo6WmVyb1Jl
ZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBaXI6OkFyZyBvcGVyYW5kID0gQXJnOjp6
ZXJvUmVnKCk7CiAjZWxpZiBDUFUoWDg2XzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXggNjYxZWFkZDIzNzNjNTRhNGJiYTk0N2E1NGJk
YTI1NTdiZGI4YWU0YS4uOWZlYmFkOTg2MzMzYmVjYWFkMzVlZDI1NGJmMzUyZTAxMDkwNjZiZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rl
cworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBA
IC02NDcsNiArNjQ3LDEyIEBAIE1vdmUgVTpHOlB0ciwgRDpHOlB0cgogICAgIEluZGV4LCBUbXAg
YXMgbG9hZFB0cgogICAgIFRtcCwgQWRkciBhcyBzdG9yZVB0cgogICAgIFRtcCwgSW5kZXggYXMg
c3RvcmVQdHIKKyAgICBhcm02NDogWmVyb1JlZywgQWRkciBhcyBzdG9yZTY0CisgICAgYXJtNjQ6
IFplcm9SZWcsIEluZGV4IGFzIHN0b3JlNjQKKyAgICBhcm02NDogUHJlSW5kZXgsIFRtcCBhcyBs
b2FkNjQKKyAgICBhcm02NDogUG9zdEluZGV4LCBUbXAgYXMgbG9hZDY0CisgICAgYXJtNjQ6IFRt
cCwgUHJlSW5kZXggYXMgc3RvcmU2NAorICAgIGFybTY0OiBUbXAsIFBvc3RJbmRleCBhcyBzdG9y
ZTY0CiAgICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmVQdHIKIAogIyBUaGlzIGlzIGZvciBtb3Zp
bmcgYmV0d2VlbiBzcGlsbCBzbG90cy4KQEAgLTY2Nyw2ICs2NzMsMTIgQEAgTW92ZTMyIFU6Rzoz
MiwgWkQ6RzozMgogICAgIEluZGV4LCBUbXAgYXMgbG9hZDMyCiAgICAgVG1wLCBBZGRyIGFzIHN0
b3JlMzIKICAgICBUbXAsIEluZGV4IGFzIHN0b3JlMzIKKyAgICBhcm02NDogWmVyb1JlZywgQWRk
ciBhcyBzdG9yZTMyCisgICAgYXJtNjQ6IFplcm9SZWcsIEluZGV4IGFzIHN0b3JlMzIKKyAgICBh
cm02NDogUHJlSW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBhcm02NDogUG9zdEluZGV4LCBUbXAg
YXMgbG9hZDMyCisgICAgYXJtNjQ6IFRtcCwgUHJlSW5kZXggYXMgc3RvcmUzMgorICAgIGFybTY0
OiBUbXAsIFBvc3RJbmRleCBhcyBzdG9yZTMyCiAgICAgeDg2OiBJbW0sIFRtcCBhcyB6ZXJvRXh0
ZW5kMzJUb1dvcmQKICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZTMyCiAgICAgeDg2OiBJbW0s
IEluZGV4IGFzIHN0b3JlMzIKQEAgLTY3NSwxNCArNjg3LDYgQEAgTW92ZTMyIFU6RzozMiwgWkQ6
RzozMgogTW92ZTMyIFU6RzozMiwgWkQ6RzozMiwgUzpHOjMyCiAgICAgQWRkciwgQWRkciwgVG1w
CiAKLWFybTY0OiBTdG9yZTMyIFU6RzozMiwgWkQ6RzozMgotICAgIFplcm9SZWcsIEFkZHIKLSAg
ICBaZXJvUmVnLCBJbmRleAotCi1hcm02NDogU3RvcmU2NCBVOkc6NjQsIEQ6Rzo2NAotICAgIFpl
cm9SZWcsIEFkZHIKLSAgICBaZXJvUmVnLCBJbmRleAotCiBTaWduRXh0ZW5kMzJUb1B0ciBVOkc6
MzIsIEQ6RzpQdHIKICAgICBUbXAsIFRtcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKaW5kZXggMzc0MGVmZGJkZDE0NmEzN2Y2ZWRlOWRk
YmMyM2RkYmEwM2IwNzY0Ni4uZjFiZjFhNDZjZmM4ODllYzE5MzQ2ZjJjMDZiN2NmNTBmOWUzZGUw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJh
dG9yLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRv
ci5yYgpAQCAtMjI5LDcgKzIyOSw3IEBAIGRlZiBpc0dGKHRva2VuKQogZW5kCiAKIGRlZiBpc0tp
bmQodG9rZW4pCi0gICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJbW0pfChCaXRJbW0p
fChCaXRJbW02NCl8KFplcm9SZWcpfChTaW1wbGVBZGRyKXwoQWRkcil8KEV4dGVuZGVkT2Zmc2V0
QWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25kKXwoU3RhdHVzQ29u
ZCkpXFovCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChC
aXRJbW02NCl8KFplcm9SZWcpfChTaW1wbGVBZGRyKXwoQWRkcil8KEV4dGVuZGVkT2Zmc2V0QWRk
cil8KEluZGV4KXwoUHJlSW5kZXgpfChQb3N0SW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERv
dWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KIGVuZAogCiBkZWYgaXNBcmNoKHRva2VuKQpAQCAt
MzAzLDcgKzMwMyw3IEBAIGNsYXNzIFBhcnNlcgogCiAgICAgZGVmIGNvbnN1bWVLaW5kCiAgICAg
ICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwotICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBr
aW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgWmVyb1JlZywgVG1wLCBTaW1wbGVB
ZGRyLCBBZGRyLCBFeHRlbmRlZE9mZnNldEFkZHIsIEluZGV4LCBSZWxDb25kLCBSZXNDb25kLCBE
b3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAg
ICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02
NCwgWmVyb1JlZywgVG1wLCBTaW1wbGVBZGRyLCBBZGRyLCBFeHRlbmRlZE9mZnNldEFkZHIsIElu
ZGV4LCBQcmVJbmRleCwgUG9zdEluZGV4LCBSZWxDb25kLCBSZXNDb25kLCBEb3VibGVDb25kLCBv
ciBTdGF0dXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQogICAgICAgICBhZHZhbmNlCiAg
ICAgICAgIHJlc3VsdAogICAgIGVuZApAQCAtOTI5LDYgKzkyOSwxMiBAQCB3cml0ZUgoIk9wY29k
ZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKICAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZEluZGV4Rm9ybShhcmdzWyN7aW5k
ZXh9XS5zY2FsZSgpLCBhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSwgI3thcmcud2lkdGhDb2RlfSkp
IgogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7Igor
ICAgICAgICAgICAgICAgIHdoZW4gIlByZUluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImlmICghQXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNl
dCgpKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNl
KTsiCisgICAgICAgICAgICAgICAgd2hlbiAiUG9zdEluZGV4IgorICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShhcmdzWyN7aW5kZXh9
XS5vZmZzZXQoKSkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVS
TihmYWxzZSk7IgogICAgICAgICAgICAgICAgIHdoZW4gIkJpZ0ltbSIKICAgICAgICAgICAgICAg
ICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCkBAIC0xMjM1
LDYgKzEyNDEsMTAgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgogICAgICAgICAg
ICAgICAgIHdoZW4gIkluZGV4IgogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdz
WyN7aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlByZUluZGV4
IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1ByZUlu
ZGV4QWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIlBvc3RJbmRleCIKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNQb3N0SW5kZXhBZGRyZXNz
KCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29uZCIKICAgICAgICAgICAgICAgICAgICAg
b3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkiCiAgICAg
ICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRl
eCBjNzAzMmVjMDg0ZGRmZGQ5MzVlNTUyN2ZhYWU5MzU2ODE5ODQ4MTc5Li45Nzk3YzQyZDkzMmI1
MjhjNDkyM2ZjZGE2ZjQ1NzkzMmNiMTU4MTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5o
CkBAIC0xMTQwLDQgKzExNDAsOCBAQCB2b2lkIGFkZENvcHlUZXN0cyhjb25zdCBjaGFyKiBmaWx0
ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYpOwogCiBib29sIHNob3VsZFJ1
bihjb25zdCBjaGFyKiBmaWx0ZXIsIGNvbnN0IGNoYXIqIHRlc3ROYW1lKTsKIAordm9pZCB0ZXN0
TG9hZFByZUluZGV4MzIoKTsKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCk7Cit2b2lkIHRlc3RM
b2FkUG9zdEluZGV4KCk7CisKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjNfMy5jcHAKaW5kZXggNGM1MmFkYTljYzQwMmRkZTUzOTg4Y2M4ZjJmNWU5
ZTBkZGUyZTExYy4uYWNhMDkzZjkzMTg1OTdjNWIxMzY5MDU5ODgyZTgzYTEwMjdkNjM5OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCkBAIC0yOCw2ICsyOCwxNjYgQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCkKK3sKKyAgICBp
ZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9Owor
ICAgIGludDMyX3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0
ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBW
YXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50MzIpOworICAgIFZhcmlhYmxlKiBwID0g
cHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHJvb3QtPmFwcGVuZEludENvbnN0YW50
KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgMCkpOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1
ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFs
dWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0
LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbnN0MTAgPSBsb29wVGVzdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxv
b3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwg
Y29uc3QxMCk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFu
Y2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9j
ayhsb29wQm9keSkpOworCisgICAgVmFsdWUqIGNvbnN0NCA9IGxvb3BCb2R5LT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCk7CisgICAgVmFsdWUqIHAzID0gbG9vcEJv
ZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGNvbnN0NCk7Cisg
ICAgTWVtb3J5VmFsdWUqIGxvYWQgPSBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihw
cm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHAzKTsKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9k
eS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9hZCk7CisgICAg
bG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4o
KSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsK
KworICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgCisgICAgICAgIGRvbmUtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9j
LCBCMzo6R2V0LCBPcmlnaW4oKSwgcikpOyAgIAorCisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0
eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8g
dGVzdCA9IFsmXSAoKSAtPiBpbnQzMl90IHsKKyAgICAgICAgaW50MzJfdCByID0gMDsKKyAgICAg
ICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAgIHIgKz0gKisrcHRyOworICAgICAgICByZXR1
cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQzMl90Pihwcm9j
LCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCit2b2lkIHRlc3RM
b2FkUHJlSW5kZXg2NCgpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkg
PCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMywg
NCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQ2NF90KiBwdHIgPSBudW1zOworCisgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0g
cHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKElu
dDY0KTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAg
cm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBy
LCByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50NjQsIDApKTsKKyAg
ICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCks
IHAsIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIFZh
bHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6Okdl
dCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25z
dDEwID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAx
MCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBB
Ym92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGNvbnN0MTApOworICAgIGxvb3BUZXN0LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJs
b2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIFZhbHVlKiBjb25z
dDggPSBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDgp
OworICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwg
T3JpZ2luKCksIHAyLCBjb25zdDgpOworICAgIE1lbW9yeVZhbHVlKiBsb2FkID0gbG9vcEJvZHkt
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLCBwMyk7
CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBP
cmlnaW4oKSwgcjIsIGxvYWQpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAg
bG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJl
cXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFs
dWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICBkb25lLT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpKTsgICAKKwor
ICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBm
aXhTU0EocHJvYyk7CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50NjRfdCB7CisgICAg
ICAgIGludDY0X3QgciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICBy
ICs9ICorK3B0cjsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGNv
bXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwg
dGVzdCgpKTsKK30KKwordm9pZCB0ZXN0TG9hZFBvc3RJbmRleCgpCit7CisgICAgaWYgKE9wdGlv
bnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQ2
NF90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQ2
NF90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayog
cm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUq
IHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRk
VmFyaWFibGUoSW50NjQpOworCisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHBy
b2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBP
cmlnaW4oKSwgSW50NjQsIDApKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgcm9vdC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxv
Y2sobG9vcFRlc3QpKTsKKworICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9
IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2lu
KCksIHApOworICAgIFZhbHVlKiBjb25zdDEwID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDY0
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGNvbnN0MTAp
OworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmln
aW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJv
ZHkpKTsKKworICAgIE1lbW9yeVZhbHVlKiBsb2FkID0gbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLCBwMik7CisgICAgVmFsdWUqIHIz
ID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxv
YWQpOworICAgIFZhbHVlKiBjb25zdDggPSBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIDgpOworICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBjb25zdDgpOworICAgIGxvb3BCb2R5
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIz
KTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQs
IE9yaWdpbigpLCBwLCBwMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICBk
b25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIAorICAgICAgICBkb25lLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6Okdl
dCwgT3JpZ2luKCksIHIpKTsgICAKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAg
ICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIHRlc3QgPSBb
Jl0gKCkgLT4gaW50NjRfdCB7CisgICAgICAgIGludDY0X3QgciA9IDA7CisgICAgICAgIHdoaWxl
IChyIDwgMTApCisgICAgICAgICAgICByICs9ICpwdHIrKzsKKyAgICAgICAgcmV0dXJuIHI7Cisg
ICAgfTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYml0d2lz
ZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKworCiB2b2lkIHRlc3RJbnNlcnRT
aWduZWRCaXRmaWVsZEluWmVybzMyKCkKIHsKICAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0
QjNPcHRMZXZlbCgpIDwgMikKQEAgLTM2OTcsNiArMzg1NywxMCBAQCB2b2lkIGFkZFNoclRlc3Rz
KGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0
YXNrcykKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCAwKSk7CiAgICAgUlVO
KHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMSkpOwogICAgIFJVTih0ZXN0WlNockFyZ0lt
bTMyKDB4ZmZmZmZmZmYsIDYzKSk7CisKKyAgICBSVU4odGVzdExvYWRQcmVJbmRleDMyKCkpOwor
ICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4
KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCmluZGV4IDYzZTI2Njc4ODUyMDE4
YTc2ODBjYTVmMDcxNDY5NjgxMDU4ODRiM2IuLjY5YmI2YjJiZTgxODcwYjU5ODMzMzY3YWYyNjc1
YjdmNGVmMDU2ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcApAQCAtMjMzLDggKzIzMyw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaml0V3JpdGVUaHVua0dlbmVy
YXRvCiAgICAgaml0LnJldCgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMCA9
IGppdC5sYWJlbCgpOwotICAgIGppdC5sb2FkNjQoeDEsIFBvc3RJbmRleCg4KSwgeDYpOwotICAg
IGppdC5zdG9yZTY0KHg2LCB4MywgUG9zdEluZGV4KDgpKTsKKyAgICBqaXQubG9hZDY0KE1hY3Jv
QXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgxLCA4KSwgeDYpOworICAgIGppdC5zdG9yZTY0
KHg2LCBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyh4MywgOCkpOwogICAgIHNtYWxs
Q29weS5saW5rKCZqaXQpOwogICAgIGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgyKS5saW5rVG8obG9jYWwwLCAmaml0KTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsb2NhbDIgPSBqaXQuYnJhbmNoQWRkNjQoTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434166</attachid>
            <date>2021-07-24 05:20:00 -0700</date>
            <delta_ts>2021-07-24 05:59:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210724071959.patch</filename>
            <type>text/plain</type>
            <size>150660</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YzJiYTQ4MGQzMzQ0YTVkM2UyNTFiYzUyOGVhMWQ1NDk5YTk0NDQ0Li5mOWFjZjVmOTg1MjIwOWMy
YjI2ODVhMTBkZGQzYTI2ODNhMGM3NmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAyMS0wNy0yNCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0ZXN0T2JqZWN0aXZlQ0FQSU1haW4p
OgorICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAoYmxvY2tTaWduYXR1cmVD
b250YWluc0NsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKHRocmVhZE1haW4pOiBEZWxldGVkLgor
ICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzczo6UHJlSW5kZXhBZGRy
ZXNzKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRk
cmVzczo6UG9zdEluZGV4QWRkcmVzcyk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDMyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RvcmU2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNNjQ6OnN0b3JlMzIpOgorICAgICAgICAqIGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6
CisgICAgICAgIChKU0M6OnRlc3RTdG9yZVByZVBvc3RJbmRleDMyKToKKyAgICAgICAgKEpTQzo6
dGVzdFN0b3JlUHJlUG9zdEluZGV4NjQpOgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQcmVQb3N0SW5kZXg2NCk6CisgICAgICAg
ICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVlLmg6Cisg
ICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckFy
Zy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6anNIYXNoIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdURjo6cHJpbnRJ
bnRlcm5hbCk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OnByZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwb3N0SW5k
ZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUHJlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUG9zdEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc01lbW9yeSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6YmFzZSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b2Zmc2V0IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1ZhbGlkUG9zdEluZGV4Rm9ybSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxp
ZEZvcm0gY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjphc1ByZUluZGV4QWRkcmVzcyBjb25zdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6YXNQb3N0SW5kZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKiBiMy9h
aXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb3dlclN0
YWNrQXJncyk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAq
IGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgorICAg
ICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RJZmh5aik6CisgICAgICAgICh0
ZXN0TG9hZFByZUluZGV4MzIpOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDY0KToKKyAgICAg
ICAgKHRlc3RMb2FkUG9zdEluZGV4KToKKyAgICAgICAgKGFkZFNoclRlc3RzKToKKyAgICAgICAg
KiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OmppdFdyaXRlVGh1
bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTIxICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIHNwZWN1bGF0ZU5laXRoZXJEb3VibGVOb3JTdHJpbmdOb3JI
ZWFwQmlnSW50IHNob3VsZCBvbmx5IGhhdmUgYSBzaW5nbGUgSlNUeXBlIGJyYW5jaApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCmluZGV4IGYyZWM0MmJhODg4YWY3
NDlhNjA0Yzc4MDdmZTNmNTUxMzk0NjU0ZWMuLjJiYTJmY2RlMjdiZmI3MjM2OTE5Yzc3ZTQwMDNi
NzkzNjU0ODVlZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
bW0KQEAgLTQ4NywyNCArNDg3LDI0IEBAIGV4dGVybiAiQyIgdm9pZCBjaGVja1Jlc3VsdChOU1N0
cmluZyAqZGVzY3JpcHRpb24sIGJvb2wgcGFzc2VkKQogICAgICAgICBmYWlsZWQgPSAxOwogfQog
Ci1zdGF0aWMgYm9vbCBibG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MoKQotewotICAgIHN0YXRp
YyBib29sIGNvbnRhaW5zQ2xhc3MgPSBeewotICAgICAgICBpZCBibG9jayA9IF4oTlNTdHJpbmcg
KnN0cmluZyl7IHJldHVybiBzdHJpbmc7IH07Ci0gICAgICAgIHJldHVybiBfQmxvY2tfaGFzX3Np
Z25hdHVyZShibG9jaykgJiYgc3Ryc3RyKF9CbG9ja19zaWduYXR1cmUoYmxvY2spLCAiTlNTdHJp
bmciKTsKLSAgICB9KCk7Ci0gICAgcmV0dXJuIGNvbnRhaW5zQ2xhc3M7Ci19Ci0KLXN0YXRpYyB2
b2lkKiB0aHJlYWRNYWluKHZvaWQqIGNvbnRleHRQdHIpCi17Ci0gICAgSlNDb250ZXh0ICpjb250
ZXh0ID0gKF9fYnJpZGdlIEpTQ29udGV4dCopY29udGV4dFB0cjsKLQotICAgIC8vIERvIHNvbWV0
aGluZyB0byBlbnRlciB0aGUgVk0uCi0gICAgVGVzdE9iamVjdCAqdGVzdE9iamVjdCA9IFtUZXN0
T2JqZWN0IHRlc3RPYmplY3RdOwotICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2Jq
ZWN0OwotICAgIHJldHVybiBudWxscHRyOwotfQorLy8gc3RhdGljIGJvb2wgYmxvY2tTaWduYXR1
cmVDb250YWluc0NsYXNzKCkKKy8vIHsKKy8vICAgICBzdGF0aWMgYm9vbCBjb250YWluc0NsYXNz
ID0gXnsKKy8vICAgICAgICAgaWQgYmxvY2sgPSBeKE5TU3RyaW5nICpzdHJpbmcpeyByZXR1cm4g
c3RyaW5nOyB9OworLy8gICAgICAgICByZXR1cm4gX0Jsb2NrX2hhc19zaWduYXR1cmUoYmxvY2sp
ICYmIHN0cnN0cihfQmxvY2tfc2lnbmF0dXJlKGJsb2NrKSwgIk5TU3RyaW5nIik7CisvLyAgICAg
fSgpOworLy8gICAgIHJldHVybiBjb250YWluc0NsYXNzOworLy8gfQorCisvLyBzdGF0aWMgdm9p
ZCogdGhyZWFkTWFpbih2b2lkKiBjb250ZXh0UHRyKQorLy8geworLy8gICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IChfX2JyaWRnZSBKU0NvbnRleHQqKWNvbnRleHRQdHI7CisKKy8vICAgICAvLyBE
byBzb21ldGhpbmcgdG8gZW50ZXIgdGhlIFZNLgorLy8gICAgIFRlc3RPYmplY3QgKnRlc3RPYmpl
Y3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKy8vICAgICBjb250ZXh0W0AidGVzdE9iamVj
dCJdID0gdGVzdE9iamVjdDsKKy8vICAgICByZXR1cm4gbnVsbHB0cjsKKy8vIH0KIAogc3RhdGlj
IHZvaWQqIG11bHRpVk1UaHJlYWRNYWluKHZvaWQqIG9rUHRyKQogewpAQCAtNTU5LDEwNTAgKzU1
OSwxMDUwIEBAIHN0YXRpYyB2b2lkIHJ1bkpJVFRocmVhZExpbWl0VGVzdHMoKQogCiBzdGF0aWMg
dm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSU1haW4oKQogewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewot
ICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lKiB2bSA9IFtbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10g
aW5pdF07Ci0gICAgICAgIEpTQ29udGV4dCogY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBp
bml0V2l0aFZpcnR1YWxNYWNoaW5lOnZtXTsKLSAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3Jp
cHQ6QCJiYWQiXTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlND
b250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAgICBKU1Zh
bHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIjIgKyAyIl07Ci0gICAgICAg
IGNoZWNrUmVzdWx0KEAiMiArIDIiLCByZXN1bHQuaXNOdW1iZXIgJiYgW3Jlc3VsdCB0b0ludDMy
XSA9PSA0KTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAgICBOU1N0cmlu
ZyAqcmVzdWx0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJUd28gcGx1cyB0d28gaXMg
JUAiLCBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIjIgKyAyIl1dOwotICAgICAgICBjaGVja1Jl
c3VsdChAInN0cmluZ1dpdGhGb3JtYXQiLCBbcmVzdWx0IGlzRXF1YWw6QCJUd28gcGx1cyB0d28g
aXMgNCJdKTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAgICBjb250ZXh0
W0AibWVzc2FnZSJdID0gQCJIZWxsbyI7Ci0gICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250
ZXh0IGV2YWx1YXRlU2NyaXB0OkAibWVzc2FnZSArICcsIFdvcmxkISciXTsKLSAgICAgICAgY2hl
Y2tSZXN1bHQoQCJIZWxsbywgV29ybGQhIiwgcmVzdWx0LmlzU3RyaW5nICYmIFtyZXN1bHQgaXNF
cXVhbFRvT2JqZWN0OkAiSGVsbG8sIFdvcmxkISJdKTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKLSAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2Nd
IGluaXRdOwotICAgICAgICBjaGVja1Jlc3VsdChAIlByb21pc2UgaXMgZXhwb3NlZCIsICFbY29u
dGV4dFtAIlByb21pc2UiXSBpc1VuZGVmaW5lZF0pOwotICAgICAgICBKU1ZhbHVlICpyZXN1bHQg
PSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInR5cGVvZiBQcm9taXNlIl07Ci0gICAgICAgIGNo
ZWNrUmVzdWx0KEAidHlwZW9mIFByb21pc2UgaXMgJ2Z1bmN0aW9uJyIsIHJlc3VsdC5pc1N0cmlu
ZyAmJiBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAImZ1bmN0aW9uIl0pOwotICAgIH0KLQotICAg
IEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lKiB2bSA9IFtbSlNW
aXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdF07Ci0gICAgICAgIEpTQ29udGV4dCogY29udGV4dCA9
IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOnZtXTsKLSAgICAgICAg
W2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJyZXN1bHQgPSAwOyBQcm9taXNlLnJlc29sdmUoNDIp
LnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7IHJlc3VsdCA9IHZhbHVlOyB9KTsiXTsKLSAgICAgICAg
Y2hlY2tSZXN1bHQoQCJNaWNyb3Rhc2sgaXMgZHJhaW5lZCIsIFtjb250ZXh0W0AicmVzdWx0Il0g
IGlzRXF1YWxUb09iamVjdDpANDJdKTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
LSAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSogdm0gPSBbW0pTVmlydHVhbE1hY2hpbmUgYWxsb2Nd
IGluaXRdOwotICAgICAgICBKU0NvbnRleHQqIGNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10g
aW5pdFdpdGhWaXJ0dWFsTWFjaGluZTp2bV07Ci0gICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmpl
Y3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKLSAgICAgICAgY29udGV4dFtAInRlc3RPYmpl
Y3QiXSA9IHRlc3RPYmplY3Q7Ci0gICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAicmVz
dWx0ID0gMDsgY2FsbGJhY2tSZXN1bHQgPSAwOyBQcm9taXNlLnJlc29sdmUoNDIpLnRoZW4oZnVu
Y3Rpb24gKHZhbHVlKSB7IHJlc3VsdCA9IHZhbHVlOyB9KTsgY2FsbGJhY2tSZXN1bHQgPSB0ZXN0
T2JqZWN0LmdldFN0cmluZygpOyJdOwotICAgICAgICBjaGVja1Jlc3VsdChAIk1pY3JvdGFzayBp
cyBkcmFpbmVkIHdpdGggc2FtZSBWTSIsIFtjb250ZXh0W0AicmVzdWx0Il0gIGlzRXF1YWxUb09i
amVjdDpANDJdICYmIFtjb250ZXh0W0AiY2FsbGJhY2tSZXN1bHQiXSBpc0VxdWFsVG9PYmplY3Q6
QCI0MiJdKTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAgICBKU1ZhbHVl
ICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIih7IHg6NDIgfSkiXTsKLSAgICAg
ICAgY2hlY2tSZXN1bHQoQCIoeyB4OjQyIH0pIiwgcmVzdWx0LmlzT2JqZWN0ICYmIFtyZXN1bHRb
QCJ4Il0gaXNFcXVhbFRvT2JqZWN0OkA0Ml0pOwotICAgICAgICBpZCBvYmogPSBbcmVzdWx0IHRv
T2JqZWN0XTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJDaGVjayBkaWN0aW9uYXJ5IGxpdGVyYWwi
LCBbb2JqIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsKLSAgICAgICAgaWQg
bnVtID0gKE5TRGljdGlvbmFyeSAqKW9ialtAIngiXTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJD
aGVjayBudW1lcmljIGxpdGVyYWwiLCBbbnVtIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNz
XV0pOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIEpTVmFsdWUgKnJl
c3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiWyBdIl07Ci0gICAgICAgIGNoZWNrUmVz
dWx0KEAiWyBdIiwgcmVzdWx0LmlzQXJyYXkpOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBv
b2wgewotICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5p
dF07Ci0gICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAi
bmV3IERhdGUiXTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJuZXcgRGF0ZSIsIHJlc3VsdC5pc0Rh
dGUpOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIEpTVmFsdWUgKnN5
bWJvbCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiU3ltYm9sKCdkb3BlJyk7Il07Ci0gICAg
ICAgIEpTVmFsdWUgKm5vdFN5bWJvbCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiJ2RvcGUn
Il07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiU2hvdWxkIGJlIGEgc3ltYm9sIHZhbHVlIiwgc3lt
Ym9sLmlzU3ltYm9sKTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJTaG91bGQgbm90IGJlIGEgc3lt
Ym9sIHZhbHVlIiwgIW5vdFN5bWJvbC5pc1N5bWJvbCk7Ci0gICAgfQotCi0gICAgQGF1dG9yZWxl
YXNlcG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9j
XSBpbml0XTsKLSAgICAgICAgSlNWYWx1ZSAqc3ltYm9sID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3
U3ltYm9sRnJvbURlc2NyaXB0aW9uOkAiZG9wZSIgaW5Db250ZXh0OmNvbnRleHRdOwotICAgICAg
ICBjaGVja1Jlc3VsdChAIlNob3VsZCBiZSBhIGNyZWF0ZWQgZnJvbSBPYmotQyIsIHN5bWJvbC5p
c1N5bWJvbCk7Ci0gICAgfQotCi0vLyBPbGRlciBwbGF0Zm9ybXMgaWZkZWYgdGhlIHR5cGUgb2Yg
c29tZSBzZWxlY3RvcnMgc28gdGhlc2UgdGVzdHMgZG9uJ3Qgd29yay4KLS8vIEZJWE1FOiBSZW1v
dmUgdGhpcyB3aGVuIHdlIHN0b3AgYnVpbGRpbmcgZm9yIG1hY09TIDEwLjE0L2lPUyAxMi4KLSNp
ZiAoZGVmaW5lZChfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEKSAmJiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTUwMCkgfHwgKGRlZmluZWQoX19JUEhPTkVfT1Nf
VkVSU0lPTl9NSU5fUkVRVUlSRUQpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEzMDAwMCkKLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIEpTVmFsdWUgKmFy
cmF5SXRlcmF0b3IgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIkFycmF5LnByb3RvdHlwZVtT
eW1ib2wuaXRlcmF0b3JdIl07Ci0gICAgICAgIEpTVmFsdWUgKml0ZXJhdG9yU3ltYm9sID0gY29u
dGV4dFtAIlN5bWJvbCJdW0AiaXRlcmF0b3IiXTsKLSAgICAgICAgSlNWYWx1ZSAqYXJyYXkgPSBb
SlNWYWx1ZSB2YWx1ZVdpdGhOZXdBcnJheUluQ29udGV4dDpjb250ZXh0XTsKLSAgICAgICAgY2hl
Y2tSZXN1bHQoQCJMb29raW5nIHVwIGJ5IHN1YnNjcmlwdCB3aXRoIHN5bWJvbCBzaG91bGQgd29y
ayIsIFthcnJheVtpdGVyYXRvclN5bWJvbF0gaXNFcXVhbDphcnJheUl0ZXJhdG9yXSk7Ci0gICAg
ICAgIGNoZWNrUmVzdWx0KEAiTG9va2luZyB1cCBieSBtZXRob2Qgd2l0aCBzeW1ib2wgc2hvdWxk
IHdvcmsiLCBbW2FycmF5IHZhbHVlRm9yUHJvcGVydHk6aXRlcmF0b3JTeW1ib2xdIGlzRXF1YWw6
YXJyYXlJdGVyYXRvcl0pOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAg
IEpTVmFsdWUgKml0ZXJhdG9yU3ltYm9sID0gY29udGV4dFtAIlN5bWJvbCJdW0AiaXRlcmF0b3Ii
XTsKLSAgICAgICAgSlNWYWx1ZSAqb2JqZWN0ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0
SW5Db250ZXh0OmNvbnRleHRdOwotICAgICAgICBKU1ZhbHVlICp0aGVBbnN3ZXIgPSBbSlNWYWx1
ZSB2YWx1ZVdpdGhVSW50MzI6NDIgaW5Db250ZXh0OmNvbnRleHRdOwotICAgICAgICBvYmplY3Rb
aXRlcmF0b3JTeW1ib2xdID0gdGhlQW5zd2VyOwotICAgICAgICBjaGVja1Jlc3VsdChAIlNldHRp
bmcgYnkgc3Vic2NyaXB0IHdpdGggc3ltYm9sIHNob3VsZCB3b3JrIiwgW29iamVjdFtpdGVyYXRv
clN5bWJvbF0gaXNFcXVhbDp0aGVBbnN3ZXJdKTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKLSAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGlu
aXRdOwotICAgICAgICBKU1ZhbHVlICppdGVyYXRvclN5bWJvbCA9IGNvbnRleHRbQCJTeW1ib2wi
XVtAIml0ZXJhdG9yIl07Ci0gICAgICAgIEpTVmFsdWUgKm9iamVjdCA9IFtKU1ZhbHVlIHZhbHVl
V2l0aE5ld09iamVjdEluQ29udGV4dDpjb250ZXh0XTsKLSAgICAgICAgSlNWYWx1ZSAqdGhlQW5z
d2VyID0gW0pTVmFsdWUgdmFsdWVXaXRoVUludDMyOjQyIGluQ29udGV4dDpjb250ZXh0XTsKLSAg
ICAgICAgW29iamVjdCBzZXRWYWx1ZTp0aGVBbnN3ZXIgZm9yUHJvcGVydHk6aXRlcmF0b3JTeW1i
b2xdOwotICAgICAgICBjaGVja1Jlc3VsdChAIlNldHRpbmcgYnkgbWV0aG9kIHdpdGggc3ltYm9s
IHNob3VsZCB3b3JrIiwgW29iamVjdFtpdGVyYXRvclN5bWJvbF0gaXNFcXVhbDp0aGVBbnN3ZXJd
KTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAgICBKU1ZhbHVlICppdGVy
YXRvclN5bWJvbCA9IGNvbnRleHRbQCJTeW1ib2wiXVtAIml0ZXJhdG9yIl07Ci0gICAgICAgIEpT
VmFsdWUgKm9iamVjdCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpjb250
ZXh0XTsKLSAgICAgICAgSlNWYWx1ZSAqdGhlQW5zd2VyID0gW0pTVmFsdWUgdmFsdWVXaXRoVUlu
dDMyOjQyIGluQ29udGV4dDpjb250ZXh0XTsKLSAgICAgICAgb2JqZWN0W2l0ZXJhdG9yU3ltYm9s
XSA9IHRoZUFuc3dlcjsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJoYXMgcHJvcGVydHkgd2l0aCBz
eW1ib2wgc2hvdWxkIHdvcmsiLCBbb2JqZWN0IGhhc1Byb3BlcnR5Oml0ZXJhdG9yU3ltYm9sXSk7
Ci0gICAgfQotCi0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKLSAgICAgICAgSlNWYWx1ZSAqaXRlcmF0
b3JTeW1ib2wgPSBjb250ZXh0W0AiU3ltYm9sIl1bQCJpdGVyYXRvciJdOwotICAgICAgICBKU1Zh
bHVlICpvYmplY3QgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6Y29udGV4
dF07Ci0gICAgICAgIEpTVmFsdWUgKnRoZUFuc3dlciA9IFtKU1ZhbHVlIHZhbHVlV2l0aFVJbnQz
Mjo0MiBpbkNvbnRleHQ6Y29udGV4dF07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiZGVsZXRlIHBy
b3BlcnR5IHdpdGggc3ltYm9sIHNob3VsZCB3b3JrIHdpdGhvdXQgcHJvcGVydHkiLCBbb2JqZWN0
IGRlbGV0ZVByb3BlcnR5Oml0ZXJhdG9yU3ltYm9sXSk7Ci0gICAgICAgIG9iamVjdFtpdGVyYXRv
clN5bWJvbF0gPSB0aGVBbnN3ZXI7Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiZGVsZXRlIHByb3Bl
cnR5IHdpdGggc3ltYm9sIHNob3VsZCB3b3JrIHdpdGggcHJvcGVydHkiLCBbb2JqZWN0IGRlbGV0
ZVByb3BlcnR5Oml0ZXJhdG9yU3ltYm9sXSk7Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiZGVsZXRl
IHNob3VsZCBiZSBmYWxzZSB3aXRoIG5vbi1jb25maWd1cmFibGUgcHJvcGVydHkiLCAhW2NvbnRl
eHRbQCJBcnJheSJdIGRlbGV0ZVByb3BlcnR5OkAicHJvdG90eXBlIl0pOwotICAgIH0KLQotICAg
IEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29u
dGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIEpTVmFsdWUgKm9iamVjdCA9IFtKU1ZhbHVlIHZh
bHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpjb250ZXh0XTsKLSAgICAgICAgTlNPYmplY3QgKm9i
akNPYmplY3QgPSBbW05TT2JqZWN0IGFsbG9jXSBpbml0XTsKLSAgICAgICAgSlNWYWx1ZSAqcmVz
dWx0ID0gb2JqZWN0W29iakNPYmplY3RdOwotICAgICAgICBjaGVja1Jlc3VsdChAImdldHRpbmcg
YSBub24tY29udmVydGFibGUgb2JqZWN0IHNob3VsZCByZXR1cm4gdW5kZWZpbmVkIiwgW3Jlc3Vs
dCBpc1VuZGVmaW5lZF0pOwotICAgICAgICBvYmplY3Rbb2JqQ09iamVjdF0gPSBAKDEpOwotICAg
ICAgICByZXN1bHQgPSBvYmplY3Rbb2JqQ09iamVjdF07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAi
Z2V0dGluZyBhIG5vbi1jb252ZXJ0YWJsZSBvYmplY3Qgc2hvdWxkIHJldHVybiB0aGUgc3RvcmVk
IHZhbHVlIiwgW3Jlc3VsdCB0b1VJbnQzMl0gPT0gMSk7Ci0gICAgfQotCi0gICAgQGF1dG9yZWxl
YXNlcG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9j
XSBpbml0XTsKLSAgICAgICAgSlNWYWx1ZSAqb2JqZWN0ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3
T2JqZWN0SW5Db250ZXh0OmNvbnRleHRdOwotICAgICAgICBKU1ZhbHVlICppdGVyYXRvclN5bWJv
bCA9IGNvbnRleHRbQCJTeW1ib2wiXVtAIml0ZXJhdG9yIl07Ci0gICAgICAgIG9iamVjdFtAInZh
bHVlIl0gPSBAKDEpOwotICAgICAgICBjb250ZXh0W0Aib2JqZWN0Il0gPSBvYmplY3Q7Ci0KLSAg
ICAgICAgb2JqZWN0W2l0ZXJhdG9yU3ltYm9sXSA9IF57Ci0gICAgICAgICAgICBKU1ZhbHVlICpy
ZXN1bHQgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6Y29udGV4dF07Ci0g
ICAgICAgICAgICByZXN1bHRbQCJvYmplY3QiXSA9IFtKU0NvbnRleHQgY3VycmVudFRoaXNdOwot
ICAgICAgICAgICAgcmVzdWx0W0AibmV4dCJdID0gXnsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
ICpyZXN1bHQgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6Y29udGV4dF07
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSAqdmFsdWUgPSBbSlNDb250ZXh0IGN1cnJlbnRUaGlz
XVtAIm9iamVjdCJdW0AidmFsdWUiXTsKLSAgICAgICAgICAgICAgICBbW0pTQ29udGV4dCBjdXJy
ZW50VGhpc11bQCJvYmplY3QiXSBkZWxldGVQcm9wZXJ0eTpAInZhbHVlIl07Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0W0AidmFsdWUiXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgIHJlc3VsdFtA
ImRvbmUiXSA9IFtKU1ZhbHVlIHZhbHVlV2l0aEJvb2w6W3ZhbHVlIGlzVW5kZWZpbmVkXSBpbkNv
bnRleHQ6Y29udGV4dF07Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
ICAgIH07Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9OwotCi0KLSAgICAg
ICAgSlNWYWx1ZSAqY291bnQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImxldCBjb3VudCA9
IDA7IGZvciAobGV0IHYgb2Ygb2JqZWN0KSB7IGlmICh2ICE9PSAxKSB0aHJvdyBuZXcgRXJyb3Io
KTsgY291bnQrKzsgfSBjb3VudDsiXTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJpdGVyYXRvciBz
aG91bGQgbm90IHRocm93IiwgIVtjb250ZXh0IGV4Y2VwdGlvbl0pOwotICAgICAgICBjaGVja1Jl
c3VsdChAIml0ZXJhdGlvbiBjb3VudCBzaG91bGQgYmUgMSIsIFtjb3VudCB0b1VJbnQzMl0gPT0g
MSk7Ci0gICAgfQotCi0jZW5kaWYKLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBK
U0NvbGxlY3Rpb24qIG15UHJpdmF0ZVByb3BlcnRpZXMgPSBbW0pTQ29sbGVjdGlvbiBhbGxvY10g
aW5pdF07Ci0KLSAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgICAgICBKU0NvbnRl
eHQqIGNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgICAgICBUZXN0
T2JqZWN0KiByb290T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07Ci0gICAgICAgICAg
ICBjb250ZXh0W0Aicm9vdCJdID0gcm9vdE9iamVjdDsKLSAgICAgICAgICAgIFtjb250ZXh0LnZp
cnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6bXlQcml2YXRlUHJvcGVydGllcyB3aXRo
T3duZXI6cm9vdE9iamVjdF07Ci0gICAgICAgICAgICBbbXlQcml2YXRlUHJvcGVydGllcyBzZXRW
YWx1ZTpbSlNWYWx1ZSB2YWx1ZVdpdGhCb29sOnRydWUgaW5Db250ZXh0OmNvbnRleHRdIGZvcktl
eTpAImlzX2hhbSJdOwotICAgICAgICAgICAgW215UHJpdmF0ZVByb3BlcnRpZXMgc2V0VmFsdWU6
W0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OkAiaGVsbG8hIiBpbkNvbnRleHQ6Y29udGV4dF0gZm9y
S2V5OkAibWVzc2FnZSJdOwotICAgICAgICAgICAgW215UHJpdmF0ZVByb3BlcnRpZXMgc2V0VmFs
dWU6W0pTVmFsdWUgdmFsdWVXaXRoSW50MzI6NDIgaW5Db250ZXh0OmNvbnRleHRdIGZvcktleTpA
Im15X251bWJlciJdOwotICAgICAgICAgICAgW215UHJpdmF0ZVByb3BlcnRpZXMgc2V0VmFsdWU6
W0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250ZXh0XSBmb3JLZXk6QCJkZWZpbml0
ZWx5X251bGwiXTsKLSAgICAgICAgICAgIFtteVByaXZhdGVQcm9wZXJ0aWVzIHNldFZhbHVlOltK
U1ZhbHVlIHZhbHVlV2l0aFVuZGVmaW5lZEluQ29udGV4dDpjb250ZXh0XSBmb3JLZXk6QCJub3Rf
c3VyZV9pZl91bmRlZmluZWQiXTsKLQotICAgICAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VD
b2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOwotCi0gICAg
ICAgICAgICBKU1ZhbHVlICppc0hhbSA9IFtteVByaXZhdGVQcm9wZXJ0aWVzIHZhbHVlRm9yS2V5
OkAiaXNfaGFtIl07Ci0gICAgICAgICAgICBKU1ZhbHVlICptZXNzYWdlID0gW215UHJpdmF0ZVBy
b3BlcnRpZXMgdmFsdWVGb3JLZXk6QCJtZXNzYWdlIl07Ci0gICAgICAgICAgICBKU1ZhbHVlICpt
eU51bWJlciA9IFtteVByaXZhdGVQcm9wZXJ0aWVzIHZhbHVlRm9yS2V5OkAibXlfbnVtYmVyIl07
Ci0gICAgICAgICAgICBKU1ZhbHVlICpkZWZpbml0ZWx5TnVsbCA9IFtteVByaXZhdGVQcm9wZXJ0
aWVzIHZhbHVlRm9yS2V5OkAiZGVmaW5pdGVseV9udWxsIl07Ci0gICAgICAgICAgICBKU1ZhbHVl
ICpub3RTdXJlSWZVbmRlZmluZWQgPSBbbXlQcml2YXRlUHJvcGVydGllcyB2YWx1ZUZvcktleTpA
Im5vdF9zdXJlX2lmX3VuZGVmaW5lZCJdOwotICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJpc19o
YW0gaXMgdHJ1ZSIsIGlzSGFtLmlzQm9vbGVhbiAmJiBbaXNIYW0gdG9Cb29sXSk7Ci0gICAgICAg
ICAgICBjaGVja1Jlc3VsdChAIm1lc3NhZ2UgaXMgaGVsbG8hIiwgbWVzc2FnZS5pc1N0cmluZyAm
JiBbQCJoZWxsbyEiIGlzRXF1YWxUb1N0cmluZzpbbWVzc2FnZSB0b1N0cmluZ11dKTsKLSAgICAg
ICAgICAgIGNoZWNrUmVzdWx0KEAibXlfbnVtYmVyIGlzIDQyIiwgbXlOdW1iZXIuaXNOdW1iZXIg
JiYgW215TnVtYmVyIHRvSW50MzJdID09IDQyKTsKLSAgICAgICAgICAgIGNoZWNrUmVzdWx0KEAi
ZGVmaW5pdGVseV9udWxsIGlzIG51bGwiLCBkZWZpbml0ZWx5TnVsbC5pc051bGwpOwotICAgICAg
ICAgICAgY2hlY2tSZXN1bHQoQCJub3Rfc3VyZV9pZl91bmRlZmluZWQgaXMgdW5kZWZpbmVkIiwg
bm90U3VyZUlmVW5kZWZpbmVkLmlzVW5kZWZpbmVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNo
ZWNrUmVzdWx0KEAiaXNfaGFtIGlzIG5pbCIsICFbbXlQcml2YXRlUHJvcGVydGllcyB2YWx1ZUZv
cktleTpAImlzX2hhbSJdKTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJtZXNzYWdlIGlzIG5pbCIs
ICFbbXlQcml2YXRlUHJvcGVydGllcyB2YWx1ZUZvcktleTpAIm1lc3NhZ2UiXSk7Ci0gICAgICAg
IGNoZWNrUmVzdWx0KEAibXlfbnVtYmVyIGlzIDQyIiwgIVtteVByaXZhdGVQcm9wZXJ0aWVzIHZh
bHVlRm9yS2V5OkAibXlfbnVtYmVyIl0pOwotICAgICAgICBjaGVja1Jlc3VsdChAImRlZmluaXRl
bHlfbnVsbCBpcyBudWxsIiwgIVtteVByaXZhdGVQcm9wZXJ0aWVzIHZhbHVlRm9yS2V5OkAiZGVm
aW5pdGVseV9udWxsIl0pOwotICAgICAgICBjaGVja1Jlc3VsdChAIm5vdF9zdXJlX2lmX3VuZGVm
aW5lZCBpcyB1bmRlZmluZWQiLCAhW215UHJpdmF0ZVByb3BlcnRpZXMgdmFsdWVGb3JLZXk6QCJu
b3Rfc3VyZV9pZl91bmRlZmluZWQiXSk7Ci0gICAgfQotCi0gICAgQGF1dG9yZWxlYXNlcG9vbCB7
Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsK
LSAgICAgICAgSlNWYWx1ZSAqbWVzc2FnZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpAImhl
bGxvIiBpbkNvbnRleHQ6Y29udGV4dF07Ci0gICAgICAgIFRlc3RPYmplY3QgKnJvb3RPYmplY3Qg
PSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKLSAgICAgICAgSlNDb2xsZWN0aW9uICpjb2xsZWN0
aW9uID0gW1tKU0NvbGxlY3Rpb24gYWxsb2NdIGluaXRdOwotICAgICAgICBjb250ZXh0W0Aicm9v
dCJdID0gcm9vdE9iamVjdDsKLSAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlICpqc0NvbGxlY3Rpb24gPSBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6Y29sbGVj
dGlvbiBpbkNvbnRleHQ6Y29udGV4dF07Ci0gICAgICAgICAgICBKU01hbmFnZWRWYWx1ZSAqd2Vh
a0NvbGxlY3Rpb24gPSBbSlNNYW5hZ2VkVmFsdWUgbWFuYWdlZFZhbHVlV2l0aFZhbHVlOmpzQ29s
bGVjdGlvbiBhbmRPd25lcjpyb290T2JqZWN0XTsKLSAgICAgICAgICAgIFtjb250ZXh0LnZpcnR1
YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6d2Vha0NvbGxlY3Rpb24gd2l0aE93bmVyOm1l
c3NhZ2VdOwotICAgICAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdn
aW5nKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlND
b250ZXh0IGFsbG9jXSBpbml0XTsKLSAgICAgICAgX19ibG9jayBpbnQgcmVzdWx0OwotICAgICAg
ICBjb250ZXh0W0AiYmxvY2tDYWxsYmFjayJdID0gXihpbnQgdmFsdWUpewotICAgICAgICAgICAg
cmVzdWx0ID0gdmFsdWU7Ci0gICAgICAgIH07Ci0gICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2Ny
aXB0OkAiYmxvY2tDYWxsYmFjayg0MikiXTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJibG9ja0Nh
bGxiYWNrIiwgcmVzdWx0ID09IDQyKTsKLSAgICB9Ci0KLSAgICBpZiAoYmxvY2tTaWduYXR1cmVD
b250YWluc0NsYXNzKCkpIHsKLSAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAg
ICAgICBfX2Jsb2NrIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICBjb250ZXh0W0Ai
YmxvY2tDYWxsYmFjayJdID0gXihOU1N0cmluZyAqdmFsdWUpewotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IFtAIjQyIiBpc0VxdWFsVG9TdHJpbmc6dmFsdWVdID09IFlFUzsKLSAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImJsb2NrQ2FsbGJhY2so
NDIpIl07Ci0gICAgICAgICAgICBjaGVja1Jlc3VsdChAImJsb2NrQ2FsbGJhY2soTlNTdHJpbmcg
KikiLCByZXN1bHQpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIE5TTG9nKEAiU2tp
cHBpbmcgJ2Jsb2NrQ2FsbGJhY2soTlNTdHJpbmcgKiknIHRlc3QgY2FzZSIpOwotCi0gICAgQGF1
dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0
IGFsbG9jXSBpbml0XTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCIhY29udGV4dC5leGNlcHRpb24i
LCAhY29udGV4dC5leGNlcHRpb24pOwotICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpA
IiFAIyQlXiYqKCkgVEhJUyBJUyBOT1QgVkFMSUQgSkFWQVNDUklQVCBTWU5UQVggIUAjJCVeJioo
KSJdOwotICAgICAgICBjaGVja1Jlc3VsdChAImNvbnRleHQuZXhjZXB0aW9uIiwgY29udGV4dC5l
eGNlcHRpb24pOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0Nv
bnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIF9fYmxv
Y2sgYm9vbCBjYXVnaHQgPSBmYWxzZTsKLSAgICAgICAgY29udGV4dC5leGNlcHRpb25IYW5kbGVy
ID0gXihKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWUgKmV4Y2VwdGlvbikgewotICAgICAgICAg
ICAgKHZvaWQpY29udGV4dDsKLSAgICAgICAgICAgICh2b2lkKWV4Y2VwdGlvbjsKLSAgICAgICAg
ICAgIGNhdWdodCA9IHRydWU7Ci0gICAgICAgIH07Ci0gICAgICAgIFtjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAiIUAjJCVeJiooKSBUSElTIElTIE5PVCBWQUxJRCBKQVZBU0NSSVBUIFNZTlRBWCAh
QCMkJV4mKigpIl07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiSlNDb250ZXh0LmV4Y2VwdGlvbkhh
bmRsZXIiLCBjYXVnaHQpOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAg
IF9fYmxvY2sgaW50IGV4cGVjdGVkRXhjZXB0aW9uTGluZU51bWJlciA9IDE7Ci0gICAgICAgIF9f
YmxvY2sgYm9vbCBzYXdFeHBlY3RlZEV4Y2VwdGlvbkxpbmVOdW1iZXIgPSBmYWxzZTsKLSAgICAg
ICAgY29udGV4dC5leGNlcHRpb25IYW5kbGVyID0gXihKU0NvbnRleHQgKiwgSlNWYWx1ZSAqZXhj
ZXB0aW9uKSB7Ci0gICAgICAgICAgICBzYXdFeHBlY3RlZEV4Y2VwdGlvbkxpbmVOdW1iZXIgPSBb
ZXhjZXB0aW9uW0AibGluZSJdIHRvSW50MzJdID09IGV4cGVjdGVkRXhjZXB0aW9uTGluZU51bWJl
cjsKLSAgICAgICAgfTsKLSAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIhQCMkJV4m
KigpIFRISVMgSVMgTk9UIFZBTElEIEpBVkFTQ1JJUFQgU1lOVEFYICFAIyQlXiYqKCkiXTsKLSAg
ICAgICAgY2hlY2tSZXN1bHQoQCJldmFsdXRlU2NyaXB0IGV4Y2VwdGlvbiBvbiBsaW5lIDEiLCBz
YXdFeHBlY3RlZEV4Y2VwdGlvbkxpbmVOdW1iZXIpOwotCi0gICAgICAgIGV4cGVjdGVkRXhjZXB0
aW9uTGluZU51bWJlciA9IDI7Ci0gICAgICAgIHNhd0V4cGVjdGVkRXhjZXB0aW9uTGluZU51bWJl
ciA9IGZhbHNlOwotICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIi8vIExpbmUgMVxu
IUAjJCVeJiooKSBUSElTIElTIE5PVCBWQUxJRCBKQVZBU0NSSVBUIFNZTlRBWCAhQCMkJV4mKigp
Il07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiZXZhbHV0ZVNjcmlwdCBleGNlcHRpb24gb24gbGlu
ZSAyIiwgc2F3RXhwZWN0ZWRFeGNlcHRpb25MaW5lTnVtYmVyKTsKLSAgICB9Ci0KLSAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQg
YWxsb2NdIGluaXRdOwotICAgICAgICBfX2Jsb2NrIGJvb2wgZW1wdHlFeGNlcHRpb25Tb3VyY2VV
UkwgPSBmYWxzZTsKLSAgICAgICAgY29udGV4dC5leGNlcHRpb25IYW5kbGVyID0gXihKU0NvbnRl
eHQgKiwgSlNWYWx1ZSAqZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICBlbXB0eUV4Y2VwdGlvblNv
dXJjZVVSTCA9IGV4Y2VwdGlvbltAInNvdXJjZVVSTCJdLmlzVW5kZWZpbmVkOwotICAgICAgICB9
OwotICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIiFAIyQlXiYqKCkgVEhJUyBJUyBO
T1QgVkFMSUQgSkFWQVNDUklQVCBTWU5UQVggIUAjJCVeJiooKSJdOwotICAgICAgICBjaGVja1Jl
c3VsdChAImV2YWx1dGVTY3JpcHQ6IGV4Y2VwdGlvbiBoYXMgbm8gc291cmNlVVJMIiwgZW1wdHlF
eGNlcHRpb25Tb3VyY2VVUkwpOwotCi0gICAgICAgIF9fYmxvY2sgTlNTdHJpbmcgKmV4Y2VwdGlv
blNvdXJjZVVSTCA9IG5pbDsKLSAgICAgICAgY29udGV4dC5leGNlcHRpb25IYW5kbGVyID0gXihK
U0NvbnRleHQgKiwgSlNWYWx1ZSAqZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25T
b3VyY2VVUkwgPSBbZXhjZXB0aW9uW0Aic291cmNlVVJMIl0gdG9TdHJpbmddOwotICAgICAgICB9
OwotICAgICAgICBOU1VSTCAqdXJsID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi9mb28vYmFy
LmpzIiBpc0RpcmVjdG9yeTpOT107Ci0gICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAi
IUAjJCVeJiooKSBUSElTIElTIE5PVCBWQUxJRCBKQVZBU0NSSVBUIFNZTlRBWCAhQCMkJV4mKigp
IiB3aXRoU291cmNlVVJMOnVybF07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiZXZhbHVhdGVTY3Jp
cHQ6d2l0aFNvdXJjZVVSTDogZXhjZXB0aW9uIGhhcyBleHBlY3RlZCBzb3VyY2VVUkwiLCBbZXhj
ZXB0aW9uU291cmNlVVJMIGlzRXF1YWxUb1N0cmluZzpbdXJsIGFic29sdXRlU3RyaW5nXV0pOwot
ICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIGNvbnRleHRbQCJjYWxsYmFj
ayJdID0gXnsKLSAgICAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY3Vy
cmVudENvbnRleHRdOwotICAgICAgICAgICAgY29udGV4dC5leGNlcHRpb24gPSBbSlNWYWx1ZSB2
YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiU29tZXRoaW5nIHdlbnQgd3JvbmcuIiBpbkNv
bnRleHQ6Y29udGV4dF07Ci0gICAgICAgIH07Ci0gICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtj
b250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidmFyIHJlc3VsdDsgdHJ5IHsgY2FsbGJhY2soKTsgfSBj
YXRjaCAoZSkgeyByZXN1bHQgPSAnQ2F1Z2h0IGV4Y2VwdGlvbic7IH0iXTsKLSAgICAgICAgY2hl
Y2tSZXN1bHQoQCJFeHBsaWNpdCB0aHJvdyBpbiBjYWxsYmFjayAtIHdhcyBjYXVnaHQgYnkgSmF2
YVNjcmlwdCIsIFtyZXN1bHQgaXNFcXVhbFRvT2JqZWN0OkAiQ2F1Z2h0IGV4Y2VwdGlvbiJdKTsK
LSAgICAgICAgY2hlY2tSZXN1bHQoQCJFeHBsaWNpdCB0aHJvdyBpbiBjYWxsYmFjayAtIG5vdCB0
aHJvd24gdG8gT2JqZWN0aXZlLUMiLCAhY29udGV4dC5leGNlcHRpb24pOwotICAgIH0KLQotICAg
IEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29u
dGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIGNvbnRleHRbQCJjYWxsYmFjayJdID0gXnsKLSAg
ICAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY3VycmVudENvbnRleHRd
OwotICAgICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIhQCMkJV4mKigpIFRISVMg
SVMgTk9UIFZBTElEIEpBVkFTQ1JJUFQgU1lOVEFYICFAIyQlXiYqKCkiXTsKLSAgICAgICAgfTsK
LSAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ2YXIg
cmVzdWx0OyB0cnkgeyBjYWxsYmFjaygpOyB9IGNhdGNoIChlKSB7IHJlc3VsdCA9ICdDYXVnaHQg
ZXhjZXB0aW9uJzsgfSJdOwotICAgICAgICBjaGVja1Jlc3VsdChAIkltcGxpY2l0IHRocm93IGlu
IGNhbGxiYWNrIC0gd2FzIGNhdWdodCBieSBKYXZhU2NyaXB0IiwgW3Jlc3VsdCBpc0VxdWFsVG9P
YmplY3Q6QCJDYXVnaHQgZXhjZXB0aW9uIl0pOwotICAgICAgICBjaGVja1Jlc3VsdChAIkltcGxp
Y2l0IHRocm93IGluIGNhbGxiYWNrIC0gbm90IHRocm93biB0byBPYmplY3RpdmUtQyIsICFjb250
ZXh0LmV4Y2VwdGlvbik7Ci0gICAgfQotCi0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAg
IEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKLSAgICAgICAg
W2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6Ci0gICAgICAgICAgICBAImZ1bmN0aW9uIHN1bShhcnJh
eSkgeyBcCi0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDA7IFwKLSAgICAgICAgICAgICAg
ICBmb3IgKHZhciBpIGluIGFycmF5KSBcCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBh
cnJheVtpXTsgXAotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7IFwKLSAgICAgICAgICAg
IH0iXTsKLSAgICAgICAgSlNWYWx1ZSAqYXJyYXkgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6
QFtAMTMsIEAyLCBAN10gaW5Db250ZXh0OmNvbnRleHRdOwotICAgICAgICBKU1ZhbHVlICpzdW1G
dW5jdGlvbiA9IGNvbnRleHRbQCJzdW0iXTsKLSAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW3N1
bUZ1bmN0aW9uIGNhbGxXaXRoQXJndW1lbnRzOkBbIGFycmF5IF1dOwotICAgICAgICBjaGVja1Jl
c3VsdChAInN1bShbMTMsIDIsIDddKSIsIFtyZXN1bHQgdG9JbnQzMl0gPT0gMjIpOwotICAgIH0K
LQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
W0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIEpTVmFsdWUgKm11bEFkZEZ1bmN0aW9u
ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6Ci0gICAgICAgICAgICBAIihmdW5jdGlvbihhcnJh
eSwgb2JqZWN0KSB7IFwKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107IFwKLSAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpIGluIGFycmF5KSBcCi0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5wdXNoKGFycmF5W2ldICogb2JqZWN0LnggKyBvYmplY3QueSk7IFwKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OyBcCi0gICAgICAgICAgICB9KSJdOwotICAgICAgICBKU1ZhbHVl
ICpyZXN1bHQgPSBbbXVsQWRkRnVuY3Rpb24gY2FsbFdpdGhBcmd1bWVudHM6QFsgQFsgQDIsIEA0
LCBAOCBdLCBAeyBAIngiOkAwLjUsIEAieSI6QDQyIH0gXV07Ci0gICAgICAgIGNoZWNrUmVzdWx0
KEAibXVsQWRkRnVuY3Rpb24iLCByZXN1bHQuaXNPYmplY3QgJiYgW1tyZXN1bHQgdG9TdHJpbmdd
IGlzRXF1YWw6QCI0Myw0NCw0NiJdKTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
LSAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOyAg
ICAgICAgCi0gICAgICAgIEpTVmFsdWUgKmFycmF5ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3QXJy
YXlJbkNvbnRleHQ6Y29udGV4dF07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiYXJyYXlMZW5ndGhF
bXB0eSIsIFtbYXJyYXlbQCJsZW5ndGgiXSB0b051bWJlcl0gdW5zaWduZWRJbnRlZ2VyVmFsdWVd
ID09IDApOwotICAgICAgICBKU1ZhbHVlICp2YWx1ZTEgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhJbnQz
Mjo0MiBpbkNvbnRleHQ6Y29udGV4dF07Ci0gICAgICAgIEpTVmFsdWUgKnZhbHVlMiA9IFtKU1Zh
bHVlIHZhbHVlV2l0aEludDMyOjI0IGluQ29udGV4dDpjb250ZXh0XTsKLSAgICAgICAgTlNVSW50
ZWdlciBsb3dJbmRleCA9IDU7Ci0gICAgICAgIE5TVUludGVnZXIgbWF4TGVuZ3RoID0gVUlOVF9N
QVg7Ci0KLSAgICAgICAgW2FycmF5IHNldFZhbHVlOnZhbHVlMSBhdEluZGV4Omxvd0luZGV4XTsK
LSAgICAgICAgY2hlY2tSZXN1bHQoQCJhcnJheS5sZW5ndGggYWZ0ZXIgcHV0IHRvIGxvdyBpbmRl
eCIsIFtbYXJyYXlbQCJsZW5ndGgiXSB0b051bWJlcl0gdW5zaWduZWRJbnRlZ2VyVmFsdWVdID09
IChsb3dJbmRleCArIDEpKTsKLQotICAgICAgICBbYXJyYXkgc2V0VmFsdWU6dmFsdWUxIGF0SW5k
ZXg6KG1heExlbmd0aCAtIDEpXTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJhcnJheS5sZW5ndGgg
YWZ0ZXIgcHV0IHRvIG1heExlbmd0aCAtIDEiLCBbW2FycmF5W0AibGVuZ3RoIl0gdG9OdW1iZXJd
IHVuc2lnbmVkSW50ZWdlclZhbHVlXSA9PSBtYXhMZW5ndGgpOwotCi0gICAgICAgIFthcnJheSBz
ZXRWYWx1ZTp2YWx1ZTIgYXRJbmRleDptYXhMZW5ndGhdOwotICAgICAgICBjaGVja1Jlc3VsdChA
ImFycmF5Lmxlbmd0aCBhZnRlciBwdXQgdG8gbWF4TGVuZ3RoIiwgW1thcnJheVtAImxlbmd0aCJd
IHRvTnVtYmVyXSB1bnNpZ25lZEludGVnZXJWYWx1ZV0gPT0gbWF4TGVuZ3RoKTsKLQotICAgICAg
ICBbYXJyYXkgc2V0VmFsdWU6dmFsdWUyIGF0SW5kZXg6KG1heExlbmd0aCArIDEpXTsKLSAgICAg
ICAgY2hlY2tSZXN1bHQoQCJhcnJheS5sZW5ndGggYWZ0ZXIgcHV0IHRvIG1heExlbmd0aCArIDEi
LCBbW2FycmF5W0AibGVuZ3RoIl0gdG9OdW1iZXJdIHVuc2lnbmVkSW50ZWdlclZhbHVlXSA9PSBt
YXhMZW5ndGgpOwotCi0gICAgICAgIGlmIChzaXplb2YoTlNVSW50ZWdlcikgPT0gOCkKLSAgICAg
ICAgICAgIGNoZWNrUmVzdWx0KEAidmFsdWVBdEluZGV4OjAgaXMgdW5kZWZpbmVkIiwgW2FycmF5
IHZhbHVlQXRJbmRleDowXS5pc1VuZGVmaW5lZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGNoZWNrUmVzdWx0KEAidmFsdWVBdEluZGV4OjAiLCBbW2FycmF5IHZhbHVlQXRJbmRleDowXSB0
b0ludDMyXSA9PSAyNCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAidmFsdWVBdEluZGV4Omxvd0lu
ZGV4IiwgW1thcnJheSB2YWx1ZUF0SW5kZXg6bG93SW5kZXhdIHRvSW50MzJdID09IDQyKTsKLSAg
ICAgICAgY2hlY2tSZXN1bHQoQCJ2YWx1ZUF0SW5kZXg6bWF4TGVuZ3RoIC0gMSIsIFtbYXJyYXkg
dmFsdWVBdEluZGV4OihtYXhMZW5ndGggLSAxKV0gdG9JbnQzMl0gPT0gNDIpOwotICAgICAgICBj
aGVja1Jlc3VsdChAInZhbHVlQXRJbmRleDptYXhMZW5ndGgiLCBbW2FycmF5IHZhbHVlQXRJbmRl
eDptYXhMZW5ndGhdIHRvSW50MzJdID09IDI0KTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJ2YWx1
ZUF0SW5kZXg6bWF4TGVuZ3RoICsgMSIsIFtbYXJyYXkgdmFsdWVBdEluZGV4OihtYXhMZW5ndGgg
KyAxKV0gdG9JbnQzMl0gPT0gMjQpOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewot
ICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0g
ICAgICAgIEpTVmFsdWUgKm9iamVjdCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29u
dGV4dDpjb250ZXh0XTsKLQotICAgICAgICBvYmplY3RbQCJwb2ludCJdID0gQHsgQCJ4IjpAMSwg
QCJ5IjpAMiB9OwotICAgICAgICBvYmplY3RbQCJwb2ludCJdW0AieCJdID0gQDM7Ci0gICAgICAg
IENHUG9pbnQgcG9pbnQgPSBbb2JqZWN0W0AicG9pbnQiXSB0b1BvaW50XTsKLSAgICAgICAgY2hl
Y2tSZXN1bHQoQCJ0b1BvaW50IiwgcG9pbnQueCA9PSAzICYmIHBvaW50LnkgPT0gMik7Ci0KLSAg
ICAgICAgb2JqZWN0W0B7IEAidG9TdHJpbmciOl57IHJldHVybiBAImZvbyI7IH0gfV0gPSBAImJh
ciI7Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAidG9TdHJpbmcgaW4gb2JqZWN0IGxpdGVyYWwgdXNl
ZCBhcyBzdWJzY3JpcHQiLCBbW29iamVjdFtAImZvbyJdIHRvU3RyaW5nXSBpc0VxdWFsOkAiYmFy
Il0pOwotCi0gICAgICAgIG9iamVjdFtbQCJmb29iYXIiIHN1YnN0cmluZ1RvSW5kZXg6M11dID0g
QCJiYXIiOwotICAgICAgICBjaGVja1Jlc3VsdChAInN1YnN0cmluZyB1c2VkIGFzIHN1YnNjcmlw
dCIsIFtbb2JqZWN0W0AiZm9vIl0gdG9TdHJpbmddIGlzRXF1YWw6QCJiYXIiXSk7Ci0gICAgfQot
Ci0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtb
SlNDb250ZXh0IGFsbG9jXSBpbml0XTsKLSAgICAgICAgVGV4dFhZWiAqdGVzdFhZWiA9IFtbVGV4
dFhZWiBhbGxvY10gaW5pdF07Ci0gICAgICAgIGNvbnRleHRbQCJ0ZXN0WFlaIl0gPSB0ZXN0WFla
OwotICAgICAgICB0ZXN0WFlaLnggPSAzOwotICAgICAgICB0ZXN0WFlaLnkgPSA0OwotICAgICAg
ICB0ZXN0WFlaLnogPSA1OwotICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RY
WVoueCA9IDEzOyB0ZXN0WFlaLnkgPSAxNDsiXTsKLSAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVT
Y3JpcHQ6QCJ0ZXN0WFlaLnRlc3QoJ3Rlc3QnKSJdOwotICAgICAgICBjaGVja1Jlc3VsdChAIlRl
eHRYWVogLSB0ZXN0WFlaVGVzdGVkIiwgdGVzdFhZWlRlc3RlZCk7Ci0gICAgICAgIEpTVmFsdWUg
KnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdFhZWi54ICsgJywnICsgdGVz
dFhZWi55ICsgJywnICsgdGVzdFhZWi56Il07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiVGV4dFhZ
WiAtIHJlc3VsdCIsIFtyZXN1bHQgaXNFcXVhbFRvT2JqZWN0OkAiMTMsNCx1bmRlZmluZWQiXSk7
Ci0gICAgfQotCi0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKLSAgICAgICAgW2NvbnRleHRbQCJPYmpl
Y3QiXVtAInByb3RvdHlwZSJdIGRlZmluZVByb3BlcnR5OkAiZ2V0dGVyUHJvcGVydHkiIGRlc2Ny
aXB0b3I6QHsKLSAgICAgICAgICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yR2V0S2V5Ol57Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIFtKU0NvbnRleHQgY3VycmVudFRoaXNdW0AieCJdOwotICAgICAg
ICAgICAgfQotICAgICAgICB9XTsKLSAgICAgICAgSlNWYWx1ZSAqb2JqZWN0ID0gW0pTVmFsdWUg
dmFsdWVXaXRoT2JqZWN0OkB7IEAieCI6QDEwMSB9IGluQ29udGV4dDpjb250ZXh0XTsKLSAgICAg
ICAgaW50IHJlc3VsdCA9IFtvYmplY3QgW0AiZ2V0dGVyUHJvcGVydHkiXSB0b0ludDMyXTsKLSAg
ICAgICAgY2hlY2tSZXN1bHQoQCJnZXR0ZXJQcm9wZXJ0eSIsIHJlc3VsdCA9PSAxMDEpOwotICAg
IH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIGNvbnRleHRbQCJjb25jYXRlbmF0
ZSJdID0gXnsKLSAgICAgICAgICAgIE5TQXJyYXkgKmFyZ3VtZW50cyA9IFtKU0NvbnRleHQgY3Vy
cmVudEFyZ3VtZW50c107Ci0gICAgICAgICAgICBpZiAoIVthcmd1bWVudHMgY291bnRdKQotICAg
ICAgICAgICAgICAgIHJldHVybiBAIiI7Ci0gICAgICAgICAgICBOU1N0cmluZyAqbWVzc2FnZSA9
IFthcmd1bWVudHNbMF0gZGVzY3JpcHRpb25dOwotICAgICAgICAgICAgZm9yIChOU1VJbnRlZ2Vy
IGluZGV4ID0gMTsgaW5kZXggPCBbYXJndW1lbnRzIGNvdW50XTsgKytpbmRleCkKLSAgICAgICAg
ICAgICAgICBtZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAlQCIsIG1l
c3NhZ2UsIGFyZ3VtZW50c1tpbmRleF1dOwotICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7Ci0g
ICAgICAgIH07Ci0gICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2Ny
aXB0OkAiY29uY2F0ZW5hdGUoJ0hlbGxvLCcsICdXb3JsZCEnKSJdOwotICAgICAgICBjaGVja1Jl
c3VsdChAImNvbmNhdGVuYXRlIiwgW3Jlc3VsdCBpc0VxdWFsVG9PYmplY3Q6QCJIZWxsbywgV29y
bGQhIl0pOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIGNvbnRleHRb
QCJmb28iXSA9IEBZRVM7Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiQFlFUyBpcyBib29sZWFuIiwg
W2NvbnRleHRbQCJmb28iXSBpc0Jvb2xlYW5dKTsKLSAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0g
W2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0eXBlb2YgZm9vIl07Ci0gICAgICAgIGNoZWNrUmVz
dWx0KEAiQFlFUyBpcyBib29sZWFuIiwgW3Jlc3VsdCBpc0VxdWFsVG9PYmplY3Q6QCJib29sZWFu
Il0pOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIEpTVmFsdWUgKnJl
c3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiU3RyaW5nKGNvbnNvbGUpIl07Ci0gICAg
ICAgIGNoZWNrUmVzdWx0KEAiU3RyaW5nKGNvbnNvbGUpIiwgW3Jlc3VsdCBpc0VxdWFsVG9PYmpl
Y3Q6QCJbb2JqZWN0IGNvbnNvbGVdIl0pOwotICAgICAgICByZXN1bHQgPSBbY29udGV4dCBldmFs
dWF0ZVNjcmlwdDpAInR5cGVvZiBjb25zb2xlLmxvZyJdOwotICAgICAgICBjaGVja1Jlc3VsdChA
InR5cGVvZiBjb25zb2xlLmxvZyIsIFtyZXN1bHQgaXNFcXVhbFRvT2JqZWN0OkAiZnVuY3Rpb24i
XSk7Ci0gICAgfQotCi0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKLSAgICAgICAgVGVzdE9iamVjdCog
dGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOwotICAgICAgICBjb250ZXh0W0Ai
dGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKLSAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2Nv
bnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJTdHJpbmcodGVzdE9iamVjdCkiXTsKLSAgICAgICAgY2hl
Y2tSZXN1bHQoQCJTdHJpbmcodGVzdE9iamVjdCkiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpA
IltvYmplY3QgVGVzdE9iamVjdF0iXSk7Ci0gICAgfQotCi0gICAgQGF1dG9yZWxlYXNlcG9vbCB7
Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsK
LSAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3Rd
OwotICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKLSAgICAgICAg
SlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJTdHJpbmcodGVzdE9i
amVjdC5fX3Byb3RvX18pIl07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiU3RyaW5nKHRlc3RPYmpl
Y3QuX19wcm90b19fKSIsIFtyZXN1bHQgaXNFcXVhbFRvT2JqZWN0OkAiW29iamVjdCBUZXN0T2Jq
ZWN0UHJvdG90eXBlXSJdKTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAg
ICBjb250ZXh0W0AiVGVzdE9iamVjdCJdID0gW1Rlc3RPYmplY3QgY2xhc3NdOwotICAgICAgICBK
U1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIlN0cmluZyhUZXN0T2Jq
ZWN0KSJdOwotICAgICAgICBjaGVja1Jlc3VsdChAIlN0cmluZyhUZXN0T2JqZWN0KSIsIFtyZXN1
bHQgaXNFcXVhbFRvT2JqZWN0OkAiZnVuY3Rpb24gVGVzdE9iamVjdCgpIHtcbiAgICBbbmF0aXZl
IGNvZGVdXG59Il0pOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIEpT
VmFsdWUqIHZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OltUZXN0T2JqZWN0IGNsYXNz
XSBpbkNvbnRleHQ6Y29udGV4dF07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiW3ZhbHVlIHRvT2Jq
ZWN0XSA9PSBbVGVzdE9iamVjdCBjbGFzc10iLCBbdmFsdWUgdG9PYmplY3RdID09IFtUZXN0T2Jq
ZWN0IGNsYXNzXSk7Ci0gICAgfQotCi0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKLSAgICAgICAgY29u
dGV4dFtAIlRlc3RPYmplY3QiXSA9IFtUZXN0T2JqZWN0IGNsYXNzXTsKLSAgICAgICAgSlNWYWx1
ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJUZXN0T2JqZWN0LnBhcmVudFRl
c3QoKSJdOwotICAgICAgICBjaGVja1Jlc3VsdChAIlRlc3RPYmplY3QucGFyZW50VGVzdCgpIiwg
W3Jlc3VsdCBpc0VxdWFsVG9PYmplY3Q6QCJUZXN0T2JqZWN0Il0pOwotICAgIH0KLQotICAgIEBh
dXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4
dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9i
amVjdCB0ZXN0T2JqZWN0XTsKLSAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3RBIl0gPSB0ZXN0
T2JqZWN0OwotICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdEIiXSA9IHRlc3RPYmplY3Q7Ci0g
ICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9i
amVjdEEgPT0gdGVzdE9iamVjdEIiXTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0
QSA9PSB0ZXN0T2JqZWN0QiIsIHJlc3VsdC5pc0Jvb2xlYW4gJiYgW3Jlc3VsdCB0b0Jvb2xdKTsK
LSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNDb250ZXh0ICpjb250
ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAgICBUZXN0T2JqZWN0KiB0ZXN0
T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07Ci0gICAgICAgIGNvbnRleHRbQCJ0ZXN0
T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OwotICAgICAgICB0ZXN0T2JqZWN0LnBvaW50ID0gKENHUG9p
bnQpezMsNH07Ci0gICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2Ny
aXB0OkAidmFyIHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHRlc3RPYmplY3QucG9pbnQpOyB0ZXN0
T2JqZWN0LnBvaW50ID0ge3g6MTIseToxNH07IHJlc3VsdCJdOwotICAgICAgICBjaGVja1Jlc3Vs
dChAInRlc3RPYmplY3QucG9pbnQgLSByZXN1bHQiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpA
IntcInhcIjozLFwieVwiOjR9Il0pOwotICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3Qu
cG9pbnQgLSB7eDoxMix5OjE0fSIsIHRlc3RPYmplY3QucG9pbnQueCA9PSAxMiAmJiB0ZXN0T2Jq
ZWN0LnBvaW50LnkgPT0gMTQpOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAg
ICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAg
ICAgIFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKLSAg
ICAgICAgdGVzdE9iamVjdC5zaXggPSA2OwotICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJd
ID0gdGVzdE9iamVjdDsKLSAgICAgICAgY29udGV4dFtAIm11bCJdID0gXihpbnQgeCwgaW50IHkp
eyByZXR1cm4geCAqIHk7IH07Ci0gICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2
YWx1YXRlU2NyaXB0OkAibXVsKHRlc3RPYmplY3Quc2l4LCA3KSJdOwotICAgICAgICBjaGVja1Jl
c3VsdChAIm11bCh0ZXN0T2JqZWN0LnNpeCwgNykiLCByZXN1bHQuaXNOdW1iZXIgJiYgW3Jlc3Vs
dCB0b0ludDMyXSA9PSA0Mik7Ci0gICAgfQotCi0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAg
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKLSAgICAg
ICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOwotICAg
ICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKLSAgICAgICAgY29udGV4
dFtAInRlc3RPYmplY3QiXVtAInZhcmlhYmxlIl0gPSBANDsKLSAgICAgICAgW2NvbnRleHQgZXZh
bHVhdGVTY3JpcHQ6QCIrK3Rlc3RPYmplY3QudmFyaWFibGUiXTsKLSAgICAgICAgY2hlY2tSZXN1
bHQoQCIrK3Rlc3RPYmplY3QudmFyaWFibGUiLCB0ZXN0T2JqZWN0LnZhcmlhYmxlID09IDUpOwot
ICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIGNvbnRleHRbQCJwb2ludCJd
ID0gQHsgQCJ4IjpANiwgQCJ5IjpANyB9OwotICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29u
dGV4dCBldmFsdWF0ZVNjcmlwdDpAInBvaW50LnggKyAnLCcgKyBwb2ludC55Il07Ci0gICAgICAg
IGNoZWNrUmVzdWx0KEAicG9pbnQueCArICcsJyArIHBvaW50LnkiLCBbcmVzdWx0IGlzRXF1YWxU
b09iamVjdDpAIjYsNyJdKTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAg
ICBjb250ZXh0W0AicG9pbnQiXSA9IEB7IEAieCI6QDYsIEAieSI6QDcgfTsKLSAgICAgICAgSlNW
YWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJwb2ludC54ICsgJywnICsg
cG9pbnQueSJdOwotICAgICAgICBjaGVja1Jlc3VsdChAInBvaW50LnggKyAnLCcgKyBwb2ludC55
IiwgW3Jlc3VsdCBpc0VxdWFsVG9PYmplY3Q6QCI2LDciXSk7Ci0gICAgfQotCi0gICAgQGF1dG9y
ZWxlYXNlcG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFs
bG9jXSBpbml0XTsKLSAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0
IHRlc3RPYmplY3RdOwotICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVj
dDsKLSAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0
ZXN0T2JqZWN0LmdldFN0cmluZygpIl07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9iamVj
dC5nZXRTdHJpbmcoKSIsIHJlc3VsdC5pc1N0cmluZyAmJiBbcmVzdWx0IHRvSW50MzJdID09IDQy
KTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAgICBUZXN0T2JqZWN0KiB0
ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07Ci0gICAgICAgIGNvbnRleHRbQCJ0
ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OwotICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29u
dGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RPYmplY3QudGVzdEFyZ3VtZW50VHlwZXMoMTAxLDAu
NSx0cnVlLCdmb28nLDY2NixbZmFsc2UsJ2JhcicsZmFsc2VdLHt4OidiYXonfSkiXTsKLSAgICAg
ICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LnRlc3RBcmd1bWVudFR5cGVzIiwgW3Jlc3VsdCBp
c0VxdWFsVG9PYmplY3Q6QCIxMDEsMC41LDEsZm9vLDY2NixiYXIsYmF6Il0pOwotICAgIH0KLQot
ICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pT
Q29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBb
VGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKLSAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9
IHRlc3RPYmplY3Q7Ci0gICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAidGVzdE9iamVjdC5nZXRTdHJpbmcuY2FsbCh0ZXN0T2JqZWN0KSJdOwotICAgICAg
ICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QuZ2V0U3RyaW5nLmNhbGwodGVzdE9iamVjdCkiLCBy
ZXN1bHQuaXNTdHJpbmcgJiYgW3Jlc3VsdCB0b0ludDMyXSA9PSA0Mik7Ci0gICAgfQotCi0gICAg
QGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250
ZXh0IGFsbG9jXSBpbml0XTsKLSAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0
T2JqZWN0IHRlc3RPYmplY3RdOwotICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVz
dE9iamVjdDsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LmdldFN0cmluZy5jYWxs
KHt9KSBwcmUiLCAhY29udGV4dC5leGNlcHRpb24pOwotICAgICAgICBbY29udGV4dCBldmFsdWF0
ZVNjcmlwdDpAInRlc3RPYmplY3QuZ2V0U3RyaW5nLmNhbGwoe30pIl07Ci0gICAgICAgIGNoZWNr
UmVzdWx0KEAidGVzdE9iamVjdC5nZXRTdHJpbmcuY2FsbCh7fSkgcG9zdCIsIGNvbnRleHQuZXhj
ZXB0aW9uKTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAgICBUZXN0T2Jq
ZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07Ci0gICAgICAgIGNvbnRl
eHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OwotICAgICAgICBKU1ZhbHVlICpyZXN1bHQg
PSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInZhciByZXN1bHQgPSAwOyB0ZXN0T2JqZWN0LmNh
bGxiYWNrKGZ1bmN0aW9uKHgpeyByZXN1bHQgPSB4OyB9KTsgcmVzdWx0Il07Ci0gICAgICAgIGNo
ZWNrUmVzdWx0KEAidGVzdE9iamVjdC5jYWxsYmFjayIsIHJlc3VsdC5pc051bWJlciAmJiBbcmVz
dWx0IHRvSW50MzJdID09IDQyKTsKLSAgICAgICAgcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVT
Y3JpcHQ6QCJ0ZXN0T2JqZWN0LmJvZ3VzQ2FsbGJhY2siXTsKLSAgICAgICAgY2hlY2tSZXN1bHQo
QCJ0ZXN0T2JqZWN0LmJvZ3VzQ2FsbGJhY2sgPT0gdW5kZWZpbmVkIiwgcmVzdWx0LmlzVW5kZWZp
bmVkKTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAgICBUZXN0T2JqZWN0
ICp0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07Ci0gICAgICAgIGNvbnRleHRb
QCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OwotICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBb
Y29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxs
KHRlc3RPYmplY3QuY2FsbGJhY2spIl07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiRnVuY3Rpb24u
cHJvdG90eXBlLnRvU3RyaW5nIiwgIWNvbnRleHQuZXhjZXB0aW9uICYmICFyZXN1bHQuaXNVbmRl
ZmluZWQpOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRl
eHQgKmNvbnRleHQxID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAgICBKU0NvbnRl
eHQgKmNvbnRleHQyID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6
Y29udGV4dDEudmlydHVhbE1hY2hpbmVdOwotICAgICAgICBKU1ZhbHVlICp2YWx1ZSA9IFtKU1Zh
bHVlIHZhbHVlV2l0aERvdWJsZTo0MiBpbkNvbnRleHQ6Y29udGV4dDJdOwotICAgICAgICBjb250
ZXh0MVtAInBhc3NWYWx1ZUJldHdlZW5Db250ZXh0cyJdID0gdmFsdWU7Ci0gICAgICAgIEpTVmFs
dWUgKnJlc3VsdCA9IFtjb250ZXh0MSBldmFsdWF0ZVNjcmlwdDpAInBhc3NWYWx1ZUJldHdlZW5D
b250ZXh0cyJdOwotICAgICAgICBjaGVja1Jlc3VsdChAIlt2YWx1ZSBpc0VxdWFsVG9PYmplY3Q6
cmVzdWx0XSIsIFt2YWx1ZSBpc0VxdWFsVG9PYmplY3Q6cmVzdWx0XSk7Ci0gICAgfQotCi0gICAg
QGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250
ZXh0IGFsbG9jXSBpbml0XTsKLSAgICAgICAgY29udGV4dFtAImhhbmRsZVRoZURpY3Rpb25hcnki
XSA9IF4oTlNEaWN0aW9uYXJ5ICpkaWN0KSB7Ci0gICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmV4
cGVjdGVkRGljdCA9IEB7Ci0gICAgICAgICAgICAgICAgQCJmb28iOiBAKDEpLAotICAgICAgICAg
ICAgICAgIEAiYmFyIjogQHsgQCJiYXoiOiBAKDIpIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICBjaGVja1Jlc3VsdChAInJlY3Vyc2l2ZWx5IGNvbnZlcnQgbmVzdGVkIGRpY3Rpb25hcmll
cyIsIFtkaWN0IGlzRXF1YWxUb0RpY3Rpb25hcnk6ZXhwZWN0ZWREaWN0XSk7Ci0gICAgICAgIH07
Ci0gICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidmFyIG15RGljdCA9IHsgXAotICAg
ICAgICAgICAgJ2Zvbyc6IDEsIFwKLSAgICAgICAgICAgICdiYXInOiB7J2Jheic6IDJ9IFwKLSAg
ICAgICAgfTsgXAotICAgICAgICBoYW5kbGVUaGVEaWN0aW9uYXJ5KG15RGljdCk7Il07Ci0KLSAg
ICAgICAgY29udGV4dFtAImhhbmRsZVRoZUFycmF5Il0gPSBeKE5TQXJyYXkgKmFycmF5KSB7Ci0g
ICAgICAgICAgICBOU0FycmF5ICpleHBlY3RlZEFycmF5ID0gQFtAImZvbyIsIEAiYmFyIiwgQFtA
ImJheiJdXTsKLSAgICAgICAgICAgIGNoZWNrUmVzdWx0KEAicmVjdXJzaXZlbHkgY29udmVydCBu
ZXN0ZWQgYXJyYXlzIiwgW2FycmF5IGlzRXF1YWxUb0FycmF5OmV4cGVjdGVkQXJyYXldKTsKLSAg
ICAgICAgfTsKLSAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ2YXIgbXlBcnJheSA9
IFsnZm9vJywgJ2JhcicsIFsnYmF6J11dOyBoYW5kbGVUaGVBcnJheShteUFycmF5KTsiXTsKLSAg
ICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAgICBUZXN0T2JqZWN0ICp0ZXN0T2Jq
ZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07Ci0gICAgICAgIEBhdXRvcmVsZWFzZXBvb2wg
ewotICAgICAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7Ci0gICAg
ICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInZhciBjb25zdHJ1Y3RvciA9IE9iamVj
dC5nZXRQcm90b3R5cGVPZih0ZXN0T2JqZWN0KS5jb25zdHJ1Y3RvcjsgY29uc3RydWN0b3IucHJv
dG90eXBlID0gdW5kZWZpbmVkOyJdOwotICAgICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3Jp
cHQ6QCJ0ZXN0T2JqZWN0ID0gdW5kZWZpbmVkIl07Ci0gICAgICAgIH0KKy8vICAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSogdm0gPSBbW0pTVmlydHVh
bE1hY2hpbmUgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBKU0NvbnRleHQqIGNvbnRleHQgPSBb
W0pTQ29udGV4dCBhbGxvY10gaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTp2bV07CisvLyAgICAgICAg
IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiYmFkIl07CisvLyAgICAgfQorCisvLyAgICAgQGF1
dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250
ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCIyICsgMiJdOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAIjIgKyAy
IiwgcmVzdWx0LmlzTnVtYmVyICYmIFtyZXN1bHQgdG9JbnQzMl0gPT0gNCk7CisvLyAgICAgfQor
CisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAgTlNTdHJpbmcgKnJlc3Vs
dCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiVHdvIHBsdXMgdHdvIGlzICVAIiwgW2Nv
bnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIyICsgMiJdXTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQo
QCJzdHJpbmdXaXRoRm9ybWF0IiwgW3Jlc3VsdCBpc0VxdWFsOkAiVHdvIHBsdXMgdHdvIGlzIDQi
XSk7CisvLyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAg
Y29udGV4dFtAIm1lc3NhZ2UiXSA9IEAiSGVsbG8iOworLy8gICAgICAgICBKU1ZhbHVlICpyZXN1
bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIm1lc3NhZ2UgKyAnLCBXb3JsZCEnIl07Cisv
LyAgICAgICAgIGNoZWNrUmVzdWx0KEAiSGVsbG8sIFdvcmxkISIsIHJlc3VsdC5pc1N0cmluZyAm
JiBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIkhlbGxvLCBXb3JsZCEiXSk7CisvLyAgICAgfQor
CisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJQ
cm9taXNlIGlzIGV4cG9zZWQiLCAhW2NvbnRleHRbQCJQcm9taXNlIl0gaXNVbmRlZmluZWRdKTsK
Ky8vICAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0
eXBlb2YgUHJvbWlzZSJdOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAInR5cGVvZiBQcm9taXNl
IGlzICdmdW5jdGlvbiciLCByZXN1bHQuaXNTdHJpbmcgJiYgW3Jlc3VsdCBpc0VxdWFsVG9PYmpl
Y3Q6QCJmdW5jdGlvbiJdKTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
Ky8vICAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSogdm0gPSBbW0pTVmlydHVhbE1hY2hpbmUgYWxs
b2NdIGluaXRdOworLy8gICAgICAgICBKU0NvbnRleHQqIGNvbnRleHQgPSBbW0pTQ29udGV4dCBh
bGxvY10gaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTp2bV07CisvLyAgICAgICAgIFtjb250ZXh0IGV2
YWx1YXRlU2NyaXB0OkAicmVzdWx0ID0gMDsgUHJvbWlzZS5yZXNvbHZlKDQyKS50aGVuKGZ1bmN0
aW9uICh2YWx1ZSkgeyByZXN1bHQgPSB2YWx1ZTsgfSk7Il07CisvLyAgICAgICAgIGNoZWNrUmVz
dWx0KEAiTWljcm90YXNrIGlzIGRyYWluZWQiLCBbY29udGV4dFtAInJlc3VsdCJdICBpc0VxdWFs
VG9PYmplY3Q6QDQyXSk7CisvLyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Cisv
LyAgICAgICAgIEpTVmlydHVhbE1hY2hpbmUqIHZtID0gW1tKU1ZpcnR1YWxNYWNoaW5lIGFsbG9j
XSBpbml0XTsKKy8vICAgICAgICAgSlNDb250ZXh0KiBjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxs
b2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6dm1dOworLy8gICAgICAgICBUZXN0T2JqZWN0KiB0
ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisvLyAgICAgICAgIGNvbnRleHRb
QCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworLy8gICAgICAgICBbY29udGV4dCBldmFsdWF0
ZVNjcmlwdDpAInJlc3VsdCA9IDA7IGNhbGxiYWNrUmVzdWx0ID0gMDsgUHJvbWlzZS5yZXNvbHZl
KDQyKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXN1bHQgPSB2YWx1ZTsgfSk7IGNhbGxiYWNr
UmVzdWx0ID0gdGVzdE9iamVjdC5nZXRTdHJpbmcoKTsiXTsKKy8vICAgICAgICAgY2hlY2tSZXN1
bHQoQCJNaWNyb3Rhc2sgaXMgZHJhaW5lZCB3aXRoIHNhbWUgVk0iLCBbY29udGV4dFtAInJlc3Vs
dCJdICBpc0VxdWFsVG9PYmplY3Q6QDQyXSAmJiBbY29udGV4dFtAImNhbGxiYWNrUmVzdWx0Il0g
aXNFcXVhbFRvT2JqZWN0OkAiNDIiXSk7CisvLyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CisvLyAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9j
XSBpbml0XTsKKy8vICAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVT
Y3JpcHQ6QCIoeyB4OjQyIH0pIl07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiKHsgeDo0MiB9
KSIsIHJlc3VsdC5pc09iamVjdCAmJiBbcmVzdWx0W0AieCJdIGlzRXF1YWxUb09iamVjdDpANDJd
KTsKKy8vICAgICAgICAgaWQgb2JqID0gW3Jlc3VsdCB0b09iamVjdF07CisvLyAgICAgICAgIGNo
ZWNrUmVzdWx0KEAiQ2hlY2sgZGljdGlvbmFyeSBsaXRlcmFsIiwgW29iaiBpc0tpbmRPZkNsYXNz
OltOU0RpY3Rpb25hcnkgY2xhc3NdXSk7CisvLyAgICAgICAgIGlkIG51bSA9IChOU0RpY3Rpb25h
cnkgKilvYmpbQCJ4Il07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiQ2hlY2sgbnVtZXJpYyBs
aXRlcmFsIiwgW251bSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKTsKKy8vICAgICB9
CisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250
ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBKU1ZhbHVlICpyZXN1
bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIlsgXSJdOworLy8gICAgICAgICBjaGVja1Jl
c3VsdChAIlsgXSIsIHJlc3VsdC5pc0FycmF5KTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQg
YWxsb2NdIGluaXRdOworLy8gICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFs
dWF0ZVNjcmlwdDpAIm5ldyBEYXRlIl07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAibmV3IERh
dGUiLCByZXN1bHQuaXNEYXRlKTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGlu
aXRdOworLy8gICAgICAgICBKU1ZhbHVlICpzeW1ib2wgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlw
dDpAIlN5bWJvbCgnZG9wZScpOyJdOworLy8gICAgICAgICBKU1ZhbHVlICpub3RTeW1ib2wgPSBb
Y29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIidkb3BlJyJdOworLy8gICAgICAgICBjaGVja1Jlc3Vs
dChAIlNob3VsZCBiZSBhIHN5bWJvbCB2YWx1ZSIsIHN5bWJvbC5pc1N5bWJvbCk7CisvLyAgICAg
ICAgIGNoZWNrUmVzdWx0KEAiU2hvdWxkIG5vdCBiZSBhIHN5bWJvbCB2YWx1ZSIsICFub3RTeW1i
b2wuaXNTeW1ib2wpOworLy8gICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8g
ICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Cisv
LyAgICAgICAgIEpTVmFsdWUgKnN5bWJvbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld1N5bWJvbEZy
b21EZXNjcmlwdGlvbjpAImRvcGUiIGluQ29udGV4dDpjb250ZXh0XTsKKy8vICAgICAgICAgY2hl
Y2tSZXN1bHQoQCJTaG91bGQgYmUgYSBjcmVhdGVkIGZyb20gT2JqLUMiLCBzeW1ib2wuaXNTeW1i
b2wpOworLy8gICAgIH0KKworLy8gLy8gT2xkZXIgcGxhdGZvcm1zIGlmZGVmIHRoZSB0eXBlIG9m
IHNvbWUgc2VsZWN0b3JzIHNvIHRoZXNlIHRlc3RzIGRvbid0IHdvcmsuCisvLyAvLyBGSVhNRTog
UmVtb3ZlIHRoaXMgd2hlbiB3ZSBzdG9wIGJ1aWxkaW5nIGZvciBtYWNPUyAxMC4xNC9pT1MgMTIu
CisvLyAjaWYgKGRlZmluZWQoX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCkgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE1MDApIHx8IChkZWZpbmVkKF9fSVBI
T05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMzAwMDApCisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKy8vICAgICAg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworLy8gICAg
ICAgICBKU1ZhbHVlICphcnJheUl0ZXJhdG9yID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJB
cnJheS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSJdOworLy8gICAgICAgICBKU1ZhbHVlICpp
dGVyYXRvclN5bWJvbCA9IGNvbnRleHRbQCJTeW1ib2wiXVtAIml0ZXJhdG9yIl07CisvLyAgICAg
ICAgIEpTVmFsdWUgKmFycmF5ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3QXJyYXlJbkNvbnRleHQ6
Y29udGV4dF07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiTG9va2luZyB1cCBieSBzdWJzY3Jp
cHQgd2l0aCBzeW1ib2wgc2hvdWxkIHdvcmsiLCBbYXJyYXlbaXRlcmF0b3JTeW1ib2xdIGlzRXF1
YWw6YXJyYXlJdGVyYXRvcl0pOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAIkxvb2tpbmcgdXAg
YnkgbWV0aG9kIHdpdGggc3ltYm9sIHNob3VsZCB3b3JrIiwgW1thcnJheSB2YWx1ZUZvclByb3Bl
cnR5Oml0ZXJhdG9yU3ltYm9sXSBpc0VxdWFsOmFycmF5SXRlcmF0b3JdKTsKKy8vICAgICB9CisK
Ky8vICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBKU1ZhbHVlICppdGVyYXRv
clN5bWJvbCA9IGNvbnRleHRbQCJTeW1ib2wiXVtAIml0ZXJhdG9yIl07CisvLyAgICAgICAgIEpT
VmFsdWUgKm9iamVjdCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpjb250
ZXh0XTsKKy8vICAgICAgICAgSlNWYWx1ZSAqdGhlQW5zd2VyID0gW0pTVmFsdWUgdmFsdWVXaXRo
VUludDMyOjQyIGluQ29udGV4dDpjb250ZXh0XTsKKy8vICAgICAgICAgb2JqZWN0W2l0ZXJhdG9y
U3ltYm9sXSA9IHRoZUFuc3dlcjsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJTZXR0aW5nIGJ5
IHN1YnNjcmlwdCB3aXRoIHN5bWJvbCBzaG91bGQgd29yayIsIFtvYmplY3RbaXRlcmF0b3JTeW1i
b2xdIGlzRXF1YWw6dGhlQW5zd2VyXSk7CisvLyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CisvLyAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9j
XSBpbml0XTsKKy8vICAgICAgICAgSlNWYWx1ZSAqaXRlcmF0b3JTeW1ib2wgPSBjb250ZXh0W0Ai
U3ltYm9sIl1bQCJpdGVyYXRvciJdOworLy8gICAgICAgICBKU1ZhbHVlICpvYmplY3QgPSBbSlNW
YWx1ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6Y29udGV4dF07CisvLyAgICAgICAgIEpT
VmFsdWUgKnRoZUFuc3dlciA9IFtKU1ZhbHVlIHZhbHVlV2l0aFVJbnQzMjo0MiBpbkNvbnRleHQ6
Y29udGV4dF07CisvLyAgICAgICAgIFtvYmplY3Qgc2V0VmFsdWU6dGhlQW5zd2VyIGZvclByb3Bl
cnR5Oml0ZXJhdG9yU3ltYm9sXTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJTZXR0aW5nIGJ5
IG1ldGhvZCB3aXRoIHN5bWJvbCBzaG91bGQgd29yayIsIFtvYmplY3RbaXRlcmF0b3JTeW1ib2xd
IGlzRXF1YWw6dGhlQW5zd2VyXSk7CisvLyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CisvLyAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBp
bml0XTsKKy8vICAgICAgICAgSlNWYWx1ZSAqaXRlcmF0b3JTeW1ib2wgPSBjb250ZXh0W0AiU3lt
Ym9sIl1bQCJpdGVyYXRvciJdOworLy8gICAgICAgICBKU1ZhbHVlICpvYmplY3QgPSBbSlNWYWx1
ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6Y29udGV4dF07CisvLyAgICAgICAgIEpTVmFs
dWUgKnRoZUFuc3dlciA9IFtKU1ZhbHVlIHZhbHVlV2l0aFVJbnQzMjo0MiBpbkNvbnRleHQ6Y29u
dGV4dF07CisvLyAgICAgICAgIG9iamVjdFtpdGVyYXRvclN5bWJvbF0gPSB0aGVBbnN3ZXI7Cisv
LyAgICAgICAgIGNoZWNrUmVzdWx0KEAiaGFzIHByb3BlcnR5IHdpdGggc3ltYm9sIHNob3VsZCB3
b3JrIiwgW29iamVjdCBoYXNQcm9wZXJ0eTppdGVyYXRvclN5bWJvbF0pOworLy8gICAgIH0KKwor
Ly8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAgIEpTVmFsdWUgKml0ZXJhdG9y
U3ltYm9sID0gY29udGV4dFtAIlN5bWJvbCJdW0AiaXRlcmF0b3IiXTsKKy8vICAgICAgICAgSlNW
YWx1ZSAqb2JqZWN0ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0OmNvbnRl
eHRdOworLy8gICAgICAgICBKU1ZhbHVlICp0aGVBbnN3ZXIgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhV
SW50MzI6NDIgaW5Db250ZXh0OmNvbnRleHRdOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAImRl
bGV0ZSBwcm9wZXJ0eSB3aXRoIHN5bWJvbCBzaG91bGQgd29yayB3aXRob3V0IHByb3BlcnR5Iiwg
W29iamVjdCBkZWxldGVQcm9wZXJ0eTppdGVyYXRvclN5bWJvbF0pOworLy8gICAgICAgICBvYmpl
Y3RbaXRlcmF0b3JTeW1ib2xdID0gdGhlQW5zd2VyOworLy8gICAgICAgICBjaGVja1Jlc3VsdChA
ImRlbGV0ZSBwcm9wZXJ0eSB3aXRoIHN5bWJvbCBzaG91bGQgd29yayB3aXRoIHByb3BlcnR5Iiwg
W29iamVjdCBkZWxldGVQcm9wZXJ0eTppdGVyYXRvclN5bWJvbF0pOworLy8gICAgICAgICBjaGVj
a1Jlc3VsdChAImRlbGV0ZSBzaG91bGQgYmUgZmFsc2Ugd2l0aCBub24tY29uZmlndXJhYmxlIHBy
b3BlcnR5IiwgIVtjb250ZXh0W0AiQXJyYXkiXSBkZWxldGVQcm9wZXJ0eTpAInByb3RvdHlwZSJd
KTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlND
b250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBK
U1ZhbHVlICpvYmplY3QgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6Y29u
dGV4dF07CisvLyAgICAgICAgIE5TT2JqZWN0ICpvYmpDT2JqZWN0ID0gW1tOU09iamVjdCBhbGxv
Y10gaW5pdF07CisvLyAgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IG9iamVjdFtvYmpDT2JqZWN0
XTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJnZXR0aW5nIGEgbm9uLWNvbnZlcnRhYmxlIG9i
amVjdCBzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCIsIFtyZXN1bHQgaXNVbmRlZmluZWRdKTsKKy8v
ICAgICAgICAgb2JqZWN0W29iakNPYmplY3RdID0gQCgxKTsKKy8vICAgICAgICAgcmVzdWx0ID0g
b2JqZWN0W29iakNPYmplY3RdOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAImdldHRpbmcgYSBu
b24tY29udmVydGFibGUgb2JqZWN0IHNob3VsZCByZXR1cm4gdGhlIHN0b3JlZCB2YWx1ZSIsIFty
ZXN1bHQgdG9VSW50MzJdID09IDEpOworLy8gICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBv
b2wgeworLy8gICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10g
aW5pdF07CisvLyAgICAgICAgIEpTVmFsdWUgKm9iamVjdCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5l
d09iamVjdEluQ29udGV4dDpjb250ZXh0XTsKKy8vICAgICAgICAgSlNWYWx1ZSAqaXRlcmF0b3JT
eW1ib2wgPSBjb250ZXh0W0AiU3ltYm9sIl1bQCJpdGVyYXRvciJdOworLy8gICAgICAgICBvYmpl
Y3RbQCJ2YWx1ZSJdID0gQCgxKTsKKy8vICAgICAgICAgY29udGV4dFtAIm9iamVjdCJdID0gb2Jq
ZWN0OworCisvLyAgICAgICAgIG9iamVjdFtpdGVyYXRvclN5bWJvbF0gPSBeeworLy8gICAgICAg
ICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250
ZXh0OmNvbnRleHRdOworLy8gICAgICAgICAgICAgcmVzdWx0W0Aib2JqZWN0Il0gPSBbSlNDb250
ZXh0IGN1cnJlbnRUaGlzXTsKKy8vICAgICAgICAgICAgIHJlc3VsdFtAIm5leHQiXSA9IF57Cisv
LyAgICAgICAgICAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3
T2JqZWN0SW5Db250ZXh0OmNvbnRleHRdOworLy8gICAgICAgICAgICAgICAgIEpTVmFsdWUgKnZh
bHVlID0gW0pTQ29udGV4dCBjdXJyZW50VGhpc11bQCJvYmplY3QiXVtAInZhbHVlIl07CisvLyAg
ICAgICAgICAgICAgICAgW1tKU0NvbnRleHQgY3VycmVudFRoaXNdW0Aib2JqZWN0Il0gZGVsZXRl
UHJvcGVydHk6QCJ2YWx1ZSJdOworLy8gICAgICAgICAgICAgICAgIHJlc3VsdFtAInZhbHVlIl0g
PSB2YWx1ZTsKKy8vICAgICAgICAgICAgICAgICByZXN1bHRbQCJkb25lIl0gPSBbSlNWYWx1ZSB2
YWx1ZVdpdGhCb29sOlt2YWx1ZSBpc1VuZGVmaW5lZF0gaW5Db250ZXh0OmNvbnRleHRdOworLy8g
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisvLyAgICAgICAgICAgICB9OworLy8gICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKy8vICAgICAgICAgfTsKKworCisvLyAgICAgICAgIEpT
VmFsdWUgKmNvdW50ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJsZXQgY291bnQgPSAwOyBm
b3IgKGxldCB2IG9mIG9iamVjdCkgeyBpZiAodiAhPT0gMSkgdGhyb3cgbmV3IEVycm9yKCk7IGNv
dW50Kys7IH0gY291bnQ7Il07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiaXRlcmF0b3Igc2hv
dWxkIG5vdCB0aHJvdyIsICFbY29udGV4dCBleGNlcHRpb25dKTsKKy8vICAgICAgICAgY2hlY2tS
ZXN1bHQoQCJpdGVyYXRpb24gY291bnQgc2hvdWxkIGJlIDEiLCBbY291bnQgdG9VSW50MzJdID09
IDEpOworLy8gICAgIH0KKworLy8gI2VuZGlmCisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
Ky8vICAgICAgICAgSlNDb2xsZWN0aW9uKiBteVByaXZhdGVQcm9wZXJ0aWVzID0gW1tKU0NvbGxl
Y3Rpb24gYWxsb2NdIGluaXRdOworCisvLyAgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8g
ICAgICAgICAgICAgSlNDb250ZXh0KiBjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRd
OworLy8gICAgICAgICAgICAgVGVzdE9iamVjdCogcm9vdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRl
c3RPYmplY3RdOworLy8gICAgICAgICAgICAgY29udGV4dFtAInJvb3QiXSA9IHJvb3RPYmplY3Q7
CisvLyAgICAgICAgICAgICBbY29udGV4dC52aXJ0dWFsTWFjaGluZSBhZGRNYW5hZ2VkUmVmZXJl
bmNlOm15UHJpdmF0ZVByb3BlcnRpZXMgd2l0aE93bmVyOnJvb3RPYmplY3RdOworLy8gICAgICAg
ICAgICAgW215UHJpdmF0ZVByb3BlcnRpZXMgc2V0VmFsdWU6W0pTVmFsdWUgdmFsdWVXaXRoQm9v
bDp0cnVlIGluQ29udGV4dDpjb250ZXh0XSBmb3JLZXk6QCJpc19oYW0iXTsKKy8vICAgICAgICAg
ICAgIFtteVByaXZhdGVQcm9wZXJ0aWVzIHNldFZhbHVlOltKU1ZhbHVlIHZhbHVlV2l0aE9iamVj
dDpAImhlbGxvISIgaW5Db250ZXh0OmNvbnRleHRdIGZvcktleTpAIm1lc3NhZ2UiXTsKKy8vICAg
ICAgICAgICAgIFtteVByaXZhdGVQcm9wZXJ0aWVzIHNldFZhbHVlOltKU1ZhbHVlIHZhbHVlV2l0
aEludDMyOjQyIGluQ29udGV4dDpjb250ZXh0XSBmb3JLZXk6QCJteV9udW1iZXIiXTsKKy8vICAg
ICAgICAgICAgIFtteVByaXZhdGVQcm9wZXJ0aWVzIHNldFZhbHVlOltKU1ZhbHVlIHZhbHVlV2l0
aE51bGxJbkNvbnRleHQ6Y29udGV4dF0gZm9yS2V5OkAiZGVmaW5pdGVseV9udWxsIl07CisvLyAg
ICAgICAgICAgICBbbXlQcml2YXRlUHJvcGVydGllcyBzZXRWYWx1ZTpbSlNWYWx1ZSB2YWx1ZVdp
dGhVbmRlZmluZWRJbkNvbnRleHQ6Y29udGV4dF0gZm9yS2V5OkAibm90X3N1cmVfaWZfdW5kZWZp
bmVkIl07CisKKy8vICAgICAgICAgICAgIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRl
YnVnZ2luZyhbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKKworLy8gICAgICAgICAgICAg
SlNWYWx1ZSAqaXNIYW0gPSBbbXlQcml2YXRlUHJvcGVydGllcyB2YWx1ZUZvcktleTpAImlzX2hh
bSJdOworLy8gICAgICAgICAgICAgSlNWYWx1ZSAqbWVzc2FnZSA9IFtteVByaXZhdGVQcm9wZXJ0
aWVzIHZhbHVlRm9yS2V5OkAibWVzc2FnZSJdOworLy8gICAgICAgICAgICAgSlNWYWx1ZSAqbXlO
dW1iZXIgPSBbbXlQcml2YXRlUHJvcGVydGllcyB2YWx1ZUZvcktleTpAIm15X251bWJlciJdOwor
Ly8gICAgICAgICAgICAgSlNWYWx1ZSAqZGVmaW5pdGVseU51bGwgPSBbbXlQcml2YXRlUHJvcGVy
dGllcyB2YWx1ZUZvcktleTpAImRlZmluaXRlbHlfbnVsbCJdOworLy8gICAgICAgICAgICAgSlNW
YWx1ZSAqbm90U3VyZUlmVW5kZWZpbmVkID0gW215UHJpdmF0ZVByb3BlcnRpZXMgdmFsdWVGb3JL
ZXk6QCJub3Rfc3VyZV9pZl91bmRlZmluZWQiXTsKKy8vICAgICAgICAgICAgIGNoZWNrUmVzdWx0
KEAiaXNfaGFtIGlzIHRydWUiLCBpc0hhbS5pc0Jvb2xlYW4gJiYgW2lzSGFtIHRvQm9vbF0pOwor
Ly8gICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJtZXNzYWdlIGlzIGhlbGxvISIsIG1lc3NhZ2Uu
aXNTdHJpbmcgJiYgW0AiaGVsbG8hIiBpc0VxdWFsVG9TdHJpbmc6W21lc3NhZ2UgdG9TdHJpbmdd
XSk7CisvLyAgICAgICAgICAgICBjaGVja1Jlc3VsdChAIm15X251bWJlciBpcyA0MiIsIG15TnVt
YmVyLmlzTnVtYmVyICYmIFtteU51bWJlciB0b0ludDMyXSA9PSA0Mik7CisvLyAgICAgICAgICAg
ICBjaGVja1Jlc3VsdChAImRlZmluaXRlbHlfbnVsbCBpcyBudWxsIiwgZGVmaW5pdGVseU51bGwu
aXNOdWxsKTsKKy8vICAgICAgICAgICAgIGNoZWNrUmVzdWx0KEAibm90X3N1cmVfaWZfdW5kZWZp
bmVkIGlzIHVuZGVmaW5lZCIsIG5vdFN1cmVJZlVuZGVmaW5lZC5pc1VuZGVmaW5lZCk7CisvLyAg
ICAgICAgIH0KKworLy8gICAgICAgICBjaGVja1Jlc3VsdChAImlzX2hhbSBpcyBuaWwiLCAhW215
UHJpdmF0ZVByb3BlcnRpZXMgdmFsdWVGb3JLZXk6QCJpc19oYW0iXSk7CisvLyAgICAgICAgIGNo
ZWNrUmVzdWx0KEAibWVzc2FnZSBpcyBuaWwiLCAhW215UHJpdmF0ZVByb3BlcnRpZXMgdmFsdWVG
b3JLZXk6QCJtZXNzYWdlIl0pOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAIm15X251bWJlciBp
cyA0MiIsICFbbXlQcml2YXRlUHJvcGVydGllcyB2YWx1ZUZvcktleTpAIm15X251bWJlciJdKTsK
Ky8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJkZWZpbml0ZWx5X251bGwgaXMgbnVsbCIsICFbbXlQ
cml2YXRlUHJvcGVydGllcyB2YWx1ZUZvcktleTpAImRlZmluaXRlbHlfbnVsbCJdKTsKKy8vICAg
ICAgICAgY2hlY2tSZXN1bHQoQCJub3Rfc3VyZV9pZl91bmRlZmluZWQgaXMgdW5kZWZpbmVkIiwg
IVtteVByaXZhdGVQcm9wZXJ0aWVzIHZhbHVlRm9yS2V5OkAibm90X3N1cmVfaWZfdW5kZWZpbmVk
Il0pOworLy8gICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAg
IEpTVmFsdWUgKm1lc3NhZ2UgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QCJoZWxsbyIgaW5D
b250ZXh0OmNvbnRleHRdOworLy8gICAgICAgICBUZXN0T2JqZWN0ICpyb290T2JqZWN0ID0gW1Rl
c3RPYmplY3QgdGVzdE9iamVjdF07CisvLyAgICAgICAgIEpTQ29sbGVjdGlvbiAqY29sbGVjdGlv
biA9IFtbSlNDb2xsZWN0aW9uIGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAgY29udGV4dFtAInJv
b3QiXSA9IHJvb3RPYmplY3Q7CisvLyAgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAg
ICAgICAgICAgSlNWYWx1ZSAqanNDb2xsZWN0aW9uID0gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0
OmNvbGxlY3Rpb24gaW5Db250ZXh0OmNvbnRleHRdOworLy8gICAgICAgICAgICAgSlNNYW5hZ2Vk
VmFsdWUgKndlYWtDb2xsZWN0aW9uID0gW0pTTWFuYWdlZFZhbHVlIG1hbmFnZWRWYWx1ZVdpdGhW
YWx1ZTpqc0NvbGxlY3Rpb24gYW5kT3duZXI6cm9vdE9iamVjdF07CisvLyAgICAgICAgICAgICBb
Y29udGV4dC52aXJ0dWFsTWFjaGluZSBhZGRNYW5hZ2VkUmVmZXJlbmNlOndlYWtDb2xsZWN0aW9u
IHdpdGhPd25lcjptZXNzYWdlXTsKKy8vICAgICAgICAgICAgIEpTU3luY2hyb25vdXNHYXJiYWdl
Q29sbGVjdEZvckRlYnVnZ2luZyhbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKKy8vICAg
ICAgICAgfQorLy8gICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAg
ICAgIF9fYmxvY2sgaW50IHJlc3VsdDsKKy8vICAgICAgICAgY29udGV4dFtAImJsb2NrQ2FsbGJh
Y2siXSA9IF4oaW50IHZhbHVlKXsKKy8vICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlOworLy8g
ICAgICAgICB9OworLy8gICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImJsb2NrQ2Fs
bGJhY2soNDIpIl07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiYmxvY2tDYWxsYmFjayIsIHJl
c3VsdCA9PSA0Mik7CisvLyAgICAgfQorCisvLyAgICAgaWYgKGJsb2NrU2lnbmF0dXJlQ29udGFp
bnNDbGFzcygpKSB7CisvLyAgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICAg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworLy8gICAg
ICAgICAgICAgX19ibG9jayBib29sIHJlc3VsdCA9IGZhbHNlOworLy8gICAgICAgICAgICAgY29u
dGV4dFtAImJsb2NrQ2FsbGJhY2siXSA9IF4oTlNTdHJpbmcgKnZhbHVlKXsKKy8vICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBbQCI0MiIgaXNFcXVhbFRvU3RyaW5nOnZhbHVlXSA9PSBZRVM7Cisv
LyAgICAgICAgICAgICB9OworLy8gICAgICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6
QCJibG9ja0NhbGxiYWNrKDQyKSJdOworLy8gICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJibG9j
a0NhbGxiYWNrKE5TU3RyaW5nICopIiwgcmVzdWx0KTsKKy8vICAgICAgICAgfQorLy8gICAgIH0g
ZWxzZQorLy8gICAgICAgICBOU0xvZyhAIlNraXBwaW5nICdibG9ja0NhbGxiYWNrKE5TU3RyaW5n
ICopJyB0ZXN0IGNhc2UiKTsKKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAg
ICAgIGNoZWNrUmVzdWx0KEAiIWNvbnRleHQuZXhjZXB0aW9uIiwgIWNvbnRleHQuZXhjZXB0aW9u
KTsKKy8vICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIhQCMkJV4mKigpIFRISVMg
SVMgTk9UIFZBTElEIEpBVkFTQ1JJUFQgU1lOVEFYICFAIyQlXiYqKCkiXTsKKy8vICAgICAgICAg
Y2hlY2tSZXN1bHQoQCJjb250ZXh0LmV4Y2VwdGlvbiIsIGNvbnRleHQuZXhjZXB0aW9uKTsKKy8v
ICAgICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBfX2Jsb2Nr
IGJvb2wgY2F1Z2h0ID0gZmFsc2U7CisvLyAgICAgICAgIGNvbnRleHQuZXhjZXB0aW9uSGFuZGxl
ciA9IF4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpleGNlcHRpb24pIHsKKy8vICAgICAg
ICAgICAgICh2b2lkKWNvbnRleHQ7CisvLyAgICAgICAgICAgICAodm9pZClleGNlcHRpb247Cisv
LyAgICAgICAgICAgICBjYXVnaHQgPSB0cnVlOworLy8gICAgICAgICB9OworLy8gICAgICAgICBb
Y29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIiFAIyQlXiYqKCkgVEhJUyBJUyBOT1QgVkFMSUQgSkFW
QVNDUklQVCBTWU5UQVggIUAjJCVeJiooKSJdOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAIkpT
Q29udGV4dC5leGNlcHRpb25IYW5kbGVyIiwgY2F1Z2h0KTsKKy8vICAgICB9CisKKy8vICAgICBA
YXV0b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0Nv
bnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBfX2Jsb2NrIGludCBleHBlY3RlZEV4Y2Vw
dGlvbkxpbmVOdW1iZXIgPSAxOworLy8gICAgICAgICBfX2Jsb2NrIGJvb2wgc2F3RXhwZWN0ZWRF
eGNlcHRpb25MaW5lTnVtYmVyID0gZmFsc2U7CisvLyAgICAgICAgIGNvbnRleHQuZXhjZXB0aW9u
SGFuZGxlciA9IF4oSlNDb250ZXh0ICosIEpTVmFsdWUgKmV4Y2VwdGlvbikgeworLy8gICAgICAg
ICAgICAgc2F3RXhwZWN0ZWRFeGNlcHRpb25MaW5lTnVtYmVyID0gW2V4Y2VwdGlvbltAImxpbmUi
XSB0b0ludDMyXSA9PSBleHBlY3RlZEV4Y2VwdGlvbkxpbmVOdW1iZXI7CisvLyAgICAgICAgIH07
CisvLyAgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiIUAjJCVeJiooKSBUSElTIElT
IE5PVCBWQUxJRCBKQVZBU0NSSVBUIFNZTlRBWCAhQCMkJV4mKigpIl07CisvLyAgICAgICAgIGNo
ZWNrUmVzdWx0KEAiZXZhbHV0ZVNjcmlwdCBleGNlcHRpb24gb24gbGluZSAxIiwgc2F3RXhwZWN0
ZWRFeGNlcHRpb25MaW5lTnVtYmVyKTsKKworLy8gICAgICAgICBleHBlY3RlZEV4Y2VwdGlvbkxp
bmVOdW1iZXIgPSAyOworLy8gICAgICAgICBzYXdFeHBlY3RlZEV4Y2VwdGlvbkxpbmVOdW1iZXIg
PSBmYWxzZTsKKy8vICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIvLyBMaW5lIDFc
biFAIyQlXiYqKCkgVEhJUyBJUyBOT1QgVkFMSUQgSkFWQVNDUklQVCBTWU5UQVggIUAjJCVeJioo
KSJdOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAImV2YWx1dGVTY3JpcHQgZXhjZXB0aW9uIG9u
IGxpbmUgMiIsIHNhd0V4cGVjdGVkRXhjZXB0aW9uTGluZU51bWJlcik7CisvLyAgICAgfQorCisv
LyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9
IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAgX19ibG9jayBib29sIGVtcHR5
RXhjZXB0aW9uU291cmNlVVJMID0gZmFsc2U7CisvLyAgICAgICAgIGNvbnRleHQuZXhjZXB0aW9u
SGFuZGxlciA9IF4oSlNDb250ZXh0ICosIEpTVmFsdWUgKmV4Y2VwdGlvbikgeworLy8gICAgICAg
ICAgICAgZW1wdHlFeGNlcHRpb25Tb3VyY2VVUkwgPSBleGNlcHRpb25bQCJzb3VyY2VVUkwiXS5p
c1VuZGVmaW5lZDsKKy8vICAgICAgICAgfTsKKy8vICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVT
Y3JpcHQ6QCIhQCMkJV4mKigpIFRISVMgSVMgTk9UIFZBTElEIEpBVkFTQ1JJUFQgU1lOVEFYICFA
IyQlXiYqKCkiXTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJldmFsdXRlU2NyaXB0OiBleGNl
cHRpb24gaGFzIG5vIHNvdXJjZVVSTCIsIGVtcHR5RXhjZXB0aW9uU291cmNlVVJMKTsKKworLy8g
ICAgICAgICBfX2Jsb2NrIE5TU3RyaW5nICpleGNlcHRpb25Tb3VyY2VVUkwgPSBuaWw7CisvLyAg
ICAgICAgIGNvbnRleHQuZXhjZXB0aW9uSGFuZGxlciA9IF4oSlNDb250ZXh0ICosIEpTVmFsdWUg
KmV4Y2VwdGlvbikgeworLy8gICAgICAgICAgICAgZXhjZXB0aW9uU291cmNlVVJMID0gW2V4Y2Vw
dGlvbltAInNvdXJjZVVSTCJdIHRvU3RyaW5nXTsKKy8vICAgICAgICAgfTsKKy8vICAgICAgICAg
TlNVUkwgKnVybCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZm9vL2Jhci5qcyIgaXNEaXJl
Y3Rvcnk6Tk9dOworLy8gICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIiFAIyQlXiYq
KCkgVEhJUyBJUyBOT1QgVkFMSUQgSkFWQVNDUklQVCBTWU5UQVggIUAjJCVeJiooKSIgd2l0aFNv
dXJjZVVSTDp1cmxdOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAImV2YWx1YXRlU2NyaXB0Ondp
dGhTb3VyY2VVUkw6IGV4Y2VwdGlvbiBoYXMgZXhwZWN0ZWQgc291cmNlVVJMIiwgW2V4Y2VwdGlv
blNvdXJjZVVSTCBpc0VxdWFsVG9TdHJpbmc6W3VybCBhYnNvbHV0ZVN0cmluZ11dKTsKKy8vICAg
ICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBjb250ZXh0W0Ai
Y2FsbGJhY2siXSA9IF57CisvLyAgICAgICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlND
b250ZXh0IGN1cnJlbnRDb250ZXh0XTsKKy8vICAgICAgICAgICAgIGNvbnRleHQuZXhjZXB0aW9u
ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIlNvbWV0aGluZyB3ZW50
IHdyb25nLiIgaW5Db250ZXh0OmNvbnRleHRdOworLy8gICAgICAgICB9OworLy8gICAgICAgICBK
U1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInZhciByZXN1bHQ7IHRy
eSB7IGNhbGxiYWNrKCk7IH0gY2F0Y2ggKGUpIHsgcmVzdWx0ID0gJ0NhdWdodCBleGNlcHRpb24n
OyB9Il07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiRXhwbGljaXQgdGhyb3cgaW4gY2FsbGJh
Y2sgLSB3YXMgY2F1Z2h0IGJ5IEphdmFTY3JpcHQiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpA
IkNhdWdodCBleGNlcHRpb24iXSk7CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiRXhwbGljaXQg
dGhyb3cgaW4gY2FsbGJhY2sgLSBub3QgdGhyb3duIHRvIE9iamVjdGl2ZS1DIiwgIWNvbnRleHQu
ZXhjZXB0aW9uKTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKy8vICAg
ICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworLy8g
ICAgICAgICBjb250ZXh0W0AiY2FsbGJhY2siXSA9IF57CisvLyAgICAgICAgICAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKKy8vICAgICAgICAgICAg
IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiIUAjJCVeJiooKSBUSElTIElTIE5PVCBWQUxJRCBK
QVZBU0NSSVBUIFNZTlRBWCAhQCMkJV4mKigpIl07CisvLyAgICAgICAgIH07CisvLyAgICAgICAg
IEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidmFyIHJlc3VsdDsg
dHJ5IHsgY2FsbGJhY2soKTsgfSBjYXRjaCAoZSkgeyByZXN1bHQgPSAnQ2F1Z2h0IGV4Y2VwdGlv
bic7IH0iXTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJJbXBsaWNpdCB0aHJvdyBpbiBjYWxs
YmFjayAtIHdhcyBjYXVnaHQgYnkgSmF2YVNjcmlwdCIsIFtyZXN1bHQgaXNFcXVhbFRvT2JqZWN0
OkAiQ2F1Z2h0IGV4Y2VwdGlvbiJdKTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJJbXBsaWNp
dCB0aHJvdyBpbiBjYWxsYmFjayAtIG5vdCB0aHJvd24gdG8gT2JqZWN0aXZlLUMiLCAhY29udGV4
dC5leGNlcHRpb24pOworLy8gICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8g
ICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Cisv
LyAgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OgorLy8gICAgICAgICAgICAgQCJmdW5j
dGlvbiBzdW0oYXJyYXkpIHsgXAorLy8gICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAwOyBc
CisvLyAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBhcnJheSkgXAorLy8gICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgKz0gYXJyYXlbaV07IFwKKy8vICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OyBcCisvLyAgICAgICAgICAgICB9Il07CisvLyAgICAgICAgIEpTVmFsdWUgKmFy
cmF5ID0gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OkBbQDEzLCBAMiwgQDddIGluQ29udGV4dDpj
b250ZXh0XTsKKy8vICAgICAgICAgSlNWYWx1ZSAqc3VtRnVuY3Rpb24gPSBjb250ZXh0W0Aic3Vt
Il07CisvLyAgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtzdW1GdW5jdGlvbiBjYWxsV2l0aEFy
Z3VtZW50czpAWyBhcnJheSBdXTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJzdW0oWzEzLCAy
LCA3XSkiLCBbcmVzdWx0IHRvSW50MzJdID09IDIyKTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRl
eHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBKU1ZhbHVlICptdWxBZGRGdW5jdGlvbiA9IFtj
b250ZXh0IGV2YWx1YXRlU2NyaXB0OgorLy8gICAgICAgICAgICAgQCIoZnVuY3Rpb24oYXJyYXks
IG9iamVjdCkgeyBcCisvLyAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdOyBcCisvLyAg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBhcnJheSkgXAorLy8gICAgICAgICAgICAgICAg
ICAgICByZXN1bHQucHVzaChhcnJheVtpXSAqIG9iamVjdC54ICsgb2JqZWN0LnkpOyBcCisvLyAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorLy8gICAgICAgICAgICAgfSkiXTsKKy8v
ICAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW211bEFkZEZ1bmN0aW9uIGNhbGxXaXRoQXJndW1l
bnRzOkBbIEBbIEAyLCBANCwgQDggXSwgQHsgQCJ4IjpAMC41LCBAInkiOkA0MiB9IF1dOworLy8g
ICAgICAgICBjaGVja1Jlc3VsdChAIm11bEFkZEZ1bmN0aW9uIiwgcmVzdWx0LmlzT2JqZWN0ICYm
IFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAiNDMsNDQsNDYiXSk7CisvLyAgICAgfQorCisv
LyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9
IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsgICAgICAgIAorLy8gICAgICAgICBKU1ZhbHVlICph
cnJheSA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld0FycmF5SW5Db250ZXh0OmNvbnRleHRdOworLy8g
ICAgICAgICBjaGVja1Jlc3VsdChAImFycmF5TGVuZ3RoRW1wdHkiLCBbW2FycmF5W0AibGVuZ3Ro
Il0gdG9OdW1iZXJdIHVuc2lnbmVkSW50ZWdlclZhbHVlXSA9PSAwKTsKKy8vICAgICAgICAgSlNW
YWx1ZSAqdmFsdWUxID0gW0pTVmFsdWUgdmFsdWVXaXRoSW50MzI6NDIgaW5Db250ZXh0OmNvbnRl
eHRdOworLy8gICAgICAgICBKU1ZhbHVlICp2YWx1ZTIgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhJbnQz
MjoyNCBpbkNvbnRleHQ6Y29udGV4dF07CisvLyAgICAgICAgIE5TVUludGVnZXIgbG93SW5kZXgg
PSA1OworLy8gICAgICAgICBOU1VJbnRlZ2VyIG1heExlbmd0aCA9IFVJTlRfTUFYOworCisvLyAg
ICAgICAgIFthcnJheSBzZXRWYWx1ZTp2YWx1ZTEgYXRJbmRleDpsb3dJbmRleF07CisvLyAgICAg
ICAgIGNoZWNrUmVzdWx0KEAiYXJyYXkubGVuZ3RoIGFmdGVyIHB1dCB0byBsb3cgaW5kZXgiLCBb
W2FycmF5W0AibGVuZ3RoIl0gdG9OdW1iZXJdIHVuc2lnbmVkSW50ZWdlclZhbHVlXSA9PSAobG93
SW5kZXggKyAxKSk7CisKKy8vICAgICAgICAgW2FycmF5IHNldFZhbHVlOnZhbHVlMSBhdEluZGV4
OihtYXhMZW5ndGggLSAxKV07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiYXJyYXkubGVuZ3Ro
IGFmdGVyIHB1dCB0byBtYXhMZW5ndGggLSAxIiwgW1thcnJheVtAImxlbmd0aCJdIHRvTnVtYmVy
XSB1bnNpZ25lZEludGVnZXJWYWx1ZV0gPT0gbWF4TGVuZ3RoKTsKKworLy8gICAgICAgICBbYXJy
YXkgc2V0VmFsdWU6dmFsdWUyIGF0SW5kZXg6bWF4TGVuZ3RoXTsKKy8vICAgICAgICAgY2hlY2tS
ZXN1bHQoQCJhcnJheS5sZW5ndGggYWZ0ZXIgcHV0IHRvIG1heExlbmd0aCIsIFtbYXJyYXlbQCJs
ZW5ndGgiXSB0b051bWJlcl0gdW5zaWduZWRJbnRlZ2VyVmFsdWVdID09IG1heExlbmd0aCk7CisK
Ky8vICAgICAgICAgW2FycmF5IHNldFZhbHVlOnZhbHVlMiBhdEluZGV4OihtYXhMZW5ndGggKyAx
KV07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiYXJyYXkubGVuZ3RoIGFmdGVyIHB1dCB0byBt
YXhMZW5ndGggKyAxIiwgW1thcnJheVtAImxlbmd0aCJdIHRvTnVtYmVyXSB1bnNpZ25lZEludGVn
ZXJWYWx1ZV0gPT0gbWF4TGVuZ3RoKTsKKworLy8gICAgICAgICBpZiAoc2l6ZW9mKE5TVUludGVn
ZXIpID09IDgpCisvLyAgICAgICAgICAgICBjaGVja1Jlc3VsdChAInZhbHVlQXRJbmRleDowIGlz
IHVuZGVmaW5lZCIsIFthcnJheSB2YWx1ZUF0SW5kZXg6MF0uaXNVbmRlZmluZWQpOworLy8gICAg
ICAgICBlbHNlCisvLyAgICAgICAgICAgICBjaGVja1Jlc3VsdChAInZhbHVlQXRJbmRleDowIiwg
W1thcnJheSB2YWx1ZUF0SW5kZXg6MF0gdG9JbnQzMl0gPT0gMjQpOworLy8gICAgICAgICBjaGVj
a1Jlc3VsdChAInZhbHVlQXRJbmRleDpsb3dJbmRleCIsIFtbYXJyYXkgdmFsdWVBdEluZGV4Omxv
d0luZGV4XSB0b0ludDMyXSA9PSA0Mik7CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAidmFsdWVB
dEluZGV4Om1heExlbmd0aCAtIDEiLCBbW2FycmF5IHZhbHVlQXRJbmRleDoobWF4TGVuZ3RoIC0g
MSldIHRvSW50MzJdID09IDQyKTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJ2YWx1ZUF0SW5k
ZXg6bWF4TGVuZ3RoIiwgW1thcnJheSB2YWx1ZUF0SW5kZXg6bWF4TGVuZ3RoXSB0b0ludDMyXSA9
PSAyNCk7CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAidmFsdWVBdEluZGV4Om1heExlbmd0aCAr
IDEiLCBbW2FycmF5IHZhbHVlQXRJbmRleDoobWF4TGVuZ3RoICsgMSldIHRvSW50MzJdID09IDI0
KTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlND
b250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBK
U1ZhbHVlICpvYmplY3QgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6Y29u
dGV4dF07CisKKy8vICAgICAgICAgb2JqZWN0W0AicG9pbnQiXSA9IEB7IEAieCI6QDEsIEAieSI6
QDIgfTsKKy8vICAgICAgICAgb2JqZWN0W0AicG9pbnQiXVtAIngiXSA9IEAzOworLy8gICAgICAg
ICBDR1BvaW50IHBvaW50ID0gW29iamVjdFtAInBvaW50Il0gdG9Qb2ludF07CisvLyAgICAgICAg
IGNoZWNrUmVzdWx0KEAidG9Qb2ludCIsIHBvaW50LnggPT0gMyAmJiBwb2ludC55ID09IDIpOwor
CisvLyAgICAgICAgIG9iamVjdFtAeyBAInRvU3RyaW5nIjpeeyByZXR1cm4gQCJmb28iOyB9IH1d
ID0gQCJiYXIiOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAInRvU3RyaW5nIGluIG9iamVjdCBs
aXRlcmFsIHVzZWQgYXMgc3Vic2NyaXB0IiwgW1tvYmplY3RbQCJmb28iXSB0b1N0cmluZ10gaXNF
cXVhbDpAImJhciJdKTsKKworLy8gICAgICAgICBvYmplY3RbW0AiZm9vYmFyIiBzdWJzdHJpbmdU
b0luZGV4OjNdXSA9IEAiYmFyIjsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJzdWJzdHJpbmcg
dXNlZCBhcyBzdWJzY3JpcHQiLCBbW29iamVjdFtAImZvbyJdIHRvU3RyaW5nXSBpc0VxdWFsOkAi
YmFyIl0pOworLy8gICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAg
ICAgIFRleHRYWVogKnRlc3RYWVogPSBbW1RleHRYWVogYWxsb2NdIGluaXRdOworLy8gICAgICAg
ICBjb250ZXh0W0AidGVzdFhZWiJdID0gdGVzdFhZWjsKKy8vICAgICAgICAgdGVzdFhZWi54ID0g
MzsKKy8vICAgICAgICAgdGVzdFhZWi55ID0gNDsKKy8vICAgICAgICAgdGVzdFhZWi56ID0gNTsK
Ky8vICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0ZXN0WFlaLnggPSAxMzsgdGVz
dFhZWi55ID0gMTQ7Il07CisvLyAgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVz
dFhZWi50ZXN0KCd0ZXN0JykiXTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJUZXh0WFlaIC0g
dGVzdFhZWlRlc3RlZCIsIHRlc3RYWVpUZXN0ZWQpOworLy8gICAgICAgICBKU1ZhbHVlICpyZXN1
bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RYWVoueCArICcsJyArIHRlc3RYWVou
eSArICcsJyArIHRlc3RYWVoueiJdOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAIlRleHRYWVog
LSByZXN1bHQiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIjEzLDQsdW5kZWZpbmVkIl0pOwor
Ly8gICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAgIFtjb250
ZXh0W0AiT2JqZWN0Il1bQCJwcm90b3R5cGUiXSBkZWZpbmVQcm9wZXJ0eTpAImdldHRlclByb3Bl
cnR5IiBkZXNjcmlwdG9yOkB7CisvLyAgICAgICAgICAgICBKU1Byb3BlcnR5RGVzY3JpcHRvckdl
dEtleTpeeworLy8gICAgICAgICAgICAgICAgIHJldHVybiBbSlNDb250ZXh0IGN1cnJlbnRUaGlz
XVtAIngiXTsKKy8vICAgICAgICAgICAgIH0KKy8vICAgICAgICAgfV07CisvLyAgICAgICAgIEpT
VmFsdWUgKm9iamVjdCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpAeyBAIngiOkAxMDEgfSBp
bkNvbnRleHQ6Y29udGV4dF07CisvLyAgICAgICAgIGludCByZXN1bHQgPSBbb2JqZWN0IFtAImdl
dHRlclByb3BlcnR5Il0gdG9JbnQzMl07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiZ2V0dGVy
UHJvcGVydHkiLCByZXN1bHQgPT0gMTAxKTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxs
b2NdIGluaXRdOworLy8gICAgICAgICBjb250ZXh0W0AiY29uY2F0ZW5hdGUiXSA9IF57CisvLyAg
ICAgICAgICAgICBOU0FycmF5ICphcmd1bWVudHMgPSBbSlNDb250ZXh0IGN1cnJlbnRBcmd1bWVu
dHNdOworLy8gICAgICAgICAgICAgaWYgKCFbYXJndW1lbnRzIGNvdW50XSkKKy8vICAgICAgICAg
ICAgICAgICByZXR1cm4gQCIiOworLy8gICAgICAgICAgICAgTlNTdHJpbmcgKm1lc3NhZ2UgPSBb
YXJndW1lbnRzWzBdIGRlc2NyaXB0aW9uXTsKKy8vICAgICAgICAgICAgIGZvciAoTlNVSW50ZWdl
ciBpbmRleCA9IDE7IGluZGV4IDwgW2FyZ3VtZW50cyBjb3VudF07ICsraW5kZXgpCisvLyAgICAg
ICAgICAgICAgICAgbWVzc2FnZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgJUAi
LCBtZXNzYWdlLCBhcmd1bWVudHNbaW5kZXhdXTsKKy8vICAgICAgICAgICAgIHJldHVybiBtZXNz
YWdlOworLy8gICAgICAgICB9OworLy8gICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4
dCBldmFsdWF0ZVNjcmlwdDpAImNvbmNhdGVuYXRlKCdIZWxsbywnLCAnV29ybGQhJykiXTsKKy8v
ICAgICAgICAgY2hlY2tSZXN1bHQoQCJjb25jYXRlbmF0ZSIsIFtyZXN1bHQgaXNFcXVhbFRvT2Jq
ZWN0OkAiSGVsbG8sIFdvcmxkISJdKTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2Nd
IGluaXRdOworLy8gICAgICAgICBjb250ZXh0W0AiZm9vIl0gPSBAWUVTOworLy8gICAgICAgICBj
aGVja1Jlc3VsdChAIkBZRVMgaXMgYm9vbGVhbiIsIFtjb250ZXh0W0AiZm9vIl0gaXNCb29sZWFu
XSk7CisvLyAgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OkAidHlwZW9mIGZvbyJdOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAIkBZRVMgaXMgYm9vbGVh
biIsIFtyZXN1bHQgaXNFcXVhbFRvT2JqZWN0OkAiYm9vbGVhbiJdKTsKKy8vICAgICB9CisKKy8v
ICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBb
Y29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIlN0cmluZyhjb25zb2xlKSJdOworLy8gICAgICAgICBj
aGVja1Jlc3VsdChAIlN0cmluZyhjb25zb2xlKSIsIFtyZXN1bHQgaXNFcXVhbFRvT2JqZWN0OkAi
W29iamVjdCBjb25zb2xlXSJdKTsKKy8vICAgICAgICAgcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCJ0eXBlb2YgY29uc29sZS5sb2ciXTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQo
QCJ0eXBlb2YgY29uc29sZS5sb2ciLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAImZ1bmN0aW9u
Il0pOworLy8gICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAg
IFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKy8vICAg
ICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisvLyAgICAgICAgIEpT
VmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiU3RyaW5nKHRlc3RPYmpl
Y3QpIl07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiU3RyaW5nKHRlc3RPYmplY3QpIiwgW3Jl
c3VsdCBpc0VxdWFsVG9PYmplY3Q6QCJbb2JqZWN0IFRlc3RPYmplY3RdIl0pOworLy8gICAgIH0K
KworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAgIFRlc3RPYmplY3QqIHRl
c3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKy8vICAgICAgICAgY29udGV4dFtA
InRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisvLyAgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9
IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiU3RyaW5nKHRlc3RPYmplY3QuX19wcm90b19fKSJd
OworLy8gICAgICAgICBjaGVja1Jlc3VsdChAIlN0cmluZyh0ZXN0T2JqZWN0Ll9fcHJvdG9fXyki
LCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIltvYmplY3QgVGVzdE9iamVjdFByb3RvdHlwZV0i
XSk7CisvLyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAg
Y29udGV4dFtAIlRlc3RPYmplY3QiXSA9IFtUZXN0T2JqZWN0IGNsYXNzXTsKKy8vICAgICAgICAg
SlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJTdHJpbmcoVGVzdE9i
amVjdCkiXTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJTdHJpbmcoVGVzdE9iamVjdCkiLCBb
cmVzdWx0IGlzRXF1YWxUb09iamVjdDpAImZ1bmN0aW9uIFRlc3RPYmplY3QoKSB7XG4gICAgW25h
dGl2ZSBjb2RlXVxufSJdKTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
Ky8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRd
OworLy8gICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpb
VGVzdE9iamVjdCBjbGFzc10gaW5Db250ZXh0OmNvbnRleHRdOworLy8gICAgICAgICBjaGVja1Jl
c3VsdChAIlt2YWx1ZSB0b09iamVjdF0gPT0gW1Rlc3RPYmplY3QgY2xhc3NdIiwgW3ZhbHVlIHRv
T2JqZWN0XSA9PSBbVGVzdE9iamVjdCBjbGFzc10pOworLy8gICAgIH0KKworLy8gICAgIEBhdXRv
cmVsZWFzZXBvb2wgeworLy8gICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4
dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAgIGNvbnRleHRbQCJUZXN0T2JqZWN0Il0gPSBbVGVz
dE9iamVjdCBjbGFzc107CisvLyAgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2
YWx1YXRlU2NyaXB0OkAiVGVzdE9iamVjdC5wYXJlbnRUZXN0KCkiXTsKKy8vICAgICAgICAgY2hl
Y2tSZXN1bHQoQCJUZXN0T2JqZWN0LnBhcmVudFRlc3QoKSIsIFtyZXN1bHQgaXNFcXVhbFRvT2Jq
ZWN0OkAiVGVzdE9iamVjdCJdKTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGlu
aXRdOworLy8gICAgICAgICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVz
dE9iamVjdF07CisvLyAgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0QSJdID0gdGVzdE9iamVj
dDsKKy8vICAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3RCIl0gPSB0ZXN0T2JqZWN0OworLy8g
ICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RP
YmplY3RBID09IHRlc3RPYmplY3RCIl07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9i
amVjdEEgPT0gdGVzdE9iamVjdEIiLCByZXN1bHQuaXNCb29sZWFuICYmIFtyZXN1bHQgdG9Cb29s
XSk7CisvLyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAg
VGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworLy8gICAg
ICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKy8vICAgICAgICAgdGVz
dE9iamVjdC5wb2ludCA9IChDR1BvaW50KXszLDR9OworLy8gICAgICAgICBKU1ZhbHVlICpyZXN1
bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInZhciByZXN1bHQgPSBKU09OLnN0cmluZ2lm
eSh0ZXN0T2JqZWN0LnBvaW50KTsgdGVzdE9iamVjdC5wb2ludCA9IHt4OjEyLHk6MTR9OyByZXN1
bHQiXTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LnBvaW50IC0gcmVzdWx0
IiwgW3Jlc3VsdCBpc0VxdWFsVG9PYmplY3Q6QCJ7XCJ4XCI6MyxcInlcIjo0fSJdKTsKKy8vICAg
ICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LnBvaW50IC0ge3g6MTIseToxNH0iLCB0ZXN0
T2JqZWN0LnBvaW50LnggPT0gMTIgJiYgdGVzdE9iamVjdC5wb2ludC55ID09IDE0KTsKKy8vICAg
ICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBUZXN0T2JqZWN0
KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisvLyAgICAgICAgIHRlc3RP
YmplY3Quc2l4ID0gNjsKKy8vICAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RP
YmplY3Q7CisvLyAgICAgICAgIGNvbnRleHRbQCJtdWwiXSA9IF4oaW50IHgsIGludCB5KXsgcmV0
dXJuIHggKiB5OyB9OworLy8gICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFs
dWF0ZVNjcmlwdDpAIm11bCh0ZXN0T2JqZWN0LnNpeCwgNykiXTsKKy8vICAgICAgICAgY2hlY2tS
ZXN1bHQoQCJtdWwodGVzdE9iamVjdC5zaXgsIDcpIiwgcmVzdWx0LmlzTnVtYmVyICYmIFtyZXN1
bHQgdG9JbnQzMl0gPT0gNDIpOworLy8gICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wg
eworLy8gICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5p
dF07CisvLyAgICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0
T2JqZWN0XTsKKy8vICAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7
CisvLyAgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il1bQCJ2YXJpYWJsZSJdID0gQDQ7Cisv
LyAgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKyt0ZXN0T2JqZWN0LnZhcmlhYmxl
Il07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiKyt0ZXN0T2JqZWN0LnZhcmlhYmxlIiwgdGVz
dE9iamVjdC52YXJpYWJsZSA9PSA1KTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2Nd
IGluaXRdOworLy8gICAgICAgICBjb250ZXh0W0AicG9pbnQiXSA9IEB7IEAieCI6QDYsIEAieSI6
QDcgfTsKKy8vICAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3Jp
cHQ6QCJwb2ludC54ICsgJywnICsgcG9pbnQueSJdOworLy8gICAgICAgICBjaGVja1Jlc3VsdChA
InBvaW50LnggKyAnLCcgKyBwb2ludC55IiwgW3Jlc3VsdCBpc0VxdWFsVG9PYmplY3Q6QCI2LDci
XSk7CisvLyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAg
Y29udGV4dFtAInBvaW50Il0gPSBAeyBAIngiOkA2LCBAInkiOkA3IH07CisvLyAgICAgICAgIEpT
VmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAicG9pbnQueCArICcsJyAr
IHBvaW50LnkiXTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJwb2ludC54ICsgJywnICsgcG9p
bnQueSIsIFtyZXN1bHQgaXNFcXVhbFRvT2JqZWN0OkAiNiw3Il0pOworLy8gICAgIH0KKworLy8g
ICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
W0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmpl
Y3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKy8vICAgICAgICAgY29udGV4dFtAInRlc3RP
YmplY3QiXSA9IHRlc3RPYmplY3Q7CisvLyAgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250
ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9iamVjdC5nZXRTdHJpbmcoKSJdOworLy8gICAgICAg
ICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QuZ2V0U3RyaW5nKCkiLCByZXN1bHQuaXNTdHJpbmcg
JiYgW3Jlc3VsdCB0b0ludDMyXSA9PSA0Mik7CisvLyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisvLyAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFs
bG9jXSBpbml0XTsKKy8vICAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2Jq
ZWN0IHRlc3RPYmplY3RdOworLy8gICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVz
dE9iamVjdDsKKy8vICAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVT
Y3JpcHQ6QCJ0ZXN0T2JqZWN0LnRlc3RBcmd1bWVudFR5cGVzKDEwMSwwLjUsdHJ1ZSwnZm9vJyw2
NjYsW2ZhbHNlLCdiYXInLGZhbHNlXSx7eDonYmF6J30pIl07CisvLyAgICAgICAgIGNoZWNrUmVz
dWx0KEAidGVzdE9iamVjdC50ZXN0QXJndW1lbnRUeXBlcyIsIFtyZXN1bHQgaXNFcXVhbFRvT2Jq
ZWN0OkAiMTAxLDAuNSwxLGZvbyw2NjYsYmFyLGJheiJdKTsKKy8vICAgICB9CisKKy8vICAgICBA
YXV0b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0Nv
bnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0g
W1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisvLyAgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0
Il0gPSB0ZXN0T2JqZWN0OworLy8gICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBl
dmFsdWF0ZVNjcmlwdDpAInRlc3RPYmplY3QuZ2V0U3RyaW5nLmNhbGwodGVzdE9iamVjdCkiXTsK
Ky8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LmdldFN0cmluZy5jYWxsKHRlc3RP
YmplY3QpIiwgcmVzdWx0LmlzU3RyaW5nICYmIFtyZXN1bHQgdG9JbnQzMl0gPT0gNDIpOworLy8g
ICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAgIFRlc3RPYmpl
Y3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKy8vICAgICAgICAgY29u
dGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisvLyAgICAgICAgIGNoZWNrUmVzdWx0
KEAidGVzdE9iamVjdC5nZXRTdHJpbmcuY2FsbCh7fSkgcHJlIiwgIWNvbnRleHQuZXhjZXB0aW9u
KTsKKy8vICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0ZXN0T2JqZWN0LmdldFN0
cmluZy5jYWxsKHt9KSJdOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QuZ2V0
U3RyaW5nLmNhbGwoe30pIHBvc3QiLCBjb250ZXh0LmV4Y2VwdGlvbik7CisvLyAgICAgfQorCisv
LyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9
IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAgVGVzdE9iamVjdCogdGVzdE9i
amVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworLy8gICAgICAgICBjb250ZXh0W0AidGVz
dE9iamVjdCJdID0gdGVzdE9iamVjdDsKKy8vICAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2Nv
bnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ2YXIgcmVzdWx0ID0gMDsgdGVzdE9iamVjdC5jYWxsYmFj
ayhmdW5jdGlvbih4KXsgcmVzdWx0ID0geDsgfSk7IHJlc3VsdCJdOworLy8gICAgICAgICBjaGVj
a1Jlc3VsdChAInRlc3RPYmplY3QuY2FsbGJhY2siLCByZXN1bHQuaXNOdW1iZXIgJiYgW3Jlc3Vs
dCB0b0ludDMyXSA9PSA0Mik7CisvLyAgICAgICAgIHJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAidGVzdE9iamVjdC5ib2d1c0NhbGxiYWNrIl07CisvLyAgICAgICAgIGNoZWNrUmVz
dWx0KEAidGVzdE9iamVjdC5ib2d1c0NhbGxiYWNrID09IHVuZGVmaW5lZCIsIHJlc3VsdC5pc1Vu
ZGVmaW5lZCk7CisvLyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAg
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAg
ICAgICAgVGVzdE9iamVjdCAqdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOwor
Ly8gICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKy8vICAgICAg
ICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJGdW5jdGlvbi5w
cm90b3R5cGUudG9TdHJpbmcuY2FsbCh0ZXN0T2JqZWN0LmNhbGxiYWNrKSJdOworLy8gICAgICAg
ICBjaGVja1Jlc3VsdChAIkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyIsICFjb250ZXh0LmV4
Y2VwdGlvbiAmJiAhcmVzdWx0LmlzVW5kZWZpbmVkKTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0MSA9IFtbSlNDb250
ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0MiA9IFtbSlND
b250ZXh0IGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOmNvbnRleHQxLnZpcnR1YWxNYWNo
aW5lXTsKKy8vICAgICAgICAgSlNWYWx1ZSAqdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhEb3Vi
bGU6NDIgaW5Db250ZXh0OmNvbnRleHQyXTsKKy8vICAgICAgICAgY29udGV4dDFbQCJwYXNzVmFs
dWVCZXR3ZWVuQ29udGV4dHMiXSA9IHZhbHVlOworLy8gICAgICAgICBKU1ZhbHVlICpyZXN1bHQg
PSBbY29udGV4dDEgZXZhbHVhdGVTY3JpcHQ6QCJwYXNzVmFsdWVCZXR3ZWVuQ29udGV4dHMiXTsK
Ky8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJbdmFsdWUgaXNFcXVhbFRvT2JqZWN0OnJlc3VsdF0i
LCBbdmFsdWUgaXNFcXVhbFRvT2JqZWN0OnJlc3VsdF0pOworLy8gICAgIH0KKworLy8gICAgIEBh
dXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29u
dGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAgIGNvbnRleHRbQCJoYW5kbGVUaGVEaWN0aW9u
YXJ5Il0gPSBeKE5TRGljdGlvbmFyeSAqZGljdCkgeworLy8gICAgICAgICAgICAgTlNEaWN0aW9u
YXJ5ICpleHBlY3RlZERpY3QgPSBAeworLy8gICAgICAgICAgICAgICAgIEAiZm9vIjogQCgxKSwK
Ky8vICAgICAgICAgICAgICAgICBAImJhciI6IEB7IEAiYmF6IjogQCgyKSB9CisvLyAgICAgICAg
ICAgICB9OworLy8gICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJyZWN1cnNpdmVseSBjb252ZXJ0
IG5lc3RlZCBkaWN0aW9uYXJpZXMiLCBbZGljdCBpc0VxdWFsVG9EaWN0aW9uYXJ5OmV4cGVjdGVk
RGljdF0pOworLy8gICAgICAgICB9OworLy8gICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlw
dDpAInZhciBteURpY3QgPSB7IFwKKy8vICAgICAgICAgICAgICdmb28nOiAxLCBcCisvLyAgICAg
ICAgICAgICAnYmFyJzogeydiYXonOiAyfSBcCisvLyAgICAgICAgIH07IFwKKy8vICAgICAgICAg
aGFuZGxlVGhlRGljdGlvbmFyeShteURpY3QpOyJdOworCisvLyAgICAgICAgIGNvbnRleHRbQCJo
YW5kbGVUaGVBcnJheSJdID0gXihOU0FycmF5ICphcnJheSkgeworLy8gICAgICAgICAgICAgTlNB
cnJheSAqZXhwZWN0ZWRBcnJheSA9IEBbQCJmb28iLCBAImJhciIsIEBbQCJiYXoiXV07CisvLyAg
ICAgICAgICAgICBjaGVja1Jlc3VsdChAInJlY3Vyc2l2ZWx5IGNvbnZlcnQgbmVzdGVkIGFycmF5
cyIsIFthcnJheSBpc0VxdWFsVG9BcnJheTpleHBlY3RlZEFycmF5XSk7CisvLyAgICAgICAgIH07
CisvLyAgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidmFyIG15QXJyYXkgPSBbJ2Zv
bycsICdiYXInLCBbJ2JheiddXTsgaGFuZGxlVGhlQXJyYXkobXlBcnJheSk7Il07CisvLyAgICAg
fQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAgVGVzdE9iamVjdCAq
dGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworLy8gICAgICAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKy8vICAgICAgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0
T2JqZWN0OworLy8gICAgICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ2YXIgY29u
c3RydWN0b3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGVzdE9iamVjdCkuY29uc3RydWN0b3I7
IGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IHVuZGVmaW5lZDsiXTsKKy8vICAgICAgICAgICAgIFtj
b250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9iamVjdCA9IHVuZGVmaW5lZCJdOworLy8gICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JE
ZWJ1Z2dpbmcoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7Ci0KLSAgICAgICAgQGF1dG9y
ZWxlYXNlcG9vbCB7Ci0gICAgICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9i
amVjdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAg
IFRleHRYWVogKnRlc3RYWVogPSBbW1RleHRYWVogYWxsb2NdIGluaXRdOwotCi0gICAgICAgIEBh
dXRvcmVsZWFzZXBvb2wgewotICAgICAgICAgICAgY29udGV4dFtAInRlc3RYWVoiXSA9IHRlc3RY
WVo7Ci0KLSAgICAgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiIFwKLSAgICAgICAg
ICAgICAgICBkaWRDbGljayA9IGZhbHNlOyBcCi0gICAgICAgICAgICAgICAgdGVzdFhZWi5vbmNs
aWNrID0gZnVuY3Rpb24oKSB7IFwKLSAgICAgICAgICAgICAgICAgICAgZGlkQ2xpY2sgPSB0cnVl
OyBcCi0gICAgICAgICAgICAgICAgfTsgXAotICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICAgICAgdGVzdFhZWi53ZWFrT25jbGljayA9IGZ1bmN0aW9uKCkgeyBcCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiAnZm9vJzsgXAotICAgICAgICAgICAgICAgIH07IFwKLSAgICAgICAgICAg
ICJdOwotICAgICAgICB9Ci0KLSAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgICAg
ICBbdGVzdFhZWiBjbGlja107Ci0gICAgICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4
dCBldmFsdWF0ZVNjcmlwdDpAImRpZENsaWNrIl07Ci0gICAgICAgICAgICBjaGVja1Jlc3VsdChA
IkV2ZW50IGhhbmRsZXIgb25jbGljayIsIFtyZXN1bHQgdG9Cb29sXSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRleHQg
SlNHbG9iYWxDb250ZXh0UmVmXSk7Ci0KLSAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RY
WVoub25jbGljayJdOwotICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJvbmNsaWNrIHN0aWxsIGFy
b3VuZCBhZnRlciBHQyIsICEocmVzdWx0LmlzTnVsbCB8fCByZXN1bHQuaXNVbmRlZmluZWQpKTsK
LSAgICAgICAgfQotCi0KLSAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgICAgICBK
U1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RYWVoud2Vha09u
Y2xpY2siXTsKLSAgICAgICAgICAgIGNoZWNrUmVzdWx0KEAid2Vha09uY2xpY2sgbm90IGFyb3Vu
ZCBhZnRlciBHQyIsIHJlc3VsdC5pc051bGwgfHwgcmVzdWx0LmlzVW5kZWZpbmVkKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICAgICAgW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCIgXAotICAgICAgICAgICAgICAgIGRpZENsaWNrID0gZmFsc2U7IFwK
LSAgICAgICAgICAgICAgICB0ZXN0WFlaID0gbnVsbDsgXAotICAgICAgICAgICAgIl07Ci0gICAg
ICAgIH0KLQotICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmco
W2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7Ci0KLSAgICAgICAgQGF1dG9yZWxlYXNlcG9v
bCB7Ci0gICAgICAgICAgICBbdGVzdFhZWiBjbGlja107Ci0gICAgICAgICAgICBKU1ZhbHVlICpy
ZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImRpZENsaWNrIl07Ci0gICAgICAgICAg
ICBjaGVja1Jlc3VsdChAIkV2ZW50IGhhbmRsZXIgb25jbGljayBkb2Vzbid0IGZpcmUiLCAhW3Jl
c3VsdCB0b0Jvb2xdKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wg
ewotICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07
Ci0gICAgICAgIFRpbnlET01Ob2RlICpyb290ID0gW1tUaW55RE9NTm9kZSBhbGxvY10gaW5pdFdp
dGhWaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lXTsKLSAgICAgICAgVGlueURP
TU5vZGUgKmxhc3ROb2RlID0gcm9vdDsKLSAgICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBp
IDwgMzsgaSsrKSB7Ci0gICAgICAgICAgICBUaW55RE9NTm9kZSAqbmV3Tm9kZSA9IFtbVGlueURP
TU5vZGUgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGlu
ZV07Ci0gICAgICAgICAgICBbbGFzdE5vZGUgYXBwZW5kQ2hpbGQ6bmV3Tm9kZV07Ci0gICAgICAg
ICAgICBsYXN0Tm9kZSA9IG5ld05vZGU7Ci0gICAgICAgIH0KLQotICAgICAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKLSAgICAgICAgICAgIGNvbnRleHRbQCJyb290Il0gPSByb290OwotICAgICAgICAg
ICAgY29udGV4dFtAImdldExhc3ROb2RlSW5DaGFpbiJdID0gXihUaW55RE9NTm9kZSAqaGVhZCl7
Ci0gICAgICAgICAgICAgICAgVGlueURPTU5vZGUgKmxhc3ROb2RlID0gbmlsOwotICAgICAgICAg
ICAgICAgIHdoaWxlIChoZWFkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3ROb2RlID0gaGVh
ZDsKLSAgICAgICAgICAgICAgICAgICAgaGVhZCA9IFtsYXN0Tm9kZSBjaGlsZEF0SW5kZXg6MF07
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBsYXN0Tm9kZTsKLSAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImdldExh
c3ROb2RlSW5DaGFpbihyb290KS5teUN1c3RvbVByb3BlcnR5ID0gNDI7Il07Ci0gICAgICAgIH0K
LQotICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRl
eHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7Ci0KLSAgICAgICAgSlNWYWx1ZSAqbXlDdXN0b21Qcm9w
ZXJ0eSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiZ2V0TGFzdE5vZGVJbkNoYWluKHJvb3Qp
Lm15Q3VzdG9tUHJvcGVydHkiXTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJNeSBjdXN0b20gcHJv
cGVydHkgPT0gNDIiLCBteUN1c3RvbVByb3BlcnR5LmlzTnVtYmVyICYmIFtteUN1c3RvbVByb3Bl
cnR5IHRvSW50MzJdID09IDQyKTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAg
ICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAg
ICAgICBUaW55RE9NTm9kZSAqcm9vdCA9IFtbVGlueURPTU5vZGUgYWxsb2NdIGluaXRXaXRoVmly
dHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZV07Ci0gICAgICAgIFRpbnlET01Ob2Rl
ICpsYXN0Tm9kZSA9IHJvb3Q7Ci0gICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IDM7
IGkrKykgewotICAgICAgICAgICAgVGlueURPTU5vZGUgKm5ld05vZGUgPSBbW1RpbnlET01Ob2Rl
IGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmVdOwot
ICAgICAgICAgICAgW2xhc3ROb2RlIGFwcGVuZENoaWxkOm5ld05vZGVdOwotICAgICAgICAgICAg
bGFzdE5vZGUgPSBuZXdOb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgQGF1dG9yZWxlYXNlcG9v
bCB7Ci0gICAgICAgICAgICBjb250ZXh0W0Aicm9vdCJdID0gcm9vdDsKLSAgICAgICAgICAgIGNv
bnRleHRbQCJnZXRMYXN0Tm9kZUluQ2hhaW4iXSA9IF4oVGlueURPTU5vZGUgKmhlYWQpewotICAg
ICAgICAgICAgICAgIFRpbnlET01Ob2RlICpsYXN0Tm9kZSA9IG5pbDsKLSAgICAgICAgICAgICAg
ICB3aGlsZSAoaGVhZCkgewotICAgICAgICAgICAgICAgICAgICBsYXN0Tm9kZSA9IGhlYWQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGhlYWQgPSBbbGFzdE5vZGUgY2hpbGRBdEluZGV4OjBdOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gbGFzdE5vZGU7Ci0gICAgICAg
ICAgICB9OwotICAgICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJnZXRMYXN0Tm9k
ZUluQ2hhaW4ocm9vdCkubXlDdXN0b21Qcm9wZXJ0eSA9IDQyOyJdOwotCi0gICAgICAgICAgICBb
cm9vdCBhcHBlbmRDaGlsZDpbcm9vdCBjaGlsZEF0SW5kZXg6MF1dOwotICAgICAgICAgICAgW3Jv
b3QgcmVtb3ZlQ2hpbGRBdEluZGV4OjBdOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNTeW5jaHJv
bm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJl
Zl0pOwotCi0gICAgICAgIEpTVmFsdWUgKm15Q3VzdG9tUHJvcGVydHkgPSBbY29udGV4dCBldmFs
dWF0ZVNjcmlwdDpAImdldExhc3ROb2RlSW5DaGFpbihyb290KS5teUN1c3RvbVByb3BlcnR5Il07
Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiZHVwbGljYXRlIGNhbGxzIHRvIGFkZE1hbmFnZWRSZWZl
cmVuY2UgZG9uJ3QgY2F1c2UgdGhpbmdzIHRvIGRpZSIsIG15Q3VzdG9tUHJvcGVydHkuaXNOdW1i
ZXIgJiYgW215Q3VzdG9tUHJvcGVydHkgdG9JbnQzMl0gPT0gNDIpOwotICAgIH0KLQotICAgIEBh
dXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4
dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIEpTVmFsdWUgKm8gPSBbSlNWYWx1ZSB2YWx1ZVdpdGhO
ZXdPYmplY3RJbkNvbnRleHQ6Y29udGV4dF07Ci0gICAgICAgIG9bQCJmb28iXSA9IEAiZm9vIjsK
LSAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0
IEpTR2xvYmFsQ29udGV4dFJlZl0pOwotCi0gICAgICAgIGNoZWNrUmVzdWx0KEAiSlNWYWx1ZSBj
b3JyZWN0bHkgcHJvdGVjdGVkIGl0cyBpbnRlcm5hbCB2YWx1ZSIsIFtbb1tAImZvbyJdIHRvU3Ry
aW5nXSBpc0VxdWFsVG9TdHJpbmc6QCJmb28iXSk7Ci0gICAgfQotCi0gICAgQGF1dG9yZWxlYXNl
cG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBp
bml0XTsKLSAgICAgICAgVGVzdE9iamVjdCAqdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RP
YmplY3RdOwotICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKLSAg
ICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0ZXN0T2JqZWN0Ll9fbG9va3VwR2V0dGVy
X18oJ3ZhcmlhYmxlJykuY2FsbCh7fSkiXTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJNYWtlIHN1
cmUgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gY2FsbGluZyBnZXR0ZXIgb24gaW5jb3JyZWN0
IHx0aGlzfCIsIGNvbnRleHQuZXhjZXB0aW9uKTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb3VudCA9IDEwMDsKLSAg
ICAgICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENh
cGFjaXR5OmNvdW50XTsKLSAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQg
YWxsb2NdIGluaXRdOwotICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgSlNW
YWx1ZSAqb2JqZWN0ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0OmNvbnRl
eHRdOwotICAgICAgICAgICAgICAgIEpTTWFuYWdlZFZhbHVlICptYW5hZ2VkT2JqZWN0ID0gW0pT
TWFuYWdlZFZhbHVlIG1hbmFnZWRWYWx1ZVdpdGhWYWx1ZTpvYmplY3RdOwotICAgICAgICAgICAg
ICAgIFthcnJheSBhZGRPYmplY3Q6bWFuYWdlZE9iamVjdF07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtj
b250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgIFtjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGFk
ZE1hbmFnZWRSZWZlcmVuY2U6YXJyYXlbaV0gd2l0aE93bmVyOmFycmF5XTsKLSAgICB9Ci0KLSAg
ICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgVGVzdE9iamVjdCAqdGVzdE9iamVjdCA9IFtU
ZXN0T2JqZWN0IHRlc3RPYmplY3RdOwotICAgICAgICBKU01hbmFnZWRWYWx1ZSAqbWFuYWdlZFRl
c3RPYmplY3Q7Ci0gICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICAgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAgICAgICAgY29u
dGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7Ci0gICAgICAgICAgICBtYW5hZ2VkVGVz
dE9iamVjdCA9IFtKU01hbmFnZWRWYWx1ZSBtYW5hZ2VkVmFsdWVXaXRoVmFsdWU6Y29udGV4dFtA
InRlc3RPYmplY3QiXV07Ci0gICAgICAgICAgICBbY29udGV4dC52aXJ0dWFsTWFjaGluZSBhZGRN
YW5hZ2VkUmVmZXJlbmNlOm1hbmFnZWRUZXN0T2JqZWN0IHdpdGhPd25lcjp0ZXN0T2JqZWN0XTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0Nv
bnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIFRlc3RP
YmplY3QgKnRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKLSAgICAgICAgY29u
dGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7Ci0gICAgICAgIEpTTWFuYWdlZFZhbHVl
ICptYW5hZ2VkVmFsdWUgPSBuaWw7Ci0gICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAg
ICAgICAgSlNWYWx1ZSAqb2JqZWN0ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250
ZXh0OmNvbnRleHRdOwotICAgICAgICAgICAgbWFuYWdlZFZhbHVlID0gW0pTTWFuYWdlZFZhbHVl
IG1hbmFnZWRWYWx1ZVdpdGhWYWx1ZTpvYmplY3QgYW5kT3duZXI6dGVzdE9iamVjdF07Ci0gICAg
ICAgICAgICBbY29udGV4dC52aXJ0dWFsTWFjaGluZSBhZGRNYW5hZ2VkUmVmZXJlbmNlOm1hbmFn
ZWRWYWx1ZSB3aXRoT3duZXI6dGVzdE9iamVjdF07Ci0gICAgICAgIH0KLSAgICAgICAgSlNTeW5j
aHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4
dFJlZl0pOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIGNvbnRleHRb
QCJNeUNsYXNzIl0gPSBeewotICAgICAgICAgICAgSlNWYWx1ZSAqbmV3VGhpcyA9IFtKU1ZhbHVl
IHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XV07
Ci0gICAgICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9IFtbSlNDb250ZXh0
IGN1cnJlbnRDb250ZXh0XSBKU0dsb2JhbENvbnRleHRSZWZdOwotICAgICAgICAgICAgSlNPYmpl
Y3RSZWYgbmV3VGhpc1JlZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0UmVmLCBbbmV3VGhpcyBK
U1ZhbHVlUmVmXSwgTlVMTCk7Ci0gICAgICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZShjb250
ZXh0UmVmLCBuZXdUaGlzUmVmLCBbW0pTQ29udGV4dCBjdXJyZW50Q29udGV4dF1bQCJNeUNsYXNz
Il1bQCJwcm90b3R5cGUiXSBKU1ZhbHVlUmVmXSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3VGhp
czsKLSAgICAgICAgfTsKLQotICAgICAgICBjb250ZXh0W0AiTXlPdGhlckNsYXNzIl0gPSBeewot
ICAgICAgICAgICAgSlNWYWx1ZSAqbmV3VGhpcyA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVj
dEluQ29udGV4dDpbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XV07Ci0gICAgICAgICAgICBKU0ds
b2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9IFtbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBK
U0dsb2JhbENvbnRleHRSZWZdOwotICAgICAgICAgICAgSlNPYmplY3RSZWYgbmV3VGhpc1JlZiA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0UmVmLCBbbmV3VGhpcyBKU1ZhbHVlUmVmXSwgTlVMTCk7
Ci0gICAgICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0UmVmLCBuZXdUaGlzUmVm
LCBbW0pTQ29udGV4dCBjdXJyZW50Q29udGV4dF1bQCJNeU90aGVyQ2xhc3MiXVtAInByb3RvdHlw
ZSJdIEpTVmFsdWVSZWZdKTsKLSAgICAgICAgICAgIHJldHVybiBuZXdUaGlzOwotICAgICAgICB9
OwotCi0gICAgICAgIGNvbnRleHQuZXhjZXB0aW9uSGFuZGxlciA9IF4oSlNDb250ZXh0ICpjb250
ZXh0LCBKU1ZhbHVlICpleGNlcHRpb24pIHsKLSAgICAgICAgICAgIE5TTG9nKEAiRVhDRVBUSU9O
OiAlQCIsIFtleGNlcHRpb24gdG9TdHJpbmddKTsKLSAgICAgICAgICAgIGNvbnRleHQuZXhjZXB0
aW9uID0gbmlsOwotICAgICAgICB9OwotCi0gICAgICAgIEpTVmFsdWUgKmNvbnN0cnVjdG9yMSA9
IGNvbnRleHRbQCJNeUNsYXNzIl07Ci0gICAgICAgIEpTVmFsdWUgKmNvbnN0cnVjdG9yMiA9IGNv
bnRleHRbQCJNeU90aGVyQ2xhc3MiXTsKLQotICAgICAgICBKU1ZhbHVlICp2YWx1ZTEgPSBbY29u
dGV4dCBldmFsdWF0ZVNjcmlwdDpAIm5ldyBNeUNsYXNzKCkiXTsKLSAgICAgICAgY2hlY2tSZXN1
bHQoQCJ2YWx1ZTEgaW5zdGFuY2VvZiBNeUNsYXNzIiwgW3ZhbHVlMSBpc0luc3RhbmNlT2Y6Y29u
c3RydWN0b3IxXSk7Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiISh2YWx1ZTEgaW5zdGFuY2VvZiBN
eU90aGVyQ2xhc3MpIiwgIVt2YWx1ZTEgaXNJbnN0YW5jZU9mOmNvbnN0cnVjdG9yMl0pOwotICAg
ICAgICBjaGVja1Jlc3VsdChAIk15Q2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID09PSBNeUNs
YXNzIiwgW1tjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiTXlDbGFzcy5wcm90b3R5cGUuY29uc3Ry
dWN0b3IgPT09IE15Q2xhc3MiXSB0b0Jvb2xdKTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJNeUNs
YXNzIGluc3RhbmNlb2YgRnVuY3Rpb24iLCBbW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJNeUNs
YXNzIGluc3RhbmNlb2YgRnVuY3Rpb24iXSB0b0Jvb2xdKTsKLQotICAgICAgICBKU1ZhbHVlICp2
YWx1ZTIgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIm5ldyBNeU90aGVyQ2xhc3MoKSJdOwot
ICAgICAgICBjaGVja1Jlc3VsdChAInZhbHVlMiBpbnN0YW5jZW9mIE15T3RoZXJDbGFzcyIsIFt2
YWx1ZTIgaXNJbnN0YW5jZU9mOmNvbnN0cnVjdG9yMl0pOwotICAgICAgICBjaGVja1Jlc3VsdChA
IiEodmFsdWUyIGluc3RhbmNlb2YgTXlDbGFzcykiLCAhW3ZhbHVlMiBpc0luc3RhbmNlT2Y6Y29u
c3RydWN0b3IxXSk7Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiTXlPdGhlckNsYXNzLnByb3RvdHlw
ZS5jb25zdHJ1Y3RvciA9PT0gTXlPdGhlckNsYXNzIiwgW1tjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OkAiTXlPdGhlckNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9PT0gTXlPdGhlckNsYXNzIl0g
dG9Cb29sXSk7Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiTXlPdGhlckNsYXNzIGluc3RhbmNlb2Yg
RnVuY3Rpb24iLCBbW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJNeU90aGVyQ2xhc3MgaW5zdGFu
Y2VvZiBGdW5jdGlvbiJdIHRvQm9vbF0pOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wg
ewotICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07
Ci0gICAgICAgIGNvbnRleHRbQCJNeUNsYXNzIl0gPSBeewotICAgICAgICAgICAgTlNMb2coQCJJ
J20gaW50ZW50aW9uYWxseSBub3QgcmV0dXJuaW5nIGFueXRoaW5nLiIpOwotICAgICAgICB9Owot
ICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIm5ldyBN
eUNsYXNzKCkiXTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJyZXN1bHQgPT09IHVuZGVmaW5lZCIs
IHJlc3VsdC5pc1VuZGVmaW5lZCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiZXhjZXB0aW9uLm1l
c3NhZ2UgaXMgY29ycmVjdCciLCBjb250ZXh0LmV4Y2VwdGlvbiAKLSAgICAgICAgICAgICYmIFtA
Ik9iamVjdGl2ZS1DIGJsb2NrcyBjYWxsZWQgYXMgY29uc3RydWN0b3JzIG11c3QgcmV0dXJuIGFu
IG9iamVjdC4iIGlzRXF1YWxUb1N0cmluZzpbY29udGV4dC5leGNlcHRpb25bQCJtZXNzYWdlIl0g
dG9TdHJpbmddXSk7Ci0gICAgfQotCi0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIGNo
ZWNrUmVzdWx0KEAiW0pTQ29udGV4dCBjdXJyZW50VGhpc10gPT0gbmlsIG91dHNpZGUgb2YgY2Fs
bGJhY2siLCAhW0pTQ29udGV4dCBjdXJyZW50VGhpc10pOwotICAgICAgICBjaGVja1Jlc3VsdChA
IltKU0NvbnRleHQgY3VycmVudEFyZ3VtZW50c10gPT0gbmlsIG91dHNpZGUgb2YgY2FsbGJhY2si
LCAhW0pTQ29udGV4dCBjdXJyZW50QXJndW1lbnRzXSk7Ci0gICAgICAgIGlmIChbSlNDb250ZXh0
IGN1cnJlbnRDYWxsZWVdKQotICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJbSlNDb250ZXh0IGN1
cnJlbnRDYWxsZWVdID09IG5pbCBvdXRzaWRlIG9mIGNhbGxiYWNrIiwgIVtKU0NvbnRleHQgY3Vy
cmVudENhbGxlZV0pOwotICAgIH0KLQotICAgIGlmIChbSlNDb250ZXh0IGN1cnJlbnRDYWxsZWVd
KSB7Ci0gICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAgICAgICAgICAgY29udGV4dFtA
InRlc3RGdW5jdGlvbiJdID0gXnsKLSAgICAgICAgICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RG
dW5jdGlvbi5mb28gPT09IDQyIiwgW1tKU0NvbnRleHQgY3VycmVudENhbGxlZV1bQCJmb28iXSB0
b0ludDMyXSA9PSA0Mik7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgY29udGV4dFtAInRl
c3RGdW5jdGlvbiJdW0AiZm9vIl0gPSBANDI7Ci0gICAgICAgICAgICBbY29udGV4dFtAInRlc3RG
dW5jdGlvbiJdIGNhbGxXaXRoQXJndW1lbnRzOm5pbF07Ci0KLSAgICAgICAgICAgIGNvbnRleHRb
QCJUZXN0Q29uc3RydWN0b3IiXSA9IF57Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSAqbmV3VGhp
cyA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpbSlNDb250ZXh0IGN1cnJl
bnRDb250ZXh0XV07Ci0gICAgICAgICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHRS
ZWYgPSBbW0pTQ29udGV4dCBjdXJyZW50Q29udGV4dF0gSlNHbG9iYWxDb250ZXh0UmVmXTsKLSAg
ICAgICAgICAgICAgICBKU09iamVjdFJlZiBuZXdUaGlzUmVmID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHRSZWYsIFtuZXdUaGlzIEpTVmFsdWVSZWZdLCBOVUxMKTsKLSAgICAgICAgICAgICAgICBK
U09iamVjdFNldFByb3RvdHlwZShjb250ZXh0UmVmLCBuZXdUaGlzUmVmLCBbW0pTQ29udGV4dCBj
dXJyZW50Q2FsbGVlXVtAInByb3RvdHlwZSJdIEpTVmFsdWVSZWZdKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3VGhpczsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBjaGVja1Jlc3Vs
dChAIihuZXcgVGVzdENvbnN0cnVjdG9yKSBpbnN0YW5jZW9mIFRlc3RDb25zdHJ1Y3RvciIsIFtj
b250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKG5ldyBUZXN0Q29uc3RydWN0b3IpIGluc3RhbmNlb2Yg
VGVzdENvbnN0cnVjdG9yIl0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQGF1dG9yZWxlYXNl
cG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBp
bml0XTsKLSAgICAgICAgY29udGV4dFtAIlRlc3RPYmplY3QiXSA9IFtUZXN0T2JqZWN0IGNsYXNz
XTsKLSAgICAgICAgSlNWYWx1ZSAqdGVzdE9iamVjdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OkAiKG5ldyBUZXN0T2JqZWN0KCkpIl07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9iamVj
dCBpbnN0YW5jZW9mIFRlc3RPYmplY3QiLCBbdGVzdE9iamVjdCBpc0luc3RhbmNlT2Y6Y29udGV4
dFtAIlRlc3RPYmplY3QiXV0pOwotCi0gICAgICAgIGNvbnRleHRbQCJUZXh0WFlaIl0gPSBbVGV4
dFhZWiBjbGFzc107Ci0gICAgICAgIEpTVmFsdWUgKnRleHRPYmplY3QgPSBbY29udGV4dCBldmFs
dWF0ZVNjcmlwdDpAIihuZXcgVGV4dFhZWihcIkNhbGxlZCBUZXh0WFlaIGNvbnN0cnVjdG9yIVwi
KSkiXTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXh0T2JqZWN0IGluc3RhbmNlb2YgVGV4dFhZ
WiIsIFt0ZXh0T2JqZWN0IGlzSW5zdGFuY2VPZjpjb250ZXh0W0AiVGV4dFhZWiJdXSk7Ci0gICAg
fQotCi0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9
IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKLSAgICAgICAgY29udGV4dFtAIkNsYXNzQSJdID0g
W0NsYXNzQSBjbGFzc107Ci0gICAgICAgIGNvbnRleHRbQCJDbGFzc0IiXSA9IFtDbGFzc0IgY2xh
c3NdOwotICAgICAgICBjb250ZXh0W0AiQ2xhc3NDIl0gPSBbQ2xhc3NDIGNsYXNzXTsgLy8gU2hv
dWxkIHByaW50IGVycm9yIG1lc3NhZ2UgYWJvdXQgdG9vIG1hbnkgaW5pdHMgZm91bmQuCi0gICAg
ICAgIGNvbnRleHRbQCJDbGFzc0NQcmltZSJdID0gW0NsYXNzQ1ByaW1lIGNsYXNzXTsgLy8gRGl0
dG8uCi0KLSAgICAgICAgSlNWYWx1ZSAqYSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKG5l
dyBDbGFzc0EoNDIpKSJdOwotICAgICAgICBjaGVja1Jlc3VsdChAImEgaW5zdGFuY2VvZiBDbGFz
c0EiLCBbYSBpc0luc3RhbmNlT2Y6Y29udGV4dFtAIkNsYXNzQSJdXSk7Ci0gICAgICAgIGNoZWNr
UmVzdWx0KEAiYS5pbml0aWFsaXplKCkgaXMgY2FsbGFibGUiLCBbW2EgaW52b2tlTWV0aG9kOkAi
aW5pdGlhbGl6ZSIgd2l0aEFyZ3VtZW50czpAW11dIHRvSW50MzJdID09IDQyKTsKLQotICAgICAg
ICBKU1ZhbHVlICpiID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIobmV3IENsYXNzQig0Miwg
NTMpKSJdOwotICAgICAgICBjaGVja1Jlc3VsdChAImIgaW5zdGFuY2VvZiBDbGFzc0IiLCBbYiBp
c0luc3RhbmNlT2Y6Y29udGV4dFtAIkNsYXNzQiJdXSk7Ci0KLSAgICAgICAgSlNWYWx1ZSAqY2Fu
Q29uc3RydWN0Q2xhc3NDID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIoZnVuY3Rpb24oKSB7
IFwKLSAgICAgICAgICAgIHRyeSB7IFwKLSAgICAgICAgICAgICAgICAobmV3IENsYXNzQygxLCAy
KSk7IFwKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgXAotICAgICAgICAgICAgfSBjYXRj
aChlKSB7IFwKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKLSAgICAgICAgICAgIH0g
XAotICAgICAgICB9KSgpIl07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAic2hvdWxkbid0IGJlIGFi
bGUgdG8gY29uc3RydWN0IENsYXNzQyIsICFbY2FuQ29uc3RydWN0Q2xhc3NDIHRvQm9vbF0pOwot
Ci0gICAgICAgIEpTVmFsdWUgKmNhbkNvbnN0cnVjdENsYXNzQ1ByaW1lID0gW2NvbnRleHQgZXZh
bHVhdGVTY3JpcHQ6QCIoZnVuY3Rpb24oKSB7IFwKLSAgICAgICAgICAgIHRyeSB7IFwKLSAgICAg
ICAgICAgICAgICAobmV3IENsYXNzQ1ByaW1lKDEpKTsgXAotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOyBcCi0gICAgICAgICAgICB9IGNhdGNoKGUpIHsgXAotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgXAotICAgICAgICAgICAgfSBcCi0gICAgICAgIH0pKCkiXTsKLSAgICAgICAg
Y2hlY2tSZXN1bHQoQCJzaG91bGRuJ3QgYmUgYWJsZSB0byBjb25zdHJ1Y3QgQ2xhc3NDUHJpbWUi
LCAhW2NhbkNvbnN0cnVjdENsYXNzQ1ByaW1lIHRvQm9vbF0pOwotICAgIH0KLQotICAgIEBhdXRv
cmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBh
bGxvY10gaW5pdF07Ci0gICAgICAgIGNvbnRleHRbQCJDbGFzc0EiXSA9IFtDbGFzc0EgY2xhc3Nd
OwotICAgICAgICBjb250ZXh0LmV4Y2VwdGlvbkhhbmRsZXIgPSBeKEpTQ29udGV4dCAqY29udGV4
dCwgSlNWYWx1ZSAqZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICBOU0xvZyhAIiVAIiwgW2V4Y2Vw
dGlvbiB0b1N0cmluZ10pOwotICAgICAgICAgICAgY29udGV4dC5leGNlcHRpb24gPSBleGNlcHRp
b247Ci0gICAgICAgIH07Ci0KLSAgICAgICAgY2hlY2tSZXN1bHQoQCJPYmpDIENvbnN0cnVjdG9y
IHdpdGhvdXQgJ25ldycgcHJlIiwgIWNvbnRleHQuZXhjZXB0aW9uKTsKLSAgICAgICAgW2NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6QCJDbGFzc0EoNDIpIl07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAi
T2JqQyBDb25zdHJ1Y3RvciB3aXRob3V0ICduZXcnIHBvc3QiLCBjb250ZXh0LmV4Y2VwdGlvbik7
Ci0gICAgfQotCi0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKLSAgICAgICAgY29udGV4dFtAIkNsYXNz
RCJdID0gW0NsYXNzRCBjbGFzc107Ci0gICAgICAgIGNvbnRleHRbQCJDbGFzc0UiXSA9IFtDbGFz
c0UgY2xhc3NdOworLy8gICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1
Z2dpbmcoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7CisKKy8vICAgICAgICAgQGF1dG9y
ZWxlYXNlcG9vbCB7CisvLyAgICAgICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVz
dE9iamVjdDsKKy8vICAgICAgICAgfQorLy8gICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBv
b2wgeworLy8gICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10g
aW5pdF07CisvLyAgICAgICAgIFRleHRYWVogKnRlc3RYWVogPSBbW1RleHRYWVogYWxsb2NdIGlu
aXRdOworCisvLyAgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICAgICAgY29u
dGV4dFtAInRlc3RYWVoiXSA9IHRlc3RYWVo7CisKKy8vICAgICAgICAgICAgIFtjb250ZXh0IGV2
YWx1YXRlU2NyaXB0OkAiIFwKKy8vICAgICAgICAgICAgICAgICBkaWRDbGljayA9IGZhbHNlOyBc
CisvLyAgICAgICAgICAgICAgICAgdGVzdFhZWi5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IFwKKy8v
ICAgICAgICAgICAgICAgICAgICAgZGlkQ2xpY2sgPSB0cnVlOyBcCisvLyAgICAgICAgICAgICAg
ICAgfTsgXAorLy8gICAgICAgICAgICAgICAgICBcCisvLyAgICAgICAgICAgICAgICAgdGVzdFhZ
Wi53ZWFrT25jbGljayA9IGZ1bmN0aW9uKCkgeyBcCisvLyAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAnZm9vJzsgXAorLy8gICAgICAgICAgICAgICAgIH07IFwKKy8vICAgICAgICAgICAgICJd
OworLy8gICAgICAgICB9CisKKy8vICAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAg
ICAgICAgICBbdGVzdFhZWiBjbGlja107CisvLyAgICAgICAgICAgICBKU1ZhbHVlICpyZXN1bHQg
PSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImRpZENsaWNrIl07CisvLyAgICAgICAgICAgICBj
aGVja1Jlc3VsdChAIkV2ZW50IGhhbmRsZXIgb25jbGljayIsIFtyZXN1bHQgdG9Cb29sXSk7Cisv
LyAgICAgICAgIH0KKworLy8gICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JE
ZWJ1Z2dpbmcoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7CisKKy8vICAgICAgICAgQGF1
dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4
dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RYWVoub25jbGljayJdOworLy8gICAgICAgICAgICAgY2hl
Y2tSZXN1bHQoQCJvbmNsaWNrIHN0aWxsIGFyb3VuZCBhZnRlciBHQyIsICEocmVzdWx0LmlzTnVs
bCB8fCByZXN1bHQuaXNVbmRlZmluZWQpKTsKKy8vICAgICAgICAgfQorCisKKy8vICAgICAgICAg
QGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29u
dGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RYWVoud2Vha09uY2xpY2siXTsKKy8vICAgICAgICAg
ICAgIGNoZWNrUmVzdWx0KEAid2Vha09uY2xpY2sgbm90IGFyb3VuZCBhZnRlciBHQyIsIHJlc3Vs
dC5pc051bGwgfHwgcmVzdWx0LmlzVW5kZWZpbmVkKTsKKy8vICAgICAgICAgfQorCisvLyAgICAg
ICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVT
Y3JpcHQ6QCIgXAorLy8gICAgICAgICAgICAgICAgIGRpZENsaWNrID0gZmFsc2U7IFwKKy8vICAg
ICAgICAgICAgICAgICB0ZXN0WFlaID0gbnVsbDsgXAorLy8gICAgICAgICAgICAgIl07CisvLyAg
ICAgICAgIH0KKworLy8gICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1
Z2dpbmcoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7CisKKy8vICAgICAgICAgQGF1dG9y
ZWxlYXNlcG9vbCB7CisvLyAgICAgICAgICAgICBbdGVzdFhZWiBjbGlja107CisvLyAgICAgICAg
ICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImRpZENsaWNr
Il07CisvLyAgICAgICAgICAgICBjaGVja1Jlc3VsdChAIkV2ZW50IGhhbmRsZXIgb25jbGljayBk
b2Vzbid0IGZpcmUiLCAhW3Jlc3VsdCB0b0Jvb2xdKTsKKy8vICAgICAgICAgfQorLy8gICAgIH0K
KworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAgIFRpbnlET01Ob2RlICpy
b290ID0gW1tUaW55RE9NTm9kZSBhbGxvY10gaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpjb250ZXh0
LnZpcnR1YWxNYWNoaW5lXTsKKy8vICAgICAgICAgVGlueURPTU5vZGUgKmxhc3ROb2RlID0gcm9v
dDsKKy8vICAgICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgMzsgaSsrKSB7CisvLyAg
ICAgICAgICAgICBUaW55RE9NTm9kZSAqbmV3Tm9kZSA9IFtbVGlueURPTU5vZGUgYWxsb2NdIGlu
aXRXaXRoVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZV07CisvLyAgICAgICAg
ICAgICBbbGFzdE5vZGUgYXBwZW5kQ2hpbGQ6bmV3Tm9kZV07CisvLyAgICAgICAgICAgICBsYXN0
Tm9kZSA9IG5ld05vZGU7CisvLyAgICAgICAgIH0KKworLy8gICAgICAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKKy8vICAgICAgICAgICAgIGNvbnRleHRbQCJyb290Il0gPSByb290OworLy8gICAgICAg
ICAgICAgY29udGV4dFtAImdldExhc3ROb2RlSW5DaGFpbiJdID0gXihUaW55RE9NTm9kZSAqaGVh
ZCl7CisvLyAgICAgICAgICAgICAgICAgVGlueURPTU5vZGUgKmxhc3ROb2RlID0gbmlsOworLy8g
ICAgICAgICAgICAgICAgIHdoaWxlIChoZWFkKSB7CisvLyAgICAgICAgICAgICAgICAgICAgIGxh
c3ROb2RlID0gaGVhZDsKKy8vICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IFtsYXN0Tm9kZSBj
aGlsZEF0SW5kZXg6MF07CisvLyAgICAgICAgICAgICAgICAgfQorLy8gICAgICAgICAgICAgICAg
IHJldHVybiBsYXN0Tm9kZTsKKy8vICAgICAgICAgICAgIH07CisvLyAgICAgICAgICAgICBbY29u
dGV4dCBldmFsdWF0ZVNjcmlwdDpAImdldExhc3ROb2RlSW5DaGFpbihyb290KS5teUN1c3RvbVBy
b3BlcnR5ID0gNDI7Il07CisvLyAgICAgICAgIH0KKworLy8gICAgICAgICBKU1N5bmNocm9ub3Vz
R2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7
CisKKy8vICAgICAgICAgSlNWYWx1ZSAqbXlDdXN0b21Qcm9wZXJ0eSA9IFtjb250ZXh0IGV2YWx1
YXRlU2NyaXB0OkAiZ2V0TGFzdE5vZGVJbkNoYWluKHJvb3QpLm15Q3VzdG9tUHJvcGVydHkiXTsK
Ky8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJNeSBjdXN0b20gcHJvcGVydHkgPT0gNDIiLCBteUN1
c3RvbVByb3BlcnR5LmlzTnVtYmVyICYmIFtteUN1c3RvbVByb3BlcnR5IHRvSW50MzJdID09IDQy
KTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlND
b250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBU
aW55RE9NTm9kZSAqcm9vdCA9IFtbVGlueURPTU5vZGUgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1h
Y2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZV07CisvLyAgICAgICAgIFRpbnlET01Ob2RlICps
YXN0Tm9kZSA9IHJvb3Q7CisvLyAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IDM7
IGkrKykgeworLy8gICAgICAgICAgICAgVGlueURPTU5vZGUgKm5ld05vZGUgPSBbW1RpbnlET01O
b2RlIGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmVd
OworLy8gICAgICAgICAgICAgW2xhc3ROb2RlIGFwcGVuZENoaWxkOm5ld05vZGVdOworLy8gICAg
ICAgICAgICAgbGFzdE5vZGUgPSBuZXdOb2RlOworLy8gICAgICAgICB9CisKKy8vICAgICAgICAg
QGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgICAgICBjb250ZXh0W0Aicm9vdCJdID0gcm9v
dDsKKy8vICAgICAgICAgICAgIGNvbnRleHRbQCJnZXRMYXN0Tm9kZUluQ2hhaW4iXSA9IF4oVGlu
eURPTU5vZGUgKmhlYWQpeworLy8gICAgICAgICAgICAgICAgIFRpbnlET01Ob2RlICpsYXN0Tm9k
ZSA9IG5pbDsKKy8vICAgICAgICAgICAgICAgICB3aGlsZSAoaGVhZCkgeworLy8gICAgICAgICAg
ICAgICAgICAgICBsYXN0Tm9kZSA9IGhlYWQ7CisvLyAgICAgICAgICAgICAgICAgICAgIGhlYWQg
PSBbbGFzdE5vZGUgY2hpbGRBdEluZGV4OjBdOworLy8gICAgICAgICAgICAgICAgIH0KKy8vICAg
ICAgICAgICAgICAgICByZXR1cm4gbGFzdE5vZGU7CisvLyAgICAgICAgICAgICB9OworLy8gICAg
ICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJnZXRMYXN0Tm9kZUluQ2hhaW4ocm9v
dCkubXlDdXN0b21Qcm9wZXJ0eSA9IDQyOyJdOworCisvLyAgICAgICAgICAgICBbcm9vdCBhcHBl
bmRDaGlsZDpbcm9vdCBjaGlsZEF0SW5kZXg6MF1dOworLy8gICAgICAgICAgICAgW3Jvb3QgcmVt
b3ZlQ2hpbGRBdEluZGV4OjBdOworLy8gICAgICAgICB9CisKKy8vICAgICAgICAgSlNTeW5jaHJv
bm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJl
Zl0pOworCisvLyAgICAgICAgIEpTVmFsdWUgKm15Q3VzdG9tUHJvcGVydHkgPSBbY29udGV4dCBl
dmFsdWF0ZVNjcmlwdDpAImdldExhc3ROb2RlSW5DaGFpbihyb290KS5teUN1c3RvbVByb3BlcnR5
Il07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiZHVwbGljYXRlIGNhbGxzIHRvIGFkZE1hbmFn
ZWRSZWZlcmVuY2UgZG9uJ3QgY2F1c2UgdGhpbmdzIHRvIGRpZSIsIG15Q3VzdG9tUHJvcGVydHku
aXNOdW1iZXIgJiYgW215Q3VzdG9tUHJvcGVydHkgdG9JbnQzMl0gPT0gNDIpOworLy8gICAgIH0K
KworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAgIEpTVmFsdWUgKm8gPSBb
SlNWYWx1ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6Y29udGV4dF07CisvLyAgICAgICAg
IG9bQCJmb28iXSA9IEAiZm9vIjsKKy8vICAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xs
ZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOworCisvLyAgICAg
ICAgIGNoZWNrUmVzdWx0KEAiSlNWYWx1ZSBjb3JyZWN0bHkgcHJvdGVjdGVkIGl0cyBpbnRlcm5h
bCB2YWx1ZSIsIFtbb1tAImZvbyJdIHRvU3RyaW5nXSBpc0VxdWFsVG9TdHJpbmc6QCJmb28iXSk7
CisvLyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpTQ29u
dGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAgVGVz
dE9iamVjdCAqdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworLy8gICAgICAg
ICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKy8vICAgICAgICAgW2NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6QCJ0ZXN0T2JqZWN0Ll9fbG9va3VwR2V0dGVyX18oJ3ZhcmlhYmxl
JykuY2FsbCh7fSkiXTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJNYWtlIHN1cmUgd2UgdGhy
b3cgYW4gZXhjZXB0aW9uIHdoZW4gY2FsbGluZyBnZXR0ZXIgb24gaW5jb3JyZWN0IHx0aGlzfCIs
IGNvbnRleHQuZXhjZXB0aW9uKTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKKy8vICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb3VudCA9IDEwMDsKKy8v
ICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0
aENhcGFjaXR5OmNvdW50XTsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0Nv
bnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKy8vICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisvLyAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSAqb2JqZWN0ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0
SW5Db250ZXh0OmNvbnRleHRdOworLy8gICAgICAgICAgICAgICAgIEpTTWFuYWdlZFZhbHVlICpt
YW5hZ2VkT2JqZWN0ID0gW0pTTWFuYWdlZFZhbHVlIG1hbmFnZWRWYWx1ZVdpdGhWYWx1ZTpvYmpl
Y3RdOworLy8gICAgICAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6bWFuYWdlZE9iamVjdF07
CisvLyAgICAgICAgICAgICB9CisvLyAgICAgICAgIH0KKy8vICAgICAgICAgSlNTeW5jaHJvbm91
c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0p
OworLy8gICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKy8vICAg
ICAgICAgICAgIFtjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6YXJy
YXlbaV0gd2l0aE93bmVyOmFycmF5XTsKKy8vICAgICB9CisKKy8vICAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKKy8vICAgICAgICAgVGVzdE9iamVjdCAqdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRl
c3RPYmplY3RdOworLy8gICAgICAgICBKU01hbmFnZWRWYWx1ZSAqbWFuYWdlZFRlc3RPYmplY3Q7
CisvLyAgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICAgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICAgICAgY29u
dGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisvLyAgICAgICAgICAgICBtYW5hZ2Vk
VGVzdE9iamVjdCA9IFtKU01hbmFnZWRWYWx1ZSBtYW5hZ2VkVmFsdWVXaXRoVmFsdWU6Y29udGV4
dFtAInRlc3RPYmplY3QiXV07CisvLyAgICAgICAgICAgICBbY29udGV4dC52aXJ0dWFsTWFjaGlu
ZSBhZGRNYW5hZ2VkUmVmZXJlbmNlOm1hbmFnZWRUZXN0T2JqZWN0IHdpdGhPd25lcjp0ZXN0T2Jq
ZWN0XTsKKy8vICAgICAgICAgfQorLy8gICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wg
eworLy8gICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5p
dF07CisvLyAgICAgICAgIFRlc3RPYmplY3QgKnRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0
T2JqZWN0XTsKKy8vICAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7
CisvLyAgICAgICAgIEpTTWFuYWdlZFZhbHVlICptYW5hZ2VkVmFsdWUgPSBuaWw7CisvLyAgICAg
ICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICAgICAgSlNWYWx1ZSAqb2JqZWN0ID0g
W0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0OmNvbnRleHRdOworLy8gICAgICAg
ICAgICAgbWFuYWdlZFZhbHVlID0gW0pTTWFuYWdlZFZhbHVlIG1hbmFnZWRWYWx1ZVdpdGhWYWx1
ZTpvYmplY3QgYW5kT3duZXI6dGVzdE9iamVjdF07CisvLyAgICAgICAgICAgICBbY29udGV4dC52
aXJ0dWFsTWFjaGluZSBhZGRNYW5hZ2VkUmVmZXJlbmNlOm1hbmFnZWRWYWx1ZSB3aXRoT3duZXI6
dGVzdE9iamVjdF07CisvLyAgICAgICAgIH0KKy8vICAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJh
Z2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOworLy8g
ICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAgIGNvbnRleHRb
QCJNeUNsYXNzIl0gPSBeeworLy8gICAgICAgICAgICAgSlNWYWx1ZSAqbmV3VGhpcyA9IFtKU1Zh
bHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0
XV07CisvLyAgICAgICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9IFtbSlND
b250ZXh0IGN1cnJlbnRDb250ZXh0XSBKU0dsb2JhbENvbnRleHRSZWZdOworLy8gICAgICAgICAg
ICAgSlNPYmplY3RSZWYgbmV3VGhpc1JlZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0UmVmLCBb
bmV3VGhpcyBKU1ZhbHVlUmVmXSwgTlVMTCk7CisvLyAgICAgICAgICAgICBKU09iamVjdFNldFBy
b3RvdHlwZShjb250ZXh0UmVmLCBuZXdUaGlzUmVmLCBbW0pTQ29udGV4dCBjdXJyZW50Q29udGV4
dF1bQCJNeUNsYXNzIl1bQCJwcm90b3R5cGUiXSBKU1ZhbHVlUmVmXSk7CisvLyAgICAgICAgICAg
ICByZXR1cm4gbmV3VGhpczsKKy8vICAgICAgICAgfTsKKworLy8gICAgICAgICBjb250ZXh0W0Ai
TXlPdGhlckNsYXNzIl0gPSBeeworLy8gICAgICAgICAgICAgSlNWYWx1ZSAqbmV3VGhpcyA9IFtK
U1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpbSlNDb250ZXh0IGN1cnJlbnRDb250
ZXh0XV07CisvLyAgICAgICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9IFtb
SlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBKU0dsb2JhbENvbnRleHRSZWZdOworLy8gICAgICAg
ICAgICAgSlNPYmplY3RSZWYgbmV3VGhpc1JlZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0UmVm
LCBbbmV3VGhpcyBKU1ZhbHVlUmVmXSwgTlVMTCk7CisvLyAgICAgICAgICAgICBKU09iamVjdFNl
dFByb3RvdHlwZShjb250ZXh0UmVmLCBuZXdUaGlzUmVmLCBbW0pTQ29udGV4dCBjdXJyZW50Q29u
dGV4dF1bQCJNeU90aGVyQ2xhc3MiXVtAInByb3RvdHlwZSJdIEpTVmFsdWVSZWZdKTsKKy8vICAg
ICAgICAgICAgIHJldHVybiBuZXdUaGlzOworLy8gICAgICAgICB9OworCisvLyAgICAgICAgIGNv
bnRleHQuZXhjZXB0aW9uSGFuZGxlciA9IF4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpl
eGNlcHRpb24pIHsKKy8vICAgICAgICAgICAgIE5TTG9nKEAiRVhDRVBUSU9OOiAlQCIsIFtleGNl
cHRpb24gdG9TdHJpbmddKTsKKy8vICAgICAgICAgICAgIGNvbnRleHQuZXhjZXB0aW9uID0gbmls
OworLy8gICAgICAgICB9OworCisvLyAgICAgICAgIEpTVmFsdWUgKmNvbnN0cnVjdG9yMSA9IGNv
bnRleHRbQCJNeUNsYXNzIl07CisvLyAgICAgICAgIEpTVmFsdWUgKmNvbnN0cnVjdG9yMiA9IGNv
bnRleHRbQCJNeU90aGVyQ2xhc3MiXTsKKworLy8gICAgICAgICBKU1ZhbHVlICp2YWx1ZTEgPSBb
Y29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIm5ldyBNeUNsYXNzKCkiXTsKKy8vICAgICAgICAgY2hl
Y2tSZXN1bHQoQCJ2YWx1ZTEgaW5zdGFuY2VvZiBNeUNsYXNzIiwgW3ZhbHVlMSBpc0luc3RhbmNl
T2Y6Y29uc3RydWN0b3IxXSk7CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiISh2YWx1ZTEgaW5z
dGFuY2VvZiBNeU90aGVyQ2xhc3MpIiwgIVt2YWx1ZTEgaXNJbnN0YW5jZU9mOmNvbnN0cnVjdG9y
Ml0pOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAIk15Q2xhc3MucHJvdG90eXBlLmNvbnN0cnVj
dG9yID09PSBNeUNsYXNzIiwgW1tjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiTXlDbGFzcy5wcm90
b3R5cGUuY29uc3RydWN0b3IgPT09IE15Q2xhc3MiXSB0b0Jvb2xdKTsKKy8vICAgICAgICAgY2hl
Y2tSZXN1bHQoQCJNeUNsYXNzIGluc3RhbmNlb2YgRnVuY3Rpb24iLCBbW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCJNeUNsYXNzIGluc3RhbmNlb2YgRnVuY3Rpb24iXSB0b0Jvb2xdKTsKKworLy8g
ICAgICAgICBKU1ZhbHVlICp2YWx1ZTIgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIm5ldyBN
eU90aGVyQ2xhc3MoKSJdOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAInZhbHVlMiBpbnN0YW5j
ZW9mIE15T3RoZXJDbGFzcyIsIFt2YWx1ZTIgaXNJbnN0YW5jZU9mOmNvbnN0cnVjdG9yMl0pOwor
Ly8gICAgICAgICBjaGVja1Jlc3VsdChAIiEodmFsdWUyIGluc3RhbmNlb2YgTXlDbGFzcykiLCAh
W3ZhbHVlMiBpc0luc3RhbmNlT2Y6Y29uc3RydWN0b3IxXSk7CisvLyAgICAgICAgIGNoZWNrUmVz
dWx0KEAiTXlPdGhlckNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9PT0gTXlPdGhlckNsYXNz
IiwgW1tjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiTXlPdGhlckNsYXNzLnByb3RvdHlwZS5jb25z
dHJ1Y3RvciA9PT0gTXlPdGhlckNsYXNzIl0gdG9Cb29sXSk7CisvLyAgICAgICAgIGNoZWNrUmVz
dWx0KEAiTXlPdGhlckNsYXNzIGluc3RhbmNlb2YgRnVuY3Rpb24iLCBbW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCJNeU90aGVyQ2xhc3MgaW5zdGFuY2VvZiBGdW5jdGlvbiJdIHRvQm9vbF0pOwor
Ly8gICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAgIGNvbnRl
eHRbQCJNeUNsYXNzIl0gPSBeeworLy8gICAgICAgICAgICAgTlNMb2coQCJJJ20gaW50ZW50aW9u
YWxseSBub3QgcmV0dXJuaW5nIGFueXRoaW5nLiIpOworLy8gICAgICAgICB9OworLy8gICAgICAg
ICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIm5ldyBNeUNsYXNz
KCkiXTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJyZXN1bHQgPT09IHVuZGVmaW5lZCIsIHJl
c3VsdC5pc1VuZGVmaW5lZCk7CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiZXhjZXB0aW9uLm1l
c3NhZ2UgaXMgY29ycmVjdCciLCBjb250ZXh0LmV4Y2VwdGlvbiAKKy8vICAgICAgICAgICAgICYm
IFtAIk9iamVjdGl2ZS1DIGJsb2NrcyBjYWxsZWQgYXMgY29uc3RydWN0b3JzIG11c3QgcmV0dXJu
IGFuIG9iamVjdC4iIGlzRXF1YWxUb1N0cmluZzpbY29udGV4dC5leGNlcHRpb25bQCJtZXNzYWdl
Il0gdG9TdHJpbmddXSk7CisvLyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Cisv
LyAgICAgICAgIGNoZWNrUmVzdWx0KEAiW0pTQ29udGV4dCBjdXJyZW50VGhpc10gPT0gbmlsIG91
dHNpZGUgb2YgY2FsbGJhY2siLCAhW0pTQ29udGV4dCBjdXJyZW50VGhpc10pOworLy8gICAgICAg
ICBjaGVja1Jlc3VsdChAIltKU0NvbnRleHQgY3VycmVudEFyZ3VtZW50c10gPT0gbmlsIG91dHNp
ZGUgb2YgY2FsbGJhY2siLCAhW0pTQ29udGV4dCBjdXJyZW50QXJndW1lbnRzXSk7CisvLyAgICAg
ICAgIGlmIChbSlNDb250ZXh0IGN1cnJlbnRDYWxsZWVdKQorLy8gICAgICAgICAgICAgY2hlY2tS
ZXN1bHQoQCJbSlNDb250ZXh0IGN1cnJlbnRDYWxsZWVdID09IG5pbCBvdXRzaWRlIG9mIGNhbGxi
YWNrIiwgIVtKU0NvbnRleHQgY3VycmVudENhbGxlZV0pOworLy8gICAgIH0KKworLy8gICAgIGlm
IChbSlNDb250ZXh0IGN1cnJlbnRDYWxsZWVdKSB7CisvLyAgICAgICAgIEBhdXRvcmVsZWFzZXBv
b2wgeworLy8gICAgICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxs
b2NdIGluaXRdOworLy8gICAgICAgICAgICAgY29udGV4dFtAInRlc3RGdW5jdGlvbiJdID0gXnsK
Ky8vICAgICAgICAgICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RGdW5jdGlvbi5mb28gPT09IDQy
IiwgW1tKU0NvbnRleHQgY3VycmVudENhbGxlZV1bQCJmb28iXSB0b0ludDMyXSA9PSA0Mik7Cisv
LyAgICAgICAgICAgICB9OworLy8gICAgICAgICAgICAgY29udGV4dFtAInRlc3RGdW5jdGlvbiJd
W0AiZm9vIl0gPSBANDI7CisvLyAgICAgICAgICAgICBbY29udGV4dFtAInRlc3RGdW5jdGlvbiJd
IGNhbGxXaXRoQXJndW1lbnRzOm5pbF07CisKKy8vICAgICAgICAgICAgIGNvbnRleHRbQCJUZXN0
Q29uc3RydWN0b3IiXSA9IF57CisvLyAgICAgICAgICAgICAgICAgSlNWYWx1ZSAqbmV3VGhpcyA9
IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpbSlNDb250ZXh0IGN1cnJlbnRD
b250ZXh0XV07CisvLyAgICAgICAgICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHRS
ZWYgPSBbW0pTQ29udGV4dCBjdXJyZW50Q29udGV4dF0gSlNHbG9iYWxDb250ZXh0UmVmXTsKKy8v
ICAgICAgICAgICAgICAgICBKU09iamVjdFJlZiBuZXdUaGlzUmVmID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHRSZWYsIFtuZXdUaGlzIEpTVmFsdWVSZWZdLCBOVUxMKTsKKy8vICAgICAgICAgICAg
ICAgICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0UmVmLCBuZXdUaGlzUmVmLCBbW0pTQ29u
dGV4dCBjdXJyZW50Q2FsbGVlXVtAInByb3RvdHlwZSJdIEpTVmFsdWVSZWZdKTsKKy8vICAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3VGhpczsKKy8vICAgICAgICAgICAgIH07CisvLyAgICAgICAg
ICAgICBjaGVja1Jlc3VsdChAIihuZXcgVGVzdENvbnN0cnVjdG9yKSBpbnN0YW5jZW9mIFRlc3RD
b25zdHJ1Y3RvciIsIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKG5ldyBUZXN0Q29uc3RydWN0
b3IpIGluc3RhbmNlb2YgVGVzdENvbnN0cnVjdG9yIl0pOworLy8gICAgICAgICB9CisvLyAgICAg
fQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAgY29udGV4dFtAIlRl
c3RPYmplY3QiXSA9IFtUZXN0T2JqZWN0IGNsYXNzXTsKKy8vICAgICAgICAgSlNWYWx1ZSAqdGVz
dE9iamVjdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKG5ldyBUZXN0T2JqZWN0KCkpIl07
CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9iamVjdCBpbnN0YW5jZW9mIFRlc3RPYmpl
Y3QiLCBbdGVzdE9iamVjdCBpc0luc3RhbmNlT2Y6Y29udGV4dFtAIlRlc3RPYmplY3QiXV0pOwor
CisvLyAgICAgICAgIGNvbnRleHRbQCJUZXh0WFlaIl0gPSBbVGV4dFhZWiBjbGFzc107CisvLyAg
ICAgICAgIEpTVmFsdWUgKnRleHRPYmplY3QgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIihu
ZXcgVGV4dFhZWihcIkNhbGxlZCBUZXh0WFlaIGNvbnN0cnVjdG9yIVwiKSkiXTsKKy8vICAgICAg
ICAgY2hlY2tSZXN1bHQoQCJ0ZXh0T2JqZWN0IGluc3RhbmNlb2YgVGV4dFhZWiIsIFt0ZXh0T2Jq
ZWN0IGlzSW5zdGFuY2VPZjpjb250ZXh0W0AiVGV4dFhZWiJdXSk7CisvLyAgICAgfQorCisvLyAg
ICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtb
SlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAgY29udGV4dFtAIkNsYXNzQSJdID0g
W0NsYXNzQSBjbGFzc107CisvLyAgICAgICAgIGNvbnRleHRbQCJDbGFzc0IiXSA9IFtDbGFzc0Ig
Y2xhc3NdOworLy8gICAgICAgICBjb250ZXh0W0AiQ2xhc3NDIl0gPSBbQ2xhc3NDIGNsYXNzXTsg
Ly8gU2hvdWxkIHByaW50IGVycm9yIG1lc3NhZ2UgYWJvdXQgdG9vIG1hbnkgaW5pdHMgZm91bmQu
CisvLyAgICAgICAgIGNvbnRleHRbQCJDbGFzc0NQcmltZSJdID0gW0NsYXNzQ1ByaW1lIGNsYXNz
XTsgLy8gRGl0dG8uCisKKy8vICAgICAgICAgSlNWYWx1ZSAqYSA9IFtjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAiKG5ldyBDbGFzc0EoNDIpKSJdOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAImEg
aW5zdGFuY2VvZiBDbGFzc0EiLCBbYSBpc0luc3RhbmNlT2Y6Y29udGV4dFtAIkNsYXNzQSJdXSk7
CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiYS5pbml0aWFsaXplKCkgaXMgY2FsbGFibGUiLCBb
W2EgaW52b2tlTWV0aG9kOkAiaW5pdGlhbGl6ZSIgd2l0aEFyZ3VtZW50czpAW11dIHRvSW50MzJd
ID09IDQyKTsKKworLy8gICAgICAgICBKU1ZhbHVlICpiID0gW2NvbnRleHQgZXZhbHVhdGVTY3Jp
cHQ6QCIobmV3IENsYXNzQig0MiwgNTMpKSJdOworLy8gICAgICAgICBjaGVja1Jlc3VsdChAImIg
aW5zdGFuY2VvZiBDbGFzc0IiLCBbYiBpc0luc3RhbmNlT2Y6Y29udGV4dFtAIkNsYXNzQiJdXSk7
CisKKy8vICAgICAgICAgSlNWYWx1ZSAqY2FuQ29uc3RydWN0Q2xhc3NDID0gW2NvbnRleHQgZXZh
bHVhdGVTY3JpcHQ6QCIoZnVuY3Rpb24oKSB7IFwKKy8vICAgICAgICAgICAgIHRyeSB7IFwKKy8v
ICAgICAgICAgICAgICAgICAobmV3IENsYXNzQygxLCAyKSk7IFwKKy8vICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsgXAorLy8gICAgICAgICAgICAgfSBjYXRjaChlKSB7IFwKKy8vICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKKy8vICAgICAgICAgICAgIH0gXAorLy8gICAgICAg
ICB9KSgpIl07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAic2hvdWxkbid0IGJlIGFibGUgdG8g
Y29uc3RydWN0IENsYXNzQyIsICFbY2FuQ29uc3RydWN0Q2xhc3NDIHRvQm9vbF0pOworCisvLyAg
ICAgICAgIEpTVmFsdWUgKmNhbkNvbnN0cnVjdENsYXNzQ1ByaW1lID0gW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCIoZnVuY3Rpb24oKSB7IFwKKy8vICAgICAgICAgICAgIHRyeSB7IFwKKy8vICAg
ICAgICAgICAgICAgICAobmV3IENsYXNzQ1ByaW1lKDEpKTsgXAorLy8gICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOyBcCisvLyAgICAgICAgICAgICB9IGNhdGNoKGUpIHsgXAorLy8gICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgXAorLy8gICAgICAgICAgICAgfSBcCisvLyAgICAgICAg
IH0pKCkiXTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJzaG91bGRuJ3QgYmUgYWJsZSB0byBj
b25zdHJ1Y3QgQ2xhc3NDUHJpbWUiLCAhW2NhbkNvbnN0cnVjdENsYXNzQ1ByaW1lIHRvQm9vbF0p
OworLy8gICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICBKU0Nv
bnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAgIGNv
bnRleHRbQCJDbGFzc0EiXSA9IFtDbGFzc0EgY2xhc3NdOworLy8gICAgICAgICBjb250ZXh0LmV4
Y2VwdGlvbkhhbmRsZXIgPSBeKEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAqZXhjZXB0aW9u
KSB7CisvLyAgICAgICAgICAgICBOU0xvZyhAIiVAIiwgW2V4Y2VwdGlvbiB0b1N0cmluZ10pOwor
Ly8gICAgICAgICAgICAgY29udGV4dC5leGNlcHRpb24gPSBleGNlcHRpb247CisvLyAgICAgICAg
IH07CisKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJPYmpDIENvbnN0cnVjdG9yIHdpdGhvdXQg
J25ldycgcHJlIiwgIWNvbnRleHQuZXhjZXB0aW9uKTsKKy8vICAgICAgICAgW2NvbnRleHQgZXZh
bHVhdGVTY3JpcHQ6QCJDbGFzc0EoNDIpIl07CisvLyAgICAgICAgIGNoZWNrUmVzdWx0KEAiT2Jq
QyBDb25zdHJ1Y3RvciB3aXRob3V0ICduZXcnIHBvc3QiLCBjb250ZXh0LmV4Y2VwdGlvbik7Cisv
LyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8vICAgICAgICAgY29udGV4
dFtAIkNsYXNzRCJdID0gW0NsYXNzRCBjbGFzc107CisvLyAgICAgICAgIGNvbnRleHRbQCJDbGFz
c0UiXSA9IFtDbGFzc0UgY2xhc3NdOwogICAgICAgIAotICAgICAgICBKU1ZhbHVlICpkID0gW2Nv
bnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIobmV3IENsYXNzRCgpKSJdOwotICAgICAgICBjaGVja1Jl
c3VsdChAIlJldHVybmluZyBpbnN0YW5jZSBvZiBDbGFzc0UgZnJvbSBDbGFzc0QncyBpbml0IGhh
cyBjb3JyZWN0IGNsYXNzIiwgW2QgaXNJbnN0YW5jZU9mOmNvbnRleHRbQCJDbGFzc0UiXV0pOwot
ICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAgICAgIHdoaWxlICghZXZpbEFsbG9j
YXRpb25PYmplY3RXYXNEZWFsbG9jZWQpIHsKLSAgICAgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wg
ewotICAgICAgICAgICAgICAgIEV2aWxBbGxvY2F0aW9uT2JqZWN0ICpldmlsT2JqZWN0ID0gW1tF
dmlsQWxsb2NhdGlvbk9iamVjdCBhbGxvY10gaW5pdFdpdGhDb250ZXh0OmNvbnRleHRdOwotICAg
ICAgICAgICAgICAgIGNvbnRleHRbQCJldmlsT2JqZWN0Il0gPSBldmlsT2JqZWN0OwotICAgICAg
ICAgICAgICAgIGNvbnRleHRbQCJldmlsT2JqZWN0Il0gPSBuaWw7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgY2hlY2tSZXN1bHQoQCJFdmlsQWxsb2NhdGlvbk9iamVjdCB3YXMg
c3VjY2Vzc2Z1bGx5IGRlYWxsb2NlZCB3aXRob3V0IGNyYXNoaW5nIiwgZXZpbEFsbG9jYXRpb25P
YmplY3RXYXNEZWFsbG9jZWQpOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAg
ICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0gICAg
ICAgIGNoZWNrUmVzdWx0KEAiZGVmYXVsdCBjb250ZXh0Lm5hbWUgaXMgbmlsIiwgY29udGV4dC5u
YW1lID09IG5pbCk7Ci0gICAgICAgIE5TU3RyaW5nICpuYW1lMSA9IEAiTmFtZTEiOwotICAgICAg
ICBOU1N0cmluZyAqbmFtZTIgPSBAIk5hbWUyIjsKLSAgICAgICAgY29udGV4dC5uYW1lID0gbmFt
ZTE7Ci0gICAgICAgIE5TU3RyaW5nICpmZXRjaGVkTmFtZTEgPSBjb250ZXh0Lm5hbWU7Ci0gICAg
ICAgIGNvbnRleHQubmFtZSA9IG5hbWUyOwotICAgICAgICBOU1N0cmluZyAqZmV0Y2hlZE5hbWUy
ID0gY29udGV4dC5uYW1lOwotICAgICAgICBjb250ZXh0Lm5hbWUgPSBuaWw7Ci0gICAgICAgIE5T
U3RyaW5nICpmZXRjaGVkTmFtZTMgPSBjb250ZXh0Lm5hbWU7Ci0gICAgICAgIGNoZWNrUmVzdWx0
KEAiZmV0Y2hlZCBjb250ZXh0Lm5hbWUgd2FzIGV4cGVjdGVkIiwgW2ZldGNoZWROYW1lMSBpc0Vx
dWFsVG9TdHJpbmc6bmFtZTFdKTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJmZXRjaGVkIGNvbnRl
eHQubmFtZSB3YXMgZXhwZWN0ZWQiLCBbZmV0Y2hlZE5hbWUyIGlzRXF1YWxUb1N0cmluZzpuYW1l
Ml0pOwotICAgICAgICBjaGVja1Jlc3VsdChAImZldGNoZWQgY29udGV4dC5uYW1lIHdhcyBleHBl
Y3RlZCIsICFbZmV0Y2hlZE5hbWUxIGlzRXF1YWxUb1N0cmluZzpmZXRjaGVkTmFtZTJdKTsKLSAg
ICAgICAgY2hlY2tSZXN1bHQoQCJmZXRjaGVkIGNvbnRleHQubmFtZSB3YXMgZXhwZWN0ZWQiLCBm
ZXRjaGVkTmFtZTMgPT0gbmlsKTsKLSAgICB9Ci0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAg
ICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwotICAg
ICAgICBjb250ZXh0W0AiVW5leHBvcnRlZE9iamVjdCJdID0gW1VuZXhwb3J0ZWRPYmplY3QgY2xh
c3NdOwotICAgICAgICBjb250ZXh0W0AibWFrZU9iamVjdCJdID0gXnsKLSAgICAgICAgICAgIHJl
dHVybiBbW1VuZXhwb3J0ZWRPYmplY3QgYWxsb2NdIGluaXRdOwotICAgICAgICB9OwotICAgICAg
ICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIihtYWtlT2JqZWN0
KCkgaW5zdGFuY2VvZiBVbmV4cG9ydGVkT2JqZWN0KSJdOwotICAgICAgICBjaGVja1Jlc3VsdChA
Im1ha2VPYmplY3QoKSBpbnN0YW5jZW9mIFVuZXhwb3J0ZWRPYmplY3QiLCByZXN1bHQuaXNCb29s
ZWFuICYmIFtyZXN1bHQgdG9Cb29sXSk7Ci0gICAgfQotCi0gICAgQGF1dG9yZWxlYXNlcG9vbCB7
Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsK
LSAgICAgICAgW1tKU1ZhbHVlIHZhbHVlV2l0aEludDMyOjQyIGluQ29udGV4dDpjb250ZXh0XSB0
b0RpY3Rpb25hcnldOwotICAgICAgICBbW0pTVmFsdWUgdmFsdWVXaXRoSW50MzI6NDIgaW5Db250
ZXh0OmNvbnRleHRdIHRvQXJyYXldOwotICAgIH0KLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewot
ICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Ci0K
LSAgICAgICAgLy8gQ3JlYXRlIHRoZSByb290LCBtYWtlIGl0IHJlYWNoYWJsZSBmcm9tIEpTLCBh
bmQgZm9yY2UgYW4gRWRlbkNvbGxlY3Rpb24KLSAgICAgICAgLy8gc28gdGhhdCB3ZSBzY2FuIHRo
ZSBleHRlcm5hbCBvYmplY3QgZ3JhcGguCi0gICAgICAgIFRlc3RPYmplY3QgKnJvb3QgPSBbVGVz
dE9iamVjdCB0ZXN0T2JqZWN0XTsKLSAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAg
ICAgICBjb250ZXh0W0Aicm9vdCJdID0gcm9vdDsKLSAgICAgICAgfQotICAgICAgICBKU1N5bmNo
cm9ub3VzRWRlbkNvbGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVm
XSk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IE9iai1DIG9iamVjdCBvbmx5IHJlYWNoYWJs
ZSB2aWEgdGhlIGV4dGVybmFsIG9iamVjdCBncmFwaAotICAgICAgICAvLyB0aHJvdWdoIHRoZSBv
YmplY3Qgd2UgYWxyZWFkeSBzY2FubmVkIGR1cmluZyB0aGUgRWRlbkNvbGxlY3Rpb24uCi0gICAg
ICAgIFRlc3RPYmplY3QgKmNoaWxkID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07Ci0gICAgICAg
IFtjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6Y2hpbGQgd2l0aE93
bmVyOnJvb3RdOwotCi0gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBtYW5hZ2VkIEpTVmFsdWUgdGhh
dCB3aWxsIG9ubHkgYmUga2VwdCBhbGl2ZSBpZiB3ZSBwcm9wZXJseSByZXNjYW4KLSAgICAgICAg
Ly8gdGhlIGV4dGVybmFsIG9iamVjdCBncmFwaC4KLSAgICAgICAgSlNNYW5hZ2VkVmFsdWUgKm1h
bmFnZWRKU09iamVjdCA9IG5pbDsKLSAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlICpqc09iamVjdCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpAImhlbGxv
IiBpbkNvbnRleHQ6Y29udGV4dF07Ci0gICAgICAgICAgICBtYW5hZ2VkSlNPYmplY3QgPSBbSlNN
YW5hZ2VkVmFsdWUgbWFuYWdlZFZhbHVlV2l0aFZhbHVlOmpzT2JqZWN0XTsKLSAgICAgICAgICAg
IFtjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6bWFuYWdlZEpTT2Jq
ZWN0IHdpdGhPd25lcjpjaGlsZF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGb3JjZSBhbm90
aGVyIEVkZW5Db2xsZWN0aW9uLiBJdCBzaG91bGQgcmVzY2FuIHRoZSBuZXcgcGFydCBvZiB0aGUg
ZXh0ZXJuYWwgb2JqZWN0IGdyYXBoLgotICAgICAgICBKU1N5bmNocm9ub3VzRWRlbkNvbGxlY3RG
b3JEZWJ1Z2dpbmcoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7CisvLyAgICAgICAgIEpT
VmFsdWUgKmQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIihuZXcgQ2xhc3NEKCkpIl07Cisv
LyAgICAgICAgIGNoZWNrUmVzdWx0KEAiUmV0dXJuaW5nIGluc3RhbmNlIG9mIENsYXNzRSBmcm9t
IENsYXNzRCdzIGluaXQgaGFzIGNvcnJlY3QgY2xhc3MiLCBbZCBpc0luc3RhbmNlT2Y6Y29udGV4
dFtAIkNsYXNzRSJdXSk7CisvLyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Cisv
LyAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsK
Ky8vICAgICAgICAgd2hpbGUgKCFldmlsQWxsb2NhdGlvbk9iamVjdFdhc0RlYWxsb2NlZCkgewor
Ly8gICAgICAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgICAgICAgICAgRXZp
bEFsbG9jYXRpb25PYmplY3QgKmV2aWxPYmplY3QgPSBbW0V2aWxBbGxvY2F0aW9uT2JqZWN0IGFs
bG9jXSBpbml0V2l0aENvbnRleHQ6Y29udGV4dF07CisvLyAgICAgICAgICAgICAgICAgY29udGV4
dFtAImV2aWxPYmplY3QiXSA9IGV2aWxPYmplY3Q7CisvLyAgICAgICAgICAgICAgICAgY29udGV4
dFtAImV2aWxPYmplY3QiXSA9IG5pbDsKKy8vICAgICAgICAgICAgIH0KKy8vICAgICAgICAgfQor
Ly8gICAgICAgICBjaGVja1Jlc3VsdChAIkV2aWxBbGxvY2F0aW9uT2JqZWN0IHdhcyBzdWNjZXNz
ZnVsbHkgZGVhbGxvY2VkIHdpdGhvdXQgY3Jhc2hpbmciLCBldmlsQWxsb2NhdGlvbk9iamVjdFdh
c0RlYWxsb2NlZCk7CisvLyAgICAgfQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAg
ICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKy8v
ICAgICAgICAgY2hlY2tSZXN1bHQoQCJkZWZhdWx0IGNvbnRleHQubmFtZSBpcyBuaWwiLCBjb250
ZXh0Lm5hbWUgPT0gbmlsKTsKKy8vICAgICAgICAgTlNTdHJpbmcgKm5hbWUxID0gQCJOYW1lMSI7
CisvLyAgICAgICAgIE5TU3RyaW5nICpuYW1lMiA9IEAiTmFtZTIiOworLy8gICAgICAgICBjb250
ZXh0Lm5hbWUgPSBuYW1lMTsKKy8vICAgICAgICAgTlNTdHJpbmcgKmZldGNoZWROYW1lMSA9IGNv
bnRleHQubmFtZTsKKy8vICAgICAgICAgY29udGV4dC5uYW1lID0gbmFtZTI7CisvLyAgICAgICAg
IE5TU3RyaW5nICpmZXRjaGVkTmFtZTIgPSBjb250ZXh0Lm5hbWU7CisvLyAgICAgICAgIGNvbnRl
eHQubmFtZSA9IG5pbDsKKy8vICAgICAgICAgTlNTdHJpbmcgKmZldGNoZWROYW1lMyA9IGNvbnRl
eHQubmFtZTsKKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJmZXRjaGVkIGNvbnRleHQubmFtZSB3
YXMgZXhwZWN0ZWQiLCBbZmV0Y2hlZE5hbWUxIGlzRXF1YWxUb1N0cmluZzpuYW1lMV0pOworLy8g
ICAgICAgICBjaGVja1Jlc3VsdChAImZldGNoZWQgY29udGV4dC5uYW1lIHdhcyBleHBlY3RlZCIs
IFtmZXRjaGVkTmFtZTIgaXNFcXVhbFRvU3RyaW5nOm5hbWUyXSk7CisvLyAgICAgICAgIGNoZWNr
UmVzdWx0KEAiZmV0Y2hlZCBjb250ZXh0Lm5hbWUgd2FzIGV4cGVjdGVkIiwgIVtmZXRjaGVkTmFt
ZTEgaXNFcXVhbFRvU3RyaW5nOmZldGNoZWROYW1lMl0pOworLy8gICAgICAgICBjaGVja1Jlc3Vs
dChAImZldGNoZWQgY29udGV4dC5uYW1lIHdhcyBleHBlY3RlZCIsIGZldGNoZWROYW1lMyA9PSBu
aWwpOworLy8gICAgIH0KKworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisvLyAgICAgICAg
IGNvbnRleHRbQCJVbmV4cG9ydGVkT2JqZWN0Il0gPSBbVW5leHBvcnRlZE9iamVjdCBjbGFzc107
CisvLyAgICAgICAgIGNvbnRleHRbQCJtYWtlT2JqZWN0Il0gPSBeeworLy8gICAgICAgICAgICAg
cmV0dXJuIFtbVW5leHBvcnRlZE9iamVjdCBhbGxvY10gaW5pdF07CisvLyAgICAgICAgIH07Cisv
LyAgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKG1h
a2VPYmplY3QoKSBpbnN0YW5jZW9mIFVuZXhwb3J0ZWRPYmplY3QpIl07CisvLyAgICAgICAgIGNo
ZWNrUmVzdWx0KEAibWFrZU9iamVjdCgpIGluc3RhbmNlb2YgVW5leHBvcnRlZE9iamVjdCIsIHJl
c3VsdC5pc0Jvb2xlYW4gJiYgW3Jlc3VsdCB0b0Jvb2xdKTsKKy8vICAgICB9CisKKy8vICAgICBA
YXV0b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0Nv
bnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgICAgICBbW0pTVmFsdWUgdmFsdWVXaXRoSW50MzI6
NDIgaW5Db250ZXh0OmNvbnRleHRdIHRvRGljdGlvbmFyeV07CisvLyAgICAgICAgIFtbSlNWYWx1
ZSB2YWx1ZVdpdGhJbnQzMjo0MiBpbkNvbnRleHQ6Y29udGV4dF0gdG9BcnJheV07CisvLyAgICAg
fQorCisvLyAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisvLyAgICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKworLy8gICAgICAgICAvLyBDcmVhdGUg
dGhlIHJvb3QsIG1ha2UgaXQgcmVhY2hhYmxlIGZyb20gSlMsIGFuZCBmb3JjZSBhbiBFZGVuQ29s
bGVjdGlvbgorLy8gICAgICAgICAvLyBzbyB0aGF0IHdlIHNjYW4gdGhlIGV4dGVybmFsIG9iamVj
dCBncmFwaC4KKy8vICAgICAgICAgVGVzdE9iamVjdCAqcm9vdCA9IFtUZXN0T2JqZWN0IHRlc3RP
YmplY3RdOworLy8gICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgICAgIGNv
bnRleHRbQCJyb290Il0gPSByb290OworLy8gICAgICAgICB9CisvLyAgICAgICAgIEpTU3luY2hy
b25vdXNFZGVuQ29sbGVjdEZvckRlYnVnZ2luZyhbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZd
KTsKKworLy8gICAgICAgICAvLyBDcmVhdGUgYSBuZXcgT2JqLUMgb2JqZWN0IG9ubHkgcmVhY2hh
YmxlIHZpYSB0aGUgZXh0ZXJuYWwgb2JqZWN0IGdyYXBoCisvLyAgICAgICAgIC8vIHRocm91Z2gg
dGhlIG9iamVjdCB3ZSBhbHJlYWR5IHNjYW5uZWQgZHVyaW5nIHRoZSBFZGVuQ29sbGVjdGlvbi4K
Ky8vICAgICAgICAgVGVzdE9iamVjdCAqY2hpbGQgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsK
Ky8vICAgICAgICAgW2NvbnRleHQudmlydHVhbE1hY2hpbmUgYWRkTWFuYWdlZFJlZmVyZW5jZTpj
aGlsZCB3aXRoT3duZXI6cm9vdF07CisKKy8vICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG1hbmFn
ZWQgSlNWYWx1ZSB0aGF0IHdpbGwgb25seSBiZSBrZXB0IGFsaXZlIGlmIHdlIHByb3Blcmx5IHJl
c2NhbgorLy8gICAgICAgICAvLyB0aGUgZXh0ZXJuYWwgb2JqZWN0IGdyYXBoLgorLy8gICAgICAg
ICBKU01hbmFnZWRWYWx1ZSAqbWFuYWdlZEpTT2JqZWN0ID0gbmlsOworLy8gICAgICAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKy8vICAgICAgICAgICAgIEpTVmFsdWUgKmpzT2JqZWN0ID0gW0pTVmFs
dWUgdmFsdWVXaXRoT2JqZWN0OkAiaGVsbG8iIGluQ29udGV4dDpjb250ZXh0XTsKKy8vICAgICAg
ICAgICAgIG1hbmFnZWRKU09iamVjdCA9IFtKU01hbmFnZWRWYWx1ZSBtYW5hZ2VkVmFsdWVXaXRo
VmFsdWU6anNPYmplY3RdOworLy8gICAgICAgICAgICAgW2NvbnRleHQudmlydHVhbE1hY2hpbmUg
YWRkTWFuYWdlZFJlZmVyZW5jZTptYW5hZ2VkSlNPYmplY3Qgd2l0aE93bmVyOmNoaWxkXTsKKy8v
ICAgICAgICAgfQorCisvLyAgICAgICAgIC8vIEZvcmNlIGFub3RoZXIgRWRlbkNvbGxlY3Rpb24u
IEl0IHNob3VsZCByZXNjYW4gdGhlIG5ldyBwYXJ0IG9mIHRoZSBleHRlcm5hbCBvYmplY3QgZ3Jh
cGguCisvLyAgICAgICAgIEpTU3luY2hyb25vdXNFZGVuQ29sbGVjdEZvckRlYnVnZ2luZyhbY29u
dGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKICAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIHRo
YXQgdGhlIG1hbmFnZWQgSlNWYWx1ZSBpcyBzdGlsbCBhbGl2ZS4KLSAgICAgICAgY2hlY2tSZXN1
bHQoQCJFZGVuQ29sbGVjdGlvbiBkb2Vzbid0IHJlY2xhaW0gbmV3IG1hbmFnZWQgdmFsdWVzIiwg
W21hbmFnZWRKU09iamVjdCB2YWx1ZV0gIT0gbmlsKTsKLSAgICB9CisvLyAgICAgICAgIC8vIENo
ZWNrIHRoYXQgdGhlIG1hbmFnZWQgSlNWYWx1ZSBpcyBzdGlsbCBhbGl2ZS4KKy8vICAgICAgICAg
Y2hlY2tSZXN1bHQoQCJFZGVuQ29sbGVjdGlvbiBkb2Vzbid0IHJlY2xhaW0gbmV3IG1hbmFnZWQg
dmFsdWVzIiwgW21hbmFnZWRKU09iamVjdCB2YWx1ZV0gIT0gbmlsKTsKKy8vICAgICB9CiAKLSAg
ICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0Nv
bnRleHQgYWxsb2NdIGluaXRdOworLy8gICAgIEBhdXRvcmVsZWFzZXBvb2wgeworLy8gICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CiAgICAgICAg
IAotICAgICAgICBwdGhyZWFkX3QgdGhyZWFkSUQ7Ci0gICAgICAgIHB0aHJlYWRfY3JlYXRlKCZ0
aHJlYWRJRCwgTlVMTCwgJnRocmVhZE1haW4sIChfX2JyaWRnZSB2b2lkKiljb250ZXh0KTsKLSAg
ICAgICAgcHRocmVhZF9qb2luKHRocmVhZElELCBudWxscHRyKTsKLSAgICAgICAgSlNTeW5jaHJv
bm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJl
Zl0pOworLy8gICAgICAgICBwdGhyZWFkX3QgdGhyZWFkSUQ7CisvLyAgICAgICAgIHB0aHJlYWRf
Y3JlYXRlKCZ0aHJlYWRJRCwgTlVMTCwgJnRocmVhZE1haW4sIChfX2JyaWRnZSB2b2lkKiljb250
ZXh0KTsKKy8vICAgICAgICAgcHRocmVhZF9qb2luKHRocmVhZElELCBudWxscHRyKTsKKy8vICAg
ICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IEpT
R2xvYmFsQ29udGV4dFJlZl0pOwogCi0gICAgICAgIGNoZWNrUmVzdWx0KEAiRGlkIG5vdCBjcmFz
aCBhZnRlciBlbnRlcmluZyB0aGUgVk0gZnJvbSBhbm90aGVyIHRocmVhZCIsIHRydWUpOwotICAg
IH0KKy8vICAgICAgICAgY2hlY2tSZXN1bHQoQCJEaWQgbm90IGNyYXNoIGFmdGVyIGVudGVyaW5n
IHRoZSBWTSBmcm9tIGFub3RoZXIgdGhyZWFkIiwgdHJ1ZSk7CisvLyAgICAgfQogICAgIAogICAg
IEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBzdGQ6OnZlY3RvcjxwdGhyZWFkX3Q+IHRocmVh
ZHM7CkBAIC0xNjE5LDEyICsxNjE5LDEyIEBAIHN0YXRpYyB2b2lkIHRlc3RPYmplY3RpdmVDQVBJ
TWFpbigpCiAgICAgICAgIGNoZWNrUmVzdWx0KEAiUmFuIGNvZGUgaW4gZml2ZSBjb25jdXJyZW50
IFZNcyB0aGF0IEdDJ2QiLCBvayk7CiAgICAgfQogCi0gICAgY3VycmVudFRoaXNJbnNpZGVCbG9j
a0dldHRlclRlc3QoKTsKLSAgICBydW5EYXRlVGVzdHMoKTsKLSAgICBydW5KU0V4cG9ydFRlc3Rz
KCk7Ci0gICAgcnVuSlNXcmFwcGVyTWFwVGVzdHMoKTsKLSAgICBydW5SZWdyZXNzMTQxMjc1KCk7
Ci0gICAgcnVuUmVncmVzczE0MTgwOSgpOworICAgIC8vIGN1cnJlbnRUaGlzSW5zaWRlQmxvY2tH
ZXR0ZXJUZXN0KCk7CisgICAgLy8gcnVuRGF0ZVRlc3RzKCk7CisgICAgLy8gcnVuSlNFeHBvcnRU
ZXN0cygpOworICAgIC8vIHJ1bkpTV3JhcHBlck1hcFRlc3RzKCk7CisgICAgLy8gcnVuUmVncmVz
czE0MTI3NSgpOworICAgIC8vIHJ1blJlZ3Jlc3MxNDE4MDkoKTsKIH0KIAogQHByb3RvY29sIE51
bWJlclByb3RvY29sIDxKU0V4cG9ydD4KQEAgLTI4MzYsNiArMjgzNiw5IEBAIHZvaWQgdGVzdE9i
amVjdGl2ZUNBUEkoY29uc3QgY2hhciogZmlsdGVyKQogewogICAgIE5TTG9nKEAiVGVzdGluZyBP
YmplY3RpdmUtQyBBUEkiKTsKIAorICAgIGludCBhID0gMDsKKyAgICBpZiAoYSkgeworCiAgICAg
YXV0byBzaG91bGRSdW4gPSBbJl0gKGNvbnN0IGNoYXIqIHRlc3QpIC0+IGJvb2wgewogICAgICAg
ICBpZiAoZmlsdGVyKQogICAgICAgICAgICAgcmV0dXJuIHN0cmNhc2VzdHIodGVzdCwgZmlsdGVy
KTsKQEAgLTI4ODksNiArMjg5Miw3IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hh
ciogZmlsdGVyKQogCiAgICAgUlVOKHRlc3RNaWNyb3Rhc2tXaXRoRnVuY3Rpb24oKSk7CiAKKyAg
ICB9CiAgICAgaWYgKCFmaWx0ZXIpCiAgICAgICAgIHRlc3RPYmplY3RpdmVDQVBJTWFpbigpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaAppbmRleCAzZDE5NDlhNDA3ODVkOTljYTYxNTk1YWFiMDRiZTZmMWQw
ZDk2YmEzLi4yMzU0YzQ1MzY4YzdjMGQ1Y2U5MDE4YWNmZjI4NGM0YTBhMDQzMWE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9B
c3NlbWJsZXIuaApAQCAtMjQ1LDYgKzI0NSwzNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9
OwogCisgICAgLy8gUHJlSW5kZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFu
IGFkZHJlc3Mgd2l0aCBiYXNlIGFkZHJlc3MgYW5kIHByZS1pbmNyZW1lbnQvZGVjcmVtZW50IGlu
ZGV4LgorICAgIHN0cnVjdCBQcmVJbmRleEFkZHJlc3MgeworICAgICAgICBQcmVJbmRleEFkZHJl
c3MoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFzZSkK
KyAgICAgICAgICAgICwgaW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIFJlZ2lzdGVySUQgYmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKKyAgICAv
LyBQb3N0SW5kZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mg
d2l0aCBiYXNlIGFkZHJlc3MgYW5kIHBvc3QtaW5jcmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAg
ICBzdHJ1Y3QgUG9zdEluZGV4QWRkcmVzcyB7CisgICAgICAgIFBvc3RJbmRleEFkZHJlc3MoUmVn
aXN0ZXJJRCBiYXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFzZSkKKyAgICAg
ICAgICAgICwgaW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJl
Z2lzdGVySUQgYmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKICAgICAvLyBBYnNv
bHV0ZUFkZHJlc3M6CiAgICAgLy8KICAgICAvLyBEZXNjcmliZXMgYW4gbWVtb3J5IG9wZXJhbmQg
Z2l2ZW4gYnkgYSBwb2ludGVyLiAgRm9yIHJlZ3VsYXIgbG9hZCAmIHN0b3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCmlu
ZGV4IGZlMzBkOWM4NGQzNTI3ZWViMTZmY2QwNmUxMTVmYzY4ZDY5MDkwZmQuLjJhOTEyZDBkZDI2
NjI2YmQ3NGUxMDNiZWY5NjVmMmJhZGZjZTBiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0xNDQ1LDkgKzE0
NDUsMTQgQEAgcHVibGljOgogICAgICAgICBsb2FkPDY0PihhZGRyZXNzLCBkZXN0KTsKICAgICB9
CiAKLSAgICB2b2lkIGxvYWQ2NChSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4IHNpbW0sIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB2b2lkIGxvYWQ2NChQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3QsIHNyYywg
c2ltbSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLmJhc2UsIFByZUlu
ZGV4KHNyYy5pbmRleCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZDY0KFBvc3RJbmRleEFkZHJl
c3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8
NjQ+KGRlc3QsIHNyYy5iYXNlLCBQb3N0SW5kZXgoc3JjLmluZGV4KSk7CiAgICAgfQogCiAgICAg
RGF0YUxhYmVsMzIgbG9hZDY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3Ms
IFJlZ2lzdGVySUQgZGVzdCkKQEAgLTE1NDQsNiArMTU0OSwxNiBAQCBwdWJsaWM6CiAgICAgICAg
IGxvYWQ8MzI+KGFkZHJlc3MsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbG9hZDMyKFByZUlu
ZGV4QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxkcjwzMj4oZGVzdCwgc3JjLmJhc2UsIFByZUluZGV4KHNyYy5pbmRleCkpOworICAgIH0K
KworICAgIHZvaWQgbG9hZDMyKFBvc3RJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQb3N0
SW5kZXgoc3JjLmluZGV4KSk7CisgICAgfQorCiAgICAgRGF0YUxhYmVsMzIgbG9hZDMyV2l0aEFk
ZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7
CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTczMyw3ICsxNzQ4LDE3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0PihtZW1vcnlUZW1wUmVnaXN0ZXIs
IG1lbW9yeVRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJl
c3MpLCBhZGRyZXNzLnNjYWxlKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGFk
ZHJlc3MuYmFzZSwgbWVtb3J5VGVtcFJlZ2lzdGVyKTsKICAgICB9Ci0gICAgCisKKyAgICB2b2lk
IHN0b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5p
bmRleCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUG9zdElu
ZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMs
IGRlc3QuYmFzZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKICAgICB2b2lkIHN0
b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIGNvbnN0IHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAgICAg
ICBzdG9yZTw2ND4oc3JjLCBhZGRyZXNzKTsKQEAgLTE3NzcsMTEgKzE4MDIsNiBAQCBwdWJsaWM6
CiAgICAgICAgIHN0b3JlNjQoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CiAgICAgfQogCi0g
ICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIFBvc3RJbmRl
eCBzaW1tKQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QsIHNp
bW0pOwotICAgIH0KLSAgICAKICAgICBEYXRhTGFiZWwzMiBzdG9yZTY0V2l0aEFkZHJlc3NPZmZz
ZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAg
RGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CkBAIC0xODc5LDYgKzE4OTksMTYgQEAgcHVibGljOgog
ICAgICAgICBzdG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAorICAg
IHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgUHJlSW5kZXhBZGRyZXNzIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgZGVzdC5iYXNlLCBQcmVJbmRleChk
ZXN0LmluZGV4KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBQ
b3N0SW5kZXhBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8MzI+
KHNyYywgZGVzdC5iYXNlLCBQb3N0SW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKwogICAgIERh
dGFMYWJlbDMyIHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBB
ZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5kZXggZjIy
YmZmY2UxNTU0YjAyYzIyNmMyMTQ5MmFiMDY3YmFiMzhjNDBiNS4uNTM0ZWZlMTQzZjc5MGI5MDk4
OWJjMmNjNjNmZjA5YTA0NjdlNTU3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci90ZXN0bWFzbS5jcHAKQEAgLTIyMTIsNiArMjIxMiwxNzYgQEAgdm9pZCB0ZXN0WG9yTm90
V2l0aFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKICAgICAgICAgfQogICAgIH0KIH0KKwordm9pZCB0
ZXN0U3RvcmVQcmVQb3N0SW5kZXgzMigpCit7CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIs
IDMgfTsKKyAgICBpbnRwdHJfdCBhZGRyID0gYml0d2lzZV9jYXN0PGludHB0cl90PigmbnVtc1sx
XSk7CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVz
dDEgPSBbJl0gKGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3Vl
KGppdCk7CisKKyAgICAgICAgICAgIC8vICorK3AxID0gNDsgcmV0dXJuIHAxOworICAgICAgICAg
ICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlByZUlu
ZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBq
aXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
KworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGpp
dC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0
b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQzMl90KiBwMSA9IGJpdHdpc2VfY2Fz
dDxpbnQzMl90Kj4odGVzdDEoNCkpOworICAgIENIRUNLX0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tf
RVEoKi0tcDEsIG51bXNbMV0pOworCisgICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50MzJfdCBzcmMp
IHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkg
eworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAg
Ly8gKnAyKysgPSA1OyByZXR1cm4gcDI7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihHUFJJbmZv
Ojphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjph
cmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1
bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1
bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7
CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAg
IH07CisKKyAgICBpbnQzMl90KiBwMiA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4odGVzdDIoNSkp
OworICAgIENIRUNLX0VRKCpwMiwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDIsIDUpOworfQorCit2
b2lkIHRlc3RTdG9yZVByZVBvc3RJbmRleDY0KCkKK3sKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsg
MSwgMiwgMyB9OworICAgIGludHB0cl90IGFkZHIgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZu
dW1zWzFdKTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0
byB0ZXN0MSA9IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBp
bGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKisrcDEgPSA0OyByZXR1cm4gcDE7CisgICAg
ICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6
UHJlSW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAg
ICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAg
ICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJf
dD4oc3RvcmUsIHNyYywgYWRkcik7CisgICAgfTsKKworICAgIGludDY0X3QqIHAxID0gYml0d2lz
ZV9jYXN0PGludDY0X3QqPih0ZXN0MSg0KSk7CisgICAgQ0hFQ0tfRVEoKnAxLCA0KTsKKyAgICBD
SEVDS19FUSgqLS1wMSwgbnVtc1sxXSk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQ2NF90
IHNyYykgeworICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAg
ICAgICAvLyAqcDIrKyA9IDU7IHJldHVybiBwMjsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQ
UkluZm86OmFyZ3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUklu
Zm86OmFyZ3VtZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86
OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBl
bWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAg
ICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUsIHNyYywgYWRkcik7
CisgICAgfTsKKworICAgIGludDY0X3QqIHAyID0gYml0d2lzZV9jYXN0PGludDY0X3QqPih0ZXN0
Mig1KSk7CisgICAgQ0hFQ0tfRVEoKnAyLCA0KTsKKyAgICBDSEVDS19FUSgqLS1wMiwgNSk7Cit9
CisKK3ZvaWQgdGVzdExvYWRQcmVQb3N0SW5kZXgzMigpCit7CisgICAgaW50MzJfdCBudW1zW10g
PSB7IDEsIDIsIDMgfTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDMyX3QpOworCisg
ICAgYXV0byB0ZXN0MSA9IFsmXSAoaW50MzJfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9h
ZCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9
IDQ7IHJldHVybiByZXM7CisgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6UHJl
SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIocmVwbGFjZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFy
Z3VtZW50R1BSMCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIx
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVw
aWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAg
ICByZXR1cm4gaW52b2tlPGludDMyX3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworICAgIAor
ICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA0KTsKKwor
ICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxv
YWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRG
dW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9ICpwMisrOyAqcDIg
PSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlBv
c3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4obG9hZCwgJm51bXNbMV0pOworICAgIH07CisKKyAg
ICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgNSk7Cit9CisK
K3ZvaWQgdGVzdExvYWRQcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaW50NjRfdCBudW1zW10gPSB7
IDEsIDIsIDMgfTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAg
YXV0byB0ZXN0MSA9IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9
IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7
IHJldHVybiByZXM7CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UHJlSW5k
ZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOworICAgICAgICAgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
NjQocmVwbGFjZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxv
Z3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm4gaW52b2tlPGludDY0X3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hF
Q0tfRVEodGVzdDEoNCksIDMpOworICAgIENIRUNLX0VRKG51bXNbMl0sIDQpOworCisgICAgYXV0
byB0ZXN0MiA9IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNv
bXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKnAyKys7ICpwMiA9IDU7IHJl
dHVybiByZXM7CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UG9zdEluZGV4
QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0
KHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVu
dEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1
ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuIGludm9rZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNL
X0VRKHRlc3QyKDUpLCAyKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA1KTsKK30KICNlbmRpZgog
CiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtNDQ3NSw2ICs0
NjQ1LDExIEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFE
X1NBRkVUWV9BTkFMWVNJUwogICAgIFJVTih0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDY0KCkpOwog
ICAgIFJVTih0ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5v
dFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0U3RvcmVQcmVQb3N0
SW5kZXgzMigpKTsKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4NjQoKSk7CisgICAgUlVO
KHRlc3RMb2FkUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4
NjQoKSk7CiAjZW5kaWYKIAogI2lmIENQVShBUk02NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IGQ1ZmMzMTY0NjU5NjhlYjczNzFiNmZmMWNjNmY4MzE3
ZmVjZGU1MmUuLjVlM2I1N2E2NjU0MTFiNWMyZGMwM2Q3ODhhMjkzZjZlMmRiOTBmNGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC01NDYsNyArNTQ2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJl
dHVybiBzY2FsZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBv
cGVyYW5kIGludG8gYW4gYWRkcmVzcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVu
YW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KICAgICBBcmcgZWZmZWN0aXZlQWRkcihW
YWx1ZSogYWRkcmVzcywgSW50IG9mZnNldCwgV2lkdGggd2lkdGgpCkBAIC0xMTQ2LDEyICsxMTQ2
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBBaXI6Ok1vdmUzMjoKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFN0b3JlMzIsIEFyZzo6WmVyb1JlZywgZGVzdC5r
aW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0oV2lkdGgzMikpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdChTdG9yZTMyLCBtX3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oTW92ZTMyLCBBcmc6Olplcm9SZWcsIGRl
c3Qua2luZCgpKSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdpZHRoMzIpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEluc3QoTW92ZTMyLCBtX3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIEFpcjo6TW92
ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFN0b3JlNjQsIEFyZzo6WmVy
b1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0oV2lkdGg2NCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9yZTY0LCBtX3ZhbHVlLCB6ZXJvUmVnKCks
IGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oTW92ZSwgQXJnOjpa
ZXJvUmVnLCBkZXN0LmtpbmQoKSkgJiYgZGVzdC5pc1ZhbGlkRm9ybShXaWR0aDY0KSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KE1vdmUsIG1fdmFsdWUsIHplcm9SZWcoKSwg
ZGVzdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KQEAgLTI1NTksNiArMjU1OSwyOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBhdXRvIHRyeUFwcGVuZFByZUluZGV4ID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTW92ZVdpdGhJbmNyZW1l
bnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50eXBlKCkpOworICAgICAgICAgICAg
ICAgIC8vIGRhdGFMb2coIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDBcbiIpOworICAg
ICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlByZUluZGV4LCBBcmc6
OlRtcCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAvLyBkYXRhTG9nKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAxXG4iKTsKKyAgICAg
ICAgICAgICAgICAvLyBkYXRhTG9nKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAyXG4i
KTsKKyAgICAgICAgICAgICAgICBpZiAoIUFpcjo6QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKG1l
bW9yeS0+b2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgLy8gZGF0YUxvZygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gMywg
bnVtVXNlczogIiwgbV91c2VDb3VudHMubnVtVXNlcyhtZW1vcnktPmxhc3RDaGlsZCgpKSwgIlxu
Iik7CisgICAgICAgICAgICAgICAgaWYgKCFtZW1vcnktPnByZUluZGV4QWRkKCkgfHwgY2FuQmVJ
bnRlcm5hbChtZW1vcnktPnByZUluZGV4QWRkKCkpIHx8IG1fdXNlQ291bnRzLm51bVVzZXMobWVt
b3J5LT5sYXN0Q2hpbGQoKSkgPiAyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgZGF0YUxvZygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
NCAiLCBtZW1vcnktPnR5cGUoKSwgIiBhdCAiLCBkZWVwRHVtcChtZW1vcnkpLCAiXG4iKTsKKwor
ICAgICAgICAgICAgICAgIG1fcHJlSW5kZXhBZGRzLmFkZChtZW1vcnktPnByZUluZGV4QWRkKCkp
OworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIEFyZzo6cHJlSW5kZXgodG1wKG1lbW9y
eS0+bGFzdENoaWxkKCkpLCBtZW1vcnktPm9mZnNldCgpKSwgdG1wKG1lbW9yeSkpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYg
KHRyeUFwcGVuZFByZUluZGV4KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAg
ICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIGtpbmQsIG1fdmFsdWUsIGFkZHIobV92
YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBA
IC0yNjg4LDYgKzI3MTEsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICh0cnlBcHBlbmRB
ZGRXaXRoU2hpZnQobGVmdCwgcmlnaHQpIHx8IHRyeUFwcGVuZEFkZFdpdGhTaGlmdChyaWdodCwg
bGVmdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgICAgICBhdXRvIHRyeUFw
cGVuZFByZUluZGV4QWRkID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGlmICgh
bV9wcmVJbmRleEFkZHMuY29udGFpbnMobV92YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKG1f
dmFsdWUtPnR5cGUoKSksIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIHRtcChtX3ZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworCisgICAgICAgICAg
ICBpZiAodHJ5QXBwZW5kUHJlSW5kZXhBZGQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
ICAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFkZDMyLCBBZGQ2NCwgQWRkRG91YmxlLCBBZGRGbG9h
dCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtNDI1OCw2ICs0MjkxLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgSW5k
ZXhTZXQ8VmFsdWUqPiBtX2xvY2tlZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2
ZSBubyBUbXAgaW4gQWlyLgorICAgIEluZGV4U2V0PFZhbHVlKj4gbV9wcmVJbmRleEFkZHM7CiAg
ICAgSW5kZXhNYXA8VmFsdWUqLCBUbXA+IG1fdmFsdWVUb1RtcDsgLy8gVGhlc2UgYXJlIHZhbHVl
cyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNheSB0aGF0IGEgVmFsdWUqIHdpdGgg
YSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCiAgICAgSW5kZXhNYXA8VmFsdWUqLCBUbXA+IG1f
cGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBUbXAuCiAgICAgSGFzaE1hcDxWYWx1
ZSosIFZlY3RvcjxUbXA+PiBtX3R1cGxlVmFsdWVUb1RtcHM7IC8vIFRoaXMgaXMgdGhlIHNhbWUg
YXMgbV92YWx1ZVRvVG1wIGZvciBWYWx1ZXMgdGhhdCBhcmUgVHVwbGVzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKaW5kZXggZTc2ODI2NGMxM2YxNjdlZjUwNmJiZWEy
NjYxNjY3OTNjNjc1NzMzZS4uZjk3ZGI4ZDYzYTcyMzRlYTVhMmU4OTlhZDM5NzFiODQ3NjNhNmM4
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCkBAIC0zNSw2ICsz
NSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgSlNfRVhQT1JU
X1BSSVZBVEUgTWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworCiBwdWJsaWM6CiAgICAgc3Rh
dGljIGJvb2wgYWNjZXB0cyhLaW5kIGtpbmQpCiAgICAgewpAQCAtNjksNiArNzAsOSBAQCBwdWJs
aWM6CiAgICAgY29uc3QgSGVhcFJhbmdlJiBmZW5jZVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9m
ZW5jZVJhbmdlOyB9CiAgICAgdm9pZCBzZXRGZW5jZVJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFu
Z2UpIHsgbV9mZW5jZVJhbmdlID0gcmFuZ2U7IH0KIAorICAgIFZhbHVlKiBwcmVJbmRleEFkZCgp
IHsgcmV0dXJuIG1fcHJlSW5kZXhBZGQ7IH0KKyAgICB2b2lkIHNldFByZUluZGV4QWRkKFZhbHVl
KiBhZGRyKSB7IG1fcHJlSW5kZXhBZGQgPSBhZGRyOyB9CisKICAgICBib29sIGlzU3RvcmUoKSBj
b25zdCB7IHJldHVybiBCMzo6aXNTdG9yZShvcGNvZGUoKSk7IH0KICAgICBib29sIGlzTG9hZCgp
IGNvbnN0IHsgcmV0dXJuIEIzOjppc0xvYWQob3Bjb2RlKCkpOyB9CiAKQEAgLTE1MCw2ICsxNTQs
NyBAQCBwcml2YXRlOgogICAgIE9mZnNldFR5cGUgbV9vZmZzZXQgeyAwIH07CiAgICAgSGVhcFJh
bmdlIG1fcmFuZ2UgeyBIZWFwUmFuZ2U6OnRvcCgpIH07CiAgICAgSGVhcFJhbmdlIG1fZmVuY2VS
YW5nZSB7IEhlYXBSYW5nZSgpIH07CisgICAgVmFsdWUqIG1fcHJlSW5kZXhBZGQgeyBudWxscHRy
IH07CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAppbmRleCAyMjgwZmQ3NzEyNTJlNzI2MGY2ODUw
NTA5MmZkNTQzY2ZlMDYxODU3Li5mNDU1NjY1ZDJhMjJkNTVlMzFlMWZjOTc0YzhmYTMzMjE0OWI0
OWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0
aC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
CkBAIC00ODEsNiArNDgxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgaGFuZGxlQ2hhbmdlZENG
R0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJlc3VsdCB8PSBtX2No
YW5nZWQ7CisKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkICYmIG1fcHJvYy5vcHRMZXZlbCgp
ID49IDIpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgpIDwgMikgewpA
QCAtNDg4LDcgKzQ4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHNpbXBsaWZ5Q0ZHKCk7CiAg
ICAgICAgICAgICBoYW5kbGVDaGFuZ2VkQ0ZHSWZOZWNlc3NhcnkoKTsKICAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTE5NDAsNiAr
MTk0MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBtZW1vcnkt
Pm9mZnNldCgpOwogICAgICAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9m
ZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgPT0gb2Zmc2V0KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtZW1vcnktPnNldFByZUluZGV4QWRkKGFkZHJlc3MpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3MtPmNoaWxkKDApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgbWVtb3J5LT5sYXN0Q2hpbGQoKSA9IGFkZHJlc3M7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBtZW1vcnktPnNldE9mZnNldChzbWFsbE9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5jcHAKaW5kZXggMTAzYzZlY2NhM2QzMTRiYjRlZDhjMDJhNGQyZjAwOWNh
NjQxZDAwMS4uNzdlZTg0MjUxMjRiOWQ4YjhjNTgyZjM5ZmY5NjlmNjBmZDE2Y2MwMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcApAQCAtMTMwLDYgKzEzMCwxMSBAQCB1
bnNpZ25lZCBBcmc6OmpzSGFzaCgpIGNvbnN0CiAgICAgICAgIHJlc3VsdCArPSBtX2Jhc2UuaW50
ZXJuYWxWYWx1ZSgpOwogICAgICAgICByZXN1bHQgKz0gbV9pbmRleC5pbnRlcm5hbFZhbHVlKCk7
CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJlSW5kZXg6CisgICAgY2FzZSBQb3N0SW5kZXg6
CisgICAgICAgIHJlc3VsdCArPSBtX29mZnNldDsKKyAgICAgICAgcmVzdWx0ICs9IG1fYmFzZS5p
bnRlcm5hbFZhbHVlKCk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhY2s6CiAgICAgICAg
IHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zY2FsZSk7CiAgICAgICAgIHJlc3Vs
dCArPSBzdGFja1Nsb3QoKS0+aW5kZXgoKTsKQEAgLTE2MSw3ICsxNjYsNyBAQCB2b2lkIEFyZzo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4
Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIHVuc2lnbmVkPihtX29mZnNldCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBaZXJvUmVnOgotICAgICAgICBvdXQucHJpbnQoIiUleHpyIik7Cisg
ICAgICAgIG91dC5wcmludCgiJXh6ciIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTaW1w
bGVBZGRyOgogICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIpIik7CkBAIC0xODAsNiAr
MTg1LDEyIEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAg
ICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgpKTsKICAgICAgICAgb3V0LnByaW50KCIpIik7CiAg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBvdXQucHJpbnQoIigi
LCBiYXNlKCksICIsUHJlKCQiLCBvZmZzZXQoKSwgIikpIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLFBvc3Qo
JCIsIG9mZnNldCgpLCAiKSkiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU3RhY2s6CiAg
ICAgICAgIGlmIChvZmZzZXQoKSkKICAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CkBA
IC0yNjEsNiArMjcyLDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBB
cmc6OktpbmQga2luZCkKICAgICBjYXNlIEFyZzo6SW5kZXg6CiAgICAgICAgIG91dC5wcmludCgi
SW5kZXgiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpQcmVJbmRleDoKKyAgICAg
ICAgb3V0LnByaW50KCJQcmVJbmRleCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6
OlBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQb3N0SW5kZXgiKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQXJnOjpSZWxDb25kOgogICAgICAgICBvdXQucHJpbnQoIlJlbENvbmQi
KTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKaW5k
ZXggY2U1YTRlNzM3OWFkNjQ0NDVmMGMzYWJkMTI5ZjMyOWI5NDdmZTgxMi4uZWEyMjYyOGFlMTJl
MTFmZWI0NWRmNjdhY2YzZGE4ZDY4NjBiNGZkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5oCkBAIC0xLDMgKzEsNCBAQAorCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTc3LDYgKzc4LDggQEAg
cHVibGljOgogICAgICAgICBTdGFjaywKICAgICAgICAgQ2FsbEFyZywKICAgICAgICAgSW5kZXgs
CisgICAgICAgIFByZUluZGV4LAorICAgICAgICBQb3N0SW5kZXgsCiAKICAgICAgICAgLy8gSW1t
ZWRpYXRlIG9wZXJhbmRzIHRoYXQgY3VzdG9taXplIHRoZSBiZWhhdmlvciBvZiBhbiBvcGVyYXRp
b24uIFlvdSBjYW4gdGhpbmsgb2YgdGhlbSBhcwogICAgICAgICAvLyBzZWNvbmRhcnkgb3Bjb2Rl
cy4gVGhleSBhcmUgYWx3YXlzICJVc2UiJ2QuCkBAIC02NDksNiArNjUyLDMwIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIEFyZzo6aW5kZXgoYmFzZSwgaW5kZXgsIHNjYWxlLCAwKTsKICAgICB9
CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxP
ZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgQXJnIHByZUluZGV4KEFpcjo6VG1wIGJhc2UsIEludCBp
bmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VS
VChpc0ludDkoaW5kZXgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IFByZUluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zm
c2V0PEludD4+CisgICAgc3RhdGljIEFyZyBwb3N0SW5kZXgoQWlyOjpUbXAgYmFzZSwgSW50IGlu
ZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJU
KGlzSW50OShpbmRleCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9r
aW5kID0gUG9zdEluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CiAgICAgc3RhdGljIEFyZyByZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIEFyZyByZXN1bHQ7CkBAIC03OTksNiArODI2
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKICAgICB9CiAK
KyAgICBib29sIGlzUHJlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBQcmVJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUG9zdEluZGV4KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUG9zdEluZGV4OworICAgIH0KKwogICAgIGJv
b2wgaXNNZW1vcnkoKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKQEAg
LTgwOCw2ICs4NDUsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNh
c2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoK
KyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk3Miw3ICsxMDExLDcg
QEAgcHVibGljOgogCiAgICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0CiAgICAgewotICAgICAgICBB
U1NFUlQoa2luZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwga2luZCgpID09
IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBBU1NFUlQo
a2luZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEV4dGVu
ZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXggfHwga2luZCgpID09IFByZUluZGV4IHx8
IGtpbmQoKSA9PSBQb3N0SW5kZXgpOwogICAgICAgICByZXR1cm4gbV9iYXNlOwogICAgIH0KIApA
QCAtOTgyLDcgKzEwMjEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoa2luZCgpID09
IFN0YWNrKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBl
PihtX3NjYWxlKTsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBF
eHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4
KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9m
ZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4IHx8IGtpbmQo
KSA9PSBQcmVJbmRleCB8fCBraW5kKCkgPT0gUG9zdEluZGV4KTsKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCk7CiAgICAgfQogCkBAIC0xMDQ0
LDYgKzEwODMsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBF
eHRlbmRlZE9mZnNldEFkZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJl
SW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICBjYXNlIFN0YWNrOgogICAg
ICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKQEAgLTEwODEsNiArMTEy
Miw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVk
T2Zmc2V0QWRkcjoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoK
KyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNh
c2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBCaWdJbW06IC8vIFllcywgd2UgYWxsb3cgQmlnSW1t
IGFzIGEgZG91YmxlIGltbWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVudGluZyBzdGFj
a21hcHMuCkBAIC0xMjM3LDYgKzEyODAsMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVl
OjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFByZUluZGV4Rm9y
bShJbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAg
IHJldHVybiBpc1ZhbGlkU2lnbmVkSW1tOShvZmZzZXQpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJ
c0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFBvc3RJbmRleEZvcm0o
SW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBy
ZXR1cm4gaXNWYWxpZFNpZ25lZEltbTkob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKwogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgd2lkdGggdGhlbiB0aGlzIG9wdGlt
aXN0aWNhbGx5IGFzc3VtZXMgdGhhdCB5b3UncmUgdXNpbmcgdGhlIHJpZ2h0IHdpZHRoLiBCdXQK
ICAgICAvLyB0aGUgd2lkdGggaXMgcmVsZXZhbnQgdG8gdmFsaWRpdHksIHNvIHBhc3NpbmcgYSBu
dWxsIHdpZHRoIGlzIG9ubHkgdXNlZnVsIGZvciBhc3NlcnRpb25zLiBEb24ndAogICAgIC8vIHBh
c3MgbnVsbCB3aWR0aHMgd2hlbiBjYXNjYWRpbmcgdGhyb3VnaCBBcmdzIGluIHRoZSBpbnN0cnVj
dGlvbiBzZWxlY3RvciEKQEAgLTEyNjUsNiArMTMyNCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm4gaXNWYWxpZEFkZHJGb3JtKG9mZnNldCgpLCB3aWR0aCk7CiAgICAgICAgIGNhc2Ug
SW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEluZGV4Rm9ybShzY2FsZSgpLCBvZmZz
ZXQoKSwgd2lkdGgpOworICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICAgICAgcmV0dXJu
IGlzVmFsaWRQcmVJbmRleEZvcm0ob2Zmc2V0KCkpOworICAgICAgICBjYXNlIFBvc3RJbmRleDoK
KyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkUG9zdEluZGV4Rm9ybShvZmZzZXQoKSk7CiAgICAg
ICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERv
dWJsZUNvbmQ6CkBAIC0xMjg0LDYgKzEzNDcsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU2lt
cGxlQWRkcjoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0
QWRkcjoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAg
ICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBJbmRleDoKQEAgLTEzMjYsNiArMTM5MSw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBT
aW1wbGVBZGRyOgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZz
ZXRBZGRyOgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoK
ICAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQLCBhcmdSb2xlID09IFVzZUFkZHIg
PyBhcmdXaWR0aCA6IHBvaW50ZXJXaWR0aCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEluZGV4OgpAQCAtMTM4Myw2ICsxNDUwLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCksIG1fZXh0ZW5kKTsKICAg
ICB9CiAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzIGFzUHJlSW5kZXhBZGRy
ZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ByZUluZGV4KCkpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIG9m
ZnNldCgpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyBh
c1Bvc3RJbmRleEFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUG9zdElu
ZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3Mo
bV9iYXNlLmdwcigpLCBvZmZzZXQoKSk7CisgICAgfQorCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwCmluZGV4IDkwNWU2MTdmYmRlMGUyYjdkNzU1
NTYzZTY4ODU4OWJkYWQ3MjZjODAuLjZhZDA1ODQyNjdiOGM3ZWU3MTQ5YjAyZjgyMzE1NzJiZWU4
Y2Y4YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJT
dGFja0FyZ3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJT
dGFja0FyZ3MuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBsb3dlclN0YWNrQXJncyhDb2Rl
JiBjb2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdpZHRo
ID09IFdpZHRoMzIpOwogCiAjaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlID0gU3RvcmUzMjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBaXI6Ok9wY29kZSBzdG9yZU9wY29kZSA9IE1vdmUzMjsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBaXI6OkFyZzo6S2luZCBvcGVyYW5kS2luZCA9IEFyZzo6WmVyb1Jl
ZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBaXI6OkFyZyBvcGVyYW5kID0gQXJnOjp6
ZXJvUmVnKCk7CiAjZWxpZiBDUFUoWDg2XzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXggNjYxZWFkZDIzNzNjNTRhNGJiYTk0N2E1NGJk
YTI1NTdiZGI4YWU0YS4uYWZkY2ZmMTYyYjU0YWFhYjE3NzdmN2FhNDI0YWFiNTgwOWYzN2U1YSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rl
cworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBA
IC02NDcsNiArNjQ3LDkgQEAgTW92ZSBVOkc6UHRyLCBEOkc6UHRyCiAgICAgSW5kZXgsIFRtcCBh
cyBsb2FkUHRyCiAgICAgVG1wLCBBZGRyIGFzIHN0b3JlUHRyCiAgICAgVG1wLCBJbmRleCBhcyBz
dG9yZVB0cgorICAgIGFybTY0OiBaZXJvUmVnLCBBZGRyIGFzIHN0b3JlNjQKKyAgICBhcm02NDog
WmVyb1JlZywgSW5kZXggYXMgc3RvcmU2NAorCiAgICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmVQ
dHIKIAogIyBUaGlzIGlzIGZvciBtb3ZpbmcgYmV0d2VlbiBzcGlsbCBzbG90cy4KQEAgLTY2MSwy
OCArNjY0LDM0IEBAIHg4Nl82NDogU3dhcDY0IFVEOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRt
cAogICAgIFRtcCwgQWRkcgogCithcm02NDogTW92ZVdpdGhJbmNyZW1lbnQ2NCBVOkc6NjQsIFVE
Okc6NjQKKyAgICBQcmVJbmRleCwgVG1wIGFzIGxvYWQ2NAorICAgIFBvc3RJbmRleCwgVG1wIGFz
IGxvYWQ2NAorICAgIFRtcCwgUHJlSW5kZXggYXMgc3RvcmU2NAorICAgIFRtcCwgUG9zdEluZGV4
IGFzIHN0b3JlNjQKKwogTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wIGFzIHpl
cm9FeHRlbmQzMlRvV29yZAogICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKICAgICBJbmRleCwgVG1w
IGFzIGxvYWQzMgogICAgIFRtcCwgQWRkciBhcyBzdG9yZTMyCiAgICAgVG1wLCBJbmRleCBhcyBz
dG9yZTMyCisgICAgYXJtNjQ6IFplcm9SZWcsIEFkZHIgYXMgc3RvcmUzMgorICAgIGFybTY0OiBa
ZXJvUmVnLCBJbmRleCBhcyBzdG9yZTMyCiAgICAgeDg2OiBJbW0sIFRtcCBhcyB6ZXJvRXh0ZW5k
MzJUb1dvcmQKICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZTMyCiAgICAgeDg2OiBJbW0sIElu
ZGV4IGFzIHN0b3JlMzIKIAorYXJtNjQ6IE1vdmVXaXRoSW5jcmVtZW50MzIgVTpHOjMyLCBVWkQ6
RzozMgorICAgIFByZUluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgUG9zdEluZGV4LCBUbXAgYXMg
bG9hZDMyCisgICAgVG1wLCBQcmVJbmRleCBhcyBzdG9yZTMyCisgICAgVG1wLCBQb3N0SW5kZXgg
YXMgc3RvcmUzMgorCiAjIFRoaXMgaXMgZm9yIG1vdmluZyBiZXR3ZWVuIHNwaWxsIHNsb3RzLgog
TW92ZTMyIFU6RzozMiwgWkQ6RzozMiwgUzpHOjMyCiAgICAgQWRkciwgQWRkciwgVG1wCiAKLWFy
bTY0OiBTdG9yZTMyIFU6RzozMiwgWkQ6RzozMgotICAgIFplcm9SZWcsIEFkZHIKLSAgICBaZXJv
UmVnLCBJbmRleAotCi1hcm02NDogU3RvcmU2NCBVOkc6NjQsIEQ6Rzo2NAotICAgIFplcm9SZWcs
IEFkZHIKLSAgICBaZXJvUmVnLCBJbmRleAotCiBTaWduRXh0ZW5kMzJUb1B0ciBVOkc6MzIsIEQ6
RzpQdHIKICAgICBUbXAsIFRtcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L29wY29kZV9nZW5lcmF0b3IucmIKaW5kZXggMzc0MGVmZGJkZDE0NmEzN2Y2ZWRlOWRkYmMyM2Rk
YmEwM2IwNzY0Ni4uZjFiZjFhNDZjZmM4ODllYzE5MzQ2ZjJjMDZiN2NmNTBmOWUzZGUwZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJi
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgpA
QCAtMjI5LDcgKzIyOSw3IEBAIGRlZiBpc0dGKHRva2VuKQogZW5kCiAKIGRlZiBpc0tpbmQodG9r
ZW4pCi0gICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJ
bW02NCl8KFplcm9SZWcpfChTaW1wbGVBZGRyKXwoQWRkcil8KEV4dGVuZGVkT2Zmc2V0QWRkcil8
KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25kKXwoU3RhdHVzQ29uZCkpXFov
CisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02
NCl8KFplcm9SZWcpfChTaW1wbGVBZGRyKXwoQWRkcil8KEV4dGVuZGVkT2Zmc2V0QWRkcil8KElu
ZGV4KXwoUHJlSW5kZXgpfChQb3N0SW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNv
bmQpfChTdGF0dXNDb25kKSlcWi8KIGVuZAogCiBkZWYgaXNBcmNoKHRva2VuKQpAQCAtMzAzLDcg
KzMwMyw3IEBAIGNsYXNzIFBhcnNlcgogCiAgICAgZGVmIGNvbnN1bWVLaW5kCiAgICAgICAgIHJl
c3VsdCA9IHRva2VuLnN0cmluZwotICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJ
bW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgWmVyb1JlZywgVG1wLCBTaW1wbGVBZGRyLCBB
ZGRyLCBFeHRlbmRlZE9mZnNldEFkZHIsIEluZGV4LCBSZWxDb25kLCBSZXNDb25kLCBEb3VibGVD
b25kLCBvciBTdGF0dXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAgICBwYXJz
ZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgWmVy
b1JlZywgVG1wLCBTaW1wbGVBZGRyLCBBZGRyLCBFeHRlbmRlZE9mZnNldEFkZHIsIEluZGV4LCBQ
cmVJbmRleCwgUG9zdEluZGV4LCBSZWxDb25kLCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBTdGF0
dXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQogICAgICAgICBhZHZhbmNlCiAgICAgICAg
IHJlc3VsdAogICAgIGVuZApAQCAtOTI5LDYgKzkyOSwxMiBAQCB3cml0ZUgoIk9wY29kZUdlbmVy
YXRlZCIpIHsKICAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKICAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZEluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5z
Y2FsZSgpLCBhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSwgI3thcmcud2lkdGhDb2RlfSkpIgogICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAg
ICAgICAgICAgIHdoZW4gIlByZUluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmICghQXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpKSki
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisg
ICAgICAgICAgICAgICAgd2hlbiAiUG9zdEluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImlmICghQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5vZmZz
ZXQoKSkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxz
ZSk7IgogICAgICAgICAgICAgICAgIHdoZW4gIkJpZ0ltbSIKICAgICAgICAgICAgICAgICB3aGVu
ICJSZWxDb25kIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCkBAIC0xMjM1LDYgKzEy
NDEsMTAgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgICAg
IG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgogICAgICAgICAgICAgICAg
IHdoZW4gIkluZGV4IgogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5k
ZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlByZUluZGV4IgorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1ByZUluZGV4QWRk
cmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIlBvc3RJbmRleCIKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNQb3N0SW5kZXhBZGRyZXNzKCkiCiAg
ICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29uZCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
cmludCAiYXJnc1sje2luZGV4fV0uYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkiCiAgICAgICAgICAg
ICAgICAgd2hlbiAiUmVzQ29uZCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCBjNzAz
MmVjMDg0ZGRmZGQ5MzVlNTUyN2ZhYWU5MzU2ODE5ODQ4MTc5Li5iMjJkODQ2MWNmMWIxM2NmODVk
MTY2YTcyYWZkYmEyNDljMjhkNTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0x
MTQwLDQgKzExNDAsOSBAQCB2b2lkIGFkZENvcHlUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERl
cXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYpOwogCiBib29sIHNob3VsZFJ1bihjb25z
dCBjaGFyKiBmaWx0ZXIsIGNvbnN0IGNoYXIqIHRlc3ROYW1lKTsKIAordm9pZCB0ZXN0TG9hZFBy
ZUluZGV4MzIoKTsKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCk7Cit2b2lkIHRlc3RMb2FkUG9z
dEluZGV4KCk7Cit2b2lkIHRlc3RJZmh5aigpOworCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCmluZGV4IDRjNTJhZGE5Y2M0MDJkZGU1
Mzk4OGNjOGYyZjVlOWUwZGRlMmUxMWMuLjU4YTI1YmQzZjg4ZTg3ODk5YmFhMmEyZDBjNGRkMDll
NDYzOGU5ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcApAQCAtMjgsNiAr
MjgsMjQ5IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisKK3ZvaWQgdGVzdElmaHlqKCkKK3sK
KyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIHRoZW5CbG9jayA9IHByb2MuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFi
bGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHkgPSBhZGRyMCArIDEKKyAgICAvLyByMSA9IDAK
KyAgICAvLyBVcHNpbG9uKHIxLCBecjMpCisgICAgLy8gaWYgeSAhPSBhZGRyMSBnb3RvIGRvbmUK
KyAgICBWYWx1ZSogeSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEFk
ZCwgT3JpZ2luKCksIAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksIAorICAgICAgICByb290LT5h
cHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCkpOworICAgIFZhbHVlKiBy
MSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKTsKKyAg
ICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCks
IHIsIHIxKTsKKyAgICBWYWx1ZSogY29uZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
Tm90RXF1YWwsIE9yaWdpbigpLCB5LCByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgIHJvb3QtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVk
QmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayh0aGVuQmxvY2spKTsKKworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gVGhlbl9CbG9jaworICAgIC8vIHogPSBMb2FkKHksIDApCisgICAg
Ly8gcjIgPSB5ICsgegorICAgIC8vIFVwc2lsb24ocjIsIF5yMykKKyAgICBNZW1vcnlWYWx1ZSog
eiA9IHRoZW5CbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwg
T3JpZ2luKCksIHkpOworICAgIFZhbHVlKiByMiA9IHRoZW5CbG9jay0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBBZGQsIE9yaWdpbigpLCB5LCB6KTsKKyAgICB0aGVuQmxvY2stPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjIpOworICAgIHRoZW5C
bG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVu
dGVkQmxvY2soZG9uZSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Js
b2NrCisgICAgLy8gcjMgPSBQaGkoKQorICAgIC8vIHJldHVybiByMworICAgIFZhbHVlKiByMyA9
IGRvbmUtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwg
cik7CisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIHIzKTsKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShw
cm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBjb21waWxlQW5kUnVuPGludDY0X3Q+KHBy
b2MsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oMEwpLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KDBM
KSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6
ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDMyX3Qg
bnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDMyX3Qq
IHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAg
IEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9
IHByb2MuYWRkVmFyaWFibGUoSW50MzIpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJp
YWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sK
KyAgICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpICAgICAgICAgICAgIAorICAg
IC8vIHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSBy
b290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50MzIsIDApOworICAgIHJv
b3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwg
cjEpOworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmRO
ZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50
ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29w
X1Rlc3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9
IFBoaSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9v
cFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwg
cik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihw
cm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29w
VGVzdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQs
IEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAg
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHAzID0g
cDIgKyAxCisgICAgLy8gcjMgPSByMiArIGxvYWQocDMpCisgICAgLy8gVXBzaWxvbihyMywgXnIy
KQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSog
cDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwg
bG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA0KSk7Cisg
ICAgTWVtb3J5VmFsdWUqIGxvYWQgPSBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihw
cm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHAzKTsKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9k
eS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9hZCk7CisgICAg
bG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4o
KSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsK
KworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6
CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIHIyKTsgIAorCisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgp
OworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8gdGVz
dCA9IFsmXSAoKSAtPiBpbnQzMl90IHsKKyAgICAgICAgaW50MzJfdCByID0gMDsKKyAgICAgICAg
d2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAgIHIgKz0gKisrcHRyOworICAgICAgICByZXR1cm4g
cjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQzMl90Pihwcm9jLCBi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCit2b2lkIHRlc3RMb2Fk
UHJlSW5kZXg2NCgpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAy
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwg
NSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQ2NF90KiBwdHIgPSBudW1zOworCisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJv
Yy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0
KTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8g
VXBzaWxvbihyMSwgXnIyKSAgICAgICAgICAgICAKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBV
cHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQo
cHJvYywgT3JpZ2luKCksIEludDY0LCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2Ms
IEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKwor
ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9v
cDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49
IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFi
bGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxv
b3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCks
IHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
QWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSks
IEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIHIzID0gcjIg
KyBsb2FkKHAzKQorICAgIC8vIFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBVcHNpbG9uKHAzLCBe
cDIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29u
c3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCkpOworICAgIE1lbW9yeVZhbHVlKiBsb2FkID0g
bG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdp
bigpLCBwMyk7CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvYWQpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9k
eS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBw
Myk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmln
aW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiByMgorICAg
IGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7
ICAgCisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7
CisgICAgZml4U1NBKHByb2MpOworCisgICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDY0X3Qg
eworICAgICAgICBpbnQ2NF90IHIgPSAwOworICAgICAgICB3aGlsZSAociA8IDEwKQorICAgICAg
ICAgICAgciArPSAqKytwdHI7CisgICAgICAgIHJldHVybiByOworICAgIH07CisKKyAgICBDSEVD
S19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
cHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQb3N0SW5kZXgoKQoreworICAgIGlm
IChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07Cisg
ICAgaW50NjRfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3Qg
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZh
cmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisgICAgVmFyaWFibGUqIHAgPSBw
cm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQo
cHJvYywgT3JpZ2luKCksIEludDY0LCAwKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxl
VmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVl
bnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBWYWx1
ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQs
IE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uc3QxMCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApOworICAgIFZhbHVlKiBjb25kID0gbG9v
cFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBj
b25zdDEwKTsKKyAgICBsb29wVGVzdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5j
aCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2Nr
KGxvb3BCb2R5KSk7CisKKyAgICBNZW1vcnlWYWx1ZSogbG9hZCA9IGxvb3BCb2R5LT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwgcDIpOworICAgIFZh
bHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCks
IHIyLCBsb2FkKTsKKyAgICBWYWx1ZSogY29uc3Q4ID0gbG9vcEJvZHktPmFwcGVuZE5ldzxDb25z
dDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KTsKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgY29uc3Q4KTsKKyAgICBs
b29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigp
LCByLCByMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBC
Mzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXdDb250cm9s
VmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOwor
CisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCAKKyAgICAgICAgZG9uZS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2Ms
IEIzOjpHZXQsIE9yaWdpbigpLCByKSk7ICAgCisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5
KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NBKHByb2MpOworCisgICAgYXV0byB0
ZXN0ID0gWyZdICgpIC0+IGludDY0X3QgeworICAgICAgICBpbnQ2NF90IHIgPSAwOworICAgICAg
ICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqcHRyKys7CisgICAgICAgIHJldHVy
biByOworICAgIH07CisKKyAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2Ms
IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKKwogdm9pZCB0ZXN0
SW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm8zMigpCiB7CiAgICAgaWYgKEpTQzo6T3B0aW9uczo6
ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCkBAIC0zNjk3LDYgKzM5NDAsMTEgQEAgdm9pZCBhZGRT
aHJUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQo
KT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMCkpOwog
ICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDEpKTsKICAgICBSVU4odGVzdFpT
aHJBcmdJbW0zMigweGZmZmZmZmZmLCA2MykpOworCisgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXgz
MigpKTsKKyAgICBSVU4odGVzdExvYWRQcmVJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFBv
c3RJbmRleCgpKTsKKyAgICBSVU4odGVzdElmaHlqKCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwCmluZGV4IDYzZTI2Njc4ODUyMDE4YTc2ODBjYTVmMDcxNDY5NjgxMDU4ODRiM2Iu
LjY5YmI2YjJiZTgxODcwYjU5ODMzMzY3YWYyNjc1YjdmNGVmMDU2ZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcApAQCAtMjMzLDgg
KzIzMyw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gaml0V3JpdGVUaHVua0dlbmVyYXRvCiAgICAgaml0LnJldCgpOwogCiAgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5sb2Fk
NjQoeDEsIFBvc3RJbmRleCg4KSwgeDYpOwotICAgIGppdC5zdG9yZTY0KHg2LCB4MywgUG9zdElu
ZGV4KDgpKTsKKyAgICBqaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNz
KHgxLCA4KSwgeDYpOworICAgIGppdC5zdG9yZTY0KHg2LCBNYWNyb0Fzc2VtYmxlcjo6UG9zdElu
ZGV4QWRkcmVzcyh4MywgOCkpOwogICAgIHNtYWxsQ29weS5saW5rKCZqaXQpOwogICAgIGppdC5i
cmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBUcnVzdGVkSW1tMzIoOCks
IHgyKS5saW5rVG8obG9jYWwwLCAmaml0KTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsb2Nh
bDIgPSBqaXQuYnJhbmNoQWRkNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIo
OCksIHgyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434167</attachid>
            <date>2021-07-24 05:59:19 -0700</date>
            <delta_ts>2021-07-24 14:34:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210724075918.patch</filename>
            <type>text/plain</type>
            <size>43352</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YzJiYTQ4MGQzMzQ0YTVkM2UyNTFiYzUyOGVhMWQ1NDk5YTk0NDQ0Li5mOWFjZjVmOTg1MjIwOWMy
YjI2ODVhMTBkZGQzYTI2ODNhMGM3NmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAyMS0wNy0yNCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0ZXN0T2JqZWN0aXZlQ0FQSU1haW4p
OgorICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAoYmxvY2tTaWduYXR1cmVD
b250YWluc0NsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKHRocmVhZE1haW4pOiBEZWxldGVkLgor
ICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzczo6UHJlSW5kZXhBZGRy
ZXNzKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRk
cmVzczo6UG9zdEluZGV4QWRkcmVzcyk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDMyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RvcmU2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNNjQ6OnN0b3JlMzIpOgorICAgICAgICAqIGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6
CisgICAgICAgIChKU0M6OnRlc3RTdG9yZVByZVBvc3RJbmRleDMyKToKKyAgICAgICAgKEpTQzo6
dGVzdFN0b3JlUHJlUG9zdEluZGV4NjQpOgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQcmVQb3N0SW5kZXg2NCk6CisgICAgICAg
ICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVlLmg6Cisg
ICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckFy
Zy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6anNIYXNoIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdURjo6cHJpbnRJ
bnRlcm5hbCk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OnByZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwb3N0SW5k
ZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUHJlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUG9zdEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc01lbW9yeSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6YmFzZSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b2Zmc2V0IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1ZhbGlkUG9zdEluZGV4Rm9ybSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxp
ZEZvcm0gY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjphc1ByZUluZGV4QWRkcmVzcyBjb25zdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6YXNQb3N0SW5kZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKiBiMy9h
aXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb3dlclN0
YWNrQXJncyk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAq
IGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgorICAg
ICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RJZmh5aik6CisgICAgICAgICh0
ZXN0TG9hZFByZUluZGV4MzIpOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDY0KToKKyAgICAg
ICAgKHRlc3RMb2FkUG9zdEluZGV4KToKKyAgICAgICAgKGFkZFNoclRlc3RzKToKKyAgICAgICAg
KiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OmppdFdyaXRlVGh1
bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTIxICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIHNwZWN1bGF0ZU5laXRoZXJEb3VibGVOb3JTdHJpbmdOb3JI
ZWFwQmlnSW50IHNob3VsZCBvbmx5IGhhdmUgYSBzaW5nbGUgSlNUeXBlIGJyYW5jaApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAppbmRleCAzZDE5NDlhNDA3ODVkOTljYTYxNTk1YWFiMDRiZTZmMWQwZDk2YmEzLi4y
MzU0YzQ1MzY4YzdjMGQ1Y2U5MDE4YWNmZjI4NGM0YTBhMDQzMWE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIu
aApAQCAtMjQ1LDYgKzI0NSwzNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9OwogCisgICAg
Ly8gUHJlSW5kZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mg
d2l0aCBiYXNlIGFkZHJlc3MgYW5kIHByZS1pbmNyZW1lbnQvZGVjcmVtZW50IGluZGV4LgorICAg
IHN0cnVjdCBQcmVJbmRleEFkZHJlc3MgeworICAgICAgICBQcmVJbmRleEFkZHJlc3MoUmVnaXN0
ZXJJRCBiYXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFzZSkKKyAgICAgICAg
ICAgICwgaW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lz
dGVySUQgYmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKKyAgICAvLyBQb3N0SW5k
ZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mgd2l0aCBiYXNl
IGFkZHJlc3MgYW5kIHBvc3QtaW5jcmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3Qg
UG9zdEluZGV4QWRkcmVzcyB7CisgICAgICAgIFBvc3RJbmRleEFkZHJlc3MoUmVnaXN0ZXJJRCBi
YXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFzZSkKKyAgICAgICAgICAgICwg
aW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQg
YmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKICAgICAvLyBBYnNvbHV0ZUFkZHJl
c3M6CiAgICAgLy8KICAgICAvLyBEZXNjcmliZXMgYW4gbWVtb3J5IG9wZXJhbmQgZ2l2ZW4gYnkg
YSBwb2ludGVyLiAgRm9yIHJlZ3VsYXIgbG9hZCAmIHN0b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCmluZGV4IGZlMzBk
OWM4NGQzNTI3ZWViMTZmY2QwNmUxMTVmYzY4ZDY5MDkwZmQuLjJhOTEyZDBkZDI2NjI2YmQ3NGUx
MDNiZWY5NjVmMmJhZGZjZTBiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0xNDQ1LDkgKzE0NDUsMTQgQEAg
cHVibGljOgogICAgICAgICBsb2FkPDY0PihhZGRyZXNzLCBkZXN0KTsKICAgICB9CiAKLSAgICB2
b2lkIGxvYWQ2NChSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4IHNpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB2b2lkIGxvYWQ2NChQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3QsIHNyYywgc2ltbSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLmJhc2UsIFByZUluZGV4KHNyYy5p
bmRleCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZDY0KFBvc3RJbmRleEFkZHJlc3Mgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3Qs
IHNyYy5iYXNlLCBQb3N0SW5kZXgoc3JjLmluZGV4KSk7CiAgICAgfQogCiAgICAgRGF0YUxhYmVs
MzIgbG9hZDY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgZGVzdCkKQEAgLTE1NDQsNiArMTU0OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWQ8MzI+
KGFkZHJlc3MsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbG9hZDMyKFByZUluZGV4QWRkcmVz
cyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcjwz
Mj4oZGVzdCwgc3JjLmJhc2UsIFByZUluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKworICAgIHZv
aWQgbG9hZDMyKFBvc3RJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQb3N0SW5kZXgoc3Jj
LmluZGV4KSk7CisgICAgfQorCiAgICAgRGF0YUxhYmVsMzIgbG9hZDMyV2l0aEFkZHJlc3NPZmZz
ZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTczMyw3ICsxNzQ4LDE3IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0PihtZW1vcnlUZW1wUmVnaXN0ZXIsIG1lbW9yeVRl
bXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRy
ZXNzLnNjYWxlKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGFkZHJlc3MuYmFz
ZSwgbWVtb3J5VGVtcFJlZ2lzdGVyKTsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkIHN0b3JlNjQo
UmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOwor
ICAgIH0KKworICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVz
cyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QuYmFz
ZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKICAgICB2b2lkIHN0b3JlNjQoUmVn
aXN0ZXJJRCBzcmMsIGNvbnN0IHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAgICAgICBzdG9yZTw2
ND4oc3JjLCBhZGRyZXNzKTsKQEAgLTE3NzcsMTEgKzE4MDIsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHN0b3JlNjQoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CiAgICAgfQogCi0gICAgdm9pZCBz
dG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIFBvc3RJbmRleCBzaW1tKQot
ICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QsIHNpbW0pOwotICAg
IH0KLSAgICAKICAgICBEYXRhTGFiZWwzMiBzdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgRGF0YUxhYmVs
MzIgbGFiZWwodGhpcyk7CkBAIC0xODc5LDYgKzE4OTksMTYgQEAgcHVibGljOgogICAgICAgICBz
dG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAorICAgIHZvaWQgc3Rv
cmUzMihSZWdpc3RlcklEIHNyYywgUHJlSW5kZXhBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgZGVzdC5iYXNlLCBQcmVJbmRleChkZXN0LmluZGV4
KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBQb3N0SW5kZXhB
ZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgZGVz
dC5iYXNlLCBQb3N0SW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKwogICAgIERhdGFMYWJlbDMy
IHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5kZXggZjIyYmZmY2UxNTU0
YjAyYzIyNmMyMTQ5MmFiMDY3YmFiMzhjNDBiNS4uNTM0ZWZlMTQzZjc5MGI5MDk4OWJjMmNjNjNm
ZjA5YTA0NjdlNTU3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0
bWFzbS5jcHAKQEAgLTIyMTIsNiArMjIxMiwxNzYgQEAgdm9pZCB0ZXN0WG9yTm90V2l0aFVuc2ln
bmVkUmlnaHRTaGlmdDY0KCkKICAgICAgICAgfQogICAgIH0KIH0KKwordm9pZCB0ZXN0U3RvcmVQ
cmVQb3N0SW5kZXgzMigpCit7CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAg
ICBpbnRwdHJfdCBhZGRyID0gYml0d2lzZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAg
aW50MzJfdCBpbmRleCA9IHNpemVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0g
KGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgIC8vICorK3AxID0gNDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0
b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVz
cyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMs
IGFkZHIpOworICAgIH07CisKKyAgICBpbnQzMl90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQzMl90
Kj4odGVzdDEoNCkpOworICAgIENIRUNLX0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEs
IG51bXNbMV0pOworCisgICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50MzJfdCBzcmMpIHsKKyAgICAg
ICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysg
PSA1OyByZXR1cm4gcDI7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAg
ICBpbnQzMl90KiBwMiA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4odGVzdDIoNSkpOworICAgIENI
RUNLX0VRKCpwMiwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RT
dG9yZVByZVBvc3RJbmRleDY0KCkKK3sKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMyB9
OworICAgIGludHB0cl90IGFkZHIgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZudW1zWzFdKTsK
KyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0ZXN0MSA9
IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0
KTsKKworICAgICAgICAgICAgLy8gKisrcDEgPSA0OyByZXR1cm4gcDE7CisgICAgICAgICAgICBq
aXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UHJlSW5kZXhB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJl
dCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUs
IHNyYywgYWRkcik7CisgICAgfTsKKworICAgIGludDY0X3QqIHAxID0gYml0d2lzZV9jYXN0PGlu
dDY0X3QqPih0ZXN0MSg0KSk7CisgICAgQ0hFQ0tfRVEoKnAxLCA0KTsKKyAgICBDSEVDS19FUSgq
LS1wMSwgbnVtc1sxXSk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQ2NF90IHNyYykgewor
ICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Cisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAq
cDIrKyA9IDU7IHJldHVybiBwMjsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rp
b25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUsIHNyYywgYWRkcik7CisgICAgfTsK
KworICAgIGludDY0X3QqIHAyID0gYml0d2lzZV9jYXN0PGludDY0X3QqPih0ZXN0Mig1KSk7Cisg
ICAgQ0hFQ0tfRVEoKnAyLCA0KTsKKyAgICBDSEVDS19FUSgqLS1wMiwgNSk7Cit9CisKK3ZvaWQg
dGVzdExvYWRQcmVQb3N0SW5kZXgzMigpCit7CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIs
IDMgfTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDMyX3QpOworCisgICAgYXV0byB0
ZXN0MSA9IFsmXSAoaW50MzJfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBp
bGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVy
biByZXM7CisgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRy
ZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICAgICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVw
bGFjZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
aW52b2tlPGludDMyX3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworICAgIAorICAgIENIRUNL
X0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA0KTsKKworICAgIGF1dG8g
dGVzdDIgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21w
aWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyByZXR1
cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFk
ZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihy
ZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
aml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
biBpbnZva2U8aW50MzJfdD4obG9hZCwgJm51bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19F
USh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgNSk7Cit9CisKK3ZvaWQgdGVz
dExvYWRQcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMg
fTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0ZXN0
MSA9IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVybiBy
ZXM7CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRyZXNz
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwor
ICAgICAgICAgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQocmVwbGFj
ZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7
CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52
b2tlPGludDY0X3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVz
dDEoNCksIDMpOworICAgIENIRUNLX0VRKG51bXNbMl0sIDQpOworCisgICAgYXV0byB0ZXN0MiA9
IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
aml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKnAyKys7ICpwMiA9IDU7IHJldHVybiByZXM7
CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhH
UFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2Up
LCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOwor
ICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9r
ZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3Qy
KDUpLCAyKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA1KTsKK30KICNlbmRpZgogCiAjaWYgQ1BV
KFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtNDQ3NSw2ICs0NjQ1LDExIEBA
IHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9B
TkFMWVNJUwogICAgIFJVTih0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDY0KCkpOwogICAgIFJVTih0
ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhVbnNp
Z25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0U3RvcmVQcmVQb3N0SW5kZXgzMigp
KTsKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2Fk
UHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKSk7CiAj
ZW5kaWYKIAogI2lmIENQVShBUk02NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCmluZGV4IGQ1ZmMzMTY0NjU5NjhlYjczNzFiNmZmMWNjNmY4MzE3ZmVjZGU1MmUu
LjAyODI1ZTY2OGQyMTE4ZGFlNjkyZTIzZDEyM2VmNDkxYTMzNjI0NjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC01NDYsNyArNTQ2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBzY2Fs
ZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBvcGVyYW5kIGlu
dG8gYW4gYWRkcmVzcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFs
dWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KICAgICBBcmcgZWZmZWN0aXZlQWRkcihWYWx1ZSogYWRk
cmVzcywgSW50IG9mZnNldCwgV2lkdGggd2lkdGgpCkBAIC0xMTQ2LDEyICsxMTQ2LDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgY2FzZSBBaXI6Ok1vdmUzMjoKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzVmFsaWRGb3JtKFN0b3JlMzIsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYm
IGRlc3QuaXNWYWxpZEZvcm0oV2lkdGgzMikpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSW5zdChTdG9yZTMyLCBtX3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNWYWxpZEZvcm0oTW92ZTMyLCBBcmc6Olplcm9SZWcsIGRlc3Qua2luZCgp
KSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdpZHRoMzIpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEluc3QoTW92ZTMyLCBtX3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIEFpcjo6TW92ZToKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFN0b3JlNjQsIEFyZzo6WmVyb1JlZywgZGVz
dC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0oV2lkdGg2NCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gSW5zdChTdG9yZTY0LCBtX3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oTW92ZSwgQXJnOjpaZXJvUmVnLCBk
ZXN0LmtpbmQoKSkgJiYgZGVzdC5pc1ZhbGlkRm9ybShXaWR0aDY0KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBJbnN0KE1vdmUsIG1fdmFsdWUsIHplcm9SZWcoKSwgZGVzdCk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KQEAgLTI1NTksNiArMjU1OSwyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHRy
eUFwcGVuZFByZUluZGV4ID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIEFpcjo6
T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTW92ZVdpdGhJbmNyZW1lbnQzMiwgTW92
ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50eXBlKCkpOworICAgICAgICAgICAgICAgIGlmICgh
aXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlByZUluZGV4LCBBcmc6OlRtcCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIUFpcjo6QXJnOjpp
c1ZhbGlkUHJlSW5kZXhGb3JtKG1lbW9yeS0+b2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFtZW1vcnktPnByZUluZGV4QWRk
KCkgfHwgIW1fdXNlQ291bnRzLm51bVVzZXMobWVtb3J5LT5wcmVJbmRleEFkZCgpKSB8fCBtX3Vz
ZUNvdW50cy5udW1Vc2VzKG1lbW9yeS0+bGFzdENoaWxkKCkpID4gMikKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgbV9wcmVJbmRleEFkZHMuYWRk
KG1lbW9yeS0+cHJlSW5kZXhBZGQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwg
QXJnOjpwcmVJbmRleCh0bXAobWVtb3J5LT5sYXN0Q2hpbGQoKSksIG1lbW9yeS0+b2Zmc2V0KCkp
LCB0bXAobWVtb3J5KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICBpZiAodHJ5QXBwZW5kUHJlSW5kZXgoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKICAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwg
a2luZCwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI2ODgsNiArMjcwNiwxNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaWYgKHRyeUFwcGVuZEFkZFdpdGhTaGlmdChsZWZ0LCByaWdodCkgfHwgdHJ5QXBw
ZW5kQWRkV2l0aFNoaWZ0KHJpZ2h0LCBsZWZ0KSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAK
KyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kUHJlSW5kZXhBZGQgPSBbJl0gKCkgLT4gYm9vbCB7
CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZUluZGV4QWRkcy5jb250YWlucyhtX3ZhbHVlKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGFwcGVu
ZChyZWxheGVkTW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgdG1wKG1fdmFsdWUtPmNoaWxk
KDApKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRQcmVJbmRleEFkZCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkMzIsIEFk
ZDY0LCBBZGREb3VibGUsIEFkZEZsb2F0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00MjU4LDYgKzQyODYsNyBAQCBwcml2YXRl
OgogICAgIH0KICAgICAKICAgICBJbmRleFNldDxWYWx1ZSo+IG1fbG9ja2VkOyAvLyBUaGVzZSBh
cmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhTZXQ8VmFs
dWUqPiBtX3ByZUluZGV4QWRkczsKICAgICBJbmRleE1hcDxWYWx1ZSosIFRtcD4gbV92YWx1ZVRv
VG1wOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ug
c2F5IHRoYXQgYSBWYWx1ZSogd2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KICAgICBJ
bmRleE1hcDxWYWx1ZSosIFRtcD4gbV9waGlUb1RtcDsgLy8gRWFjaCBQaGkgZ2V0cyBpdHMgb3du
IFRtcC4KICAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPFRtcD4+IG1fdHVwbGVWYWx1ZVRvVG1w
czsgLy8gVGhpcyBpcyB0aGUgc2FtZSBhcyBtX3ZhbHVlVG9UbXAgZm9yIFZhbHVlcyB0aGF0IGFy
ZSBUdXBsZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlW
YWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAppbmRleCBl
NzY4MjY0YzEzZjE2N2VmNTA2YmJlYTI2NjE2Njc5M2M2NzU3MzNlLi5mOTdkYjhkNjNhNzIzNGVh
NWEyZTg5OWFkMzk3MWI4NDc2M2E2YzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNNZW1vcnlWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01l
bW9yeVZhbHVlLmgKQEAgLTM1LDYgKzM1LDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgewogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1
ZSB7CisKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKEtpbmQga2luZCkKICAgICB7
CkBAIC02OSw2ICs3MCw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBIZWFwUmFuZ2UmIGZlbmNlUmFu
Z2UoKSBjb25zdCB7IHJldHVybiBtX2ZlbmNlUmFuZ2U7IH0KICAgICB2b2lkIHNldEZlbmNlUmFu
Z2UoY29uc3QgSGVhcFJhbmdlJiByYW5nZSkgeyBtX2ZlbmNlUmFuZ2UgPSByYW5nZTsgfQogCisg
ICAgVmFsdWUqIHByZUluZGV4QWRkKCkgeyByZXR1cm4gbV9wcmVJbmRleEFkZDsgfQorICAgIHZv
aWQgc2V0UHJlSW5kZXhBZGQoVmFsdWUqIGFkZHIpIHsgbV9wcmVJbmRleEFkZCA9IGFkZHI7IH0K
KwogICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIEIzOjppc1N0b3JlKG9wY29kZSgp
KTsgfQogICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyByZXR1cm4gQjM6OmlzTG9hZChvcGNvZGUo
KSk7IH0KIApAQCAtMTUwLDYgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgT2Zmc2V0VHlwZSBtX29m
ZnNldCB7IDAgfTsKICAgICBIZWFwUmFuZ2UgbV9yYW5nZSB7IEhlYXBSYW5nZTo6dG9wKCkgfTsK
ICAgICBIZWFwUmFuZ2UgbV9mZW5jZVJhbmdlIHsgSGVhcFJhbmdlKCkgfTsKKyAgICBWYWx1ZSog
bV9wcmVJbmRleEFkZCB7IG51bGxwdHIgfTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGgu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCmluZGV4
IDIyODBmZDc3MTI1MmU3MjYwZjY4NTA1MDkyZmQ1NDNjZmUwNjE4NTcuLmY0NTU2NjVkMmEyMmQ1
NWUzMWUxZmM5NzRjOGZhMzMyMTQ5YjQ5ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKQEAgLTQ4MSw2ICs0ODEsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBoYW5kbGVDaGFuZ2VkQ0ZHSWZOZWNlc3NhcnkoKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgcmVzdWx0IHw9IG1fY2hhbmdlZDsKKwogICAgICAgICB9IHdoaWxlIChtX2NoYW5n
ZWQgJiYgbV9wcm9jLm9wdExldmVsKCkgPj0gMik7CiAgICAgICAgIAogICAgICAgICBpZiAobV9w
cm9jLm9wdExldmVsKCkgPCAyKSB7CkBAIC00ODgsNyArNDg5LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgc2ltcGxpZnlDRkcoKTsKICAgICAgICAgICAgIGhhbmRsZUNoYW5nZWRDRkdJZk5lY2Vz
c2FyeSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIApAQCAtMTk0MCw2ICsxOTQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0ICs9IG1lbW9yeS0+b2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIFZh
bHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5
cGU+KG9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNldCA9PSBvZmZz
ZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+c2V0UHJlSW5kZXhBZGQoYWRk
cmVzcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzcy0+Y2hpbGQo
MCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnktPmxhc3RDaGlsZCgpID0gYWRkcmVz
czsKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+c2V0T2Zmc2V0KHNtYWxsT2Zmc2V0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAppbmRleCAxMDNjNmVjY2Ez
ZDMxNGJiNGVkOGMwMmE0ZDJmMDA5Y2E2NDFkMDAxLi43N2VlODQyNTEyNGI5ZDhiOGM1ODJmMzlm
Zjk2OWY2MGZkMTZjYzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3Bw
CkBAIC0xMzAsNiArMTMwLDExIEBAIHVuc2lnbmVkIEFyZzo6anNIYXNoKCkgY29uc3QKICAgICAg
ICAgcmVzdWx0ICs9IG1fYmFzZS5pbnRlcm5hbFZhbHVlKCk7CiAgICAgICAgIHJlc3VsdCArPSBt
X2luZGV4LmludGVybmFsVmFsdWUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcmVJbmRl
eDoKKyAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgcmVzdWx0ICs9IG1fb2Zmc2V0OworICAg
ICAgICByZXN1bHQgKz0gbV9iYXNlLmludGVybmFsVmFsdWUoKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBTdGFjazoKICAgICAgICAgcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X3NjYWxlKTsKICAgICAgICAgcmVzdWx0ICs9IHN0YWNrU2xvdCgpLT5pbmRleCgpOwpAQCAtMTYx
LDcgKzE2Niw3IEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAg
ICAgIG91dC5wcmludGYoIiQweCVsbHgiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+
KG1fb2Zmc2V0KSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFplcm9SZWc6Ci0gICAgICAg
IG91dC5wcmludCgiJSV4enIiKTsKKyAgICAgICAgb3V0LnByaW50KCIleHpyIik7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIG91dC5wcmludCgiKCIsIGJh
c2UoKSwgIikiKTsKQEAgLTE4MCw2ICsxODUsMTIgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKICAgICAgICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxlKCkpOwogICAg
ICAgICBvdXQucHJpbnQoIikiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJlSW5kZXg6
CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIixQcmUoJCIsIG9mZnNldCgpLCAiKSki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUG9zdEluZGV4OgorICAgICAgICBvdXQucHJp
bnQoIigiLCBiYXNlKCksICIsUG9zdCgkIiwgb2Zmc2V0KCksICIpKSIpOworICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBTdGFjazoKICAgICAgICAgaWYgKG9mZnNldCgpKQogICAgICAgICAgICAg
b3V0LnByaW50KG9mZnNldCgpKTsKQEAgLTI2MSw2ICsyNzIsMTIgQEAgdm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6S2luZCBraW5kKQogICAgIGNhc2UgQXJnOjpJbmRl
eDoKICAgICAgICAgb3V0LnByaW50KCJJbmRleCIpOwogICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBBcmc6OlByZUluZGV4OgorICAgICAgICBvdXQucHJpbnQoIlByZUluZGV4Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEFyZzo6UG9zdEluZGV4OgorICAgICAgICBvdXQucHJpbnQoIlBv
c3RJbmRleCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OlJlbENvbmQ6CiAgICAg
ICAgIG91dC5wcmludCgiUmVsQ29uZCIpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuaAppbmRleCBjZTVhNGU3Mzc5YWQ2NDQ0NWYwYzNhYmQxMjlmMzI5
Yjk0N2ZlODEyLi5lYTIyNjI4YWUxMmUxMWZlYjQ1ZGY2N2FjZjNkYThkNjg2MGI0ZmQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKQEAgLTEsMyArMSw0IEBACisKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgpAQCAtNzcsNiArNzgsOCBAQCBwdWJsaWM6CiAgICAgICAgIFN0YWNrLAogICAgICAgICBD
YWxsQXJnLAogICAgICAgICBJbmRleCwKKyAgICAgICAgUHJlSW5kZXgsCisgICAgICAgIFBvc3RJ
bmRleCwKIAogICAgICAgICAvLyBJbW1lZGlhdGUgb3BlcmFuZHMgdGhhdCBjdXN0b21pemUgdGhl
IGJlaGF2aW9yIG9mIGFuIG9wZXJhdGlvbi4gWW91IGNhbiB0aGluayBvZiB0aGVtIGFzCiAgICAg
ICAgIC8vIHNlY29uZGFyeSBvcGNvZGVzLiBUaGV5IGFyZSBhbHdheXMgIlVzZSInZC4KQEAgLTY0
OSw2ICs2NTIsMzAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQXJnOjppbmRleChiYXNlLCBp
bmRleCwgc2NhbGUsIDApOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlw
ZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBBcmcgcHJlSW5k
ZXgoQWlyOjpUbXAgYmFzZSwgSW50IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2Uu
aXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzSW50OShpbmRleCkpOworICAgICAgICBBcmcgcmVz
dWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUHJlSW5kZXg7CisgICAgICAgIHJlc3VsdC5t
X2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBpbmRleDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVu
YW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgQXJnIHBvc3RJbmRl
eChBaXI6OlRtcCBiYXNlLCBJbnQgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5p
c0dQKCkpOworICAgICAgICBBU1NFUlQoaXNJbnQ5KGluZGV4KSk7CisgICAgICAgIEFyZyByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQb3N0SW5kZXg7CisgICAgICAgIHJlc3VsdC5t
X2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBpbmRleDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogICAgIHsKICAgICAgICAgQXJn
IHJlc3VsdDsKQEAgLTc5OSw2ICs4MjYsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2lu
ZCgpID09IEluZGV4OwogICAgIH0KIAorICAgIGJvb2wgaXNQcmVJbmRleCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4ga2luZCgpID09IFByZUluZGV4OworICAgIH0KKworICAgIGJvb2wg
aXNQb3N0SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBQb3N0
SW5kZXg7CisgICAgfQorCiAgICAgYm9vbCBpc01lbW9yeSgpIGNvbnN0CiAgICAgewogICAgICAg
ICBzd2l0Y2ggKGtpbmQoKSkgewpAQCAtODA4LDYgKzg0NSw4IEBAIHB1YmxpYzoKICAgICAgICAg
Y2FzZSBTdGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBjYXNlIEluZGV4Ogor
ICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtOTcyLDcgKzEwMTEsNyBAQCBwdWJsaWM6CiAKICAgICBBaXI6OlRtcCBiYXNlKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2ltcGxlQWRkciB8fCBraW5k
KCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBJ
bmRleCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2ltcGxlQWRkciB8fCBraW5kKCkgPT0g
QWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBJbmRleCB8
fCBraW5kKCkgPT0gUHJlSW5kZXggfHwga2luZCgpID09IFBvc3RJbmRleCk7CiAgICAgICAgIHJl
dHVybiBtX2Jhc2U7CiAgICAgfQogCkBAIC05ODIsNyArMTAyMSw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIGlmIChraW5kKCkgPT0gU3RhY2spCiAgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG1fc2NhbGUpOwotICAgICAgICBBU1NFUlQoa2luZCgp
ID09IEFkZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gQ2Fs
bEFyZyB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIg
fHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gQ2FsbEFyZyB8fCBr
aW5kKCkgPT0gSW5kZXggfHwga2luZCgpID09IFByZUluZGV4IHx8IGtpbmQoKSA9PSBQb3N0SW5k
ZXgpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG1fb2Zm
c2V0KTsKICAgICB9CiAKQEAgLTEwNDQsNiArMTA4Myw4IEBAIHB1YmxpYzoKICAgICAgICAgY2Fz
ZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKICAgICAgICAgY2FzZSBJ
bmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAg
ICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBS
ZWxDb25kOgpAQCAtMTA4MSw2ICsxMTIyLDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEFkZHI6
CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgogICAgICAgICBjYXNlIEluZGV4Ogor
ICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAg
Y2FzZSBTdGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBjYXNlIEJpZ0ltbTog
Ly8gWWVzLCB3ZSBhbGxvdyBCaWdJbW0gYXMgYSBkb3VibGUgaW1tZWRpYXRlLiBXZSB1c2UgdGhp
cyBmb3IgaW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KQEAgLTEyMzcsNiArMTI4MCwyMiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMg
Ym9vbCBpc1ZhbGlkUHJlSW5kZXhGb3JtKEludCBvZmZzZXQpCisgICAgeworICAgICAgICBpZiAo
aXNBUk02NCgpKQorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRTaWduZWRJbW05KG9mZnNldCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
bnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgYm9v
bCBpc1ZhbGlkUG9zdEluZGV4Rm9ybShJbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKGlz
QVJNNjQoKSkKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkU2lnbmVkSW1tOShvZmZzZXQpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgLy8gSWYgeW91IGRvbid0IHBhc3Mg
YSB3aWR0aCB0aGVuIHRoaXMgb3B0aW1pc3RpY2FsbHkgYXNzdW1lcyB0aGF0IHlvdSdyZSB1c2lu
ZyB0aGUgcmlnaHQgd2lkdGguIEJ1dAogICAgIC8vIHRoZSB3aWR0aCBpcyByZWxldmFudCB0byB2
YWxpZGl0eSwgc28gcGFzc2luZyBhIG51bGwgd2lkdGggaXMgb25seSB1c2VmdWwgZm9yIGFzc2Vy
dGlvbnMuIERvbid0CiAgICAgLy8gcGFzcyBudWxsIHdpZHRocyB3aGVuIGNhc2NhZGluZyB0aHJv
dWdoIEFyZ3MgaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIQpAQCAtMTI2NSw2ICsxMzI0LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkQWRkckZvcm0ob2Zmc2V0KCks
IHdpZHRoKTsKICAgICAgICAgY2FzZSBJbmRleDoKICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlk
SW5kZXhGb3JtKHNjYWxlKCksIG9mZnNldCgpLCB3aWR0aCk7CisgICAgICAgIGNhc2UgUHJlSW5k
ZXg6CisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFByZUluZGV4Rm9ybShvZmZzZXQoKSk7Cisg
ICAgICAgIGNhc2UgUG9zdEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRQb3N0SW5k
ZXhGb3JtKG9mZnNldCgpKTsKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIFJl
c0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKQEAgLTEyODQsNiArMTM0Nyw4IEBAIHB1
YmxpYzoKICAgICAgICAgY2FzZSBTaW1wbGVBZGRyOgogICAgICAgICBjYXNlIEFkZHI6CiAgICAg
ICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAg
ICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEluZGV4OgpAQCAtMTMyNiw2ICsxMzkxLDggQEAg
cHVibGljOgogICAgICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIGNhc2UgQWRkcjoKICAg
ICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6Cisg
ICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwg
R1AsIGFyZ1JvbGUgPT0gVXNlQWRkciA/IGFyZ1dpZHRoIDogcG9pbnRlcldpZHRoKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5kZXg6CkBAIC0xMzgzLDYgKzE0NTAsMTgg
QEAgcHVibGljOgogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG1f
b2Zmc2V0KSwgbV9leHRlbmQpOwogICAgIH0KIAorICAgIE1hY3JvQXNzZW1ibGVyOjpQcmVJbmRl
eEFkZHJlc3MgYXNQcmVJbmRleEFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzUHJlSW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhB
ZGRyZXNzKG1fYmFzZS5ncHIoKSwgb2Zmc2V0KCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1i
bGVyOjpQb3N0SW5kZXhBZGRyZXNzIGFzUG9zdEluZGV4QWRkcmVzcygpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNQb3N0SW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
Ymxlcjo6UG9zdEluZGV4QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIG9mZnNldCgpKTsKKyAgICB9CisK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBhc1JlbGF0aW9uYWxDb25k
aXRpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzUmVsQ29uZCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAKaW5k
ZXggOTA1ZTYxN2ZiZGUwZTJiN2Q3NTU1NjNlNjg4NTg5YmRhZDcyNmM4MC4uNmFkMDU4NDI2N2I4
YzdlZTcxNDliMDJmODIzMTU3MmJlZThjZjhhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCB2
b2lkIGxvd2VyU3RhY2tBcmdzKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQod2lkdGggPT0gV2lkdGgzMik7CiAKICNpZiBDUFUoQVJNNjQpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgc3RvcmVPcGNvZGUgPSBTdG9y
ZTMyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2Rl
ID0gTW92ZTMyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFpcjo6QXJnOjpLaW5kIG9w
ZXJhbmRLaW5kID0gQXJnOjpaZXJvUmVnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFp
cjo6QXJnIG9wZXJhbmQgPSBBcmc6Onplcm9SZWcoKTsKICNlbGlmIENQVShYODZfNjQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRleCA2NjFl
YWRkMjM3M2M1NGE0YmJhOTQ3YTU0YmRhMjU1N2JkYjhhZTRhLi5hZmRjZmYxNjJiNTRhYWFiMTc3
N2Y3YWE0MjRhYWI1ODA5ZjM3ZTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAgLTY0Nyw2ICs2NDcsOSBAQCBNb3ZlIFU6RzpQdHIsIEQ6
RzpQdHIKICAgICBJbmRleCwgVG1wIGFzIGxvYWRQdHIKICAgICBUbXAsIEFkZHIgYXMgc3RvcmVQ
dHIKICAgICBUbXAsIEluZGV4IGFzIHN0b3JlUHRyCisgICAgYXJtNjQ6IFplcm9SZWcsIEFkZHIg
YXMgc3RvcmU2NAorICAgIGFybTY0OiBaZXJvUmVnLCBJbmRleCBhcyBzdG9yZTY0CisKICAgICB4
ODY6IEltbSwgQWRkciBhcyBzdG9yZVB0cgogCiAjIFRoaXMgaXMgZm9yIG1vdmluZyBiZXR3ZWVu
IHNwaWxsIHNsb3RzLgpAQCAtNjYxLDI4ICs2NjQsMzQgQEAgeDg2XzY0OiBTd2FwNjQgVUQ6Rzo2
NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCiAgICAgVG1wLCBBZGRyCiAKK2FybTY0OiBNb3ZlV2l0
aEluY3JlbWVudDY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIFByZUluZGV4LCBUbXAgYXMgbG9hZDY0
CisgICAgUG9zdEluZGV4LCBUbXAgYXMgbG9hZDY0CisgICAgVG1wLCBQcmVJbmRleCBhcyBzdG9y
ZTY0CisgICAgVG1wLCBQb3N0SW5kZXggYXMgc3RvcmU2NAorCiBNb3ZlMzIgVTpHOjMyLCBaRDpH
OjMyCiAgICAgVG1wLCBUbXAgYXMgemVyb0V4dGVuZDMyVG9Xb3JkCiAgICAgQWRkciwgVG1wIGFz
IGxvYWQzMgogICAgIEluZGV4LCBUbXAgYXMgbG9hZDMyCiAgICAgVG1wLCBBZGRyIGFzIHN0b3Jl
MzIKICAgICBUbXAsIEluZGV4IGFzIHN0b3JlMzIKKyAgICBhcm02NDogWmVyb1JlZywgQWRkciBh
cyBzdG9yZTMyCisgICAgYXJtNjQ6IFplcm9SZWcsIEluZGV4IGFzIHN0b3JlMzIKICAgICB4ODY6
IEltbSwgVG1wIGFzIHplcm9FeHRlbmQzMlRvV29yZAogICAgIHg4NjogSW1tLCBBZGRyIGFzIHN0
b3JlMzIKICAgICB4ODY6IEltbSwgSW5kZXggYXMgc3RvcmUzMgogCithcm02NDogTW92ZVdpdGhJ
bmNyZW1lbnQzMiBVOkc6MzIsIFVaRDpHOjMyCisgICAgUHJlSW5kZXgsIFRtcCBhcyBsb2FkMzIK
KyAgICBQb3N0SW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBUbXAsIFByZUluZGV4IGFzIHN0b3Jl
MzIKKyAgICBUbXAsIFBvc3RJbmRleCBhcyBzdG9yZTMyCisKICMgVGhpcyBpcyBmb3IgbW92aW5n
IGJldHdlZW4gc3BpbGwgc2xvdHMuCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyLCBTOkc6MzIKICAg
ICBBZGRyLCBBZGRyLCBUbXAKIAotYXJtNjQ6IFN0b3JlMzIgVTpHOjMyLCBaRDpHOjMyCi0gICAg
WmVyb1JlZywgQWRkcgotICAgIFplcm9SZWcsIEluZGV4Ci0KLWFybTY0OiBTdG9yZTY0IFU6Rzo2
NCwgRDpHOjY0Ci0gICAgWmVyb1JlZywgQWRkcgotICAgIFplcm9SZWcsIEluZGV4Ci0KIFNpZ25F
eHRlbmQzMlRvUHRyIFU6RzozMiwgRDpHOlB0cgogICAgIFRtcCwgVG1wCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgppbmRleCAzNzQwZWZk
YmRkMTQ2YTM3ZjZlZGU5ZGRiYzIzZGRiYTAzYjA3NjQ2Li5mMWJmMWE0NmNmYzg4OWVjMTkzNDZm
MmMwNmI3Y2Y1MGY5ZTNkZTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL29wY29kZV9nZW5lcmF0b3IucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9vcGNvZGVfZ2VuZXJhdG9yLnJiCkBAIC0yMjksNyArMjI5LDcgQEAgZGVmIGlzR0YodG9rZW4p
CiBlbmQKIAogZGVmIGlzS2luZCh0b2tlbikKLSAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8
KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoWmVyb1JlZyl8KFNpbXBsZUFkZHIpfChBZGRy
KXwoRXh0ZW5kZWRPZmZzZXRBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJs
ZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KKyAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEJp
Z0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoWmVyb1JlZyl8KFNpbXBsZUFkZHIpfChBZGRyKXwo
RXh0ZW5kZWRPZmZzZXRBZGRyKXwoSW5kZXgpfChQcmVJbmRleCl8KFBvc3RJbmRleCl8KFJlbENv
bmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCl8KFN0YXR1c0NvbmQpKVxaLwogZW5kCiAKIGRlZiBp
c0FyY2godG9rZW4pCkBAIC0zMDMsNyArMzAzLDcgQEAgY2xhc3MgUGFyc2VyCiAKICAgICBkZWYg
Y29uc3VtZUtpbmQKICAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCi0gICAgICAgIHBhcnNl
RXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0LCBaZXJv
UmVnLCBUbXAsIFNpbXBsZUFkZHIsIEFkZHIsIEV4dGVuZGVkT2Zmc2V0QWRkciwgSW5kZXgsIFJl
bENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1c0NvbmQpIikgdW5sZXNzIGlzS2lu
ZChyZXN1bHQpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1t
LCBCaXRJbW0sIEJpdEltbTY0LCBaZXJvUmVnLCBUbXAsIFNpbXBsZUFkZHIsIEFkZHIsIEV4dGVu
ZGVkT2Zmc2V0QWRkciwgSW5kZXgsIFByZUluZGV4LCBQb3N0SW5kZXgsIFJlbENvbmQsIFJlc0Nv
bmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCiAg
ICAgICAgIGFkdmFuY2UKICAgICAgICAgcmVzdWx0CiAgICAgZW5kCkBAIC05MjksNiArOTI5LDEy
IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgIHdoZW4gIklu
ZGV4IgogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkSW5k
ZXhGb3JtKGFyZ3NbI3tpbmRleH1dLnNjYWxlKCksIGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpLCAj
e2FyZy53aWR0aENvZGV9KSkiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5f
UkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgd2hlbiAiUHJlSW5kZXgiCisgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRQcmVJbmRleEZvcm0oYXJn
c1sje2luZGV4fV0ub2Zmc2V0KCkpKSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJP
UEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICB3aGVuICJQb3N0SW5kZXgiCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRQb3N0SW5kZXhG
b3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCiAgICAgICAgICAgICAgICAgd2hlbiAiQmlnSW1t
IgogICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCiAgICAgICAgICAgICAgICAgd2hlbiAi
UmVzQ29uZCIKQEAgLTEyMzUsNiArMTI0MSwxMCBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIp
IHsKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNBZGRy
ZXNzKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgiCiAgICAgICAgICAgICAgICAgICAg
IG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQmFzZUluZGV4KCkiCisgICAgICAgICAgICAg
ICAgd2hlbiAiUHJlSW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3Nb
I3tpbmRleH1dLmFzUHJlSW5kZXhBZGRyZXNzKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiUG9z
dEluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5h
c1Bvc3RJbmRleEFkZHJlc3MoKSIKICAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgogICAg
ICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxD
b25kaXRpb24oKSIKICAgICAgICAgICAgICAgICB3aGVuICJSZXNDb25kIgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5oCmluZGV4IGM3MDMyZWMwODRkZGZkZDkzNWU1NTI3ZmFhZTkzNTY4MTk4NDgx
NzkuLmIyMmQ4NDYxY2YxYjEzY2Y4NWQxNjZhNzJhZmRiYTI0OWMyOGQ1M2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmgKQEAgLTExNDAsNCArMTE0MCw5IEBAIHZvaWQgYWRkQ29weVRlc3Rz
KGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+Jik7
CiAKIGJvb2wgc2hvdWxkUnVuKGNvbnN0IGNoYXIqIGZpbHRlciwgY29uc3QgY2hhciogdGVzdE5h
bWUpOwogCit2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpOwordm9pZCB0ZXN0TG9hZFByZUluZGV4
NjQoKTsKK3ZvaWQgdGVzdExvYWRQb3N0SW5kZXgoKTsKK3ZvaWQgdGVzdElmaHlqKCk7CisKICNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiM18zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAK
aW5kZXggNGM1MmFkYTljYzQwMmRkZTUzOTg4Y2M4ZjJmNWU5ZTBkZGUyZTExYy4uNThhMjViZDNm
ODhlODc4OTliYWEyYTJkMGM0ZGQwOWU0NjM4ZTk4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzXzMuY3BwCkBAIC0yOCw2ICsyOCwyNDkgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAK
Kwordm9pZCB0ZXN0SWZoeWooKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZl
bCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFByb2NlZHVyZSBwcm9jOworICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogdGhl
bkJsb2NrID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFk
ZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOwor
CisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8geSA9IGFk
ZHIwICsgMQorICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMykKKyAgICAvLyBp
ZiB5ICE9IGFkZHIxIGdvdG8gZG9uZQorICAgIFZhbHVlKiB5ID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwgCisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSwgCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdp
bigpLCA4KSk7CisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihw
cm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAgIFZhbHVlKiBjb25kID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBOb3RFcXVhbCwgT3JpZ2luKCksIHksIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3Jp
Z2luKCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKHRoZW5C
bG9jaykpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGVuX0Jsb2NrCisgICAg
Ly8geiA9IExvYWQoeSwgMCkKKyAgICAvLyByMiA9IHkgKyB6CisgICAgLy8gVXBzaWxvbihyMiwg
XnIzKQorICAgIE1lbW9yeVZhbHVlKiB6ID0gdGhlbkJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KHByb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwgeSk7CisgICAgVmFsdWUqIHIyID0gdGhl
bkJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHksIHopOworICAg
IHRoZW5CbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdp
bigpLCByLCByMik7CisgICAgdGhlbkJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
SnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhkb25lKSk7CisKKyAgICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIERvbmVfQmxvY2sKKyAgICAvLyByMyA9IFBoaSgpCisgICAgLy8gcmV0
dXJuIHIzCisgICAgVmFsdWUqIHIzID0gZG9uZS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHBy
b2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjMpOworCisgICAgcHJvYy5yZXNldFJlYWNoYWJp
bGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGNv
bXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYml0d2lzZV9jYXN0PGludHB0cl90PigwTCksIGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oMEwpKTsKK30KKwordm9pZCB0ZXN0TG9hZFByZUluZGV4MzIo
KQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAg
cmV0dXJuOworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgs
IDksIDEwIH07CisgICAgaW50MzJfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9j
OworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9j
ayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkg
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2so
KTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQzMik7CisgICAgVmFy
aWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEs
IF5yMikgICAgICAgICAgICAgCisgICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihwMSwg
XnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdp
bigpLCBJbnQzMiwgMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2Ms
IEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBP
cmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBK
dW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAgLy8g
cDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3RvIGRv
bmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHBy
b2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAgICBW
YWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWws
IE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
QnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVk
QmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9C
b2R5X0Jsb2NrCisgICAgLy8gcDMgPSBwMiArIDEKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMykK
KyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAgIC8v
IGdvdG8gbG9vcAorICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEFkZCwgT3JpZ2luKCksIHAyLCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDQpKTsKKyAgICBNZW1vcnlWYWx1ZSogbG9hZCA9IGxvb3BCb2R5LT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwgcDMpOwor
ICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3Jp
Z2luKCksIHIyLCBsb2FkKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5l
dzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAgIGxv
b3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1
ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBE
b25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBl
bmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOyAgCisKKyAgICBw
cm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NB
KHByb2MpOworCisgICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDMyX3QgeworICAgICAgICBp
bnQzMl90IHIgPSAwOworICAgICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAq
KytwdHI7CisgICAgICAgIHJldHVybiByOworICAgIH07CisKKyAgICBDSEVDS19FUShjb21waWxl
QW5kUnVuPGludDMyX3Q+KHByb2MsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3Qo
KSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6
ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3Qg
bnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDY0X3Qq
IHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAg
IEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9
IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJp
YWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sK
KyAgICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpICAgICAgICAgICAgIAorICAg
IC8vIHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSBy
b290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50NjQsIDApOworICAgIHJv
b3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwg
cjEpOworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmRO
ZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50
ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29w
X1Rlc3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9
IFBoaSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9v
cFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwg
cik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihw
cm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0
LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29w
VGVzdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQs
IEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAg
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHAzID0g
cDIgKyAxCisgICAgLy8gcjMgPSByMiArIGxvYWQocDMpCisgICAgLy8gVXBzaWxvbihyMywgXnIy
KQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSog
cDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwg
bG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KSk7Cisg
ICAgTWVtb3J5VmFsdWUqIGxvYWQgPSBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihw
cm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksIHAzKTsKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9k
eS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9hZCk7CisgICAg
bG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4o
KSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsK
KworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6
CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIHIyKTsgICAKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHko
KTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIHRl
c3QgPSBbJl0gKCkgLT4gaW50NjRfdCB7CisgICAgICAgIGludDY0X3QgciA9IDA7CisgICAgICAg
IHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9ICorK3B0cjsKKyAgICAgICAgcmV0dXJu
IHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywg
Yml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKwordm9pZCB0ZXN0TG9h
ZFBvc3RJbmRleCgpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAy
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwg
NSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQ2NF90KiBwdHIgPSBudW1zOworCisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJv
Yy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0
KTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgcm9v
dC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCBy
b290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50NjQsIDApKTsKKyAgICBy
b290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAs
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIFZhbHVl
KiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwg
T3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFi
bGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25zdDEw
ID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCk7
CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92
ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGNvbnN0MTApOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2Nr
KGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIE1lbW9yeVZhbHVlKiBs
b2FkID0gbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQs
IE9yaWdpbigpLCBwMik7CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvYWQpOworICAgIFZhbHVlKiBjb25zdDggPSBs
b29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDgpOworICAg
IFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2lu
KCksIHAyLCBjb25zdDgpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3
PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgbG9v
cEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVl
bnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
CisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICBkb25lLT5hcHBlbmRO
ZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpKTsgICAKKworICAg
IHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhT
U0EocHJvYyk7CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50NjRfdCB7CisgICAgICAg
IGludDY0X3QgciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9
ICpwdHIrKzsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGNvbXBp
bGVBbmRSdW48aW50NjRfdD4ocHJvYywgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVz
dCgpKTsKK30KKworCiB2b2lkIHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzMyKCkKIHsK
ICAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKQEAgLTM2OTcs
NiArMzk0MCwxMSBAQCB2b2lkIGFkZFNoclRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0YXNrcykKICAgICBSVU4odGVzdFpTaHJBcmdJ
bW0zMigweGZmZmZmZmZmLCAwKSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZm
ZiwgMSkpOwogICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDYzKSk7CisKKyAg
ICBSVU4odGVzdExvYWRQcmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQo
KSk7CisgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4KCkpOworICAgIFJVTih0ZXN0SWZoeWooKSk7
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKaW5kZXggNjNlMjY2Nzg4NTIwMThhNzY4
MGNhNWYwNzE0Njk2ODEwNTg4NGIzYi4uNjliYjZiMmJlODE4NzBiNTk4MzMzNjdhZjI2NzViN2Y0
ZWYwNTZmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwCkBAIC0yMzMsOCArMjMzLDggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJhdG8K
ICAgICBqaXQucmV0KCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9jYWwwID0gaml0
LmxhYmVsKCk7Ci0gICAgaml0LmxvYWQ2NCh4MSwgUG9zdEluZGV4KDgpLCB4Nik7Ci0gICAgaml0
LnN0b3JlNjQoeDYsIHgzLCBQb3N0SW5kZXgoOCkpOworICAgIGppdC5sb2FkNjQoTWFjcm9Bc3Nl
bWJsZXI6OlBvc3RJbmRleEFkZHJlc3MoeDEsIDgpLCB4Nik7CisgICAgaml0LnN0b3JlNjQoeDYs
IE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgzLCA4KSk7CiAgICAgc21hbGxDb3B5
LmxpbmsoJmppdCk7CiAgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIFRydXN0ZWRJbW0zMig4KSwgeDIpLmxpbmtUbyhsb2NhbDAsICZqaXQpOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGxvY2FsMiA9IGppdC5icmFuY2hBZGQ2NChNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIFRydXN0ZWRJbW0zMig4KSwgeDIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434174</attachid>
            <date>2021-07-24 14:34:14 -0700</date>
            <delta_ts>2021-07-25 00:01:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210724163413.patch</filename>
            <type>text/plain</type>
            <size>43699</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YzJiYTQ4MGQzMzQ0YTVkM2UyNTFiYzUyOGVhMWQ1NDk5YTk0NDQ0Li5mOWFjZjVmOTg1MjIwOWMy
YjI2ODVhMTBkZGQzYTI2ODNhMGM3NmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAyMS0wNy0yNCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0ZXN0T2JqZWN0aXZlQ0FQSU1haW4p
OgorICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAoYmxvY2tTaWduYXR1cmVD
b250YWluc0NsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKHRocmVhZE1haW4pOiBEZWxldGVkLgor
ICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzczo6UHJlSW5kZXhBZGRy
ZXNzKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRk
cmVzczo6UG9zdEluZGV4QWRkcmVzcyk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDMyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RvcmU2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNNjQ6OnN0b3JlMzIpOgorICAgICAgICAqIGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6
CisgICAgICAgIChKU0M6OnRlc3RTdG9yZVByZVBvc3RJbmRleDMyKToKKyAgICAgICAgKEpTQzo6
dGVzdFN0b3JlUHJlUG9zdEluZGV4NjQpOgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQcmVQb3N0SW5kZXg2NCk6CisgICAgICAg
ICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVlLmg6Cisg
ICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckFy
Zy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6anNIYXNoIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdURjo6cHJpbnRJ
bnRlcm5hbCk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OnByZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwb3N0SW5k
ZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUHJlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUG9zdEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc01lbW9yeSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6YmFzZSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b2Zmc2V0IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1ZhbGlkUG9zdEluZGV4Rm9ybSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxp
ZEZvcm0gY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjphc1ByZUluZGV4QWRkcmVzcyBjb25zdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6YXNQb3N0SW5kZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKiBiMy9h
aXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb3dlclN0
YWNrQXJncyk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAq
IGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgorICAg
ICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RJZmh5aik6CisgICAgICAgICh0
ZXN0TG9hZFByZUluZGV4MzIpOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDY0KToKKyAgICAg
ICAgKHRlc3RMb2FkUG9zdEluZGV4KToKKyAgICAgICAgKGFkZFNoclRlc3RzKToKKyAgICAgICAg
KiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OmppdFdyaXRlVGh1
bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTIxICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIHNwZWN1bGF0ZU5laXRoZXJEb3VibGVOb3JTdHJpbmdOb3JI
ZWFwQmlnSW50IHNob3VsZCBvbmx5IGhhdmUgYSBzaW5nbGUgSlNUeXBlIGJyYW5jaApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAppbmRleCAzZDE5NDlhNDA3ODVkOTljYTYxNTk1YWFiMDRiZTZmMWQwZDk2YmEzLi4y
MzU0YzQ1MzY4YzdjMGQ1Y2U5MDE4YWNmZjI4NGM0YTBhMDQzMWE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIu
aApAQCAtMjQ1LDYgKzI0NSwzNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9OwogCisgICAg
Ly8gUHJlSW5kZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mg
d2l0aCBiYXNlIGFkZHJlc3MgYW5kIHByZS1pbmNyZW1lbnQvZGVjcmVtZW50IGluZGV4LgorICAg
IHN0cnVjdCBQcmVJbmRleEFkZHJlc3MgeworICAgICAgICBQcmVJbmRleEFkZHJlc3MoUmVnaXN0
ZXJJRCBiYXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFzZSkKKyAgICAgICAg
ICAgICwgaW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lz
dGVySUQgYmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKKyAgICAvLyBQb3N0SW5k
ZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mgd2l0aCBiYXNl
IGFkZHJlc3MgYW5kIHBvc3QtaW5jcmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3Qg
UG9zdEluZGV4QWRkcmVzcyB7CisgICAgICAgIFBvc3RJbmRleEFkZHJlc3MoUmVnaXN0ZXJJRCBi
YXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFzZSkKKyAgICAgICAgICAgICwg
aW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQg
YmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKICAgICAvLyBBYnNvbHV0ZUFkZHJl
c3M6CiAgICAgLy8KICAgICAvLyBEZXNjcmliZXMgYW4gbWVtb3J5IG9wZXJhbmQgZ2l2ZW4gYnkg
YSBwb2ludGVyLiAgRm9yIHJlZ3VsYXIgbG9hZCAmIHN0b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCmluZGV4IGZlMzBk
OWM4NGQzNTI3ZWViMTZmY2QwNmUxMTVmYzY4ZDY5MDkwZmQuLjJhOTEyZDBkZDI2NjI2YmQ3NGUx
MDNiZWY5NjVmMmJhZGZjZTBiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0xNDQ1LDkgKzE0NDUsMTQgQEAg
cHVibGljOgogICAgICAgICBsb2FkPDY0PihhZGRyZXNzLCBkZXN0KTsKICAgICB9CiAKLSAgICB2
b2lkIGxvYWQ2NChSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4IHNpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB2b2lkIGxvYWQ2NChQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3QsIHNyYywgc2ltbSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLmJhc2UsIFByZUluZGV4KHNyYy5p
bmRleCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZDY0KFBvc3RJbmRleEFkZHJlc3Mgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3Qs
IHNyYy5iYXNlLCBQb3N0SW5kZXgoc3JjLmluZGV4KSk7CiAgICAgfQogCiAgICAgRGF0YUxhYmVs
MzIgbG9hZDY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgZGVzdCkKQEAgLTE1NDQsNiArMTU0OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWQ8MzI+
KGFkZHJlc3MsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbG9hZDMyKFByZUluZGV4QWRkcmVz
cyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcjwz
Mj4oZGVzdCwgc3JjLmJhc2UsIFByZUluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKworICAgIHZv
aWQgbG9hZDMyKFBvc3RJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQb3N0SW5kZXgoc3Jj
LmluZGV4KSk7CisgICAgfQorCiAgICAgRGF0YUxhYmVsMzIgbG9hZDMyV2l0aEFkZHJlc3NPZmZz
ZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTczMyw3ICsxNzQ4LDE3IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0PihtZW1vcnlUZW1wUmVnaXN0ZXIsIG1lbW9yeVRl
bXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRy
ZXNzLnNjYWxlKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGFkZHJlc3MuYmFz
ZSwgbWVtb3J5VGVtcFJlZ2lzdGVyKTsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkIHN0b3JlNjQo
UmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOwor
ICAgIH0KKworICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVz
cyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QuYmFz
ZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKICAgICB2b2lkIHN0b3JlNjQoUmVn
aXN0ZXJJRCBzcmMsIGNvbnN0IHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAgICAgICBzdG9yZTw2
ND4oc3JjLCBhZGRyZXNzKTsKQEAgLTE3NzcsMTEgKzE4MDIsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHN0b3JlNjQoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CiAgICAgfQogCi0gICAgdm9pZCBz
dG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIFBvc3RJbmRleCBzaW1tKQot
ICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QsIHNpbW0pOwotICAg
IH0KLSAgICAKICAgICBEYXRhTGFiZWwzMiBzdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgRGF0YUxhYmVs
MzIgbGFiZWwodGhpcyk7CkBAIC0xODc5LDYgKzE4OTksMTYgQEAgcHVibGljOgogICAgICAgICBz
dG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAorICAgIHZvaWQgc3Rv
cmUzMihSZWdpc3RlcklEIHNyYywgUHJlSW5kZXhBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgZGVzdC5iYXNlLCBQcmVJbmRleChkZXN0LmluZGV4
KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBQb3N0SW5kZXhB
ZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgZGVz
dC5iYXNlLCBQb3N0SW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKwogICAgIERhdGFMYWJlbDMy
IHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5kZXggZjIyYmZmY2UxNTU0
YjAyYzIyNmMyMTQ5MmFiMDY3YmFiMzhjNDBiNS4uNTM0ZWZlMTQzZjc5MGI5MDk4OWJjMmNjNjNm
ZjA5YTA0NjdlNTU3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0
bWFzbS5jcHAKQEAgLTIyMTIsNiArMjIxMiwxNzYgQEAgdm9pZCB0ZXN0WG9yTm90V2l0aFVuc2ln
bmVkUmlnaHRTaGlmdDY0KCkKICAgICAgICAgfQogICAgIH0KIH0KKwordm9pZCB0ZXN0U3RvcmVQ
cmVQb3N0SW5kZXgzMigpCit7CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAg
ICBpbnRwdHJfdCBhZGRyID0gYml0d2lzZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAg
aW50MzJfdCBpbmRleCA9IHNpemVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0g
KGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgIC8vICorK3AxID0gNDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0
b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVz
cyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMs
IGFkZHIpOworICAgIH07CisKKyAgICBpbnQzMl90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQzMl90
Kj4odGVzdDEoNCkpOworICAgIENIRUNLX0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEs
IG51bXNbMV0pOworCisgICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50MzJfdCBzcmMpIHsKKyAgICAg
ICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysg
PSA1OyByZXR1cm4gcDI7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAg
ICBpbnQzMl90KiBwMiA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4odGVzdDIoNSkpOworICAgIENI
RUNLX0VRKCpwMiwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RT
dG9yZVByZVBvc3RJbmRleDY0KCkKK3sKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMyB9
OworICAgIGludHB0cl90IGFkZHIgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZudW1zWzFdKTsK
KyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0ZXN0MSA9
IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0
KTsKKworICAgICAgICAgICAgLy8gKisrcDEgPSA0OyByZXR1cm4gcDE7CisgICAgICAgICAgICBq
aXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UHJlSW5kZXhB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJl
dCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUs
IHNyYywgYWRkcik7CisgICAgfTsKKworICAgIGludDY0X3QqIHAxID0gYml0d2lzZV9jYXN0PGlu
dDY0X3QqPih0ZXN0MSg0KSk7CisgICAgQ0hFQ0tfRVEoKnAxLCA0KTsKKyAgICBDSEVDS19FUSgq
LS1wMSwgbnVtc1sxXSk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQ2NF90IHNyYykgewor
ICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Cisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAq
cDIrKyA9IDU7IHJldHVybiBwMjsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rp
b25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUsIHNyYywgYWRkcik7CisgICAgfTsK
KworICAgIGludDY0X3QqIHAyID0gYml0d2lzZV9jYXN0PGludDY0X3QqPih0ZXN0Mig1KSk7Cisg
ICAgQ0hFQ0tfRVEoKnAyLCA0KTsKKyAgICBDSEVDS19FUSgqLS1wMiwgNSk7Cit9CisKK3ZvaWQg
dGVzdExvYWRQcmVQb3N0SW5kZXgzMigpCit7CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIs
IDMgfTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDMyX3QpOworCisgICAgYXV0byB0
ZXN0MSA9IFsmXSAoaW50MzJfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBp
bGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVy
biByZXM7CisgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRy
ZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICAgICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVw
bGFjZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
aW52b2tlPGludDMyX3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworICAgIAorICAgIENIRUNL
X0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA0KTsKKworICAgIGF1dG8g
dGVzdDIgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21w
aWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyByZXR1
cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFk
ZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihy
ZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
aml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
biBpbnZva2U8aW50MzJfdD4obG9hZCwgJm51bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19F
USh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgNSk7Cit9CisKK3ZvaWQgdGVz
dExvYWRQcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMg
fTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0ZXN0
MSA9IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVybiBy
ZXM7CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRyZXNz
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwor
ICAgICAgICAgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQocmVwbGFj
ZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7
CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52
b2tlPGludDY0X3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVz
dDEoNCksIDMpOworICAgIENIRUNLX0VRKG51bXNbMl0sIDQpOworCisgICAgYXV0byB0ZXN0MiA9
IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
aml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKnAyKys7ICpwMiA9IDU7IHJldHVybiByZXM7
CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhH
UFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2Up
LCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOwor
ICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9r
ZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3Qy
KDUpLCAyKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA1KTsKK30KICNlbmRpZgogCiAjaWYgQ1BV
KFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtNDQ3NSw2ICs0NjQ1LDExIEBA
IHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9B
TkFMWVNJUwogICAgIFJVTih0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDY0KCkpOwogICAgIFJVTih0
ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhVbnNp
Z25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0U3RvcmVQcmVQb3N0SW5kZXgzMigp
KTsKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2Fk
UHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKSk7CiAj
ZW5kaWYKIAogI2lmIENQVShBUk02NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCmluZGV4IGQ1ZmMzMTY0NjU5NjhlYjczNzFiNmZmMWNjNmY4MzE3ZmVjZGU1MmUu
LmNlYjI0N2ZkZTUxNzBiZTkzOGU1NWM0Yjk2NzJmNzQxZWNmYzViMzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC01NDYsNyArNTQ2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBzY2Fs
ZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBvcGVyYW5kIGlu
dG8gYW4gYWRkcmVzcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFs
dWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KICAgICBBcmcgZWZmZWN0aXZlQWRkcihWYWx1ZSogYWRk
cmVzcywgSW50IG9mZnNldCwgV2lkdGggd2lkdGgpCkBAIC05MDIsNiArOTAyLDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGltbShyaWdodCkpIHsKICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
KG9wY29kZSwgaW1tKHJpZ2h0KSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgICAg
ICAgICBpZiAob3Bjb2RlID09IEFpcjo6QWRkNjQgJiYgQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9y
bShyaWdodC0+YXNJbnQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2FkZEFkZHJlc3NU
b0luc3QuYWRkKHJpZ2h0LT5jaGlsZCgwKSwgbV9pbnN0cy5sYXN0KCkubGFzdCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0g
ZWxzZSB7CkBAIC0xMTQ2LDEyICsxMTQ4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBBaXI6Ok1vdmUzMjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFN0b3Jl
MzIsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0oV2lkdGgz
MikpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9yZTMyLCBtX3ZhbHVl
LCB6ZXJvUmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0o
TW92ZTMyLCBBcmc6Olplcm9SZWcsIGRlc3Qua2luZCgpKSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdp
ZHRoMzIpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoTW92ZTMyLCBtX3Zh
bHVlLCB6ZXJvUmVnKCksIGRlc3QpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIEFpcjo6TW92ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFs
aWRGb3JtKFN0b3JlNjQsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxp
ZEZvcm0oV2lkdGg2NCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9y
ZTY0LCBtX3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAo
aXNWYWxpZEZvcm0oTW92ZSwgQXJnOjpaZXJvUmVnLCBkZXN0LmtpbmQoKSkgJiYgZGVzdC5pc1Zh
bGlkRm9ybShXaWR0aDY0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KE1v
dmUsIG1fdmFsdWUsIHplcm9SZWcoKSwgZGVzdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI1NTksNiArMjU2MSwyNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHRyeUFwcGVuZFByZUluZGV4ID0gWyZdICgp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29k
ZUZvclR5cGUoTW92ZVdpdGhJbmNyZW1lbnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5
LT50eXBlKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6
OlByZUluZGV4LCBBcmc6OlRtcCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICBpZiAoIUFpcjo6QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKG1lbW9y
eS0+b2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgaWYgKCFtZW1vcnktPnByZUluZGV4QWRkKCkgfHwgIW1fdXNlQ291bnRzLm51bVVz
ZXMobWVtb3J5LT5wcmVJbmRleEFkZCgpKSB8fCBtX3VzZUNvdW50cy5udW1Vc2VzKG1lbW9yeS0+
bGFzdENoaWxkKCkpID4gMikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgICAgICAgICAgbV9wcmVJbmRleEFkZHMuYWRkKG1lbW9yeS0+cHJlSW5kZXhBZGQoKSk7
CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgQXJnOjpwcmVJbmRleCh0bXAobWVtb3J5
LT5sYXN0Q2hpbGQoKSksIG1lbW9yeS0+b2Zmc2V0KCkpLCB0bXAobWVtb3J5KSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAo
dHJ5QXBwZW5kUHJlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAg
ICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwga2luZCwgbV92YWx1ZSwgYWRkcihtX3Zh
bHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg
LTI2ODgsNiArMjcwOCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHRyeUFwcGVuZEFk
ZFdpdGhTaGlmdChsZWZ0LCByaWdodCkgfHwgdHJ5QXBwZW5kQWRkV2l0aFNoaWZ0KHJpZ2h0LCBs
ZWZ0KSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBw
ZW5kUHJlSW5kZXhBZGQgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgaWYgKCFt
X3ByZUluZGV4QWRkcy5jb250YWlucyhtX3ZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUobV92
YWx1ZS0+dHlwZSgpKSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgdG1wKG1fdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
IGlmICh0cnlBcHBlbmRQcmVJbmRleEFkZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwog
ICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkMzIsIEFkZDY0LCBBZGREb3VibGUsIEFkZEZsb2F0
LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC00MjY0LDYgKzQyOTQsOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8VmFsdWUqLCBW
ZWN0b3I8VG1wPj4gbV90dXBsZVBoaVRvVG1wczsgLy8gVGhpcyBpcyB0aGUgc2FtZSBhcyBtX3Bo
aVRvVG1wIGZvciBQaGlzIHRoYXQgYXJlIFR1cGxlcy4KICAgICBJbmRleE1hcDxCMzo6QmFzaWNC
bG9jayosIEFpcjo6QmFzaWNCbG9jayo+IG1fYmxvY2tUb0Jsb2NrOwogICAgIEhhc2hNYXA8VmFy
aWFibGUqLCBWZWN0b3I8VG1wPj4gbV92YXJpYWJsZVRvVG1wczsKKyAgICBJbmRleFNldDxWYWx1
ZSo+IG1fcHJlSW5kZXhBZGRzOworICAgIEhhc2hNYXA8VmFsdWUqLCBJbnN0PiBtX2FkZEFkZHJl
c3NUb0luc3Q7CiAKICAgICBVc2VDb3VudHMgbV91c2VDb3VudHM7CiAgICAgUGhpQ2hpbGRyZW4g
bV9waGlDaGlsZHJlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01l
bW9yeVZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCmlu
ZGV4IGU3NjgyNjRjMTNmMTY3ZWY1MDZiYmVhMjY2MTY2NzkzYzY3NTczM2UuLmY5N2RiOGQ2M2E3
MjM0ZWE1YTJlODk5YWQzOTcxYjg0NzYzYTZjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTWVtb3J5VmFsdWUuaApAQCAtMzUsNiArMzUsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeVZhbHVlIDogcHVibGlj
IFZhbHVlIHsKKwogcHVibGljOgogICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQog
ICAgIHsKQEAgLTY5LDYgKzcwLDkgQEAgcHVibGljOgogICAgIGNvbnN0IEhlYXBSYW5nZSYgZmVu
Y2VSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmVuY2VSYW5nZTsgfQogICAgIHZvaWQgc2V0RmVu
Y2VSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKSB7IG1fZmVuY2VSYW5nZSA9IHJhbmdlOyB9
CiAKKyAgICBWYWx1ZSogcHJlSW5kZXhBZGQoKSB7IHJldHVybiBtX3ByZUluZGV4QWRkOyB9Cisg
ICAgdm9pZCBzZXRQcmVJbmRleEFkZChWYWx1ZSogYWRkcikgeyBtX3ByZUluZGV4QWRkID0gYWRk
cjsgfQorCiAgICAgYm9vbCBpc1N0b3JlKCkgY29uc3QgeyByZXR1cm4gQjM6OmlzU3RvcmUob3Bj
b2RlKCkpOyB9CiAgICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7IHJldHVybiBCMzo6aXNMb2FkKG9w
Y29kZSgpKTsgfQogCkBAIC0xNTAsNiArMTU0LDcgQEAgcHJpdmF0ZToKICAgICBPZmZzZXRUeXBl
IG1fb2Zmc2V0IHsgMCB9OwogICAgIEhlYXBSYW5nZSBtX3JhbmdlIHsgSGVhcFJhbmdlOjp0b3Ao
KSB9OwogICAgIEhlYXBSYW5nZSBtX2ZlbmNlUmFuZ2UgeyBIZWFwUmFuZ2UoKSB9OworICAgIFZh
bHVlKiBtX3ByZUluZGV4QWRkIHsgbnVsbHB0ciB9OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJl
bmd0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAK
aW5kZXggMjI4MGZkNzcxMjUyZTcyNjBmNjg1MDUwOTJmZDU0M2NmZTA2MTg1Ny4uZjQ1NTY2NWQy
YTIyZDU1ZTMxZTFmYzk3NGM4ZmEzMzIxNDliNDlkMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcApAQCAtNDgxLDYgKzQ4MSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGhhbmRsZUNoYW5nZWRDRkdJZk5lY2Vzc2FyeSgpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICByZXN1bHQgfD0gbV9jaGFuZ2VkOworCiAgICAgICAgIH0gd2hpbGUgKG1f
Y2hhbmdlZCAmJiBtX3Byb2Mub3B0TGV2ZWwoKSA+PSAyKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChtX3Byb2Mub3B0TGV2ZWwoKSA8IDIpIHsKQEAgLTQ4OCw3ICs0ODksNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBzaW1wbGlmeUNGRygpOwogICAgICAgICAgICAgaGFuZGxlQ2hhbmdlZENGR0lm
TmVjZXNzYXJ5KCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgCkBAIC0xOTQwLDYgKzE5NDEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBvZmZzZXQgKz0gbWVtb3J5LT5vZmZzZXQoKTsKICAgICAgICAgICAgICAgICAg
ICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zm
c2V0VHlwZT4ob2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ID09
IG9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LT5zZXRQcmVJbmRleEFk
ZChhZGRyZXNzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLT5j
aGlsZCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+bGFzdENoaWxkKCkgPSBh
ZGRyZXNzOwogICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LT5zZXRPZmZzZXQoc21hbGxP
ZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCmluZGV4IDEwM2M2
ZWNjYTNkMzE0YmI0ZWQ4YzAyYTRkMmYwMDljYTY0MWQwMDEuLjc3ZWU4NDI1MTI0YjlkOGI4YzU4
MmYzOWZmOTY5ZjYwZmQxNmNjMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5jcHAKQEAgLTEzMCw2ICsxMzAsMTEgQEAgdW5zaWduZWQgQXJnOjpqc0hhc2goKSBjb25zdAog
ICAgICAgICByZXN1bHQgKz0gbV9iYXNlLmludGVybmFsVmFsdWUoKTsKICAgICAgICAgcmVzdWx0
ICs9IG1faW5kZXguaW50ZXJuYWxWYWx1ZSgpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFBy
ZUluZGV4OgorICAgIGNhc2UgUG9zdEluZGV4OgorICAgICAgICByZXN1bHQgKz0gbV9vZmZzZXQ7
CisgICAgICAgIHJlc3VsdCArPSBtX2Jhc2UuaW50ZXJuYWxWYWx1ZSgpOworICAgICAgICBicmVh
azsKICAgICBjYXNlIFN0YWNrOgogICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG1fc2NhbGUpOwogICAgICAgICByZXN1bHQgKz0gc3RhY2tTbG90KCktPmluZGV4KCk7CkBA
IC0xNjEsNyArMTY2LDcgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
ICAgICAgICAgb3V0LnByaW50ZigiJDB4JWxseCIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNp
Z25lZD4obV9vZmZzZXQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgWmVyb1JlZzoKLSAg
ICAgICAgb3V0LnByaW50KCIlJXh6ciIpOworICAgICAgICBvdXQucHJpbnQoIiV4enIiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2ltcGxlQWRkcjoKICAgICAgICAgb3V0LnByaW50KCIo
IiwgYmFzZSgpLCAiKSIpOwpAQCAtMTgwLDYgKzE4NSwxMiBAQCB2b2lkIEFyZzo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICAgICAgb3V0LnByaW50KCIsIiwgc2NhbGUoKSk7
CiAgICAgICAgIG91dC5wcmludCgiKSIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcmVJ
bmRleDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLFByZSgkIiwgb2Zmc2V0KCks
ICIpKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAgIG91
dC5wcmludCgiKCIsIGJhc2UoKSwgIixQb3N0KCQiLCBvZmZzZXQoKSwgIikpIik7CisgICAgICAg
IHJldHVybjsKICAgICBjYXNlIFN0YWNrOgogICAgICAgICBpZiAob2Zmc2V0KCkpCiAgICAgICAg
ICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOwpAQCAtMjYxLDYgKzI3MiwxMiBAQCB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpLaW5kIGtpbmQpCiAgICAgY2FzZSBBcmc6
OkluZGV4OgogICAgICAgICBvdXQucHJpbnQoIkluZGV4Iik7CiAgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFyZzo6UHJlSW5kZXg6CisgICAgICAgIG91dC5wcmludCgiUHJlSW5kZXgiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpQb3N0SW5kZXg6CisgICAgICAgIG91dC5wcmlu
dCgiUG9zdEluZGV4Iik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6UmVsQ29uZDoK
ICAgICAgICAgb3V0LnByaW50KCJSZWxDb25kIik7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCmluZGV4IGNlNWE0ZTczNzlhZDY0NDQ1ZjBjM2FiZDEy
OWYzMjliOTQ3ZmU4MTIuLmVhMjI2MjhhZTEyZTExZmViNDVkZjY3YWNmM2RhOGQ2ODYwYjRmZDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaApAQCAtMSwzICsxLDQgQEAKKwog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCkBAIC03Nyw2ICs3OCw4IEBAIHB1YmxpYzoKICAgICAgICAgU3RhY2ssCiAgICAg
ICAgIENhbGxBcmcsCiAgICAgICAgIEluZGV4LAorICAgICAgICBQcmVJbmRleCwKKyAgICAgICAg
UG9zdEluZGV4LAogCiAgICAgICAgIC8vIEltbWVkaWF0ZSBvcGVyYW5kcyB0aGF0IGN1c3RvbWl6
ZSB0aGUgYmVoYXZpb3Igb2YgYW4gb3BlcmF0aW9uLiBZb3UgY2FuIHRoaW5rIG9mIHRoZW0gYXMK
ICAgICAgICAgLy8gc2Vjb25kYXJ5IG9wY29kZXMuIFRoZXkgYXJlIGFsd2F5cyAiVXNlIidkLgpA
QCAtNjQ5LDYgKzY1MiwzMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBBcmc6OmluZGV4KGJh
c2UsIGluZGV4LCBzY2FsZSwgMCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50
LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIEFyZyBw
cmVJbmRleChBaXI6OlRtcCBiYXNlLCBJbnQgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQo
YmFzZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNJbnQ5KGluZGV4KSk7CisgICAgICAgIEFy
ZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQcmVJbmRleDsKKyAgICAgICAgcmVz
dWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGluZGV4OworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwg
dHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBBcmcgcG9z
dEluZGV4KEFpcjo6VG1wIGJhc2UsIEludCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChi
YXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc0ludDkoaW5kZXgpKTsKKyAgICAgICAgQXJn
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFBvc3RJbmRleDsKKyAgICAgICAgcmVz
dWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGluZGV4OworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIHN0YXRpYyBBcmcgcmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiAgICAgewogICAgICAg
ICBBcmcgcmVzdWx0OwpAQCAtNzk5LDYgKzgyNiwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBraW5kKCkgPT0gSW5kZXg7CiAgICAgfQogCisgICAgYm9vbCBpc1ByZUluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUHJlSW5kZXg7CisgICAgfQorCisgICAg
Ym9vbCBpc1Bvc3RJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09
IFBvc3RJbmRleDsKKyAgICB9CisKICAgICBib29sIGlzTWVtb3J5KCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CkBAIC04MDgsNiArODQ1LDggQEAgcHVibGljOgogICAg
ICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgSW5k
ZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC05NzIsNyArMTAxMSw3IEBAIHB1YmxpYzoKIAogICAgIEFpcjo6VG1wIGJh
c2UoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTaW1wbGVBZGRyIHx8
IGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgp
ID09IEluZGV4KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTaW1wbGVBZGRyIHx8IGtpbmQo
KSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IElu
ZGV4IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8fCBraW5kKCkgPT0gUG9zdEluZGV4KTsKICAgICAg
ICAgcmV0dXJuIG1fYmFzZTsKICAgICB9CiAKQEAgLTk4Miw3ICsxMDIxLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgaWYgKGtpbmQoKSA9PSBTdGFjaykKICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9zY2FsZSk7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9
PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
QWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJn
IHx8IGtpbmQoKSA9PSBJbmRleCB8fCBraW5kKCkgPT0gUHJlSW5kZXggfHwga2luZCgpID09IFBv
c3RJbmRleCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4o
bV9vZmZzZXQpOwogICAgIH0KIApAQCAtMTA0NCw2ICsxMDgzLDggQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgogICAgICAgICBj
YXNlIEluZGV4OgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRl
eDoKICAgICAgICAgY2FzZSBTdGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBj
YXNlIFJlbENvbmQ6CkBAIC0xMDgxLDYgKzExMjIsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
QWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CiAgICAgICAgIGNhc2UgSW5k
ZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAg
ICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgQmln
SW1tOiAvLyBZZXMsIHdlIGFsbG93IEJpZ0ltbSBhcyBhIGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVz
ZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBzLgpAQCAtMTIzNyw2ICsxMjgwLDIyIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0
YXRpYyBib29sIGlzVmFsaWRQcmVJbmRleEZvcm0oSW50IG9mZnNldCkKKyAgICB7CisgICAgICAg
IGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFNpZ25lZEltbTkob2Zm
c2V0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRp
YyBib29sIGlzVmFsaWRQb3N0SW5kZXhGb3JtKEludCBvZmZzZXQpCisgICAgeworICAgICAgICBp
ZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRTaWduZWRJbW05KG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICAvLyBJZiB5b3UgZG9uJ3Qg
cGFzcyBhIHdpZHRoIHRoZW4gdGhpcyBvcHRpbWlzdGljYWxseSBhc3N1bWVzIHRoYXQgeW91J3Jl
IHVzaW5nIHRoZSByaWdodCB3aWR0aC4gQnV0CiAgICAgLy8gdGhlIHdpZHRoIGlzIHJlbGV2YW50
IHRvIHZhbGlkaXR5LCBzbyBwYXNzaW5nIGEgbnVsbCB3aWR0aCBpcyBvbmx5IHVzZWZ1bCBmb3Ig
YXNzZXJ0aW9ucy4gRG9uJ3QKICAgICAvLyBwYXNzIG51bGwgd2lkdGhzIHdoZW4gY2FzY2FkaW5n
IHRocm91Z2ggQXJncyBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IhCkBAIC0xMjY1LDYgKzEz
MjQsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRBZGRyRm9ybShvZmZz
ZXQoKSwgd2lkdGgpOwogICAgICAgICBjYXNlIEluZGV4OgogICAgICAgICAgICAgcmV0dXJuIGlz
VmFsaWRJbmRleEZvcm0oc2NhbGUoKSwgb2Zmc2V0KCksIHdpZHRoKTsKKyAgICAgICAgY2FzZSBQ
cmVJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkUHJlSW5kZXhGb3JtKG9mZnNldCgp
KTsKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFBv
c3RJbmRleEZvcm0ob2Zmc2V0KCkpOwogICAgICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNh
c2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgpAQCAtMTI4NCw2ICsxMzQ3LDgg
QEAgcHVibGljOgogICAgICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIGNhc2UgQWRkcjoK
ICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6
CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5kZXg6CkBAIC0xMzI2LDYgKzEzOTEs
OCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU2ltcGxlQWRkcjoKICAgICAgICAgY2FzZSBBZGRy
OgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKKyAgICAgICAgY2FzZSBQcmVJbmRl
eDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwg
VXNlLCBHUCwgYXJnUm9sZSA9PSBVc2VBZGRyID8gYXJnV2lkdGggOiBwb2ludGVyV2lkdGgoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmRleDoKQEAgLTEzODMsNiArMTQ1
MCwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlw
ZT4obV9vZmZzZXQpLCBtX2V4dGVuZCk7CiAgICAgfQogCisgICAgTWFjcm9Bc3NlbWJsZXI6OlBy
ZUluZGV4QWRkcmVzcyBhc1ByZUluZGV4QWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoaXNQcmVJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpQcmVJ
bmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBvZmZzZXQoKSk7CisgICAgfQorCisgICAgTWFjcm9B
c3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MgYXNQb3N0SW5kZXhBZGRyZXNzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc1Bvc3RJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKG1fYmFzZS5ncHIoKSwgb2Zmc2V0KCkpOworICAg
IH0KKwogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGFzUmVsYXRpb25h
bENvbmRpdGlvbigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNSZWxDb25kKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJn
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNw
cAppbmRleCA5MDVlNjE3ZmJkZTBlMmI3ZDc1NTU2M2U2ODg1ODliZGFkNzI2YzgwLi42YWQwNTg0
MjY3YjhjN2VlNzE0OWIwMmY4MjMxNTcyYmVlOGNmOGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcApAQCAtMTU4LDcgKzE1OCw3
IEBAIHZvaWQgbG93ZXJTdGFja0FyZ3MoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBXaWR0aDMyKTsKIAogI2lmIENQVShBUk02
NCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBzdG9yZU9wY29kZSA9
IFN0b3JlMzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgc3RvcmVP
cGNvZGUgPSBNb3ZlMzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWlyOjpBcmc6Oktp
bmQgb3BlcmFuZEtpbmQgPSBBcmc6Olplcm9SZWc7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQWlyOjpBcmcgb3BlcmFuZCA9IEFyZzo6emVyb1JlZygpOwogI2VsaWYgQ1BVKFg4Nl82NCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29k
ZXMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCmluZGV4
IDY2MWVhZGQyMzczYzU0YTRiYmE5NDdhNTRiZGEyNTU3YmRiOGFlNGEuLmFmZGNmZjE2MmI1NGFh
YWIxNzc3ZjdhYTQyNGFhYjU4MDlmMzdlNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwpAQCAtNjQ3LDYgKzY0Nyw5IEBAIE1vdmUgVTpHOlB0
ciwgRDpHOlB0cgogICAgIEluZGV4LCBUbXAgYXMgbG9hZFB0cgogICAgIFRtcCwgQWRkciBhcyBz
dG9yZVB0cgogICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQdHIKKyAgICBhcm02NDogWmVyb1JlZywg
QWRkciBhcyBzdG9yZTY0CisgICAgYXJtNjQ6IFplcm9SZWcsIEluZGV4IGFzIHN0b3JlNjQKKwog
ICAgIHg4NjogSW1tLCBBZGRyIGFzIHN0b3JlUHRyCiAKICMgVGhpcyBpcyBmb3IgbW92aW5nIGJl
dHdlZW4gc3BpbGwgc2xvdHMuCkBAIC02NjEsMjggKzY2NCwzNCBAQCB4ODZfNjQ6IFN3YXA2NCBV
RDpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKICAgICBUbXAsIEFkZHIKIAorYXJtNjQ6IE1v
dmVXaXRoSW5jcmVtZW50NjQgVTpHOjY0LCBVRDpHOjY0CisgICAgUHJlSW5kZXgsIFRtcCBhcyBs
b2FkNjQKKyAgICBQb3N0SW5kZXgsIFRtcCBhcyBsb2FkNjQKKyAgICBUbXAsIFByZUluZGV4IGFz
IHN0b3JlNjQKKyAgICBUbXAsIFBvc3RJbmRleCBhcyBzdG9yZTY0CisKIE1vdmUzMiBVOkc6MzIs
IFpEOkc6MzIKICAgICBUbXAsIFRtcCBhcyB6ZXJvRXh0ZW5kMzJUb1dvcmQKICAgICBBZGRyLCBU
bXAgYXMgbG9hZDMyCiAgICAgSW5kZXgsIFRtcCBhcyBsb2FkMzIKICAgICBUbXAsIEFkZHIgYXMg
c3RvcmUzMgogICAgIFRtcCwgSW5kZXggYXMgc3RvcmUzMgorICAgIGFybTY0OiBaZXJvUmVnLCBB
ZGRyIGFzIHN0b3JlMzIKKyAgICBhcm02NDogWmVyb1JlZywgSW5kZXggYXMgc3RvcmUzMgogICAg
IHg4NjogSW1tLCBUbXAgYXMgemVyb0V4dGVuZDMyVG9Xb3JkCiAgICAgeDg2OiBJbW0sIEFkZHIg
YXMgc3RvcmUzMgogICAgIHg4NjogSW1tLCBJbmRleCBhcyBzdG9yZTMyCiAKK2FybTY0OiBNb3Zl
V2l0aEluY3JlbWVudDMyIFU6RzozMiwgVVpEOkc6MzIKKyAgICBQcmVJbmRleCwgVG1wIGFzIGxv
YWQzMgorICAgIFBvc3RJbmRleCwgVG1wIGFzIGxvYWQzMgorICAgIFRtcCwgUHJlSW5kZXggYXMg
c3RvcmUzMgorICAgIFRtcCwgUG9zdEluZGV4IGFzIHN0b3JlMzIKKwogIyBUaGlzIGlzIGZvciBt
b3ZpbmcgYmV0d2VlbiBzcGlsbCBzbG90cy4KIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIsIFM6Rzoz
MgogICAgIEFkZHIsIEFkZHIsIFRtcAogCi1hcm02NDogU3RvcmUzMiBVOkc6MzIsIFpEOkc6MzIK
LSAgICBaZXJvUmVnLCBBZGRyCi0gICAgWmVyb1JlZywgSW5kZXgKLQotYXJtNjQ6IFN0b3JlNjQg
VTpHOjY0LCBEOkc6NjQKLSAgICBaZXJvUmVnLCBBZGRyCi0gICAgWmVyb1JlZywgSW5kZXgKLQog
U2lnbkV4dGVuZDMyVG9QdHIgVTpHOjMyLCBEOkc6UHRyCiAgICAgVG1wLCBUbXAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCmluZGV4IDM3
NDBlZmRiZGQxNDZhMzdmNmVkZTlkZGJjMjNkZGJhMDNiMDc2NDYuLmYxYmYxYTQ2Y2ZjODg5ZWMx
OTM0NmYyYzA2YjdjZjUwZjllM2RlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKQEAgLTIyOSw3ICsyMjksNyBAQCBkZWYgaXNHRih0
b2tlbikKIGVuZAogCiBkZWYgaXNLaW5kKHRva2VuKQotICAgIHRva2VuID1+IC9cQSgoVG1wKXwo
SW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQpfChaZXJvUmVnKXwoU2ltcGxlQWRkcil8
KEFkZHIpfChFeHRlbmRlZE9mZnNldEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwo
RG91YmxlQ29uZCl8KFN0YXR1c0NvbmQpKVxaLworICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1t
KXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQpfChaZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFk
ZHIpfChFeHRlbmRlZE9mZnNldEFkZHIpfChJbmRleCl8KFByZUluZGV4KXwoUG9zdEluZGV4KXwo
UmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25kKXwoU3RhdHVzQ29uZCkpXFovCiBlbmQKIAog
ZGVmIGlzQXJjaCh0b2tlbikKQEAgLTMwMyw3ICszMDMsNyBAQCBjbGFzcyBQYXJzZXIKIAogICAg
IGRlZiBjb25zdW1lS2luZAogICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKLSAgICAgICAg
cGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQs
IFplcm9SZWcsIFRtcCwgU2ltcGxlQWRkciwgQWRkciwgRXh0ZW5kZWRPZmZzZXRBZGRyLCBJbmRl
eCwgUmVsQ29uZCwgUmVzQ29uZCwgRG91YmxlQ29uZCwgb3IgU3RhdHVzQ29uZCkiKSB1bmxlc3Mg
aXNLaW5kKHJlc3VsdCkKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBC
aWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFplcm9SZWcsIFRtcCwgU2ltcGxlQWRkciwgQWRkciwg
RXh0ZW5kZWRPZmZzZXRBZGRyLCBJbmRleCwgUHJlSW5kZXgsIFBvc3RJbmRleCwgUmVsQ29uZCwg
UmVzQ29uZCwgRG91YmxlQ29uZCwgb3IgU3RhdHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3Vs
dCkKICAgICAgICAgYWR2YW5jZQogICAgICAgICByZXN1bHQKICAgICBlbmQKQEAgLTkyOSw2ICs5
MjksMTIgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgd2hl
biAiSW5kZXgiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFs
aWRJbmRleEZvcm0oYXJnc1sje2luZGV4fV0uc2NhbGUoKSwgYXJnc1sje2luZGV4fV0ub2Zmc2V0
KCksICN7YXJnLndpZHRoQ29kZX0pKSIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJP
UEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICB3aGVuICJQcmVJbmRleCIKKyAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZFByZUluZGV4Rm9y
bShhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIHdoZW4gIlBvc3RJbmRl
eCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZFBvc3RJ
bmRleEZvcm0oYXJnc1sje2luZGV4fV0ub2Zmc2V0KCkpKSIKKyAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKICAgICAgICAgICAgICAgICB3aGVuICJC
aWdJbW0iCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29uZCIKICAgICAgICAgICAgICAgICB3
aGVuICJSZXNDb25kIgpAQCAtMTIzNSw2ICsxMjQxLDEwIEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJh
dGVkIikgewogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5h
c0FkZHJlc3MoKSIKICAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKICAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAgICAg
ICAgICAgICB3aGVuICJQcmVJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
YXJnc1sje2luZGV4fV0uYXNQcmVJbmRleEFkZHJlc3MoKSIKKyAgICAgICAgICAgICAgICB3aGVu
ICJQb3N0SW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRl
eH1dLmFzUG9zdEluZGV4QWRkcmVzcygpIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQi
CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRp
b25hbENvbmRpdGlvbigpIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmgKaW5kZXggYzcwMzJlYzA4NGRkZmRkOTM1ZTU1MjdmYWFlOTM1Njgx
OTg0ODE3OS4uYjIyZDg0NjFjZjFiMTNjZjg1ZDE2NmE3MmFmZGJhMjQ5YzI4ZDUzYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMTE0MCw0ICsxMTQwLDkgQEAgdm9pZCBhZGRDb3B5
VGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+
Pj4mKTsKIAogYm9vbCBzaG91bGRSdW4oY29uc3QgY2hhciogZmlsdGVyLCBjb25zdCBjaGFyKiB0
ZXN0TmFtZSk7CiAKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCk7Cit2b2lkIHRlc3RMb2FkUHJl
SW5kZXg2NCgpOwordm9pZCB0ZXN0TG9hZFBvc3RJbmRleCgpOwordm9pZCB0ZXN0SWZoeWooKTsK
KwogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzXzMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18z
LmNwcAppbmRleCA0YzUyYWRhOWNjNDAyZGRlNTM5ODhjYzhmMmY1ZTllMGRkZTJlMTFjLi41OGEy
NWJkM2Y4OGU4Nzg5OWJhYTJhMmQwYzRkZDA5ZTQ2MzhlOTg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjNfMy5jcHAKQEAgLTI4LDYgKzI4LDI0OSBAQAogCiAjaWYgRU5BQkxFKEIzX0pJ
VCkKIAorCit2b2lkIHRlc3RJZmh5aigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09w
dExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiB0aGVuQmxvY2sgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHBy
b2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2
NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAgICAvLyB5
ID0gYWRkcjAgKyAxCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIzKQorICAg
IC8vIGlmIHkgIT0gYWRkcjEgZ290byBkb25lCisgICAgVmFsdWUqIHkgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLCAKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApLCAKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDgpKTsKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFs
dWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAgVmFsdWUqIGNvbmQgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE5vdEVxdWFsLCBPcmlnaW4oKSwgeSwgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNo
LCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2so
dGhlbkJsb2NrKSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoZW5fQmxvY2sK
KyAgICAvLyB6ID0gTG9hZCh5LCAwKQorICAgIC8vIHIyID0geSArIHoKKyAgICAvLyBVcHNpbG9u
KHIyLCBecjMpCisgICAgTWVtb3J5VmFsdWUqIHogPSB0aGVuQmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLCB5KTsKKyAgICBWYWx1ZSogcjIg
PSB0aGVuQmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgeSwgeik7
CisgICAgdGhlbkJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwg
T3JpZ2luKCksIHIsIHIyKTsKKyAgICB0aGVuQmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpKTsKKworICAgIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIHIzID0gUGhpKCkKKyAgICAv
LyByZXR1cm4gcjMKKyAgICBWYWx1ZSogcjMgPSBkb25lLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMyk7CisKKyAgICBwcm9jLnJlc2V0UmVh
Y2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NBKHByb2MpOworCisg
ICAgY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KDBM
KSwgYml0d2lzZV9jYXN0PGludHB0cl90PigwTCkpOworfQorCit2b2lkIHRlc3RMb2FkUHJlSW5k
ZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwg
NywgOCwgOSwgMTAgfTsKKyAgICBpbnQzMl90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29w
Qm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRC
bG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDMyKTsKKyAg
ICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxv
bihyMSwgXnIyKSAgICAgICAgICAgICAKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9u
KHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywg
T3JpZ2luKCksIEludDMyLCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpT
ZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAg
ICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdv
dG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOwor
ICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVF
cXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1
ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBM
b29wX0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIHIzID0gcjIgKyBsb2Fk
KHAzKQorICAgIC8vIFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisg
ICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgNCkpOworICAgIE1lbW9yeVZhbHVlKiBsb2FkID0gbG9vcEJv
ZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBw
Myk7CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRk
LCBPcmlnaW4oKSwgcjIsIGxvYWQpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7Cisg
ICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwg
RnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7ICAKKwor
ICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBm
aXhTU0EocHJvYyk7CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50MzJfdCB7CisgICAg
ICAgIGludDMyX3QgciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICBy
ICs9ICorK3B0cjsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGNv
bXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwg
dGVzdCgpKTsKK30KKwordm9pZCB0ZXN0TG9hZFByZUluZGV4NjQoKQoreworICAgIGlmIChPcHRp
b25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50
NjRfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50
NjRfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxl
KiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFk
ZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9C
bG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikgICAgICAgICAgICAg
CisgICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiBy
MSA9IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQ2NCwgMCk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigp
LCByLCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOwor
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJl
cXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IExvb3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8v
IHIyID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIg
PSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdp
bigpLCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFs
dWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BU
ZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9v
cFRlc3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAg
IGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwg
Y29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsK
KworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8g
cDMgPSBwMiArIDEKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMykKKyAgICAvLyBVcHNpbG9uKHIz
LCBecjIpCisgICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZh
bHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCks
IHAyLCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDgp
KTsKKyAgICBNZW1vcnlWYWx1ZSogbG9hZCA9IGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KHByb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwgcDMpOworICAgIFZhbHVlKiByMyA9IGxv
b3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb2FkKTsK
KyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9y
aWdpbigpLCByLCByMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihw
cm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVz
dCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2NrCisgICAgLy8g
ZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOyAgIAorCisgICAgcHJvYy5yZXNldFJlYWNoYWJp
bGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1
dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQ2NF90IHsKKyAgICAgICAgaW50NjRfdCByID0gMDsKKyAg
ICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAgIHIgKz0gKisrcHRyOworICAgICAgICBy
ZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihw
cm9jLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCit2b2lkIHRl
c3RMb2FkUG9zdEluZGV4KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwo
KSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAz
LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDY0X3QqIHB0ciA9IG51bXM7CisKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUg
PSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUo
SW50NjQpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAg
ICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCks
IHIsIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQ2NCwgMCkpOwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4o
KSwgcCwgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
cHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAg
VmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6
R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNv
bnN0MTAgPSBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDEwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgY29uc3QxMCk7CisgICAgbG9vcFRlc3QtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVk
QmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgTWVtb3J5VmFs
dWUqIGxvYWQgPSBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJ
bnQ2NCwgT3JpZ2luKCksIHAyKTsKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9hZCk7CisgICAgVmFsdWUqIGNvbnN0
OCA9IGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCk7
CisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBP
cmlnaW4oKSwgcDIsIGNvbnN0OCk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAg
ICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBG
cmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgIGRvbmUtPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcikpOyAgIAor
CisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAg
IGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQ2NF90IHsKKyAg
ICAgICAgaW50NjRfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAg
IHIgKz0gKnB0cisrOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEo
Y29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikp
LCB0ZXN0KCkpOworfQorCisKIHZvaWQgdGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvMzIo
KQogewogICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQpAQCAt
MzY5Nyw2ICszOTQwLDExIEBAIHZvaWQgYWRkU2hyVGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBE
ZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJVTih0ZXN0WlNo
ckFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDApKTsKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZm
ZmZmZmZmLCAxKSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgNjMpKTsK
KworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlSW5k
ZXg2NCgpKTsKKyAgICBSVU4odGVzdExvYWRQb3N0SW5kZXgoKSk7CisgICAgUlVOKHRlc3RJZmh5
aigpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAppbmRleCA2M2UyNjY3ODg1MjAx
OGE3NjgwY2E1ZjA3MTQ2OTY4MTA1ODg0YjNiLi42OWJiNmIyYmU4MTg3MGI1OTgzMzM2N2FmMjY3
NWI3ZjRlZjA1NmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAKQEAgLTIzMyw4ICsyMzMsOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGppdFdyaXRlVGh1bmtHZW5l
cmF0bwogICAgIGppdC5yZXQoKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb2NhbDAg
PSBqaXQubGFiZWwoKTsKLSAgICBqaXQubG9hZDY0KHgxLCBQb3N0SW5kZXgoOCksIHg2KTsKLSAg
ICBqaXQuc3RvcmU2NCh4NiwgeDMsIFBvc3RJbmRleCg4KSk7CisgICAgaml0LmxvYWQ2NChNYWNy
b0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyh4MSwgOCksIHg2KTsKKyAgICBqaXQuc3RvcmU2
NCh4NiwgTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MoeDMsIDgpKTsKICAgICBzbWFs
bENvcHkubGluaygmaml0KTsKICAgICBqaXQuYnJhbmNoU3ViNjQoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgVHJ1c3RlZEltbTMyKDgpLCB4MikubGlua1RvKGxvY2FsMCwgJmppdCk7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbG9jYWwyID0gaml0LmJyYW5jaEFkZDY0KE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgVHJ1c3RlZEltbTMyKDgpLCB4Mik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434178</attachid>
            <date>2021-07-25 00:01:46 -0700</date>
            <delta_ts>2021-07-25 03:22:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210725020144.patch</filename>
            <type>text/plain</type>
            <size>45800</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YzJiYTQ4MGQzMzQ0YTVkM2UyNTFiYzUyOGVhMWQ1NDk5YTk0NDQ0Li5mOWFjZjVmOTg1MjIwOWMy
YjI2ODVhMTBkZGQzYTI2ODNhMGM3NmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAyMS0wNy0yNCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0ZXN0T2JqZWN0aXZlQ0FQSU1haW4p
OgorICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAoYmxvY2tTaWduYXR1cmVD
b250YWluc0NsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKHRocmVhZE1haW4pOiBEZWxldGVkLgor
ICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzczo6UHJlSW5kZXhBZGRy
ZXNzKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRk
cmVzczo6UG9zdEluZGV4QWRkcmVzcyk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDMyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RvcmU2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNNjQ6OnN0b3JlMzIpOgorICAgICAgICAqIGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6
CisgICAgICAgIChKU0M6OnRlc3RTdG9yZVByZVBvc3RJbmRleDMyKToKKyAgICAgICAgKEpTQzo6
dGVzdFN0b3JlUHJlUG9zdEluZGV4NjQpOgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQcmVQb3N0SW5kZXg2NCk6CisgICAgICAg
ICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVlLmg6Cisg
ICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckFy
Zy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6anNIYXNoIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdURjo6cHJpbnRJ
bnRlcm5hbCk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OnByZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwb3N0SW5k
ZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUHJlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUG9zdEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc01lbW9yeSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6YmFzZSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b2Zmc2V0IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1ZhbGlkUG9zdEluZGV4Rm9ybSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxp
ZEZvcm0gY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjphc1ByZUluZGV4QWRkcmVzcyBjb25zdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6YXNQb3N0SW5kZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKiBiMy9h
aXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb3dlclN0
YWNrQXJncyk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAq
IGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgorICAg
ICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RJZmh5aik6CisgICAgICAgICh0
ZXN0TG9hZFByZUluZGV4MzIpOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDY0KToKKyAgICAg
ICAgKHRlc3RMb2FkUG9zdEluZGV4KToKKyAgICAgICAgKGFkZFNoclRlc3RzKToKKyAgICAgICAg
KiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OmppdFdyaXRlVGh1
bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTIxICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIHNwZWN1bGF0ZU5laXRoZXJEb3VibGVOb3JTdHJpbmdOb3JI
ZWFwQmlnSW50IHNob3VsZCBvbmx5IGhhdmUgYSBzaW5nbGUgSlNUeXBlIGJyYW5jaApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAppbmRleCAzZDE5NDlhNDA3ODVkOTljYTYxNTk1YWFiMDRiZTZmMWQwZDk2YmEzLi4y
MzU0YzQ1MzY4YzdjMGQ1Y2U5MDE4YWNmZjI4NGM0YTBhMDQzMWE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIu
aApAQCAtMjQ1LDYgKzI0NSwzNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9OwogCisgICAg
Ly8gUHJlSW5kZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mg
d2l0aCBiYXNlIGFkZHJlc3MgYW5kIHByZS1pbmNyZW1lbnQvZGVjcmVtZW50IGluZGV4LgorICAg
IHN0cnVjdCBQcmVJbmRleEFkZHJlc3MgeworICAgICAgICBQcmVJbmRleEFkZHJlc3MoUmVnaXN0
ZXJJRCBiYXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFzZSkKKyAgICAgICAg
ICAgICwgaW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lz
dGVySUQgYmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKKyAgICAvLyBQb3N0SW5k
ZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mgd2l0aCBiYXNl
IGFkZHJlc3MgYW5kIHBvc3QtaW5jcmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3Qg
UG9zdEluZGV4QWRkcmVzcyB7CisgICAgICAgIFBvc3RJbmRleEFkZHJlc3MoUmVnaXN0ZXJJRCBi
YXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFzZSkKKyAgICAgICAgICAgICwg
aW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQg
YmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKICAgICAvLyBBYnNvbHV0ZUFkZHJl
c3M6CiAgICAgLy8KICAgICAvLyBEZXNjcmliZXMgYW4gbWVtb3J5IG9wZXJhbmQgZ2l2ZW4gYnkg
YSBwb2ludGVyLiAgRm9yIHJlZ3VsYXIgbG9hZCAmIHN0b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCmluZGV4IGZlMzBk
OWM4NGQzNTI3ZWViMTZmY2QwNmUxMTVmYzY4ZDY5MDkwZmQuLjJhOTEyZDBkZDI2NjI2YmQ3NGUx
MDNiZWY5NjVmMmJhZGZjZTBiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0xNDQ1LDkgKzE0NDUsMTQgQEAg
cHVibGljOgogICAgICAgICBsb2FkPDY0PihhZGRyZXNzLCBkZXN0KTsKICAgICB9CiAKLSAgICB2
b2lkIGxvYWQ2NChSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4IHNpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB2b2lkIGxvYWQ2NChQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3QsIHNyYywgc2ltbSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLmJhc2UsIFByZUluZGV4KHNyYy5p
bmRleCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZDY0KFBvc3RJbmRleEFkZHJlc3Mgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3Qs
IHNyYy5iYXNlLCBQb3N0SW5kZXgoc3JjLmluZGV4KSk7CiAgICAgfQogCiAgICAgRGF0YUxhYmVs
MzIgbG9hZDY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgZGVzdCkKQEAgLTE1NDQsNiArMTU0OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWQ8MzI+
KGFkZHJlc3MsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbG9hZDMyKFByZUluZGV4QWRkcmVz
cyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcjwz
Mj4oZGVzdCwgc3JjLmJhc2UsIFByZUluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKworICAgIHZv
aWQgbG9hZDMyKFBvc3RJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQb3N0SW5kZXgoc3Jj
LmluZGV4KSk7CisgICAgfQorCiAgICAgRGF0YUxhYmVsMzIgbG9hZDMyV2l0aEFkZHJlc3NPZmZz
ZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTczMyw3ICsxNzQ4LDE3IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0PihtZW1vcnlUZW1wUmVnaXN0ZXIsIG1lbW9yeVRl
bXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRy
ZXNzLnNjYWxlKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGFkZHJlc3MuYmFz
ZSwgbWVtb3J5VGVtcFJlZ2lzdGVyKTsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkIHN0b3JlNjQo
UmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOwor
ICAgIH0KKworICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVz
cyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QuYmFz
ZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKICAgICB2b2lkIHN0b3JlNjQoUmVn
aXN0ZXJJRCBzcmMsIGNvbnN0IHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAgICAgICBzdG9yZTw2
ND4oc3JjLCBhZGRyZXNzKTsKQEAgLTE3NzcsMTEgKzE4MDIsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHN0b3JlNjQoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CiAgICAgfQogCi0gICAgdm9pZCBz
dG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIFBvc3RJbmRleCBzaW1tKQot
ICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QsIHNpbW0pOwotICAg
IH0KLSAgICAKICAgICBEYXRhTGFiZWwzMiBzdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgRGF0YUxhYmVs
MzIgbGFiZWwodGhpcyk7CkBAIC0xODc5LDYgKzE4OTksMTYgQEAgcHVibGljOgogICAgICAgICBz
dG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAorICAgIHZvaWQgc3Rv
cmUzMihSZWdpc3RlcklEIHNyYywgUHJlSW5kZXhBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgZGVzdC5iYXNlLCBQcmVJbmRleChkZXN0LmluZGV4
KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBQb3N0SW5kZXhB
ZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgZGVz
dC5iYXNlLCBQb3N0SW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKwogICAgIERhdGFMYWJlbDMy
IHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5kZXggZjIyYmZmY2UxNTU0
YjAyYzIyNmMyMTQ5MmFiMDY3YmFiMzhjNDBiNS4uNTM0ZWZlMTQzZjc5MGI5MDk4OWJjMmNjNjNm
ZjA5YTA0NjdlNTU3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0
bWFzbS5jcHAKQEAgLTIyMTIsNiArMjIxMiwxNzYgQEAgdm9pZCB0ZXN0WG9yTm90V2l0aFVuc2ln
bmVkUmlnaHRTaGlmdDY0KCkKICAgICAgICAgfQogICAgIH0KIH0KKwordm9pZCB0ZXN0U3RvcmVQ
cmVQb3N0SW5kZXgzMigpCit7CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAg
ICBpbnRwdHJfdCBhZGRyID0gYml0d2lzZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAg
aW50MzJfdCBpbmRleCA9IHNpemVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0g
KGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgIC8vICorK3AxID0gNDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0
b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVz
cyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMs
IGFkZHIpOworICAgIH07CisKKyAgICBpbnQzMl90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQzMl90
Kj4odGVzdDEoNCkpOworICAgIENIRUNLX0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEs
IG51bXNbMV0pOworCisgICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50MzJfdCBzcmMpIHsKKyAgICAg
ICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysg
PSA1OyByZXR1cm4gcDI7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAg
ICBpbnQzMl90KiBwMiA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4odGVzdDIoNSkpOworICAgIENI
RUNLX0VRKCpwMiwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RT
dG9yZVByZVBvc3RJbmRleDY0KCkKK3sKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMyB9
OworICAgIGludHB0cl90IGFkZHIgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZudW1zWzFdKTsK
KyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0ZXN0MSA9
IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0
KTsKKworICAgICAgICAgICAgLy8gKisrcDEgPSA0OyByZXR1cm4gcDE7CisgICAgICAgICAgICBq
aXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UHJlSW5kZXhB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJl
dCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUs
IHNyYywgYWRkcik7CisgICAgfTsKKworICAgIGludDY0X3QqIHAxID0gYml0d2lzZV9jYXN0PGlu
dDY0X3QqPih0ZXN0MSg0KSk7CisgICAgQ0hFQ0tfRVEoKnAxLCA0KTsKKyAgICBDSEVDS19FUSgq
LS1wMSwgbnVtc1sxXSk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQ2NF90IHNyYykgewor
ICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Cisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAq
cDIrKyA9IDU7IHJldHVybiBwMjsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rp
b25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUsIHNyYywgYWRkcik7CisgICAgfTsK
KworICAgIGludDY0X3QqIHAyID0gYml0d2lzZV9jYXN0PGludDY0X3QqPih0ZXN0Mig1KSk7Cisg
ICAgQ0hFQ0tfRVEoKnAyLCA0KTsKKyAgICBDSEVDS19FUSgqLS1wMiwgNSk7Cit9CisKK3ZvaWQg
dGVzdExvYWRQcmVQb3N0SW5kZXgzMigpCit7CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIs
IDMgfTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDMyX3QpOworCisgICAgYXV0byB0
ZXN0MSA9IFsmXSAoaW50MzJfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBp
bGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVy
biByZXM7CisgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRy
ZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICAgICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVw
bGFjZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
aW52b2tlPGludDMyX3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworICAgIAorICAgIENIRUNL
X0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA0KTsKKworICAgIGF1dG8g
dGVzdDIgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21w
aWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyByZXR1
cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFk
ZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihy
ZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
aml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
biBpbnZva2U8aW50MzJfdD4obG9hZCwgJm51bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19F
USh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgNSk7Cit9CisKK3ZvaWQgdGVz
dExvYWRQcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMg
fTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0ZXN0
MSA9IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVybiBy
ZXM7CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRyZXNz
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwor
ICAgICAgICAgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQocmVwbGFj
ZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7
CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52
b2tlPGludDY0X3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVz
dDEoNCksIDMpOworICAgIENIRUNLX0VRKG51bXNbMl0sIDQpOworCisgICAgYXV0byB0ZXN0MiA9
IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
aml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKnAyKys7ICpwMiA9IDU7IHJldHVybiByZXM7
CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhH
UFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2Up
LCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOwor
ICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9r
ZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3Qy
KDUpLCAyKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA1KTsKK30KICNlbmRpZgogCiAjaWYgQ1BV
KFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtNDQ3NSw2ICs0NjQ1LDExIEBA
IHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9B
TkFMWVNJUwogICAgIFJVTih0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDY0KCkpOwogICAgIFJVTih0
ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhVbnNp
Z25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0U3RvcmVQcmVQb3N0SW5kZXgzMigp
KTsKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2Fk
UHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKSk7CiAj
ZW5kaWYKIAogI2lmIENQVShBUk02NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCmluZGV4IGQ1ZmMzMTY0NjU5NjhlYjczNzFiNmZmMWNjNmY4MzE3ZmVjZGU1MmUu
LjdlYzdhNzU0MTY5NGFjOGFlNmQ0ZmFhYmM5Yzc5YmJhNjA3MDA2NDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC01NDYsNyArNTQ2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBzY2Fs
ZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBvcGVyYW5kIGlu
dG8gYW4gYWRkcmVzcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFs
dWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KICAgICBBcmcgZWZmZWN0aXZlQWRkcihWYWx1ZSogYWRk
cmVzcywgSW50IG9mZnNldCwgV2lkdGggd2lkdGgpCkBAIC05MDIsNiArOTAyLDEwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgewogICAg
ICAgICAgICAgICAgIGlmIChpbW0ocmlnaHQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZChvcGNvZGUsIGltbShyaWdodCksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gaWYgKG9wY29kZSA9PSBBaXI6OkFkZDY0ICYmIG1fdXNlQ291bnRzLm51bVVzZXMo
bV92YWx1ZSkgJiYgQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShyaWdodC0+YXNJbnQoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgIGRhdGFMb2coIi0tLS0tLS0tLS0tLS0gZmluZCBw
b3N0IGNhbmRpZGF0ZSBhZGQ6ICIsIHBvaW50ZXJEdW1wKG1fdmFsdWUpLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIG1fYWRkQWRkcmVzc1RvSW5zdC5hZGQobGVmdCwgJm1faW5z
dHMubGFzdCgpLmxhc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7
CkBAIC0xMTQ2LDEyICsxMTUwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBBaXI6
Ok1vdmUzMjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFN0b3JlMzIsIEFy
Zzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0oV2lkdGgzMikpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9yZTMyLCBtX3ZhbHVlLCB6ZXJv
UmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oTW92ZTMy
LCBBcmc6Olplcm9SZWcsIGRlc3Qua2luZCgpKSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdpZHRoMzIp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoTW92ZTMyLCBtX3ZhbHVlLCB6
ZXJvUmVnKCksIGRlc3QpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBjYXNlIEFpcjo6TW92ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3Jt
KFN0b3JlNjQsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0o
V2lkdGg2NCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9yZTY0LCBt
X3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxp
ZEZvcm0oTW92ZSwgQXJnOjpaZXJvUmVnLCBkZXN0LmtpbmQoKSkgJiYgZGVzdC5pc1ZhbGlkRm9y
bShXaWR0aDY0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KE1vdmUsIG1f
dmFsdWUsIHplcm9SZWcoKSwgZGVzdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI1NTksNiArMjU2Myw1NSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBhdXRvIHRyeUFwcGVuZFByZUluZGV4ID0gWyZdICgpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5
cGUoTW92ZVdpdGhJbmNyZW1lbnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50eXBl
KCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlByZUlu
ZGV4LCBBcmc6OlRtcCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBpZiAoIUFpcjo6QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKG1lbW9yeS0+b2Zm
c2V0KCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgaWYgKCFtZW1vcnktPnByZUluZGV4QWRkKCkgfHwgIW1fdXNlQ291bnRzLm51bVVzZXMobWVt
b3J5LT5wcmVJbmRleEFkZCgpKSB8fCBtX3VzZUNvdW50cy5udW1Vc2VzKG1lbW9yeS0+bGFzdENo
aWxkKCkpID4gMikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
ICAgICAgICAgbV9wcmVJbmRleEFkZHMuYWRkKG1lbW9yeS0+cHJlSW5kZXhBZGQoKSk7CisgICAg
ICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgQXJnOjpwcmVJbmRleCh0bXAobWVtb3J5LT5sYXN0
Q2hpbGQoKSksIG1lbW9yeS0+b2Zmc2V0KCkpLCB0bXAobWVtb3J5KSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAodHJ5QXBw
ZW5kUHJlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8v
IGF1dG8gdHJ5QXBwZW5kUG9zdEluZGV4ID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAg
Ly8gICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTW92ZVdpdGhJbmNy
ZW1lbnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50eXBlKCkpOworICAgICAgICAg
ICAgLy8gICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlBvc3RJbmRleCwgQXJnOjpU
bXApKQorICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAv
LyAgICAgaWYgKCFtX2FkZEFkZHJlc3NUb0luc3QuY29udGFpbnMobWVtb3J5LT5sYXN0Q2hpbGQo
KSkgfHwgbV91c2VDb3VudHMubnVtVXNlcyhtZW1vcnktPmxhc3RDaGlsZCgpKSA+IDIpCisgICAg
ICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gICAgIElu
c3QqIGluc3QgPSBtX2FkZEFkZHJlc3NUb0luc3QuZ2V0KG1lbW9yeS0+bGFzdENoaWxkKCkpOwor
ICAgICAgICAgICAgLy8gICAgIFZhbHVlKiBhZGRWYWx1ZSA9IGluc3QtPm9yaWdpbjsKKworICAg
ICAgICAgICAgLy8gICAgIGludHB0cl90IG9mZnNldCA9IGFkZFZhbHVlLT5jaGlsZCgxKS0+YXNJ
bnRQdHIoKTsKKyAgICAgICAgICAgIC8vICAgICBpZiAoc3VtT3ZlcmZsb3dzPGludHB0cl90Pihv
ZmZzZXQsIG1lbW9yeS0+b2Zmc2V0KCkpKQorICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAvLyAgICAgb2Zmc2V0ICs9IG1lbW9yeS0+b2Zmc2V0KCk7Cisg
ICAgICAgICAgICAvLyAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNf
Y2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0KTsKKyAgICAgICAgICAgIC8vICAgICBpZiAo
c21hbGxPZmZzZXQgIT0gb2Zmc2V0IHx8ICFBaXI6OkFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybSht
ZW1vcnktPm9mZnNldCgpKSkKKyAgICAgICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgLy8gICAgIG1lbW9yeS0+c2V0T2Zmc2V0KHNtYWxsT2Zmc2V0KTsKKworICAg
ICAgICAgICAgLy8gICAgIGluc3QtPmtpbmQgPSBBaXI6OktpbmQocmVsYXhlZE1vdmVGb3JUeXBl
KGFkZFZhbHVlLT50eXBlKCkpKTsKKyAgICAgICAgICAgIC8vICAgICBpbnN0LT5hcmdzLmNsZWFy
KCk7CisgICAgICAgICAgICAvLyAgICAgaW5zdC0+YXBwZW5kKHRtcChhZGRWYWx1ZS0+Y2hpbGQo
MCkpLCB0bXAoYWRkVmFsdWUpKTsKKyAgICAgICAgICAgIC8vICAgICBtX2FkZEFkZHJlc3NUb0lu
c3QucmVtb3ZlKG1lbW9yeS0+bGFzdENoaWxkKCkpOworCisgICAgICAgICAgICAvLyAgICAgYXBw
ZW5kKG9wY29kZSwgQXJnOjpwb3N0SW5kZXgodG1wKG1lbW9yeS0+bGFzdENoaWxkKCkpLCBtZW1v
cnktPm9mZnNldCgpKSwgdG1wKG1lbW9yeSkpOworICAgICAgICAgICAgLy8gICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgLy8gfTsKKworICAgICAgICAgICAgLy8gaWYgKHRyeUFwcGVuZFBv
c3RJbmRleCgpKQorICAgICAgICAgICAgLy8gICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBw
ZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBraW5kLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0
bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjY4OCw2
ICsyNzQxLDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAodHJ5QXBwZW5kQWRkV2l0aFNo
aWZ0KGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBlbmRBZGRXaXRoU2hpZnQocmlnaHQsIGxlZnQpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRQcmVJ
bmRleEFkZCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlSW5k
ZXhBZGRzLmNvbnRhaW5zKG1fdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgbV9wcmVJbmRleEFkZHMucmVtb3ZlKG1fdmFsdWUpOworICAg
ICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwg
dG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRQ
cmVJbmRleEFkZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBw
ZW5kQmluT3A8QWRkMzIsIEFkZDY0LCBBZGREb3VibGUsIEFkZEZsb2F0LCBDb21tdXRhdGl2ZT4o
bGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00MjY1LDYg
KzQzMjksOSBAQCBwcml2YXRlOgogICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrKiwgQWlyOjpC
YXNpY0Jsb2NrKj4gbV9ibG9ja1RvQmxvY2s7CiAgICAgSGFzaE1hcDxWYXJpYWJsZSosIFZlY3Rv
cjxUbXA+PiBtX3ZhcmlhYmxlVG9UbXBzOwogCisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX3ByZUlu
ZGV4QWRkczsKKyAgICBIYXNoTWFwPFZhbHVlKiwgSW5zdCo+IG1fYWRkQWRkcmVzc1RvSW5zdDsK
KwogICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNoaWxk
cmVuOwogICAgIEJsb2NrV29ya2xpc3QgbV9mYXN0V29ya2xpc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTWVtb3J5VmFsdWUuaAppbmRleCBlNzY4MjY0YzEzZjE2N2VmNTA2YmJlYTI2NjE2
Njc5M2M2NzU3MzNlLi5mOTdkYjhkNjNhNzIzNGVhNWEyZTg5OWFkMzk3MWI4NDc2M2E2YzhhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKQEAgLTM1LDYgKzM1LDcg
QEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBKU19FWFBPUlRfUFJJ
VkFURSBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CisKIHB1YmxpYzoKICAgICBzdGF0aWMg
Ym9vbCBhY2NlcHRzKEtpbmQga2luZCkKICAgICB7CkBAIC02OSw2ICs3MCw5IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBIZWFwUmFuZ2UmIGZlbmNlUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2ZlbmNl
UmFuZ2U7IH0KICAgICB2b2lkIHNldEZlbmNlUmFuZ2UoY29uc3QgSGVhcFJhbmdlJiByYW5nZSkg
eyBtX2ZlbmNlUmFuZ2UgPSByYW5nZTsgfQogCisgICAgVmFsdWUqIHByZUluZGV4QWRkKCkgeyBy
ZXR1cm4gbV9wcmVJbmRleEFkZDsgfQorICAgIHZvaWQgc2V0UHJlSW5kZXhBZGQoVmFsdWUqIGFk
ZHIpIHsgbV9wcmVJbmRleEFkZCA9IGFkZHI7IH0KKwogICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0
IHsgcmV0dXJuIEIzOjppc1N0b3JlKG9wY29kZSgpKTsgfQogICAgIGJvb2wgaXNMb2FkKCkgY29u
c3QgeyByZXR1cm4gQjM6OmlzTG9hZChvcGNvZGUoKSk7IH0KIApAQCAtMTUwLDYgKzE1NCw3IEBA
IHByaXZhdGU6CiAgICAgT2Zmc2V0VHlwZSBtX29mZnNldCB7IDAgfTsKICAgICBIZWFwUmFuZ2Ug
bV9yYW5nZSB7IEhlYXBSYW5nZTo6dG9wKCkgfTsKICAgICBIZWFwUmFuZ2UgbV9mZW5jZVJhbmdl
IHsgSGVhcFJhbmdlKCkgfTsKKyAgICBWYWx1ZSogbV9wcmVJbmRleEFkZCB7IG51bGxwdHIgfTsK
IH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCmluZGV4IDIyODBmZDc3MTI1MmU3MjYwZjY4NTA1MDky
ZmQ1NDNjZmUwNjE4NTcuLmY4NTQ0OThkNmZkNTU3ZGFmMDkwNzdhZWM4M2MzMTQ2MTdiYzAzOTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKQEAg
LTQ4MSw2ICs0ODEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBoYW5kbGVDaGFuZ2VkQ0ZHSWZO
ZWNlc3NhcnkoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmVzdWx0IHw9IG1fY2hhbmdl
ZDsKKwogICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQgJiYgbV9wcm9jLm9wdExldmVsKCkgPj0g
Mik7CiAgICAgICAgIAogICAgICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkgPCAyKSB7CkBAIC00
ODgsNyArNDg5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgc2ltcGxpZnlDRkcoKTsKICAgICAg
ICAgICAgIGhhbmRsZUNoYW5nZWRDRkdJZk5lY2Vzc2FyeSgpOwogICAgICAgICB9Ci0gICAgICAg
IAorCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtMTk0MCw2ICsxOTQx
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG1lbW9yeS0+b2Zm
c2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0
ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChzbWFsbE9mZnNldCA9PSBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbWVtb3J5LT5vZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
ZW1vcnktPnNldFByZUluZGV4QWRkKGFkZHJlc3MpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YWRkcmVzcyA9IGFkZHJlc3MtPmNoaWxkKDApOwogICAgICAgICAgICAgICAgICAgICAgICAgbWVt
b3J5LT5sYXN0Q2hpbGQoKSA9IGFkZHJlc3M7CiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1v
cnktPnNldE9mZnNldChzbWFsbE9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5jcHAKaW5kZXggMTAzYzZlY2NhM2QzMTRiYjRlZDhjMDJhNGQyZjAwOWNhNjQxZDAwMS4u
NzdlZTg0MjUxMjRiOWQ4YjhjNTgyZjM5ZmY5NjlmNjBmZDE2Y2MwMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcApAQCAtMTMwLDYgKzEzMCwxMSBAQCB1bnNpZ25lZCBB
cmc6OmpzSGFzaCgpIGNvbnN0CiAgICAgICAgIHJlc3VsdCArPSBtX2Jhc2UuaW50ZXJuYWxWYWx1
ZSgpOwogICAgICAgICByZXN1bHQgKz0gbV9pbmRleC5pbnRlcm5hbFZhbHVlKCk7CiAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUHJlSW5kZXg6CisgICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAg
IHJlc3VsdCArPSBtX29mZnNldDsKKyAgICAgICAgcmVzdWx0ICs9IG1fYmFzZS5pbnRlcm5hbFZh
bHVlKCk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIHJlc3VsdCAr
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zY2FsZSk7CiAgICAgICAgIHJlc3VsdCArPSBzdGFj
a1Nsb3QoKS0+aW5kZXgoKTsKQEAgLTE2MSw3ICsxNjYsNyBAQCB2b2lkIEFyZzo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4Iiwgc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nIHVuc2lnbmVkPihtX29mZnNldCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBaZXJvUmVnOgotICAgICAgICBvdXQucHJpbnQoIiUleHpyIik7CisgICAgICAgIG91
dC5wcmludCgiJXh6ciIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTaW1wbGVBZGRyOgog
ICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIpIik7CkBAIC0xODAsNiArMTg1LDEyIEBA
IHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBvdXQu
cHJpbnQoIiwiLCBzY2FsZSgpKTsKICAgICAgICAgb3V0LnByaW50KCIpIik7CiAgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCks
ICIsUHJlKCQiLCBvZmZzZXQoKSwgIikpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBv
c3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLFBvc3QoJCIsIG9mZnNl
dCgpLCAiKSkiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGlm
IChvZmZzZXQoKSkKICAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CkBAIC0yNjEsNiAr
MjcyLDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6OktpbmQg
a2luZCkKICAgICBjYXNlIEFyZzo6SW5kZXg6CiAgICAgICAgIG91dC5wcmludCgiSW5kZXgiKTsK
ICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpQcmVJbmRleDoKKyAgICAgICAgb3V0LnBy
aW50KCJQcmVJbmRleCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OlBvc3RJbmRl
eDoKKyAgICAgICAgb3V0LnByaW50KCJQb3N0SW5kZXgiKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQXJnOjpSZWxDb25kOgogICAgICAgICBvdXQucHJpbnQoIlJlbENvbmQiKTsKICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKaW5kZXggY2U1YTRl
NzM3OWFkNjQ0NDVmMGMzYWJkMTI5ZjMyOWI5NDdmZTgxMi4uZWEyMjYyOGFlMTJlMTFmZWI0NWRm
NjdhY2YzZGE4ZDY4NjBiNGZkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5o
CkBAIC0xLDMgKzEsNCBAQAorCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTc3LDYgKzc4LDggQEAgcHVibGljOgog
ICAgICAgICBTdGFjaywKICAgICAgICAgQ2FsbEFyZywKICAgICAgICAgSW5kZXgsCisgICAgICAg
IFByZUluZGV4LAorICAgICAgICBQb3N0SW5kZXgsCiAKICAgICAgICAgLy8gSW1tZWRpYXRlIG9w
ZXJhbmRzIHRoYXQgY3VzdG9taXplIHRoZSBiZWhhdmlvciBvZiBhbiBvcGVyYXRpb24uIFlvdSBj
YW4gdGhpbmsgb2YgdGhlbSBhcwogICAgICAgICAvLyBzZWNvbmRhcnkgb3Bjb2Rlcy4gVGhleSBh
cmUgYWx3YXlzICJVc2UiJ2QuCkBAIC02NDksNiArNjUyLDMwIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIEFyZzo6aW5kZXgoYmFzZSwgaW5kZXgsIHNjYWxlLCAwKTsKICAgICB9CiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50
Pj4KKyAgICBzdGF0aWMgQXJnIHByZUluZGV4KEFpcjo6VG1wIGJhc2UsIEludCBpbmRleCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc0ludDko
aW5kZXgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFBy
ZUluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1f
b2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+
CisgICAgc3RhdGljIEFyZyBwb3N0SW5kZXgoQWlyOjpUbXAgYmFzZSwgSW50IGluZGV4KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzSW50OShp
bmRleCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUG9z
dEluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1f
b2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgc3Rh
dGljIEFyZyByZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbikKICAgICB7CiAgICAgICAgIEFyZyByZXN1bHQ7CkBAIC03OTksNiArODI2LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKICAgICB9CiAKKyAgICBib29s
IGlzUHJlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBQcmVJ
bmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUG9zdEluZGV4KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBraW5kKCkgPT0gUG9zdEluZGV4OworICAgIH0KKwogICAgIGJvb2wgaXNNZW1v
cnkoKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKQEAgLTgwOCw2ICs4
NDUsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFy
ZzoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAg
Y2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk3Miw3ICsxMDExLDcgQEAgcHVibGlj
OgogCiAgICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEV4dGVuZGVk
T2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBBU1NFUlQoa2luZCgpID09
IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0
QWRkciB8fCBraW5kKCkgPT0gSW5kZXggfHwga2luZCgpID09IFByZUluZGV4IHx8IGtpbmQoKSA9
PSBQb3N0SW5kZXgpOwogICAgICAgICByZXR1cm4gbV9iYXNlOwogICAgIH0KIApAQCAtOTgyLDcg
KzEwMjEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoa2luZCgpID09IFN0YWNrKQog
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX3NjYWxl
KTsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9m
ZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIg
fHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4IHx8IGtpbmQoKSA9PSBQcmVJ
bmRleCB8fCBraW5kKCkgPT0gUG9zdEluZGV4KTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCk7CiAgICAgfQogCkBAIC0xMDQ0LDYgKzEwODMs
OCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9m
ZnNldEFkZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6Cisg
ICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNl
IENhbGxBcmc6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKQEAgLTEwODEsNiArMTEyMiw4IEBAIHB1
YmxpYzoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRk
cjoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAg
Y2FzZSBQb3N0SW5kZXg6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFy
ZzoKICAgICAgICAgY2FzZSBCaWdJbW06IC8vIFllcywgd2UgYWxsb3cgQmlnSW1tIGFzIGEgZG91
YmxlIGltbWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVudGluZyBzdGFja21hcHMuCkBA
IC0xMjM3LDYgKzEyODAsMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2Fs
T2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFByZUluZGV4Rm9ybShJbnQgb2Zm
c2V0KQorICAgIHsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIHJldHVybiBp
c1ZhbGlkU2lnbmVkSW1tOShvZmZzZXQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zm
c2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFBvc3RJbmRleEZvcm0oSW50IG9mZnNl
dCkKKyAgICB7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICByZXR1cm4gaXNW
YWxpZFNpZ25lZEltbTkob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwog
ICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgd2lkdGggdGhlbiB0aGlzIG9wdGltaXN0aWNhbGx5
IGFzc3VtZXMgdGhhdCB5b3UncmUgdXNpbmcgdGhlIHJpZ2h0IHdpZHRoLiBCdXQKICAgICAvLyB0
aGUgd2lkdGggaXMgcmVsZXZhbnQgdG8gdmFsaWRpdHksIHNvIHBhc3NpbmcgYSBudWxsIHdpZHRo
IGlzIG9ubHkgdXNlZnVsIGZvciBhc3NlcnRpb25zLiBEb24ndAogICAgIC8vIHBhc3MgbnVsbCB3
aWR0aHMgd2hlbiBjYXNjYWRpbmcgdGhyb3VnaCBBcmdzIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxl
Y3RvciEKQEAgLTEyNjUsNiArMTMyNCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4g
aXNWYWxpZEFkZHJGb3JtKG9mZnNldCgpLCB3aWR0aCk7CiAgICAgICAgIGNhc2UgSW5kZXg6CiAg
ICAgICAgICAgICByZXR1cm4gaXNWYWxpZEluZGV4Rm9ybShzY2FsZSgpLCBvZmZzZXQoKSwgd2lk
dGgpOworICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRQ
cmVJbmRleEZvcm0ob2Zmc2V0KCkpOworICAgICAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAg
ICAgIHJldHVybiBpc1ZhbGlkUG9zdEluZGV4Rm9ybShvZmZzZXQoKSk7CiAgICAgICAgIGNhc2Ug
UmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6
CkBAIC0xMjg0LDYgKzEzNDcsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU2ltcGxlQWRkcjoK
ICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKKyAg
ICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAg
ICBmdW5jdG9yKG1fYmFzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmRl
eDoKQEAgLTEzMjYsNiArMTM5MSw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBTaW1wbGVBZGRy
OgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgor
ICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAg
ICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQLCBhcmdSb2xlID09IFVzZUFkZHIgPyBhcmdXaWR0
aCA6IHBvaW50ZXJXaWR0aCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElu
ZGV4OgpAQCAtMTM4Myw2ICsxNDUwLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0YXRpY19j
YXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCksIG1fZXh0ZW5kKTsKICAgICB9CiAKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzIGFzUHJlSW5kZXhBZGRyZXNzKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ByZUluZGV4KCkpOworICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIG9mZnNldCgpKTsK
KyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyBhc1Bvc3RJbmRl
eEFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUG9zdEluZGV4KCkpOwor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MobV9iYXNlLmdw
cigpLCBvZmZzZXQoKSk7CisgICAgfQorCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVChpc1JlbENvbmQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG93ZXJTdGFja0FyZ3MuY3BwCmluZGV4IDkwNWU2MTdmYmRlMGUyYjdkNzU1NTYzZTY4ODU4
OWJkYWQ3MjZjODAuLjZhZDA1ODQyNjdiOGM3ZWU3MTQ5YjAyZjgyMzE1NzJiZWU4Y2Y4YWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3Mu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3Mu
Y3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBsb3dlclN0YWNrQXJncyhDb2RlJiBjb2RlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdpZHRoID09IFdpZHRo
MzIpOwogCiAjaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFpcjo6
T3Bjb2RlIHN0b3JlT3Bjb2RlID0gU3RvcmUzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBaXI6Ok9wY29kZSBzdG9yZU9wY29kZSA9IE1vdmUzMjsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBaXI6OkFyZzo6S2luZCBvcGVyYW5kS2luZCA9IEFyZzo6WmVyb1JlZzsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBaXI6OkFyZyBvcGVyYW5kID0gQXJnOjp6ZXJvUmVnKCk7
CiAjZWxpZiBDUFUoWDg2XzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMKaW5kZXggNjYxZWFkZDIzNzNjNTRhNGJiYTk0N2E1NGJkYTI1NTdiZGI4
YWU0YS4uYWZkY2ZmMTYyYjU0YWFhYjE3NzdmN2FhNDI0YWFiNTgwOWYzN2U1YSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC02NDcsNiAr
NjQ3LDkgQEAgTW92ZSBVOkc6UHRyLCBEOkc6UHRyCiAgICAgSW5kZXgsIFRtcCBhcyBsb2FkUHRy
CiAgICAgVG1wLCBBZGRyIGFzIHN0b3JlUHRyCiAgICAgVG1wLCBJbmRleCBhcyBzdG9yZVB0cgor
ICAgIGFybTY0OiBaZXJvUmVnLCBBZGRyIGFzIHN0b3JlNjQKKyAgICBhcm02NDogWmVyb1JlZywg
SW5kZXggYXMgc3RvcmU2NAorCiAgICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmVQdHIKIAogIyBU
aGlzIGlzIGZvciBtb3ZpbmcgYmV0d2VlbiBzcGlsbCBzbG90cy4KQEAgLTY2MSwyOCArNjY0LDM0
IEBAIHg4Nl82NDogU3dhcDY0IFVEOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRtcAogICAgIFRt
cCwgQWRkcgogCithcm02NDogTW92ZVdpdGhJbmNyZW1lbnQ2NCBVOkc6NjQsIFVEOkc6NjQKKyAg
ICBQcmVJbmRleCwgVG1wIGFzIGxvYWQ2NAorICAgIFBvc3RJbmRleCwgVG1wIGFzIGxvYWQ2NAor
ICAgIFRtcCwgUHJlSW5kZXggYXMgc3RvcmU2NAorICAgIFRtcCwgUG9zdEluZGV4IGFzIHN0b3Jl
NjQKKwogTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wIGFzIHplcm9FeHRlbmQz
MlRvV29yZAogICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKICAgICBJbmRleCwgVG1wIGFzIGxvYWQz
MgogICAgIFRtcCwgQWRkciBhcyBzdG9yZTMyCiAgICAgVG1wLCBJbmRleCBhcyBzdG9yZTMyCisg
ICAgYXJtNjQ6IFplcm9SZWcsIEFkZHIgYXMgc3RvcmUzMgorICAgIGFybTY0OiBaZXJvUmVnLCBJ
bmRleCBhcyBzdG9yZTMyCiAgICAgeDg2OiBJbW0sIFRtcCBhcyB6ZXJvRXh0ZW5kMzJUb1dvcmQK
ICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZTMyCiAgICAgeDg2OiBJbW0sIEluZGV4IGFzIHN0
b3JlMzIKIAorYXJtNjQ6IE1vdmVXaXRoSW5jcmVtZW50MzIgVTpHOjMyLCBVWkQ6RzozMgorICAg
IFByZUluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgUG9zdEluZGV4LCBUbXAgYXMgbG9hZDMyCisg
ICAgVG1wLCBQcmVJbmRleCBhcyBzdG9yZTMyCisgICAgVG1wLCBQb3N0SW5kZXggYXMgc3RvcmUz
MgorCiAjIFRoaXMgaXMgZm9yIG1vdmluZyBiZXR3ZWVuIHNwaWxsIHNsb3RzLgogTW92ZTMyIFU6
RzozMiwgWkQ6RzozMiwgUzpHOjMyCiAgICAgQWRkciwgQWRkciwgVG1wCiAKLWFybTY0OiBTdG9y
ZTMyIFU6RzozMiwgWkQ6RzozMgotICAgIFplcm9SZWcsIEFkZHIKLSAgICBaZXJvUmVnLCBJbmRl
eAotCi1hcm02NDogU3RvcmU2NCBVOkc6NjQsIEQ6Rzo2NAotICAgIFplcm9SZWcsIEFkZHIKLSAg
ICBaZXJvUmVnLCBJbmRleAotCiBTaWduRXh0ZW5kMzJUb1B0ciBVOkc6MzIsIEQ6RzpQdHIKICAg
ICBUbXAsIFRtcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9n
ZW5lcmF0b3IucmIKaW5kZXggMzc0MGVmZGJkZDE0NmEzN2Y2ZWRlOWRkYmMyM2RkYmEwM2IwNzY0
Ni4uZjFiZjFhNDZjZmM4ODllYzE5MzQ2ZjJjMDZiN2NmNTBmOWUzZGUwZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgpAQCAtMjI5LDcg
KzIyOSw3IEBAIGRlZiBpc0dGKHRva2VuKQogZW5kCiAKIGRlZiBpc0tpbmQodG9rZW4pCi0gICAg
dG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KFpl
cm9SZWcpfChTaW1wbGVBZGRyKXwoQWRkcil8KEV4dGVuZGVkT2Zmc2V0QWRkcil8KEluZGV4KXwo
UmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25kKXwoU3RhdHVzQ29uZCkpXFovCisgICAgdG9r
ZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KFplcm9S
ZWcpfChTaW1wbGVBZGRyKXwoQWRkcil8KEV4dGVuZGVkT2Zmc2V0QWRkcil8KEluZGV4KXwoUHJl
SW5kZXgpfChQb3N0SW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0
dXNDb25kKSlcWi8KIGVuZAogCiBkZWYgaXNBcmNoKHRva2VuKQpAQCAtMzAzLDcgKzMwMyw3IEBA
IGNsYXNzIFBhcnNlcgogCiAgICAgZGVmIGNvbnN1bWVLaW5kCiAgICAgICAgIHJlc3VsdCA9IHRv
a2VuLnN0cmluZwotICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0lt
bSwgQml0SW1tLCBCaXRJbW02NCwgWmVyb1JlZywgVG1wLCBTaW1wbGVBZGRyLCBBZGRyLCBFeHRl
bmRlZE9mZnNldEFkZHIsIEluZGV4LCBSZWxDb25kLCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBT
dGF0dXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAgICBwYXJzZUVycm9yKCJF
eHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgWmVyb1JlZywgVG1w
LCBTaW1wbGVBZGRyLCBBZGRyLCBFeHRlbmRlZE9mZnNldEFkZHIsIEluZGV4LCBQcmVJbmRleCwg
UG9zdEluZGV4LCBSZWxDb25kLCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIp
IHVubGVzcyBpc0tpbmQocmVzdWx0KQogICAgICAgICBhZHZhbmNlCiAgICAgICAgIHJlc3VsdAog
ICAgIGVuZApAQCAtOTI5LDYgKzkyOSwxMiBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsK
ICAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJpZiAoIUFyZzo6aXNWYWxpZEluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5zY2FsZSgpLCBh
cmdzWyN7aW5kZXh9XS5vZmZzZXQoKSwgI3thcmcud2lkdGhDb2RlfSkpIgogICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAg
IHdoZW4gIlByZUluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJn
Ojppc1ZhbGlkUHJlSW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpKSkiCisgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAg
ICAgICAgd2hlbiAiUG9zdEluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlm
ICghQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSkpIgor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgogICAg
ICAgICAgICAgICAgIHdoZW4gIkJpZ0ltbSIKICAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25k
IgogICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCkBAIC0xMjM1LDYgKzEyNDEsMTAgQEAg
d3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJp
bnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgogICAgICAgICAgICAgICAgIHdoZW4gIklu
ZGV4IgogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jh
c2VJbmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlByZUluZGV4IgorICAgICAgICAgICAg
ICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1ByZUluZGV4QWRkcmVzcygpIgor
ICAgICAgICAgICAgICAgIHdoZW4gIlBvc3RJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNQb3N0SW5kZXhBZGRyZXNzKCkiCiAgICAgICAgICAg
ICAgICAgd2hlbiAiUmVsQ29uZCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJn
c1sje2luZGV4fV0uYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgd2hl
biAiUmVzQ29uZCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCBjNzAzMmVjMDg0ZGRm
ZGQ5MzVlNTUyN2ZhYWU5MzU2ODE5ODQ4MTc5Li5iMjJkODQ2MWNmMWIxM2NmODVkMTY2YTcyYWZk
YmEyNDljMjhkNTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0xMTQwLDQgKzEx
NDAsOSBAQCB2b2lkIGFkZENvcHlUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYpOwogCiBib29sIHNob3VsZFJ1bihjb25zdCBjaGFyKiBm
aWx0ZXIsIGNvbnN0IGNoYXIqIHRlc3ROYW1lKTsKIAordm9pZCB0ZXN0TG9hZFByZUluZGV4MzIo
KTsKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCk7Cit2b2lkIHRlc3RMb2FkUG9zdEluZGV4KCk7
Cit2b2lkIHRlc3RJZmh5aigpOworCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCmluZGV4IDRjNTJhZGE5Y2M0MDJkZGU1Mzk4OGNjOGYy
ZjVlOWUwZGRlMmUxMWMuLjMxNTAwYWU3MjBmODQwYTlhZjE3OGFhOWY1NmVjODI5MGM5NDE4NWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcApAQCAtMjgsNiArMjgsMjYzIEBA
CiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisKK3ZvaWQgdGVzdElmaHlqKCkKK3sKKyAgICBpZiAo
T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIHRoZW5CbG9jayA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBw
cm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Um9vdF9CbG9jaworICAgIC8vIHkgPSBhZGRyMCArIDEKKyAgICAvLyByMSA9IDAKKyAgICAvLyBV
cHNpbG9uKHIxLCBecjMpCisgICAgLy8gaWYgeSAhPSBhZGRyMSBnb3RvIGRvbmUKKyAgICBWYWx1
ZSogeSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEFkZCwgT3JpZ2lu
KCksIAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksIAorICAgICAgICByb290LT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCkpOworICAgIFZhbHVlKiByMSA9IHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKTsKKyAgICByb290LT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsK
KyAgICBWYWx1ZSogY29uZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgTm90RXF1YWws
IE9yaWdpbigpLCB5LCByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9u
ZSksIEZyZXF1ZW50ZWRCbG9jayh0aGVuQmxvY2spKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gVGhlbl9CbG9jaworICAgIC8vIHogPSBMb2FkKHksIDApCisgICAgLy8gcjIgPSB5
ICsgegorICAgIC8vIFVwc2lsb24ocjIsIF5yMykKKyAgICBNZW1vcnlWYWx1ZSogeiA9IHRoZW5C
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCks
IHkpOworICAgIFZhbHVlKiByMiA9IHRoZW5CbG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBB
ZGQsIE9yaWdpbigpLCB5LCB6KTsKKyAgICB0aGVuQmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjIpOworICAgIHRoZW5CbG9jay0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2so
ZG9uZSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2NrCisgICAg
Ly8gcjMgPSBQaGkoKQorICAgIC8vIHJldHVybiByMworICAgIFZhbHVlKiByMyA9IGRvbmUtPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAg
ZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIzKTsK
KworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAg
ICBmaXhTU0EocHJvYyk7CisKKyAgICBjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oMEwpLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KDBMKSk7Cit9CisK
K3ZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIz
T3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDMyX3QgbnVtc1tdID0g
eyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDMyX3QqIHB0ciA9IG51
bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOwor
ICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxv
Y2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRk
VmFyaWFibGUoSW50MzIpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2
NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAgICAvLyBy
MSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpICAgICAgICAgICAgIAorICAgIC8vIHAxID0g
YWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBl
bmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50MzIsIDApOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAg
IFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFi
bGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290LT5hcHBl
bmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhs
b29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxv
Y2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisg
ICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAg
VmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6
R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50
ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHAzID0gcDIgKyAxCisg
ICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAgIC8vIHIzID0gcjIgKyBsb2FkKHAzKQorICAgIC8v
IFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcDMgPSBsb29w
Qm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHkt
PmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA0KSk7CisgICAgbG9vcEJv
ZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwg
cDMpOworICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFk
ZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBM
b2FkLCBJbnQzMiwgT3JpZ2luKCksIHAzKSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJp
YWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRC
bG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Js
b2NrCisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOyAgCisKKyAgICBwcm9jLnJl
c2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NBKHByb2Mp
OworCisgICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDMyX3QgeworICAgICAgICBpbnQzMl90
IHIgPSAwOworICAgICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqKytwdHI7
CisgICAgICAgIHJldHVybiByOworICAgIH07CisKKyAgICBDSEVDS19FUShjb21waWxlQW5kUnVu
PGludDMyX3Q+KHByb2MsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9
CisKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVs
dEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVtc1td
ID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDY0X3QqIHB0ciA9
IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2Mu
YWRkVmFyaWFibGUoSW50NjQpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJ
bnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAgICAv
LyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpICAgICAgICAgICAgIAorICAgIC8vIHAx
ID0gYWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290LT5h
cHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50NjQsIDApOworICAgIHJvb3QtPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOwor
ICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290LT5h
cHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9j
ayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3Rf
QmxvY2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgp
CisgICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3Qt
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7Cisg
ICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBC
Mzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBl
bmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1
ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHAzID0gcDIgKyAx
CisgICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAgIC8vIHIzID0gcjIgKyBsb2FkKHAzKQorICAg
IC8vIFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcDMgPSBs
b29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJv
ZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KSk7CisgICAgbG9v
cEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwg
cCwgcDMpOworICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9j
LCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksIHAzKSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BC
b2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50
ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25l
X0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOyAgIAorCisgICAgcHJv
Yy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShw
cm9jKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQ2NF90IHsKKyAgICAgICAgaW50
NjRfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAgIHIgKz0gKisr
cHRyOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFu
ZFJ1bjxpbnQ2NF90Pihwcm9jLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkp
OworfQorCit2b2lkIHRlc3RMb2FkUG9zdEluZGV4KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVm
YXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVt
c1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDY0X3QqIHB0
ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0g
cHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJh
c2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHBy
b2MuYWRkVmFyaWFibGUoSW50NjQpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJs
ZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAg
ICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpICAgICAgICAgICAgIAorICAgIC8v
IHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290
LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50NjQsIDApOworICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEp
OworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRC
bG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rl
c3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBo
aSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRl
c3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7
CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9j
LCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5h
cHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVz
dC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZy
ZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHIzID0gcjIg
KyBsb2FkKHAyKQorICAgIC8vIHAzID0gcDIgKyAxCisgICAgLy8gVXBzaWxvbihyMywgXnIyKQor
ICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcjMg
PSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9v
cEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigp
LCBwMikpOworICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEFkZCwgT3JpZ2luKCksIHAyLCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDgpKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5l
dzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAgIGxv
b3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1
ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBE
b25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBl
bmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOyAKKworICAgIHBy
b2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0Eo
cHJvYyk7CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50NjRfdCB7CisgICAgICAgIGlu
dDY0X3QgciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9ICpw
dHIrKzsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVB
bmRSdW48aW50NjRfdD4ocHJvYywgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgp
KTsKK30KKworCiB2b2lkIHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzMyKCkKIHsKICAg
ICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKQEAgLTM2OTcsNiAr
Mzk1NCwxMSBAQCB2b2lkIGFkZFNoclRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVm
UHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0YXNrcykKICAgICBSVU4odGVzdFpTaHJBcmdJbW0z
MigweGZmZmZmZmZmLCAwKSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwg
MSkpOwogICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDYzKSk7CisKKyAgICBS
VU4odGVzdExvYWRQcmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7
CisgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4KCkpOworICAgIFJVTih0ZXN0SWZoeWooKSk7CiB9
CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKaW5kZXggNjNlMjY2Nzg4NTIwMThhNzY4MGNh
NWYwNzE0Njk2ODEwNTg4NGIzYi4uNjliYjZiMmJlODE4NzBiNTk4MzMzNjdhZjI2NzViN2Y0ZWYw
NTZmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwCkBAIC0yMzMsOCArMjMzLDggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJhdG8KICAg
ICBqaXQucmV0KCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9jYWwwID0gaml0Lmxh
YmVsKCk7Ci0gICAgaml0LmxvYWQ2NCh4MSwgUG9zdEluZGV4KDgpLCB4Nik7Ci0gICAgaml0LnN0
b3JlNjQoeDYsIHgzLCBQb3N0SW5kZXgoOCkpOworICAgIGppdC5sb2FkNjQoTWFjcm9Bc3NlbWJs
ZXI6OlBvc3RJbmRleEFkZHJlc3MoeDEsIDgpLCB4Nik7CisgICAgaml0LnN0b3JlNjQoeDYsIE1h
Y3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgzLCA4KSk7CiAgICAgc21hbGxDb3B5Lmxp
bmsoJmppdCk7CiAgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIFRydXN0ZWRJbW0zMig4KSwgeDIpLmxpbmtUbyhsb2NhbDAsICZqaXQpOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGxvY2FsMiA9IGppdC5icmFuY2hBZGQ2NChNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIFRydXN0ZWRJbW0zMig4KSwgeDIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434179</attachid>
            <date>2021-07-25 03:23:02 -0700</date>
            <delta_ts>2021-07-25 12:32:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210725052301.patch</filename>
            <type>text/plain</type>
            <size>46242</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YzJiYTQ4MGQzMzQ0YTVkM2UyNTFiYzUyOGVhMWQ1NDk5YTk0NDQ0Li5mOWFjZjVmOTg1MjIwOWMy
YjI2ODVhMTBkZGQzYTI2ODNhMGM3NmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAyMS0wNy0yNCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0ZXN0T2JqZWN0aXZlQ0FQSU1haW4p
OgorICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAoYmxvY2tTaWduYXR1cmVD
b250YWluc0NsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKHRocmVhZE1haW4pOiBEZWxldGVkLgor
ICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzczo6UHJlSW5kZXhBZGRy
ZXNzKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRk
cmVzczo6UG9zdEluZGV4QWRkcmVzcyk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDMyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RvcmU2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNNjQ6OnN0b3JlMzIpOgorICAgICAgICAqIGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6
CisgICAgICAgIChKU0M6OnRlc3RTdG9yZVByZVBvc3RJbmRleDMyKToKKyAgICAgICAgKEpTQzo6
dGVzdFN0b3JlUHJlUG9zdEluZGV4NjQpOgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQcmVQb3N0SW5kZXg2NCk6CisgICAgICAg
ICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVlLmg6Cisg
ICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckFy
Zy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6anNIYXNoIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdURjo6cHJpbnRJ
bnRlcm5hbCk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OnByZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwb3N0SW5k
ZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUHJlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUG9zdEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc01lbW9yeSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6YmFzZSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b2Zmc2V0IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1ZhbGlkUG9zdEluZGV4Rm9ybSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxp
ZEZvcm0gY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjphc1ByZUluZGV4QWRkcmVzcyBjb25zdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6YXNQb3N0SW5kZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKiBiMy9h
aXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb3dlclN0
YWNrQXJncyk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAq
IGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgorICAg
ICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RJZmh5aik6CisgICAgICAgICh0
ZXN0TG9hZFByZUluZGV4MzIpOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDY0KToKKyAgICAg
ICAgKHRlc3RMb2FkUG9zdEluZGV4KToKKyAgICAgICAgKGFkZFNoclRlc3RzKToKKyAgICAgICAg
KiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OmppdFdyaXRlVGh1
bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTIxICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIHNwZWN1bGF0ZU5laXRoZXJEb3VibGVOb3JTdHJpbmdOb3JI
ZWFwQmlnSW50IHNob3VsZCBvbmx5IGhhdmUgYSBzaW5nbGUgSlNUeXBlIGJyYW5jaApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAppbmRleCAzZDE5NDlhNDA3ODVkOTljYTYxNTk1YWFiMDRiZTZmMWQwZDk2YmEzLi4y
MzU0YzQ1MzY4YzdjMGQ1Y2U5MDE4YWNmZjI4NGM0YTBhMDQzMWE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIu
aApAQCAtMjQ1LDYgKzI0NSwzNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9OwogCisgICAg
Ly8gUHJlSW5kZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mg
d2l0aCBiYXNlIGFkZHJlc3MgYW5kIHByZS1pbmNyZW1lbnQvZGVjcmVtZW50IGluZGV4LgorICAg
IHN0cnVjdCBQcmVJbmRleEFkZHJlc3MgeworICAgICAgICBQcmVJbmRleEFkZHJlc3MoUmVnaXN0
ZXJJRCBiYXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFzZSkKKyAgICAgICAg
ICAgICwgaW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lz
dGVySUQgYmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKKyAgICAvLyBQb3N0SW5k
ZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mgd2l0aCBiYXNl
IGFkZHJlc3MgYW5kIHBvc3QtaW5jcmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3Qg
UG9zdEluZGV4QWRkcmVzcyB7CisgICAgICAgIFBvc3RJbmRleEFkZHJlc3MoUmVnaXN0ZXJJRCBi
YXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFzZSkKKyAgICAgICAgICAgICwg
aW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQg
YmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKICAgICAvLyBBYnNvbHV0ZUFkZHJl
c3M6CiAgICAgLy8KICAgICAvLyBEZXNjcmliZXMgYW4gbWVtb3J5IG9wZXJhbmQgZ2l2ZW4gYnkg
YSBwb2ludGVyLiAgRm9yIHJlZ3VsYXIgbG9hZCAmIHN0b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCmluZGV4IGZlMzBk
OWM4NGQzNTI3ZWViMTZmY2QwNmUxMTVmYzY4ZDY5MDkwZmQuLjJhOTEyZDBkZDI2NjI2YmQ3NGUx
MDNiZWY5NjVmMmJhZGZjZTBiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0xNDQ1LDkgKzE0NDUsMTQgQEAg
cHVibGljOgogICAgICAgICBsb2FkPDY0PihhZGRyZXNzLCBkZXN0KTsKICAgICB9CiAKLSAgICB2
b2lkIGxvYWQ2NChSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4IHNpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB2b2lkIGxvYWQ2NChQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3QsIHNyYywgc2ltbSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLmJhc2UsIFByZUluZGV4KHNyYy5p
bmRleCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZDY0KFBvc3RJbmRleEFkZHJlc3Mgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3Qs
IHNyYy5iYXNlLCBQb3N0SW5kZXgoc3JjLmluZGV4KSk7CiAgICAgfQogCiAgICAgRGF0YUxhYmVs
MzIgbG9hZDY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgZGVzdCkKQEAgLTE1NDQsNiArMTU0OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWQ8MzI+
KGFkZHJlc3MsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbG9hZDMyKFByZUluZGV4QWRkcmVz
cyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcjwz
Mj4oZGVzdCwgc3JjLmJhc2UsIFByZUluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKworICAgIHZv
aWQgbG9hZDMyKFBvc3RJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQb3N0SW5kZXgoc3Jj
LmluZGV4KSk7CisgICAgfQorCiAgICAgRGF0YUxhYmVsMzIgbG9hZDMyV2l0aEFkZHJlc3NPZmZz
ZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTczMyw3ICsxNzQ4LDE3IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0PihtZW1vcnlUZW1wUmVnaXN0ZXIsIG1lbW9yeVRl
bXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRy
ZXNzLnNjYWxlKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGFkZHJlc3MuYmFz
ZSwgbWVtb3J5VGVtcFJlZ2lzdGVyKTsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkIHN0b3JlNjQo
UmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOwor
ICAgIH0KKworICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVz
cyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QuYmFz
ZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKICAgICB2b2lkIHN0b3JlNjQoUmVn
aXN0ZXJJRCBzcmMsIGNvbnN0IHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAgICAgICBzdG9yZTw2
ND4oc3JjLCBhZGRyZXNzKTsKQEAgLTE3NzcsMTEgKzE4MDIsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHN0b3JlNjQoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CiAgICAgfQogCi0gICAgdm9pZCBz
dG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIFBvc3RJbmRleCBzaW1tKQot
ICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QsIHNpbW0pOwotICAg
IH0KLSAgICAKICAgICBEYXRhTGFiZWwzMiBzdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgRGF0YUxhYmVs
MzIgbGFiZWwodGhpcyk7CkBAIC0xODc5LDYgKzE4OTksMTYgQEAgcHVibGljOgogICAgICAgICBz
dG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAorICAgIHZvaWQgc3Rv
cmUzMihSZWdpc3RlcklEIHNyYywgUHJlSW5kZXhBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgZGVzdC5iYXNlLCBQcmVJbmRleChkZXN0LmluZGV4
KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBQb3N0SW5kZXhB
ZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgZGVz
dC5iYXNlLCBQb3N0SW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKwogICAgIERhdGFMYWJlbDMy
IHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5kZXggZjIyYmZmY2UxNTU0
YjAyYzIyNmMyMTQ5MmFiMDY3YmFiMzhjNDBiNS4uNTM0ZWZlMTQzZjc5MGI5MDk4OWJjMmNjNjNm
ZjA5YTA0NjdlNTU3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0
bWFzbS5jcHAKQEAgLTIyMTIsNiArMjIxMiwxNzYgQEAgdm9pZCB0ZXN0WG9yTm90V2l0aFVuc2ln
bmVkUmlnaHRTaGlmdDY0KCkKICAgICAgICAgfQogICAgIH0KIH0KKwordm9pZCB0ZXN0U3RvcmVQ
cmVQb3N0SW5kZXgzMigpCit7CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAg
ICBpbnRwdHJfdCBhZGRyID0gYml0d2lzZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAg
aW50MzJfdCBpbmRleCA9IHNpemVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0g
KGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgIC8vICorK3AxID0gNDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0
b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVz
cyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMs
IGFkZHIpOworICAgIH07CisKKyAgICBpbnQzMl90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQzMl90
Kj4odGVzdDEoNCkpOworICAgIENIRUNLX0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEs
IG51bXNbMV0pOworCisgICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50MzJfdCBzcmMpIHsKKyAgICAg
ICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysg
PSA1OyByZXR1cm4gcDI7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAg
ICBpbnQzMl90KiBwMiA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4odGVzdDIoNSkpOworICAgIENI
RUNLX0VRKCpwMiwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RT
dG9yZVByZVBvc3RJbmRleDY0KCkKK3sKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMyB9
OworICAgIGludHB0cl90IGFkZHIgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZudW1zWzFdKTsK
KyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0ZXN0MSA9
IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0
KTsKKworICAgICAgICAgICAgLy8gKisrcDEgPSA0OyByZXR1cm4gcDE7CisgICAgICAgICAgICBq
aXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UHJlSW5kZXhB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJl
dCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUs
IHNyYywgYWRkcik7CisgICAgfTsKKworICAgIGludDY0X3QqIHAxID0gYml0d2lzZV9jYXN0PGlu
dDY0X3QqPih0ZXN0MSg0KSk7CisgICAgQ0hFQ0tfRVEoKnAxLCA0KTsKKyAgICBDSEVDS19FUSgq
LS1wMSwgbnVtc1sxXSk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQ2NF90IHNyYykgewor
ICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Cisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAq
cDIrKyA9IDU7IHJldHVybiBwMjsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rp
b25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUsIHNyYywgYWRkcik7CisgICAgfTsK
KworICAgIGludDY0X3QqIHAyID0gYml0d2lzZV9jYXN0PGludDY0X3QqPih0ZXN0Mig1KSk7Cisg
ICAgQ0hFQ0tfRVEoKnAyLCA0KTsKKyAgICBDSEVDS19FUSgqLS1wMiwgNSk7Cit9CisKK3ZvaWQg
dGVzdExvYWRQcmVQb3N0SW5kZXgzMigpCit7CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIs
IDMgfTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDMyX3QpOworCisgICAgYXV0byB0
ZXN0MSA9IFsmXSAoaW50MzJfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBp
bGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVy
biByZXM7CisgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRy
ZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICAgICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVw
bGFjZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
aW52b2tlPGludDMyX3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworICAgIAorICAgIENIRUNL
X0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA0KTsKKworICAgIGF1dG8g
dGVzdDIgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21w
aWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyByZXR1
cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFk
ZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihy
ZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
aml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
biBpbnZva2U8aW50MzJfdD4obG9hZCwgJm51bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19F
USh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgNSk7Cit9CisKK3ZvaWQgdGVz
dExvYWRQcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMg
fTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0ZXN0
MSA9IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVybiBy
ZXM7CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRyZXNz
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwor
ICAgICAgICAgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQocmVwbGFj
ZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7
CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52
b2tlPGludDY0X3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVz
dDEoNCksIDMpOworICAgIENIRUNLX0VRKG51bXNbMl0sIDQpOworCisgICAgYXV0byB0ZXN0MiA9
IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
aml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKnAyKys7ICpwMiA9IDU7IHJldHVybiByZXM7
CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhH
UFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2Up
LCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOwor
ICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9r
ZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3Qy
KDUpLCAyKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA1KTsKK30KICNlbmRpZgogCiAjaWYgQ1BV
KFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtNDQ3NSw2ICs0NjQ1LDExIEBA
IHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9B
TkFMWVNJUwogICAgIFJVTih0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDY0KCkpOwogICAgIFJVTih0
ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhVbnNp
Z25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0U3RvcmVQcmVQb3N0SW5kZXgzMigp
KTsKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2Fk
UHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKSk7CiAj
ZW5kaWYKIAogI2lmIENQVShBUk02NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCmluZGV4IGQ1ZmMzMTY0NjU5NjhlYjczNzFiNmZmMWNjNmY4MzE3ZmVjZGU1MmUu
LjY5M2M0NGY2NWJmOWIzOTUxZTc3NGQxYzllMTVhZWVlMjEyMGUxZDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC01NDYsNyArNTQ2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBzY2Fs
ZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBvcGVyYW5kIGlu
dG8gYW4gYWRkcmVzcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFs
dWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KICAgICBBcmcgZWZmZWN0aXZlQWRkcihWYWx1ZSogYWRk
cmVzcywgSW50IG9mZnNldCwgV2lkdGggd2lkdGgpCkBAIC05MDIsNiArOTAyLDEwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgewogICAg
ICAgICAgICAgICAgIGlmIChpbW0ocmlnaHQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZChvcGNvZGUsIGltbShyaWdodCksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gaWYgKG9wY29kZSA9PSBBaXI6OkFkZDY0ICYmIG1fdXNlQ291bnRzLm51bVVzZXMo
bV92YWx1ZSkgJiYgQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShyaWdodC0+YXNJbnQoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgIGRhdGFMb2coIi0tLS0tLS0tLS0tLS0gZmluZCBw
b3N0IGNhbmRpZGF0ZSBhZGQ6ICIsIHBvaW50ZXJEdW1wKG1fdmFsdWUpLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIG1fYWRkQWRkcmVzc1RvSW5zdC5hZGQobGVmdCwgJm1faW5z
dHMubGFzdCgpLmxhc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7
CkBAIC0xMTQ2LDEyICsxMTUwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBBaXI6
Ok1vdmUzMjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFN0b3JlMzIsIEFy
Zzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0oV2lkdGgzMikpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9yZTMyLCBtX3ZhbHVlLCB6ZXJv
UmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oTW92ZTMy
LCBBcmc6Olplcm9SZWcsIGRlc3Qua2luZCgpKSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdpZHRoMzIp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoTW92ZTMyLCBtX3ZhbHVlLCB6
ZXJvUmVnKCksIGRlc3QpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBjYXNlIEFpcjo6TW92ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3Jt
KFN0b3JlNjQsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0o
V2lkdGg2NCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9yZTY0LCBt
X3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxp
ZEZvcm0oTW92ZSwgQXJnOjpaZXJvUmVnLCBkZXN0LmtpbmQoKSkgJiYgZGVzdC5pc1ZhbGlkRm9y
bShXaWR0aDY0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KE1vdmUsIG1f
dmFsdWUsIHplcm9SZWcoKSwgZGVzdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI1NTksNiArMjU2Myw2NSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBQcmUtSW5kZXggUGF0dGVybjoKKyAgICAgICAgICAgIC8v
ICAgICBhZGRyZXNzID0gYWRkKGJhc2UsIG9mZnNldCkgIAorICAgICAgICAgICAgLy8gICAgIG1l
bW9yeSA9IGxvYWQoYWRkcmVzcywgMCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kUHJlSW5k
ZXggPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2Rl
ID0gdHJ5T3Bjb2RlRm9yVHlwZShNb3ZlV2l0aEluY3JlbWVudDMyLCBNb3ZlV2l0aEluY3JlbWVu
dDY0LCBtZW1vcnktPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShv
cGNvZGUsIEFyZzo6UHJlSW5kZXgsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBtZW1vcnktPmxh
c3RDaGlsZCgpOworICAgICAgICAgICAgICAgIFZhbHVlKiBiYXNlID0gYWRkcmVzcy0+Y2hpbGQo
MCk7CisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MtPm9wY29kZSgpICE9IEFkZCB8fCAhYWRk
cmVzcy0+Y2hpbGQoMSktPmhhc0ludFB0cigpIHx8IG1lbW9yeS0+b2Zmc2V0KCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgICAgICBWYWx1
ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBl
PihvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwg
IUFpcjo6QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKHNtYWxsT2Zmc2V0KSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChtX3VzZUNvdW50cy5u
dW1Vc2VzKGFkZHJlc3MpID09IDEgfHwgbV91c2VDb3VudHMubnVtVXNlcyhiYXNlKSA+IDIpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIG1fcHJl
SW5kZXhBZGRzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBB
cmc6OnByZUluZGV4KHRtcChiYXNlKSwgc21hbGxPZmZzZXQpLCB0bXAobWVtb3J5KSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBp
ZiAodHJ5QXBwZW5kUHJlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIC8vIGF1dG8gdHJ5QXBwZW5kUG9zdEluZGV4ID0gWyZdICgpIC0+IGJvb2wgeworICAg
ICAgICAgICAgLy8gICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTW92
ZVdpdGhJbmNyZW1lbnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50eXBlKCkpOwor
ICAgICAgICAgICAgLy8gICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlBvc3RJbmRl
eCwgQXJnOjpUbXApKQorICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAvLyAgICAgaWYgKCFtX2FkZEFkZHJlc3NUb0luc3QuY29udGFpbnMobWVtb3J5LT5s
YXN0Q2hpbGQoKSkgfHwgbV91c2VDb3VudHMubnVtVXNlcyhtZW1vcnktPmxhc3RDaGlsZCgpKSA+
IDIpCisgICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAg
Ly8gICAgIEluc3QqIGluc3QgPSBtX2FkZEFkZHJlc3NUb0luc3QuZ2V0KG1lbW9yeS0+bGFzdENo
aWxkKCkpOworICAgICAgICAgICAgLy8gICAgIFZhbHVlKiBhZGRWYWx1ZSA9IGluc3QtPm9yaWdp
bjsKKworICAgICAgICAgICAgLy8gICAgIGludHB0cl90IG9mZnNldCA9IGFkZFZhbHVlLT5jaGls
ZCgxKS0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgIC8vICAgICBpZiAoc3VtT3ZlcmZsb3dzPGlu
dHB0cl90PihvZmZzZXQsIG1lbW9yeS0+b2Zmc2V0KCkpKQorICAgICAgICAgICAgLy8gICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAvLyAgICAgb2Zmc2V0ICs9IG1lbW9yeS0+b2Zm
c2V0KCk7CisgICAgICAgICAgICAvLyAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQg
PSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0KTsKKyAgICAgICAgICAgIC8v
ICAgICBpZiAoc21hbGxPZmZzZXQgIT0gb2Zmc2V0IHx8ICFBaXI6OkFyZzo6aXNWYWxpZFByZUlu
ZGV4Rm9ybShtZW1vcnktPm9mZnNldCgpKSkKKyAgICAgICAgICAgIC8vICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgLy8gICAgIG1lbW9yeS0+c2V0T2Zmc2V0KHNtYWxsT2Zmc2V0
KTsKKworICAgICAgICAgICAgLy8gICAgIGluc3QtPmtpbmQgPSBBaXI6OktpbmQocmVsYXhlZE1v
dmVGb3JUeXBlKGFkZFZhbHVlLT50eXBlKCkpKTsKKyAgICAgICAgICAgIC8vICAgICBpbnN0LT5h
cmdzLmNsZWFyKCk7CisgICAgICAgICAgICAvLyAgICAgaW5zdC0+YXBwZW5kKHRtcChhZGRWYWx1
ZS0+Y2hpbGQoMCkpLCB0bXAoYWRkVmFsdWUpKTsKKyAgICAgICAgICAgIC8vICAgICBtX2FkZEFk
ZHJlc3NUb0luc3QucmVtb3ZlKG1lbW9yeS0+bGFzdENoaWxkKCkpOworCisgICAgICAgICAgICAv
LyAgICAgYXBwZW5kKG9wY29kZSwgQXJnOjpwb3N0SW5kZXgodG1wKG1lbW9yeS0+bGFzdENoaWxk
KCkpLCBtZW1vcnktPm9mZnNldCgpKSwgdG1wKG1lbW9yeSkpOworICAgICAgICAgICAgLy8gICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgLy8gfTsKKworICAgICAgICAgICAgLy8gaWYgKHRy
eUFwcGVuZFBvc3RJbmRleCgpKQorICAgICAgICAgICAgLy8gICAgIHJldHVybjsKKwogICAgICAg
ICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBraW5kLCBtX3ZhbHVlLCBhZGRyKG1f
dmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtMjY4OCw2ICsyNzUxLDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAodHJ5QXBwZW5k
QWRkV2l0aFNoaWZ0KGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBlbmRBZGRXaXRoU2hpZnQocmlnaHQs
IGxlZnQpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICAgICAgYXV0byB0cnlB
cHBlbmRQcmVJbmRleEFkZCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBpZiAo
IW1fcHJlSW5kZXhBZGRzLmNvbnRhaW5zKG1fdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgbV9wcmVJbmRleEFkZHMucmVtb3ZlKG1fdmFs
dWUpOworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUobV92YWx1ZS0+
dHlwZSgpKSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0
cnlBcHBlbmRQcmVJbmRleEFkZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAg
ICAgICAgYXBwZW5kQmluT3A8QWRkMzIsIEFkZDY0LCBBZGREb3VibGUsIEFkZEZsb2F0LCBDb21t
dXRhdGl2ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBA
IC00MjY1LDYgKzQzMzksOSBAQCBwcml2YXRlOgogICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2Nr
KiwgQWlyOjpCYXNpY0Jsb2NrKj4gbV9ibG9ja1RvQmxvY2s7CiAgICAgSGFzaE1hcDxWYXJpYWJs
ZSosIFZlY3RvcjxUbXA+PiBtX3ZhcmlhYmxlVG9UbXBzOwogCisgICAgSW5kZXhTZXQ8VmFsdWUq
PiBtX3ByZUluZGV4QWRkczsKKyAgICAvLyBIYXNoTWFwPFZhbHVlKiwgSW5zdCo+IG1fYWRkQWRk
cmVzc1RvSW5zdDsKKwogICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBQaGlDaGlsZHJl
biBtX3BoaUNoaWxkcmVuOwogICAgIEJsb2NrV29ya2xpc3QgbV9mYXN0V29ya2xpc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAppbmRleCBlNzY4MjY0YzEzZjE2N2Vm
NTA2YmJlYTI2NjE2Njc5M2M2NzU3MzNlLi5kZjlmYWE4ODE1N2RkMmFlNDYzZjBjMGFkNWRmMjdm
OTIzYjM0OGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlW
YWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKQEAg
LTM1LDYgKzM1LDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBK
U19FWFBPUlRfUFJJVkFURSBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CisKIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKEtpbmQga2luZCkKICAgICB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKaW5kZXggMjI4MGZkNzcxMjUyZTcy
NjBmNjg1MDUwOTJmZDU0M2NmZTA2MTg1Ny4uNGY0YTI2NmJmZTk4MDA1ZDU2MGUxNTEyMWY5YzJh
MjVlMjVlZGE5YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNl
U3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcApAQCAtNDgxLDYgKzQ4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGhhbmRsZUNo
YW5nZWRDRkdJZk5lY2Vzc2FyeSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXN1bHQg
fD0gbV9jaGFuZ2VkOworCiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCAmJiBtX3Byb2Mub3B0
TGV2ZWwoKSA+PSAyKTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX3Byb2Mub3B0TGV2ZWwoKSA8
IDIpIHsKQEAgLTQ4OCw3ICs0ODksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzaW1wbGlmeUNG
RygpOwogICAgICAgICAgICAgaGFuZGxlQ2hhbmdlZENGR0lmTmVjZXNzYXJ5KCk7CiAgICAgICAg
IH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0x
OTI5LDYgKzE5MzAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0g
bV92YWx1ZS0+bGFzdENoaWxkKCk7CiAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0g
bV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CiAKKyAgICAgICAgICAgIC8vIFBvdGVudGlhbCBQ
cmUtSW5kZXggUGF0dGVybjoKKyAgICAgICAgICAgIC8vIExvYWQoQWRkKGFkZHJlc3MsIG9mZnNl
dDEpLCBvZmZzZXQgPSAwKQorICAgICAgICAgICAgYXV0byBpc1BvdGVudGlhbFByZUluZGV4ID0g
WyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSAh
PSBBZGQgfHwgIWFkZHJlc3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSB8fCBtZW1vcnktPm9mZnNl
dCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
aWYgKG1lbW9yeS0+b3Bjb2RlKCkgIT0gTG9hZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPnR5cGUoKSAhPSBJbnQzMiAmJiBt
ZW1vcnktPnR5cGUoKSAhPSBJbnQ2NCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKworICAgICAg
ICAgICAgaWYgKGlzUG90ZW50aWFsUHJlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KwogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBMb2FkKEFkZChhZGRyZXNzLCBvZmZzZXQxKSwg
b2Zmc2V0ID0gb2Zmc2V0MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogTG9hZChhZGRyZXNz
LCBvZmZzZXQgPSBvZmZzZXQxICsgb2Zmc2V0MikKICAgICAgICAgICAgIC8vCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKaW5kZXggMTAzYzZlY2NhM2QzMTRiYjRlZDhjMDJh
NGQyZjAwOWNhNjQxZDAwMS4uNzdlZTg0MjUxMjRiOWQ4YjhjNTgyZjM5ZmY5NjlmNjBmZDE2Y2Mw
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcApAQCAtMTMwLDYgKzEz
MCwxMSBAQCB1bnNpZ25lZCBBcmc6OmpzSGFzaCgpIGNvbnN0CiAgICAgICAgIHJlc3VsdCArPSBt
X2Jhc2UuaW50ZXJuYWxWYWx1ZSgpOwogICAgICAgICByZXN1bHQgKz0gbV9pbmRleC5pbnRlcm5h
bFZhbHVlKCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJlSW5kZXg6CisgICAgY2FzZSBQ
b3N0SW5kZXg6CisgICAgICAgIHJlc3VsdCArPSBtX29mZnNldDsKKyAgICAgICAgcmVzdWx0ICs9
IG1fYmFzZS5pbnRlcm5hbFZhbHVlKCk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhY2s6
CiAgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zY2FsZSk7CiAgICAg
ICAgIHJlc3VsdCArPSBzdGFja1Nsb3QoKS0+aW5kZXgoKTsKQEAgLTE2MSw3ICsxNjYsNyBAQCB2
b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnRm
KCIkMHglbGx4Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIHVuc2lnbmVkPihtX29mZnNldCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBaZXJvUmVnOgotICAgICAgICBvdXQucHJpbnQoIiUl
eHpyIik7CisgICAgICAgIG91dC5wcmludCgiJXh6ciIpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBTaW1wbGVBZGRyOgogICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIpIik7CkBA
IC0xODAsNiArMTg1LDEyIEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiAgICAgICAgICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgpKTsKICAgICAgICAgb3V0LnByaW50
KCIpIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBvdXQu
cHJpbnQoIigiLCBiYXNlKCksICIsUHJlKCQiLCBvZmZzZXQoKSwgIikpIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgp
LCAiLFBvc3QoJCIsIG9mZnNldCgpLCAiKSkiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
U3RhY2s6CiAgICAgICAgIGlmIChvZmZzZXQoKSkKICAgICAgICAgICAgIG91dC5wcmludChvZmZz
ZXQoKSk7CkBAIC0yNjEsNiArMjcyLDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBBcmc6OktpbmQga2luZCkKICAgICBjYXNlIEFyZzo6SW5kZXg6CiAgICAgICAgIG91
dC5wcmludCgiSW5kZXgiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpQcmVJbmRl
eDoKKyAgICAgICAgb3V0LnByaW50KCJQcmVJbmRleCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBcmc6OlBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQb3N0SW5kZXgiKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpSZWxDb25kOgogICAgICAgICBvdXQucHJpbnQo
IlJlbENvbmQiKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmgKaW5kZXggY2U1YTRlNzM3OWFkNjQ0NDVmMGMzYWJkMTI5ZjMyOWI5NDdmZTgxMi4uZWEy
MjYyOGFlMTJlMTFmZWI0NWRmNjdhY2YzZGE4ZDY4NjBiNGZkOSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5oCkBAIC0xLDMgKzEsNCBAQAorCiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTc3LDYg
Kzc4LDggQEAgcHVibGljOgogICAgICAgICBTdGFjaywKICAgICAgICAgQ2FsbEFyZywKICAgICAg
ICAgSW5kZXgsCisgICAgICAgIFByZUluZGV4LAorICAgICAgICBQb3N0SW5kZXgsCiAKICAgICAg
ICAgLy8gSW1tZWRpYXRlIG9wZXJhbmRzIHRoYXQgY3VzdG9taXplIHRoZSBiZWhhdmlvciBvZiBh
biBvcGVyYXRpb24uIFlvdSBjYW4gdGhpbmsgb2YgdGhlbSBhcwogICAgICAgICAvLyBzZWNvbmRh
cnkgb3Bjb2Rlcy4gVGhleSBhcmUgYWx3YXlzICJVc2UiJ2QuCkBAIC02NDksNiArNjUyLDMwIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEFyZzo6aW5kZXgoYmFzZSwgaW5kZXgsIHNjYWxlLCAw
KTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6
OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgQXJnIHByZUluZGV4KEFpcjo6VG1wIGJh
c2UsIEludCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAg
ICAgIEFTU0VSVChpc0ludDkoaW5kZXgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fa2luZCA9IFByZUluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsK
KyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJ
c0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIEFyZyBwb3N0SW5kZXgoQWlyOjpUbXAgYmFz
ZSwgSW50IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAg
ICAgQVNTRVJUKGlzSW50OShpbmRleCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9raW5kID0gUG9zdEluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsK
KyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCiAgICAgc3RhdGljIEFyZyByZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIEFyZyByZXN1bHQ7CkBAIC03
OTksNiArODI2LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsK
ICAgICB9CiAKKyAgICBib29sIGlzUHJlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGtpbmQoKSA9PSBQcmVJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUG9zdEluZGV4KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUG9zdEluZGV4OworICAgIH0K
KwogICAgIGJvb2wgaXNNZW1vcnkoKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5k
KCkpIHsKQEAgLTgwOCw2ICs4NDUsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAg
ICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQ
cmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk3Miw3
ICsxMDExLDcgQEAgcHVibGljOgogCiAgICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0CiAgICAgewot
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwg
a2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwga2luZCgp
ID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXggfHwga2luZCgpID09IFBy
ZUluZGV4IHx8IGtpbmQoKSA9PSBQb3N0SW5kZXgpOwogICAgICAgICByZXR1cm4gbV9iYXNlOwog
ICAgIH0KIApAQCAtOTgyLDcgKzEwMjEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAo
a2luZCgpID09IFN0YWNrKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlOjpP
ZmZzZXRUeXBlPihtX3NjYWxlKTsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtp
bmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgp
ID09IEluZGV4KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBF
eHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4
IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8fCBraW5kKCkgPT0gUG9zdEluZGV4KTsKICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCk7CiAgICAgfQog
CkBAIC0xMDQ0LDYgKzEwODMsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAg
ICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAg
IGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICBjYXNlIFN0
YWNrOgogICAgICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKQEAgLTEw
ODEsNiArMTEyMiw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNl
IEV4dGVuZGVkT2Zmc2V0QWRkcjoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQ
cmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAg
ICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBCaWdJbW06IC8vIFllcywgd2UgYWxs
b3cgQmlnSW1tIGFzIGEgZG91YmxlIGltbWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVu
dGluZyBzdGFja21hcHMuCkBAIC0xMjM3LDYgKzEyODAsMjIgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFt
ZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFBy
ZUluZGV4Rm9ybShJbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBpc1ZhbGlkU2lnbmVkSW1tOShvZmZzZXQpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9
IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFBvc3RJ
bmRleEZvcm0oSW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAg
ICAgICAgICByZXR1cm4gaXNWYWxpZFNpZ25lZEltbTkob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKwogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgd2lkdGggdGhlbiB0
aGlzIG9wdGltaXN0aWNhbGx5IGFzc3VtZXMgdGhhdCB5b3UncmUgdXNpbmcgdGhlIHJpZ2h0IHdp
ZHRoLiBCdXQKICAgICAvLyB0aGUgd2lkdGggaXMgcmVsZXZhbnQgdG8gdmFsaWRpdHksIHNvIHBh
c3NpbmcgYSBudWxsIHdpZHRoIGlzIG9ubHkgdXNlZnVsIGZvciBhc3NlcnRpb25zLiBEb24ndAog
ICAgIC8vIHBhc3MgbnVsbCB3aWR0aHMgd2hlbiBjYXNjYWRpbmcgdGhyb3VnaCBBcmdzIGluIHRo
ZSBpbnN0cnVjdGlvbiBzZWxlY3RvciEKQEAgLTEyNjUsNiArMTMyNCwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gaXNWYWxpZEFkZHJGb3JtKG9mZnNldCgpLCB3aWR0aCk7CiAgICAg
ICAgIGNhc2UgSW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEluZGV4Rm9ybShzY2Fs
ZSgpLCBvZmZzZXQoKSwgd2lkdGgpOworICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICAg
ICAgcmV0dXJuIGlzVmFsaWRQcmVJbmRleEZvcm0ob2Zmc2V0KCkpOworICAgICAgICBjYXNlIFBv
c3RJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkUG9zdEluZGV4Rm9ybShvZmZzZXQo
KSk7CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAg
ICBjYXNlIERvdWJsZUNvbmQ6CkBAIC0xMjg0LDYgKzEzNDcsOCBAQCBwdWJsaWM6CiAgICAgICAg
IGNhc2UgU2ltcGxlQWRkcjoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVu
ZGVkT2Zmc2V0QWRkcjoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0
SW5kZXg6CiAgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBJbmRleDoKQEAgLTEzMjYsNiArMTM5MSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgY2FzZSBTaW1wbGVBZGRyOgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0
ZW5kZWRPZmZzZXRBZGRyOgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBv
c3RJbmRleDoKICAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQLCBhcmdSb2xlID09
IFVzZUFkZHIgPyBhcmdXaWR0aCA6IHBvaW50ZXJXaWR0aCgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEluZGV4OgpAQCAtMTM4Myw2ICsxNDUwLDE4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCksIG1fZXh0
ZW5kKTsKICAgICB9CiAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzIGFzUHJl
SW5kZXhBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ByZUluZGV4KCkp
OworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzcyhtX2Jhc2Uu
Z3ByKCksIG9mZnNldCgpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4
QWRkcmVzcyBhc1Bvc3RJbmRleEFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzUG9zdEluZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRl
eEFkZHJlc3MobV9iYXNlLmdwcigpLCBvZmZzZXQoKSk7CisgICAgfQorCiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwCmluZGV4IDkwNWU2MTdmYmRl
MGUyYjdkNzU1NTYzZTY4ODU4OWJkYWQ3MjZjODAuLjZhZDA1ODQyNjdiOGM3ZWU3MTQ5YjAyZjgy
MzE1NzJiZWU4Y2Y4YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG93ZXJTdGFja0FyZ3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG93ZXJTdGFja0FyZ3MuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBsb3dlclN0YWNr
QXJncyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHdpZHRoID09IFdpZHRoMzIpOwogCiAjaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlID0gU3RvcmUzMjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBzdG9yZU9wY29kZSA9IE1vdmUzMjsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBaXI6OkFyZzo6S2luZCBvcGVyYW5kS2luZCA9IEFy
Zzo6WmVyb1JlZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBaXI6OkFyZyBvcGVyYW5k
ID0gQXJnOjp6ZXJvUmVnKCk7CiAjZWxpZiBDUFUoWDg2XzY0KQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXggNjYxZWFkZDIzNzNjNTRhNGJi
YTk0N2E1NGJkYTI1NTdiZGI4YWU0YS4uYWZkY2ZmMTYyYjU0YWFhYjE3NzdmN2FhNDI0YWFiNTgw
OWYzN2U1YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNv
ZGUub3Bjb2RlcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5v
cGNvZGVzCkBAIC02NDcsNiArNjQ3LDkgQEAgTW92ZSBVOkc6UHRyLCBEOkc6UHRyCiAgICAgSW5k
ZXgsIFRtcCBhcyBsb2FkUHRyCiAgICAgVG1wLCBBZGRyIGFzIHN0b3JlUHRyCiAgICAgVG1wLCBJ
bmRleCBhcyBzdG9yZVB0cgorICAgIGFybTY0OiBaZXJvUmVnLCBBZGRyIGFzIHN0b3JlNjQKKyAg
ICBhcm02NDogWmVyb1JlZywgSW5kZXggYXMgc3RvcmU2NAorCiAgICAgeDg2OiBJbW0sIEFkZHIg
YXMgc3RvcmVQdHIKIAogIyBUaGlzIGlzIGZvciBtb3ZpbmcgYmV0d2VlbiBzcGlsbCBzbG90cy4K
QEAgLTY2MSwyOCArNjY0LDM0IEBAIHg4Nl82NDogU3dhcDY0IFVEOkc6NjQsIFVEOkc6NjQKICAg
ICBUbXAsIFRtcAogICAgIFRtcCwgQWRkcgogCithcm02NDogTW92ZVdpdGhJbmNyZW1lbnQ2NCBV
Okc6NjQsIFVEOkc6NjQKKyAgICBQcmVJbmRleCwgVG1wIGFzIGxvYWQ2NAorICAgIFBvc3RJbmRl
eCwgVG1wIGFzIGxvYWQ2NAorICAgIFRtcCwgUHJlSW5kZXggYXMgc3RvcmU2NAorICAgIFRtcCwg
UG9zdEluZGV4IGFzIHN0b3JlNjQKKwogTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwg
VG1wIGFzIHplcm9FeHRlbmQzMlRvV29yZAogICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKICAgICBJ
bmRleCwgVG1wIGFzIGxvYWQzMgogICAgIFRtcCwgQWRkciBhcyBzdG9yZTMyCiAgICAgVG1wLCBJ
bmRleCBhcyBzdG9yZTMyCisgICAgYXJtNjQ6IFplcm9SZWcsIEFkZHIgYXMgc3RvcmUzMgorICAg
IGFybTY0OiBaZXJvUmVnLCBJbmRleCBhcyBzdG9yZTMyCiAgICAgeDg2OiBJbW0sIFRtcCBhcyB6
ZXJvRXh0ZW5kMzJUb1dvcmQKICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZTMyCiAgICAgeDg2
OiBJbW0sIEluZGV4IGFzIHN0b3JlMzIKIAorYXJtNjQ6IE1vdmVXaXRoSW5jcmVtZW50MzIgVTpH
OjMyLCBVWkQ6RzozMgorICAgIFByZUluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgUG9zdEluZGV4
LCBUbXAgYXMgbG9hZDMyCisgICAgVG1wLCBQcmVJbmRleCBhcyBzdG9yZTMyCisgICAgVG1wLCBQ
b3N0SW5kZXggYXMgc3RvcmUzMgorCiAjIFRoaXMgaXMgZm9yIG1vdmluZyBiZXR3ZWVuIHNwaWxs
IHNsb3RzLgogTW92ZTMyIFU6RzozMiwgWkQ6RzozMiwgUzpHOjMyCiAgICAgQWRkciwgQWRkciwg
VG1wCiAKLWFybTY0OiBTdG9yZTMyIFU6RzozMiwgWkQ6RzozMgotICAgIFplcm9SZWcsIEFkZHIK
LSAgICBaZXJvUmVnLCBJbmRleAotCi1hcm02NDogU3RvcmU2NCBVOkc6NjQsIEQ6Rzo2NAotICAg
IFplcm9SZWcsIEFkZHIKLSAgICBaZXJvUmVnLCBJbmRleAotCiBTaWduRXh0ZW5kMzJUb1B0ciBV
Okc6MzIsIEQ6RzpQdHIKICAgICBUbXAsIFRtcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKaW5kZXggMzc0MGVmZGJkZDE0NmEzN2Y2ZWRl
OWRkYmMyM2RkYmEwM2IwNzY0Ni4uZjFiZjFhNDZjZmM4ODllYzE5MzQ2ZjJjMDZiN2NmNTBmOWUz
ZGUwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2Vu
ZXJhdG9yLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVy
YXRvci5yYgpAQCAtMjI5LDcgKzIyOSw3IEBAIGRlZiBpc0dGKHRva2VuKQogZW5kCiAKIGRlZiBp
c0tpbmQodG9rZW4pCi0gICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJbW0pfChCaXRJ
bW0pfChCaXRJbW02NCl8KFplcm9SZWcpfChTaW1wbGVBZGRyKXwoQWRkcil8KEV4dGVuZGVkT2Zm
c2V0QWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25kKXwoU3RhdHVz
Q29uZCkpXFovCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJbW0pfChCaXRJbW0p
fChCaXRJbW02NCl8KFplcm9SZWcpfChTaW1wbGVBZGRyKXwoQWRkcil8KEV4dGVuZGVkT2Zmc2V0
QWRkcil8KEluZGV4KXwoUHJlSW5kZXgpfChQb3N0SW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8
KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KIGVuZAogCiBkZWYgaXNBcmNoKHRva2VuKQpA
QCAtMzAzLDcgKzMwMyw3IEBAIGNsYXNzIFBhcnNlcgogCiAgICAgZGVmIGNvbnN1bWVLaW5kCiAg
ICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwotICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3Rl
ZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgWmVyb1JlZywgVG1wLCBTaW1w
bGVBZGRyLCBBZGRyLCBFeHRlbmRlZE9mZnNldEFkZHIsIEluZGV4LCBSZWxDb25kLCBSZXNDb25k
LCBEb3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAg
ICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJ
bW02NCwgWmVyb1JlZywgVG1wLCBTaW1wbGVBZGRyLCBBZGRyLCBFeHRlbmRlZE9mZnNldEFkZHIs
IEluZGV4LCBQcmVJbmRleCwgUG9zdEluZGV4LCBSZWxDb25kLCBSZXNDb25kLCBEb3VibGVDb25k
LCBvciBTdGF0dXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQogICAgICAgICBhZHZhbmNl
CiAgICAgICAgIHJlc3VsdAogICAgIGVuZApAQCAtOTI5LDYgKzkyOSwxMiBAQCB3cml0ZUgoIk9w
Y29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKICAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZEluZGV4Rm9ybShhcmdzWyN7
aW5kZXh9XS5zY2FsZSgpLCBhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSwgI3thcmcud2lkdGhDb2Rl
fSkpIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7
IgorICAgICAgICAgICAgICAgIHdoZW4gIlByZUluZGV4IgorICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLm9m
ZnNldCgpKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZh
bHNlKTsiCisgICAgICAgICAgICAgICAgd2hlbiAiUG9zdEluZGV4IgorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShhcmdzWyN7aW5k
ZXh9XS5vZmZzZXQoKSkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JF
VFVSTihmYWxzZSk7IgogICAgICAgICAgICAgICAgIHdoZW4gIkJpZ0ltbSIKICAgICAgICAgICAg
ICAgICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCkBAIC0x
MjM1LDYgKzEyNDEsMTAgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAg
ICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgogICAgICAg
ICAgICAgICAgIHdoZW4gIkluZGV4IgogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJh
cmdzWyN7aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlByZUlu
ZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1By
ZUluZGV4QWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIlBvc3RJbmRleCIKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNQb3N0SW5kZXhBZGRy
ZXNzKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29uZCIKICAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkiCiAg
ICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApp
bmRleCBjNzAzMmVjMDg0ZGRmZGQ5MzVlNTUyN2ZhYWU5MzU2ODE5ODQ4MTc5Li5iMjJkODQ2MWNm
MWIxM2NmODVkMTY2YTcyYWZkYmEyNDljMjhkNTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5oCkBAIC0xMTQwLDQgKzExNDAsOSBAQCB2b2lkIGFkZENvcHlUZXN0cyhjb25zdCBjaGFyKiBm
aWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYpOwogCiBib29sIHNob3Vs
ZFJ1bihjb25zdCBjaGFyKiBmaWx0ZXIsIGNvbnN0IGNoYXIqIHRlc3ROYW1lKTsKIAordm9pZCB0
ZXN0TG9hZFByZUluZGV4MzIoKTsKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCk7Cit2b2lkIHRl
c3RMb2FkUG9zdEluZGV4KCk7Cit2b2lkIHRlc3RJZmh5aigpOworCiAjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCmluZGV4IDRjNTJhZGE5
Y2M0MDJkZGU1Mzk4OGNjOGYyZjVlOWUwZGRlMmUxMWMuLmJhZmE2MGNkMTA1Njg3M2ZiZmUxZGYy
NjNjMGExMGE1NGZmMmEzNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjNfMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcApA
QCAtMjgsNiArMjgsMjcxIEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisKK3ZvaWQgdGVzdElm
aHlqKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIHRoZW5CbG9jayA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisg
ICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHkgPSBhZGRyMCArIDEKKyAgICAv
LyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjMpCisgICAgLy8gaWYgeSAhPSBhZGRyMSBn
b3RvIGRvbmUKKyAgICBWYWx1ZSogeSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
IHByb2MsIEFkZCwgT3JpZ2luKCksIAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksIAorICAgICAg
ICByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCkpOworICAg
IFZhbHVlKiByMSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigp
LCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwg
T3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogY29uZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgTm90RXF1YWwsIE9yaWdpbigpLCB5LCByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBG
cmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayh0aGVuQmxvY2spKTsKKworICAg
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhlbl9CbG9jaworICAgIC8vIHogPSBMb2FkKHks
IDApCisgICAgLy8gcjIgPSB5ICsgegorICAgIC8vIFVwc2lsb24ocjIsIF5yMykKKyAgICBNZW1v
cnlWYWx1ZSogeiA9IHRoZW5CbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2Fk
LCBJbnQ2NCwgT3JpZ2luKCksIHkpOworICAgIFZhbHVlKiByMiA9IHRoZW5CbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCB5LCB6KTsKKyAgICB0aGVuQmxvY2stPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjIpOwor
ICAgIHRoZW5CbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigp
LCBGcmVxdWVudGVkQmxvY2soZG9uZSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBEb25lX0Jsb2NrCisgICAgLy8gcjMgPSBQaGkoKQorICAgIC8vIHJldHVybiByMworICAgIFZh
bHVlKiByMyA9IGRvbmUtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBP
cmlnaW4oKSwgcik7CisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVy
biwgT3JpZ2luKCksIHIzKTsKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2
YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBjb21waWxlQW5kUnVuPGlu
dDY0X3Q+KHByb2MsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oMEwpLCBiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KDBMKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCkKK3sKKyAgICBpZiAo
T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAg
IGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAg
IGludDMyX3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0g
cHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJp
YWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50MzIpOworICAgIFZhcmlhYmxlKiBwID0gcHJv
Yy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJv
b3RfQmxvY2sKKyAgICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpICAgICAgICAg
ICAgIAorICAgIC8vIHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1
ZSogcjEgPSByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50MzIsIDAp
OworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmln
aW4oKSwgciwgcjEpOworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAx
KTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCks
IEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBMb29wX1Rlc3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAg
ICAvLyByMiA9IFBoaSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUq
IHIyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBP
cmlnaW4oKSwgcik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBs
b29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIs
IGxvb3BUZXN0LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsK
KyAgICBsb29wVGVzdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2lu
KCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5
KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAg
IC8vIHAzID0gcDIgKyAxCisgICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAgIC8vIHIzID0gcjIg
KyBsb2FkKHAzKQorICAgIC8vIFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBnb3RvIGxvb3AKKyAg
ICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdp
bigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigp
LCA0KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6
U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHAzKSk7CisgICAgbG9vcEJv
ZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwg
cjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3Jp
Z2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBEb25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAg
ICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIp
OyAgCisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7
CisgICAgZml4U1NBKHByb2MpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUs
ICIjNF0hIik7CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50MzJfdCB7CisgICAgICAg
IGludDMyX3QgciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9
ICorK3B0cjsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGludm9r
ZTxpbnQzMl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsK
K30KKwordm9pZCB0ZXN0TG9hZFByZUluZGV4NjQoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZh
dWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50NjRfdCBudW1z
W10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50NjRfdCogcHRy
ID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBw
cm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJv
Yy5hZGRWYXJpYWJsZShJbnQ2NCk7CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxl
KEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAg
IC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikgICAgICAgICAgICAgCisgICAgLy8g
cDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3Qt
PmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQ2NCwgMCk7CisgICAgcm9vdC0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7
CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJs
b2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVz
dF9CbG9jaworICAgIC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhp
KCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVz
dC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsK
KyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2Ms
IEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJl
cXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcDMgPSBwMiAr
IDEKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gcjMgPSByMiArIGxvYWQocDMpCisg
ICAgLy8gVXBzaWxvbihyMywgXnIyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiBwMyA9
IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBsb29w
Qm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDgpKTsKKyAgICBs
b29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigp
LCBwLCBwMyk7CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHBy
b2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwgcDMpKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3
PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMyk7CisgICAgbG9v
cEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVl
bnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERv
bmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7ICAgCisKKyAgICBw
cm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NB
KHByb2MpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgaWYgKGlz
QVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICIjOF0hIik7CisK
KyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50NjRfdCB7CisgICAgICAgIGludDY0X3QgciA9
IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9ICorK3B0cjsKKyAg
ICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGludm9rZTxpbnQ2NF90Pigq
Y29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKwordm9pZCB0
ZXN0TG9hZFBvc3RJbmRleCgpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVs
KCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwg
MywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQ2NF90KiBwdHIgPSBudW1zOworCisg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25l
ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxl
KEludDY0KTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisg
ICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisg
ICAgLy8gVXBzaWxvbihyMSwgXnIyKSAgICAgICAgICAgICAKKyAgICAvLyBwMSA9IGFkZHIKKyAg
ICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29u
c3RhbnQocHJvYywgT3JpZ2luKCksIEludDY0LCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSog
cDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3Qp
KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAg
Ly8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlm
IHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBw
MiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3Jp
Z2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0
NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2so
ZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMikKKyAg
ICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBVcHNpbG9u
KHAzLCBecDIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwgcDIpKTsKKyAgICBW
YWx1ZSogcDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigp
LCBwMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4
KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0
LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBsb29wQm9keS0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9v
cFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAg
IC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsgCisKKyAgICBwcm9jLnJlc2V0UmVhY2hh
YmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NBKHByb2MpOworCisgICAg
YXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDY0X3QgeworICAgICAgICBpbnQ2NF90IHIgPSAwOwor
ICAgICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqcHRyKys7CisgICAgICAg
IHJldHVybiByOworICAgIH07CisKKyAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+
KHByb2MsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKKwogdm9p
ZCB0ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm8zMigpCiB7CiAgICAgaWYgKEpTQzo6T3B0
aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCkBAIC0zNjk3LDYgKzM5NjIsMTEgQEAgdm9p
ZCBhZGRTaHJUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoKT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwg
MCkpOwogICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDEpKTsKICAgICBSVU4o
dGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCA2MykpOworCisgICAgUlVOKHRlc3RMb2FkUHJl
SW5kZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRQcmVJbmRleDY0KCkpOworICAgIFJVTih0ZXN0
TG9hZFBvc3RJbmRleCgpKTsKKyAgICBSVU4odGVzdElmaHlqKCkpOwogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuY3BwCmluZGV4IDYzZTI2Njc4ODUyMDE4YTc2ODBjYTVmMDcxNDY5NjgxMDU4
ODRiM2IuLjY5YmI2YjJiZTgxODcwYjU5ODMzMzY3YWYyNjc1YjdmNGVmMDU2ZjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcApAQCAt
MjMzLDggKzIzMyw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gaml0V3JpdGVUaHVua0dlbmVyYXRvCiAgICAgaml0LnJldCgpOwog
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMCA9IGppdC5sYWJlbCgpOwotICAgIGpp
dC5sb2FkNjQoeDEsIFBvc3RJbmRleCg4KSwgeDYpOwotICAgIGppdC5zdG9yZTY0KHg2LCB4Mywg
UG9zdEluZGV4KDgpKTsKKyAgICBqaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhB
ZGRyZXNzKHgxLCA4KSwgeDYpOworICAgIGppdC5zdG9yZTY0KHg2LCBNYWNyb0Fzc2VtYmxlcjo6
UG9zdEluZGV4QWRkcmVzcyh4MywgOCkpOwogICAgIHNtYWxsQ29weS5saW5rKCZqaXQpOwogICAg
IGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBUcnVzdGVkSW1t
MzIoOCksIHgyKS5saW5rVG8obG9jYWwwLCAmaml0KTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBsb2NhbDIgPSBqaXQuYnJhbmNoQWRkNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVzdGVk
SW1tMzIoOCksIHgyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434181</attachid>
            <date>2021-07-25 12:32:59 -0700</date>
            <delta_ts>2021-07-25 13:14:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210725143258.patch</filename>
            <type>text/plain</type>
            <size>45544</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YzJiYTQ4MGQzMzQ0YTVkM2UyNTFiYzUyOGVhMWQ1NDk5YTk0NDQ0Li5mOWFjZjVmOTg1MjIwOWMy
YjI2ODVhMTBkZGQzYTI2ODNhMGM3NmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAyMS0wNy0yNCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0ZXN0T2JqZWN0aXZlQ0FQSU1haW4p
OgorICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAoYmxvY2tTaWduYXR1cmVD
b250YWluc0NsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKHRocmVhZE1haW4pOiBEZWxldGVkLgor
ICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzczo6UHJlSW5kZXhBZGRy
ZXNzKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRk
cmVzczo6UG9zdEluZGV4QWRkcmVzcyk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDMyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RvcmU2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNNjQ6OnN0b3JlMzIpOgorICAgICAgICAqIGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6
CisgICAgICAgIChKU0M6OnRlc3RTdG9yZVByZVBvc3RJbmRleDMyKToKKyAgICAgICAgKEpTQzo6
dGVzdFN0b3JlUHJlUG9zdEluZGV4NjQpOgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQcmVQb3N0SW5kZXg2NCk6CisgICAgICAg
ICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVlLmg6Cisg
ICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckFy
Zy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6anNIYXNoIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdURjo6cHJpbnRJ
bnRlcm5hbCk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OnByZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwb3N0SW5k
ZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUHJlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUG9zdEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc01lbW9yeSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6YmFzZSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b2Zmc2V0IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1ZhbGlkUG9zdEluZGV4Rm9ybSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxp
ZEZvcm0gY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjphc1ByZUluZGV4QWRkcmVzcyBjb25zdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6YXNQb3N0SW5kZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKiBiMy9h
aXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb3dlclN0
YWNrQXJncyk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAq
IGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgorICAg
ICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RJZmh5aik6CisgICAgICAgICh0
ZXN0TG9hZFByZUluZGV4MzIpOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDY0KToKKyAgICAg
ICAgKHRlc3RMb2FkUG9zdEluZGV4KToKKyAgICAgICAgKGFkZFNoclRlc3RzKToKKyAgICAgICAg
KiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OmppdFdyaXRlVGh1
bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTIxICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIHNwZWN1bGF0ZU5laXRoZXJEb3VibGVOb3JTdHJpbmdOb3JI
ZWFwQmlnSW50IHNob3VsZCBvbmx5IGhhdmUgYSBzaW5nbGUgSlNUeXBlIGJyYW5jaApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAppbmRleCAzZDE5NDlhNDA3ODVkOTljYTYxNTk1YWFiMDRiZTZmMWQwZDk2YmEzLi4y
MzU0YzQ1MzY4YzdjMGQ1Y2U5MDE4YWNmZjI4NGM0YTBhMDQzMWE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIu
aApAQCAtMjQ1LDYgKzI0NSwzNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9OwogCisgICAg
Ly8gUHJlSW5kZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mg
d2l0aCBiYXNlIGFkZHJlc3MgYW5kIHByZS1pbmNyZW1lbnQvZGVjcmVtZW50IGluZGV4LgorICAg
IHN0cnVjdCBQcmVJbmRleEFkZHJlc3MgeworICAgICAgICBQcmVJbmRleEFkZHJlc3MoUmVnaXN0
ZXJJRCBiYXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFzZSkKKyAgICAgICAg
ICAgICwgaW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lz
dGVySUQgYmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKKyAgICAvLyBQb3N0SW5k
ZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mgd2l0aCBiYXNl
IGFkZHJlc3MgYW5kIHBvc3QtaW5jcmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3Qg
UG9zdEluZGV4QWRkcmVzcyB7CisgICAgICAgIFBvc3RJbmRleEFkZHJlc3MoUmVnaXN0ZXJJRCBi
YXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFzZSkKKyAgICAgICAgICAgICwg
aW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQg
YmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKICAgICAvLyBBYnNvbHV0ZUFkZHJl
c3M6CiAgICAgLy8KICAgICAvLyBEZXNjcmliZXMgYW4gbWVtb3J5IG9wZXJhbmQgZ2l2ZW4gYnkg
YSBwb2ludGVyLiAgRm9yIHJlZ3VsYXIgbG9hZCAmIHN0b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCmluZGV4IGZlMzBk
OWM4NGQzNTI3ZWViMTZmY2QwNmUxMTVmYzY4ZDY5MDkwZmQuLjJhOTEyZDBkZDI2NjI2YmQ3NGUx
MDNiZWY5NjVmMmJhZGZjZTBiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0xNDQ1LDkgKzE0NDUsMTQgQEAg
cHVibGljOgogICAgICAgICBsb2FkPDY0PihhZGRyZXNzLCBkZXN0KTsKICAgICB9CiAKLSAgICB2
b2lkIGxvYWQ2NChSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4IHNpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB2b2lkIGxvYWQ2NChQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3QsIHNyYywgc2ltbSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLmJhc2UsIFByZUluZGV4KHNyYy5p
bmRleCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZDY0KFBvc3RJbmRleEFkZHJlc3Mgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3Qs
IHNyYy5iYXNlLCBQb3N0SW5kZXgoc3JjLmluZGV4KSk7CiAgICAgfQogCiAgICAgRGF0YUxhYmVs
MzIgbG9hZDY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgZGVzdCkKQEAgLTE1NDQsNiArMTU0OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWQ8MzI+
KGFkZHJlc3MsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbG9hZDMyKFByZUluZGV4QWRkcmVz
cyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcjwz
Mj4oZGVzdCwgc3JjLmJhc2UsIFByZUluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKworICAgIHZv
aWQgbG9hZDMyKFBvc3RJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQb3N0SW5kZXgoc3Jj
LmluZGV4KSk7CisgICAgfQorCiAgICAgRGF0YUxhYmVsMzIgbG9hZDMyV2l0aEFkZHJlc3NPZmZz
ZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTczMyw3ICsxNzQ4LDE3IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0PihtZW1vcnlUZW1wUmVnaXN0ZXIsIG1lbW9yeVRl
bXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRy
ZXNzLnNjYWxlKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGFkZHJlc3MuYmFz
ZSwgbWVtb3J5VGVtcFJlZ2lzdGVyKTsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkIHN0b3JlNjQo
UmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOwor
ICAgIH0KKworICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVz
cyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QuYmFz
ZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKICAgICB2b2lkIHN0b3JlNjQoUmVn
aXN0ZXJJRCBzcmMsIGNvbnN0IHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAgICAgICBzdG9yZTw2
ND4oc3JjLCBhZGRyZXNzKTsKQEAgLTE3NzcsMTEgKzE4MDIsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHN0b3JlNjQoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CiAgICAgfQogCi0gICAgdm9pZCBz
dG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIFBvc3RJbmRleCBzaW1tKQot
ICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QsIHNpbW0pOwotICAg
IH0KLSAgICAKICAgICBEYXRhTGFiZWwzMiBzdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgRGF0YUxhYmVs
MzIgbGFiZWwodGhpcyk7CkBAIC0xODc5LDYgKzE4OTksMTYgQEAgcHVibGljOgogICAgICAgICBz
dG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAorICAgIHZvaWQgc3Rv
cmUzMihSZWdpc3RlcklEIHNyYywgUHJlSW5kZXhBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgZGVzdC5iYXNlLCBQcmVJbmRleChkZXN0LmluZGV4
KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBQb3N0SW5kZXhB
ZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgZGVz
dC5iYXNlLCBQb3N0SW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKwogICAgIERhdGFMYWJlbDMy
IHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5kZXggZjIyYmZmY2UxNTU0
YjAyYzIyNmMyMTQ5MmFiMDY3YmFiMzhjNDBiNS4uNTM0ZWZlMTQzZjc5MGI5MDk4OWJjMmNjNjNm
ZjA5YTA0NjdlNTU3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0
bWFzbS5jcHAKQEAgLTIyMTIsNiArMjIxMiwxNzYgQEAgdm9pZCB0ZXN0WG9yTm90V2l0aFVuc2ln
bmVkUmlnaHRTaGlmdDY0KCkKICAgICAgICAgfQogICAgIH0KIH0KKwordm9pZCB0ZXN0U3RvcmVQ
cmVQb3N0SW5kZXgzMigpCit7CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAg
ICBpbnRwdHJfdCBhZGRyID0gYml0d2lzZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAg
aW50MzJfdCBpbmRleCA9IHNpemVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0g
KGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgIC8vICorK3AxID0gNDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0
b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVz
cyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMs
IGFkZHIpOworICAgIH07CisKKyAgICBpbnQzMl90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQzMl90
Kj4odGVzdDEoNCkpOworICAgIENIRUNLX0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEs
IG51bXNbMV0pOworCisgICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50MzJfdCBzcmMpIHsKKyAgICAg
ICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysg
PSA1OyByZXR1cm4gcDI7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAg
ICBpbnQzMl90KiBwMiA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4odGVzdDIoNSkpOworICAgIENI
RUNLX0VRKCpwMiwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RT
dG9yZVByZVBvc3RJbmRleDY0KCkKK3sKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMyB9
OworICAgIGludHB0cl90IGFkZHIgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZudW1zWzFdKTsK
KyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0ZXN0MSA9
IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0
KTsKKworICAgICAgICAgICAgLy8gKisrcDEgPSA0OyByZXR1cm4gcDE7CisgICAgICAgICAgICBq
aXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UHJlSW5kZXhB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJl
dCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUs
IHNyYywgYWRkcik7CisgICAgfTsKKworICAgIGludDY0X3QqIHAxID0gYml0d2lzZV9jYXN0PGlu
dDY0X3QqPih0ZXN0MSg0KSk7CisgICAgQ0hFQ0tfRVEoKnAxLCA0KTsKKyAgICBDSEVDS19FUSgq
LS1wMSwgbnVtc1sxXSk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQ2NF90IHNyYykgewor
ICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Cisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAq
cDIrKyA9IDU7IHJldHVybiBwMjsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rp
b25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUsIHNyYywgYWRkcik7CisgICAgfTsK
KworICAgIGludDY0X3QqIHAyID0gYml0d2lzZV9jYXN0PGludDY0X3QqPih0ZXN0Mig1KSk7Cisg
ICAgQ0hFQ0tfRVEoKnAyLCA0KTsKKyAgICBDSEVDS19FUSgqLS1wMiwgNSk7Cit9CisKK3ZvaWQg
dGVzdExvYWRQcmVQb3N0SW5kZXgzMigpCit7CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIs
IDMgfTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDMyX3QpOworCisgICAgYXV0byB0
ZXN0MSA9IFsmXSAoaW50MzJfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBp
bGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVy
biByZXM7CisgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRy
ZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICAgICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVw
bGFjZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
aW52b2tlPGludDMyX3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworICAgIAorICAgIENIRUNL
X0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA0KTsKKworICAgIGF1dG8g
dGVzdDIgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21w
aWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyByZXR1
cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFk
ZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihy
ZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
aml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
biBpbnZva2U8aW50MzJfdD4obG9hZCwgJm51bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19F
USh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgNSk7Cit9CisKK3ZvaWQgdGVz
dExvYWRQcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMg
fTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0ZXN0
MSA9IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVybiBy
ZXM7CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRyZXNz
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwor
ICAgICAgICAgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQocmVwbGFj
ZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7
CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52
b2tlPGludDY0X3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVz
dDEoNCksIDMpOworICAgIENIRUNLX0VRKG51bXNbMl0sIDQpOworCisgICAgYXV0byB0ZXN0MiA9
IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
aml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKnAyKys7ICpwMiA9IDU7IHJldHVybiByZXM7
CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhH
UFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2Up
LCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOwor
ICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9r
ZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3Qy
KDUpLCAyKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA1KTsKK30KICNlbmRpZgogCiAjaWYgQ1BV
KFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtNDQ3NSw2ICs0NjQ1LDExIEBA
IHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9B
TkFMWVNJUwogICAgIFJVTih0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDY0KCkpOwogICAgIFJVTih0
ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhVbnNp
Z25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0U3RvcmVQcmVQb3N0SW5kZXgzMigp
KTsKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2Fk
UHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKSk7CiAj
ZW5kaWYKIAogI2lmIENQVShBUk02NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCmluZGV4IGQ1ZmMzMTY0NjU5NjhlYjczNzFiNmZmMWNjNmY4MzE3ZmVjZGU1MmUu
LjQ3MDE3ZjNkZTM4M2EzZTQ0MTIxNmVmMDY2M2FkNjY4YWFmYzI5ZTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC01NDYsNyArNTQ2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBzY2Fs
ZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBvcGVyYW5kIGlu
dG8gYW4gYWRkcmVzcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFs
dWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KICAgICBBcmcgZWZmZWN0aXZlQWRkcihWYWx1ZSogYWRk
cmVzcywgSW50IG9mZnNldCwgV2lkdGggd2lkdGgpCkBAIC05MDIsNiArOTAyLDEwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgewogICAg
ICAgICAgICAgICAgIGlmIChpbW0ocmlnaHQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZChvcGNvZGUsIGltbShyaWdodCksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gaWYgKG9wY29kZSA9PSBBaXI6OkFkZDY0ICYmIG1fdXNlQ291bnRzLm51bVVzZXMo
bV92YWx1ZSkgJiYgQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShyaWdodC0+YXNJbnQoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgIGRhdGFMb2coIi0tLS0tLS0tLS0tLS0gZmluZCBw
b3N0IGNhbmRpZGF0ZSBhZGQ6ICIsIHBvaW50ZXJEdW1wKG1fdmFsdWUpLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIG1fYWRkQWRkcmVzc1RvSW5zdC5hZGQobGVmdCwgJm1faW5z
dHMubGFzdCgpLmxhc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7
CkBAIC0xMTQ2LDEyICsxMTUwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBBaXI6
Ok1vdmUzMjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFN0b3JlMzIsIEFy
Zzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0oV2lkdGgzMikpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9yZTMyLCBtX3ZhbHVlLCB6ZXJv
UmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oTW92ZTMy
LCBBcmc6Olplcm9SZWcsIGRlc3Qua2luZCgpKSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdpZHRoMzIp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoTW92ZTMyLCBtX3ZhbHVlLCB6
ZXJvUmVnKCksIGRlc3QpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBjYXNlIEFpcjo6TW92ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3Jt
KFN0b3JlNjQsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0o
V2lkdGg2NCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9yZTY0LCBt
X3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxp
ZEZvcm0oTW92ZSwgQXJnOjpaZXJvUmVnLCBkZXN0LmtpbmQoKSkgJiYgZGVzdC5pc1ZhbGlkRm9y
bShXaWR0aDY0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KE1vdmUsIG1f
dmFsdWUsIHplcm9SZWcoKSwgZGVzdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI1NTksNiArMjU2Myw2OCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBQcmUtSW5kZXggUGF0dGVybjoKKyAgICAgICAgICAgIC8v
ICAgICBhZGRyZXNzID0gYWRkKGJhc2UsIG9mZnNldCkgIAorICAgICAgICAgICAgLy8gICAgIG1l
bW9yeSA9IGxvYWQoYWRkcmVzcywgMCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kUHJlSW5k
ZXggPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2Rl
ID0gdHJ5T3Bjb2RlRm9yVHlwZShNb3ZlV2l0aEluY3JlbWVudDMyLCBNb3ZlV2l0aEluY3JlbWVu
dDY0LCBtZW1vcnktPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShv
cGNvZGUsIEFyZzo6UHJlSW5kZXgsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBtZW1vcnktPmxh
c3RDaGlsZCgpOworICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSAhPSBBZGQg
fHwgIWFkZHJlc3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSB8fCBtZW1vcnktPm9mZnNldCgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgVmFsdWUq
IGJhc2UgPSBhZGRyZXNzLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgICAgICBWYWx1
ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBl
PihvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwg
IUFpcjo6QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKHNtYWxsT2Zmc2V0KSB8fCBtX3VzZUNvdW50
cy5udW1Vc2VzKGJhc2UpID4gMikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgICAgICAgICAgaWYgKG1fdXNlQ291bnRzLm51bVVzZXMoYWRkcmVzcykgPT0gMSkg
eworICAgICAgICAgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1lbW9yeSwga2luZCwg
bWVtb3J5LCBBcmc6OmFkZHIodG1wKGJhc2UpLCBzbWFsbE9mZnNldCksIHRtcChtZW1vcnkpKSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIG1fcHJlSW5kZXhBZGRzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAg
ICAgICBhcHBlbmQob3Bjb2RlLCBBcmc6OnByZUluZGV4KHRtcChiYXNlKSwgc21hbGxPZmZzZXQp
LCB0bXAobWVtb3J5KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICBpZiAodHJ5QXBwZW5kUHJlSW5kZXgoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIGF1dG8gdHJ5QXBwZW5kUG9zdEluZGV4ID0g
WyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgLy8gICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9
IHRyeU9wY29kZUZvclR5cGUoTW92ZVdpdGhJbmNyZW1lbnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2
NCwgbWVtb3J5LT50eXBlKCkpOworICAgICAgICAgICAgLy8gICAgIGlmICghaXNWYWxpZEZvcm0o
b3Bjb2RlLCBBcmc6OlBvc3RJbmRleCwgQXJnOjpUbXApKQorICAgICAgICAgICAgLy8gICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAvLyAgICAgaWYgKCFtX2FkZEFkZHJlc3NUb0lu
c3QuY29udGFpbnMobWVtb3J5LT5sYXN0Q2hpbGQoKSkgfHwgbV91c2VDb3VudHMubnVtVXNlcyht
ZW1vcnktPmxhc3RDaGlsZCgpKSA+IDIpCisgICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAgICAgLy8gICAgIEluc3QqIGluc3QgPSBtX2FkZEFkZHJlc3NUb0lu
c3QuZ2V0KG1lbW9yeS0+bGFzdENoaWxkKCkpOworICAgICAgICAgICAgLy8gICAgIFZhbHVlKiBh
ZGRWYWx1ZSA9IGluc3QtPm9yaWdpbjsKKworICAgICAgICAgICAgLy8gICAgIGludHB0cl90IG9m
ZnNldCA9IGFkZFZhbHVlLT5jaGlsZCgxKS0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgIC8vICAg
ICBpZiAoc3VtT3ZlcmZsb3dzPGludHB0cl90PihvZmZzZXQsIG1lbW9yeS0+b2Zmc2V0KCkpKQor
ICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAvLyAgICAg
b2Zmc2V0ICs9IG1lbW9yeS0+b2Zmc2V0KCk7CisgICAgICAgICAgICAvLyAgICAgVmFsdWU6Ok9m
ZnNldFR5cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zm
c2V0KTsKKyAgICAgICAgICAgIC8vICAgICBpZiAoc21hbGxPZmZzZXQgIT0gb2Zmc2V0IHx8ICFB
aXI6OkFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybShtZW1vcnktPm9mZnNldCgpKSkKKyAgICAgICAg
ICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gICAgIG1lbW9yeS0+
c2V0T2Zmc2V0KHNtYWxsT2Zmc2V0KTsKKworICAgICAgICAgICAgLy8gICAgIGluc3QtPmtpbmQg
PSBBaXI6OktpbmQocmVsYXhlZE1vdmVGb3JUeXBlKGFkZFZhbHVlLT50eXBlKCkpKTsKKyAgICAg
ICAgICAgIC8vICAgICBpbnN0LT5hcmdzLmNsZWFyKCk7CisgICAgICAgICAgICAvLyAgICAgaW5z
dC0+YXBwZW5kKHRtcChhZGRWYWx1ZS0+Y2hpbGQoMCkpLCB0bXAoYWRkVmFsdWUpKTsKKyAgICAg
ICAgICAgIC8vICAgICBtX2FkZEFkZHJlc3NUb0luc3QucmVtb3ZlKG1lbW9yeS0+bGFzdENoaWxk
KCkpOworCisgICAgICAgICAgICAvLyAgICAgYXBwZW5kKG9wY29kZSwgQXJnOjpwb3N0SW5kZXgo
dG1wKG1lbW9yeS0+bGFzdENoaWxkKCkpLCBtZW1vcnktPm9mZnNldCgpKSwgdG1wKG1lbW9yeSkp
OworICAgICAgICAgICAgLy8gICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgLy8gfTsKKwor
ICAgICAgICAgICAgLy8gaWYgKHRyeUFwcGVuZFBvc3RJbmRleCgpKQorICAgICAgICAgICAgLy8g
ICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBr
aW5kLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtMjY4OCw2ICsyNzU0LDE3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBpZiAodHJ5QXBwZW5kQWRkV2l0aFNoaWZ0KGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBl
bmRBZGRXaXRoU2hpZnQocmlnaHQsIGxlZnQpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAor
ICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRQcmVJbmRleEFkZCA9IFsmXSAoKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlSW5kZXhBZGRzLmNvbnRhaW5zKG1fdmFsdWUpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgbV9wcmVJ
bmRleEFkZHMucmVtb3ZlKG1fdmFsdWUpOworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVk
TW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgdG1w
KG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRQcmVJbmRleEFkZCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkMzIsIEFkZDY0LCBBZGRE
b3VibGUsIEFkZEZsb2F0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkBAIC00MjY1LDYgKzQzNDIsOSBAQCBwcml2YXRlOgogICAgIElu
ZGV4TWFwPEIzOjpCYXNpY0Jsb2NrKiwgQWlyOjpCYXNpY0Jsb2NrKj4gbV9ibG9ja1RvQmxvY2s7
CiAgICAgSGFzaE1hcDxWYXJpYWJsZSosIFZlY3RvcjxUbXA+PiBtX3ZhcmlhYmxlVG9UbXBzOwog
CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX3ByZUluZGV4QWRkczsKKyAgICAvLyBIYXNoTWFwPFZh
bHVlKiwgSW5zdCo+IG1fYWRkQWRkcmVzc1RvSW5zdDsKKwogICAgIFVzZUNvdW50cyBtX3VzZUNv
dW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNoaWxkcmVuOwogICAgIEJsb2NrV29ya2xpc3Qg
bV9mYXN0V29ya2xpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJl
bmd0aC5jcHAKaW5kZXggMjI4MGZkNzcxMjUyZTcyNjBmNjg1MDUwOTJmZDU0M2NmZTA2MTg1Ny4u
MzUwYzlhZTYwNWRjMDM2NjhkZTNmYWMwMzIzNTllNzI2ODFlNWRjMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcApAQCAtMTkyOSw2ICsxOTI5LDIx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IG1fdmFsdWUtPmxhc3RD
aGlsZCgpOwogICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IG1fdmFsdWUtPmFzPE1l
bW9yeVZhbHVlPigpOwogCisgICAgICAgICAgICAvLyBQb3RlbnRpYWwgUHJlLUluZGV4IFBhdHRl
cm46CisgICAgICAgICAgICAvLyBMb2FkKEFkZChhZGRyZXNzLCBvZmZzZXQxKSwgb2Zmc2V0ID0g
MCkKKyAgICAgICAgICAgIGF1dG8gaXNQb3RlbnRpYWxQcmVJbmRleCA9IFsmXSAoKSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcy0+b3Bjb2RlKCkgIT0gQWRkIHx8ICFhZGRy
ZXNzLT5jaGlsZCgxKS0+aGFzSW50UHRyKCkgfHwgbWVtb3J5LT5vZmZzZXQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9w
Y29kZSgpICE9IExvYWQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBpZiAobWVtb3J5LT50eXBlKCkgIT0gSW50MzIgJiYgbWVtb3J5LT50eXBlKCkg
IT0gSW50NjQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmIChpc1Bv
dGVudGlhbFByZUluZGV4KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogTG9hZChBZGQoYWRkcmVzcywgb2Zmc2V0MSksIG9mZnNldCA9IG9mZnNl
dDIpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IExvYWQoYWRkcmVzcywgb2Zmc2V0ID0gb2Zm
c2V0MSArIG9mZnNldDIpCiAgICAgICAgICAgICAvLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuY3BwCmluZGV4IDEwM2M2ZWNjYTNkMzE0YmI0ZWQ4YzAyYTRkMmYwMDljYTY0MWQw
MDEuLjc3ZWU4NDI1MTI0YjlkOGI4YzU4MmYzOWZmOTY5ZjYwZmQxNmNjMDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKQEAgLTEzMCw2ICsxMzAsMTEgQEAgdW5zaWdu
ZWQgQXJnOjpqc0hhc2goKSBjb25zdAogICAgICAgICByZXN1bHQgKz0gbV9iYXNlLmludGVybmFs
VmFsdWUoKTsKICAgICAgICAgcmVzdWx0ICs9IG1faW5kZXguaW50ZXJuYWxWYWx1ZSgpOwogICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFByZUluZGV4OgorICAgIGNhc2UgUG9zdEluZGV4OgorICAg
ICAgICByZXN1bHQgKz0gbV9vZmZzZXQ7CisgICAgICAgIHJlc3VsdCArPSBtX2Jhc2UuaW50ZXJu
YWxWYWx1ZSgpOworICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YWNrOgogICAgICAgICByZXN1
bHQgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2NhbGUpOwogICAgICAgICByZXN1bHQgKz0g
c3RhY2tTbG90KCktPmluZGV4KCk7CkBAIC0xNjEsNyArMTY2LDcgQEAgdm9pZCBBcmc6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50ZigiJDB4JWxseCIsIHN0
YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4obV9vZmZzZXQpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgWmVyb1JlZzoKLSAgICAgICAgb3V0LnByaW50KCIlJXh6ciIpOworICAgICAg
ICBvdXQucHJpbnQoIiV4enIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2ltcGxlQWRk
cjoKICAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOwpAQCAtMTgwLDYgKzE4NSwx
MiBAQCB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICAgICAg
b3V0LnByaW50KCIsIiwgc2NhbGUoKSk7CiAgICAgICAgIG91dC5wcmludCgiKSIpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFz
ZSgpLCAiLFByZSgkIiwgb2Zmc2V0KCksICIpKSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBQb3N0SW5kZXg6CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIixQb3N0KCQiLCBv
ZmZzZXQoKSwgIikpIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFN0YWNrOgogICAgICAg
ICBpZiAob2Zmc2V0KCkpCiAgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOwpAQCAtMjYx
LDYgKzI3MiwxMiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpL
aW5kIGtpbmQpCiAgICAgY2FzZSBBcmc6OkluZGV4OgogICAgICAgICBvdXQucHJpbnQoIkluZGV4
Iik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6UHJlSW5kZXg6CisgICAgICAgIG91
dC5wcmludCgiUHJlSW5kZXgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpQb3N0
SW5kZXg6CisgICAgICAgIG91dC5wcmludCgiUG9zdEluZGV4Iik7CisgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIEFyZzo6UmVsQ29uZDoKICAgICAgICAgb3V0LnByaW50KCJSZWxDb25kIik7CiAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQXJnLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCmluZGV4IGNl
NWE0ZTczNzlhZDY0NDQ1ZjBjM2FiZDEyOWYzMjliOTQ3ZmU4MTIuLmVhMjI2MjhhZTEyZTExZmVi
NDVkZjY3YWNmM2RhOGQ2ODYwYjRmZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuaApAQCAtMSwzICsxLDQgQEAKKwogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC03Nyw2ICs3OCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgU3RhY2ssCiAgICAgICAgIENhbGxBcmcsCiAgICAgICAgIEluZGV4LAorICAg
ICAgICBQcmVJbmRleCwKKyAgICAgICAgUG9zdEluZGV4LAogCiAgICAgICAgIC8vIEltbWVkaWF0
ZSBvcGVyYW5kcyB0aGF0IGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3Igb2YgYW4gb3BlcmF0aW9uLiBZ
b3UgY2FuIHRoaW5rIG9mIHRoZW0gYXMKICAgICAgICAgLy8gc2Vjb25kYXJ5IG9wY29kZXMuIFRo
ZXkgYXJlIGFsd2F5cyAiVXNlIidkLgpAQCAtNjQ5LDYgKzY1MiwzMCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBBcmc6OmluZGV4KGJhc2UsIGluZGV4LCBzY2FsZSwgMCk7CiAgICAgfQogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0
PEludD4+CisgICAgc3RhdGljIEFyZyBwcmVJbmRleChBaXI6OlRtcCBiYXNlLCBJbnQgaW5kZXgp
CisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNJ
bnQ5KGluZGV4KSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQg
PSBQcmVJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IGluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJ
bnQ+PgorICAgIHN0YXRpYyBBcmcgcG9zdEluZGV4KEFpcjo6VG1wIGJhc2UsIEludCBpbmRleCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc0lu
dDkoaW5kZXgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IFBvc3RJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IGluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAg
IHN0YXRpYyBBcmcgcmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24pCiAgICAgewogICAgICAgICBBcmcgcmVzdWx0OwpAQCAtNzk5LDYgKzgyNiwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CiAgICAgfQogCisgICAg
Ym9vbCBpc1ByZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
UHJlSW5kZXg7CisgICAgfQorCisgICAgYm9vbCBpc1Bvc3RJbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4ga2luZCgpID09IFBvc3RJbmRleDsKKyAgICB9CisKICAgICBib29sIGlz
TWVtb3J5KCkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CkBAIC04MDgs
NiArODQ1LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENh
bGxBcmc6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAg
ICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05NzIsNyArMTAxMSw3IEBAIHB1
YmxpYzoKIAogICAgIEFpcjo6VG1wIGJhc2UoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBTaW1wbGVBZGRyIHx8IGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRl
bmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTaW1wbGVBZGRyIHx8IGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9m
ZnNldEFkZHIgfHwga2luZCgpID09IEluZGV4IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8fCBraW5k
KCkgPT0gUG9zdEluZGV4KTsKICAgICAgICAgcmV0dXJuIG1fYmFzZTsKICAgICB9CiAKQEAgLTk4
Miw3ICsxMDIxLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGtpbmQoKSA9PSBTdGFj
aykKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9z
Y2FsZSk7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5k
ZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRB
ZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCB8fCBraW5kKCkgPT0g
UHJlSW5kZXggfHwga2luZCgpID09IFBvc3RJbmRleCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9vZmZzZXQpOwogICAgIH0KIApAQCAtMTA0NCw2ICsx
MDgzLDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5k
ZWRPZmZzZXRBZGRyOgogICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIFByZUluZGV4
OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgY2FzZSBTdGFjazoKICAgICAgICAg
Y2FzZSBDYWxsQXJnOgogICAgICAgICBjYXNlIFJlbENvbmQ6CkBAIC0xMDgxLDYgKzExMjIsOCBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNl
dEFkZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAg
ICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENh
bGxBcmc6CiAgICAgICAgIGNhc2UgQmlnSW1tOiAvLyBZZXMsIHdlIGFsbG93IEJpZ0ltbSBhcyBh
IGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBz
LgpAQCAtMTIzNyw2ICsxMjgwLDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNM
ZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBib29sIGlzVmFsaWRQcmVJbmRleEZvcm0oSW50
IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICByZXR1
cm4gaXNWYWxpZFNpZ25lZEltbTkob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdh
bE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBib29sIGlzVmFsaWRQb3N0SW5kZXhGb3JtKEludCBv
ZmZzZXQpCisgICAgeworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgcmV0dXJu
IGlzVmFsaWRTaWduZWRJbW05KG9mZnNldCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKICAgICAvLyBJZiB5b3UgZG9uJ3QgcGFzcyBhIHdpZHRoIHRoZW4gdGhpcyBvcHRpbWlzdGlj
YWxseSBhc3N1bWVzIHRoYXQgeW91J3JlIHVzaW5nIHRoZSByaWdodCB3aWR0aC4gQnV0CiAgICAg
Ly8gdGhlIHdpZHRoIGlzIHJlbGV2YW50IHRvIHZhbGlkaXR5LCBzbyBwYXNzaW5nIGEgbnVsbCB3
aWR0aCBpcyBvbmx5IHVzZWZ1bCBmb3IgYXNzZXJ0aW9ucy4gRG9uJ3QKICAgICAvLyBwYXNzIG51
bGwgd2lkdGhzIHdoZW4gY2FzY2FkaW5nIHRocm91Z2ggQXJncyBpbiB0aGUgaW5zdHJ1Y3Rpb24g
c2VsZWN0b3IhCkBAIC0xMjY1LDYgKzEzMjQsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0
dXJuIGlzVmFsaWRBZGRyRm9ybShvZmZzZXQoKSwgd2lkdGgpOwogICAgICAgICBjYXNlIEluZGV4
OgogICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRJbmRleEZvcm0oc2NhbGUoKSwgb2Zmc2V0KCks
IHdpZHRoKTsKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpc1Zh
bGlkUHJlSW5kZXhGb3JtKG9mZnNldCgpKTsKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CisgICAg
ICAgICAgICByZXR1cm4gaXNWYWxpZFBvc3RJbmRleEZvcm0ob2Zmc2V0KCkpOwogICAgICAgICBj
YXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVD
b25kOgpAQCAtMTI4NCw2ICsxMzQ3LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIFNpbXBsZUFk
ZHI6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6
CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAg
ICAgICAgZnVuY3RvcihtX2Jhc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
SW5kZXg6CkBAIC0xMzI2LDYgKzEzOTEsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU2ltcGxl
QWRkcjoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRk
cjoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAg
ICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCwgYXJnUm9sZSA9PSBVc2VBZGRyID8gYXJn
V2lkdGggOiBwb2ludGVyV2lkdGgoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBJbmRleDoKQEAgLTEzODMsNiArMTQ1MCwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9vZmZzZXQpLCBtX2V4dGVuZCk7CiAgICAgfQog
CisgICAgTWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzcyBhc1ByZUluZGV4QWRkcmVzcygp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNQcmVJbmRleCgpKTsKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyOjpQcmVJbmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBvZmZzZXQo
KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MgYXNQb3N0
SW5kZXhBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Bvc3RJbmRleCgp
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKG1fYmFz
ZS5ncHIoKSwgb2Zmc2V0KCkpOworICAgIH0KKwogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uIGFzUmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaXNSZWxDb25kKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcAppbmRleCA5MDVlNjE3ZmJkZTBlMmI3ZDc1NTU2M2U2
ODg1ODliZGFkNzI2YzgwLi42YWQwNTg0MjY3YjhjN2VlNzE0OWIwMmY4MjMxNTcyYmVlOGNmOGFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tB
cmdzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tB
cmdzLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgbG93ZXJTdGFja0FyZ3MoQ29kZSYgY29k
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBX
aWR0aDMyKTsKIAogI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
aXI6Ok9wY29kZSBzdG9yZU9wY29kZSA9IFN0b3JlMzI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQWlyOjpPcGNvZGUgc3RvcmVPcGNvZGUgPSBNb3ZlMzI7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWlyOjpBcmc6OktpbmQgb3BlcmFuZEtpbmQgPSBBcmc6Olplcm9SZWc7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWlyOjpBcmcgb3BlcmFuZCA9IEFyZzo6emVyb1Jl
ZygpOwogI2VsaWYgQ1BVKFg4Nl82NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wY29kZS5vcGNvZGVzCmluZGV4IDY2MWVhZGQyMzczYzU0YTRiYmE5NDdhNTRiZGEyNTU3
YmRiOGFlNGEuLmFmZGNmZjE2MmI1NGFhYWIxNzc3ZjdhYTQyNGFhYjU4MDlmMzdlNWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwpAQCAtNjQ3
LDYgKzY0Nyw5IEBAIE1vdmUgVTpHOlB0ciwgRDpHOlB0cgogICAgIEluZGV4LCBUbXAgYXMgbG9h
ZFB0cgogICAgIFRtcCwgQWRkciBhcyBzdG9yZVB0cgogICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQ
dHIKKyAgICBhcm02NDogWmVyb1JlZywgQWRkciBhcyBzdG9yZTY0CisgICAgYXJtNjQ6IFplcm9S
ZWcsIEluZGV4IGFzIHN0b3JlNjQKKwogICAgIHg4NjogSW1tLCBBZGRyIGFzIHN0b3JlUHRyCiAK
ICMgVGhpcyBpcyBmb3IgbW92aW5nIGJldHdlZW4gc3BpbGwgc2xvdHMuCkBAIC02NjEsMjggKzY2
NCwzNCBAQCB4ODZfNjQ6IFN3YXA2NCBVRDpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKICAg
ICBUbXAsIEFkZHIKIAorYXJtNjQ6IE1vdmVXaXRoSW5jcmVtZW50NjQgVTpHOjY0LCBVRDpHOjY0
CisgICAgUHJlSW5kZXgsIFRtcCBhcyBsb2FkNjQKKyAgICBQb3N0SW5kZXgsIFRtcCBhcyBsb2Fk
NjQKKyAgICBUbXAsIFByZUluZGV4IGFzIHN0b3JlNjQKKyAgICBUbXAsIFBvc3RJbmRleCBhcyBz
dG9yZTY0CisKIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCBhcyB6ZXJvRXh0
ZW5kMzJUb1dvcmQKICAgICBBZGRyLCBUbXAgYXMgbG9hZDMyCiAgICAgSW5kZXgsIFRtcCBhcyBs
b2FkMzIKICAgICBUbXAsIEFkZHIgYXMgc3RvcmUzMgogICAgIFRtcCwgSW5kZXggYXMgc3RvcmUz
MgorICAgIGFybTY0OiBaZXJvUmVnLCBBZGRyIGFzIHN0b3JlMzIKKyAgICBhcm02NDogWmVyb1Jl
ZywgSW5kZXggYXMgc3RvcmUzMgogICAgIHg4NjogSW1tLCBUbXAgYXMgemVyb0V4dGVuZDMyVG9X
b3JkCiAgICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmUzMgogICAgIHg4NjogSW1tLCBJbmRleCBh
cyBzdG9yZTMyCiAKK2FybTY0OiBNb3ZlV2l0aEluY3JlbWVudDMyIFU6RzozMiwgVVpEOkc6MzIK
KyAgICBQcmVJbmRleCwgVG1wIGFzIGxvYWQzMgorICAgIFBvc3RJbmRleCwgVG1wIGFzIGxvYWQz
MgorICAgIFRtcCwgUHJlSW5kZXggYXMgc3RvcmUzMgorICAgIFRtcCwgUG9zdEluZGV4IGFzIHN0
b3JlMzIKKwogIyBUaGlzIGlzIGZvciBtb3ZpbmcgYmV0d2VlbiBzcGlsbCBzbG90cy4KIE1vdmUz
MiBVOkc6MzIsIFpEOkc6MzIsIFM6RzozMgogICAgIEFkZHIsIEFkZHIsIFRtcAogCi1hcm02NDog
U3RvcmUzMiBVOkc6MzIsIFpEOkc6MzIKLSAgICBaZXJvUmVnLCBBZGRyCi0gICAgWmVyb1JlZywg
SW5kZXgKLQotYXJtNjQ6IFN0b3JlNjQgVTpHOjY0LCBEOkc6NjQKLSAgICBaZXJvUmVnLCBBZGRy
Ci0gICAgWmVyb1JlZywgSW5kZXgKLQogU2lnbkV4dGVuZDMyVG9QdHIgVTpHOjMyLCBEOkc6UHRy
CiAgICAgVG1wLCBUbXAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9vcGNvZGVfZ2VuZXJhdG9yLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNv
ZGVfZ2VuZXJhdG9yLnJiCmluZGV4IDM3NDBlZmRiZGQxNDZhMzdmNmVkZTlkZGJjMjNkZGJhMDNi
MDc2NDYuLmYxYmYxYTQ2Y2ZjODg5ZWMxOTM0NmYyYzA2YjdjZjUwZjllM2RlMGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKQEAgLTIy
OSw3ICsyMjksNyBAQCBkZWYgaXNHRih0b2tlbikKIGVuZAogCiBkZWYgaXNLaW5kKHRva2VuKQot
ICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQp
fChaZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFkZHIpfChFeHRlbmRlZE9mZnNldEFkZHIpfChJbmRl
eCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCl8KFN0YXR1c0NvbmQpKVxaLworICAg
IHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQpfCha
ZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFkZHIpfChFeHRlbmRlZE9mZnNldEFkZHIpfChJbmRleCl8
KFByZUluZGV4KXwoUG9zdEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25kKXwo
U3RhdHVzQ29uZCkpXFovCiBlbmQKIAogZGVmIGlzQXJjaCh0b2tlbikKQEAgLTMwMyw3ICszMDMs
NyBAQCBjbGFzcyBQYXJzZXIKIAogICAgIGRlZiBjb25zdW1lS2luZAogICAgICAgICByZXN1bHQg
PSB0b2tlbi5zdHJpbmcKLSAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBC
aWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFplcm9SZWcsIFRtcCwgU2ltcGxlQWRkciwgQWRkciwg
RXh0ZW5kZWRPZmZzZXRBZGRyLCBJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgRG91YmxlQ29uZCwg
b3IgU3RhdHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAgcGFyc2VFcnJv
cigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFplcm9SZWcs
IFRtcCwgU2ltcGxlQWRkciwgQWRkciwgRXh0ZW5kZWRPZmZzZXRBZGRyLCBJbmRleCwgUHJlSW5k
ZXgsIFBvc3RJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgRG91YmxlQ29uZCwgb3IgU3RhdHVzQ29u
ZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKICAgICAgICAgYWR2YW5jZQogICAgICAgICByZXN1
bHQKICAgICBlbmQKQEAgLTkyOSw2ICs5MjksMTIgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQi
KSB7CiAgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgiCiAgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRJbmRleEZvcm0oYXJnc1sje2luZGV4fV0uc2NhbGUo
KSwgYXJnc1sje2luZGV4fV0ub2Zmc2V0KCksICN7YXJnLndpZHRoQ29kZX0pKSIKICAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAg
ICAgICB3aGVuICJQcmVJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAo
IUFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSkpIgorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAg
ICAgICAgICAgIHdoZW4gIlBvc3RJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoIUFyZzo6aXNWYWxpZFBvc3RJbmRleEZvcm0oYXJnc1sje2luZGV4fV0ub2Zmc2V0KCkp
KSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIK
ICAgICAgICAgICAgICAgICB3aGVuICJCaWdJbW0iCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVs
Q29uZCIKICAgICAgICAgICAgICAgICB3aGVuICJSZXNDb25kIgpAQCAtMTIzNSw2ICsxMjQxLDEw
IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgICAgICBvdXRw
LnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIKICAgICAgICAgICAgICAgICB3aGVu
ICJJbmRleCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0u
YXNCYXNlSW5kZXgoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJQcmVJbmRleCIKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNQcmVJbmRleEFkZHJlc3Mo
KSIKKyAgICAgICAgICAgICAgICB3aGVuICJQb3N0SW5kZXgiCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUG9zdEluZGV4QWRkcmVzcygpIgogICAgICAg
ICAgICAgICAgIHdoZW4gIlJlbENvbmQiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
ImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENvbmRpdGlvbigpIgogICAgICAgICAgICAgICAg
IHdoZW4gIlJlc0NvbmQiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggYzcwMzJlYzA4
NGRkZmRkOTM1ZTU1MjdmYWFlOTM1NjgxOTg0ODE3OS4uYjIyZDg0NjFjZjFiMTNjZjg1ZDE2NmE3
MmFmZGJhMjQ5YzI4ZDUzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMTE0MCw0
ICsxMTQwLDkgQEAgdm9pZCBhZGRDb3B5VGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mKTsKIAogYm9vbCBzaG91bGRSdW4oY29uc3QgY2hh
ciogZmlsdGVyLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSk7CiAKK3ZvaWQgdGVzdExvYWRQcmVJbmRl
eDMyKCk7Cit2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpOwordm9pZCB0ZXN0TG9hZFBvc3RJbmRl
eCgpOwordm9pZCB0ZXN0SWZoeWooKTsKKwogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAppbmRleCA0YzUyYWRhOWNjNDAyZGRlNTM5ODhj
YzhmMmY1ZTllMGRkZTJlMTFjLi5iYWZhNjBjZDEwNTY4NzNmYmZlMWRmMjYzYzBhMTBhNTRmZjJh
Mzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKQEAgLTI4LDYgKzI4LDI3
MSBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorCit2b2lkIHRlc3RJZmh5aigpCit7CisgICAg
aWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0aGVuQmxvY2sgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiBy
ID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIFJvb3RfQmxvY2sKKyAgICAvLyB5ID0gYWRkcjAgKyAxCisgICAgLy8gcjEgPSAwCisgICAg
Ly8gVXBzaWxvbihyMSwgXnIzKQorICAgIC8vIGlmIHkgIT0gYWRkcjEgZ290byBkb25lCisgICAg
VmFsdWUqIHkgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBBZGQsIE9y
aWdpbigpLCAKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLCAKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDgpKTsKKyAgICBWYWx1ZSogcjEgPSBy
b290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCk7CisgICAgcm9v
dC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCBy
MSk7CisgICAgVmFsdWUqIGNvbmQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE5vdEVx
dWFsLCBPcmlnaW4oKSwgeSwgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2Nr
KGRvbmUpLCBGcmVxdWVudGVkQmxvY2sodGhlbkJsb2NrKSk7CisKKyAgICAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFRoZW5fQmxvY2sKKyAgICAvLyB6ID0gTG9hZCh5LCAwKQorICAgIC8vIHIy
ID0geSArIHoKKyAgICAvLyBVcHNpbG9uKHIyLCBecjMpCisgICAgTWVtb3J5VmFsdWUqIHogPSB0
aGVuQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdp
bigpLCB5KTsKKyAgICBWYWx1ZSogcjIgPSB0aGVuQmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQWRkLCBPcmlnaW4oKSwgeSwgeik7CisgICAgdGhlbkJsb2NrLT5hcHBlbmROZXc8VmFyaWFi
bGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIyKTsKKyAgICB0aGVuQmxvY2st
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJs
b2NrKGRvbmUpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jawor
ICAgIC8vIHIzID0gUGhpKCkKKyAgICAvLyByZXR1cm4gcjMKKyAgICBWYWx1ZSogcjMgPSBkb25l
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOwor
ICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBy
Myk7CisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7
CisgICAgZml4U1NBKHByb2MpOworCisgICAgY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KDBMKSwgYml0d2lzZV9jYXN0PGludHB0cl90PigwTCkpOwor
fQorCit2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNb
XSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQzMl90KiBwdHIg
PSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9j
LmFkZFZhcmlhYmxlKEludDMyKTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUo
SW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAg
Ly8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKSAgICAgICAgICAgICAKKyAgICAvLyBw
MSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+
YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCAwKTsKKyAgICByb290LT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsK
KyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZh
cmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxv
Y2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0
X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGko
KQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOwor
ICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVx
dWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9IHAyICsg
MQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMykKKyAg
ICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHAzID0g
bG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BC
b2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCkpOworICAgIGxv
b3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCks
IHAsIHAzKTsKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJv
YywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBwMykpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29w
Qm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9u
ZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsgIAorCisgICAgcHJv
Yy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShw
cm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FS
TTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzRdISIpOworCisg
ICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDMyX3QgeworICAgICAgICBpbnQzMl90IHIgPSAw
OworICAgICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqKytwdHI7CisgICAg
ICAgIHJldHVybiByOworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50MzJfdD4oKmNv
ZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVz
dExvYWRQcmVJbmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwo
KSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAz
LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDY0X3QqIHB0ciA9IG51bXM7CisKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUg
PSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUo
SW50NjQpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAg
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAgICAvLyByMSA9IDAKKyAg
ICAvLyBVcHNpbG9uKHIxLCBecjIpICAgICAgICAgICAgIAorICAgIC8vIHAxID0gYWRkcgorICAg
IC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmRJbnRDb25z
dGFudChwcm9jLCBPcmlnaW4oKSwgSW50NjQsIDApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJp
YWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAgIFZhbHVlKiBw
MSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkp
OworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxvY2sKKyAgICAv
LyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisgICAgLy8gaWYg
cjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFsdWUqIHAy
ID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmln
aW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhk
b25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHAzID0gcDIgKyAxCisgICAgLy8gVXBz
aWxvbihwMywgXnAyKQorICAgIC8vIHIzID0gcjIgKyBsb2FkKHAzKQorICAgIC8vIFVwc2lsb24o
cjMsIF5yMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5l
dzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KSk7CisgICAgbG9vcEJvZHktPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAg
IFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2lu
KCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2
NCwgT3JpZ2luKCksIHAzKSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVl
Pihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29w
VGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2NrCisgICAg
Ly8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOyAgIAorCisgICAgcHJvYy5yZXNldFJlYWNo
YWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAg
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzhdISIpOworCisgICAgYXV0byB0ZXN0
ID0gWyZdICgpIC0+IGludDY0X3QgeworICAgICAgICBpbnQ2NF90IHIgPSAwOworICAgICAgICB3
aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqKytwdHI7CisgICAgICAgIHJldHVybiBy
OworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50NjRfdD4oKmNvZGUsIGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQb3N0SW5k
ZXgoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDksIDEwIH07CisgICAgaW50NjRfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJv
ZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxv
Y2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisgICAg
VmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24o
cjEsIF5yMikgICAgICAgICAgICAgCisgICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihw
MSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9y
aWdpbigpLCBJbnQ2NCwgMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHBy
b2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0
LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9j
LCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAg
Ly8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3Rv
IGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAg
ICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1
YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJv
YywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9v
cF9Cb2R5X0Jsb2NrCisgICAgLy8gcjMgPSByMiArIGxvYWQocDIpCisgICAgLy8gcDMgPSBwMiAr
IDEKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAg
IC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
Pihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksIHAyKSk7CisgICAgVmFsdWUqIHAzID0gbG9v
cEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5
LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCkpOworICAgIGxvb3BC
b2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIs
IHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpT
ZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAg
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAg
IC8vIHJldHVybiByMgorICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCByMik7IAorCisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAg
IHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8gdGVzdCA9IFsm
XSAoKSAtPiBpbnQ2NF90IHsKKyAgICAgICAgaW50NjRfdCByID0gMDsKKyAgICAgICAgd2hpbGUg
KHIgPCAxMCkKKyAgICAgICAgICAgIHIgKz0gKnB0cisrOworICAgICAgICByZXR1cm4gcjsKKyAg
ICB9OworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCisKIHZvaWQgdGVzdEluc2VydFNp
Z25lZEJpdGZpZWxkSW5aZXJvMzIoKQogewogICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRC
M09wdExldmVsKCkgPCAyKQpAQCAtMzY5Nyw2ICszOTYyLDExIEBAIHZvaWQgYWRkU2hyVGVzdHMo
Y29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRh
c2tzKQogICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDApKTsKICAgICBSVU4o
dGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCAxKSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1t
MzIoMHhmZmZmZmZmZiwgNjMpKTsKKworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4MzIoKSk7Cisg
ICAgUlVOKHRlc3RMb2FkUHJlSW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdExvYWRQb3N0SW5kZXgo
KSk7CisgICAgUlVOKHRlc3RJZmh5aigpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cAppbmRleCA2M2UyNjY3ODg1MjAxOGE3NjgwY2E1ZjA3MTQ2OTY4MTA1ODg0YjNiLi42OWJiNmIy
YmU4MTg3MGI1OTgzMzM2N2FmMjY3NWI3ZjRlZjA1NmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKQEAgLTIzMyw4ICsyMzMsOCBA
QCBzdGF0aWMgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGppdFdyaXRlVGh1bmtHZW5lcmF0bwogICAgIGppdC5yZXQoKTsKIAogICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb2NhbDAgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQubG9hZDY0KHgxLCBQ
b3N0SW5kZXgoOCksIHg2KTsKLSAgICBqaXQuc3RvcmU2NCh4NiwgeDMsIFBvc3RJbmRleCg4KSk7
CisgICAgaml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyh4MSwgOCks
IHg2KTsKKyAgICBqaXQuc3RvcmU2NCh4NiwgTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJl
c3MoeDMsIDgpKTsKICAgICBzbWFsbENvcHkubGluaygmaml0KTsKICAgICBqaXQuYnJhbmNoU3Vi
NjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgVHJ1c3RlZEltbTMyKDgpLCB4MikubGlu
a1RvKGxvY2FsMCwgJmppdCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbG9jYWwyID0gaml0
LmJyYW5jaEFkZDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgVHJ1c3RlZEltbTMyKDgpLCB4Mik7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434182</attachid>
            <date>2021-07-25 13:14:21 -0700</date>
            <delta_ts>2021-07-26 02:57:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210725151420.patch</filename>
            <type>text/plain</type>
            <size>45544</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YzJiYTQ4MGQzMzQ0YTVkM2UyNTFiYzUyOGVhMWQ1NDk5YTk0NDQ0Li5mOWFjZjVmOTg1MjIwOWMy
YjI2ODVhMTBkZGQzYTI2ODNhMGM3NmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAyMS0wNy0yNCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0ZXN0T2JqZWN0aXZlQ0FQSU1haW4p
OgorICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAoYmxvY2tTaWduYXR1cmVD
b250YWluc0NsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKHRocmVhZE1haW4pOiBEZWxldGVkLgor
ICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzczo6UHJlSW5kZXhBZGRy
ZXNzKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRk
cmVzczo6UG9zdEluZGV4QWRkcmVzcyk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDMyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RvcmU2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNNjQ6OnN0b3JlMzIpOgorICAgICAgICAqIGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6
CisgICAgICAgIChKU0M6OnRlc3RTdG9yZVByZVBvc3RJbmRleDMyKToKKyAgICAgICAgKEpTQzo6
dGVzdFN0b3JlUHJlUG9zdEluZGV4NjQpOgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQcmVQb3N0SW5kZXg2NCk6CisgICAgICAg
ICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVlLmg6Cisg
ICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckFy
Zy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6anNIYXNoIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdURjo6cHJpbnRJ
bnRlcm5hbCk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OnByZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwb3N0SW5k
ZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUHJlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUG9zdEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc01lbW9yeSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6YmFzZSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b2Zmc2V0IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1ZhbGlkUG9zdEluZGV4Rm9ybSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxp
ZEZvcm0gY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjphc1ByZUluZGV4QWRkcmVzcyBjb25zdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6YXNQb3N0SW5kZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKiBiMy9h
aXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb3dlclN0
YWNrQXJncyk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAq
IGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgorICAg
ICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RJZmh5aik6CisgICAgICAgICh0
ZXN0TG9hZFByZUluZGV4MzIpOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDY0KToKKyAgICAg
ICAgKHRlc3RMb2FkUG9zdEluZGV4KToKKyAgICAgICAgKGFkZFNoclRlc3RzKToKKyAgICAgICAg
KiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OmppdFdyaXRlVGh1
bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTIxICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIHNwZWN1bGF0ZU5laXRoZXJEb3VibGVOb3JTdHJpbmdOb3JI
ZWFwQmlnSW50IHNob3VsZCBvbmx5IGhhdmUgYSBzaW5nbGUgSlNUeXBlIGJyYW5jaApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAppbmRleCAzZDE5NDlhNDA3ODVkOTljYTYxNTk1YWFiMDRiZTZmMWQwZDk2YmEzLi4y
MzU0YzQ1MzY4YzdjMGQ1Y2U5MDE4YWNmZjI4NGM0YTBhMDQzMWE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIu
aApAQCAtMjQ1LDYgKzI0NSwzNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9OwogCisgICAg
Ly8gUHJlSW5kZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mg
d2l0aCBiYXNlIGFkZHJlc3MgYW5kIHByZS1pbmNyZW1lbnQvZGVjcmVtZW50IGluZGV4LgorICAg
IHN0cnVjdCBQcmVJbmRleEFkZHJlc3MgeworICAgICAgICBQcmVJbmRleEFkZHJlc3MoUmVnaXN0
ZXJJRCBiYXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFzZSkKKyAgICAgICAg
ICAgICwgaW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lz
dGVySUQgYmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKKyAgICAvLyBQb3N0SW5k
ZXhBZGRyZXNzOgorICAgIC8vCisgICAgLy8gRGVzY3JpYmVzIGFuIGFkZHJlc3Mgd2l0aCBiYXNl
IGFkZHJlc3MgYW5kIHBvc3QtaW5jcmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3Qg
UG9zdEluZGV4QWRkcmVzcyB7CisgICAgICAgIFBvc3RJbmRleEFkZHJlc3MoUmVnaXN0ZXJJRCBi
YXNlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IGJhc2UoYmFzZSkKKyAgICAgICAgICAgICwg
aW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQg
YmFzZTsKKyAgICAgICAgaW50IGluZGV4OworICAgIH07CisKICAgICAvLyBBYnNvbHV0ZUFkZHJl
c3M6CiAgICAgLy8KICAgICAvLyBEZXNjcmliZXMgYW4gbWVtb3J5IG9wZXJhbmQgZ2l2ZW4gYnkg
YSBwb2ludGVyLiAgRm9yIHJlZ3VsYXIgbG9hZCAmIHN0b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCmluZGV4IGZlMzBk
OWM4NGQzNTI3ZWViMTZmY2QwNmUxMTVmYzY4ZDY5MDkwZmQuLjJhOTEyZDBkZDI2NjI2YmQ3NGUx
MDNiZWY5NjVmMmJhZGZjZTBiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0xNDQ1LDkgKzE0NDUsMTQgQEAg
cHVibGljOgogICAgICAgICBsb2FkPDY0PihhZGRyZXNzLCBkZXN0KTsKICAgICB9CiAKLSAgICB2
b2lkIGxvYWQ2NChSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4IHNpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB2b2lkIGxvYWQ2NChQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3QsIHNyYywgc2ltbSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLmJhc2UsIFByZUluZGV4KHNyYy5p
bmRleCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZDY0KFBvc3RJbmRleEFkZHJlc3Mgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3Qs
IHNyYy5iYXNlLCBQb3N0SW5kZXgoc3JjLmluZGV4KSk7CiAgICAgfQogCiAgICAgRGF0YUxhYmVs
MzIgbG9hZDY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgZGVzdCkKQEAgLTE1NDQsNiArMTU0OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWQ8MzI+
KGFkZHJlc3MsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbG9hZDMyKFByZUluZGV4QWRkcmVz
cyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcjwz
Mj4oZGVzdCwgc3JjLmJhc2UsIFByZUluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKworICAgIHZv
aWQgbG9hZDMyKFBvc3RJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQb3N0SW5kZXgoc3Jj
LmluZGV4KSk7CisgICAgfQorCiAgICAgRGF0YUxhYmVsMzIgbG9hZDMyV2l0aEFkZHJlc3NPZmZz
ZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTczMyw3ICsxNzQ4LDE3IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0PihtZW1vcnlUZW1wUmVnaXN0ZXIsIG1lbW9yeVRl
bXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRy
ZXNzLnNjYWxlKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGFkZHJlc3MuYmFz
ZSwgbWVtb3J5VGVtcFJlZ2lzdGVyKTsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkIHN0b3JlNjQo
UmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOwor
ICAgIH0KKworICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVz
cyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QuYmFz
ZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKICAgICB2b2lkIHN0b3JlNjQoUmVn
aXN0ZXJJRCBzcmMsIGNvbnN0IHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAgICAgICBzdG9yZTw2
ND4oc3JjLCBhZGRyZXNzKTsKQEAgLTE3NzcsMTEgKzE4MDIsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHN0b3JlNjQoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CiAgICAgfQogCi0gICAgdm9pZCBz
dG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIFBvc3RJbmRleCBzaW1tKQot
ICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDY0PihzcmMsIGRlc3QsIHNpbW0pOwotICAg
IH0KLSAgICAKICAgICBEYXRhTGFiZWwzMiBzdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgRGF0YUxhYmVs
MzIgbGFiZWwodGhpcyk7CkBAIC0xODc5LDYgKzE4OTksMTYgQEAgcHVibGljOgogICAgICAgICBz
dG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAorICAgIHZvaWQgc3Rv
cmUzMihSZWdpc3RlcklEIHNyYywgUHJlSW5kZXhBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgZGVzdC5iYXNlLCBQcmVJbmRleChkZXN0LmluZGV4
KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBQb3N0SW5kZXhB
ZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgZGVz
dC5iYXNlLCBQb3N0SW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKwogICAgIERhdGFMYWJlbDMy
IHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5kZXggZjIyYmZmY2UxNTU0
YjAyYzIyNmMyMTQ5MmFiMDY3YmFiMzhjNDBiNS4uNTM0ZWZlMTQzZjc5MGI5MDk4OWJjMmNjNjNm
ZjA5YTA0NjdlNTU3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0
bWFzbS5jcHAKQEAgLTIyMTIsNiArMjIxMiwxNzYgQEAgdm9pZCB0ZXN0WG9yTm90V2l0aFVuc2ln
bmVkUmlnaHRTaGlmdDY0KCkKICAgICAgICAgfQogICAgIH0KIH0KKwordm9pZCB0ZXN0U3RvcmVQ
cmVQb3N0SW5kZXgzMigpCit7CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAg
ICBpbnRwdHJfdCBhZGRyID0gYml0d2lzZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAg
aW50MzJfdCBpbmRleCA9IHNpemVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0g
KGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgIC8vICorK3AxID0gNDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0
b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVz
cyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMs
IGFkZHIpOworICAgIH07CisKKyAgICBpbnQzMl90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQzMl90
Kj4odGVzdDEoNCkpOworICAgIENIRUNLX0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEs
IG51bXNbMV0pOworCisgICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50MzJfdCBzcmMpIHsKKyAgICAg
ICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysg
PSA1OyByZXR1cm4gcDI7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAg
ICBpbnQzMl90KiBwMiA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4odGVzdDIoNSkpOworICAgIENI
RUNLX0VRKCpwMiwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RT
dG9yZVByZVBvc3RJbmRleDY0KCkKK3sKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMyB9
OworICAgIGludHB0cl90IGFkZHIgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZudW1zWzFdKTsK
KyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0ZXN0MSA9
IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0
KTsKKworICAgICAgICAgICAgLy8gKisrcDEgPSA0OyByZXR1cm4gcDE7CisgICAgICAgICAgICBq
aXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UHJlSW5kZXhB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJl
dCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUs
IHNyYywgYWRkcik7CisgICAgfTsKKworICAgIGludDY0X3QqIHAxID0gYml0d2lzZV9jYXN0PGlu
dDY0X3QqPih0ZXN0MSg0KSk7CisgICAgQ0hFQ0tfRVEoKnAxLCA0KTsKKyAgICBDSEVDS19FUSgq
LS1wMSwgbnVtc1sxXSk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQ2NF90IHNyYykgewor
ICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Cisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAq
cDIrKyA9IDU7IHJldHVybiBwMjsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rp
b25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUsIHNyYywgYWRkcik7CisgICAgfTsK
KworICAgIGludDY0X3QqIHAyID0gYml0d2lzZV9jYXN0PGludDY0X3QqPih0ZXN0Mig1KSk7Cisg
ICAgQ0hFQ0tfRVEoKnAyLCA0KTsKKyAgICBDSEVDS19FUSgqLS1wMiwgNSk7Cit9CisKK3ZvaWQg
dGVzdExvYWRQcmVQb3N0SW5kZXgzMigpCit7CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIs
IDMgfTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDMyX3QpOworCisgICAgYXV0byB0
ZXN0MSA9IFsmXSAoaW50MzJfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBp
bGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVy
biByZXM7CisgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRy
ZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICAgICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVw
bGFjZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
aW52b2tlPGludDMyX3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworICAgIAorICAgIENIRUNL
X0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA0KTsKKworICAgIGF1dG8g
dGVzdDIgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21w
aWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyByZXR1
cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFk
ZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihy
ZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
aml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
biBpbnZva2U8aW50MzJfdD4obG9hZCwgJm51bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19F
USh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgNSk7Cit9CisKK3ZvaWQgdGVz
dExvYWRQcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMg
fTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0ZXN0
MSA9IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVybiBy
ZXM7CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRyZXNz
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwor
ICAgICAgICAgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQocmVwbGFj
ZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7
CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52
b2tlPGludDY0X3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVz
dDEoNCksIDMpOworICAgIENIRUNLX0VRKG51bXNbMl0sIDQpOworCisgICAgYXV0byB0ZXN0MiA9
IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
aml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKnAyKys7ICpwMiA9IDU7IHJldHVybiByZXM7
CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhH
UFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2Up
LCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOwor
ICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9r
ZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3Qy
KDUpLCAyKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA1KTsKK30KICNlbmRpZgogCiAjaWYgQ1BV
KFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtNDQ3NSw2ICs0NjQ1LDExIEBA
IHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9B
TkFMWVNJUwogICAgIFJVTih0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDY0KCkpOwogICAgIFJVTih0
ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhVbnNp
Z25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0U3RvcmVQcmVQb3N0SW5kZXgzMigp
KTsKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2Fk
UHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKSk7CiAj
ZW5kaWYKIAogI2lmIENQVShBUk02NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCmluZGV4IGQ1ZmMzMTY0NjU5NjhlYjczNzFiNmZmMWNjNmY4MzE3ZmVjZGU1MmUu
LmI0NDlmMGU2Y2RiNjdjMjg3ZjI5YTdhN2FlZWEwMzM5MGI0MmQwZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC01NDYsNyArNTQ2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBzY2Fs
ZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBvcGVyYW5kIGlu
dG8gYW4gYWRkcmVzcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFs
dWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KICAgICBBcmcgZWZmZWN0aXZlQWRkcihWYWx1ZSogYWRk
cmVzcywgSW50IG9mZnNldCwgV2lkdGggd2lkdGgpCkBAIC05MDIsNiArOTAyLDEwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgewogICAg
ICAgICAgICAgICAgIGlmIChpbW0ocmlnaHQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZChvcGNvZGUsIGltbShyaWdodCksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gaWYgKG9wY29kZSA9PSBBaXI6OkFkZDY0ICYmIG1fdXNlQ291bnRzLm51bVVzZXMo
bV92YWx1ZSkgJiYgQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShyaWdodC0+YXNJbnQoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgIGRhdGFMb2coIi0tLS0tLS0tLS0tLS0gZmluZCBw
b3N0IGNhbmRpZGF0ZSBhZGQ6ICIsIHBvaW50ZXJEdW1wKG1fdmFsdWUpLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIG1fYWRkQWRkcmVzc1RvSW5zdC5hZGQobGVmdCwgJm1faW5z
dHMubGFzdCgpLmxhc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7
CkBAIC0xMTQ2LDEyICsxMTUwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBBaXI6
Ok1vdmUzMjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFN0b3JlMzIsIEFy
Zzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0oV2lkdGgzMikpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9yZTMyLCBtX3ZhbHVlLCB6ZXJv
UmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oTW92ZTMy
LCBBcmc6Olplcm9SZWcsIGRlc3Qua2luZCgpKSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdpZHRoMzIp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoTW92ZTMyLCBtX3ZhbHVlLCB6
ZXJvUmVnKCksIGRlc3QpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBjYXNlIEFpcjo6TW92ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3Jt
KFN0b3JlNjQsIEFyZzo6WmVyb1JlZywgZGVzdC5raW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0o
V2lkdGg2NCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChTdG9yZTY0LCBt
X3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxp
ZEZvcm0oTW92ZSwgQXJnOjpaZXJvUmVnLCBkZXN0LmtpbmQoKSkgJiYgZGVzdC5pc1ZhbGlkRm9y
bShXaWR0aDY0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KE1vdmUsIG1f
dmFsdWUsIHplcm9SZWcoKSwgZGVzdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI1NTksNiArMjU2Myw2OCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBQcmUtSW5kZXggUGF0dGVybjoKKyAgICAgICAgICAgIC8v
ICAgICBhZGRyZXNzID0gYWRkKGJhc2UsIG9mZnNldCkgIAorICAgICAgICAgICAgLy8gICAgIG1l
bW9yeSA9IGxvYWQoYWRkcmVzcywgMCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kUHJlSW5k
ZXggPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2Rl
ID0gdHJ5T3Bjb2RlRm9yVHlwZShNb3ZlV2l0aEluY3JlbWVudDMyLCBNb3ZlV2l0aEluY3JlbWVu
dDY0LCBtZW1vcnktPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShv
cGNvZGUsIEFyZzo6UHJlSW5kZXgsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBtZW1vcnktPmxh
c3RDaGlsZCgpOworICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSAhPSBBZGQg
fHwgIWFkZHJlc3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSB8fCBtZW1vcnktPm9mZnNldCgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgVmFsdWUq
IGJhc2UgPSBhZGRyZXNzLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgICAgICBWYWx1
ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBl
PihvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwg
IUFpcjo6QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKHNtYWxsT2Zmc2V0KSB8fCBtX3VzZUNvdW50
cy5udW1Vc2VzKGJhc2UpID4gMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgICAgICAgICAgaWYgKG1fdXNlQ291bnRzLm51bVVzZXMoYWRkcmVzcykgPT0gMSkg
eworICAgICAgICAgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1lbW9yeSwga2luZCwg
bWVtb3J5LCBBcmc6OmFkZHIodG1wKGJhc2UpLCBzbWFsbE9mZnNldCksIHRtcChtZW1vcnkpKSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIG1fcHJlSW5kZXhBZGRzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAg
ICAgICBhcHBlbmQob3Bjb2RlLCBBcmc6OnByZUluZGV4KHRtcChiYXNlKSwgc21hbGxPZmZzZXQp
LCB0bXAobWVtb3J5KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICBpZiAodHJ5QXBwZW5kUHJlSW5kZXgoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIGF1dG8gdHJ5QXBwZW5kUG9zdEluZGV4ID0g
WyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgLy8gICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9
IHRyeU9wY29kZUZvclR5cGUoTW92ZVdpdGhJbmNyZW1lbnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2
NCwgbWVtb3J5LT50eXBlKCkpOworICAgICAgICAgICAgLy8gICAgIGlmICghaXNWYWxpZEZvcm0o
b3Bjb2RlLCBBcmc6OlBvc3RJbmRleCwgQXJnOjpUbXApKQorICAgICAgICAgICAgLy8gICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAvLyAgICAgaWYgKCFtX2FkZEFkZHJlc3NUb0lu
c3QuY29udGFpbnMobWVtb3J5LT5sYXN0Q2hpbGQoKSkgfHwgbV91c2VDb3VudHMubnVtVXNlcyht
ZW1vcnktPmxhc3RDaGlsZCgpKSA+IDIpCisgICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAgICAgLy8gICAgIEluc3QqIGluc3QgPSBtX2FkZEFkZHJlc3NUb0lu
c3QuZ2V0KG1lbW9yeS0+bGFzdENoaWxkKCkpOworICAgICAgICAgICAgLy8gICAgIFZhbHVlKiBh
ZGRWYWx1ZSA9IGluc3QtPm9yaWdpbjsKKworICAgICAgICAgICAgLy8gICAgIGludHB0cl90IG9m
ZnNldCA9IGFkZFZhbHVlLT5jaGlsZCgxKS0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgIC8vICAg
ICBpZiAoc3VtT3ZlcmZsb3dzPGludHB0cl90PihvZmZzZXQsIG1lbW9yeS0+b2Zmc2V0KCkpKQor
ICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAvLyAgICAg
b2Zmc2V0ICs9IG1lbW9yeS0+b2Zmc2V0KCk7CisgICAgICAgICAgICAvLyAgICAgVmFsdWU6Ok9m
ZnNldFR5cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zm
c2V0KTsKKyAgICAgICAgICAgIC8vICAgICBpZiAoc21hbGxPZmZzZXQgIT0gb2Zmc2V0IHx8ICFB
aXI6OkFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybShtZW1vcnktPm9mZnNldCgpKSkKKyAgICAgICAg
ICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gICAgIG1lbW9yeS0+
c2V0T2Zmc2V0KHNtYWxsT2Zmc2V0KTsKKworICAgICAgICAgICAgLy8gICAgIGluc3QtPmtpbmQg
PSBBaXI6OktpbmQocmVsYXhlZE1vdmVGb3JUeXBlKGFkZFZhbHVlLT50eXBlKCkpKTsKKyAgICAg
ICAgICAgIC8vICAgICBpbnN0LT5hcmdzLmNsZWFyKCk7CisgICAgICAgICAgICAvLyAgICAgaW5z
dC0+YXBwZW5kKHRtcChhZGRWYWx1ZS0+Y2hpbGQoMCkpLCB0bXAoYWRkVmFsdWUpKTsKKyAgICAg
ICAgICAgIC8vICAgICBtX2FkZEFkZHJlc3NUb0luc3QucmVtb3ZlKG1lbW9yeS0+bGFzdENoaWxk
KCkpOworCisgICAgICAgICAgICAvLyAgICAgYXBwZW5kKG9wY29kZSwgQXJnOjpwb3N0SW5kZXgo
dG1wKG1lbW9yeS0+bGFzdENoaWxkKCkpLCBtZW1vcnktPm9mZnNldCgpKSwgdG1wKG1lbW9yeSkp
OworICAgICAgICAgICAgLy8gICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgLy8gfTsKKwor
ICAgICAgICAgICAgLy8gaWYgKHRyeUFwcGVuZFBvc3RJbmRleCgpKQorICAgICAgICAgICAgLy8g
ICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBr
aW5kLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtMjY4OCw2ICsyNzU0LDE3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBpZiAodHJ5QXBwZW5kQWRkV2l0aFNoaWZ0KGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBl
bmRBZGRXaXRoU2hpZnQocmlnaHQsIGxlZnQpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAor
ICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRQcmVJbmRleEFkZCA9IFsmXSAoKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlSW5kZXhBZGRzLmNvbnRhaW5zKG1fdmFsdWUpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgbV9wcmVJ
bmRleEFkZHMucmVtb3ZlKG1fdmFsdWUpOworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVk
TW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgdG1w
KG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRQcmVJbmRleEFkZCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkMzIsIEFkZDY0LCBBZGRE
b3VibGUsIEFkZEZsb2F0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkBAIC00MjY1LDYgKzQzNDIsOSBAQCBwcml2YXRlOgogICAgIElu
ZGV4TWFwPEIzOjpCYXNpY0Jsb2NrKiwgQWlyOjpCYXNpY0Jsb2NrKj4gbV9ibG9ja1RvQmxvY2s7
CiAgICAgSGFzaE1hcDxWYXJpYWJsZSosIFZlY3RvcjxUbXA+PiBtX3ZhcmlhYmxlVG9UbXBzOwog
CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX3ByZUluZGV4QWRkczsKKyAgICAvLyBIYXNoTWFwPFZh
bHVlKiwgSW5zdCo+IG1fYWRkQWRkcmVzc1RvSW5zdDsKKwogICAgIFVzZUNvdW50cyBtX3VzZUNv
dW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNoaWxkcmVuOwogICAgIEJsb2NrV29ya2xpc3Qg
bV9mYXN0V29ya2xpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJl
bmd0aC5jcHAKaW5kZXggMjI4MGZkNzcxMjUyZTcyNjBmNjg1MDUwOTJmZDU0M2NmZTA2MTg1Ny4u
MzUwYzlhZTYwNWRjMDM2NjhkZTNmYWMwMzIzNTllNzI2ODFlNWRjMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcApAQCAtMTkyOSw2ICsxOTI5LDIx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IG1fdmFsdWUtPmxhc3RD
aGlsZCgpOwogICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IG1fdmFsdWUtPmFzPE1l
bW9yeVZhbHVlPigpOwogCisgICAgICAgICAgICAvLyBQb3RlbnRpYWwgUHJlLUluZGV4IFBhdHRl
cm46CisgICAgICAgICAgICAvLyBMb2FkKEFkZChhZGRyZXNzLCBvZmZzZXQxKSwgb2Zmc2V0ID0g
MCkKKyAgICAgICAgICAgIGF1dG8gaXNQb3RlbnRpYWxQcmVJbmRleCA9IFsmXSAoKSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcy0+b3Bjb2RlKCkgIT0gQWRkIHx8ICFhZGRy
ZXNzLT5jaGlsZCgxKS0+aGFzSW50UHRyKCkgfHwgbWVtb3J5LT5vZmZzZXQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9w
Y29kZSgpICE9IExvYWQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBpZiAobWVtb3J5LT50eXBlKCkgIT0gSW50MzIgJiYgbWVtb3J5LT50eXBlKCkg
IT0gSW50NjQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmIChpc1Bv
dGVudGlhbFByZUluZGV4KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogTG9hZChBZGQoYWRkcmVzcywgb2Zmc2V0MSksIG9mZnNldCA9IG9mZnNl
dDIpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IExvYWQoYWRkcmVzcywgb2Zmc2V0ID0gb2Zm
c2V0MSArIG9mZnNldDIpCiAgICAgICAgICAgICAvLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuY3BwCmluZGV4IDEwM2M2ZWNjYTNkMzE0YmI0ZWQ4YzAyYTRkMmYwMDljYTY0MWQw
MDEuLjc3ZWU4NDI1MTI0YjlkOGI4YzU4MmYzOWZmOTY5ZjYwZmQxNmNjMDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKQEAgLTEzMCw2ICsxMzAsMTEgQEAgdW5zaWdu
ZWQgQXJnOjpqc0hhc2goKSBjb25zdAogICAgICAgICByZXN1bHQgKz0gbV9iYXNlLmludGVybmFs
VmFsdWUoKTsKICAgICAgICAgcmVzdWx0ICs9IG1faW5kZXguaW50ZXJuYWxWYWx1ZSgpOwogICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFByZUluZGV4OgorICAgIGNhc2UgUG9zdEluZGV4OgorICAg
ICAgICByZXN1bHQgKz0gbV9vZmZzZXQ7CisgICAgICAgIHJlc3VsdCArPSBtX2Jhc2UuaW50ZXJu
YWxWYWx1ZSgpOworICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YWNrOgogICAgICAgICByZXN1
bHQgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2NhbGUpOwogICAgICAgICByZXN1bHQgKz0g
c3RhY2tTbG90KCktPmluZGV4KCk7CkBAIC0xNjEsNyArMTY2LDcgQEAgdm9pZCBBcmc6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50ZigiJDB4JWxseCIsIHN0
YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4obV9vZmZzZXQpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgWmVyb1JlZzoKLSAgICAgICAgb3V0LnByaW50KCIlJXh6ciIpOworICAgICAg
ICBvdXQucHJpbnQoIiV4enIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2ltcGxlQWRk
cjoKICAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOwpAQCAtMTgwLDYgKzE4NSwx
MiBAQCB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICAgICAg
b3V0LnByaW50KCIsIiwgc2NhbGUoKSk7CiAgICAgICAgIG91dC5wcmludCgiKSIpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFz
ZSgpLCAiLFByZSgkIiwgb2Zmc2V0KCksICIpKSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBQb3N0SW5kZXg6CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIixQb3N0KCQiLCBv
ZmZzZXQoKSwgIikpIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFN0YWNrOgogICAgICAg
ICBpZiAob2Zmc2V0KCkpCiAgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOwpAQCAtMjYx
LDYgKzI3MiwxMiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpL
aW5kIGtpbmQpCiAgICAgY2FzZSBBcmc6OkluZGV4OgogICAgICAgICBvdXQucHJpbnQoIkluZGV4
Iik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6UHJlSW5kZXg6CisgICAgICAgIG91
dC5wcmludCgiUHJlSW5kZXgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpQb3N0
SW5kZXg6CisgICAgICAgIG91dC5wcmludCgiUG9zdEluZGV4Iik7CisgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIEFyZzo6UmVsQ29uZDoKICAgICAgICAgb3V0LnByaW50KCJSZWxDb25kIik7CiAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQXJnLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCmluZGV4IGNl
NWE0ZTczNzlhZDY0NDQ1ZjBjM2FiZDEyOWYzMjliOTQ3ZmU4MTIuLmVhMjI2MjhhZTEyZTExZmVi
NDVkZjY3YWNmM2RhOGQ2ODYwYjRmZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuaApAQCAtMSwzICsxLDQgQEAKKwogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC03Nyw2ICs3OCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgU3RhY2ssCiAgICAgICAgIENhbGxBcmcsCiAgICAgICAgIEluZGV4LAorICAg
ICAgICBQcmVJbmRleCwKKyAgICAgICAgUG9zdEluZGV4LAogCiAgICAgICAgIC8vIEltbWVkaWF0
ZSBvcGVyYW5kcyB0aGF0IGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3Igb2YgYW4gb3BlcmF0aW9uLiBZ
b3UgY2FuIHRoaW5rIG9mIHRoZW0gYXMKICAgICAgICAgLy8gc2Vjb25kYXJ5IG9wY29kZXMuIFRo
ZXkgYXJlIGFsd2F5cyAiVXNlIidkLgpAQCAtNjQ5LDYgKzY1MiwzMCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBBcmc6OmluZGV4KGJhc2UsIGluZGV4LCBzY2FsZSwgMCk7CiAgICAgfQogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0
PEludD4+CisgICAgc3RhdGljIEFyZyBwcmVJbmRleChBaXI6OlRtcCBiYXNlLCBJbnQgaW5kZXgp
CisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNJ
bnQ5KGluZGV4KSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQg
PSBQcmVJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IGluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJ
bnQ+PgorICAgIHN0YXRpYyBBcmcgcG9zdEluZGV4KEFpcjo6VG1wIGJhc2UsIEludCBpbmRleCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc0lu
dDkoaW5kZXgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IFBvc3RJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IGluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAg
IHN0YXRpYyBBcmcgcmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24pCiAgICAgewogICAgICAgICBBcmcgcmVzdWx0OwpAQCAtNzk5LDYgKzgyNiwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CiAgICAgfQogCisgICAg
Ym9vbCBpc1ByZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
UHJlSW5kZXg7CisgICAgfQorCisgICAgYm9vbCBpc1Bvc3RJbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4ga2luZCgpID09IFBvc3RJbmRleDsKKyAgICB9CisKICAgICBib29sIGlz
TWVtb3J5KCkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CkBAIC04MDgs
NiArODQ1LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENh
bGxBcmc6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAg
ICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05NzIsNyArMTAxMSw3IEBAIHB1
YmxpYzoKIAogICAgIEFpcjo6VG1wIGJhc2UoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBTaW1wbGVBZGRyIHx8IGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRl
bmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTaW1wbGVBZGRyIHx8IGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9m
ZnNldEFkZHIgfHwga2luZCgpID09IEluZGV4IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8fCBraW5k
KCkgPT0gUG9zdEluZGV4KTsKICAgICAgICAgcmV0dXJuIG1fYmFzZTsKICAgICB9CiAKQEAgLTk4
Miw3ICsxMDIxLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGtpbmQoKSA9PSBTdGFj
aykKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9z
Y2FsZSk7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5k
ZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRB
ZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCB8fCBraW5kKCkgPT0g
UHJlSW5kZXggfHwga2luZCgpID09IFBvc3RJbmRleCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9vZmZzZXQpOwogICAgIH0KIApAQCAtMTA0NCw2ICsx
MDgzLDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5k
ZWRPZmZzZXRBZGRyOgogICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIFByZUluZGV4
OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgY2FzZSBTdGFjazoKICAgICAgICAg
Y2FzZSBDYWxsQXJnOgogICAgICAgICBjYXNlIFJlbENvbmQ6CkBAIC0xMDgxLDYgKzExMjIsOCBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNl
dEFkZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAg
ICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENh
bGxBcmc6CiAgICAgICAgIGNhc2UgQmlnSW1tOiAvLyBZZXMsIHdlIGFsbG93IEJpZ0ltbSBhcyBh
IGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBz
LgpAQCAtMTIzNyw2ICsxMjgwLDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNM
ZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBib29sIGlzVmFsaWRQcmVJbmRleEZvcm0oSW50
IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICByZXR1
cm4gaXNWYWxpZFNpZ25lZEltbTkob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdh
bE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBib29sIGlzVmFsaWRQb3N0SW5kZXhGb3JtKEludCBv
ZmZzZXQpCisgICAgeworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgcmV0dXJu
IGlzVmFsaWRTaWduZWRJbW05KG9mZnNldCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKICAgICAvLyBJZiB5b3UgZG9uJ3QgcGFzcyBhIHdpZHRoIHRoZW4gdGhpcyBvcHRpbWlzdGlj
YWxseSBhc3N1bWVzIHRoYXQgeW91J3JlIHVzaW5nIHRoZSByaWdodCB3aWR0aC4gQnV0CiAgICAg
Ly8gdGhlIHdpZHRoIGlzIHJlbGV2YW50IHRvIHZhbGlkaXR5LCBzbyBwYXNzaW5nIGEgbnVsbCB3
aWR0aCBpcyBvbmx5IHVzZWZ1bCBmb3IgYXNzZXJ0aW9ucy4gRG9uJ3QKICAgICAvLyBwYXNzIG51
bGwgd2lkdGhzIHdoZW4gY2FzY2FkaW5nIHRocm91Z2ggQXJncyBpbiB0aGUgaW5zdHJ1Y3Rpb24g
c2VsZWN0b3IhCkBAIC0xMjY1LDYgKzEzMjQsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0
dXJuIGlzVmFsaWRBZGRyRm9ybShvZmZzZXQoKSwgd2lkdGgpOwogICAgICAgICBjYXNlIEluZGV4
OgogICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRJbmRleEZvcm0oc2NhbGUoKSwgb2Zmc2V0KCks
IHdpZHRoKTsKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpc1Zh
bGlkUHJlSW5kZXhGb3JtKG9mZnNldCgpKTsKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CisgICAg
ICAgICAgICByZXR1cm4gaXNWYWxpZFBvc3RJbmRleEZvcm0ob2Zmc2V0KCkpOwogICAgICAgICBj
YXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVD
b25kOgpAQCAtMTI4NCw2ICsxMzQ3LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIFNpbXBsZUFk
ZHI6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6
CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAg
ICAgICAgZnVuY3RvcihtX2Jhc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
SW5kZXg6CkBAIC0xMzI2LDYgKzEzOTEsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU2ltcGxl
QWRkcjoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRk
cjoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAg
ICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCwgYXJnUm9sZSA9PSBVc2VBZGRyID8gYXJn
V2lkdGggOiBwb2ludGVyV2lkdGgoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBJbmRleDoKQEAgLTEzODMsNiArMTQ1MCwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9vZmZzZXQpLCBtX2V4dGVuZCk7CiAgICAgfQog
CisgICAgTWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzcyBhc1ByZUluZGV4QWRkcmVzcygp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNQcmVJbmRleCgpKTsKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyOjpQcmVJbmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBvZmZzZXQo
KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MgYXNQb3N0
SW5kZXhBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Bvc3RJbmRleCgp
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKG1fYmFz
ZS5ncHIoKSwgb2Zmc2V0KCkpOworICAgIH0KKwogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uIGFzUmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaXNSZWxDb25kKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcAppbmRleCA5MDVlNjE3ZmJkZTBlMmI3ZDc1NTU2M2U2
ODg1ODliZGFkNzI2YzgwLi42YWQwNTg0MjY3YjhjN2VlNzE0OWIwMmY4MjMxNTcyYmVlOGNmOGFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tB
cmdzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tB
cmdzLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgbG93ZXJTdGFja0FyZ3MoQ29kZSYgY29k
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBX
aWR0aDMyKTsKIAogI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
aXI6Ok9wY29kZSBzdG9yZU9wY29kZSA9IFN0b3JlMzI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQWlyOjpPcGNvZGUgc3RvcmVPcGNvZGUgPSBNb3ZlMzI7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWlyOjpBcmc6OktpbmQgb3BlcmFuZEtpbmQgPSBBcmc6Olplcm9SZWc7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWlyOjpBcmcgb3BlcmFuZCA9IEFyZzo6emVyb1Jl
ZygpOwogI2VsaWYgQ1BVKFg4Nl82NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wY29kZS5vcGNvZGVzCmluZGV4IDY2MWVhZGQyMzczYzU0YTRiYmE5NDdhNTRiZGEyNTU3
YmRiOGFlNGEuLmFmZGNmZjE2MmI1NGFhYWIxNzc3ZjdhYTQyNGFhYjU4MDlmMzdlNWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwpAQCAtNjQ3
LDYgKzY0Nyw5IEBAIE1vdmUgVTpHOlB0ciwgRDpHOlB0cgogICAgIEluZGV4LCBUbXAgYXMgbG9h
ZFB0cgogICAgIFRtcCwgQWRkciBhcyBzdG9yZVB0cgogICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQ
dHIKKyAgICBhcm02NDogWmVyb1JlZywgQWRkciBhcyBzdG9yZTY0CisgICAgYXJtNjQ6IFplcm9S
ZWcsIEluZGV4IGFzIHN0b3JlNjQKKwogICAgIHg4NjogSW1tLCBBZGRyIGFzIHN0b3JlUHRyCiAK
ICMgVGhpcyBpcyBmb3IgbW92aW5nIGJldHdlZW4gc3BpbGwgc2xvdHMuCkBAIC02NjEsMjggKzY2
NCwzNCBAQCB4ODZfNjQ6IFN3YXA2NCBVRDpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKICAg
ICBUbXAsIEFkZHIKIAorYXJtNjQ6IE1vdmVXaXRoSW5jcmVtZW50NjQgVTpHOjY0LCBVRDpHOjY0
CisgICAgUHJlSW5kZXgsIFRtcCBhcyBsb2FkNjQKKyAgICBQb3N0SW5kZXgsIFRtcCBhcyBsb2Fk
NjQKKyAgICBUbXAsIFByZUluZGV4IGFzIHN0b3JlNjQKKyAgICBUbXAsIFBvc3RJbmRleCBhcyBz
dG9yZTY0CisKIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCBhcyB6ZXJvRXh0
ZW5kMzJUb1dvcmQKICAgICBBZGRyLCBUbXAgYXMgbG9hZDMyCiAgICAgSW5kZXgsIFRtcCBhcyBs
b2FkMzIKICAgICBUbXAsIEFkZHIgYXMgc3RvcmUzMgogICAgIFRtcCwgSW5kZXggYXMgc3RvcmUz
MgorICAgIGFybTY0OiBaZXJvUmVnLCBBZGRyIGFzIHN0b3JlMzIKKyAgICBhcm02NDogWmVyb1Jl
ZywgSW5kZXggYXMgc3RvcmUzMgogICAgIHg4NjogSW1tLCBUbXAgYXMgemVyb0V4dGVuZDMyVG9X
b3JkCiAgICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmUzMgogICAgIHg4NjogSW1tLCBJbmRleCBh
cyBzdG9yZTMyCiAKK2FybTY0OiBNb3ZlV2l0aEluY3JlbWVudDMyIFU6RzozMiwgVVpEOkc6MzIK
KyAgICBQcmVJbmRleCwgVG1wIGFzIGxvYWQzMgorICAgIFBvc3RJbmRleCwgVG1wIGFzIGxvYWQz
MgorICAgIFRtcCwgUHJlSW5kZXggYXMgc3RvcmUzMgorICAgIFRtcCwgUG9zdEluZGV4IGFzIHN0
b3JlMzIKKwogIyBUaGlzIGlzIGZvciBtb3ZpbmcgYmV0d2VlbiBzcGlsbCBzbG90cy4KIE1vdmUz
MiBVOkc6MzIsIFpEOkc6MzIsIFM6RzozMgogICAgIEFkZHIsIEFkZHIsIFRtcAogCi1hcm02NDog
U3RvcmUzMiBVOkc6MzIsIFpEOkc6MzIKLSAgICBaZXJvUmVnLCBBZGRyCi0gICAgWmVyb1JlZywg
SW5kZXgKLQotYXJtNjQ6IFN0b3JlNjQgVTpHOjY0LCBEOkc6NjQKLSAgICBaZXJvUmVnLCBBZGRy
Ci0gICAgWmVyb1JlZywgSW5kZXgKLQogU2lnbkV4dGVuZDMyVG9QdHIgVTpHOjMyLCBEOkc6UHRy
CiAgICAgVG1wLCBUbXAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9vcGNvZGVfZ2VuZXJhdG9yLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNv
ZGVfZ2VuZXJhdG9yLnJiCmluZGV4IDM3NDBlZmRiZGQxNDZhMzdmNmVkZTlkZGJjMjNkZGJhMDNi
MDc2NDYuLmYxYmYxYTQ2Y2ZjODg5ZWMxOTM0NmYyYzA2YjdjZjUwZjllM2RlMGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKQEAgLTIy
OSw3ICsyMjksNyBAQCBkZWYgaXNHRih0b2tlbikKIGVuZAogCiBkZWYgaXNLaW5kKHRva2VuKQot
ICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQp
fChaZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFkZHIpfChFeHRlbmRlZE9mZnNldEFkZHIpfChJbmRl
eCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCl8KFN0YXR1c0NvbmQpKVxaLworICAg
IHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQpfCha
ZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFkZHIpfChFeHRlbmRlZE9mZnNldEFkZHIpfChJbmRleCl8
KFByZUluZGV4KXwoUG9zdEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25kKXwo
U3RhdHVzQ29uZCkpXFovCiBlbmQKIAogZGVmIGlzQXJjaCh0b2tlbikKQEAgLTMwMyw3ICszMDMs
NyBAQCBjbGFzcyBQYXJzZXIKIAogICAgIGRlZiBjb25zdW1lS2luZAogICAgICAgICByZXN1bHQg
PSB0b2tlbi5zdHJpbmcKLSAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBC
aWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFplcm9SZWcsIFRtcCwgU2ltcGxlQWRkciwgQWRkciwg
RXh0ZW5kZWRPZmZzZXRBZGRyLCBJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgRG91YmxlQ29uZCwg
b3IgU3RhdHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAgcGFyc2VFcnJv
cigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFplcm9SZWcs
IFRtcCwgU2ltcGxlQWRkciwgQWRkciwgRXh0ZW5kZWRPZmZzZXRBZGRyLCBJbmRleCwgUHJlSW5k
ZXgsIFBvc3RJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgRG91YmxlQ29uZCwgb3IgU3RhdHVzQ29u
ZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKICAgICAgICAgYWR2YW5jZQogICAgICAgICByZXN1
bHQKICAgICBlbmQKQEAgLTkyOSw2ICs5MjksMTIgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQi
KSB7CiAgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgiCiAgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRJbmRleEZvcm0oYXJnc1sje2luZGV4fV0uc2NhbGUo
KSwgYXJnc1sje2luZGV4fV0ub2Zmc2V0KCksICN7YXJnLndpZHRoQ29kZX0pKSIKICAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAg
ICAgICB3aGVuICJQcmVJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAo
IUFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSkpIgorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAg
ICAgICAgICAgIHdoZW4gIlBvc3RJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoIUFyZzo6aXNWYWxpZFBvc3RJbmRleEZvcm0oYXJnc1sje2luZGV4fV0ub2Zmc2V0KCkp
KSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIK
ICAgICAgICAgICAgICAgICB3aGVuICJCaWdJbW0iCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVs
Q29uZCIKICAgICAgICAgICAgICAgICB3aGVuICJSZXNDb25kIgpAQCAtMTIzNSw2ICsxMjQxLDEw
IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgICAgICBvdXRw
LnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIKICAgICAgICAgICAgICAgICB3aGVu
ICJJbmRleCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0u
YXNCYXNlSW5kZXgoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJQcmVJbmRleCIKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNQcmVJbmRleEFkZHJlc3Mo
KSIKKyAgICAgICAgICAgICAgICB3aGVuICJQb3N0SW5kZXgiCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUG9zdEluZGV4QWRkcmVzcygpIgogICAgICAg
ICAgICAgICAgIHdoZW4gIlJlbENvbmQiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
ImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENvbmRpdGlvbigpIgogICAgICAgICAgICAgICAg
IHdoZW4gIlJlc0NvbmQiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggYzcwMzJlYzA4
NGRkZmRkOTM1ZTU1MjdmYWFlOTM1NjgxOTg0ODE3OS4uYjIyZDg0NjFjZjFiMTNjZjg1ZDE2NmE3
MmFmZGJhMjQ5YzI4ZDUzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMTE0MCw0
ICsxMTQwLDkgQEAgdm9pZCBhZGRDb3B5VGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mKTsKIAogYm9vbCBzaG91bGRSdW4oY29uc3QgY2hh
ciogZmlsdGVyLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSk7CiAKK3ZvaWQgdGVzdExvYWRQcmVJbmRl
eDMyKCk7Cit2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpOwordm9pZCB0ZXN0TG9hZFBvc3RJbmRl
eCgpOwordm9pZCB0ZXN0SWZoeWooKTsKKwogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAppbmRleCA0YzUyYWRhOWNjNDAyZGRlNTM5ODhj
YzhmMmY1ZTllMGRkZTJlMTFjLi5iYWZhNjBjZDEwNTY4NzNmYmZlMWRmMjYzYzBhMTBhNTRmZjJh
Mzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKQEAgLTI4LDYgKzI4LDI3
MSBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorCit2b2lkIHRlc3RJZmh5aigpCit7CisgICAg
aWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0aGVuQmxvY2sgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiBy
ID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIFJvb3RfQmxvY2sKKyAgICAvLyB5ID0gYWRkcjAgKyAxCisgICAgLy8gcjEgPSAwCisgICAg
Ly8gVXBzaWxvbihyMSwgXnIzKQorICAgIC8vIGlmIHkgIT0gYWRkcjEgZ290byBkb25lCisgICAg
VmFsdWUqIHkgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBBZGQsIE9y
aWdpbigpLCAKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLCAKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDgpKTsKKyAgICBWYWx1ZSogcjEgPSBy
b290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCk7CisgICAgcm9v
dC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCBy
MSk7CisgICAgVmFsdWUqIGNvbmQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE5vdEVx
dWFsLCBPcmlnaW4oKSwgeSwgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2Nr
KGRvbmUpLCBGcmVxdWVudGVkQmxvY2sodGhlbkJsb2NrKSk7CisKKyAgICAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFRoZW5fQmxvY2sKKyAgICAvLyB6ID0gTG9hZCh5LCAwKQorICAgIC8vIHIy
ID0geSArIHoKKyAgICAvLyBVcHNpbG9uKHIyLCBecjMpCisgICAgTWVtb3J5VmFsdWUqIHogPSB0
aGVuQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdp
bigpLCB5KTsKKyAgICBWYWx1ZSogcjIgPSB0aGVuQmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQWRkLCBPcmlnaW4oKSwgeSwgeik7CisgICAgdGhlbkJsb2NrLT5hcHBlbmROZXc8VmFyaWFi
bGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIyKTsKKyAgICB0aGVuQmxvY2st
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJs
b2NrKGRvbmUpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jawor
ICAgIC8vIHIzID0gUGhpKCkKKyAgICAvLyByZXR1cm4gcjMKKyAgICBWYWx1ZSogcjMgPSBkb25l
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOwor
ICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBy
Myk7CisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7
CisgICAgZml4U1NBKHByb2MpOworCisgICAgY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KDBMKSwgYml0d2lzZV9jYXN0PGludHB0cl90PigwTCkpOwor
fQorCit2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNb
XSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQzMl90KiBwdHIg
PSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9j
LmFkZFZhcmlhYmxlKEludDMyKTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUo
SW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAg
Ly8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKSAgICAgICAgICAgICAKKyAgICAvLyBw
MSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+
YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCAwKTsKKyAgICByb290LT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsK
KyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZh
cmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxv
Y2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0
X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGko
KQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOwor
ICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVx
dWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9IHAyICsg
MQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMykKKyAg
ICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHAzID0g
bG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BC
b2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCkpOworICAgIGxv
b3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCks
IHAsIHAzKTsKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJv
YywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBwMykpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29w
Qm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9u
ZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsgIAorCisgICAgcHJv
Yy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShw
cm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FS
TTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzRdISIpOworCisg
ICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDMyX3QgeworICAgICAgICBpbnQzMl90IHIgPSAw
OworICAgICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqKytwdHI7CisgICAg
ICAgIHJldHVybiByOworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50MzJfdD4oKmNv
ZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVz
dExvYWRQcmVJbmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwo
KSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAz
LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDY0X3QqIHB0ciA9IG51bXM7CisKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUg
PSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUo
SW50NjQpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAg
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAgICAvLyByMSA9IDAKKyAg
ICAvLyBVcHNpbG9uKHIxLCBecjIpICAgICAgICAgICAgIAorICAgIC8vIHAxID0gYWRkcgorICAg
IC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmRJbnRDb25z
dGFudChwcm9jLCBPcmlnaW4oKSwgSW50NjQsIDApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJp
YWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAgIFZhbHVlKiBw
MSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkp
OworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxvY2sKKyAgICAv
LyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisgICAgLy8gaWYg
cjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFsdWUqIHAy
ID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmln
aW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhk
b25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHAzID0gcDIgKyAxCisgICAgLy8gVXBz
aWxvbihwMywgXnAyKQorICAgIC8vIHIzID0gcjIgKyBsb2FkKHAzKQorICAgIC8vIFVwc2lsb24o
cjMsIF5yMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5l
dzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KSk7CisgICAgbG9vcEJvZHktPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAg
IFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2lu
KCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2
NCwgT3JpZ2luKCksIHAzKSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVl
Pihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29w
VGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2NrCisgICAg
Ly8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOyAgIAorCisgICAgcHJvYy5yZXNldFJlYWNo
YWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAg
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzhdISIpOworCisgICAgYXV0byB0ZXN0
ID0gWyZdICgpIC0+IGludDY0X3QgeworICAgICAgICBpbnQ2NF90IHIgPSAwOworICAgICAgICB3
aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqKytwdHI7CisgICAgICAgIHJldHVybiBy
OworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50NjRfdD4oKmNvZGUsIGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQb3N0SW5k
ZXgoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDksIDEwIH07CisgICAgaW50NjRfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJv
ZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxv
Y2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisgICAg
VmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24o
cjEsIF5yMikgICAgICAgICAgICAgCisgICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihw
MSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9y
aWdpbigpLCBJbnQ2NCwgMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHBy
b2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0
LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9j
LCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAg
Ly8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3Rv
IGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAg
ICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1
YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJv
YywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9v
cF9Cb2R5X0Jsb2NrCisgICAgLy8gcjMgPSByMiArIGxvYWQocDIpCisgICAgLy8gcDMgPSBwMiAr
IDEKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAg
IC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
Pihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksIHAyKSk7CisgICAgVmFsdWUqIHAzID0gbG9v
cEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5
LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCkpOworICAgIGxvb3BC
b2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIs
IHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpT
ZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAg
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAg
IC8vIHJldHVybiByMgorICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCByMik7IAorCisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAg
IHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8gdGVzdCA9IFsm
XSAoKSAtPiBpbnQ2NF90IHsKKyAgICAgICAgaW50NjRfdCByID0gMDsKKyAgICAgICAgd2hpbGUg
KHIgPCAxMCkKKyAgICAgICAgICAgIHIgKz0gKnB0cisrOworICAgICAgICByZXR1cm4gcjsKKyAg
ICB9OworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCisKIHZvaWQgdGVzdEluc2VydFNp
Z25lZEJpdGZpZWxkSW5aZXJvMzIoKQogewogICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRC
M09wdExldmVsKCkgPCAyKQpAQCAtMzY5Nyw2ICszOTYyLDExIEBAIHZvaWQgYWRkU2hyVGVzdHMo
Y29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRh
c2tzKQogICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDApKTsKICAgICBSVU4o
dGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCAxKSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1t
MzIoMHhmZmZmZmZmZiwgNjMpKTsKKworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4MzIoKSk7Cisg
ICAgUlVOKHRlc3RMb2FkUHJlSW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdExvYWRQb3N0SW5kZXgo
KSk7CisgICAgUlVOKHRlc3RJZmh5aigpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cAppbmRleCA2M2UyNjY3ODg1MjAxOGE3NjgwY2E1ZjA3MTQ2OTY4MTA1ODg0YjNiLi42OWJiNmIy
YmU4MTg3MGI1OTgzMzM2N2FmMjY3NWI3ZjRlZjA1NmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKQEAgLTIzMyw4ICsyMzMsOCBA
QCBzdGF0aWMgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGppdFdyaXRlVGh1bmtHZW5lcmF0bwogICAgIGppdC5yZXQoKTsKIAogICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb2NhbDAgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQubG9hZDY0KHgxLCBQ
b3N0SW5kZXgoOCksIHg2KTsKLSAgICBqaXQuc3RvcmU2NCh4NiwgeDMsIFBvc3RJbmRleCg4KSk7
CisgICAgaml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyh4MSwgOCks
IHg2KTsKKyAgICBqaXQuc3RvcmU2NCh4NiwgTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJl
c3MoeDMsIDgpKTsKICAgICBzbWFsbENvcHkubGluaygmaml0KTsKICAgICBqaXQuYnJhbmNoU3Vi
NjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgVHJ1c3RlZEltbTMyKDgpLCB4MikubGlu
a1RvKGxvY2FsMCwgJmppdCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbG9jYWwyID0gaml0
LmJyYW5jaEFkZDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgVHJ1c3RlZEltbTMyKDgpLCB4Mik7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434197</attachid>
            <date>2021-07-26 02:57:51 -0700</date>
            <delta_ts>2021-07-26 22:51:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210726045749.patch</filename>
            <type>text/plain</type>
            <size>46781</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMjg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
ODc4NjRiMTliZDI0ZTM3ZmM2YWJiMzlmNzgwODMwNjExZTg0NDc1Li43MzcxZDBlZjk1YTMwYTg2
ZWIzMjI5MGI1NmNjYmNmMGI0YmJjNjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MCBAQAorMjAyMS0wNy0yNiAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzOjpQcmVJbmRleEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzOjpQ
b3N0SW5kZXhBZGRyZXNzKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6c3RvcmUzMik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAg
ICAgKEpTQzo6dGVzdFN0b3JlUHJlUG9zdEluZGV4MzIpOgorICAgICAgICAoSlNDOjp0ZXN0U3Rv
cmVQcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJlUG9zdEluZGV4MzIp
OgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJbmRleDY0KToKKyAgICAgICAgKiBiMy9C
M0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwOgorICAg
ICAgICAqIGIzL2Fpci9BaXJBcmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Ompz
SGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwcmVJbmRleCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6cG9zdEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1By
ZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1Bvc3RJbmRleCBj
b25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNNZW1vcnkgY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmJhc2UgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNH
UCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZFBvc3RJbmRleEZvcm0pOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVmFsaWRGb3JtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpmb3JFYWNoVG1wRmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Zm9yRWFj
aFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNQcmVJbmRleEFkZHJlc3MgY29u
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUG9zdEluZGV4QWRkcmVzcyBjb25z
dCk6CisgICAgICAgICogYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6bG93ZXJTdGFja0FyZ3MpOgorICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUu
b3Bjb2RlczoKKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYjoKKyAgICAgICAg
KiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0
SWZoeWopOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDMyKToKKyAgICAgICAgKHRlc3RMb2Fk
UHJlSW5kZXg2NCk6CisgICAgICAgICh0ZXN0TG9hZFBvc3RJbmRleDY0KToKKyAgICAgICAgKGFk
ZFNoclRlc3RzKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTI0ICBZdXN1a2Ug
U3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gQ2hhbmdlIG1vc3Qg
b2YgZW51bSBpbiBZYXJyIHRvIGVudW0tY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKaW5kZXggM2QxOTQ5
YTQwNzg1ZDk5Y2E2MTU5NWFhYjA0YmU2ZjFkMGQ5NmJhMy4uMjM1NGM0NTM2OGM3YzBkNWNlOTAx
OGFjZmYyODRjNGEwYTA0MzFhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAgLTI0NSw2ICsyNDUsMzQg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8vIFByZUluZGV4QWRkcmVzczoK
KyAgICAvLworICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFu
ZCBwcmUtaW5jcmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3QgUHJlSW5kZXhBZGRy
ZXNzIHsKKyAgICAgICAgUHJlSW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4
KQorICAgICAgICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAg
IGludCBpbmRleDsKKyAgICB9OworCisgICAgLy8gUG9zdEluZGV4QWRkcmVzczoKKyAgICAvLwor
ICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwb3N0LWlu
Y3JlbWVudC9kZWNyZW1lbnQgaW5kZXguCisgICAgc3RydWN0IFBvc3RJbmRleEFkZHJlc3Mgewor
ICAgICAgICBQb3N0SW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAg
ICAgICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBp
bmRleDsKKyAgICB9OworCiAgICAgLy8gQWJzb2x1dGVBZGRyZXNzOgogICAgIC8vCiAgICAgLy8g
RGVzY3JpYmVzIGFuIG1lbW9yeSBvcGVyYW5kIGdpdmVuIGJ5IGEgcG9pbnRlci4gIEZvciByZWd1
bGFyIGxvYWQgJiBzdG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZl
MTE1ZmM2OGQ2OTA5MGZkLi4yYTkxMmQwZGQyNjYyNmJkNzRlMTAzYmVmOTY1ZjJiYWRmY2UwYmQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNNjQuaApAQCAtMTQ0NSw5ICsxNDQ1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbG9h
ZDw2ND4oYWRkcmVzcywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkNjQoUmVnaXN0ZXJJ
RCBzcmMsIFBvc3RJbmRleCBzaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQo
UHJlSW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgbV9h
c3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMsIHNpbW0pOworICAgICAgICBtX2Fzc2VtYmxlci5s
ZHI8NjQ+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGxvYWQ2NChQb3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4
KHNyYy5pbmRleCkpOwogICAgIH0KIAogICAgIERhdGFMYWJlbDMyIGxvYWQ2NFdpdGhBZGRyZXNz
T2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCkBAIC0xNTQ0LDYg
KzE1NDksMTYgQEAgcHVibGljOgogICAgICAgICBsb2FkPDMyPihhZGRyZXNzLCBkZXN0KTsKICAg
ICB9CiAKKyAgICB2b2lkIGxvYWQzMihQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQ
cmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihQb3N0SW5kZXhB
ZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bGRyPDMyPihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKwog
ICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRy
ZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0
aGlzKTsKQEAgLTE3MzMsNyArMTc0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVy
LmFkZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mu
aW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAg
IG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rl
cik7CiAgICAgfQotICAgIAorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBQcmVJ
bmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3Jj
LCBkZXN0LmJhc2UsIFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0
b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2UsIFBvc3RJbmRleChkZXN0Lmlu
ZGV4KSk7CisgICAgfQorCiAgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBjb25zdCB2
b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgc3RvcmU8NjQ+KHNyYywgYWRkcmVzcyk7CkBA
IC0xNzc3LDExICsxODAyLDYgQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KGRhdGFUZW1wUmVn
aXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkZXN0LCBQb3N0SW5kZXggc2ltbSkKLSAgICB7Ci0gICAgICAgIG1fYXNz
ZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LCBzaW1tKTsKLSAgICB9Ci0gICAgCiAgICAgRGF0YUxh
YmVsMzIgc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJl
c3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAt
MTg3OSw2ICsxODk5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzKTsKICAgICB9CiAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMs
IFByZUluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMy
PihzcmMsIGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKworICAgIHZv
aWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUG9zdEluZGV4KGRl
c3QuaW5kZXgpKTsKKyAgICB9CisKICAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NP
ZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAg
ICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvdGVzdG1hc20uY3BwCmluZGV4IGYyMmJmZmNlMTU1NGIwMmMyMjZjMjE0OTJhYjA2N2Jh
YjM4YzQwYjUuLjUzNGVmZTE0M2Y3OTBiOTA5ODliYzJjYzYzZmYwOWEwNDY3ZTU1N2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCkBAIC0yMjEyLDYg
KzIyMTIsMTc2IEBAIHZvaWQgdGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCiAg
ICAgICAgIH0KICAgICB9CiB9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKQorewor
ICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50cHRyX3QgYWRkciA9IGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMyX3QgaW5kZXggPSBzaXpl
b2YoaW50MzJfdCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQzMl90IHNyYykgeworICAg
ICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAqKytw
MSA9IDQ7IHJldHVybiBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRH
UFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIx
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVw
aWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAg
ICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisg
ICAgaW50MzJfdCogcDEgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QxKDQpKTsKKyAgICBD
SEVDS19FUSgqcDEsIDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1zWzFdKTsKKworICAgIGF1
dG8gdGVzdDIgPSBbJl0gKGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21w
aWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsgcmV0dXJuIHAyOworICAg
ICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6
OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAg
ICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAg
ICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0
cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCogcDIgPSBiaXR3
aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19FUSgqcDIsIDQpOworICAg
IENIRUNLX0VRKCotLXAyLCA1KTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVQb3N0SW5kZXg2NCgp
Cit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnRwdHJfdCBhZGRy
ID0gYml0d2lzZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAgaW50MzJfdCBpbmRleCA9
IHNpemVvZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3Qgc3JjKSB7
CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8v
ICorK3AxID0gNDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1
bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07
CisKKyAgICBpbnQ2NF90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDEoNCkpOwor
ICAgIENIRUNLX0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEsIG51bXNbMV0pOworCisg
ICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9
IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysgPSA1OyByZXR1cm4gcDI7
CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVs
cGVyczo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7Cisg
ICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAg
ICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8
aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2NF90KiBwMiA9
IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDIoNSkpOworICAgIENIRUNLX0VRKCpwMiwgNCk7
CisgICAgQ0hFQ0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4
MzIoKQoreworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBp
bmRleCA9IHNpemVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDMyX3Qg
cmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAg
ICAgICAgIC8vIHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAg
aml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5z
dG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6
OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGpp
dC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0
LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90Pihsb2Fk
LCAmbnVtc1sxXSk7CisgICAgfTsKKyAgICAKKyAgICBDSEVDS19FUSh0ZXN0MSg0KSwgMyk7Cisg
ICAgQ0hFQ0tfRVEobnVtc1syXSwgNCk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQzMl90
IHJlcGxhY2UpIHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVy
cyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAg
ICAgICAgICAvLyByZXMgPSAqcDIrKzsgKnAyID0gNTsgcmV0dXJuIHJlczsKKyAgICAgICAgICAg
IGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgaml0
LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVwbGFjZSksIENDYWxsSGVscGVy
czo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICAgICAg
aml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBq
aXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KGxv
YWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVzdDIoNSksIDIpOworICAg
IENIRUNLX0VRKG51bXNbMl0sIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4NjQo
KQoreworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRl
eCA9IHNpemVvZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3QgcmVw
bGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAg
ICAgIC8vIHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0
LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQ
UjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9y
ZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6Oklt
cGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJl
dCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihsb2FkLCAm
bnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVD
S19FUShudW1zWzJdLCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3QgcmVwbGFj
ZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAg
IC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0Lmxv
YWQ2NChDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmU2
NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBs
aWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92
ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQo
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4obG9hZCwgJm51
bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tf
RVEobnVtc1syXSwgNSk7Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQp
IHx8IENQVShBUk02NCkKQEAgLTQ0NzUsNiArNDY0NSwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFy
KiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVz
dFhvck5vdFdpdGhMZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhSaWdodFNo
aWZ0NjQoKSk7CiAgICAgUlVOKHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7
CisKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9y
ZVByZVBvc3RJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDMyKCkpOwor
ICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUoQVJN
NjRFKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBkNWZj
MzE2NDY1OTY4ZWI3MzcxYjZmZjFjYzZmODMxN2ZlY2RlNTJlLi45ZmQ4ZGIwYjNkMzAyYTE0NjM4
NjUyOTMwYjcxZjMxMGRiYTgyZDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcApAQCAtOTcsNiArOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV92YWx1ZVRv
VG1wKHByb2NlZHVyZS52YWx1ZXMoKS5zaXplKCkpCiAgICAgICAgICwgbV9waGlUb1RtcChwcm9j
ZWR1cmUudmFsdWVzKCkuc2l6ZSgpKQogICAgICAgICAsIG1fYmxvY2tUb0Jsb2NrKHByb2NlZHVy
ZS5zaXplKCkpCisgICAgICAgICwgbV9leHRyYVVzZUNvdW50cyhwcm9jZWR1cmUudmFsdWVzKCku
c2l6ZSgpKQogICAgICAgICAsIG1fdXNlQ291bnRzKHByb2NlZHVyZSkKICAgICAgICAgLCBtX3Bo
aUNoaWxkcmVuKHByb2NlZHVyZSkKICAgICAgICAgLCBtX2RvbWluYXRvcnMocHJvY2VkdXJlLmRv
bWluYXRvcnMoKSkKQEAgLTU0Niw3ICs1NDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJuIHNjYWxlOwogICAgIH0KLSAgICAKKwog
ICAgIC8vIFRoaXMgdHVybnMgdGhlIGdpdmVuIG9wZXJhbmQgaW50byBhbiBhZGRyZXNzLgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJ
bnQ+PgogICAgIEFyZyBlZmZlY3RpdmVBZGRyKFZhbHVlKiBhZGRyZXNzLCBJbnQgb2Zmc2V0LCBX
aWR0aCB3aWR0aCkKQEAgLTU3NCw2ICs1NzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQXJnKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkLmNvbnRhaW5z
KGluZGV4LT5jaGlsZCgwKSkgfHwgbV9sb2NrZWQuY29udGFpbnMoYmFzZSkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBBcmcoKTsKKwogICAgICAgICAgICAgICAgIHJldHVybiBpbmRleEFy
Zyh0bXAoYmFzZSksIGluZGV4LT5jaGlsZCgwKSwgKnNjYWxlLCBvZmZzZXQpOwogICAgICAgICAg
ICAgfTsKIApAQCAtNTg1LDcgKzU4Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9s
b2NrZWQuY29udGFpbnMobGVmdCkgfHwgbV9sb2NrZWQuY29udGFpbnMocmlnaHQpCiAgICAgICAg
ICAgICAgICAgfHwgIUFyZzo6aXNWYWxpZEluZGV4Rm9ybSgxLCBvZmZzZXQsIHdpZHRoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2soKTsKLSAgICAgICAgICAgIAorCiAgICAgICAg
ICAgICByZXR1cm4gaW5kZXhBcmcodG1wKGxlZnQpLCByaWdodCwgMSwgb2Zmc2V0KTsKICAgICAg
ICAgfQogCkBAIC05MDIsNiArOTA0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoY29t
bXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgewogICAgICAgICAgICAgICAgIGlmIChpbW0ocmln
aHQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShyaWdodCksIHRt
cChsZWZ0KSwgcmVzdWx0KTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIHRyeVBvdGVudGlh
bFBvc3RJbmRleEFkZHJlc3MgPSBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFyaWdodC0+aGFzSW50UHRyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmlnaHQtPmFzSW50
UHRyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9m
ZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG9wY29kZSAhPSBBaXI6OkFkZDY0IHx8IHNtYWxsT2Zmc2V0ICE9
IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShzbWFsbE9mZnNldCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAg
bV9iYXNlVG9JbnN0LmFkZChsZWZ0LCAmbV9pbnN0cy5sYXN0KCkubGFzdCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICB0cnlQb3RlbnRpYWxQb3N0SW5k
ZXhBZGRyZXNzKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTE0NiwxMiArMTE2MCwxMiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIGNhc2UgQWlyOjpNb3ZlMzI6Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChpc1ZhbGlkRm9ybShTdG9yZTMyLCBBcmc6Olplcm9SZWcsIGRlc3Qua2luZCgpKSAmJiBkZXN0
LmlzVmFsaWRGb3JtKFdpZHRoMzIpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElu
c3QoU3RvcmUzMiwgbV92YWx1ZSwgemVyb1JlZygpLCBkZXN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzVmFsaWRGb3JtKE1vdmUzMiwgQXJnOjpaZXJvUmVnLCBkZXN0LmtpbmQoKSkgJiYg
ZGVzdC5pc1ZhbGlkRm9ybShXaWR0aDMyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBJbnN0KE1vdmUzMiwgbV92YWx1ZSwgemVyb1JlZygpLCBkZXN0KTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBBaXI6Ok1vdmU6Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShTdG9yZTY0LCBBcmc6Olplcm9SZWcsIGRlc3Qua2lu
ZCgpKSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdpZHRoNjQpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEluc3QoU3RvcmU2NCwgbV92YWx1ZSwgemVyb1JlZygpLCBkZXN0KTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKE1vdmUsIEFyZzo6WmVyb1JlZywgZGVzdC5r
aW5kKCkpICYmIGRlc3QuaXNWYWxpZEZvcm0oV2lkdGg2NCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdChNb3ZlLCBtX3ZhbHVlLCB6ZXJvUmVnKCksIGRlc3QpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBA
IC0yNTU5LDYgKzI1NzMsNjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byB0b3RhbFVz
ZUNvdW50cyA9IFsmXSAoVmFsdWUqIHZhbHVlKSAtPiBpbnQgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX3VzZUNvdW50cy5udW1Vc2VzKHZhbHVlKSArIG1fZXh0cmFVc2VDb3VudHNbdmFsdWVd
Lm51bVVzZXM7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICAvLyBQcmUtSW5kZXggUGF0
dGVybjoKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gYWRkKGJhc2UsIG9mZnNldCkgIAor
ICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IGxvYWQoYWRkcmVzcywgMCkKKyAgICAgICAgICAg
IGF1dG8gdHJ5QXBwZW5kUHJlSW5kZXggPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShNb3ZlV2l0aEluY3JlbWVu
dDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1vcnktPnR5cGUoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6UHJlSW5kZXgsIEFyZzo6VG1wKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgVmFsdWUq
IGFkZHJlc3MgPSBtZW1vcnktPmxhc3RDaGlsZCgpOworICAgICAgICAgICAgICAgIGlmIChhZGRy
ZXNzLT5vcGNvZGUoKSAhPSBBZGQgfHwgIWFkZHJlc3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSB8
fCBtZW1vcnktPm9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgVmFsdWUqIGJhc2UgPSBhZGRyZXNzLT5jaGlsZCgwKTsKKyAgICAgICAg
ICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQdHIoKTsK
KyAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19j
YXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmIChzbWFs
bE9mZnNldCAhPSBvZmZzZXQgfHwgIUFpcjo6QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKHNtYWxs
T2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIGlmICh0b3RhbFVzZUNvdW50cyhhZGRyZXNzKSA9PSAxIHx8IHRvdGFsVXNlQ291bnRzKGJh
c2UpID4gMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAg
ICAgICAgYXBwZW5kKG9wY29kZSwgQXJnOjpwcmVJbmRleCh0bXAoYmFzZSksIHNtYWxsT2Zmc2V0
KSwgdG1wKG1lbW9yeSkpOworICAgICAgICAgICAgICAgIG1fcHJlSW5kZXhBZGRzLmFkZChhZGRy
ZXNzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAg
ICAgICAgICAgIGlmICh0cnlBcHBlbmRQcmVJbmRleCgpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBQYXR0ZXJuOgorICAgICAgICAgICAgLy8g
ICAgIG1lbW9yeSA9IGxvYWQoYmFzZSwgMCkKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0g
YWRkKGJhc2UsIG9mZnNldCkgCisgICAgICAgICAgICBhdXRvIHRyeUFwcGVuZFBvc3RJbmRleCA9
IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0
cnlPcGNvZGVGb3JUeXBlKE1vdmVXaXRoSW5jcmVtZW50MzIsIE1vdmVXaXRoSW5jcmVtZW50NjQs
IG1lbW9yeS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29k
ZSwgQXJnOjpQb3N0SW5kZXgsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIFZhbHVlKiBiYXNlID0gbWVtb3J5LT5sYXN0Q2hpbGQo
KTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fYmFzZVRvSW5zdC5jb250YWlucyhiYXNlKSB8fCB0
b3RhbFVzZUNvdW50cyhiYXNlKSA+IDIgfHwgbWVtb3J5LT5vZmZzZXQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgSW5zdCogaW5zdCA9IG1f
YmFzZVRvSW5zdC5nZXQoYmFzZSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBp
bnN0LT5vcmlnaW47CisgICAgICAgICAgICAgICAgaW5zdC0+a2luZCA9IEFpcjo6S2luZChyZWxh
eGVkTW92ZUZvclR5cGUoYWRkcmVzcy0+dHlwZSgpKSk7CisgICAgICAgICAgICAgICAgaW5zdC0+
YXJncy5jbGVhcigpOworICAgICAgICAgICAgICAgIGluc3QtPmFwcGVuZCh0bXAoYmFzZSksIHRt
cChhZGRyZXNzKSk7CisKKyAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9m
ZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihhZGRyZXNzLT5jaGlsZCgxKS0+
YXNJbnRQdHIoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgQXJnOjpwb3N0SW5k
ZXgodG1wKGJhc2UpLCBzbWFsbE9mZnNldCksIHRtcChtZW1vcnkpKTsKKyAgICAgICAgICAgICAg
ICBtX2Jhc2VUb0luc3QucmVtb3ZlKGJhc2UpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHRyeUFwcGVuZFBvc3RJbmRleCgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5n
SW5zdChtX3ZhbHVlLCBraW5kLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjY4OCw2ICsyNzYwLDE3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpZiAodHJ5QXBwZW5kQWRkV2l0aFNoaWZ0KGxlZnQsIHJp
Z2h0KSB8fCB0cnlBcHBlbmRBZGRXaXRoU2hpZnQocmlnaHQsIGxlZnQpKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKIAorICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRQcmVJbmRleEFkZCA9IFsm
XSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlSW5kZXhBZGRzLmNvbnRh
aW5zKG1fdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgbV9wcmVJbmRleEFkZHMucmVtb3ZlKG1fdmFsdWUpOworICAgICAgICAgICAgICAg
IGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgdG1wKG1fdmFsdWUt
PmNoaWxkKDApKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRQcmVJbmRleEFkZCgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRk
MzIsIEFkZDY0LCBBZGREb3VibGUsIEFkZEZsb2F0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00MjU2LDcgKzQzMzksMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgZGF0YUxvZygiRkFUQUw6IGNvdWxkIG5vdCBsb3dlciAiLCBkZWVw
RHVtcChtX3Byb2NlZHVyZSwgbV92YWx1ZSksICJcbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICAKKworICAgIHN0cnVjdCBDb3VudHMgeworICAg
ICAgICB1bnNpZ25lZCBudW1Vc2VzIHsgMCB9OworICAgIH07CisKICAgICBJbmRleFNldDxWYWx1
ZSo+IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBp
biBBaXIuCiAgICAgSW5kZXhNYXA8VmFsdWUqLCBUbXA+IG1fdmFsdWVUb1RtcDsgLy8gVGhlc2Ug
YXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNheSB0aGF0IGEgVmFs
dWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCiAgICAgSW5kZXhNYXA8VmFsdWUq
LCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBUbXAuCkBAIC00MjY0
LDYgKzQzNTEsOSBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8VG1wPj4g
bV90dXBsZVBoaVRvVG1wczsgLy8gVGhpcyBpcyB0aGUgc2FtZSBhcyBtX3BoaVRvVG1wIGZvciBQ
aGlzIHRoYXQgYXJlIFR1cGxlcy4KICAgICBJbmRleE1hcDxCMzo6QmFzaWNCbG9jayosIEFpcjo6
QmFzaWNCbG9jayo+IG1fYmxvY2tUb0Jsb2NrOwogICAgIEhhc2hNYXA8VmFyaWFibGUqLCBWZWN0
b3I8VG1wPj4gbV92YXJpYWJsZVRvVG1wczsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1fcHJlSW5k
ZXhBZGRzOworICAgIEhhc2hNYXA8VmFsdWUqLCBJbnN0Kj4gbV9iYXNlVG9JbnN0OworICAgIElu
ZGV4TWFwPFZhbHVlKiwgQ291bnRzPiBtX2V4dHJhVXNlQ291bnRzOwogCiAgICAgVXNlQ291bnRz
IG1fdXNlQ291bnRzOwogICAgIFBoaUNoaWxkcmVuIG1fcGhpQ2hpbGRyZW47CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKaW5kZXggMjI4MGZkNzcxMjUy
ZTcyNjBmNjg1MDUwOTJmZDU0M2NmZTA2MTg1Ny4uZjRhZmY2NzRkNDQ4YjhmODgwN2JhNDQwZTc1
NTExNTM4ZmNjMTIwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcApAQCAtMTkyOSw2ICsxOTI5LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBW
YWx1ZSogYWRkcmVzcyA9IG1fdmFsdWUtPmxhc3RDaGlsZCgpOwogICAgICAgICAgICAgTWVtb3J5
VmFsdWUqIG1lbW9yeSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOwogCisgICAgICAgICAg
ICAvLyBQb3RlbnRpYWwgUHJlLUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAvLyAgICAgTG9h
ZChBZGQoYWRkcmVzcywgb2Zmc2V0MSksIG9mZnNldCA9IDApCisgICAgICAgICAgICBhdXRvIGlz
UG90ZW50aWFsUHJlSW5kZXggPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgaWYg
KGFkZHJlc3MtPm9wY29kZSgpICE9IEFkZCB8fCAhYWRkcmVzcy0+Y2hpbGQoMSktPmhhc0ludFB0
cigpIHx8IG1lbW9yeS0+b2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5vcGNvZGUoKSAhPSBMb2FkKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+
dHlwZSgpICE9IEludDMyICYmIG1lbW9yeS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICBpZiAoaXNQb3RlbnRpYWxQcmVJbmRleCgpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IExvYWQoQWRk
KGFkZHJlc3MsIG9mZnNldDEpLCBvZmZzZXQgPSBvZmZzZXQyKQogICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBMb2FkKGFkZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQogICAgICAg
ICAgICAgLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAppbmRleCAxMDNj
NmVjY2EzZDMxNGJiNGVkOGMwMmE0ZDJmMDA5Y2E2NDFkMDAxLi43N2VlODQyNTEyNGI5ZDhiOGM1
ODJmMzlmZjk2OWY2MGZkMTZjYzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuY3BwCkBAIC0xMzAsNiArMTMwLDExIEBAIHVuc2lnbmVkIEFyZzo6anNIYXNoKCkgY29uc3QK
ICAgICAgICAgcmVzdWx0ICs9IG1fYmFzZS5pbnRlcm5hbFZhbHVlKCk7CiAgICAgICAgIHJlc3Vs
dCArPSBtX2luZGV4LmludGVybmFsVmFsdWUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
cmVJbmRleDoKKyAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgcmVzdWx0ICs9IG1fb2Zmc2V0
OworICAgICAgICByZXN1bHQgKz0gbV9iYXNlLmludGVybmFsVmFsdWUoKTsKKyAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTdGFjazoKICAgICAgICAgcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX3NjYWxlKTsKICAgICAgICAgcmVzdWx0ICs9IHN0YWNrU2xvdCgpLT5pbmRleCgpOwpA
QCAtMTYxLDcgKzE2Niw3IEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiAgICAgICAgIG91dC5wcmludGYoIiQweCVsbHgiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5z
aWduZWQ+KG1fb2Zmc2V0KSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFplcm9SZWc6Ci0g
ICAgICAgIG91dC5wcmludCgiJSV4enIiKTsKKyAgICAgICAgb3V0LnByaW50KCIleHpyIik7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIG91dC5wcmludCgi
KCIsIGJhc2UoKSwgIikiKTsKQEAgLTE4MCw2ICsxODUsMTIgQEAgdm9pZCBBcmc6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxlKCkp
OwogICAgICAgICBvdXQucHJpbnQoIikiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJl
SW5kZXg6CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIixQcmUoJCIsIG9mZnNldCgp
LCAiKSkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUG9zdEluZGV4OgorICAgICAgICBv
dXQucHJpbnQoIigiLCBiYXNlKCksICIsUG9zdCgkIiwgb2Zmc2V0KCksICIpKSIpOworICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBTdGFjazoKICAgICAgICAgaWYgKG9mZnNldCgpKQogICAgICAg
ICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKQEAgLTI2MSw2ICsyNzIsMTIgQEAgdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6S2luZCBraW5kKQogICAgIGNhc2UgQXJn
OjpJbmRleDoKICAgICAgICAgb3V0LnByaW50KCJJbmRleCIpOwogICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBcmc6OlByZUluZGV4OgorICAgICAgICBvdXQucHJpbnQoIlByZUluZGV4Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6UG9zdEluZGV4OgorICAgICAgICBvdXQucHJp
bnQoIlBvc3RJbmRleCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OlJlbENvbmQ6
CiAgICAgICAgIG91dC5wcmludCgiUmVsQ29uZCIpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAppbmRleCBjZTVhNGU3Mzc5YWQ2NDQ0NWYwYzNhYmQx
MjlmMzI5Yjk0N2ZlODEyLi5lYTIyNjI4YWUxMmUxMWZlYjQ1ZGY2N2FjZjNkYThkNjg2MGI0ZmQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKQEAgLTEsMyArMSw0IEBACisK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgpAQCAtNzcsNiArNzgsOCBAQCBwdWJsaWM6CiAgICAgICAgIFN0YWNrLAogICAg
ICAgICBDYWxsQXJnLAogICAgICAgICBJbmRleCwKKyAgICAgICAgUHJlSW5kZXgsCisgICAgICAg
IFBvc3RJbmRleCwKIAogICAgICAgICAvLyBJbW1lZGlhdGUgb3BlcmFuZHMgdGhhdCBjdXN0b21p
emUgdGhlIGJlaGF2aW9yIG9mIGFuIG9wZXJhdGlvbi4gWW91IGNhbiB0aGluayBvZiB0aGVtIGFz
CiAgICAgICAgIC8vIHNlY29uZGFyeSBvcGNvZGVzLiBUaGV5IGFyZSBhbHdheXMgIlVzZSInZC4K
QEAgLTY0OSw2ICs2NTIsMzAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQXJnOjppbmRleChi
YXNlLCBpbmRleCwgc2NhbGUsIDApOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIElu
dCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBBcmcg
cHJlSW5kZXgoQWlyOjpUbXAgYmFzZSwgSW50IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzSW50OShpbmRleCkpOworICAgICAgICBB
cmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUHJlSW5kZXg7CisgICAgICAgIHJl
c3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBpbmRleDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQs
IHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgQXJnIHBv
c3RJbmRleChBaXI6OlRtcCBiYXNlLCBJbnQgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQo
YmFzZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNJbnQ5KGluZGV4KSk7CisgICAgICAgIEFy
ZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQb3N0SW5kZXg7CisgICAgICAgIHJl
c3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBpbmRleDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogICAgIHsKICAgICAg
ICAgQXJnIHJlc3VsdDsKQEAgLTc5OSw2ICs4MjYsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4ga2luZCgpID09IEluZGV4OwogICAgIH0KIAorICAgIGJvb2wgaXNQcmVJbmRleCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFByZUluZGV4OworICAgIH0KKworICAg
IGJvb2wgaXNQb3N0SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9
PSBQb3N0SW5kZXg7CisgICAgfQorCiAgICAgYm9vbCBpc01lbW9yeSgpIGNvbnN0CiAgICAgewog
ICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewpAQCAtODA4LDYgKzg0NSw4IEBAIHB1YmxpYzoKICAg
ICAgICAgY2FzZSBTdGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBjYXNlIElu
ZGV4OgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtOTcyLDcgKzEwMTEsNyBAQCBwdWJsaWM6CiAKICAgICBBaXI6OlRtcCBi
YXNlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2ltcGxlQWRkciB8
fCBraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQo
KSA9PSBJbmRleCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2ltcGxlQWRkciB8fCBraW5k
KCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBJ
bmRleCB8fCBraW5kKCkgPT0gUHJlSW5kZXggfHwga2luZCgpID09IFBvc3RJbmRleCk7CiAgICAg
ICAgIHJldHVybiBtX2Jhc2U7CiAgICAgfQogCkBAIC05ODIsNyArMTAyMSw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIGlmIChraW5kKCkgPT0gU3RhY2spCiAgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG1fc2NhbGUpOwotICAgICAgICBBU1NFUlQo
a2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkg
PT0gQ2FsbEFyZyB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBBU1NFUlQoa2luZCgpID09
IEFkZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gQ2FsbEFy
ZyB8fCBraW5kKCkgPT0gSW5kZXggfHwga2luZCgpID09IFByZUluZGV4IHx8IGtpbmQoKSA9PSBQ
b3N0SW5kZXgpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+
KG1fb2Zmc2V0KTsKICAgICB9CiAKQEAgLTEwNDQsNiArMTA4Myw4IEBAIHB1YmxpYzoKICAgICAg
ICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKICAgICAgICAg
Y2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5k
ZXg6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAgICAg
Y2FzZSBSZWxDb25kOgpAQCAtMTA4MSw2ICsxMTIyLDggQEAgcHVibGljOgogICAgICAgICBjYXNl
IEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgogICAgICAgICBjYXNlIElu
ZGV4OgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAg
ICAgICAgY2FzZSBTdGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBjYXNlIEJp
Z0ltbTogLy8gWWVzLCB3ZSBhbGxvdyBCaWdJbW0gYXMgYSBkb3VibGUgaW1tZWRpYXRlLiBXZSB1
c2UgdGhpcyBmb3IgaW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KQEAgLTEyMzcsNiArMTI4MCwyMiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBz
dGF0aWMgYm9vbCBpc1ZhbGlkUHJlSW5kZXhGb3JtKEludCBvZmZzZXQpCisgICAgeworICAgICAg
ICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRTaWduZWRJbW05KG9m
ZnNldCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0
aWMgYm9vbCBpc1ZhbGlkUG9zdEluZGV4Rm9ybShJbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
aWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkU2lnbmVkSW1tOShvZmZz
ZXQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgLy8gSWYgeW91IGRvbid0
IHBhc3MgYSB3aWR0aCB0aGVuIHRoaXMgb3B0aW1pc3RpY2FsbHkgYXNzdW1lcyB0aGF0IHlvdSdy
ZSB1c2luZyB0aGUgcmlnaHQgd2lkdGguIEJ1dAogICAgIC8vIHRoZSB3aWR0aCBpcyByZWxldmFu
dCB0byB2YWxpZGl0eSwgc28gcGFzc2luZyBhIG51bGwgd2lkdGggaXMgb25seSB1c2VmdWwgZm9y
IGFzc2VydGlvbnMuIERvbid0CiAgICAgLy8gcGFzcyBudWxsIHdpZHRocyB3aGVuIGNhc2NhZGlu
ZyB0aHJvdWdoIEFyZ3MgaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIQpAQCAtMTI2NSw2ICsx
MzI0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkQWRkckZvcm0ob2Zm
c2V0KCksIHdpZHRoKTsKICAgICAgICAgY2FzZSBJbmRleDoKICAgICAgICAgICAgIHJldHVybiBp
c1ZhbGlkSW5kZXhGb3JtKHNjYWxlKCksIG9mZnNldCgpLCB3aWR0aCk7CisgICAgICAgIGNhc2Ug
UHJlSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFByZUluZGV4Rm9ybShvZmZzZXQo
KSk7CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRQ
b3N0SW5kZXhGb3JtKG9mZnNldCgpKTsKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBj
YXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKQEAgLTEyODQsNiArMTM0Nyw4
IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBTaW1wbGVBZGRyOgogICAgICAgICBjYXNlIEFkZHI6
CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgorICAgICAgICBjYXNlIFByZUluZGV4
OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEluZGV4OgpAQCAtMTMyNiw2ICsxMzkx
LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIGNhc2UgQWRk
cjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CisgICAgICAgIGNhc2UgUHJlSW5k
ZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2Us
IFVzZSwgR1AsIGFyZ1JvbGUgPT0gVXNlQWRkciA/IGFyZ1dpZHRoIDogcG9pbnRlcldpZHRoKCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5kZXg6CkBAIC0xMzgzLDYgKzE0
NTAsMTggQEAgcHVibGljOgogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5
cGU+KG1fb2Zmc2V0KSwgbV9leHRlbmQpOwogICAgIH0KIAorICAgIE1hY3JvQXNzZW1ibGVyOjpQ
cmVJbmRleEFkZHJlc3MgYXNQcmVJbmRleEFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzUHJlSW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6UHJl
SW5kZXhBZGRyZXNzKG1fYmFzZS5ncHIoKSwgb2Zmc2V0KCkpOworICAgIH0KKworICAgIE1hY3Jv
QXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzIGFzUG9zdEluZGV4QWRkcmVzcygpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNQb3N0SW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIG9mZnNldCgpKTsKKyAg
ICB9CisKICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBhc1JlbGF0aW9u
YWxDb25kaXRpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzUmVsQ29uZCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFja0Fy
Z3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5j
cHAKaW5kZXggOTA1ZTYxN2ZiZGUwZTJiN2Q3NTU1NjNlNjg4NTg5YmRhZDcyNmM4MC4uNmFkMDU4
NDI2N2I4YzdlZTcxNDliMDJmODIzMTU3MmJlZThjZjhhYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAKQEAgLTE1OCw3ICsxNTgs
NyBAQCB2b2lkIGxvd2VyU3RhY2tBcmdzKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQod2lkdGggPT0gV2lkdGgzMik7CiAKICNpZiBDUFUoQVJN
NjQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgc3RvcmVPcGNvZGUg
PSBTdG9yZTMyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIHN0b3Jl
T3Bjb2RlID0gTW92ZTMyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFpcjo6QXJnOjpL
aW5kIG9wZXJhbmRLaW5kID0gQXJnOjpaZXJvUmVnOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFpcjo6QXJnIG9wZXJhbmQgPSBBcmc6Onplcm9SZWcoKTsKICNlbGlmIENQVShYODZfNjQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRl
eCA2NjFlYWRkMjM3M2M1NGE0YmJhOTQ3YTU0YmRhMjU1N2JkYjhhZTRhLi5hZmRjZmYxNjJiNTRh
YWFiMTc3N2Y3YWE0MjRhYWI1ODA5ZjM3ZTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAgLTY0Nyw2ICs2NDcsOSBAQCBNb3ZlIFU6RzpQ
dHIsIEQ6RzpQdHIKICAgICBJbmRleCwgVG1wIGFzIGxvYWRQdHIKICAgICBUbXAsIEFkZHIgYXMg
c3RvcmVQdHIKICAgICBUbXAsIEluZGV4IGFzIHN0b3JlUHRyCisgICAgYXJtNjQ6IFplcm9SZWcs
IEFkZHIgYXMgc3RvcmU2NAorICAgIGFybTY0OiBaZXJvUmVnLCBJbmRleCBhcyBzdG9yZTY0CisK
ICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZVB0cgogCiAjIFRoaXMgaXMgZm9yIG1vdmluZyBi
ZXR3ZWVuIHNwaWxsIHNsb3RzLgpAQCAtNjYxLDI4ICs2NjQsMzQgQEAgeDg2XzY0OiBTd2FwNjQg
VUQ6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCiAgICAgVG1wLCBBZGRyCiAKK2FybTY0OiBN
b3ZlV2l0aEluY3JlbWVudDY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIFByZUluZGV4LCBUbXAgYXMg
bG9hZDY0CisgICAgUG9zdEluZGV4LCBUbXAgYXMgbG9hZDY0CisgICAgVG1wLCBQcmVJbmRleCBh
cyBzdG9yZTY0CisgICAgVG1wLCBQb3N0SW5kZXggYXMgc3RvcmU2NAorCiBNb3ZlMzIgVTpHOjMy
LCBaRDpHOjMyCiAgICAgVG1wLCBUbXAgYXMgemVyb0V4dGVuZDMyVG9Xb3JkCiAgICAgQWRkciwg
VG1wIGFzIGxvYWQzMgogICAgIEluZGV4LCBUbXAgYXMgbG9hZDMyCiAgICAgVG1wLCBBZGRyIGFz
IHN0b3JlMzIKICAgICBUbXAsIEluZGV4IGFzIHN0b3JlMzIKKyAgICBhcm02NDogWmVyb1JlZywg
QWRkciBhcyBzdG9yZTMyCisgICAgYXJtNjQ6IFplcm9SZWcsIEluZGV4IGFzIHN0b3JlMzIKICAg
ICB4ODY6IEltbSwgVG1wIGFzIHplcm9FeHRlbmQzMlRvV29yZAogICAgIHg4NjogSW1tLCBBZGRy
IGFzIHN0b3JlMzIKICAgICB4ODY6IEltbSwgSW5kZXggYXMgc3RvcmUzMgogCithcm02NDogTW92
ZVdpdGhJbmNyZW1lbnQzMiBVOkc6MzIsIFVaRDpHOjMyCisgICAgUHJlSW5kZXgsIFRtcCBhcyBs
b2FkMzIKKyAgICBQb3N0SW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBUbXAsIFByZUluZGV4IGFz
IHN0b3JlMzIKKyAgICBUbXAsIFBvc3RJbmRleCBhcyBzdG9yZTMyCisKICMgVGhpcyBpcyBmb3Ig
bW92aW5nIGJldHdlZW4gc3BpbGwgc2xvdHMuCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyLCBTOkc6
MzIKICAgICBBZGRyLCBBZGRyLCBUbXAKIAotYXJtNjQ6IFN0b3JlMzIgVTpHOjMyLCBaRDpHOjMy
Ci0gICAgWmVyb1JlZywgQWRkcgotICAgIFplcm9SZWcsIEluZGV4Ci0KLWFybTY0OiBTdG9yZTY0
IFU6Rzo2NCwgRDpHOjY0Ci0gICAgWmVyb1JlZywgQWRkcgotICAgIFplcm9SZWcsIEluZGV4Ci0K
IFNpZ25FeHRlbmQzMlRvUHRyIFU6RzozMiwgRDpHOlB0cgogICAgIFRtcCwgVG1wCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgppbmRleCAz
NzQwZWZkYmRkMTQ2YTM3ZjZlZGU5ZGRiYzIzZGRiYTAzYjA3NjQ2Li5mMWJmMWE0NmNmYzg4OWVj
MTkzNDZmMmMwNmI3Y2Y1MGY5ZTNkZTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCkBAIC0yMjksNyArMjI5LDcgQEAgZGVmIGlzR0Yo
dG9rZW4pCiBlbmQKIAogZGVmIGlzS2luZCh0b2tlbikKLSAgICB0b2tlbiA9fiAvXEEoKFRtcCl8
KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoWmVyb1JlZyl8KFNpbXBsZUFkZHIp
fChBZGRyKXwoRXh0ZW5kZWRPZmZzZXRBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8
KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KKyAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KElt
bSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoWmVyb1JlZyl8KFNpbXBsZUFkZHIpfChB
ZGRyKXwoRXh0ZW5kZWRPZmZzZXRBZGRyKXwoSW5kZXgpfChQcmVJbmRleCl8KFBvc3RJbmRleCl8
KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCl8KFN0YXR1c0NvbmQpKVxaLwogZW5kCiAK
IGRlZiBpc0FyY2godG9rZW4pCkBAIC0zMDMsNyArMzAzLDcgQEAgY2xhc3MgUGFyc2VyCiAKICAg
ICBkZWYgY29uc3VtZUtpbmQKICAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCi0gICAgICAg
IHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0
LCBaZXJvUmVnLCBUbXAsIFNpbXBsZUFkZHIsIEFkZHIsIEV4dGVuZGVkT2Zmc2V0QWRkciwgSW5k
ZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1c0NvbmQpIikgdW5sZXNz
IGlzS2luZChyZXN1bHQpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwg
QmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0LCBaZXJvUmVnLCBUbXAsIFNpbXBsZUFkZHIsIEFkZHIs
IEV4dGVuZGVkT2Zmc2V0QWRkciwgSW5kZXgsIFByZUluZGV4LCBQb3N0SW5kZXgsIFJlbENvbmQs
IFJlc0NvbmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1
bHQpCiAgICAgICAgIGFkdmFuY2UKICAgICAgICAgcmVzdWx0CiAgICAgZW5kCkBAIC05MjksNiAr
OTI5LDEyIEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgIHdo
ZW4gIkluZGV4IgogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1Zh
bGlkSW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLnNjYWxlKCksIGFyZ3NbI3tpbmRleH1dLm9mZnNl
dCgpLCAje2FyZy53aWR0aENvZGV9KSkiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
T1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgd2hlbiAiUHJlSW5kZXgiCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRQcmVJbmRleEZv
cm0oYXJnc1sje2luZGV4fV0ub2Zmc2V0KCkpKSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICB3aGVuICJQb3N0SW5k
ZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRQb3N0
SW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpKSkiCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCiAgICAgICAgICAgICAgICAgd2hlbiAi
QmlnSW1tIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCiAgICAgICAgICAgICAgICAg
d2hlbiAiUmVzQ29uZCIKQEAgLTEyMzUsNiArMTI0MSwxMCBAQCB3cml0ZUgoIk9wY29kZUdlbmVy
YXRlZCIpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0u
YXNBZGRyZXNzKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgiCiAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQmFzZUluZGV4KCkiCisgICAgICAg
ICAgICAgICAgd2hlbiAiUHJlSW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
ImFyZ3NbI3tpbmRleH1dLmFzUHJlSW5kZXhBZGRyZXNzKCkiCisgICAgICAgICAgICAgICAgd2hl
biAiUG9zdEluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5k
ZXh9XS5hc1Bvc3RJbmRleEFkZHJlc3MoKSIKICAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25k
IgogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1JlbGF0
aW9uYWxDb25kaXRpb24oKSIKICAgICAgICAgICAgICAgICB3aGVuICJSZXNDb25kIgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IGM3MDMyZWMwODRkZGZkZDkzNWU1NTI3ZmFhZTkzNTY4
MTk4NDgxNzkuLjhmN2EwMGYyMTIxNDgxODY2ODMyNWVlOGRiNjYyYzc5YWFhNWY4MjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTExNDAsNCArMTE0MCw5IEBAIHZvaWQgYWRkQ29w
eVRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgp
Pj4+Jik7CiAKIGJvb2wgc2hvdWxkUnVuKGNvbnN0IGNoYXIqIGZpbHRlciwgY29uc3QgY2hhciog
dGVzdE5hbWUpOwogCit2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpOwordm9pZCB0ZXN0TG9hZFBy
ZUluZGV4NjQoKTsKK3ZvaWQgdGVzdExvYWRQb3N0SW5kZXg2NCgpOwordm9pZCB0ZXN0SWZoeWoo
KTsKKwogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
M18zLmNwcAppbmRleCA0YzUyYWRhOWNjNDAyZGRlNTM5ODhjYzhmMmY1ZTllMGRkZTJlMTFjLi40
ZDEwY2M2MzQ4MGZjOGI2NDJmMTVkNWM1MzEzNDEyOTFjMTYwMGQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjNfMy5jcHAKQEAgLTI4LDYgKzI4LDI3MSBAQAogCiAjaWYgRU5BQkxFKEIz
X0pJVCkKIAorCit2b2lkIHRlc3RJZmh5aigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRC
M09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiB0aGVuQmxvY2sgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9
IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJ
bnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAgICAv
LyB5ID0gYWRkcjAgKyAxCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIzKQor
ICAgIC8vIGlmIHkgIT0gYWRkcjEgZ290byBkb25lCisgICAgVmFsdWUqIHkgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLCAKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApLCAKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDgpKTsKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxl
VmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAgVmFsdWUqIGNvbmQg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE5vdEVxdWFsLCBPcmlnaW4oKSwgeSwgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJh
bmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxv
Y2sodGhlbkJsb2NrKSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoZW5fQmxv
Y2sKKyAgICAvLyB6ID0gTG9hZCh5LCAwKQorICAgIC8vIHIyID0geSArIHoKKyAgICAvLyBVcHNp
bG9uKHIyLCBecjMpCisgICAgTWVtb3J5VmFsdWUqIHogPSB0aGVuQmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLCB5KTsKKyAgICBWYWx1ZSog
cjIgPSB0aGVuQmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgeSwg
eik7CisgICAgdGhlbkJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNl
dCwgT3JpZ2luKCksIHIsIHIyKTsKKyAgICB0aGVuQmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpKTsKKworICAgIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIHIzID0gUGhpKCkKKyAg
ICAvLyByZXR1cm4gcjMKKyAgICBWYWx1ZSogcjMgPSBkb25lLT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIGRvbmUtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMyk7CisKKyAgICBwcm9jLnJlc2V0
UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NBKHByb2MpOwor
CisgICAgY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KDBMKSwgYml0d2lzZV9jYXN0PGludHB0cl90PigwTCkpOworfQorCit2b2lkIHRlc3RMb2FkUHJl
SW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwg
NiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQzMl90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBs
b29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5h
ZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDMyKTsK
KyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBz
aWxvbihyMSwgXnIyKSAgICAgICAgICAgICAKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNp
bG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJv
YywgT3JpZ2luKCksIEludDMyLCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIz
OjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAg
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoK
KyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEw
IGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BU
ZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHAp
OworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJv
dmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZy
ZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocDMs
IF5wMikKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMykKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIp
CisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBWYWx1ZSog
cjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwg
bG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdp
bigpLCBwMykpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsK
KworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6
CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIHIyKTsgIAorCisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgp
OworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNr
VXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzRdISIpOworCisgICAgYXV0byB0ZXN0ID0gWyZdICgp
IC0+IGludDMyX3QgeworICAgICAgICBpbnQzMl90IHIgPSAwOworICAgICAgICB3aGlsZSAociA8
IDEwKQorICAgICAgICAgICAgciArPSAqKytwdHI7CisgICAgICAgIHJldHVybiByOworICAgIH07
CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50MzJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCkKK3sK
KyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVy
bjsKKworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAx
MCB9OworICAgIGludDY0X3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxv
b3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisK
KyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworICAgIFZhcmlhYmxl
KiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIFJvb3RfQmxvY2sKKyAgICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIp
ICAgICAgICAgICAgIAorICAgIC8vIHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikK
KyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwg
SW50NjQsIDApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6
U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2lu
KCksIHAsIHAxKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwg
T3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAyID0g
UGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25lCisg
ICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBC
Mzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5l
dzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUq
IGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmln
aW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5j
aCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2Nr
KGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9C
bG9jaworICAgIC8vIHAzID0gcDIgKyAxCisgICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAgIC8v
IHIzID0gcjIgKyBsb2FkKHAzKQorICAgIC8vIFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBnb3Rv
IGxvb3AKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBB
ZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2Ms
IE9yaWdpbigpLCA4KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihw
cm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksIHAzKSk7Cisg
ICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmln
aW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
SnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1
cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgcjIpOyAgIAorCisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlk
YXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0
aW9uKCpjb2RlLCAiIzhdISIpOworCisgICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDY0X3Qg
eworICAgICAgICBpbnQ2NF90IHIgPSAwOworICAgICAgICB3aGlsZSAociA8IDEwKQorICAgICAg
ICAgICAgciArPSAqKytwdHI7CisgICAgICAgIHJldHVybiByOworICAgIH07CisKKyAgICBDSEVD
S19FUShpbnZva2U8aW50NjRfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSks
IHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQb3N0SW5kZXg2NCgpCit7CisgICAgaWYgKE9w
dGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBp
bnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBp
bnQ2NF90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFi
bGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2Mu
YWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290
X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKSAgICAgICAgICAg
ICAKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUq
IHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDY0LCAwKTsK
KyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2lu
KCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7
CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBG
cmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAg
Ly8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiBy
MiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3Jp
Z2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9v
cFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBs
b29wVGVzdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7Cisg
ICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigp
LCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkp
OworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAv
LyByMyA9IHIyICsgbG9hZChwMikKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24o
cjMsIF5yMikKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gZ290byBsb29wCisgICAg
VmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4o
KSwgcjIsIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0
LCBPcmlnaW4oKSwgcDIpKTsKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0
VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJp
YWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAz
KTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdp
bigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAg
ZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsg
CisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7Cisg
ICAgZml4U1NBKHByb2MpOworCisgICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDY0X3Qgewor
ICAgICAgICBpbnQ2NF90IHIgPSAwOworICAgICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAg
ICAgciArPSAqcHRyKys7CisgICAgICAgIHJldHVybiByOworICAgIH07CisKKyAgICBDSEVDS19F
UShjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRy
KSksIHRlc3QoKSk7Cit9CisKKwogdm9pZCB0ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm8z
MigpCiB7CiAgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCkBA
IC0zNjk3LDYgKzM5NjIsMTEgQEAgdm9pZCBhZGRTaHJUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIs
IERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3Ra
U2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMCkpOwogICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4
ZmZmZmZmZmYsIDEpKTsKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCA2Mykp
OworCisgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRQcmVJ
bmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDY0KCkpOworICAgIFJVTih0ZXN0
SWZoeWooKSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKaW5kZXggNjNlMjY2Nzg4
NTIwMThhNzY4MGNhNWYwNzE0Njk2ODEwNTg4NGIzYi4uNjliYjZiMmJlODE4NzBiNTk4MzMzNjdh
ZjI2NzViN2Y0ZWYwNTZmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuY3BwCkBAIC0yMzMsOCArMjMzLDggQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5r
R2VuZXJhdG8KICAgICBqaXQucmV0KCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9j
YWwwID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmxvYWQ2NCh4MSwgUG9zdEluZGV4KDgpLCB4Nik7
Ci0gICAgaml0LnN0b3JlNjQoeDYsIHgzLCBQb3N0SW5kZXgoOCkpOworICAgIGppdC5sb2FkNjQo
TWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MoeDEsIDgpLCB4Nik7CisgICAgaml0LnN0
b3JlNjQoeDYsIE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgzLCA4KSk7CiAgICAg
c21hbGxDb3B5LmxpbmsoJmppdCk7CiAgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIFRydXN0ZWRJbW0zMig4KSwgeDIpLmxpbmtUbyhsb2NhbDAsICZqaXQp
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxvY2FsMiA9IGppdC5icmFuY2hBZGQ2NChNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIFRydXN0ZWRJbW0zMig4KSwgeDIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434272</attachid>
            <date>2021-07-26 22:51:49 -0700</date>
            <delta_ts>2021-07-26 23:01:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210727005148.patch</filename>
            <type>text/plain</type>
            <size>47842</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMjg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
ODc4NjRiMTliZDI0ZTM3ZmM2YWJiMzlmNzgwODMwNjExZTg0NDc1Li43MzcxZDBlZjk1YTMwYTg2
ZWIzMjI5MGI1NmNjYmNmMGI0YmJjNjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MCBAQAorMjAyMS0wNy0yNiAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzOjpQcmVJbmRleEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzOjpQ
b3N0SW5kZXhBZGRyZXNzKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6c3RvcmUzMik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAg
ICAgKEpTQzo6dGVzdFN0b3JlUHJlUG9zdEluZGV4MzIpOgorICAgICAgICAoSlNDOjp0ZXN0U3Rv
cmVQcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJlUG9zdEluZGV4MzIp
OgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJbmRleDY0KToKKyAgICAgICAgKiBiMy9C
M0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwOgorICAg
ICAgICAqIGIzL2Fpci9BaXJBcmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Ompz
SGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwcmVJbmRleCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6cG9zdEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1By
ZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1Bvc3RJbmRleCBj
b25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNNZW1vcnkgY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmJhc2UgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNH
UCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZFBvc3RJbmRleEZvcm0pOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVmFsaWRGb3JtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpmb3JFYWNoVG1wRmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Zm9yRWFj
aFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNQcmVJbmRleEFkZHJlc3MgY29u
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUG9zdEluZGV4QWRkcmVzcyBjb25z
dCk6CisgICAgICAgICogYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6bG93ZXJTdGFja0FyZ3MpOgorICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUu
b3Bjb2RlczoKKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYjoKKyAgICAgICAg
KiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0
SWZoeWopOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDMyKToKKyAgICAgICAgKHRlc3RMb2Fk
UHJlSW5kZXg2NCk6CisgICAgICAgICh0ZXN0TG9hZFBvc3RJbmRleDY0KToKKyAgICAgICAgKGFk
ZFNoclRlc3RzKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTI0ICBZdXN1a2Ug
U3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gQ2hhbmdlIG1vc3Qg
b2YgZW51bSBpbiBZYXJyIHRvIGVudW0tY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKaW5kZXggM2QxOTQ5
YTQwNzg1ZDk5Y2E2MTU5NWFhYjA0YmU2ZjFkMGQ5NmJhMy4uMjM1NGM0NTM2OGM3YzBkNWNlOTAx
OGFjZmYyODRjNGEwYTA0MzFhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAgLTI0NSw2ICsyNDUsMzQg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8vIFByZUluZGV4QWRkcmVzczoK
KyAgICAvLworICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFu
ZCBwcmUtaW5jcmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3QgUHJlSW5kZXhBZGRy
ZXNzIHsKKyAgICAgICAgUHJlSW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4
KQorICAgICAgICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAg
IGludCBpbmRleDsKKyAgICB9OworCisgICAgLy8gUG9zdEluZGV4QWRkcmVzczoKKyAgICAvLwor
ICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwb3N0LWlu
Y3JlbWVudC9kZWNyZW1lbnQgaW5kZXguCisgICAgc3RydWN0IFBvc3RJbmRleEFkZHJlc3Mgewor
ICAgICAgICBQb3N0SW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAg
ICAgICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBp
bmRleDsKKyAgICB9OworCiAgICAgLy8gQWJzb2x1dGVBZGRyZXNzOgogICAgIC8vCiAgICAgLy8g
RGVzY3JpYmVzIGFuIG1lbW9yeSBvcGVyYW5kIGdpdmVuIGJ5IGEgcG9pbnRlci4gIEZvciByZWd1
bGFyIGxvYWQgJiBzdG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZl
MTE1ZmM2OGQ2OTA5MGZkLi4yYTkxMmQwZGQyNjYyNmJkNzRlMTAzYmVmOTY1ZjJiYWRmY2UwYmQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNNjQuaApAQCAtMTQ0NSw5ICsxNDQ1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbG9h
ZDw2ND4oYWRkcmVzcywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkNjQoUmVnaXN0ZXJJ
RCBzcmMsIFBvc3RJbmRleCBzaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQo
UHJlSW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgbV9h
c3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMsIHNpbW0pOworICAgICAgICBtX2Fzc2VtYmxlci5s
ZHI8NjQ+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGxvYWQ2NChQb3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4
KHNyYy5pbmRleCkpOwogICAgIH0KIAogICAgIERhdGFMYWJlbDMyIGxvYWQ2NFdpdGhBZGRyZXNz
T2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCkBAIC0xNTQ0LDYg
KzE1NDksMTYgQEAgcHVibGljOgogICAgICAgICBsb2FkPDMyPihhZGRyZXNzLCBkZXN0KTsKICAg
ICB9CiAKKyAgICB2b2lkIGxvYWQzMihQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQ
cmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihQb3N0SW5kZXhB
ZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bGRyPDMyPihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKwog
ICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRy
ZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0
aGlzKTsKQEAgLTE3MzMsNyArMTc0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVy
LmFkZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mu
aW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAg
IG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rl
cik7CiAgICAgfQotICAgIAorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBQcmVJ
bmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3Jj
LCBkZXN0LmJhc2UsIFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0
b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2UsIFBvc3RJbmRleChkZXN0Lmlu
ZGV4KSk7CisgICAgfQorCiAgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBjb25zdCB2
b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgc3RvcmU8NjQ+KHNyYywgYWRkcmVzcyk7CkBA
IC0xNzc3LDExICsxODAyLDYgQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KGRhdGFUZW1wUmVn
aXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkZXN0LCBQb3N0SW5kZXggc2ltbSkKLSAgICB7Ci0gICAgICAgIG1fYXNz
ZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LCBzaW1tKTsKLSAgICB9Ci0gICAgCiAgICAgRGF0YUxh
YmVsMzIgc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJl
c3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAt
MTg3OSw2ICsxODk5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzKTsKICAgICB9CiAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMs
IFByZUluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMy
PihzcmMsIGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKworICAgIHZv
aWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUG9zdEluZGV4KGRl
c3QuaW5kZXgpKTsKKyAgICB9CisKICAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NP
ZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAg
ICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvdGVzdG1hc20uY3BwCmluZGV4IGYyMmJmZmNlMTU1NGIwMmMyMjZjMjE0OTJhYjA2N2Jh
YjM4YzQwYjUuLjUzNGVmZTE0M2Y3OTBiOTA5ODliYzJjYzYzZmYwOWEwNDY3ZTU1N2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCkBAIC0yMjEyLDYg
KzIyMTIsMTc2IEBAIHZvaWQgdGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCiAg
ICAgICAgIH0KICAgICB9CiB9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKQorewor
ICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50cHRyX3QgYWRkciA9IGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMyX3QgaW5kZXggPSBzaXpl
b2YoaW50MzJfdCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQzMl90IHNyYykgeworICAg
ICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAqKytw
MSA9IDQ7IHJldHVybiBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRH
UFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIx
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVw
aWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAg
ICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisg
ICAgaW50MzJfdCogcDEgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QxKDQpKTsKKyAgICBD
SEVDS19FUSgqcDEsIDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1zWzFdKTsKKworICAgIGF1
dG8gdGVzdDIgPSBbJl0gKGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21w
aWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsgcmV0dXJuIHAyOworICAg
ICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6
OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAg
ICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAg
ICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0
cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCogcDIgPSBiaXR3
aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19FUSgqcDIsIDQpOworICAg
IENIRUNLX0VRKCotLXAyLCA1KTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVQb3N0SW5kZXg2NCgp
Cit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnRwdHJfdCBhZGRy
ID0gYml0d2lzZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAgaW50MzJfdCBpbmRleCA9
IHNpemVvZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3Qgc3JjKSB7
CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8v
ICorK3AxID0gNDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1
bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07
CisKKyAgICBpbnQ2NF90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDEoNCkpOwor
ICAgIENIRUNLX0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEsIG51bXNbMV0pOworCisg
ICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9
IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysgPSA1OyByZXR1cm4gcDI7
CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVs
cGVyczo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7Cisg
ICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAg
ICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8
aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2NF90KiBwMiA9
IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDIoNSkpOworICAgIENIRUNLX0VRKCpwMiwgNCk7
CisgICAgQ0hFQ0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4
MzIoKQoreworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBp
bmRleCA9IHNpemVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDMyX3Qg
cmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAg
ICAgICAgIC8vIHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAg
aml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5z
dG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6
OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGpp
dC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0
LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90Pihsb2Fk
LCAmbnVtc1sxXSk7CisgICAgfTsKKyAgICAKKyAgICBDSEVDS19FUSh0ZXN0MSg0KSwgMyk7Cisg
ICAgQ0hFQ0tfRVEobnVtc1syXSwgNCk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQzMl90
IHJlcGxhY2UpIHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVy
cyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAg
ICAgICAgICAvLyByZXMgPSAqcDIrKzsgKnAyID0gNTsgcmV0dXJuIHJlczsKKyAgICAgICAgICAg
IGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgaml0
LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVwbGFjZSksIENDYWxsSGVscGVy
czo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICAgICAg
aml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBq
aXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KGxv
YWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVzdDIoNSksIDIpOworICAg
IENIRUNLX0VRKG51bXNbMl0sIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4NjQo
KQoreworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRl
eCA9IHNpemVvZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3QgcmVw
bGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAg
ICAgIC8vIHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0
LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQ
UjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9y
ZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6Oklt
cGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJl
dCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihsb2FkLCAm
bnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVD
S19FUShudW1zWzJdLCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3QgcmVwbGFj
ZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAg
IC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0Lmxv
YWQ2NChDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmU2
NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBs
aWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92
ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQo
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4obG9hZCwgJm51
bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tf
RVEobnVtc1syXSwgNSk7Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQp
IHx8IENQVShBUk02NCkKQEAgLTQ0NzUsNiArNDY0NSwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFy
KiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVz
dFhvck5vdFdpdGhMZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhSaWdodFNo
aWZ0NjQoKSk7CiAgICAgUlVOKHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7
CisKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9y
ZVByZVBvc3RJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDMyKCkpOwor
ICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUoQVJN
NjRFKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBkNWZj
MzE2NDY1OTY4ZWI3MzcxYjZmZjFjYzZmODMxN2ZlY2RlNTJlLi5hMTg3NDM0NGM0N2JlYjZmMDM3
YTg3NjZlMGE1NjBiNWUxYjA1MzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcApAQCAtMjA3LDcgKzIwNyw4IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgZmlu
aXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAg
IH0KLSAgICAgICAgCisKKyAgICAgICAgcHJlUG9zdEluZGV4QWRyZXNzTW9kZSgpOwogICAgICAg
ICBtX2Jsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKIAogICAgICAgICBBaXI6Okluc2VydGlv
blNldCBpbnNlcnRpb25TZXQobV9jb2RlKTsKQEAgLTIxNyw2ICsyMTgsMTcxIEBAIHB1YmxpYzoK
ICAgICB9CiAKIHByaXZhdGU6CisgICAgdm9pZCBwcmVQb3N0SW5kZXhBZHJlc3NNb2RlKCkKKyAg
ICB7CisgICAgICAgIGlmIChtX3Byb2NlZHVyZS5vcHRMZXZlbCgpIDwgMiB8fCAhQVJNNjQoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEFpcjsKKworICAg
ICAgICBhdXRvIHRyeVByZVBvc3RJbmRleCA9IFsmXSAoVmFsdWUqIHZhbHVlKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOiB7
CisgICAgICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlW
YWx1ZT4oKTsKKworICAgICAgICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgorICAgICAg
ICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gYWRkKGJhc2UsIG9mZnNldCkgIAorICAgICAgICAg
ICAgICAgIC8vICAgICBtZW1vcnkgPSBsb2FkKGFkZHJlc3MsIDApCisgICAgICAgICAgICAgICAg
YXV0byB0cnlQcmVJbmRleCA9IFsmXSAoKSB7CisgICAgICAgICAgICAgICAgICAgIEFpcjo6T3Bj
b2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTW92ZVdpdGhJbmNyZW1lbnQzMiwgTW92ZVdp
dGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50eXBlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpQcmVJbmRleCwgQXJnOjpUbXApKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogYWRkcmVz
cyA9IG1lbW9yeS0+bGFzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyZXNz
LT5vcGNvZGUoKSAhPSBBZGQgfHwgIWFkZHJlc3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSB8fCBt
ZW1vcnktPm9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQ
dHIoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQg
PSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkUHJlSW5kZXhG
b3JtKHNtYWxsT2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgbV9wcmVJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgYWRkcmVzcyk7
CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIHRyeVByZUluZGV4KCk7CisK
KyAgICAgICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAgICAg
Ly8gICAgIG1lbW9yeSA9IGxvYWQoYmFzZSwgMCkKKyAgICAgICAgICAgICAgICAvLyAgICAgYWRk
cmVzcyA9IGFkZChiYXNlLCBvZmZzZXQpIAorICAgICAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5k
UG9zdEluZGV4ID0gWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zm
c2V0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIG1fYmFzZVRvTWVtb3JpZXMuYWRkKG1lbW9yeS0+Y2hpbGQoMCksIFZlY3RvcjxNZW1vcnlW
YWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWVtb3J5KTsKKyAgICAgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICAgICAgdHJ5QXBwZW5kUG9zdEluZGV4KCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgQWRkOiB7Cisg
ICAgICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAg
ICAgICAgVmFsdWUqIHJpZ2h0ID0gdmFsdWUtPmNoaWxkKDEpOworCisgICAgICAgICAgICAgICAg
YXV0byB0cnlQb3RlbnRpYWxQb3N0SW5kZXhBZGRyZXNzID0gWyZdICgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFyaWdodC0+aGFzSW50UHRyKCkgfHwgdmFsdWUtPnR5cGUoKSAhPSBJbnQ2
NCB8fCAhbV9iYXNlVG9NZW1vcmllcy5jb250YWlucyhsZWZ0KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmln
aHQtPmFzSW50UHRyKCk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNt
YWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNWYWxp
ZFBvc3RJbmRleEZvcm0oc21hbGxPZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBtX2Jh
c2VUb01lbW9yaWVzLmdldChsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcG9zdElu
ZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgICAgIHRyeVBvdGVudGlhbFBvc3RJbmRleEFkZHJlc3MoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAg
ICB1aW50MzJfdCBsb2MgPSAwOworCisgICAgICAgIGF1dG8gdXBkYXRlQW5hbHlzaXNEYXRhID0g
WyZdIChJbnN0JiBpbnN0LCBib29sIGluY3JlbWVudCA9IHRydWUsIGJvb2wgdXBkYXRlVXNlVG1w
cyA9IHRydWUpIHsKKyAgICAgICAgICAgIGlmIChpbmNyZW1lbnQpCisgICAgICAgICAgICAgICAg
Kytsb2M7CisKKyAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgICAg
ICAgICAgdHJ5UHJlUG9zdEluZGV4KHZhbHVlKTsKKyAgICAgICAgICAgIG1fdmFsdWVUb0luc3Qu
YWRkKHZhbHVlLCAmaW5zdCk7CisgICAgICAgICAgICBtX3ZhbHVlVG9Mb2MuYWRkKHZhbHVlLCBs
b2MpOworCisgICAgICAgICAgICBpZiAodXBkYXRlVXNlVG1wcykgeworICAgICAgICAgICAgICAg
IGluc3QuZm9yRWFjaEFyZyhbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lk
dGgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdChbJl0gKFRtcCYgdG1wKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90bXBUb0xvY2F0aW9ucy5hZGQodG1wLCBW
ZWN0b3I8dWludDMyX3Q+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobG9jKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9ICAgICAKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKElu
c3QmIGluc3QgOiBtX3Byb2xvZ3VlKQorICAgICAgICAgICAgdXBkYXRlQW5hbHlzaXNEYXRhKGlu
c3QsIGZhbHNlLCBmYWxzZSk7CisKKyAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayogYjNibG9j
ayA6IG1fcHJvY2VkdXJlLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChJ
bnN0JiBpbnN0IDogbV9ibG9ja1RvQmxvY2tbYjNibG9ja10tPmluc3RzKCkpCisgICAgICAgICAg
ICAgICAgdXBkYXRlQW5hbHlzaXNEYXRhKGluc3QpOworICAgICAgICB9CisKKyAgICAgICAgYXV0
byBsYXN0VXNlTG9jYXRpb24gPSBbJl0gKFZhbHVlKiB2YWx1ZSkgLT4gdWludDMyX3QgeworICAg
ICAgICAgICAgVG1wJiB0bXAgPSBtX3ZhbHVlVG9UbXBbdmFsdWVdOworICAgICAgICAgICAgcmV0
dXJuICh0bXAgJiYgbV90bXBUb0xvY2F0aW9ucy5jb250YWlucyh0bXApKSA/IG1fdG1wVG9Mb2Nh
dGlvbnMuZ2V0KHRtcCkubGFzdCgpIDogMDsKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGF1
dG8gaXRyID0gbV9wcmVJbmRleENhbmRpZGF0ZXMuYmVnaW4oKTsgaXRyICE9IG1fcHJlSW5kZXhD
YW5kaWRhdGVzLmVuZCgpOyArK2l0cikgeworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9y
eSA9IGl0ci0+a2V5OworICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBpdHItPnZhbHVlOwor
ICAgICAgICAgICAgVmFsdWUqIGJhc2UgPSBhZGRyZXNzLT5jaGlsZCgwKTsKKyAgICAgICAgICAg
IGlmIChtX2lnbm9yZWRWYWx1ZXMuY29udGFpbnMobWVtb3J5KSB8fCBtX2lnbm9yZWRWYWx1ZXMu
Y29udGFpbnMoYWRkcmVzcykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIHVpbnQzMl90IG1lbW9yeUxvYyA9IG1fdmFsdWVUb0xvYy5nZXQobWVtb3J5KTsKKyAgICAg
ICAgICAgIGlmIChsYXN0VXNlTG9jYXRpb24oYmFzZSkgPiBtZW1vcnlMb2MgfHwgbGFzdFVzZUxv
Y2F0aW9uKGFkZHJlc3MpIDwgbWVtb3J5TG9jKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBJbnN0KiBtZW1vcnlJbnN0ID0gbV92YWx1ZVRvSW5zdC5nZXQobWVtb3J5
KTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTW92
ZVdpdGhJbmNyZW1lbnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50eXBlKCkpOwor
ICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxW
YWx1ZTo6T2Zmc2V0VHlwZT4oYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50UHRyKCkpOworICAgICAg
ICAgICAgbWVtb3J5SW5zdC0+cmVwbGFjZUluZGVudGl0eShvcGNvZGUsIEFyZzo6cHJlSW5kZXgo
dG1wKGJhc2UpLCBzbWFsbE9mZnNldCksIHRtcChtZW1vcnkpKTsKKworICAgICAgICAgICAgSW5z
dCogYWRkcmVzc0luc3QgPSBtX3ZhbHVlVG9JbnN0LmdldChhZGRyZXNzKTsKKyAgICAgICAgICAg
IGFkZHJlc3NJbnN0LT5yZXBsYWNlSW5kZW50aXR5KHJlbGF4ZWRNb3ZlRm9yVHlwZShhZGRyZXNz
LT50eXBlKCkpLCB0bXAoYmFzZSksIHRtcChhZGRyZXNzKSk7CisKKyAgICAgICAgICAgIG1faWdu
b3JlZFZhbHVlcy5hZGQoYWRkcmVzcyk7CisgICAgICAgICAgICBtX2lnbm9yZWRWYWx1ZXMuYWRk
KG1lbW9yeSk7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGJlZm9yZUxhc3RVc2VMb2NhdGlv
biA9IFsmXSAoVmFsdWUqIHZhbHVlKSAtPiB1aW50MzJfdCB7CisgICAgICAgICAgICBUbXAmIHRt
cCA9IG1fdmFsdWVUb1RtcFt2YWx1ZV07CisgICAgICAgICAgICBpZiAodG1wICYmIG1fdG1wVG9M
b2NhdGlvbnMuY29udGFpbnModG1wKSkgeworICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50MzJf
dD4gbG9jcyA9IG1fdG1wVG9Mb2NhdGlvbnMuZ2V0KHRtcCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGxvY3Muc2l6ZSgpID4gMSA/IGxvY3MuYXQobG9jcy5zaXplKCkgLSAyKSA6IDA7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfTsKKworICAgICAgICBm
b3IgKGF1dG8gaXRyID0gbV9wb3N0SW5kZXhDYW5kaWRhdGVzLmJlZ2luKCk7IGl0ciAhPSBtX3Bv
c3RJbmRleENhbmRpZGF0ZXMuZW5kKCk7ICsraXRyKSB7CisgICAgICAgICAgICBNZW1vcnlWYWx1
ZSogbWVtb3J5ID0gaXRyLT5rZXk7CisgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IGl0ci0+
dmFsdWU7CisgICAgICAgICAgICBWYWx1ZSogYmFzZSA9IGFkZHJlc3MtPmNoaWxkKDApOworICAg
ICAgICAgICAgaWYgKG1faWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IG1faWdub3Jl
ZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgaWYgKGJlZm9yZUxhc3RVc2VMb2NhdGlvbihiYXNlKSA+IG1fdmFsdWVUb0xv
Yy5nZXQobWVtb3J5KSB8fCBsYXN0VXNlTG9jYXRpb24oYWRkcmVzcykgPCBtX3ZhbHVlVG9Mb2Mu
Z2V0KGFkZHJlc3MpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBJ
bnN0KiBtZW1vcnlJbnN0ID0gbV92YWx1ZVRvSW5zdC5nZXQobWVtb3J5KTsKKyAgICAgICAgICAg
IEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTW92ZVdpdGhJbmNyZW1lbnQz
MiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50eXBlKCkpOworICAgICAgICAgICAgVmFs
dWU6Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlw
ZT4oYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50UHRyKCkpOworICAgICAgICAgICAgbWVtb3J5SW5z
dC0+cmVwbGFjZUluZGVudGl0eShvcGNvZGUsIEFyZzo6cG9zdEluZGV4KHRtcChiYXNlKSwgc21h
bGxPZmZzZXQpLCB0bXAobWVtb3J5KSk7CisKKyAgICAgICAgICAgIEluc3QqIGFkZHJlc3NJbnN0
ID0gbV92YWx1ZVRvSW5zdC5nZXQoYWRkcmVzcyk7CisgICAgICAgICAgICBhZGRyZXNzSW5zdC0+
cmVwbGFjZUluZGVudGl0eShyZWxheGVkTW92ZUZvclR5cGUoYWRkcmVzcy0+dHlwZSgpKSwgdG1w
KGJhc2UpLCB0bXAoYWRkcmVzcykpOworCisgICAgICAgICAgICBtX2lnbm9yZWRWYWx1ZXMuYWRk
KGFkZHJlc3MpOworICAgICAgICAgICAgbV9pZ25vcmVkVmFsdWVzLmFkZChtZW1vcnkpOworICAg
ICAgICB9CisKKyAgICAgICAgbV90bXBUb0xvY2F0aW9ucy5jbGVhcigpOworICAgICAgICBtX3Zh
bHVlVG9JbnN0LmNsZWFyKCk7CisgICAgICAgIG1fdmFsdWVUb0xvYy5jbGVhcigpOworCisgICAg
ICAgIG1fcHJlSW5kZXhDYW5kaWRhdGVzLmNsZWFyKCk7CisgICAgICAgIG1fYmFzZVRvTWVtb3Jp
ZXMuY2xlYXIoKTsKKyAgICAgICAgbV9wb3N0SW5kZXhDYW5kaWRhdGVzLmNsZWFyKCk7CisgICAg
fQorCiAgICAgYm9vbCBzaG91bGRDb3B5UHJvcGFnYXRlKFZhbHVlKiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CkBAIC01NDYsNyArNzEyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBz
Y2FsZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBvcGVyYW5k
IGludG8gYW4gYWRkcmVzcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0g
VmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KICAgICBBcmcgZWZmZWN0aXZlQWRkcihWYWx1ZSog
YWRkcmVzcywgSW50IG9mZnNldCwgV2lkdGggd2lkdGgpCkBAIC00MjY1LDYgKzQ0MzEsMTUgQEAg
cHJpdmF0ZToKICAgICBJbmRleE1hcDxCMzo6QmFzaWNCbG9jayosIEFpcjo6QmFzaWNCbG9jayo+
IG1fYmxvY2tUb0Jsb2NrOwogICAgIEhhc2hNYXA8VmFyaWFibGUqLCBWZWN0b3I8VG1wPj4gbV92
YXJpYWJsZVRvVG1wczsKIAorICAgIEhhc2hNYXA8VG1wLCBWZWN0b3I8dWludDMyX3Q+PiBtX3Rt
cFRvTG9jYXRpb25zOworICAgIEhhc2hNYXA8VmFsdWUqLCBJbnN0Kj4gbV92YWx1ZVRvSW5zdDsK
KyAgICBIYXNoTWFwPFZhbHVlKiwgdWludDMyX3Q+IG1fdmFsdWVUb0xvYzsKKworICAgIEhhc2hN
YXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IG1fcHJlSW5kZXhDYW5kaWRhdGVzOworICAgIEhhc2hN
YXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gbV9iYXNlVG9NZW1vcmllczsKKyAgICBI
YXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBtX3Bvc3RJbmRleENhbmRpZGF0ZXM7CisgICAg
SW5kZXhTZXQ8VmFsdWUqPiBtX2lnbm9yZWRWYWx1ZXM7CisKICAgICBVc2VDb3VudHMgbV91c2VD
b3VudHM7CiAgICAgUGhpQ2hpbGRyZW4gbV9waGlDaGlsZHJlbjsKICAgICBCbG9ja1dvcmtsaXN0
IG1fZmFzdFdvcmtsaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3Ry
ZW5ndGguY3BwCmluZGV4IDIyODBmZDc3MTI1MmU3MjYwZjY4NTA1MDkyZmQ1NDNjZmUwNjE4NTcu
LmY0YWZmNjc0ZDQ0OGI4Zjg4MDdiYTQ0MGU3NTUxMTUzOGZjYzEyMDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKQEAgLTE5MjksNiArMTkyOSwy
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBtX3ZhbHVlLT5sYXN0
Q2hpbGQoKTsKICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBtX3ZhbHVlLT5hczxN
ZW1vcnlWYWx1ZT4oKTsKIAorICAgICAgICAgICAgLy8gUG90ZW50aWFsIFByZS1JbmRleCBQYXR0
ZXJuOgorICAgICAgICAgICAgLy8gICAgIExvYWQoQWRkKGFkZHJlc3MsIG9mZnNldDEpLCBvZmZz
ZXQgPSAwKQorICAgICAgICAgICAgYXV0byBpc1BvdGVudGlhbFByZUluZGV4ID0gWyZdICgpIC0+
IGJvb2wgeworICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSAhPSBBZGQgfHwg
IWFkZHJlc3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSB8fCBtZW1vcnktPm9mZnNldCgpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKG1lbW9y
eS0+b3Bjb2RlKCkgIT0gTG9hZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPnR5cGUoKSAhPSBJbnQzMiAmJiBtZW1vcnktPnR5
cGUoKSAhPSBJbnQ2NCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYg
KGlzUG90ZW50aWFsUHJlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBMb2FkKEFkZChhZGRyZXNzLCBvZmZzZXQxKSwgb2Zmc2V0ID0g
b2Zmc2V0MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogTG9hZChhZGRyZXNzLCBvZmZzZXQg
PSBvZmZzZXQxICsgb2Zmc2V0MikKICAgICAgICAgICAgIC8vCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5jcHAKaW5kZXggMTAzYzZlY2NhM2QzMTRiYjRlZDhjMDJhNGQyZjAwOWNh
NjQxZDAwMS4uNzdlZTg0MjUxMjRiOWQ4YjhjNTgyZjM5ZmY5NjlmNjBmZDE2Y2MwMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcApAQCAtMTMwLDYgKzEzMCwxMSBAQCB1
bnNpZ25lZCBBcmc6OmpzSGFzaCgpIGNvbnN0CiAgICAgICAgIHJlc3VsdCArPSBtX2Jhc2UuaW50
ZXJuYWxWYWx1ZSgpOwogICAgICAgICByZXN1bHQgKz0gbV9pbmRleC5pbnRlcm5hbFZhbHVlKCk7
CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJlSW5kZXg6CisgICAgY2FzZSBQb3N0SW5kZXg6
CisgICAgICAgIHJlc3VsdCArPSBtX29mZnNldDsKKyAgICAgICAgcmVzdWx0ICs9IG1fYmFzZS5p
bnRlcm5hbFZhbHVlKCk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhY2s6CiAgICAgICAg
IHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zY2FsZSk7CiAgICAgICAgIHJlc3Vs
dCArPSBzdGFja1Nsb3QoKS0+aW5kZXgoKTsKQEAgLTE2MSw3ICsxNjYsNyBAQCB2b2lkIEFyZzo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4
Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIHVuc2lnbmVkPihtX29mZnNldCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBaZXJvUmVnOgotICAgICAgICBvdXQucHJpbnQoIiUleHpyIik7Cisg
ICAgICAgIG91dC5wcmludCgiJXh6ciIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTaW1w
bGVBZGRyOgogICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIpIik7CkBAIC0xODAsNiAr
MTg1LDEyIEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAg
ICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgpKTsKICAgICAgICAgb3V0LnByaW50KCIpIik7CiAg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBvdXQucHJpbnQoIigi
LCBiYXNlKCksICIsUHJlKCQiLCBvZmZzZXQoKSwgIikpIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLFBvc3Qo
JCIsIG9mZnNldCgpLCAiKSkiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU3RhY2s6CiAg
ICAgICAgIGlmIChvZmZzZXQoKSkKICAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CkBA
IC0yNjEsNiArMjcyLDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBB
cmc6OktpbmQga2luZCkKICAgICBjYXNlIEFyZzo6SW5kZXg6CiAgICAgICAgIG91dC5wcmludCgi
SW5kZXgiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpQcmVJbmRleDoKKyAgICAg
ICAgb3V0LnByaW50KCJQcmVJbmRleCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6
OlBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQb3N0SW5kZXgiKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQXJnOjpSZWxDb25kOgogICAgICAgICBvdXQucHJpbnQoIlJlbENvbmQi
KTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKaW5k
ZXggY2U1YTRlNzM3OWFkNjQ0NDVmMGMzYWJkMTI5ZjMyOWI5NDdmZTgxMi4uMWViZjUyYTIxNzJh
M2IyOTNmYjllZTI2MjRlYTA1MmE0YWNlNDhkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5oCkBAIC03Nyw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgU3RhY2ssCiAgICAg
ICAgIENhbGxBcmcsCiAgICAgICAgIEluZGV4LAorICAgICAgICBQcmVJbmRleCwKKyAgICAgICAg
UG9zdEluZGV4LAogCiAgICAgICAgIC8vIEltbWVkaWF0ZSBvcGVyYW5kcyB0aGF0IGN1c3RvbWl6
ZSB0aGUgYmVoYXZpb3Igb2YgYW4gb3BlcmF0aW9uLiBZb3UgY2FuIHRoaW5rIG9mIHRoZW0gYXMK
ICAgICAgICAgLy8gc2Vjb25kYXJ5IG9wY29kZXMuIFRoZXkgYXJlIGFsd2F5cyAiVXNlIidkLgpA
QCAtNjQ5LDYgKzY1MSwzMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBBcmc6OmluZGV4KGJh
c2UsIGluZGV4LCBzY2FsZSwgMCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50
LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIEFyZyBw
cmVJbmRleChBaXI6OlRtcCBiYXNlLCBJbnQgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQo
YmFzZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNJbnQ5KGluZGV4KSk7CisgICAgICAgIEFy
ZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQcmVJbmRleDsKKyAgICAgICAgcmVz
dWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGluZGV4OworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwg
dHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBBcmcgcG9z
dEluZGV4KEFpcjo6VG1wIGJhc2UsIEludCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChi
YXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc0ludDkoaW5kZXgpKTsKKyAgICAgICAgQXJn
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFBvc3RJbmRleDsKKyAgICAgICAgcmVz
dWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGluZGV4OworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIHN0YXRpYyBBcmcgcmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiAgICAgewogICAgICAg
ICBBcmcgcmVzdWx0OwpAQCAtNzk5LDYgKzgyNSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBraW5kKCkgPT0gSW5kZXg7CiAgICAgfQogCisgICAgYm9vbCBpc1ByZUluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUHJlSW5kZXg7CisgICAgfQorCisgICAg
Ym9vbCBpc1Bvc3RJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09
IFBvc3RJbmRleDsKKyAgICB9CisKICAgICBib29sIGlzTWVtb3J5KCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CkBAIC04MDgsNiArODQ0LDggQEAgcHVibGljOgogICAg
ICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgSW5k
ZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC05NzIsNyArMTAxMCw3IEBAIHB1YmxpYzoKIAogICAgIEFpcjo6VG1wIGJh
c2UoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTaW1wbGVBZGRyIHx8
IGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgp
ID09IEluZGV4KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTaW1wbGVBZGRyIHx8IGtpbmQo
KSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IElu
ZGV4IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8fCBraW5kKCkgPT0gUG9zdEluZGV4KTsKICAgICAg
ICAgcmV0dXJuIG1fYmFzZTsKICAgICB9CiAKQEAgLTk4Miw3ICsxMDIwLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgaWYgKGtpbmQoKSA9PSBTdGFjaykKICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9zY2FsZSk7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9
PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
QWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJn
IHx8IGtpbmQoKSA9PSBJbmRleCB8fCBraW5kKCkgPT0gUHJlSW5kZXggfHwga2luZCgpID09IFBv
c3RJbmRleCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4o
bV9vZmZzZXQpOwogICAgIH0KIApAQCAtMTA0NCw2ICsxMDgyLDggQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgogICAgICAgICBj
YXNlIEluZGV4OgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRl
eDoKICAgICAgICAgY2FzZSBTdGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBj
YXNlIFJlbENvbmQ6CkBAIC0xMDgxLDYgKzExMjEsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
QWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CiAgICAgICAgIGNhc2UgSW5k
ZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAg
ICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgQmln
SW1tOiAvLyBZZXMsIHdlIGFsbG93IEJpZ0ltbSBhcyBhIGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVz
ZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBzLgpAQCAtMTIzNyw2ICsxMjc5LDIyIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0
YXRpYyBib29sIGlzVmFsaWRQcmVJbmRleEZvcm0oSW50IG9mZnNldCkKKyAgICB7CisgICAgICAg
IGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFNpZ25lZEltbTkob2Zm
c2V0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRp
YyBib29sIGlzVmFsaWRQb3N0SW5kZXhGb3JtKEludCBvZmZzZXQpCisgICAgeworICAgICAgICBp
ZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRTaWduZWRJbW05KG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICAvLyBJZiB5b3UgZG9uJ3Qg
cGFzcyBhIHdpZHRoIHRoZW4gdGhpcyBvcHRpbWlzdGljYWxseSBhc3N1bWVzIHRoYXQgeW91J3Jl
IHVzaW5nIHRoZSByaWdodCB3aWR0aC4gQnV0CiAgICAgLy8gdGhlIHdpZHRoIGlzIHJlbGV2YW50
IHRvIHZhbGlkaXR5LCBzbyBwYXNzaW5nIGEgbnVsbCB3aWR0aCBpcyBvbmx5IHVzZWZ1bCBmb3Ig
YXNzZXJ0aW9ucy4gRG9uJ3QKICAgICAvLyBwYXNzIG51bGwgd2lkdGhzIHdoZW4gY2FzY2FkaW5n
IHRocm91Z2ggQXJncyBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IhCkBAIC0xMjY1LDYgKzEz
MjMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRBZGRyRm9ybShvZmZz
ZXQoKSwgd2lkdGgpOwogICAgICAgICBjYXNlIEluZGV4OgogICAgICAgICAgICAgcmV0dXJuIGlz
VmFsaWRJbmRleEZvcm0oc2NhbGUoKSwgb2Zmc2V0KCksIHdpZHRoKTsKKyAgICAgICAgY2FzZSBQ
cmVJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkUHJlSW5kZXhGb3JtKG9mZnNldCgp
KTsKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFBv
c3RJbmRleEZvcm0ob2Zmc2V0KCkpOwogICAgICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNh
c2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgpAQCAtMTI4NCw2ICsxMzQ2LDgg
QEAgcHVibGljOgogICAgICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIGNhc2UgQWRkcjoK
ICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6
CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5kZXg6CkBAIC0xMzI2LDYgKzEzOTAs
OCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU2ltcGxlQWRkcjoKICAgICAgICAgY2FzZSBBZGRy
OgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKKyAgICAgICAgY2FzZSBQcmVJbmRl
eDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwg
VXNlLCBHUCwgYXJnUm9sZSA9PSBVc2VBZGRyID8gYXJnV2lkdGggOiBwb2ludGVyV2lkdGgoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmRleDoKQEAgLTEzODMsNiArMTQ0
OSwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlw
ZT4obV9vZmZzZXQpLCBtX2V4dGVuZCk7CiAgICAgfQogCisgICAgTWFjcm9Bc3NlbWJsZXI6OlBy
ZUluZGV4QWRkcmVzcyBhc1ByZUluZGV4QWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoaXNQcmVJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpQcmVJ
bmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBvZmZzZXQoKSk7CisgICAgfQorCisgICAgTWFjcm9B
c3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MgYXNQb3N0SW5kZXhBZGRyZXNzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc1Bvc3RJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKG1fYmFzZS5ncHIoKSwgb2Zmc2V0KCkpOworICAg
IH0KKwogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGFzUmVsYXRpb25h
bENvbmRpdGlvbigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNSZWxDb25kKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAppbmRleCBlODI1ODJiYjVlZDAyMjJm
Zjc0NDNlZWEyNjIzODM0MTU5OGE1NWU4Li5hMTU5YzhiMzI4M2VmZTIwYjMyY2ZhZGYzMWZkZDhi
NmYxZGI0ZTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaApAQCAtOTIs
NiArOTIsMTUgQEAgc3RydWN0IEluc3QgewogICAgICAgICBhcHBlbmQoYXJndW1lbnRzLi4uKTsK
ICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBy
ZXBsYWNlSW5kZW50aXR5KEtpbmQga2luZCwgQXJnIGFyZywgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKKyAgICB7CisgICAgICAgIHRoaXMtPmtpbmQgPSBraW5kOworICAgICAgICBhcmdzLmNsZWFy
KCk7CisgICAgICAgIGFyZ3MuYXBwZW5kKGFyZyk7CisgICAgICAgIGFwcGVuZChhcmd1bWVudHMu
Li4pOworICAgIH0KKwogICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQg
dXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0
CiAgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRpdGVkOyBpZiB5b3UncmUgY2Fy
cnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdyZQogICAgIC8vIHByb2JhYmx5
IGRvaW5nIGl0IHdyb25nLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bj
b2RlLm9wY29kZXMKaW5kZXggNjYxZWFkZDIzNzNjNTRhNGJiYTk0N2E1NGJkYTI1NTdiZGI4YWU0
YS4uYTQ2NjEzN2I3MmM5ZDI5MDJlOWRiYWZlZmIwYjgzYjFjNjc2YzIwYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC02NjEsNiArNjYx
LDEyIEBAIHg4Nl82NDogU3dhcDY0IFVEOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRtcAogICAg
IFRtcCwgQWRkcgogCithcm02NDogTW92ZVdpdGhJbmNyZW1lbnQ2NCBVOkc6NjQsIFVEOkc6NjQK
KyAgICBQcmVJbmRleCwgVG1wIGFzIGxvYWQ2NAorICAgIFBvc3RJbmRleCwgVG1wIGFzIGxvYWQ2
NAorICAgIFRtcCwgUHJlSW5kZXggYXMgc3RvcmU2NAorICAgIFRtcCwgUG9zdEluZGV4IGFzIHN0
b3JlNjQKKwogTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wIGFzIHplcm9FeHRl
bmQzMlRvV29yZAogICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKQEAgLTY3MSw2ICs2NzcsMTIgQEAg
TW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIHg4NjogSW1tLCBBZGRyIGFzIHN0b3JlMzIKICAg
ICB4ODY6IEltbSwgSW5kZXggYXMgc3RvcmUzMgogCithcm02NDogTW92ZVdpdGhJbmNyZW1lbnQz
MiBVOkc6MzIsIFVaRDpHOjMyCisgICAgUHJlSW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBQb3N0
SW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBUbXAsIFByZUluZGV4IGFzIHN0b3JlMzIKKyAgICBU
bXAsIFBvc3RJbmRleCBhcyBzdG9yZTMyCisKICMgVGhpcyBpcyBmb3IgbW92aW5nIGJldHdlZW4g
c3BpbGwgc2xvdHMuCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyLCBTOkc6MzIKICAgICBBZGRyLCBB
ZGRyLCBUbXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2Rl
X2dlbmVyYXRvci5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVy
YXRvci5yYgppbmRleCAzNzQwZWZkYmRkMTQ2YTM3ZjZlZGU5ZGRiYzIzZGRiYTAzYjA3NjQ2Li5m
MWJmMWE0NmNmYzg4OWVjMTkzNDZmMmMwNmI3Y2Y1MGY5ZTNkZTBkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCkBAIC0yMjksNyArMjI5
LDcgQEAgZGVmIGlzR0YodG9rZW4pCiBlbmQKIAogZGVmIGlzS2luZCh0b2tlbikKLSAgICB0b2tl
biA9fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoWmVyb1Jl
Zyl8KFNpbXBsZUFkZHIpfChBZGRyKXwoRXh0ZW5kZWRPZmZzZXRBZGRyKXwoSW5kZXgpfChSZWxD
b25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KKyAgICB0b2tlbiA9
fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoWmVyb1JlZyl8
KFNpbXBsZUFkZHIpfChBZGRyKXwoRXh0ZW5kZWRPZmZzZXRBZGRyKXwoSW5kZXgpfChQcmVJbmRl
eCl8KFBvc3RJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCl8KFN0YXR1c0Nv
bmQpKVxaLwogZW5kCiAKIGRlZiBpc0FyY2godG9rZW4pCkBAIC0zMDMsNyArMzAzLDcgQEAgY2xh
c3MgUGFyc2VyCiAKICAgICBkZWYgY29uc3VtZUtpbmQKICAgICAgICAgcmVzdWx0ID0gdG9rZW4u
c3RyaW5nCi0gICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1tLCBC
aXRJbW0sIEJpdEltbTY0LCBaZXJvUmVnLCBUbXAsIFNpbXBsZUFkZHIsIEFkZHIsIEV4dGVuZGVk
T2Zmc2V0QWRkciwgSW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1
c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVj
dGVkIGtpbmQgKEltbSwgQmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0LCBaZXJvUmVnLCBUbXAsIFNp
bXBsZUFkZHIsIEFkZHIsIEV4dGVuZGVkT2Zmc2V0QWRkciwgSW5kZXgsIFByZUluZGV4LCBQb3N0
SW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1c0NvbmQpIikgdW5s
ZXNzIGlzS2luZChyZXN1bHQpCiAgICAgICAgIGFkdmFuY2UKICAgICAgICAgcmVzdWx0CiAgICAg
ZW5kCkBAIC05MjksNiArOTI5LDEyIEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAg
ICAgICAgICAgICAgIHdoZW4gIkluZGV4IgogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmICghQXJnOjppc1ZhbGlkSW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLnNjYWxlKCksIGFyZ3Nb
I3tpbmRleH1dLm9mZnNldCgpLCAje2FyZy53aWR0aENvZGV9KSkiCiAgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgd2hl
biAiUHJlSW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6Omlz
VmFsaWRQcmVJbmRleEZvcm0oYXJnc1sje2luZGV4fV0ub2Zmc2V0KCkpKSIKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAg
ICB3aGVuICJQb3N0SW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFB
cmc6OmlzVmFsaWRQb3N0SW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpKSkiCisgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCiAgICAgICAg
ICAgICAgICAgd2hlbiAiQmlnSW1tIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCiAg
ICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKQEAgLTEyMzUsNiArMTI0MSwxMCBAQCB3cml0
ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
YXJnc1sje2luZGV4fV0uYXNBZGRyZXNzKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgi
CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQmFzZUlu
ZGV4KCkiCisgICAgICAgICAgICAgICAgd2hlbiAiUHJlSW5kZXgiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUHJlSW5kZXhBZGRyZXNzKCkiCisgICAg
ICAgICAgICAgICAgd2hlbiAiUG9zdEluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnBy
aW50ICJhcmdzWyN7aW5kZXh9XS5hc1Bvc3RJbmRleEFkZHJlc3MoKSIKICAgICAgICAgICAgICAg
ICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7
aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKICAgICAgICAgICAgICAgICB3aGVuICJS
ZXNDb25kIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IGM3MDMyZWMwODRkZGZkZDkz
NWU1NTI3ZmFhZTkzNTY4MTk4NDgxNzkuLjcyMWViM2FkZDYyNzQ4ZTJmYjAyZGRmNDI1NTdjYzU5
ZDVkODgwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTExNDAsNCArMTE0MCw5
IEBAIHZvaWQgYWRkQ29weVRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNo
YXJlZFRhc2s8dm9pZCgpPj4+Jik7CiAKIGJvb2wgc2hvdWxkUnVuKGNvbnN0IGNoYXIqIGZpbHRl
ciwgY29uc3QgY2hhciogdGVzdE5hbWUpOwogCit2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpOwor
dm9pZCB0ZXN0TG9hZFByZUluZGV4NjQoKTsKK3ZvaWQgdGVzdExvYWRQb3N0SW5kZXgzMigpOwor
dm9pZCB0ZXN0TG9hZFBvc3RJbmRleDY0KCk7CisKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKaW5kZXggNGM1MmFkYTljYzQwMmRkZTUz
OTg4Y2M4ZjJmNWU5ZTBkZGUyZTExYy4uMGE1MGFhODcwMzdmZWUzYzIxNThhYmM4YjJiNmRmOTlj
MGRmOGI3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCkBAIC0yOCw2ICsy
OCwzMDAgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKwordm9pZCB0ZXN0TG9hZFByZUluZGV4
MzIoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDksIDEwIH07CisgICAgaW50MzJfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJv
ZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxv
Y2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQzMik7CisgICAg
VmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24o
cjEsIF5yMikgICAgICAgICAgICAgCisgICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihw
MSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9y
aWdpbigpLCBJbnQzMiwgMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHBy
b2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0
LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9j
LCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAg
Ly8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3Rv
IGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAg
ICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1
YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJv
YywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9v
cF9Cb2R5X0Jsb2NrCisgICAgLy8gcDMgPSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIp
CisgICAgLy8gcjMgPSByMiArIGxvYWQocDMpCisgICAgLy8gVXBzaWxvbihyMywgXnIyKQorICAg
IC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIDQpKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxl
VmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgVmFsdWUqIHIzID0g
bG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BC
b2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwg
cDMpKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpT
ZXQsIE9yaWdpbigpLCByLCByMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAg
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAg
IC8vIHJldHVybiByMgorICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCByMik7ICAKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAg
ICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJ
bnN0cnVjdGlvbigqY29kZSwgIiM0XSEiKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBp
bnQzMl90IHsKKyAgICAgICAgaW50MzJfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkK
KyAgICAgICAgICAgIHIgKz0gKisrcHRyOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KHB0cikpLCB0ZXN0KCkpOworfQorCit2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpCit7CisgICAg
aWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisK
KyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsK
KyAgICBpbnQ2NF90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVz
dCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAg
VmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKyAgICBWYXJpYWJsZSogcCA9
IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKSAgICAg
ICAgICAgICAKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAg
VmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDY0
LCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwg
T3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
cm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBw
LCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdp
bigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgp
CisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZh
bHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6Okdl
dCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25k
ID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCks
IHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEw
KSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9y
aWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29w
Qm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sK
KyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyByMyA9
IHIyICsgbG9hZChwMykKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gZ290byBsb29w
CisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBP
cmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmln
aW4oKSwgOCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHktPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLCBwMykpOworICAgIGxv
b3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCks
IHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAs
IE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIy
CisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHIyKTsgICAKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShw
cm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgIiM4XSEiKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQ2NF90IHsKKyAg
ICAgICAgaW50NjRfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAg
IHIgKz0gKisrcHRyOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEo
aW52b2tlPGludDY0X3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0
KCkpOworfQorCit2b2lkIHRlc3RMb2FkUG9zdEluZGV4MzIoKQoreworICAgIGlmIChPcHRpb25z
OjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50MzJf
dCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50MzJf
dCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiBy
ID0gcHJvYy5hZGRWYXJpYWJsZShJbnQzMik7CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZh
cmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9j
aworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikgICAgICAgICAgICAgCisg
ICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9
IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgMCk7CisgICAg
cm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBy
LCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVl
bnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExv
b3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIy
ID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBs
b29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigp
LCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRl
c3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxv
b3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29u
ZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKwor
ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcjMg
PSByMiArIGxvYWQocDIpCisgICAgLy8gcDMgPSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHIzLCBe
cjIpCisgICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVl
KiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIy
LCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3Jp
Z2luKCksIHAyKSk7CisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgNCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7Cisg
ICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwg
RnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7IAorCisg
ICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZp
eFNTQShwcm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlm
IChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwgIzQi
KTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQzMl90IHsKKyAgICAgICAgaW50MzJf
dCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAgIHIgKz0gKnB0cisr
OworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoaW52b2tlPGludDMy
X3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCit2
b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50NjRfdCBudW1zW10gPSB7
IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50NjRfdCogcHRyID0gbnVt
czsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9j
ayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRW
YXJpYWJsZShJbnQ2NCk7CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0
KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIx
ID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikgICAgICAgICAgICAgCisgICAgLy8gcDEgPSBh
ZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFwcGVu
ZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQ2NCwgMCk7CisgICAgcm9vdC0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAg
VmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxv
b3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9CbG9j
aworICAgIC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkKKyAg
ICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBW
YWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpH
ZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVuZE5l
dzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5hcHBl
bmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRl
ZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcjMgPSByMiArIGxvYWQo
cDIpCisgICAgLy8gcDMgPSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8g
VXBzaWxvbihwMywgXnAyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiByMyA9IGxvb3BC
b2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksIHAyKSk7
CisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBP
cmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmln
aW4oKSwgOCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlh
YmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgbG9vcEJvZHkt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJs
b2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmVfQmxv
Y2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7IAorCisgICAgcHJvYy5yZXNl
dFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsK
KworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkp
CisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwgIzgiKTsKKworICAgIGF1
dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQ2NF90IHsKKyAgICAgICAgaW50NjRfdCByID0gMDsKKyAg
ICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAgIHIgKz0gKnB0cisrOworICAgICAgICBy
ZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+KCpjb2RlLCBi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCisKIHZvaWQgdGVzdElu
c2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvMzIoKQogewogICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRl
ZmF1bHRCM09wdExldmVsKCkgPCAyKQpAQCAtMzY5Nyw2ICszOTkxLDExIEBAIHZvaWQgYWRkU2hy
VGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+
Pj4mIHRhc2tzKQogICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDApKTsKICAg
ICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCAxKSk7CiAgICAgUlVOKHRlc3RaU2hy
QXJnSW1tMzIoMHhmZmZmZmZmZiwgNjMpKTsKKworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4MzIo
KSk7CisgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdExvYWRQb3N0
SW5kZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRQb3N0SW5kZXg2NCgpKTsKIH0KIAogI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmNwcAppbmRleCA2M2UyNjY3ODg1MjAxOGE3NjgwY2E1ZjA3MTQ2OTY4
MTA1ODg0YjNiLi42OWJiNmIyYmU4MTg3MGI1OTgzMzM2N2FmMjY3NWI3ZjRlZjA1NmY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAK
QEAgLTIzMyw4ICsyMzMsOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGppdFdyaXRlVGh1bmtHZW5lcmF0bwogICAgIGppdC5yZXQo
KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb2NhbDAgPSBqaXQubGFiZWwoKTsKLSAg
ICBqaXQubG9hZDY0KHgxLCBQb3N0SW5kZXgoOCksIHg2KTsKLSAgICBqaXQuc3RvcmU2NCh4Niwg
eDMsIFBvc3RJbmRleCg4KSk7CisgICAgaml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6UG9zdElu
ZGV4QWRkcmVzcyh4MSwgOCksIHg2KTsKKyAgICBqaXQuc3RvcmU2NCh4NiwgTWFjcm9Bc3NlbWJs
ZXI6OlBvc3RJbmRleEFkZHJlc3MoeDMsIDgpKTsKICAgICBzbWFsbENvcHkubGluaygmaml0KTsK
ICAgICBqaXQuYnJhbmNoU3ViNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgVHJ1c3Rl
ZEltbTMyKDgpLCB4MikubGlua1RvKGxvY2FsMCwgJmppdCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbG9jYWwyID0gaml0LmJyYW5jaEFkZDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgVHJ1
c3RlZEltbTMyKDgpLCB4Mik7Cg==
</data>
<flag name="commit-queue"
          id="456716"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434273</attachid>
            <date>2021-07-26 23:00:26 -0700</date>
            <delta_ts>2021-07-27 09:22:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210727010024.patch</filename>
            <type>text/plain</type>
            <size>47856</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMjg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
ODc4NjRiMTliZDI0ZTM3ZmM2YWJiMzlmNzgwODMwNjExZTg0NDc1Li40NTkzMDU3ZTY4ZjRhODBi
Mzk4NTYzNDgzMWQyZjkzMDljZWRkZmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MCBAQAorMjAyMS0wNy0yNiAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzOjpQcmVJbmRleEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzOjpQ
b3N0SW5kZXhBZGRyZXNzKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6c3RvcmUzMik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAg
ICAgKEpTQzo6dGVzdFN0b3JlUHJlUG9zdEluZGV4MzIpOgorICAgICAgICAoSlNDOjp0ZXN0U3Rv
cmVQcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJlUG9zdEluZGV4MzIp
OgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJbmRleDY0KToKKyAgICAgICAgKiBiMy9C
M0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwOgorICAg
ICAgICAqIGIzL2Fpci9BaXJBcmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Ompz
SGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwcmVJbmRleCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6cG9zdEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1By
ZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1Bvc3RJbmRleCBj
b25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNNZW1vcnkgY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmJhc2UgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNH
UCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZFBvc3RJbmRleEZvcm0pOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVmFsaWRGb3JtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpmb3JFYWNoVG1wRmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Zm9yRWFj
aFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNQcmVJbmRleEFkZHJlc3MgY29u
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUG9zdEluZGV4QWRkcmVzcyBjb25z
dCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
SW5zdDo6cmVwbGFjZUluZGVudGl0eSk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzOgorICAgICAgICAqIGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAgICAqIGIz
L3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RMb2Fk
UHJlSW5kZXgzMik6CisgICAgICAgICh0ZXN0TG9hZFByZUluZGV4NjQpOgorICAgICAgICAodGVz
dExvYWRQb3N0SW5kZXgzMik6CisgICAgICAgICh0ZXN0TG9hZFBvc3RJbmRleDY0KToKKyAgICAg
ICAgKGFkZFNoclRlc3RzKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChKU0M6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTI0ICBZ
dXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gQ2hhbmdl
IG1vc3Qgb2YgZW51bSBpbiBZYXJyIHRvIGVudW0tY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKaW5kZXgg
M2QxOTQ5YTQwNzg1ZDk5Y2E2MTU5NWFhYjA0YmU2ZjFkMGQ5NmJhMy4uMjM1NGM0NTM2OGM3YzBk
NWNlOTAxOGFjZmYyODRjNGEwYTA0MzFhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAgLTI0NSw2ICsy
NDUsMzQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8vIFByZUluZGV4QWRk
cmVzczoKKyAgICAvLworICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRy
ZXNzIGFuZCBwcmUtaW5jcmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3QgUHJlSW5k
ZXhBZGRyZXNzIHsKKyAgICAgICAgUHJlSW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50
IGluZGV4KQorICAgICAgICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7Cisg
ICAgICAgIGludCBpbmRleDsKKyAgICB9OworCisgICAgLy8gUG9zdEluZGV4QWRkcmVzczoKKyAg
ICAvLworICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBw
b3N0LWluY3JlbWVudC9kZWNyZW1lbnQgaW5kZXguCisgICAgc3RydWN0IFBvc3RJbmRleEFkZHJl
c3MgeworICAgICAgICBQb3N0SW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4
KQorICAgICAgICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAg
IGludCBpbmRleDsKKyAgICB9OworCiAgICAgLy8gQWJzb2x1dGVBZGRyZXNzOgogICAgIC8vCiAg
ICAgLy8gRGVzY3JpYmVzIGFuIG1lbW9yeSBvcGVyYW5kIGdpdmVuIGJ5IGEgcG9pbnRlci4gIEZv
ciByZWd1bGFyIGxvYWQgJiBzdG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2
ZmNkMDZlMTE1ZmM2OGQ2OTA5MGZkLi4yYTkxMmQwZGQyNjYyNmJkNzRlMTAzYmVmOTY1ZjJiYWRm
Y2UwYmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtMTQ0NSw5ICsxNDQ1LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgbG9hZDw2ND4oYWRkcmVzcywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkNjQoUmVn
aXN0ZXJJRCBzcmMsIFBvc3RJbmRleCBzaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBs
b2FkNjQoUHJlSW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAg
ICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMsIHNpbW0pOworICAgICAgICBtX2Fzc2Vt
Ymxlci5sZHI8NjQ+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9
CisKKyAgICB2b2lkIGxvYWQ2NChQb3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMuYmFzZSwgUG9z
dEluZGV4KHNyYy5pbmRleCkpOwogICAgIH0KIAogICAgIERhdGFMYWJlbDMyIGxvYWQ2NFdpdGhB
ZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCkBAIC0x
NTQ0LDYgKzE1NDksMTYgQEAgcHVibGljOgogICAgICAgICBsb2FkPDMyPihhZGRyZXNzLCBkZXN0
KTsKICAgICB9CiAKKyAgICB2b2lkIGxvYWQzMihQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5i
YXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihQb3N0
SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubGRyPDMyPihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkpOworICAg
IH0KKwogICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVz
cyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBs
YWJlbCh0aGlzKTsKQEAgLTE3MzMsNyArMTc0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFk
ZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CiAg
ICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBS
ZWdpc3Rlcik7CiAgICAgfQotICAgIAorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3Jj
LCBQcmVJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2
ND4oc3JjLCBkZXN0LmJhc2UsIFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2
b2lkIHN0b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2UsIFBvc3RJbmRleChk
ZXN0LmluZGV4KSk7CisgICAgfQorCiAgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBj
b25zdCB2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgc3RvcmU8NjQ+KHNyYywgYWRkcmVz
cyk7CkBAIC0xNzc3LDExICsxODAyLDYgQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KGRhdGFU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmU2NChSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBQb3N0SW5kZXggc2ltbSkKLSAgICB7Ci0gICAgICAg
IG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LCBzaW1tKTsKLSAgICB9Ci0gICAgCiAgICAg
RGF0YUxhYmVsMzIgc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMs
IEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMp
OwpAQCAtMTg3OSw2ICsxODk5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmUzMihkYXRhVGVt
cFJlZ2lzdGVyLCBhZGRyZXNzKTsKICAgICB9CiAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJ
RCBzcmMsIFByZUluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKwor
ICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVzcyBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUG9zdElu
ZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKICAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFk
ZHJlc3NPZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsK
ICAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCmluZGV4IGYyMmJmZmNlMTU1NGIwMmMyMjZjMjE0OTJh
YjA2N2JhYjM4YzQwYjUuLjUzNGVmZTE0M2Y3OTBiOTA5ODliYzJjYzYzZmYwOWEwNDY3ZTU1N2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCkBAIC0y
MjEyLDYgKzIyMTIsMTc2IEBAIHZvaWQgdGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2
NCgpCiAgICAgICAgIH0KICAgICB9CiB9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9zdEluZGV4MzIo
KQoreworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50cHRyX3QgYWRk
ciA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMyX3QgaW5kZXgg
PSBzaXplb2YoaW50MzJfdCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQzMl90IHNyYykg
eworICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7
CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAv
LyAqKytwMSA9IDQ7IHJldHVybiBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOwor
ICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9
OworCisgICAgaW50MzJfdCogcDEgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QxKDQpKTsK
KyAgICBDSEVDS19FUSgqcDEsIDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1zWzFdKTsKKwor
ICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUg
PSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5j
dGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsgcmV0dXJuIHAy
OworICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhl
bHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOwor
ICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7Cisg
ICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tl
PGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCogcDIg
PSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19FUSgqcDIsIDQp
OworICAgIENIRUNLX0VRKCotLXAyLCA1KTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVQb3N0SW5k
ZXg2NCgpCit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnRwdHJf
dCBhZGRyID0gYml0d2lzZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAgaW50MzJfdCBp
bmRleCA9IHNpemVvZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3Qg
c3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAg
ICAgIC8vICorK3AxID0gNDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BS
SW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjph
cmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOwor
ICAgIH07CisKKyAgICBpbnQ2NF90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDEo
NCkpOworICAgIENIRUNLX0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEsIG51bXNbMV0p
OworCisgICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBz
dG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysgPSA1OyByZXR1
cm4gcDI7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEND
YWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4
KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0
KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBp
bnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2NF90
KiBwMiA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDIoNSkpOworICAgIENIRUNLX0VRKCpw
MiwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9z
dEluZGV4MzIoKQoreworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50
MzJfdCBpbmRleCA9IHNpemVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGlu
dDMyX3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgIC8vIHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAg
ICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjph
cmd1bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAg
IGppdC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJlcGxhY2UpLCBDQ2FsbEhl
bHBlcnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAg
ICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAg
ICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90
Pihsb2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKyAgICAKKyAgICBDSEVDS19FUSh0ZXN0MSg0KSwg
Myk7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgNCk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChp
bnQzMl90IHJlcGxhY2UpIHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxs
SGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOwor
CisgICAgICAgICAgICAvLyByZXMgPSAqcDIrKzsgKnAyID0gNTsgcmV0dXJuIHJlczsKKyAgICAg
ICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAg
ICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVwbGFjZSksIENDYWxs
SGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAg
ICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAg
ICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludDMy
X3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVzdDIoNSksIDIp
OworICAgIENIRUNLX0VRKG51bXNbMl0sIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdElu
ZGV4NjQoKQoreworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJf
dCBpbmRleCA9IHNpemVvZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0
X3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAg
ICAgICAgICAgIC8vIHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAg
ICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1
bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBl
cnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAg
IGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAg
aml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihs
b2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAg
ICBDSEVDS19FUShudW1zWzJdLCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3Qg
cmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAg
ICAgICAgIC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAg
aml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQu
c3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChyZXBsYWNlKSwgQ0NhbGxIZWxwZXJz
OjpJbXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBq
aXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
KworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGpp
dC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4obG9h
ZCwgJm51bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAg
Q0hFQ0tfRVEobnVtc1syXSwgNSk7Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShY
ODZfNjQpIHx8IENQVShBUk02NCkKQEAgLTQ0NzUsNiArNDY0NSwxMSBAQCB2b2lkIHJ1bihjb25z
dCBjaGFyKiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBS
VU4odGVzdFhvck5vdFdpdGhMZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhS
aWdodFNoaWZ0NjQoKSk7CiAgICAgUlVOKHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0
NjQoKSk7CisKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRl
c3RTdG9yZVByZVBvc3RJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDMy
KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDY0KCkpOwogI2VuZGlmCiAKICNpZiBD
UFUoQVJNNjRFKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRl
eCBkNWZjMzE2NDY1OTY4ZWI3MzcxYjZmZjFjYzZmODMxN2ZlY2RlNTJlLi5iZmQxODBhMDMxM2Rj
MDhlNmM3OGEwNWY4NzI3MjQ2ZmIxMWZlOGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNMb3dlclRvQWlyLmNwcApAQCAtMjA3LDcgKzIwNyw4IEBAIHB1YmxpYzoKIAogICAgICAgICAg
ICAgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXSk7CiAg
ICAgICAgIH0KLSAgICAgICAgCisKKyAgICAgICAgZGV0ZWN0UHJlUG9zdEluZGV4QWRkcmVzcygp
OwogICAgICAgICBtX2Jsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKIAogICAgICAgICBBaXI6
Okluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9jb2RlKTsKQEAgLTIxNyw2ICsyMTgsMTcxIEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgdm9pZCBkZXRlY3RQcmVQb3N0SW5kZXhB
ZGRyZXNzKCkKKyAgICB7CisgICAgICAgIGlmIChtX3Byb2NlZHVyZS5vcHRMZXZlbCgpIDwgMiB8
fCAhaXNBUk02NCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB1c2luZyBuYW1lc3Bh
Y2UgQWlyOworCisgICAgICAgIGF1dG8gdHJ5UHJlUG9zdEluZGV4ID0gWyZdIChWYWx1ZSogdmFs
dWUpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIExvYWQ6IHsKKyAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFs
dWUtPmFzPE1lbW9yeVZhbHVlPigpOworCisgICAgICAgICAgICAgICAgLy8gUHJlLUluZGV4IFBh
dHRlcm46CisgICAgICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBhZGQoYmFzZSwgb2Zmc2V0
KSAgCisgICAgICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IGxvYWQoYWRkcmVzcywgMCkKKyAg
ICAgICAgICAgICAgICBhdXRvIHRyeVByZUluZGV4ID0gWyZdICgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShNb3ZlV2l0aEluY3Jl
bWVudDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1vcnktPnR5cGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlByZUluZGV4LCBBcmc6OlRt
cCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg
IFZhbHVlKiBhZGRyZXNzID0gbWVtb3J5LT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGFkZHJlc3MtPm9wY29kZSgpICE9IEFkZCB8fCAhYWRkcmVzcy0+Y2hpbGQoMSktPmhh
c0ludFB0cigpIHx8IG1lbW9yeS0+b2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IGFkZHJlc3MtPmNo
aWxkKDEpLT5hc0ludFB0cigpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlw
ZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgIT0gb2Zmc2V0IHx8ICFBcmc6Omlz
VmFsaWRQcmVJbmRleEZvcm0oc21hbGxPZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgICBtX3ByZUluZGV4Q2FuZGlkYXRlcy5hZGQobWVt
b3J5LCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgdHJ5
UHJlSW5kZXgoKTsKKworICAgICAgICAgICAgICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoKKyAg
ICAgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gbG9hZChiYXNlLCAwKQorICAgICAgICAgICAg
ICAgIC8vICAgICBhZGRyZXNzID0gYWRkKGJhc2UsIG9mZnNldCkgCisgICAgICAgICAgICAgICAg
YXV0byB0cnlBcHBlbmRQb3N0SW5kZXggPSBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobWVtb3J5LT5vZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgbV9iYXNlVG9NZW1vcmllcy5hZGQobWVtb3J5LT5jaGlsZCgwKSwg
VmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwor
ICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICB0cnlBcHBlbmRQb3N0SW5kZXgo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y2FzZSBBZGQ6IHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbGVmdCA9IHZhbHVlLT5jaGlsZCgw
KTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSB2YWx1ZS0+Y2hpbGQoMSk7CisKKyAg
ICAgICAgICAgICAgICBhdXRvIHRyeVBvdGVudGlhbFBvc3RJbmRleEFkZHJlc3MgPSBbJl0gKCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIXJpZ2h0LT5oYXNJbnRQdHIoKSB8fCB2YWx1ZS0+
dHlwZSgpICE9IEludDY0IHx8ICFtX2Jhc2VUb01lbW9yaWVzLmNvbnRhaW5zKGxlZnQpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpbnRwdHJf
dCBvZmZzZXQgPSByaWdodC0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWU6
Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4o
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8
fCAhQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShzbWFsbE9mZnNldCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUq
IG1lbW9yeSA6IG1fYmFzZVRvTWVtb3JpZXMuZ2V0KGxlZnQpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9wb3N0SW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnksIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgdHJ5UG90ZW50aWFsUG9zdEluZGV4QWRkcmVz
cygpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworCisgICAgICAgIHVpbnQzMl90IGxvYyA9IDA7CisKKyAgICAgICAgYXV0byB1cGRhdGVB
bmFseXNpc0RhdGEgPSBbJl0gKEluc3QmIGluc3QsIGJvb2wgaW5jcmVtZW50ID0gdHJ1ZSwgYm9v
bCB1cGRhdGVVc2VUbXBzID0gdHJ1ZSkgeworICAgICAgICAgICAgaWYgKGluY3JlbWVudCkKKyAg
ICAgICAgICAgICAgICArK2xvYzsKKworICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5v
cmlnaW47CisgICAgICAgICAgICB0cnlQcmVQb3N0SW5kZXgodmFsdWUpOworICAgICAgICAgICAg
bV92YWx1ZVRvSW5zdC5hZGQodmFsdWUsICZpbnN0KTsKKyAgICAgICAgICAgIG1fdmFsdWVUb0xv
Yy5hZGQodmFsdWUsIGxvYyk7CisKKyAgICAgICAgICAgIGlmICh1cGRhdGVVc2VUbXBzKSB7Cisg
ICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSBy
b2xlLCBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVz
ZShyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXBGYXN0KFsm
XSAoVG1wJiB0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RtcFRvTG9jYXRp
b25zLmFkZCh0bXAsIFZlY3Rvcjx1aW50MzJfdD4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChs
b2MpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0g
ICAgIAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisg
ICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IG1fcHJvbG9ndWUpCisgICAgICAgICAgICB1cGRhdGVB
bmFseXNpc0RhdGEoaW5zdCwgZmFsc2UsIGZhbHNlKTsKKworICAgICAgICBmb3IgKEIzOjpCYXNp
Y0Jsb2NrKiBiM2Jsb2NrIDogbV9wcm9jZWR1cmUuYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAg
ICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBtX2Jsb2NrVG9CbG9ja1tiM2Jsb2NrXS0+aW5zdHMo
KSkKKyAgICAgICAgICAgICAgICB1cGRhdGVBbmFseXNpc0RhdGEoaW5zdCk7CisgICAgICAgIH0K
KworICAgICAgICBhdXRvIGxhc3RVc2VMb2NhdGlvbiA9IFsmXSAoVmFsdWUqIHZhbHVlKSAtPiB1
aW50MzJfdCB7CisgICAgICAgICAgICBUbXAmIHRtcCA9IG1fdmFsdWVUb1RtcFt2YWx1ZV07Cisg
ICAgICAgICAgICByZXR1cm4gKHRtcCAmJiBtX3RtcFRvTG9jYXRpb25zLmNvbnRhaW5zKHRtcCkp
ID8gbV90bXBUb0xvY2F0aW9ucy5nZXQodG1wKS5sYXN0KCkgOiAwOworICAgICAgICB9OworCisg
ICAgICAgIGZvciAoYXV0byBpdHIgPSBtX3ByZUluZGV4Q2FuZGlkYXRlcy5iZWdpbigpOyBpdHIg
IT0gbV9wcmVJbmRleENhbmRpZGF0ZXMuZW5kKCk7ICsraXRyKSB7CisgICAgICAgICAgICBNZW1v
cnlWYWx1ZSogbWVtb3J5ID0gaXRyLT5rZXk7CisgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9
IGl0ci0+dmFsdWU7CisgICAgICAgICAgICBWYWx1ZSogYmFzZSA9IGFkZHJlc3MtPmNoaWxkKDAp
OworICAgICAgICAgICAgaWYgKG1faWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IG1f
aWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgdWludDMyX3QgbWVtb3J5TG9jID0gbV92YWx1ZVRvTG9jLmdldCht
ZW1vcnkpOworICAgICAgICAgICAgaWYgKGxhc3RVc2VMb2NhdGlvbihiYXNlKSA+IG1lbW9yeUxv
YyB8fCBsYXN0VXNlTG9jYXRpb24oYWRkcmVzcykgPCBtZW1vcnlMb2MpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIEluc3QqIG1lbW9yeUluc3QgPSBtX3ZhbHVlVG9J
bnN0LmdldChtZW1vcnkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bj
b2RlRm9yVHlwZShNb3ZlV2l0aEluY3JlbWVudDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1v
cnktPnR5cGUoKSk7CisgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9
IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQ
dHIoKSk7CisgICAgICAgICAgICBtZW1vcnlJbnN0LT5yZXBsYWNlSW5kZW50aXR5KG9wY29kZSwg
QXJnOjpwcmVJbmRleCh0bXAoYmFzZSksIHNtYWxsT2Zmc2V0KSwgdG1wKG1lbW9yeSkpOworCisg
ICAgICAgICAgICBJbnN0KiBhZGRyZXNzSW5zdCA9IG1fdmFsdWVUb0luc3QuZ2V0KGFkZHJlc3Mp
OworICAgICAgICAgICAgYWRkcmVzc0luc3QtPnJlcGxhY2VJbmRlbnRpdHkocmVsYXhlZE1vdmVG
b3JUeXBlKGFkZHJlc3MtPnR5cGUoKSksIHRtcChiYXNlKSwgdG1wKGFkZHJlc3MpKTsKKworICAg
ICAgICAgICAgbV9pZ25vcmVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAgIG1faWdu
b3JlZFZhbHVlcy5hZGQobWVtb3J5KTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gYmVmb3Jl
TGFzdFVzZUxvY2F0aW9uID0gWyZdIChWYWx1ZSogdmFsdWUpIC0+IHVpbnQzMl90IHsKKyAgICAg
ICAgICAgIFRtcCYgdG1wID0gbV92YWx1ZVRvVG1wW3ZhbHVlXTsKKyAgICAgICAgICAgIGlmICh0
bXAgJiYgbV90bXBUb0xvY2F0aW9ucy5jb250YWlucyh0bXApKSB7CisgICAgICAgICAgICAgICAg
VmVjdG9yPHVpbnQzMl90PiBsb2NzID0gbV90bXBUb0xvY2F0aW9ucy5nZXQodG1wKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbG9jcy5zaXplKCkgPiAxID8gbG9jcy5hdChsb2NzLnNpemUoKSAt
IDIpIDogMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9
OworCisgICAgICAgIGZvciAoYXV0byBpdHIgPSBtX3Bvc3RJbmRleENhbmRpZGF0ZXMuYmVnaW4o
KTsgaXRyICE9IG1fcG9zdEluZGV4Q2FuZGlkYXRlcy5lbmQoKTsgKytpdHIpIHsKKyAgICAgICAg
ICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBpdHItPmtleTsKKyAgICAgICAgICAgIFZhbHVlKiBh
ZGRyZXNzID0gaXRyLT52YWx1ZTsKKyAgICAgICAgICAgIFZhbHVlKiBiYXNlID0gYWRkcmVzcy0+
Y2hpbGQoMCk7CisgICAgICAgICAgICBpZiAobV9pZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1lbW9y
eSkgfHwgbV9pZ25vcmVkVmFsdWVzLmNvbnRhaW5zKGFkZHJlc3MpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoYmVmb3JlTGFzdFVzZUxvY2F0aW9uKGJhc2Up
ID4gbV92YWx1ZVRvTG9jLmdldChtZW1vcnkpIHx8IGxhc3RVc2VMb2NhdGlvbihhZGRyZXNzKSA8
IG1fdmFsdWVUb0xvYy5nZXQoYWRkcmVzcykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIEluc3QqIG1lbW9yeUluc3QgPSBtX3ZhbHVlVG9JbnN0LmdldChtZW1vcnkp
OworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShNb3Zl
V2l0aEluY3JlbWVudDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1vcnktPnR5cGUoKSk7Cisg
ICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZh
bHVlOjpPZmZzZXRUeXBlPihhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQdHIoKSk7CisgICAgICAg
ICAgICBtZW1vcnlJbnN0LT5yZXBsYWNlSW5kZW50aXR5KG9wY29kZSwgQXJnOjpwb3N0SW5kZXgo
dG1wKGJhc2UpLCBzbWFsbE9mZnNldCksIHRtcChtZW1vcnkpKTsKKworICAgICAgICAgICAgSW5z
dCogYWRkcmVzc0luc3QgPSBtX3ZhbHVlVG9JbnN0LmdldChhZGRyZXNzKTsKKyAgICAgICAgICAg
IGFkZHJlc3NJbnN0LT5yZXBsYWNlSW5kZW50aXR5KHJlbGF4ZWRNb3ZlRm9yVHlwZShhZGRyZXNz
LT50eXBlKCkpLCB0bXAoYmFzZSksIHRtcChhZGRyZXNzKSk7CisKKyAgICAgICAgICAgIG1faWdu
b3JlZFZhbHVlcy5hZGQoYWRkcmVzcyk7CisgICAgICAgICAgICBtX2lnbm9yZWRWYWx1ZXMuYWRk
KG1lbW9yeSk7CisgICAgICAgIH0KKworICAgICAgICBtX3RtcFRvTG9jYXRpb25zLmNsZWFyKCk7
CisgICAgICAgIG1fdmFsdWVUb0luc3QuY2xlYXIoKTsKKyAgICAgICAgbV92YWx1ZVRvTG9jLmNs
ZWFyKCk7CisKKyAgICAgICAgbV9wcmVJbmRleENhbmRpZGF0ZXMuY2xlYXIoKTsKKyAgICAgICAg
bV9iYXNlVG9NZW1vcmllcy5jbGVhcigpOworICAgICAgICBtX3Bvc3RJbmRleENhbmRpZGF0ZXMu
Y2xlYXIoKTsKKyAgICB9CisKICAgICBib29sIHNob3VsZENvcHlQcm9wYWdhdGUoVmFsdWUqIHZh
bHVlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKQEAgLTU0Niw3
ICs3MTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAg
ICAgICAgcmV0dXJuIHNjYWxlOwogICAgIH0KLSAgICAKKwogICAgIC8vIFRoaXMgdHVybnMgdGhl
IGdpdmVuIG9wZXJhbmQgaW50byBhbiBhZGRyZXNzLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIElu
dCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgogICAgIEFyZyBlZmZlY3Rp
dmVBZGRyKFZhbHVlKiBhZGRyZXNzLCBJbnQgb2Zmc2V0LCBXaWR0aCB3aWR0aCkKQEAgLTQyNjUs
NiArNDQzMSwxNSBAQCBwcml2YXRlOgogICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrKiwgQWly
OjpCYXNpY0Jsb2NrKj4gbV9ibG9ja1RvQmxvY2s7CiAgICAgSGFzaE1hcDxWYXJpYWJsZSosIFZl
Y3RvcjxUbXA+PiBtX3ZhcmlhYmxlVG9UbXBzOwogCisgICAgSGFzaE1hcDxUbXAsIFZlY3Rvcjx1
aW50MzJfdD4+IG1fdG1wVG9Mb2NhdGlvbnM7CisgICAgSGFzaE1hcDxWYWx1ZSosIEluc3QqPiBt
X3ZhbHVlVG9JbnN0OworICAgIEhhc2hNYXA8VmFsdWUqLCB1aW50MzJfdD4gbV92YWx1ZVRvTG9j
OworCisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gbV9wcmVJbmRleENhbmRpZGF0
ZXM7CisgICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBtX2Jhc2VUb01l
bW9yaWVzOworICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IG1fcG9zdEluZGV4Q2Fu
ZGlkYXRlczsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1faWdub3JlZFZhbHVlczsKKwogICAgIFVz
ZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNoaWxkcmVuOwogICAg
IEJsb2NrV29ya2xpc3QgbV9mYXN0V29ya2xpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKaW5kZXggMjI4MGZkNzcxMjUyZTcyNjBmNjg1MDUwOTJm
ZDU0M2NmZTA2MTg1Ny4uZjRhZmY2NzRkNDQ4YjhmODgwN2JhNDQwZTc1NTExNTM4ZmNjMTIwNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcApAQCAt
MTkyOSw2ICsxOTI5LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9
IG1fdmFsdWUtPmxhc3RDaGlsZCgpOwogICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9
IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOwogCisgICAgICAgICAgICAvLyBQb3RlbnRpYWwg
UHJlLUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAvLyAgICAgTG9hZChBZGQoYWRkcmVzcywg
b2Zmc2V0MSksIG9mZnNldCA9IDApCisgICAgICAgICAgICBhdXRvIGlzUG90ZW50aWFsUHJlSW5k
ZXggPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MtPm9wY29k
ZSgpICE9IEFkZCB8fCAhYWRkcmVzcy0+Y2hpbGQoMSktPmhhc0ludFB0cigpIHx8IG1lbW9yeS0+
b2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBpZiAobWVtb3J5LT5vcGNvZGUoKSAhPSBMb2FkKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+dHlwZSgpICE9IEludDMy
ICYmIG1lbW9yeS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICBpZiAoaXNQb3RlbnRpYWxQcmVJbmRleCgpKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IExvYWQoQWRkKGFkZHJlc3MsIG9mZnNl
dDEpLCBvZmZzZXQgPSBvZmZzZXQyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBMb2FkKGFk
ZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQogICAgICAgICAgICAgLy8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAppbmRleCAxMDNjNmVjY2EzZDMxNGJiNGVk
OGMwMmE0ZDJmMDA5Y2E2NDFkMDAxLi43N2VlODQyNTEyNGI5ZDhiOGM1ODJmMzlmZjk2OWY2MGZk
MTZjYzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCkBAIC0xMzAs
NiArMTMwLDExIEBAIHVuc2lnbmVkIEFyZzo6anNIYXNoKCkgY29uc3QKICAgICAgICAgcmVzdWx0
ICs9IG1fYmFzZS5pbnRlcm5hbFZhbHVlKCk7CiAgICAgICAgIHJlc3VsdCArPSBtX2luZGV4Lmlu
dGVybmFsVmFsdWUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcmVJbmRleDoKKyAgICBj
YXNlIFBvc3RJbmRleDoKKyAgICAgICAgcmVzdWx0ICs9IG1fb2Zmc2V0OworICAgICAgICByZXN1
bHQgKz0gbV9iYXNlLmludGVybmFsVmFsdWUoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBT
dGFjazoKICAgICAgICAgcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3NjYWxlKTsK
ICAgICAgICAgcmVzdWx0ICs9IHN0YWNrU2xvdCgpLT5pbmRleCgpOwpAQCAtMTYxLDcgKzE2Niw3
IEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5w
cmludGYoIiQweCVsbHgiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KG1fb2Zmc2V0
KSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFplcm9SZWc6Ci0gICAgICAgIG91dC5wcmlu
dCgiJSV4enIiKTsKKyAgICAgICAgb3V0LnByaW50KCIleHpyIik7CiAgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIiki
KTsKQEAgLTE4MCw2ICsxODUsMTIgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKICAgICAgICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxlKCkpOwogICAgICAgICBvdXQu
cHJpbnQoIikiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAg
IG91dC5wcmludCgiKCIsIGJhc2UoKSwgIixQcmUoJCIsIG9mZnNldCgpLCAiKSkiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgUG9zdEluZGV4OgorICAgICAgICBvdXQucHJpbnQoIigiLCBi
YXNlKCksICIsUG9zdCgkIiwgb2Zmc2V0KCksICIpKSIpOworICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBTdGFjazoKICAgICAgICAgaWYgKG9mZnNldCgpKQogICAgICAgICAgICAgb3V0LnByaW50
KG9mZnNldCgpKTsKQEAgLTI2MSw2ICsyNzIsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEFyZzo6S2luZCBraW5kKQogICAgIGNhc2UgQXJnOjpJbmRleDoKICAgICAg
ICAgb3V0LnByaW50KCJJbmRleCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OlBy
ZUluZGV4OgorICAgICAgICBvdXQucHJpbnQoIlByZUluZGV4Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFyZzo6UG9zdEluZGV4OgorICAgICAgICBvdXQucHJpbnQoIlBvc3RJbmRleCIp
OworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OlJlbENvbmQ6CiAgICAgICAgIG91dC5w
cmludCgiUmVsQ29uZCIpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuaAppbmRleCBjZTVhNGU3Mzc5YWQ2NDQ0NWYwYzNhYmQxMjlmMzI5Yjk0N2ZlODEy
Li4xZWJmNTJhMjE3MmEzYjI5M2ZiOWVlMjYyNGVhMDUyYTRhY2U0OGQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKQEAgLTc3LDYgKzc3LDggQEAgcHVibGljOgogICAgICAg
ICBTdGFjaywKICAgICAgICAgQ2FsbEFyZywKICAgICAgICAgSW5kZXgsCisgICAgICAgIFByZUlu
ZGV4LAorICAgICAgICBQb3N0SW5kZXgsCiAKICAgICAgICAgLy8gSW1tZWRpYXRlIG9wZXJhbmRz
IHRoYXQgY3VzdG9taXplIHRoZSBiZWhhdmlvciBvZiBhbiBvcGVyYXRpb24uIFlvdSBjYW4gdGhp
bmsgb2YgdGhlbSBhcwogICAgICAgICAvLyBzZWNvbmRhcnkgb3Bjb2Rlcy4gVGhleSBhcmUgYWx3
YXlzICJVc2UiJ2QuCkBAIC02NDksNiArNjUxLDMwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IEFyZzo6aW5kZXgoYmFzZSwgaW5kZXgsIHNjYWxlLCAwKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAg
ICBzdGF0aWMgQXJnIHByZUluZGV4KEFpcjo6VG1wIGJhc2UsIEludCBpbmRleCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc0ludDkoaW5kZXgp
KTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFByZUluZGV4
OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAg
c3RhdGljIEFyZyBwb3N0SW5kZXgoQWlyOjpUbXAgYmFzZSwgSW50IGluZGV4KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzSW50OShpbmRleCkp
OworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUG9zdEluZGV4
OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgc3RhdGljIEFy
ZyByZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikK
ICAgICB7CiAgICAgICAgIEFyZyByZXN1bHQ7CkBAIC03OTksNiArODI1LDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKICAgICB9CiAKKyAgICBib29sIGlzUHJl
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBQcmVJbmRleDsK
KyAgICB9CisKKyAgICBib29sIGlzUG9zdEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBraW5kKCkgPT0gUG9zdEluZGV4OworICAgIH0KKwogICAgIGJvb2wgaXNNZW1vcnkoKSBj
b25zdAogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKQEAgLTgwOCw2ICs4NDQsOCBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAg
ICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQ
b3N0SW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk3Miw3ICsxMDEwLDcgQEAgcHVibGljOgogCiAg
ICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09
IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0
QWRkciB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNpbXBs
ZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8
fCBraW5kKCkgPT0gSW5kZXggfHwga2luZCgpID09IFByZUluZGV4IHx8IGtpbmQoKSA9PSBQb3N0
SW5kZXgpOwogICAgICAgICByZXR1cm4gbV9iYXNlOwogICAgIH0KIApAQCAtOTgyLDcgKzEwMjAs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoa2luZCgpID09IFN0YWNrKQogICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX3NjYWxlKTsKLSAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFk
ZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2lu
ZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8
fCBraW5kKCkgPT0gUG9zdEluZGV4KTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVl
OjpPZmZzZXRUeXBlPihtX29mZnNldCk7CiAgICAgfQogCkBAIC0xMDQ0LDYgKzEwODIsOCBAQCBw
dWJsaWM6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFk
ZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAg
IGNhc2UgUG9zdEluZGV4OgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENhbGxB
cmc6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKQEAgLTEwODEsNiArMTEyMSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKICAg
ICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQ
b3N0SW5kZXg6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAg
ICAgICAgY2FzZSBCaWdJbW06IC8vIFllcywgd2UgYWxsb3cgQmlnSW1tIGFzIGEgZG91YmxlIGlt
bWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVudGluZyBzdGFja21hcHMuCkBAIC0xMjM3
LDYgKzEyNzksMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0
PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFByZUluZGV4Rm9ybShJbnQgb2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlk
U2lnbmVkSW1tOShvZmZzZXQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PElu
dD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFBvc3RJbmRleEZvcm0oSW50IG9mZnNldCkKKyAg
ICB7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFNp
Z25lZEltbTkob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIC8v
IElmIHlvdSBkb24ndCBwYXNzIGEgd2lkdGggdGhlbiB0aGlzIG9wdGltaXN0aWNhbGx5IGFzc3Vt
ZXMgdGhhdCB5b3UncmUgdXNpbmcgdGhlIHJpZ2h0IHdpZHRoLiBCdXQKICAgICAvLyB0aGUgd2lk
dGggaXMgcmVsZXZhbnQgdG8gdmFsaWRpdHksIHNvIHBhc3NpbmcgYSBudWxsIHdpZHRoIGlzIG9u
bHkgdXNlZnVsIGZvciBhc3NlcnRpb25zLiBEb24ndAogICAgIC8vIHBhc3MgbnVsbCB3aWR0aHMg
d2hlbiBjYXNjYWRpbmcgdGhyb3VnaCBBcmdzIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciEK
QEAgLTEyNjUsNiArMTMyMywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gaXNWYWxp
ZEFkZHJGb3JtKG9mZnNldCgpLCB3aWR0aCk7CiAgICAgICAgIGNhc2UgSW5kZXg6CiAgICAgICAg
ICAgICByZXR1cm4gaXNWYWxpZEluZGV4Rm9ybShzY2FsZSgpLCBvZmZzZXQoKSwgd2lkdGgpOwor
ICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRQcmVJbmRl
eEZvcm0ob2Zmc2V0KCkpOworICAgICAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgICAgIHJl
dHVybiBpc1ZhbGlkUG9zdEluZGV4Rm9ybShvZmZzZXQoKSk7CiAgICAgICAgIGNhc2UgUmVsQ29u
ZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CkBAIC0x
Mjg0LDYgKzEzNDYsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU2ltcGxlQWRkcjoKICAgICAg
ICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKKyAgICAgICAg
Y2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICBmdW5j
dG9yKG1fYmFzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmRleDoKQEAg
LTEzMjYsNiArMTM5MCw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBTaW1wbGVBZGRyOgogICAg
ICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgorICAgICAg
ICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgICAgIGZ1
bmN0b3IobV9iYXNlLCBVc2UsIEdQLCBhcmdSb2xlID09IFVzZUFkZHIgPyBhcmdXaWR0aCA6IHBv
aW50ZXJXaWR0aCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEluZGV4OgpA
QCAtMTM4Myw2ICsxNDQ5LDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFZh
bHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCksIG1fZXh0ZW5kKTsKICAgICB9CiAKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzIGFzUHJlSW5kZXhBZGRyZXNzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc1ByZUluZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXI6OlByZUluZGV4QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIG9mZnNldCgpKTsKKyAgICB9
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyBhc1Bvc3RJbmRleEFkZHJl
c3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUG9zdEluZGV4KCkpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBv
ZmZzZXQoKSk7CisgICAgfQorCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRp
b24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChp
c1JlbENvbmQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCmluZGV4IGU4
MjU4MmJiNWVkMDIyMmZmNzQ0M2VlYTI2MjM4MzQxNTk4YTU1ZTguLmExNTljOGIzMjgzZWZlMjBi
MzJjZmFkZjMxZmRkOGI2ZjFkYjRlMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdC5oCkBAIC05Miw2ICs5MiwxNSBAQCBzdHJ1Y3QgSW5zdCB7CiAgICAgICAgIGFwcGVuZChh
cmd1bWVudHMuLi4pOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KKyAgICB2b2lkIHJlcGxhY2VJbmRlbnRpdHkoS2luZCBraW5kLCBBcmcgYXJnLCBBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgdGhpcy0+a2luZCA9IGtpbmQ7CisgICAg
ICAgIGFyZ3MuY2xlYXIoKTsKKyAgICAgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICAgICAgYXBw
ZW5kKGFyZ3VtZW50cy4uLik7CisgICAgfQorCiAgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGZ1bmN0
b3JzIGFsbCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ugd2FudCB0byB1c2UgdGhlbSBm
b3IgdGhpbmdzIHRoYXQKICAgICAvLyBlZGl0IElSLiBJUiBpcyBtZWFudCB0byBiZSBlZGl0ZWQ7
IGlmIHlvdSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29uc3QgSW5zdCYiIHRoZW4geW91J3JlCiAg
ICAgLy8gcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRleCA2NjFlYWRkMjM3M2M1NGE0YmJhOTQ3YTU0
YmRhMjU1N2JkYjhhZTRhLi5hNDY2MTM3YjcyYzlkMjkwMmU5ZGJhZmVmYjBiODNiMWM2NzZjMjBj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMK
QEAgLTY2MSw2ICs2NjEsMTIgQEAgeDg2XzY0OiBTd2FwNjQgVUQ6Rzo2NCwgVUQ6Rzo2NAogICAg
IFRtcCwgVG1wCiAgICAgVG1wLCBBZGRyCiAKK2FybTY0OiBNb3ZlV2l0aEluY3JlbWVudDY0IFU6
Rzo2NCwgVUQ6Rzo2NAorICAgIFByZUluZGV4LCBUbXAgYXMgbG9hZDY0CisgICAgUG9zdEluZGV4
LCBUbXAgYXMgbG9hZDY0CisgICAgVG1wLCBQcmVJbmRleCBhcyBzdG9yZTY0CisgICAgVG1wLCBQ
b3N0SW5kZXggYXMgc3RvcmU2NAorCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyCiAgICAgVG1wLCBU
bXAgYXMgemVyb0V4dGVuZDMyVG9Xb3JkCiAgICAgQWRkciwgVG1wIGFzIGxvYWQzMgpAQCAtNjcx
LDYgKzY3NywxMiBAQCBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyCiAgICAgeDg2OiBJbW0sIEFkZHIg
YXMgc3RvcmUzMgogICAgIHg4NjogSW1tLCBJbmRleCBhcyBzdG9yZTMyCiAKK2FybTY0OiBNb3Zl
V2l0aEluY3JlbWVudDMyIFU6RzozMiwgVVpEOkc6MzIKKyAgICBQcmVJbmRleCwgVG1wIGFzIGxv
YWQzMgorICAgIFBvc3RJbmRleCwgVG1wIGFzIGxvYWQzMgorICAgIFRtcCwgUHJlSW5kZXggYXMg
c3RvcmUzMgorICAgIFRtcCwgUG9zdEluZGV4IGFzIHN0b3JlMzIKKwogIyBUaGlzIGlzIGZvciBt
b3ZpbmcgYmV0d2VlbiBzcGlsbCBzbG90cy4KIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIsIFM6Rzoz
MgogICAgIEFkZHIsIEFkZHIsIFRtcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9vcGNvZGVfZ2VuZXJhdG9yLnJiCmluZGV4IDM3NDBlZmRiZGQxNDZhMzdmNmVkZTlkZGJjMjNk
ZGJhMDNiMDc2NDYuLmYxYmYxYTQ2Y2ZjODg5ZWMxOTM0NmYyYzA2YjdjZjUwZjllM2RlMGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5y
YgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIK
QEAgLTIyOSw3ICsyMjksNyBAQCBkZWYgaXNHRih0b2tlbikKIGVuZAogCiBkZWYgaXNLaW5kKHRv
a2VuKQotICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0
SW1tNjQpfChaZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFkZHIpfChFeHRlbmRlZE9mZnNldEFkZHIp
fChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCl8KFN0YXR1c0NvbmQpKVxa
LworICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1t
NjQpfChaZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFkZHIpfChFeHRlbmRlZE9mZnNldEFkZHIpfChJ
bmRleCl8KFByZUluZGV4KXwoUG9zdEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVD
b25kKXwoU3RhdHVzQ29uZCkpXFovCiBlbmQKIAogZGVmIGlzQXJjaCh0b2tlbikKQEAgLTMwMyw3
ICszMDMsNyBAQCBjbGFzcyBQYXJzZXIKIAogICAgIGRlZiBjb25zdW1lS2luZAogICAgICAgICBy
ZXN1bHQgPSB0b2tlbi5zdHJpbmcKLSAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAo
SW1tLCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFplcm9SZWcsIFRtcCwgU2ltcGxlQWRkciwg
QWRkciwgRXh0ZW5kZWRPZmZzZXRBZGRyLCBJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgRG91Ymxl
Q29uZCwgb3IgU3RhdHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAgcGFy
c2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFpl
cm9SZWcsIFRtcCwgU2ltcGxlQWRkciwgQWRkciwgRXh0ZW5kZWRPZmZzZXRBZGRyLCBJbmRleCwg
UHJlSW5kZXgsIFBvc3RJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgRG91YmxlQ29uZCwgb3IgU3Rh
dHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKICAgICAgICAgYWR2YW5jZQogICAgICAg
ICByZXN1bHQKICAgICBlbmQKQEAgLTkyOSw2ICs5MjksMTIgQEAgd3JpdGVIKCJPcGNvZGVHZW5l
cmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgiCiAgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRJbmRleEZvcm0oYXJnc1sje2luZGV4fV0u
c2NhbGUoKSwgYXJnc1sje2luZGV4fV0ub2Zmc2V0KCksICN7YXJnLndpZHRoQ29kZX0pKSIKICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAg
ICAgICAgICAgICB3aGVuICJQcmVJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoIUFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSkp
IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7Igor
ICAgICAgICAgICAgICAgIHdoZW4gIlBvc3RJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZFBvc3RJbmRleEZvcm0oYXJnc1sje2luZGV4fV0ub2Zm
c2V0KCkpKSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFs
c2UpOyIKICAgICAgICAgICAgICAgICB3aGVuICJCaWdJbW0iCiAgICAgICAgICAgICAgICAgd2hl
biAiUmVsQ29uZCIKICAgICAgICAgICAgICAgICB3aGVuICJSZXNDb25kIgpAQCAtMTIzNSw2ICsx
MjQxLDEwIEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgICAg
ICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIKICAgICAgICAgICAgICAg
ICB3aGVuICJJbmRleCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2lu
ZGV4fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJQcmVJbmRleCIKKyAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNQcmVJbmRleEFk
ZHJlc3MoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJQb3N0SW5kZXgiCisgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUG9zdEluZGV4QWRkcmVzcygpIgog
ICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCiAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENvbmRpdGlvbigpIgogICAgICAgICAg
ICAgICAgIHdoZW4gIlJlc0NvbmQiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggYzcw
MzJlYzA4NGRkZmRkOTM1ZTU1MjdmYWFlOTM1NjgxOTg0ODE3OS4uNzIxZWIzYWRkNjI3NDhlMmZi
MDJkZGY0MjU1N2NjNTlkNWQ4ODBlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAt
MTE0MCw0ICsxMTQwLDkgQEAgdm9pZCBhZGRDb3B5VGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBE
ZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mKTsKIAogYm9vbCBzaG91bGRSdW4oY29u
c3QgY2hhciogZmlsdGVyLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSk7CiAKK3ZvaWQgdGVzdExvYWRQ
cmVJbmRleDMyKCk7Cit2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpOwordm9pZCB0ZXN0TG9hZFBv
c3RJbmRleDMyKCk7Cit2b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQoKTsKKwogI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
XzMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAppbmRleCA0YzUy
YWRhOWNjNDAyZGRlNTM5ODhjYzhmMmY1ZTllMGRkZTJlMTFjLi4wYTUwYWE4NzAzN2ZlZTNjMjE1
OGFiYzhiMmI2ZGY5OWMwZGY4YjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5j
cHAKQEAgLTI4LDYgKzI4LDMwMCBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorCit2b2lkIHRl
c3RMb2FkUHJlSW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVs
KCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwg
MywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQzMl90KiBwdHIgPSBudW1zOworCisg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25l
ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxl
KEludDMyKTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisg
ICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisg
ICAgLy8gVXBzaWxvbihyMSwgXnIyKSAgICAgICAgICAgICAKKyAgICAvLyBwMSA9IGFkZHIKKyAg
ICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29u
c3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSog
cDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3Qp
KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAg
Ly8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlm
IHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBw
MiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3Jp
Z2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2so
ZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVw
c2lsb24ocDMsIF5wMikKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMykKKyAgICAvLyBVcHNpbG9u
KHIzLCBecjIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmRO
ZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCkpOworICAgIGxvb3BCb2R5LT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAg
ICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdp
bigpLCByMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50
MzIsIE9yaWdpbigpLCBwMykpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9v
cFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAg
IC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsgIAorCisgICAgcHJvYy5yZXNldFJlYWNo
YWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAg
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzRdISIpOworCisgICAgYXV0byB0ZXN0
ID0gWyZdICgpIC0+IGludDMyX3QgeworICAgICAgICBpbnQzMl90IHIgPSAwOworICAgICAgICB3
aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqKytwdHI7CisgICAgICAgIHJldHVybiBy
OworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50MzJfdD4oKmNvZGUsIGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQcmVJbmRl
eDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3
LCA4LCA5LCAxMCB9OworICAgIGludDY0X3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BC
b2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJs
b2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworICAg
IFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAgICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9u
KHIxLCBecjIpICAgICAgICAgICAgIAorICAgIC8vIHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24o
cDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBP
cmlnaW4oKSwgSW50NjQsIDApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihw
cm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNl
dCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJv
YywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAg
IC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290
byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVl
Pihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3Qt
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7Cisg
ICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVx
dWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVl
bnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExv
b3BfQm9keV9CbG9jaworICAgIC8vIHAzID0gcDIgKyAxCisgICAgLy8gVXBzaWxvbihwMywgXnAy
KQorICAgIC8vIHIzID0gcjIgKyBsb2FkKHAzKQorICAgIC8vIFVwc2lsb24ocjMsIF5yMikKKyAg
ICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFs
dWU+KHByb2MsIE9yaWdpbigpLCA4KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAgIFZhbHVlKiByMyA9
IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29w
Qm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCks
IHAzKSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6
U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisg
ICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAg
ICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcjIpOyAgIAorCisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOwor
ICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNl
c0luc3RydWN0aW9uKCpjb2RlLCAiIzhdISIpOworCisgICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+
IGludDY0X3QgeworICAgICAgICBpbnQ2NF90IHIgPSAwOworICAgICAgICB3aGlsZSAociA8IDEw
KQorICAgICAgICAgICAgciArPSAqKytwdHI7CisgICAgICAgIHJldHVybiByOworICAgIH07CisK
KyAgICBDSEVDS19FUShpbnZva2U8aW50NjRfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQb3N0SW5kZXgzMigpCit7Cisg
ICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47
CisKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAg
fTsKKyAgICBpbnQzMl90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29w
VGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisg
ICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDMyKTsKKyAgICBWYXJpYWJsZSog
cCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKSAg
ICAgICAgICAgICAKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisg
ICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIElu
dDMyLCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNl
dCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigp
LCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9y
aWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBo
aSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAg
IFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6
OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBj
b25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2lu
KCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gs
IE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhs
b29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxv
Y2sKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMikKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8v
IFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gZ290byBs
b29wCisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRk
LCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExv
YWQsIEludDMyLCBPcmlnaW4oKSwgcDIpKTsKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5l
dzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA0KSk7CisgICAgbG9vcEJvZHktPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAg
IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2lu
KCksIHAsIHAzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1
bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJu
IHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIHIyKTsgCisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUo
cHJvYyk7CisgICAgZml4U1NBKHByb2MpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24o
KmNvZGUsICJdLCAjNCIpOworCisgICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDMyX3Qgewor
ICAgICAgICBpbnQzMl90IHIgPSAwOworICAgICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAg
ICAgciArPSAqcHRyKys7CisgICAgICAgIHJldHVybiByOworICAgIH07CisKKyAgICBDSEVDS19F
UShpbnZva2U8aW50MzJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRl
c3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQb3N0SW5kZXg2NCgpCit7CisgICAgaWYgKE9wdGlv
bnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQ2
NF90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQ2
NF90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayog
cm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUq
IHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRk
VmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Js
b2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKSAgICAgICAgICAgICAK
KyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIx
ID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDY0LCAwKTsKKyAg
ICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCks
IHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVx
dWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
TG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8g
cjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9
IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2lu
KCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRl
c3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29w
VGVzdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAg
bG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBj
b25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOwor
CisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyBy
MyA9IHIyICsgbG9hZChwMikKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocjMs
IF5yMikKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFs
dWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwg
cjIsIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0LCBP
cmlnaW4oKSwgcDIpKTsKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFs
dWU+KHByb2MsIE9yaWdpbigpLCA4KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsK
KyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigp
LCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9u
ZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsgCisK
KyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAg
Zml4U1NBKHByb2MpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAg
aWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJdLCAj
OCIpOworCisgICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDY0X3QgeworICAgICAgICBpbnQ2
NF90IHIgPSAwOworICAgICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqcHRy
Kys7CisgICAgICAgIHJldHVybiByOworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50
NjRfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisK
Kwogdm9pZCB0ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm8zMigpCiB7CiAgICAgaWYgKEpT
Qzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCkBAIC0zNjk3LDYgKzM5OTEsMTEg
QEAgdm9pZCBhZGRTaHJUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZm
ZmZmZiwgMCkpOwogICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDEpKTsKICAg
ICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCA2MykpOworCisgICAgUlVOKHRlc3RM
b2FkUHJlSW5kZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRQcmVJbmRleDY0KCkpOworICAgIFJV
Tih0ZXN0TG9hZFBvc3RJbmRleDMyKCkpOworICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDY0KCkp
OwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCmluZGV4IDYzZTI2Njc4ODUyMDE4YTc2
ODBjYTVmMDcxNDY5NjgxMDU4ODRiM2IuLjY5YmI2YjJiZTgxODcwYjU5ODMzMzY3YWYyNjc1Yjdm
NGVmMDU2ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcApAQCAtMjMzLDggKzIzMyw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaml0V3JpdGVUaHVua0dlbmVyYXRv
CiAgICAgaml0LnJldCgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMCA9IGpp
dC5sYWJlbCgpOwotICAgIGppdC5sb2FkNjQoeDEsIFBvc3RJbmRleCg4KSwgeDYpOwotICAgIGpp
dC5zdG9yZTY0KHg2LCB4MywgUG9zdEluZGV4KDgpKTsKKyAgICBqaXQubG9hZDY0KE1hY3JvQXNz
ZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgxLCA4KSwgeDYpOworICAgIGppdC5zdG9yZTY0KHg2
LCBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyh4MywgOCkpOwogICAgIHNtYWxsQ29w
eS5saW5rKCZqaXQpOwogICAgIGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgyKS5saW5rVG8obG9jYWwwLCAmaml0KTsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBsb2NhbDIgPSBqaXQuYnJhbmNoQWRkNjQoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434294</attachid>
            <date>2021-07-27 09:23:00 -0700</date>
            <delta_ts>2021-07-27 15:51:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210727112259.patch</filename>
            <type>text/plain</type>
            <size>47329</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi5hNjcyODAxMjM1Y2JjNDJm
ODJjMWFjNWMyNWRhMmY0YmNhMzU5MzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MCBAQAorMjAyMS0wNy0yNyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzOjpQcmVJbmRleEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzOjpQ
b3N0SW5kZXhBZGRyZXNzKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6c3RvcmUzMik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAg
ICAgKEpTQzo6dGVzdFN0b3JlUHJlUG9zdEluZGV4MzIpOgorICAgICAgICAoSlNDOjp0ZXN0U3Rv
cmVQcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJlUG9zdEluZGV4MzIp
OgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJbmRleDY0KToKKyAgICAgICAgKiBiMy9C
M0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwOgorICAg
ICAgICAqIGIzL2Fpci9BaXJBcmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Ompz
SGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwcmVJbmRleCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6cG9zdEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1By
ZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1Bvc3RJbmRleCBj
b25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNNZW1vcnkgY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmJhc2UgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNH
UCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZFBvc3RJbmRleEZvcm0pOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVmFsaWRGb3JtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpmb3JFYWNoVG1wRmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Zm9yRWFj
aFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNQcmVJbmRleEFkZHJlc3MgY29u
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUG9zdEluZGV4QWRkcmVzcyBjb25z
dCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
SW5zdDo6cmVwbGFjZUluZGVudGl0eSk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzOgorICAgICAgICAqIGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAgICAqIGIz
L3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RMb2Fk
UHJlSW5kZXgzMik6CisgICAgICAgICh0ZXN0TG9hZFByZUluZGV4NjQpOgorICAgICAgICAodGVz
dExvYWRQb3N0SW5kZXgzMik6CisgICAgICAgICh0ZXN0TG9hZFBvc3RJbmRleDY0KToKKyAgICAg
ICAgKGFkZFNoclRlc3RzKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChKU0M6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTI2ICBZ
dXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFRlbXBvcmFs
IHRvIGZlYXR1cmVzLmpzb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKaW5kZXggM2QxOTQ5YTQwNzg1ZDk5Y2E2
MTU5NWFhYjA0YmU2ZjFkMGQ5NmJhMy4uMjM1NGM0NTM2OGM3YzBkNWNlOTAxOGFjZmYyODRjNGEw
YTA0MzFhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAgLTI0NSw2ICsyNDUsMzQgQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgfTsKIAorICAgIC8vIFByZUluZGV4QWRkcmVzczoKKyAgICAvLworICAg
IC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwcmUtaW5jcmVt
ZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3QgUHJlSW5kZXhBZGRyZXNzIHsKKyAgICAg
ICAgUHJlSW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAgICAg
ICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRleDsK
KyAgICB9OworCisgICAgLy8gUG9zdEluZGV4QWRkcmVzczoKKyAgICAvLworICAgIC8vIERlc2Ny
aWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwb3N0LWluY3JlbWVudC9kZWNy
ZW1lbnQgaW5kZXguCisgICAgc3RydWN0IFBvc3RJbmRleEFkZHJlc3MgeworICAgICAgICBQb3N0
SW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAgICAgICAgOiBi
YXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRleDsKKyAgICB9
OworCiAgICAgLy8gQWJzb2x1dGVBZGRyZXNzOgogICAgIC8vCiAgICAgLy8gRGVzY3JpYmVzIGFu
IG1lbW9yeSBvcGVyYW5kIGdpdmVuIGJ5IGEgcG9pbnRlci4gIEZvciByZWd1bGFyIGxvYWQgJiBz
dG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5
MGZkLi4yYTkxMmQwZGQyNjYyNmJkNzRlMTAzYmVmOTY1ZjJiYWRmY2UwYmQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQu
aApAQCAtMTQ0NSw5ICsxNDQ1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDw2ND4oYWRkcmVz
cywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkNjQoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJ
bmRleCBzaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQoUHJlSW5kZXhBZGRy
ZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIubGRy
PDY0PihkZXN0LCBzcmMsIHNpbW0pOworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3Qs
IHNyYy5iYXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQ2
NChQb3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkp
OwogICAgIH0KIAogICAgIERhdGFMYWJlbDMyIGxvYWQ2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2go
QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCkBAIC0xNTQ0LDYgKzE1NDksMTYgQEAg
cHVibGljOgogICAgICAgICBsb2FkPDMyPihhZGRyZXNzLCBkZXN0KTsKICAgICB9CiAKKyAgICB2
b2lkIGxvYWQzMihQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRleChzcmMu
aW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihQb3N0SW5kZXhBZGRyZXNzIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihkZXN0
LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKwogICAgIERhdGFMYWJl
bDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKQEAgLTE3
MzMsNyArMTc0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4obWVt
b3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGluZGV4
RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgIG1fYXNzZW1ibGVy
LnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rlcik7CiAgICAgfQot
ICAgIAorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBQcmVJbmRleEFkZHJlc3Mg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2Us
IFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlNjQoUmVnaXN0
ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2UsIFBvc3RJbmRleChkZXN0LmluZGV4KSk7CisgICAg
fQorCiAgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBjb25zdCB2b2lkKiBhZGRyZXNz
KQogICAgIHsKICAgICAgICAgc3RvcmU8NjQ+KHNyYywgYWRkcmVzcyk7CkBAIC0xNzc3LDExICsx
ODAyLDYgQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJl
c3MpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0LCBQb3N0SW5kZXggc2ltbSkKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2
ND4oc3JjLCBkZXN0LCBzaW1tKTsKLSAgICB9Ci0gICAgCiAgICAgRGF0YUxhYmVsMzIgc3RvcmU2
NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykK
ICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTg3OSw2ICsxODk5
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNz
KTsKICAgICB9CiAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4QWRk
cmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3Qu
YmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihS
ZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgpKTsK
KyAgICB9CisKICAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgRGF0YUxhYmVs
MzIgbGFiZWwodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL3Rlc3RtYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1h
c20uY3BwCmluZGV4IGYyMmJmZmNlMTU1NGIwMmMyMjZjMjE0OTJhYjA2N2JhYjM4YzQwYjUuLjUz
NGVmZTE0M2Y3OTBiOTA5ODliYzJjYzYzZmYwOWEwNDY3ZTU1N2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCkBAIC0yMjEyLDYgKzIyMTIsMTc2IEBA
IHZvaWQgdGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCiAgICAgICAgIH0KICAg
ICB9CiB9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKQoreworICAgIGludDMyX3Qg
bnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50cHRyX3QgYWRkciA9IGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMyX3QgaW5kZXggPSBzaXplb2YoaW50MzJfdCk7
CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQzMl90IHNyYykgeworICAgICAgICBhdXRvIHN0
b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0
RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAqKytwMSA9IDQ7IHJldHVy
biBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgQ0Nh
bGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkp
OworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7
CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52
b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCog
cDEgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QxKDQpKTsKKyAgICBDSEVDS19FUSgqcDEs
IDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1zWzFdKTsKKworICAgIGF1dG8gdGVzdDIgPSBb
Jl0gKGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7
CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsgcmV0dXJuIHAyOworICAgICAgICAgICAgaml0
LnN0b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFk
ZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAg
ICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0
KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwg
c3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCogcDIgPSBiaXR3aXNlX2Nhc3Q8aW50
MzJfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19FUSgqcDIsIDQpOworICAgIENIRUNLX0VRKCot
LXAyLCA1KTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaW50
NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnRwdHJfdCBhZGRyID0gYml0d2lzZV9j
YXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVvZihpbnQ2
NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3Qgc3JjKSB7CisgICAgICAgIGF1
dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAg
IGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICorK3AxID0gNDsg
cmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGlu
ZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
aml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
biBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2
NF90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDEoNCkpOworICAgIENIRUNLX0VR
KCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEsIG51bXNbMV0pOworCisgICAgYXV0byB0ZXN0
MiA9IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
aml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysgPSA1OyByZXR1cm4gcDI7CisgICAgICAgICAg
ICBqaXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UG9zdElu
ZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBq
aXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
KworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGpp
dC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0
b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2NF90KiBwMiA9IGJpdHdpc2VfY2Fz
dDxpbnQ2NF90Kj4odGVzdDIoNSkpOworICAgIENIRUNLX0VRKCpwMiwgNCk7CisgICAgQ0hFQ0tf
RVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4MzIoKQoreworICAg
IGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVv
ZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkgewor
ICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJl
cyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQzMihD
Q2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRk
cmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUklu
Zm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90Pihsb2FkLCAmbnVtc1sxXSk7
CisgICAgfTsKKyAgICAKKyAgICBDSEVDS19FUSh0ZXN0MSg0KSwgMyk7CisgICAgQ0hFQ0tfRVEo
bnVtc1syXSwgNCk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQzMl90IHJlcGxhY2UpIHsK
KyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Cisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyBy
ZXMgPSAqcDIrKzsgKnAyID0gNTsgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIGppdC5sb2FkMzIo
Q0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5k
ZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVwbGFjZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BS
SW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAg
ICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7Cisg
ICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KGxvYWQsICZudW1zWzFd
KTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVzdDIoNSksIDIpOworICAgIENIRUNLX0VRKG51
bXNbMl0sIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKQoreworICAgIGlu
dDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVvZihp
bnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkgeworICAg
ICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9
ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2Fs
bEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4KSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRkcmVz
cyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86
OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBl
bWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAg
ICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7Cisg
ICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1zWzJd
LCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkgeworICAgICAg
ICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9ICpw
MisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhl
bHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW02NChyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJlc3Mo
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjph
cmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4obG9hZCwgJm51bXNbMV0pOworICAg
IH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwg
NSk7Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02
NCkKQEAgLTQ0NzUsNiArNDY0NSwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpIFdU
Rl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdFhvck5vdFdpdGhM
ZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0NjQoKSk7CiAg
ICAgUlVOKHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CisKKyAgICBSVU4o
dGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9yZVByZVBvc3RJbmRl
eDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDMyKCkpOworICAgIFJVTih0ZXN0
TG9hZFByZVBvc3RJbmRleDY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUoQVJNNjRFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBkNWZjMzE2NDY1OTY4ZWI3
MzcxYjZmZjFjYzZmODMxN2ZlY2RlNTJlLi4wNGFlZTZjN2NjNDQ4YWUzZGE2MjcyOGQ3M2EwYmMx
MzI0Y2VjN2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRv
QWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcApA
QCAtMjA3LDcgKzIwNyw4IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgZmluaXNoQXBwZW5kaW5n
SW5zdHJ1Y3Rpb25zKG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KLSAgICAgICAg
CisKKyAgICAgICAgZGV0ZWN0UHJlUG9zdEluZGV4QWRkcmVzcygpOwogICAgICAgICBtX2Jsb2Nr
SW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKIAogICAgICAgICBBaXI6Okluc2VydGlvblNldCBpbnNl
cnRpb25TZXQobV9jb2RlKTsKQEAgLTIxNyw2ICsyMTgsMTcwIEBAIHB1YmxpYzoKICAgICB9CiAK
IHByaXZhdGU6CisgICAgdm9pZCBkZXRlY3RQcmVQb3N0SW5kZXhBZGRyZXNzKCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX3Byb2NlZHVyZS5vcHRMZXZlbCgpIDwgMiB8fCAhaXNBUk02NCgpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB1c2luZyBuYW1lc3BhY2UgQWlyOworCisgICAgICAg
IHVpbnQzMl90IGxvYyA9IDA7CisgICAgICAgIEhhc2hNYXA8VmFsdWUqLCBJbnN0Kj4gdmFsdWVU
b0luc3Q7CisgICAgICAgIEhhc2hNYXA8VmFsdWUqLCB1aW50MzJfdD4gdmFsdWVUb0xvYzsKKyAg
ICAgICAgSGFzaE1hcDxUbXAsIFZlY3Rvcjx1aW50MzJfdD4+IHRtcFRvTG9jYXRpb25zOworICAg
ICAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwcmVJbmRleENhbmRpZGF0ZXM7Cisg
ICAgICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleENhbmRpZGF0ZXM7
CisgICAgICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvTWVt
b3JpZXM7CisgICAgICAgIEluZGV4U2V0PFZhbHVlKj4gaWdub3JlZFZhbHVlczsKKworICAgICAg
ICBhdXRvIHRyeVByZVBvc3RJbmRleCA9IFsmXSAoVmFsdWUqIHZhbHVlLCBJbnN0JiBpbnN0LCB1
aW50MzJfdCBsb2MpIHsKKyAgICAgICAgICAgIGF1dG8gdXBkYXRlID0gWyZdICgpIHsKKyAgICAg
ICAgICAgICAgICB2YWx1ZVRvSW5zdC5hZGQodmFsdWUsICZpbnN0KTsKKyAgICAgICAgICAgICAg
ICB2YWx1ZVRvTG9jLmFkZCh2YWx1ZSwgbG9jKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAg
ICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ6IHsK
KyAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpOworCisgICAgICAgICAgICAgICAgLy8gUHJlLUluZGV4IFBhdHRlcm46CisgICAgICAg
ICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBhZGQoYmFzZSwgb2Zmc2V0KSAgCisgICAgICAgICAg
ICAgICAgLy8gICAgIG1lbW9yeSA9IGxvYWQoYWRkcmVzcywgMCkKKyAgICAgICAgICAgICAgICAv
LyBQb3N0LUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IGxv
YWQoYmFzZSwgMCkKKyAgICAgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IGFkZChiYXNlLCBv
ZmZzZXQpIAorICAgICAgICAgICAgICAgIGF1dG8gdHJ5UHJlUG9zdEluZGV4TWVtb3J5ID0gWyZd
ICgpIHsKKyAgICAgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2Rl
Rm9yVHlwZShNb3ZlV2l0aEluY3JlbWVudDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1vcnkt
PnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBB
cmc6OlByZUluZGV4LCBBcmc6OlRtcCkgfHwgbWVtb3J5LT5vZmZzZXQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgYmFzZVRvTWVtb3JpZXMu
YWRkKG1lbW9yeS0+Y2hpbGQoMCksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBtZW1vcnktPmxhc3RDaGlsZCgpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcy0+b3Bjb2RlKCkgIT0gQWRkIHx8ICFhZGRy
ZXNzLT5jaGlsZCgxKS0+aGFzSW50UHRyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IGFkZHJlc3MtPmNoaWxk
KDEpLT5hc0ludFB0cigpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBz
bWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgIT0gb2Zmc2V0IHx8ICFBcmc6OmlzVmFs
aWRQcmVJbmRleEZvcm0oc21hbGxPZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICBwcmVJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwg
YWRkcmVzcyk7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIHRyeVByZVBv
c3RJbmRleE1lbW9yeSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBjYXNlIEFkZDogeworICAgICAgICAgICAgICAgIFZhbHVlKiBsZWZ0ID0g
dmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiByaWdodCA9IHZhbHVlLT5j
aGlsZCgxKTsKKworICAgICAgICAgICAgICAgIGF1dG8gdHJ5UG90ZW50aWFsUG9zdEluZGV4QWRk
cmVzcyA9IFsmXSAoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcmlnaHQtPmhhc0ludFB0
cigpIHx8IHZhbHVlLT50eXBlKCkgIT0gSW50NjQpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJpZ2h0LT5hc0lu
dFB0cigpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNl
dCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoc21hbGxPZmZzZXQgIT0gb2Zmc2V0IHx8ICFBcmc6OmlzVmFsaWRQb3N0SW5k
ZXhGb3JtKHNtYWxsT2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgdXBkYXRlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFi
YXNlVG9NZW1vcmllcy5jb250YWlucyhsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFz
ZVRvTWVtb3JpZXMuZ2V0KGxlZnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4
Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgfTsKKworICAg
ICAgICAgICAgICAgIHRyeVBvdGVudGlhbFBvc3RJbmRleEFkZHJlc3MoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBh
dXRvIHVwZGF0ZUFuYWx5c2lzRGF0YSA9IFsmXSAoSW5zdCYgaW5zdCwgYm9vbCBpbmNyZW1lbnQg
PSB0cnVlLCBib29sIHVwZGF0ZVVzZVRtcHMgPSB0cnVlKSB7CisgICAgICAgICAgICBpZiAoaW5j
cmVtZW50KQorICAgICAgICAgICAgICAgICsrbG9jOworICAgICAgICAgICAgdHJ5UHJlUG9zdElu
ZGV4KGluc3Qub3JpZ2luLCBpbnN0LCBsb2MpOworCisgICAgICAgICAgICBpZiAodXBkYXRlVXNl
VG1wcykgeworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZyhbJl0gKEFyZyYgYXJnLCBB
cmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFy
Zzo6aXNBbnlVc2Uocm9sZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNo
VG1wRmFzdChbJl0gKFRtcCYgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1w
VG9Mb2NhdGlvbnMuYWRkKHRtcCwgVmVjdG9yPHVpbnQzMl90PigpKS5pdGVyYXRvci0+dmFsdWUu
YXBwZW5kKGxvYyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9Owor
CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IG1fcHJvbG9ndWUpCisgICAgICAgICAgICB1cGRh
dGVBbmFseXNpc0RhdGEoaW5zdCwgZmFsc2UsIGZhbHNlKTsKKworICAgICAgICBmb3IgKEIzOjpC
YXNpY0Jsb2NrKiBiM2Jsb2NrIDogbV9wcm9jZWR1cmUuYmxvY2tzSW5QcmVPcmRlcigpKSB7Cisg
ICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBtX2Jsb2NrVG9CbG9ja1tiM2Jsb2NrXS0+aW5z
dHMoKSkKKyAgICAgICAgICAgICAgICB1cGRhdGVBbmFseXNpc0RhdGEoaW5zdCk7CisgICAgICAg
IH0KKworICAgICAgICBhdXRvIGxhc3RVc2VMb2NhdGlvbiA9IFsmXSAoVmFsdWUqIHZhbHVlKSAt
PiB1aW50MzJfdCB7CisgICAgICAgICAgICBUbXAmIHRtcCA9IG1fdmFsdWVUb1RtcFt2YWx1ZV07
CisgICAgICAgICAgICByZXR1cm4gKHRtcCAmJiB0bXBUb0xvY2F0aW9ucy5jb250YWlucyh0bXAp
KSA/IHRtcFRvTG9jYXRpb25zLmdldCh0bXApLmxhc3QoKSA6IDA7CisgICAgICAgIH07CisKKyAg
ICAgICAgZm9yIChhdXRvIGl0ciA9IHByZUluZGV4Q2FuZGlkYXRlcy5iZWdpbigpOyBpdHIgIT0g
cHJlSW5kZXhDYW5kaWRhdGVzLmVuZCgpOyArK2l0cikgeworICAgICAgICAgICAgTWVtb3J5VmFs
dWUqIG1lbW9yeSA9IGl0ci0+a2V5OworICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBpdHIt
PnZhbHVlOworICAgICAgICAgICAgVmFsdWUqIGJhc2UgPSBhZGRyZXNzLT5jaGlsZCgwKTsKKyAg
ICAgICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaWdub3JlZFZh
bHVlcy5jb250YWlucyhhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgdWludDMyX3QgbWVtb3J5TG9jID0gdmFsdWVUb0xvYy5nZXQobWVtb3J5KTsKKyAg
ICAgICAgICAgIGlmIChsYXN0VXNlTG9jYXRpb24oYmFzZSkgPiBtZW1vcnlMb2MgfHwgbGFzdFVz
ZUxvY2F0aW9uKGFkZHJlc3MpIDwgbWVtb3J5TG9jKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICBJbnN0KiBtZW1vcnlJbnN0ID0gdmFsdWVUb0luc3QuZ2V0KG1lbW9y
eSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNvZGVGb3JUeXBlKE1v
dmVXaXRoSW5jcmVtZW50MzIsIE1vdmVXaXRoSW5jcmVtZW50NjQsIG1lbW9yeS0+dHlwZSgpKTsK
KyAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8
VmFsdWU6Ok9mZnNldFR5cGU+KGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludFB0cigpKTsKKyAgICAg
ICAgICAgIG1lbW9yeUluc3QtPnJlcGxhY2VJbmRlbnRpdHkob3Bjb2RlLCBBcmc6OnByZUluZGV4
KHRtcChiYXNlKSwgc21hbGxPZmZzZXQpLCB0bXAobWVtb3J5KSk7CisKKyAgICAgICAgICAgIElu
c3QqIGFkZHJlc3NJbnN0ID0gdmFsdWVUb0luc3QuZ2V0KGFkZHJlc3MpOworICAgICAgICAgICAg
YWRkcmVzc0luc3QtPnJlcGxhY2VJbmRlbnRpdHkocmVsYXhlZE1vdmVGb3JUeXBlKGFkZHJlc3Mt
PnR5cGUoKSksIHRtcChiYXNlKSwgdG1wKGFkZHJlc3MpKTsKKworICAgICAgICAgICAgaWdub3Jl
ZFZhbHVlcy5hZGQoYWRkcmVzcyk7CisgICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChtZW1v
cnkpOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBiZWZvcmVMYXN0VXNlTG9jYXRpb24gPSBb
Jl0gKFZhbHVlKiB2YWx1ZSkgLT4gdWludDMyX3QgeworICAgICAgICAgICAgVG1wJiB0bXAgPSBt
X3ZhbHVlVG9UbXBbdmFsdWVdOworICAgICAgICAgICAgaWYgKHRtcCAmJiB0bXBUb0xvY2F0aW9u
cy5jb250YWlucyh0bXApKSB7CisgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQzMl90PiBsb2Nz
ID0gdG1wVG9Mb2NhdGlvbnMuZ2V0KHRtcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxvY3Mu
c2l6ZSgpID4gMSA/IGxvY3MuYXQobG9jcy5zaXplKCkgLSAyKSA6IDA7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGF1dG8g
aXRyID0gcG9zdEluZGV4Q2FuZGlkYXRlcy5iZWdpbigpOyBpdHIgIT0gcG9zdEluZGV4Q2FuZGlk
YXRlcy5lbmQoKTsgKytpdHIpIHsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBp
dHItPmtleTsKKyAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gaXRyLT52YWx1ZTsKKyAgICAg
ICAgICAgIFZhbHVlKiBiYXNlID0gYWRkcmVzcy0+Y2hpbGQoMCk7CisgICAgICAgICAgICBpZiAo
aWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMo
YWRkcmVzcykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChi
ZWZvcmVMYXN0VXNlTG9jYXRpb24oYmFzZSkgPiB2YWx1ZVRvTG9jLmdldChtZW1vcnkpIHx8IGxh
c3RVc2VMb2NhdGlvbihhZGRyZXNzKSA8IHZhbHVlVG9Mb2MuZ2V0KGFkZHJlc3MpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBJbnN0KiBtZW1vcnlJbnN0ID0gdmFs
dWVUb0luc3QuZ2V0KG1lbW9yeSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0
cnlPcGNvZGVGb3JUeXBlKE1vdmVXaXRoSW5jcmVtZW50MzIsIE1vdmVXaXRoSW5jcmVtZW50NjQs
IG1lbW9yeS0+dHlwZSgpKTsKKyAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zm
c2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KGFkZHJlc3MtPmNoaWxkKDEpLT5h
c0ludFB0cigpKTsKKyAgICAgICAgICAgIG1lbW9yeUluc3QtPnJlcGxhY2VJbmRlbnRpdHkob3Bj
b2RlLCBBcmc6OnBvc3RJbmRleCh0bXAoYmFzZSksIHNtYWxsT2Zmc2V0KSwgdG1wKG1lbW9yeSkp
OworCisgICAgICAgICAgICBJbnN0KiBhZGRyZXNzSW5zdCA9IHZhbHVlVG9JbnN0LmdldChhZGRy
ZXNzKTsKKyAgICAgICAgICAgIGFkZHJlc3NJbnN0LT5yZXBsYWNlSW5kZW50aXR5KHJlbGF4ZWRN
b3ZlRm9yVHlwZShhZGRyZXNzLT50eXBlKCkpLCB0bXAoYmFzZSksIHRtcChhZGRyZXNzKSk7CisK
KyAgICAgICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKGFkZHJlc3MpOworICAgICAgICAgICAgaWdu
b3JlZFZhbHVlcy5hZGQobWVtb3J5KTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGJvb2wgc2hv
dWxkQ29weVByb3BhZ2F0ZShWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHZh
bHVlLT5vcGNvZGUoKSkgewpAQCAtNTQ2LDcgKzcxMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gc2NhbGU7CiAgICAgfQotICAg
IAorCiAgICAgLy8gVGhpcyB0dXJucyB0aGUgZ2l2ZW4gb3BlcmFuZCBpbnRvIGFuIGFkZHJlc3Mu
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zm
c2V0PEludD4+CiAgICAgQXJnIGVmZmVjdGl2ZUFkZHIoVmFsdWUqIGFkZHJlc3MsIEludCBvZmZz
ZXQsIFdpZHRoIHdpZHRoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3Ry
ZW5ndGguY3BwCmluZGV4IDIyODBmZDc3MTI1MmU3MjYwZjY4NTA1MDkyZmQ1NDNjZmUwNjE4NTcu
LmY0YWZmNjc0ZDQ0OGI4Zjg4MDdiYTQ0MGU3NTUxMTUzOGZjYzEyMDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKQEAgLTE5MjksNiArMTkyOSwy
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBtX3ZhbHVlLT5sYXN0
Q2hpbGQoKTsKICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBtX3ZhbHVlLT5hczxN
ZW1vcnlWYWx1ZT4oKTsKIAorICAgICAgICAgICAgLy8gUG90ZW50aWFsIFByZS1JbmRleCBQYXR0
ZXJuOgorICAgICAgICAgICAgLy8gICAgIExvYWQoQWRkKGFkZHJlc3MsIG9mZnNldDEpLCBvZmZz
ZXQgPSAwKQorICAgICAgICAgICAgYXV0byBpc1BvdGVudGlhbFByZUluZGV4ID0gWyZdICgpIC0+
IGJvb2wgeworICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSAhPSBBZGQgfHwg
IWFkZHJlc3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSB8fCBtZW1vcnktPm9mZnNldCgpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKG1lbW9y
eS0+b3Bjb2RlKCkgIT0gTG9hZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPnR5cGUoKSAhPSBJbnQzMiAmJiBtZW1vcnktPnR5
cGUoKSAhPSBJbnQ2NCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYg
KGlzUG90ZW50aWFsUHJlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBMb2FkKEFkZChhZGRyZXNzLCBvZmZzZXQxKSwgb2Zmc2V0ID0g
b2Zmc2V0MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogTG9hZChhZGRyZXNzLCBvZmZzZXQg
PSBvZmZzZXQxICsgb2Zmc2V0MikKICAgICAgICAgICAgIC8vCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5jcHAKaW5kZXggMTAzYzZlY2NhM2QzMTRiYjRlZDhjMDJhNGQyZjAwOWNh
NjQxZDAwMS4uNzdlZTg0MjUxMjRiOWQ4YjhjNTgyZjM5ZmY5NjlmNjBmZDE2Y2MwMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcApAQCAtMTMwLDYgKzEzMCwxMSBAQCB1
bnNpZ25lZCBBcmc6OmpzSGFzaCgpIGNvbnN0CiAgICAgICAgIHJlc3VsdCArPSBtX2Jhc2UuaW50
ZXJuYWxWYWx1ZSgpOwogICAgICAgICByZXN1bHQgKz0gbV9pbmRleC5pbnRlcm5hbFZhbHVlKCk7
CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJlSW5kZXg6CisgICAgY2FzZSBQb3N0SW5kZXg6
CisgICAgICAgIHJlc3VsdCArPSBtX29mZnNldDsKKyAgICAgICAgcmVzdWx0ICs9IG1fYmFzZS5p
bnRlcm5hbFZhbHVlKCk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhY2s6CiAgICAgICAg
IHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zY2FsZSk7CiAgICAgICAgIHJlc3Vs
dCArPSBzdGFja1Nsb3QoKS0+aW5kZXgoKTsKQEAgLTE2MSw3ICsxNjYsNyBAQCB2b2lkIEFyZzo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4
Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIHVuc2lnbmVkPihtX29mZnNldCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBaZXJvUmVnOgotICAgICAgICBvdXQucHJpbnQoIiUleHpyIik7Cisg
ICAgICAgIG91dC5wcmludCgiJXh6ciIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTaW1w
bGVBZGRyOgogICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIpIik7CkBAIC0xODAsNiAr
MTg1LDEyIEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAg
ICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgpKTsKICAgICAgICAgb3V0LnByaW50KCIpIik7CiAg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBvdXQucHJpbnQoIigi
LCBiYXNlKCksICIsUHJlKCQiLCBvZmZzZXQoKSwgIikpIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLFBvc3Qo
JCIsIG9mZnNldCgpLCAiKSkiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU3RhY2s6CiAg
ICAgICAgIGlmIChvZmZzZXQoKSkKICAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CkBA
IC0yNjEsNiArMjcyLDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBB
cmc6OktpbmQga2luZCkKICAgICBjYXNlIEFyZzo6SW5kZXg6CiAgICAgICAgIG91dC5wcmludCgi
SW5kZXgiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpQcmVJbmRleDoKKyAgICAg
ICAgb3V0LnByaW50KCJQcmVJbmRleCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6
OlBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQb3N0SW5kZXgiKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQXJnOjpSZWxDb25kOgogICAgICAgICBvdXQucHJpbnQoIlJlbENvbmQi
KTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKaW5k
ZXggY2U1YTRlNzM3OWFkNjQ0NDVmMGMzYWJkMTI5ZjMyOWI5NDdmZTgxMi4uMWViZjUyYTIxNzJh
M2IyOTNmYjllZTI2MjRlYTA1MmE0YWNlNDhkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5oCkBAIC03Nyw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgU3RhY2ssCiAgICAg
ICAgIENhbGxBcmcsCiAgICAgICAgIEluZGV4LAorICAgICAgICBQcmVJbmRleCwKKyAgICAgICAg
UG9zdEluZGV4LAogCiAgICAgICAgIC8vIEltbWVkaWF0ZSBvcGVyYW5kcyB0aGF0IGN1c3RvbWl6
ZSB0aGUgYmVoYXZpb3Igb2YgYW4gb3BlcmF0aW9uLiBZb3UgY2FuIHRoaW5rIG9mIHRoZW0gYXMK
ICAgICAgICAgLy8gc2Vjb25kYXJ5IG9wY29kZXMuIFRoZXkgYXJlIGFsd2F5cyAiVXNlIidkLgpA
QCAtNjQ5LDYgKzY1MSwzMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBBcmc6OmluZGV4KGJh
c2UsIGluZGV4LCBzY2FsZSwgMCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50
LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIEFyZyBw
cmVJbmRleChBaXI6OlRtcCBiYXNlLCBJbnQgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQo
YmFzZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNJbnQ5KGluZGV4KSk7CisgICAgICAgIEFy
ZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQcmVJbmRleDsKKyAgICAgICAgcmVz
dWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGluZGV4OworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwg
dHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBBcmcgcG9z
dEluZGV4KEFpcjo6VG1wIGJhc2UsIEludCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChi
YXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc0ludDkoaW5kZXgpKTsKKyAgICAgICAgQXJn
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFBvc3RJbmRleDsKKyAgICAgICAgcmVz
dWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGluZGV4OworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIHN0YXRpYyBBcmcgcmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiAgICAgewogICAgICAg
ICBBcmcgcmVzdWx0OwpAQCAtNzk5LDYgKzgyNSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBraW5kKCkgPT0gSW5kZXg7CiAgICAgfQogCisgICAgYm9vbCBpc1ByZUluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUHJlSW5kZXg7CisgICAgfQorCisgICAg
Ym9vbCBpc1Bvc3RJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09
IFBvc3RJbmRleDsKKyAgICB9CisKICAgICBib29sIGlzTWVtb3J5KCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CkBAIC04MDgsNiArODQ0LDggQEAgcHVibGljOgogICAg
ICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgSW5k
ZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC05NzIsNyArMTAxMCw3IEBAIHB1YmxpYzoKIAogICAgIEFpcjo6VG1wIGJh
c2UoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTaW1wbGVBZGRyIHx8
IGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgp
ID09IEluZGV4KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTaW1wbGVBZGRyIHx8IGtpbmQo
KSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IElu
ZGV4IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8fCBraW5kKCkgPT0gUG9zdEluZGV4KTsKICAgICAg
ICAgcmV0dXJuIG1fYmFzZTsKICAgICB9CiAKQEAgLTk4Miw3ICsxMDIwLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgaWYgKGtpbmQoKSA9PSBTdGFjaykKICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9zY2FsZSk7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9
PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
QWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJn
IHx8IGtpbmQoKSA9PSBJbmRleCB8fCBraW5kKCkgPT0gUHJlSW5kZXggfHwga2luZCgpID09IFBv
c3RJbmRleCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4o
bV9vZmZzZXQpOwogICAgIH0KIApAQCAtMTA0NCw2ICsxMDgyLDggQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgogICAgICAgICBj
YXNlIEluZGV4OgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRl
eDoKICAgICAgICAgY2FzZSBTdGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBj
YXNlIFJlbENvbmQ6CkBAIC0xMDgxLDYgKzExMjEsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
QWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CiAgICAgICAgIGNhc2UgSW5k
ZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAg
ICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgQmln
SW1tOiAvLyBZZXMsIHdlIGFsbG93IEJpZ0ltbSBhcyBhIGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVz
ZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBzLgpAQCAtMTIzNyw2ICsxMjc5LDIyIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0
YXRpYyBib29sIGlzVmFsaWRQcmVJbmRleEZvcm0oSW50IG9mZnNldCkKKyAgICB7CisgICAgICAg
IGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFNpZ25lZEltbTkob2Zm
c2V0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRp
YyBib29sIGlzVmFsaWRQb3N0SW5kZXhGb3JtKEludCBvZmZzZXQpCisgICAgeworICAgICAgICBp
ZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRTaWduZWRJbW05KG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICAvLyBJZiB5b3UgZG9uJ3Qg
cGFzcyBhIHdpZHRoIHRoZW4gdGhpcyBvcHRpbWlzdGljYWxseSBhc3N1bWVzIHRoYXQgeW91J3Jl
IHVzaW5nIHRoZSByaWdodCB3aWR0aC4gQnV0CiAgICAgLy8gdGhlIHdpZHRoIGlzIHJlbGV2YW50
IHRvIHZhbGlkaXR5LCBzbyBwYXNzaW5nIGEgbnVsbCB3aWR0aCBpcyBvbmx5IHVzZWZ1bCBmb3Ig
YXNzZXJ0aW9ucy4gRG9uJ3QKICAgICAvLyBwYXNzIG51bGwgd2lkdGhzIHdoZW4gY2FzY2FkaW5n
IHRocm91Z2ggQXJncyBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IhCkBAIC0xMjY1LDYgKzEz
MjMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRBZGRyRm9ybShvZmZz
ZXQoKSwgd2lkdGgpOwogICAgICAgICBjYXNlIEluZGV4OgogICAgICAgICAgICAgcmV0dXJuIGlz
VmFsaWRJbmRleEZvcm0oc2NhbGUoKSwgb2Zmc2V0KCksIHdpZHRoKTsKKyAgICAgICAgY2FzZSBQ
cmVJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkUHJlSW5kZXhGb3JtKG9mZnNldCgp
KTsKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFBv
c3RJbmRleEZvcm0ob2Zmc2V0KCkpOwogICAgICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNh
c2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgpAQCAtMTI4NCw2ICsxMzQ2LDgg
QEAgcHVibGljOgogICAgICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIGNhc2UgQWRkcjoK
ICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6
CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5kZXg6CkBAIC0xMzI2LDYgKzEzOTAs
OCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU2ltcGxlQWRkcjoKICAgICAgICAgY2FzZSBBZGRy
OgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKKyAgICAgICAgY2FzZSBQcmVJbmRl
eDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwg
VXNlLCBHUCwgYXJnUm9sZSA9PSBVc2VBZGRyID8gYXJnV2lkdGggOiBwb2ludGVyV2lkdGgoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmRleDoKQEAgLTEzODMsNiArMTQ0
OSwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlw
ZT4obV9vZmZzZXQpLCBtX2V4dGVuZCk7CiAgICAgfQogCisgICAgTWFjcm9Bc3NlbWJsZXI6OlBy
ZUluZGV4QWRkcmVzcyBhc1ByZUluZGV4QWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoaXNQcmVJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpQcmVJ
bmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBvZmZzZXQoKSk7CisgICAgfQorCisgICAgTWFjcm9B
c3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MgYXNQb3N0SW5kZXhBZGRyZXNzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc1Bvc3RJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKG1fYmFzZS5ncHIoKSwgb2Zmc2V0KCkpOworICAg
IH0KKwogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGFzUmVsYXRpb25h
bENvbmRpdGlvbigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNSZWxDb25kKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAppbmRleCBlODI1ODJiYjVlZDAyMjJm
Zjc0NDNlZWEyNjIzODM0MTU5OGE1NWU4Li5hMTU5YzhiMzI4M2VmZTIwYjMyY2ZhZGYzMWZkZDhi
NmYxZGI0ZTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaApAQCAtOTIs
NiArOTIsMTUgQEAgc3RydWN0IEluc3QgewogICAgICAgICBhcHBlbmQoYXJndW1lbnRzLi4uKTsK
ICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBy
ZXBsYWNlSW5kZW50aXR5KEtpbmQga2luZCwgQXJnIGFyZywgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKKyAgICB7CisgICAgICAgIHRoaXMtPmtpbmQgPSBraW5kOworICAgICAgICBhcmdzLmNsZWFy
KCk7CisgICAgICAgIGFyZ3MuYXBwZW5kKGFyZyk7CisgICAgICAgIGFwcGVuZChhcmd1bWVudHMu
Li4pOworICAgIH0KKwogICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQg
dXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0
CiAgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRpdGVkOyBpZiB5b3UncmUgY2Fy
cnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdyZQogICAgIC8vIHByb2JhYmx5
IGRvaW5nIGl0IHdyb25nLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bj
b2RlLm9wY29kZXMKaW5kZXggNjYxZWFkZDIzNzNjNTRhNGJiYTk0N2E1NGJkYTI1NTdiZGI4YWU0
YS4uYTQ2NjEzN2I3MmM5ZDI5MDJlOWRiYWZlZmIwYjgzYjFjNjc2YzIwYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC02NjEsNiArNjYx
LDEyIEBAIHg4Nl82NDogU3dhcDY0IFVEOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRtcAogICAg
IFRtcCwgQWRkcgogCithcm02NDogTW92ZVdpdGhJbmNyZW1lbnQ2NCBVOkc6NjQsIFVEOkc6NjQK
KyAgICBQcmVJbmRleCwgVG1wIGFzIGxvYWQ2NAorICAgIFBvc3RJbmRleCwgVG1wIGFzIGxvYWQ2
NAorICAgIFRtcCwgUHJlSW5kZXggYXMgc3RvcmU2NAorICAgIFRtcCwgUG9zdEluZGV4IGFzIHN0
b3JlNjQKKwogTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wIGFzIHplcm9FeHRl
bmQzMlRvV29yZAogICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKQEAgLTY3MSw2ICs2NzcsMTIgQEAg
TW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIHg4NjogSW1tLCBBZGRyIGFzIHN0b3JlMzIKICAg
ICB4ODY6IEltbSwgSW5kZXggYXMgc3RvcmUzMgogCithcm02NDogTW92ZVdpdGhJbmNyZW1lbnQz
MiBVOkc6MzIsIFVaRDpHOjMyCisgICAgUHJlSW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBQb3N0
SW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBUbXAsIFByZUluZGV4IGFzIHN0b3JlMzIKKyAgICBU
bXAsIFBvc3RJbmRleCBhcyBzdG9yZTMyCisKICMgVGhpcyBpcyBmb3IgbW92aW5nIGJldHdlZW4g
c3BpbGwgc2xvdHMuCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyLCBTOkc6MzIKICAgICBBZGRyLCBB
ZGRyLCBUbXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2Rl
X2dlbmVyYXRvci5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVy
YXRvci5yYgppbmRleCAzNzQwZWZkYmRkMTQ2YTM3ZjZlZGU5ZGRiYzIzZGRiYTAzYjA3NjQ2Li5m
MWJmMWE0NmNmYzg4OWVjMTkzNDZmMmMwNmI3Y2Y1MGY5ZTNkZTBkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCkBAIC0yMjksNyArMjI5
LDcgQEAgZGVmIGlzR0YodG9rZW4pCiBlbmQKIAogZGVmIGlzS2luZCh0b2tlbikKLSAgICB0b2tl
biA9fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoWmVyb1Jl
Zyl8KFNpbXBsZUFkZHIpfChBZGRyKXwoRXh0ZW5kZWRPZmZzZXRBZGRyKXwoSW5kZXgpfChSZWxD
b25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KKyAgICB0b2tlbiA9
fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoWmVyb1JlZyl8
KFNpbXBsZUFkZHIpfChBZGRyKXwoRXh0ZW5kZWRPZmZzZXRBZGRyKXwoSW5kZXgpfChQcmVJbmRl
eCl8KFBvc3RJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCl8KFN0YXR1c0Nv
bmQpKVxaLwogZW5kCiAKIGRlZiBpc0FyY2godG9rZW4pCkBAIC0zMDMsNyArMzAzLDcgQEAgY2xh
c3MgUGFyc2VyCiAKICAgICBkZWYgY29uc3VtZUtpbmQKICAgICAgICAgcmVzdWx0ID0gdG9rZW4u
c3RyaW5nCi0gICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1tLCBC
aXRJbW0sIEJpdEltbTY0LCBaZXJvUmVnLCBUbXAsIFNpbXBsZUFkZHIsIEFkZHIsIEV4dGVuZGVk
T2Zmc2V0QWRkciwgSW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1
c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVj
dGVkIGtpbmQgKEltbSwgQmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0LCBaZXJvUmVnLCBUbXAsIFNp
bXBsZUFkZHIsIEFkZHIsIEV4dGVuZGVkT2Zmc2V0QWRkciwgSW5kZXgsIFByZUluZGV4LCBQb3N0
SW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1c0NvbmQpIikgdW5s
ZXNzIGlzS2luZChyZXN1bHQpCiAgICAgICAgIGFkdmFuY2UKICAgICAgICAgcmVzdWx0CiAgICAg
ZW5kCkBAIC05MjksNiArOTI5LDEyIEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAg
ICAgICAgICAgICAgIHdoZW4gIkluZGV4IgogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmICghQXJnOjppc1ZhbGlkSW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLnNjYWxlKCksIGFyZ3Nb
I3tpbmRleH1dLm9mZnNldCgpLCAje2FyZy53aWR0aENvZGV9KSkiCiAgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgd2hl
biAiUHJlSW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6Omlz
VmFsaWRQcmVJbmRleEZvcm0oYXJnc1sje2luZGV4fV0ub2Zmc2V0KCkpKSIKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAg
ICB3aGVuICJQb3N0SW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFB
cmc6OmlzVmFsaWRQb3N0SW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpKSkiCisgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCiAgICAgICAg
ICAgICAgICAgd2hlbiAiQmlnSW1tIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCiAg
ICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKQEAgLTEyMzUsNiArMTI0MSwxMCBAQCB3cml0
ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
YXJnc1sje2luZGV4fV0uYXNBZGRyZXNzKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgi
CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQmFzZUlu
ZGV4KCkiCisgICAgICAgICAgICAgICAgd2hlbiAiUHJlSW5kZXgiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUHJlSW5kZXhBZGRyZXNzKCkiCisgICAg
ICAgICAgICAgICAgd2hlbiAiUG9zdEluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnBy
aW50ICJhcmdzWyN7aW5kZXh9XS5hc1Bvc3RJbmRleEFkZHJlc3MoKSIKICAgICAgICAgICAgICAg
ICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7
aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKICAgICAgICAgICAgICAgICB3aGVuICJS
ZXNDb25kIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IGM3MDMyZWMwODRkZGZkZDkz
NWU1NTI3ZmFhZTkzNTY4MTk4NDgxNzkuLjcyMWViM2FkZDYyNzQ4ZTJmYjAyZGRmNDI1NTdjYzU5
ZDVkODgwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTExNDAsNCArMTE0MCw5
IEBAIHZvaWQgYWRkQ29weVRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNo
YXJlZFRhc2s8dm9pZCgpPj4+Jik7CiAKIGJvb2wgc2hvdWxkUnVuKGNvbnN0IGNoYXIqIGZpbHRl
ciwgY29uc3QgY2hhciogdGVzdE5hbWUpOwogCit2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpOwor
dm9pZCB0ZXN0TG9hZFByZUluZGV4NjQoKTsKK3ZvaWQgdGVzdExvYWRQb3N0SW5kZXgzMigpOwor
dm9pZCB0ZXN0TG9hZFBvc3RJbmRleDY0KCk7CisKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKaW5kZXggNGM1MmFkYTljYzQwMmRkZTUz
OTg4Y2M4ZjJmNWU5ZTBkZGUyZTExYy4uMGE1MGFhODcwMzdmZWUzYzIxNThhYmM4YjJiNmRmOTlj
MGRmOGI3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCkBAIC0yOCw2ICsy
OCwzMDAgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKwordm9pZCB0ZXN0TG9hZFByZUluZGV4
MzIoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDksIDEwIH07CisgICAgaW50MzJfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJv
ZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxv
Y2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQzMik7CisgICAg
VmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24o
cjEsIF5yMikgICAgICAgICAgICAgCisgICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihw
MSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9y
aWdpbigpLCBJbnQzMiwgMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHBy
b2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0
LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9j
LCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAg
Ly8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3Rv
IGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAg
ICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1
YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJv
YywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9v
cF9Cb2R5X0Jsb2NrCisgICAgLy8gcDMgPSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIp
CisgICAgLy8gcjMgPSByMiArIGxvYWQocDMpCisgICAgLy8gVXBzaWxvbihyMywgXnIyKQorICAg
IC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIDQpKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxl
VmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgVmFsdWUqIHIzID0g
bG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BC
b2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwg
cDMpKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpT
ZXQsIE9yaWdpbigpLCByLCByMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAg
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAg
IC8vIHJldHVybiByMgorICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCByMik7ICAKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAg
ICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJ
bnN0cnVjdGlvbigqY29kZSwgIiM0XSEiKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBp
bnQzMl90IHsKKyAgICAgICAgaW50MzJfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkK
KyAgICAgICAgICAgIHIgKz0gKisrcHRyOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KHB0cikpLCB0ZXN0KCkpOworfQorCit2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpCit7CisgICAg
aWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisK
KyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsK
KyAgICBpbnQ2NF90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVz
dCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAg
VmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKyAgICBWYXJpYWJsZSogcCA9
IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKSAgICAg
ICAgICAgICAKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAg
VmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDY0
LCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwg
T3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
cm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBw
LCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdp
bigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgp
CisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZh
bHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6Okdl
dCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25k
ID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCks
IHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEw
KSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9y
aWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29w
Qm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sK
KyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyByMyA9
IHIyICsgbG9hZChwMykKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gZ290byBsb29w
CisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBP
cmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmln
aW4oKSwgOCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHktPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLCBwMykpOworICAgIGxv
b3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCks
IHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAs
IE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIy
CisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHIyKTsgICAKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShw
cm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgIiM4XSEiKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQ2NF90IHsKKyAg
ICAgICAgaW50NjRfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAg
IHIgKz0gKisrcHRyOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEo
aW52b2tlPGludDY0X3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0
KCkpOworfQorCit2b2lkIHRlc3RMb2FkUG9zdEluZGV4MzIoKQoreworICAgIGlmIChPcHRpb25z
OjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50MzJf
dCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50MzJf
dCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiBy
ID0gcHJvYy5hZGRWYXJpYWJsZShJbnQzMik7CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZh
cmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9j
aworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikgICAgICAgICAgICAgCisg
ICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9
IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgMCk7CisgICAg
cm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBy
LCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVl
bnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExv
b3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIy
ID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBs
b29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigp
LCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRl
c3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxv
b3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29u
ZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKwor
ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcjMg
PSByMiArIGxvYWQocDIpCisgICAgLy8gcDMgPSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHIzLCBe
cjIpCisgICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVl
KiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIy
LCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3Jp
Z2luKCksIHAyKSk7CisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgNCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7Cisg
ICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwg
RnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7IAorCisg
ICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZp
eFNTQShwcm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlm
IChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwgIzQi
KTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQzMl90IHsKKyAgICAgICAgaW50MzJf
dCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAgIHIgKz0gKnB0cisr
OworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoaW52b2tlPGludDMy
X3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCit2
b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50NjRfdCBudW1zW10gPSB7
IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50NjRfdCogcHRyID0gbnVt
czsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9j
ayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRW
YXJpYWJsZShJbnQ2NCk7CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0
KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIx
ID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikgICAgICAgICAgICAgCisgICAgLy8gcDEgPSBh
ZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFwcGVu
ZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQ2NCwgMCk7CisgICAgcm9vdC0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAg
VmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxv
b3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9CbG9j
aworICAgIC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkKKyAg
ICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBW
YWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpH
ZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVuZE5l
dzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5hcHBl
bmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRl
ZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcjMgPSByMiArIGxvYWQo
cDIpCisgICAgLy8gcDMgPSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8g
VXBzaWxvbihwMywgXnAyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiByMyA9IGxvb3BC
b2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksIHAyKSk7
CisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBP
cmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmln
aW4oKSwgOCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlh
YmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgbG9vcEJvZHkt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJs
b2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmVfQmxv
Y2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7IAorCisgICAgcHJvYy5yZXNl
dFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsK
KworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkp
CisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwgIzgiKTsKKworICAgIGF1
dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQ2NF90IHsKKyAgICAgICAgaW50NjRfdCByID0gMDsKKyAg
ICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAgIHIgKz0gKnB0cisrOworICAgICAgICBy
ZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+KCpjb2RlLCBi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCisKIHZvaWQgdGVzdElu
c2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvMzIoKQogewogICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRl
ZmF1bHRCM09wdExldmVsKCkgPCAyKQpAQCAtMzY5Nyw2ICszOTkxLDExIEBAIHZvaWQgYWRkU2hy
VGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+
Pj4mIHRhc2tzKQogICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDApKTsKICAg
ICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCAxKSk7CiAgICAgUlVOKHRlc3RaU2hy
QXJnSW1tMzIoMHhmZmZmZmZmZiwgNjMpKTsKKworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4MzIo
KSk7CisgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdExvYWRQb3N0
SW5kZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRQb3N0SW5kZXg2NCgpKTsKIH0KIAogI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmNwcAppbmRleCA2M2UyNjY3ODg1MjAxOGE3NjgwY2E1ZjA3MTQ2OTY4
MTA1ODg0YjNiLi42OWJiNmIyYmU4MTg3MGI1OTgzMzM2N2FmMjY3NWI3ZjRlZjA1NmY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAK
QEAgLTIzMyw4ICsyMzMsOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGppdFdyaXRlVGh1bmtHZW5lcmF0bwogICAgIGppdC5yZXQo
KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb2NhbDAgPSBqaXQubGFiZWwoKTsKLSAg
ICBqaXQubG9hZDY0KHgxLCBQb3N0SW5kZXgoOCksIHg2KTsKLSAgICBqaXQuc3RvcmU2NCh4Niwg
eDMsIFBvc3RJbmRleCg4KSk7CisgICAgaml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6UG9zdElu
ZGV4QWRkcmVzcyh4MSwgOCksIHg2KTsKKyAgICBqaXQuc3RvcmU2NCh4NiwgTWFjcm9Bc3NlbWJs
ZXI6OlBvc3RJbmRleEFkZHJlc3MoeDMsIDgpKTsKICAgICBzbWFsbENvcHkubGluaygmaml0KTsK
ICAgICBqaXQuYnJhbmNoU3ViNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgVHJ1c3Rl
ZEltbTMyKDgpLCB4MikubGlua1RvKGxvY2FsMCwgJmppdCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbG9jYWwyID0gaml0LmJyYW5jaEFkZDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgVHJ1
c3RlZEltbTMyKDgpLCB4Mik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434376</attachid>
            <date>2021-07-27 15:51:13 -0700</date>
            <delta_ts>2021-07-28 02:38:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210727175112.patch</filename>
            <type>text/plain</type>
            <size>65715</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi44MDAyOGM3OTg2M2Q1OGZm
NGFlYTZlMzA1Mjc5MjUzMWZlM2I3NzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NTIgQEAKKzIwMjEtMDctMjcgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBQcmUvUG9zdC1JbmRleGVkIEFkZHJlc3MgTW9kZSB0byBBaXIg
Zm9yIEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjgwNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcmUtaW5kZXhlZCBhZGRyZXNzaW5nIG1lYW5zIHRoYXQgdGhlIGFkZHJlc3MgaXMgdGhlIHN1
bSBvZiB0aGUgdmFsdWUgaW4gdGhlIDY0LWJpdCBiYXNlIHJlZ2lzdGVyIAorICAgICAgICBhbmQg
YW4gb2Zmc2V0LCBhbmQgdGhlIGFkZHJlc3MgaXMgdGhlbiB3cml0dGVuIGJhY2sgdG8gdGhlIGJh
c2UgcmVnaXN0ZXIuIEFuZCBwb3N0LWluZGV4ZWQgCisgICAgICAgIGFkZHJlc3NpbmcgbWVhbnMg
dGhhdCB0aGUgYWRkcmVzcyBpcyB0aGUgdmFsdWUgaW4gdGhlIDY0LWJpdCBiYXNlIHJlZ2lzdGVy
LCBhbmQgdGhlIHN1bSBvZiB0aGUgCisgICAgICAgIGFkZHJlc3MgYW5kIHRoZSBvZmZzZXQgaXMg
dGhlbiB3cml0dGVuIGJhY2sgdG8gdGhlIGJhc2UgcmVnaXN0ZXIuIFRoZXkgYXJlIHJlbGF0aXZl
bHkgY29tbW9uIGZvciAKKyAgICAgICAgbG9vcHMgdG8gaXRlcmF0ZSBvdmVyIGFuIGFycmF5IGJ5
IGluY3JlYXNpbmcvZGVjcmVhc2luZyBhIHBvaW50ZXIgaW50byB0aGUgYXJyYXkgYXQgZWFjaCBp
dGVyYXRpb24uIAorICAgICAgICBXaXRoIHN1Y2ggYW4gYWRkcmVzc2luZyBtb2RlLCB0aGUgaW5z
dHJ1Y3Rpb24gc2VsZWN0b3IgY2FuIG1lcmdlIHRoZSBpbmNyZW1lbnQgYW5kIGFjY2VzcyB0aGUg
YXJyYXkuCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor
ICAgICAgICAjIyBQcmUtSW5kZXggQWRkcmVzcyBNb2RlIEZvciBMb2FkICMjCisgICAgICAgICMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICAgICBMRFIgV3QsIFtY
biwgI2ltbV0hCisKKyAgICAgICAgVGhlIGVxdWl2YWxlbnQgcGF0dGVybiBpczoKKyAgICAgICAg
ICAgIHggPSAuLi4gCisgICAgICAgICAgICB5ID0gYWRkKHgsIG9mZnNldCkKKyAgICAgICAgICAg
IHogPSBsb2FkKHksIDApCisKKyAgICAgICAgVGhlIFN0cmF0ZWd5OgorICAgICAgICB4ID0gLi4u
ICAgICAgICAgICAgICAgICAgICAgIG1vdmUgeCB0byB0bXAgICAgICAgICAgICAgICAgICAgICAg
ICAgeCA9IC4uLgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgICAgIC4uLiBDb2RlIEEgLi4uICAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tICAgICAg
ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgICAgICB5ID0gYWRkKHgsIG9mZnNldCkgICAgICAgICAgIG1vdmUg
dG1wIHRvIHkgICAgICAgICAgICAgICAgICAgICAgICAgeSA9ICZ4CisgICAgICAgIC0tLS0tLS0t
LS0tLS0tLS0tLSAgIC0tLS0+ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgLS0tLT4g
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLi4uIENvZGUgQiAuLi4gICAg
ICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorICAg
ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHogPSBs
b2FkKHksIDApICAgICAgICAgICAgICAgbG9hZCB0bXAgd2l0aCBwcmVmaXggdG8geiAgICAgICAg
ICAgICB6ID0gbG9hZCh4LCBwcmVmaXgob2Zmc2V0KSkKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0t
LS0tICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAuLi4gQ29kZSBDIC4uLiAgICAgICAgICAg
ICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgIC0t
LS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAg
ICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMjIFByZS1JbmRleCBB
ZGRyZXNzIFBhdHRlcm4gQ29uc3RyYWludHMgIyMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAgICAgVXNlIFJlZmVyZW5jZXMgb2YgeCBpbiB8IEEgfCBCIHwg
QyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZIHwgWSB8IE4gfAorICAgICAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBVc2UgUmVmZXJl
bmNlcyBvZiB4IGluIEE6CisgICAgICAgIHggPSAuLi4gICAgICAgICAgICAgICAgICAgICAgbW92
ZSB4IHRvIHRtcCAgICAgICAgICAgICAgICAgICAgICAgeCA9IC4uLgorICAgICAgICBwcmludCh4
KSAgICAgICAgICAgICAtLS0tPiAgIHByaW50KHgpICAgICAgICAgICAgICAgICAgICAtLS0tPiAg
IHByaW50KHgpCisgICAgICAgIHkgPSBhZGQoeCwgb2Zmc2V0KSAgICAgICAgICAgbW92ZSB0bXAg
dG8geSAgICAgICAgICAgICAgICAgICAgICAgeSA9ICZ4CisgICAgICAgIHogPSBsb2FkKHksIDAp
ICAgICAgICAgICAgICAgbG9hZCB0bXAgd2l0aCBwcmVmaXggdG8geiAgICAgICAgICAgeiA9IGxv
YWQoeCwgcHJlZml4KG9mZnNldCkpCisKKyAgICAgICAgVXNlIFJlZmVyZW5jZXMgb2YgeCBpbiBC
OgorICAgICAgICB4ID0gLi4uICAgICAgICAgICAgICAgICAgICAgIG1vdmUgeCB0byB0bXAgICAg
ICAgICAgICAgICAgICAgICAgIHggPSAuLi4KKyAgICAgICAgeSA9IGFkZCh4LCBvZmZzZXQpICAg
LS0tLT4gICBtb3ZlIHRtcCB0byB5ICAgICAgICAgICAgICAgLS0tLT4gICB5ID0gJngKKyAgICAg
ICAgcHJpbnQoeCkgICAgICAgICAgICAgICAgICAgICBwcmludCh4KSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmludCh4KQorICAgICAgICB6ID0gbG9hZCh5LCAwKSAgICAgICAgICAgICAg
IGxvYWQgdG1wIHdpdGggcHJlZml4IHRvIHogICAgICAgICAgIHogPSBsb2FkKHgsIHByZWZpeChv
ZmZzZXQpKQorCisgICAgICAgIFVzZSBSZWZlcmVuY2VzIG9mIHggaW4gQzoKKyAgICAgICAgeCA9
IC4uLiAgICAgICAgICAgICAgICAgICAgICBtb3ZlIHggdG8gdG1wICAgICAgICAgICAgICAgICAg
ICAgICB4ID0gLi4uIAorICAgICAgICB5ID0gYWRkKHgsIG9mZnNldCkgICAtLS0tPiAgIG1vdmUg
dG1wIHRvIHkgICAgICAgICAgICAgICAtLS0tPiAgIHkgPSAmeAorICAgICAgICB6ID0gbG9hZCh5
LCAwKSAgICAgICAgICAgICAgIGxvYWQgdG1wIHdpdGggcHJlZml4IHRvIHogICAgICAgICAgIHog
PSBsb2FkKHgsIHByZWZpeChvZmZzZXQpKQorICAgICAgICBwcmludCh4KSAgICAgICAgICAgICAg
ICAgICAgIHByaW50KHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KHgpCisKKyAg
ICAgICAgVGhlIGNvbnN0cmFpbnQgZm9yIHgncyBVc2UgUmVmZXJlbmNlczogVGhlIHVzZSByZWZl
cmVuY2VzIG9mIHggc2hvdWxkIG5vdCBhcHBlYXIgYWZ0ZXIgdGhlIGxvYWQgdmFsdWUgei4gCisg
ICAgICAgIFNvLCBMYXN0VXNlTG9jYXRpb24oeCkgPT0gTG9jYXRpb24oeikuIChIZXJlLCB0aGUg
TG9jYXRpb24gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBpbiB0aGUgcmVsYXRpdmUg
CisgICAgICAgIGNvZGUgZXhlY3V0aW9uIG9yZGVyLikKKworICAgICAgICAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgVXNlIFJlZmVyZW5jZXMgb2YgeSBpbiB8
IEEgfCBCIHwgQyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYIHwgWSB8IFkgfAor
ICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBV
c2UgUmVmZXJlbmNlcyBvZiB5IGluIEI6CisgICAgICAgIHggPSAuLi4gICAgICAgICAgICAgICAg
ICAgICAgbW92ZSB4IHRvIHRtcCAgICAgICAgICAgICAgICAgICAgICAgeCA9IC4uLiAKKyAgICAg
ICAgeSA9IGFkZCh4LCBvZmZzZXQpICAgLS0tLT4gICBtb3ZlIHRtcCB0byB5ICAgICAgICAgICAg
ICAgLS0tLT4gICB5ID0gJnggCisgICAgICAgIHByaW50KHkpICAgICAgICAgICAgICAgICAgICAg
cHJpbnQoeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoeSkgCisgICAgICAgIHog
PSBsb2FkKHksIDApICAgICAgICAgICAgICAgbG9hZCB0bXAgd2l0aCBwcmVmaXggdG8geiAgICAg
ICAgICAgeiA9IGxvYWQoeCwgcHJlZml4KG9mZnNldCkpCisKKyAgICAgICAgVXNlIFJlZmVyZW5j
ZXMgb2YgeSBpbiBDOgorICAgICAgICB4ID0gLi4uICAgICAgICAgICAgICAgICAgICAgIG1vdmUg
eCB0byB0bXAgICAgICAgICAgICAgICAgICAgICAgIHggPSAuLi4gICAgICAgICAgICAgICAgCisg
ICAgICAgIHkgPSBhZGQoeCwgb2Zmc2V0KSAgIC0tLS0+ICAgbW92ZSB0bXAgdG8geSAgICAgICAg
ICAgICAgIC0tLS0+ICAgeSA9ICZ4IAorICAgICAgICB6ID0gbG9hZCh5LCAwKSAgICAgICAgICAg
ICAgIGxvYWQgdG1wIHdpdGggcHJlZml4IHRvIHogICAgICAgICAgIHogPSBsb2FkKHgsIHByZWZp
eChvZmZzZXQpKQorICAgICAgICBwcmludCh5KSAgICAgICAgICAgICAgICAgICAgIHByaW50KHkp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KHkpCisKKyAgICAgICAgVGhlIGNvbnN0
cmFpbnQgZm9yIHkncyBSZWZlcmVuY2VzOiBUaGUgdXNlIHJlZmVyZW5jZXMgb2YgeSBtdXN0IGFw
cGVhciBhZnRlciB0aGUgbG9hZCB2YWx1ZSB6LiAKKyAgICAgICAgU28sIExhc3RVc2VMb2NhdGlv
bih5KSA+IExvY2F0aW9uKHopLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IC4u
ICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAuLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHkgPSBhZGQoeCwgb2Zmc2V0KSAgICAgLS0+ICAgICAvLyB5ID0gYWRkKHgsIG9mZnNldCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ID0gbG9hZCh5LCAwKSAgICAgICAgICAgICAg
ICAgeiA9IGxvYWQoeSwgb2Zmc2V0KQorCisgICAgICAgIElmIG5vIHkncyB1c2UgcmVmZXJlbmNl
IGJlbG93IHosIGl0IHNob3VsZCBkaXJlY3RseSBlbWl0IGFkZHJlc3Mgd2l0aCBvZmZzZXQgaW5z
dGVhZCBvZiB0aGUgcHJlZml4IG9uZS4KKworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIyBQb3N0LUluZGV4IEFkZHJlc3MgTW9kZSBGb3Ig
TG9hZCAjIworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor
CisgICAgICAgIExEUiBXdCwgW1huXSwgI2ltbQorCisgICAgICAgIFRoZSBlcXVpdmFsZW50IHBh
dHRlcm4gaXM6CisgICAgICAgICAgICB4ID0gLi4uIAorICAgICAgICAgICAgeSA9IGxvYWQoeCwg
MCkKKyAgICAgICAgICAgIHogPSBhZGQoeCwgb2Zmc2V0KQorCisgICAgICAgIFRoZSBTdHJhdGVn
eToKKyAgICAgICAgeCA9IC4uLiAgICAgICAgICAgICAgICAgICAgICBtb3ZlIHggdG8gdG1wICAg
ICAgICAgICAgICAgICAgICAgICAgIHggPSAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0t
ICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAuLi4gQ29kZSBDaHVuayBBICAgICAgICAgICAg
IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgIC0tLS0t
LS0tLS0tLS0tLS0tLSAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAg
ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgeSA9IGxvYWQoeCwgMCkg
ICAgICAgICAgICAgICBsb2FkIHRtcCB3aXRoIHByZWZpeCB0byB5ICAgICAgICAgICAgIHkgPSBs
b2FkKHgsIHBvc3RmaXgob2Zmc2V0KSkKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tICAgLS0t
LT4gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAtLS0tPiAgIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgICAgICAuLi4gQ29kZSBDaHVuayBCICAgICAgICAgICAgIC4uLiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgIC0tLS0tLS0tLS0t
LS0tLS0tLSAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgeiA9IGFkZCh4LCBvZmZzZXQpICAg
ICAgICAgICBtb3ZlIHRtcCB0byB6ICAgICAgICAgICAgICAgICAgICAgICAgIHogPSAmeAorICAg
ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC4uLiBD
b2RlIENodW5rIEMgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisg
ICAgICAgICMjIFBvc3QtSW5kZXggQWRkcmVzcyBQYXR0ZXJuIENvbnN0cmFpbnRzICMjCisgICAg
ICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAg
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBVc2UgUmVmZXJl
bmNlcyBvZiB4IGluIHwgQSB8IEIgfCBDIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IFkgfCBOIHwgTiB8CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisgICAgICAgIFVzZSBSZWZlcmVuY2VzIG9mIHggaW4gQToKKyAgICAgICAgeCA9IC4uLiAg
ICAgICAgICAgICAgICAgICAgICAgbW92ZSB4IHRvIHRtcCAgICAgICAgICAgICAgICAgICAgICAg
IHggPSAuLi4KKyAgICAgICAgcHJpbnQoeCkgICAgICAgICAgICAgLS0tLT4gICAgcHJpbnQoeCkg
ICAgICAgICAgICAgICAgICAgIC0tLS0+ICAgIHByaW50KHgpCisgICAgICAgIHkgPSBsb2FkKHgs
IDApICAgICAgICAgICAgICAgIGxvYWQgdG1wIHdpdGggcG9zdGZpeCB0byB5ICAgICAgICAgICB5
ID0gbG9hZCh4LCBwb3N0Zml4KG9mZnNldCkpCisgICAgICAgIHogPSBhZGQoeCwgb2Zmc2V0KSAg
ICAgICAgICAgIG1vdmUgdG1wIHRvIHogICAgICAgICAgICAgICAgICAgICAgICB6ID0gJngKKwor
ICAgICAgICBVc2UgUmVmZXJlbmNlcyBvZiB4IGluIEI6CisgICAgICAgIHggPSAuLi4gICAgICAg
ICAgICAgICAgICAgICAgIG1vdmUgeCB0byB0bXAgICAgICAgICAgICAgICAgICAgICAgICB4ID0g
Li4uCisgICAgICAgIHkgPSBsb2FkKHgsIDApICAgICAgIC0tLS0+ICAgIGxvYWQgdG1wIHdpdGgg
cG9zdGZpeCB0byB6ICAtLS0tPiAgICB5ID0gbG9hZCh4LCBwb3N0Zml4KG9mZnNldCkpCisgICAg
ICAgIHByaW50KHgpICAgICAgICAgICAgICAgICAgICAgIHByaW50KHgpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmludCh4KQorICAgICAgICB6ID0gYWRkKHgsIG9mZnNldCkgICAgICAg
ICAgICBtb3ZlIHRtcCB0byB5ICAgICAgICAgICAgICAgICAgICAgICAgeiA9ICZ4CisKKyAgICAg
ICAgVXNlIFJlZmVyZW5jZXMgb2YgeCBpbiBDOgorICAgICAgICB4ID0gLi4uICAgICAgICAgICAg
ICAgICAgICAgICBtb3ZlIHggdG8gdG1wICAgICAgICAgICAgICAgICAgICAgICAgeCA9IC4uLiAK
KyAgICAgICAgeSA9IGxvYWQoeCwgMCkgICAgICAgLS0tLT4gICAgbG9hZCB0bXAgd2l0aCBwb3N0
Zml4IHRvIHkgIC0tLS0+ICAgIHkgPSBsb2FkKHgsIHBvc3RmaXgob2Zmc2V0KSkKKyAgICAgICAg
eiA9IGFkZCh4LCBvZmZzZXQpICAgICAgICAgICAgbW92ZSB0bXAgdG8geiAgICAgICAgICAgICAg
ICAgICAgICAgIHogPSAmeAorICAgICAgICBwcmludCh4KSAgICAgICAgICAgICAgICAgICAgICBw
cmludCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoeCkKKworICAgICAgICBU
aGUgY29uc3RyYWludCBvZiB4J3MgUmVmZXJlbmNlczogVGhlIHVzZSByZWZlcmVuY2VzIG9mIHgg
ZXhjZXB0IHogc2hvdWxkIG5vdCBhcHBlYXIgYWZ0ZXIgdGhlIGxvYWQgdmFsdWUgeS4gCisgICAg
ICAgIFNvLCBCZWZvcmVMYXN0VXNlTG9jYXRpb24oeCkgPD0gTG9jYXRpb24oeSkuCisKKyAgICAg
ICAgVGhlIGNvbnN0cmFpbnQgb2YgeidzIFJlZmVyZW5jZXM6IFRoZSB1c2UgcmVmZXJlbmNlcyBv
ZiB6IG11c3QgYXBwZWFyIGFmdGVyIGl0cyBkZWZpbml0aW9uLiAKKyAgICAgICAgU28sIExhc3RV
c2VMb2NhdGlvbih6KSA+IExvY2F0aW9uKHopLgorCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyMgSW1wbGVtZW50YXRpb24gQ2hhbGxlbmdlcyAjIwor
ICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgIyMjIENo
YWxsZW5nZSAxOiBEeW5hbWljIFVzZSBSZWZlcmVuY2VzIGluIExvd2VyaW5nCisgICAgICAgIFRv
IGRldGVjdCB0aGUgdmFsaWQgcHJlLWluZGV4IGFkZHJlc3MgcGF0dGVybiBpcyBhIGNoYWxsZW5n
ZSBpbiBCMyBzaW5jZSB1c2UgcmVmZXJlbmNlcyBhcmUgCisgICAgICAgIGR5bmFtaWNhbGx5IGNo
YW5naW5nIHdoaWxlIGxvd2VyaW5nIHRvIEFpci4gRm9yIGV4YW1wbGU6CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB4ID0gLi4gICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAuLiAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBhZGQo
eCwgb2Zmc2V0KSAgICAgICAgICAgICAgeSA9IGFkZCh4LCBvZmZzZXQpICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeiA9IGxvYWQoeSwgMCkgICAgICAgICAgLS0+ICAgICB6
ID0gbG9hZCh5LCAwKSAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
ID0gbG9hZCh5LCAwKSAgICAgICAgICAgICAgICAgIHcgPSBsb2FkKHgsIG9mZnNldCkgQGhlcmUg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4geSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLi4uCisKKyAgICAgICAgSGVyZSwgYm90aCB6IGFuZCB3IHNob3Vs
ZCBtYXRjaCB0aGUgcHJlZml4IHBhdHRlcm4uIEhvd2V2ZXIsIHRoZSBjaGFuZ2VzIGluIHRoZSBs
b3dlcmluZyBvZiB3IAorICAgICAgICB2aW9sYXRlIHRoZSBwYXR0ZXJuIGluIHouIEFueSBCMyB3
aXRoIGFuIGFkZHJlc3MgY2hpbGQgbWlnaHQgY2hhbmdlIHRoZSB1c2UgcmVmZXJlbmNlcy4gSGVu
Y2UsIHRoZSAKKyAgICAgICAgdXNlIHJlZmVyZW5jZXMgYmFzZWQgb24gdG1wICh2YWx1ZSAtPiB0
bXAgLT4gdXNlcykgYWZ0ZXIgbG93ZXJpbmcgYXJlIG5lZWRlZC4KKworICAgICAgICAjIyMgQ2hh
bGxlbmdlIDI6IFRyYXZlcnNhbCBPcmRlciBpbiBMb3dlcmluZworICAgICAgICBUaGUgdHJhdmVy
c2FsIG9yZGVyIG9mIGxvd2VyaW5nIEIzIHZhbHVlcyBpcyBpbiBhIGJvdHRvbS11cCBtYW5uZXIg
aW4gZWFjaCBiYXNpYyBibG9jay4gQnV0LCB0aGUgCisgICAgICAgIHRyYXZlcnNhbCBvZiBiYXNp
YyBibG9ja3MgaXMgaW4gcHJlb3JkZXIsIG1ha2luZyBpdCBoYXJkIHRvIGRldGVjdCB0aGUgcGF0
dGVybnMgaW4gdGhlIGxvd2VyaW5nIAorICAgICAgICBwaGFzZSB3aXRoIGEgc2luZ2xlIHBhdGgu
IEZvciBleGFtcGxlOgorCisgICAgICAgIEdpdmVuIGNvZGU6CisgICAgICAgIGludDY0X3QgbGRy
X3ByZShpbnQ2NF90ICpwKSB7CisgICAgICAgICAgICBpbnQ2NF90IHJlcyA9IDA7CisgICAgICAg
ICAgICB3aGlsZSAocmVzIDwgMTApCisgICAgICAgICAgICAgICAgcmVzICs9ICorK3A7CisgICAg
ICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CisKKyAgICAgICAgU1NBOgorICAgICAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tICMwIFJvb3RfQmxvY2sKKyAgICAgICAgQDAgIHIxID0gMAor
ICAgICAgICBAMSAgVXBzaWxvbihyMSwgXnIyKSAgICAgICAgICAgICAKKyAgICAgICAgQDIgIHAx
ID0gYWRkcgorICAgICAgICBAMyAgVXBzaWxvbihwMSwgXnAyKQorICAgICAgICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICMxIExvb3BfVGVzdF9CbG9jaworICAgICAgICBsb29wOgorICAgICAgICBA
NCAgcDIgPSBQaGkoKSAgICAgICAgICAgICAgCisgICAgICAgIEA1ICByMiA9IFBoaSgpCisgICAg
ICAgIEA2ICBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAjMiBMb29wX0JvZHlfQmxvY2sKKyAgICAgICAgQDcgIHAzID0gcDIgKyAxICAgICAgICAg
ICAgIAorICAgICAgICBAOCAgbDEgPSBsb2FkKHAzKSAgICAgICAgICAgCisgICAgICAgIEA5ICBy
MyA9IHIyICsgbDEKKyAgICAgICAgQDEwIFVwc2lsb24ocjMsIF5yMikKKyAgICAgICAgQDExIFVw
c2lsb24ocDMsIF5wMikKKyAgICAgICAgQDEyIGdvdG8gbG9vcAorICAgICAgICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICMzIERvbmVfQmxvY2sKKyAgICAgICAgZG9uZToKKyAgICAgICAgQDEzIHJl
dHVybiByMgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgRmxvdyBH
cmFwaDoKKyAgICAgICAgIzAgUm9vdF9CbG9jaworICAgICAgICAgICAgfAorICAgICAgICAgICAg
fAorICAgICAgICAgICAgViAgICAgICAgICAgICAgCisgICAgICAgICMxIExvb3BfVGVzdF9CbG9j
ayAtLS0tLS0+ICMzIERvbmVfQmxvY2sKKyAgICAgICAgICAgIHwgICAgICAgXgorICAgICAgICAg
ICAgfCAgICAgICB8CisgICAgICAgICAgICB8ICAgICAgIHwgICAgCisgICAgICAgICAgICB8ICAg
ICAgIHwgICAgICAgICAKKyAgICAgICAgICAgIFYgICAgICAgfCAgICAgICAgICAKKyAgICAgICAg
IzIgTG9vcF9Cb2R5X0Jsb2NrIAorCisgICAgICAgIExvd2VyaW5nIE9yZGVyIGZvciBCMyB2YWx1
ZXM6CisgICAgICAgICMwIFJvb3RfQmxvY2s6IEAzLCBAMiwgQDEsIEAwCisgICAgICAgICMxIExv
b3BfVGVzdF9CbG9jazogQDYsIEA1LCBANAorICAgICAgICAjMiBMb29wX0JvZHlfQmxvY2s6IEAx
MiwgLi4uCisKKyAgICAgICAgVG8gZGVhbCB3aXRoIGNoYWxsZW5nZXMgMSBhbmQgMiwgdGhpcyBw
YXRjaCBtb3ZlcyB0aGUgcGF0dGVybiBkZXRlY3Rpb24gcGhhc2UgdG8ganVzdCBhZnRlciBsb3dl
cmluZyAKKyAgICAgICAgYW5kIGJlZm9yZSBlbnRlcmluZyBBaXIuIFRoaXMgcHJvdmlkZXMgdHdv
IGJlbmVmaXRzLCBBKSB0aGVyZSBhcmUgbm8gbW9yZSB1c2UgY2hhbmdlcyAoYXQgbGVhc3QgaW4g
QjMpCisgICAgICAgIC4gQikgTm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgemlnemFnIHRyYXZl
cnNhbC4gSW4gY29udHJhc3QsIGl0IG1pZ2h0IGJlIGNvc3RseSBkdWUgdG8gdGhlIGFkZGl0aW9u
YWwgCisgICAgICAgIHRyYXZlcnNhbCBvdmVyYWxsIEIzIHZhbHVlcyBmb3IgdGhlIHBhdHRlcm4g
ZGV0ZWN0aW9uLgorCisgICAgICAgICMjIyBDaGFsbGVuZ2UgMzogUGF0dGVybiBSYWNlIGluIEFw
cGx5aW5nCisgICAgICAgIFRvIGRldGVjdCB0aGUgcGF0dGVybiBmb3IgcHJlZml4IGFkZHJlc3Mg
aXMgZWFzeS4gSG93ZXZlciwgdGhlIHBvc3RmaXggb25lIGlzIHRyaWNreSBzaW5jZSBpdCBpczoK
KyAgICAgICAgICAgIHggPSAuLi4gCisgICAgICAgICAgICB5ID0gbG9hZCh4LCAwKQorICAgICAg
ICAgICAgeiA9IGFkZCh4LCBvZmZzZXQpCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0
aW9uIGlzIHRvIGNvbGxlY3QgdGhlIGNhbmRpZGF0ZXMgYmFzZWQgb24gTG9hZCB2YWx1ZSBmaXJz
dCwgdGhlbiBzZWFyY2ggZm9yIAorICAgICAgICBhbnkgQWRkIHZhbHVlIHRvIG1hdGNoIGFsbCBv
ZiB0aGVtLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSB3b3JzdCBjYXNlIHdvdWxkIGxlYWQgdG8g
YW4gTyhuXjIpIGluIAorICAgICAgICB0aGUgcnVudGltZSB3aGVuIG4gaXMgdGhlIG51bWJlciBv
ZiBhbGwgdmFsdWVzLiBNYXliZSwgd2Ugc2hvdWxkIHByb3ZpZGUgYSBiZXR0ZXIgd2F5IHRvIGRl
YWwgd2l0aCBpdC4KKworICAgICAgICAjIyMgQ2hhbGxlbmdlIDQ6IFBhdHRlcm4gUmFjZSBpbiBB
cHBseWluZworICAgICAgICBBZGQgVmFsdWUgUmFjZTogSW4gdGhlIGZvbGxvd2luZyBleGFtcGxl
LCBib3RoIHBvc3RmaXggYW5kIHByZWZpeCBwYXR0ZXJucyBhcmUgdmFsaWQgaW4geiB3aXRoIHkg
YW5kIAorICAgICAgICB3LCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICB4ID0gLi4uCisgICAg
ICAgICAgICB5ID0gbG9hZCh4LCAwKQorICAgICAgICAgICAgeiA9IGFkZCh4LCBvZmZzZXQpICAK
KyAgICAgICAgICAgIHcgPSBsb2FkKHosIDApCisKKyAgICAgICAgTG9hZCBWYWx1ZSBSYWNlOiBJ
biB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGJvdGggcG9zdGZpeCBhbmQgcHJlZml4IHBhdHRlcm5z
IGFyZSB2YWxpZCBpbiB2YWx1ZSB6IAorICAgICAgICB3aXRoIHkgYW5kIHcsIHJlc3BlY3RpdmVs
eS4KKyAgICAgICAgICAgIHggPSAuLi4KKyAgICAgICAgICAgIHkgPSBhZGQoeCwgb2Zmc2V0KSAg
CisgICAgICAgICAgICB6ID0gbG9hZCh5LCAwKSAgICAgIAorICAgICAgICAgICAgdyA9IGFkZCh5
LCBvZmZzZXQpCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgd2UgY29sbGVjdCB0d28gc2V0cyBv
ZiBjYW5kaWRhdGVzIGZvciBwcmVmaXggYW5kIHBvc3RmaXggYWRkcmVzc2VzLiBBZnRlciB0aGF0
LCBtYXRjaCAKKyAgICAgICAgdGhlIHByZWZpeCBvbmUgZmlyc3Qgc2luY2UgaXQgc2VlbXMgdG8g
YmUgbW9yZSBiZW5lZmljaWFsIHRvIHRoZSBjb21waWxlciAoc2hvd24gaW4gdGhlIG5leHQgc2Vj
dGlvbikuIAorICAgICAgICBBbmQgdGhlbiwgZ28gZm9yIHRoZSBwb3N0Zml4IGNhbmRpZGF0ZXMu
CisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IworICAgICAgICAjIyBUZXN0IGZvciBQcmUvUG9zdC1JbmNyZW1lbnQgQWRkcmVzcyBNb2RlICMj
CisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
KworICAgICAgICBHaXZlbiBMb29wIHdpdGggUHJlLUluY3JlbWVudDoKKyAgICAgICAgaW50NjRf
dCBsZHJfcHJlKGludDY0X3QgKnApIHsKKyAgICAgICAgICAgIGludDY0X3QgcmVzID0gMDsKKyAg
ICAgICAgICAgIHdoaWxlIChyZXMgPCAxMCkKKyAgICAgICAgICAgICAgICByZXMgKz0gKisrcDsK
KyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KKworICAgICAgICBCMyBJUjoKKyAg
ICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgICAgIEJCIzA6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgICAgIElu
dDY0IGJAMCA9IENvbnN0NjQoMCkKKyAgICAgICAgICAgIEludDY0IGJAMiA9IEFyZ3VtZW50UmVn
KCV4MCkKKyAgICAgICAgICAgIFZvaWQgYkAyMCA9IFVwc2lsb24oJDAoYkAwKSwgXjE4LCBXcml0
ZXNMb2NhbFN0YXRlKQorICAgICAgICAgICAgVm9pZCBiQDIxID0gVXBzaWxvbihiQDIsIF4xOSwg
V3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAgICAgICAgIFZvaWQgYkA0ID0gSnVtcChUZXJtaW5hbCkK
KyAgICAgICAgU3VjY2Vzc29yczogIzEKKyAgICAgICAgQkIjMTogOyBmcmVxdWVuY3kgPSAxLjAw
MDAwMAorICAgICAgICBQcmVkZWNlc3NvcnM6ICMwLCAjMgorICAgICAgICAgICAgSW50NjQgYkAx
OCA9IFBoaShSZWFkc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBJbnQ2NCBiQDE5ID0gUGhpKFJl
YWRzTG9jYWxTdGF0ZSkKKyAgICAgICAgICAgIEludDY0IGJANyA9IENvbnN0NjQoMTApCisgICAg
ICAgICAgICBJbnQzMiBiQDggPSBBYm92ZUVxdWFsKGJAMTgsICQxMChiQDcpKQorICAgICAgICAg
ICAgVm9pZCBiQDkgPSBCcmFuY2goYkA4LCBUZXJtaW5hbCkKKyAgICAgICAgU3VjY2Vzc29yczog
VGhlbjojMywgRWxzZTojMgorICAgICAgICBCQiMyOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisg
ICAgICAgIFByZWRlY2Vzc29yczogIzEKKyAgICAgICAgICAgIEludDY0IGJAMTAgPSBDb25zdDY0
KDgpCisgICAgICAgICAgICBJbnQ2NCBiQDExID0gQWRkKGJAMTksICQ4KGJAMTApKQorICAgICAg
ICAgICAgSW50NjQgYkAxMyA9IExvYWQoYkAxMSwgQ29udHJvbERlcGVuZGVudHxSZWFkczpUb3Ap
CisgICAgICAgICAgICBJbnQ2NCBiQDE0ID0gQWRkKGJAMTgsIGJAMTMpCisgICAgICAgICAgICBW
b2lkIGJAMjIgPSBVcHNpbG9uKGJAMTQsIF4xOCwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAgICAg
ICAgIFZvaWQgYkAyMyA9IFVwc2lsb24oYkAxMSwgXjE5LCBXcml0ZXNMb2NhbFN0YXRlKQorICAg
ICAgICAgICAgVm9pZCBiQDE2ID0gSnVtcChUZXJtaW5hbCkKKyAgICAgICAgU3VjY2Vzc29yczog
IzEKKyAgICAgICAgQkIjMzogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNl
c3NvcnM6ICMxCisgICAgICAgICAgICBWb2lkIGJAMTcgPSBSZXR1cm4oYkAxOCwgVGVybWluYWwp
CisgICAgICAgIFZhcmlhYmxlczoKKyAgICAgICAgICAgIEludDY0IHZhcjAKKyAgICAgICAgICAg
IEludDY0IHZhcjEKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVy9PIFByZS1JbmNyZW1lbnQgQWRkcmVzcyBN
b2RlOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAgICAgLi4uCisgICAgICAgIEJCIzI6IDsgZnJlcXVlbmN5ID0gMS4w
MDAwMDAKKyAgICAgICAgUHJlZGVjZXNzb3JzOiAjMQorICAgICAgICAgICAgTW92ZSAkOCwgJXgz
LCAkOChiQDEyKQorICAgICAgICAgICAgQWRkNjQgJDgsICV4MCwgJXgxLCBiQDExCisgICAgICAg
ICAgICBNb3ZlICgleDAsJXgzKSwgJXgwLCBiQDEzCisgICAgICAgICAgICBBZGQ2NCAleDAsICV4
MiwgJXgyLCBiQDE0CisgICAgICAgICAgICBNb3ZlICV4MSwgJXgwLCBiQDIzCisgICAgICAgICAg
ICBKdW1wIGJAMTYKKyAgICAgICAgU3VjY2Vzc29yczogIzEKKyAgICAgICAgLi4uCisgICAgICAg
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisgICAgICAgIFcvIFByZS1JbmNyZW1lbnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg
Li4uCisgICAgICAgIEJCIzI6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVj
ZXNzb3JzOiAjMQorICAgICAgICAgICAgTW92ZVdpdGhJbmNyZW1lbnQ2NCAoJXgwLFByZSgkOCkp
LCAleDIsIGJAMTMKKyAgICAgICAgICAgIEFkZDY0ICV4MiwgJXgxLCAleDEsIGJAMTQKKyAgICAg
ICAgICAgIEp1bXAgYkAxNgorICAgICAgICBTdWNjZXNzb3JzOiAjMQorICAgICAgICAuLi4KKyAg
ICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgICAgICAgR2l2ZW4gTG9vcCB3aXRoIFBvc3QtSW5jcmVtZW50OgorICAgICAgICBp
bnQ2NF90IGxkcl9wcmUoaW50NjRfdCAqcCkgeworICAgICAgICAgICAgaW50NjRfdCByZXMgPSAw
OworICAgICAgICAgICAgd2hpbGUgKHJlcyA8IDEwKQorICAgICAgICAgICAgICAgIHJlcyArPSAq
cCsrOworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQorCisgICAgICAgIEIzIElS
OgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAgICAgICAgQkIjMDogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICAg
ICAgSW50NjQgYkAwID0gQ29uc3Q2NCgwKQorICAgICAgICAgICAgSW50NjQgYkAyID0gQXJndW1l
bnRSZWcoJXgwKQorICAgICAgICAgICAgVm9pZCBiQDIwID0gVXBzaWxvbigkMChiQDApLCBeMTgs
IFdyaXRlc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBWb2lkIGJAMjEgPSBVcHNpbG9uKGJAMiwg
XjE5LCBXcml0ZXNMb2NhbFN0YXRlKQorICAgICAgICAgICAgVm9pZCBiQDQgPSBKdW1wKFRlcm1p
bmFsKQorICAgICAgICBTdWNjZXNzb3JzOiAjMQorICAgICAgICBCQiMxOiA7IGZyZXF1ZW5jeSA9
IDEuMDAwMDAwCisgICAgICAgIFByZWRlY2Vzc29yczogIzAsICMyCisgICAgICAgICAgICBJbnQ2
NCBiQDE4ID0gUGhpKFJlYWRzTG9jYWxTdGF0ZSkKKyAgICAgICAgICAgIEludDY0IGJAMTkgPSBQ
aGkoUmVhZHNMb2NhbFN0YXRlKQorICAgICAgICAgICAgSW50NjQgYkA3ID0gQ29uc3Q2NCgxMCkK
KyAgICAgICAgICAgIEludDMyIGJAOCA9IEFib3ZlRXF1YWwoYkAxOCwgJDEwKGJANykpCisgICAg
ICAgICAgICBWb2lkIGJAOSA9IEJyYW5jaChiQDgsIFRlcm1pbmFsKQorICAgICAgICBTdWNjZXNz
b3JzOiBUaGVuOiMzLCBFbHNlOiMyCisgICAgICAgIEJCIzI6IDsgZnJlcXVlbmN5ID0gMS4wMDAw
MDAKKyAgICAgICAgUHJlZGVjZXNzb3JzOiAjMQorICAgICAgICAgICAgSW50NjQgYkAxMCA9IExv
YWQoYkAxOSwgQ29udHJvbERlcGVuZGVudHxSZWFkczpUb3ApCisgICAgICAgICAgICBJbnQ2NCBi
QDExID0gQWRkKGJAMTgsIGJAMTApCisgICAgICAgICAgICBJbnQ2NCBiQDEyID0gQ29uc3Q2NCg4
KQorICAgICAgICAgICAgSW50NjQgYkAxMyA9IEFkZChiQDE5LCAkOChiQDEyKSkKKyAgICAgICAg
ICAgIFZvaWQgYkAyMiA9IFVwc2lsb24oYkAxMSwgXjE4LCBXcml0ZXNMb2NhbFN0YXRlKQorICAg
ICAgICAgICAgVm9pZCBiQDIzID0gVXBzaWxvbihiQDEzLCBeMTksIFdyaXRlc0xvY2FsU3RhdGUp
CisgICAgICAgICAgICBWb2lkIGJAMTYgPSBKdW1wKFRlcm1pbmFsKQorICAgICAgICBTdWNjZXNz
b3JzOiAjMQorICAgICAgICBCQiMzOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgIFBy
ZWRlY2Vzc29yczogIzEKKyAgICAgICAgICAgIFZvaWQgYkAxNyA9IFJldHVybihiQDE4LCBUZXJt
aW5hbCkKKyAgICAgICAgVmFyaWFibGVzOgorICAgICAgICAgICAgSW50NjQgdmFyMAorICAgICAg
ICAgICAgSW50NjQgdmFyMQorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBXL08gUG9zdC1JbmNyZW1lbnQgQWRk
cmVzcyBNb2RlOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLi4uCisgICAgICAgIEJCIzI6IDsgZnJlcXVlbmN5
ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNzb3JzOiAjMQorICAgICAgICAgICAgTW92ZSAo
JXgwKSwgJXgyLCBiQDEwCisgICAgICAgICAgICBBZGQ2NCAleDIsICV4MSwgJXgxLCBiQDExCisg
ICAgICAgICAgICBBZGQ2NCAkOCwgJXgwLCAleDAsIGJAMTMKKyAgICAgICAgICAgIEp1bXAgYkAx
NgorICAgICAgICBTdWNjZXNzb3JzOiAjMQorICAgICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAg
Vy8gUG9zdC1JbmNyZW1lbnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLi4uCisgICAg
ICAgIEJCIzI6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNzb3JzOiAj
MQorICAgICAgICAgICAgTW92ZVdpdGhJbmNyZW1lbnQ2NCAoJXgwLFBvc3QoJDgpKSwgJXgyLCBi
QDEwCisgICAgICAgICAgICBBZGQ2NCAleDIsICV4MSwgJXgxLCBiQDExCisgICAgICAgICAgICBK
dW1wIGJAMTYKKyAgICAgICAgU3VjY2Vzc29yczogIzEKKyAgICAgICAgLi4uCisgICAgICAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisg
ICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpT
Qzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzOjpQcmVJbmRleEFkZHJl
c3MpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRy
ZXNzOjpQb3N0SW5kZXhBZGRyZXNzKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk02NDo6c3RvcmUzMik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoK
KyAgICAgICAgKEpTQzo6dGVzdFN0b3JlUHJlUG9zdEluZGV4MzIpOgorICAgICAgICAoSlNDOjp0
ZXN0U3RvcmVQcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJlUG9zdElu
ZGV4MzIpOgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJbmRleDY0KToKKyAgICAgICAg
KiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
OgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmpzSGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6ZHVtcCBjb25z
dCk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJB
cmcuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwcmVJbmRleCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6cG9zdEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojppc1ByZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1Bvc3RJ
bmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNNZW1vcnkgY29uc3Qp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmJhc2UgY29uc3QpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFy
Zzo6aXNHUCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCBjb25zdCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZFBvc3RJbmRleEZvcm0pOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRGb3JtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpmb3JFYWNoVG1wRmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6
Zm9yRWFjaFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNQcmVJbmRleEFkZHJl
c3MgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUG9zdEluZGV4QWRkcmVz
cyBjb25zdCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6SW5zdDo6cmVwbGFjZUluZGVudGl0eSk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29k
ZS5vcGNvZGVzOgorICAgICAgICAqIGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAg
ICAqIGIzL3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRl
c3RMb2FkUHJlSW5kZXgzMik6CisgICAgICAgICh0ZXN0TG9hZFByZUluZGV4NjQpOgorICAgICAg
ICAodGVzdExvYWRQb3N0SW5kZXgzMik6CisgICAgICAgICh0ZXN0TG9hZFBvc3RJbmRleDY0KToK
KyAgICAgICAgKGFkZFNoclRlc3RzKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3
LTI2ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFRl
bXBvcmFsIHRvIGZlYXR1cmVzLmpzb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKaW5kZXggM2QxOTQ5YTQwNzg1
ZDk5Y2E2MTU5NWFhYjA0YmU2ZjFkMGQ5NmJhMy4uMjM1NGM0NTM2OGM3YzBkNWNlOTAxOGFjZmYy
ODRjNGEwYTA0MzFhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAgLTI0NSw2ICsyNDUsMzQgQEAgcHVi
bGljOgogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8vIFByZUluZGV4QWRkcmVzczoKKyAgICAv
LworICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwcmUt
aW5jcmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3QgUHJlSW5kZXhBZGRyZXNzIHsK
KyAgICAgICAgUHJlSW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAg
ICAgICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBp
bmRleDsKKyAgICB9OworCisgICAgLy8gUG9zdEluZGV4QWRkcmVzczoKKyAgICAvLworICAgIC8v
IERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwb3N0LWluY3JlbWVu
dC9kZWNyZW1lbnQgaW5kZXguCisgICAgc3RydWN0IFBvc3RJbmRleEFkZHJlc3MgeworICAgICAg
ICBQb3N0SW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAgICAg
ICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRleDsK
KyAgICB9OworCiAgICAgLy8gQWJzb2x1dGVBZGRyZXNzOgogICAgIC8vCiAgICAgLy8gRGVzY3Jp
YmVzIGFuIG1lbW9yeSBvcGVyYW5kIGdpdmVuIGJ5IGEgcG9pbnRlci4gIEZvciByZWd1bGFyIGxv
YWQgJiBzdG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2
OGQ2OTA5MGZkLi4yYTkxMmQwZGQyNjYyNmJkNzRlMTAzYmVmOTY1ZjJiYWRmY2UwYmQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaApAQCAtMTQ0NSw5ICsxNDQ1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDw2ND4o
YWRkcmVzcywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkNjQoUmVnaXN0ZXJJRCBzcmMs
IFBvc3RJbmRleCBzaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQoUHJlSW5k
ZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJs
ZXIubGRyPDY0PihkZXN0LCBzcmMsIHNpbW0pOworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+
KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lk
IGxvYWQ2NChQb3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5p
bmRleCkpOwogICAgIH0KIAogICAgIERhdGFMYWJlbDMyIGxvYWQ2NFdpdGhBZGRyZXNzT2Zmc2V0
UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCkBAIC0xNTQ0LDYgKzE1NDks
MTYgQEAgcHVibGljOgogICAgICAgICBsb2FkPDMyPihhZGRyZXNzLCBkZXN0KTsKICAgICB9CiAK
KyAgICB2b2lkIGxvYWQzMihQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRl
eChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihQb3N0SW5kZXhBZGRyZXNz
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMy
PihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKwogICAgIERh
dGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBS
ZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsK
QEAgLTE3MzMsNyArMTc0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2
ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgs
IGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgIG1fYXNz
ZW1ibGVyLnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rlcik7CiAg
ICAgfQotICAgIAorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBQcmVJbmRleEFk
ZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0
LmJhc2UsIFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlNjQo
UmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2UsIFBvc3RJbmRleChkZXN0LmluZGV4KSk7
CisgICAgfQorCiAgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBjb25zdCB2b2lkKiBh
ZGRyZXNzKQogICAgIHsKICAgICAgICAgc3RvcmU8NjQ+KHNyYywgYWRkcmVzcyk7CkBAIC0xNzc3
LDExICsxODAyLDYgQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KGRhdGFUZW1wUmVnaXN0ZXIs
IGFkZHJlc3MpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0LCBQb3N0SW5kZXggc2ltbSkKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVy
LnN0cjw2ND4oc3JjLCBkZXN0LCBzaW1tKTsKLSAgICB9Ci0gICAgCiAgICAgRGF0YUxhYmVsMzIg
c3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRk
cmVzcykKICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTg3OSw2
ICsxODk5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzKTsKICAgICB9CiAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFByZUlu
ZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMs
IGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKworICAgIHZvaWQgc3Rv
cmUzMihSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUG9zdEluZGV4KGRlc3QuaW5k
ZXgpKTsKKyAgICB9CisKICAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQ
YXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgRGF0
YUxhYmVsMzIgbGFiZWwodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL3Rlc3RtYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
dGVzdG1hc20uY3BwCmluZGV4IGYyMmJmZmNlMTU1NGIwMmMyMjZjMjE0OTJhYjA2N2JhYjM4YzQw
YjUuLjUzNGVmZTE0M2Y3OTBiOTA5ODliYzJjYzYzZmYwOWEwNDY3ZTU1N2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCkBAIC0yMjEyLDYgKzIyMTIs
MTc2IEBAIHZvaWQgdGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCiAgICAgICAg
IH0KICAgICB9CiB9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKQoreworICAgIGlu
dDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50cHRyX3QgYWRkciA9IGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMyX3QgaW5kZXggPSBzaXplb2YoaW50
MzJfdCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQzMl90IHNyYykgeworICAgICAgICBh
dXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAqKytwMSA9IDQ7
IHJldHVybiBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3VtZW50R1BS
MCwgQ0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBp
bmRleCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50
MzJfdCogcDEgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QxKDQpKTsKKyAgICBDSEVDS19F
USgqcDEsIDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1zWzFdKTsKKworICAgIGF1dG8gdGVz
dDIgPSBbJl0gKGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3Vl
KGppdCk7CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsgcmV0dXJuIHAyOworICAgICAgICAg
ICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlBvc3RJ
bmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAg
aml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBq
aXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90Pihz
dG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCogcDIgPSBiaXR3aXNlX2Nh
c3Q8aW50MzJfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19FUSgqcDIsIDQpOworICAgIENIRUNL
X0VRKCotLXAyLCA1KTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVQb3N0SW5kZXg2NCgpCit7Cisg
ICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnRwdHJfdCBhZGRyID0gYml0
d2lzZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVv
ZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3Qgc3JjKSB7CisgICAg
ICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICorK3Ax
ID0gNDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAg
ICBpbnQ2NF90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDEoNCkpOworICAgIENI
RUNLX0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEsIG51bXNbMV0pOworCisgICAgYXV0
byB0ZXN0MiA9IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBp
bGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysgPSA1OyByZXR1cm4gcDI7CisgICAg
ICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6
UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAg
ICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAg
ICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRy
X3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2NF90KiBwMiA9IGJpdHdp
c2VfY2FzdDxpbnQ2NF90Kj4odGVzdDIoNSkpOworICAgIENIRUNLX0VRKCpwMiwgNCk7CisgICAg
Q0hFQ0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4MzIoKQor
eworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9
IHNpemVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDMyX3QgcmVwbGFj
ZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAg
IC8vIHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0Lmxv
YWQzMihDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAs
IGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxp
Y2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3Zl
KEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgp
OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90Pihsb2FkLCAmbnVt
c1sxXSk7CisgICAgfTsKKyAgICAKKyAgICBDSEVDS19FUSh0ZXN0MSg0KSwgMyk7CisgICAgQ0hF
Q0tfRVEobnVtc1syXSwgNCk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQzMl90IHJlcGxh
Y2UpIHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0
KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAg
ICAvLyByZXMgPSAqcDIrKzsgKnAyID0gNTsgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIGppdC5s
b2FkMzIoQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgaml0LnN0b3Jl
MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVwbGFjZSksIENDYWxsSGVscGVyczo6SW1w
bGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAg
ICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0
KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KGxvYWQsICZu
dW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVzdDIoNSksIDIpOworICAgIENIRUNL
X0VRKG51bXNbMl0sIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKQorewor
ICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNp
emVvZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkg
eworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8v
IHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2
NChDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGlu
ZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0
QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAg
ICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sx
XSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShu
dW1zWzJdLCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkgewor
ICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJl
cyA9ICpwMisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2NChD
Q2FsbEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRl
eCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW02NChyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFk
ZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4obG9hZCwgJm51bXNbMV0p
OworICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVt
c1syXSwgNSk7Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQ
VShBUk02NCkKQEAgLTQ0NzUsNiArNDY0NSwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0
ZXIpIFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdFhvck5v
dFdpdGhMZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0NjQo
KSk7CiAgICAgUlVOKHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CisKKyAg
ICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9yZVByZVBv
c3RJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDMyKCkpOworICAgIFJV
Tih0ZXN0TG9hZFByZVBvc3RJbmRleDY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUoQVJNNjRFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBkNWZjMzE2NDY1
OTY4ZWI3MzcxYjZmZjFjYzZmODMxN2ZlY2RlNTJlLi45NWU2ODg4OWYxNjY3YmEwMmM5NGI4MDQx
OTI1NzE5NmEzNmUwOWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcApAQCAtMjA3LDcgKzIwNyw4IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgZmluaXNoQXBw
ZW5kaW5nSW5zdHJ1Y3Rpb25zKG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KLSAg
ICAgICAgCisKKyAgICAgICAgZGV0ZWN0UHJlUG9zdEluZGV4QWRkcmVzcygpOwogICAgICAgICBt
X2Jsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKIAogICAgICAgICBBaXI6Okluc2VydGlvblNl
dCBpbnNlcnRpb25TZXQobV9jb2RlKTsKQEAgLTIxNyw2ICsyMTgsMTcwIEBAIHB1YmxpYzoKICAg
ICB9CiAKIHByaXZhdGU6CisgICAgdm9pZCBkZXRlY3RQcmVQb3N0SW5kZXhBZGRyZXNzKCkKKyAg
ICB7CisgICAgICAgIGlmIChtX3Byb2NlZHVyZS5vcHRMZXZlbCgpIDwgMiB8fCAhaXNBUk02NCgp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB1c2luZyBuYW1lc3BhY2UgQWlyOworCisg
ICAgICAgIHVpbnQzMl90IGxvYyA9IDA7CisgICAgICAgIEhhc2hNYXA8VmFsdWUqLCBJbnN0Kj4g
dmFsdWVUb0luc3Q7CisgICAgICAgIEhhc2hNYXA8VmFsdWUqLCB1aW50MzJfdD4gdmFsdWVUb0xv
YzsKKworICAgICAgICBIYXNoTWFwPFRtcCwgVmVjdG9yPHVpbnQzMl90Pj4gdG1wVG9Mb2NzOwor
CisgICAgICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHByZUluZGV4Q2FuZGlkYXRl
czsKKyAgICAgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4Q2FuZGlk
YXRlczsKKyAgICAgICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNl
VG9NZW1vcmllczsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiBpZ25vcmVkVmFsdWVzOworCisg
ICAgICAgIGF1dG8gdHJ5UHJlUG9zdEluZGV4ID0gWyZdIChWYWx1ZSogdmFsdWUsIEluc3QmIGlu
c3QsIHVpbnQzMl90IGxvYykgeworICAgICAgICAgICAgYXV0byB1cGRhdGVWYWxpZFZhbHVlID0g
WyZdICgpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVRvSW5zdC5hZGQodmFsdWUsICZpbnN0KTsK
KyAgICAgICAgICAgICAgICB2YWx1ZVRvTG9jLmFkZCh2YWx1ZSwgbG9jKTsKKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIExvYWQ6IHsKKyAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFs
dWUtPmFzPE1lbW9yeVZhbHVlPigpOworCisgICAgICAgICAgICAgICAgLy8gUHJlLUluZGV4IFBh
dHRlcm46CisgICAgICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBhZGQoYmFzZSwgb2Zmc2V0
KSAgCisgICAgICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IGxvYWQoYWRkcmVzcywgMCkKKyAg
ICAgICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAgICAgLy8g
ICAgIG1lbW9yeSA9IGxvYWQoYmFzZSwgMCkKKyAgICAgICAgICAgICAgICAvLyAgICAgYWRkcmVz
cyA9IGFkZChiYXNlLCBvZmZzZXQpIAorICAgICAgICAgICAgICAgIGF1dG8gdHJ5UHJlUG9zdElu
ZGV4TWVtb3J5ID0gWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bj
b2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShNb3ZlV2l0aEluY3JlbWVudDMyLCBNb3ZlV2l0aEluY3Jl
bWVudDY0LCBtZW1vcnktPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxp
ZEZvcm0ob3Bjb2RlLCBBcmc6OlByZUluZGV4LCBBcmc6OlRtcCkgfHwgbWVtb3J5LT5vZmZzZXQo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gc28gZmFyIHRoaXMgTG9hZCB2YWx1ZSBpcyBhIHZhbGlkIGNvbmRpZGF0ZSBmb3IgYm90aCBw
cmVmaXggYW5kIHBvc3RmaXggcGF0dGVybgorICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWxp
ZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGJhc2VUb01lbW9yaWVzLmFkZChtZW1vcnkt
PmNoaWxkKDApLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5k
KG1lbW9yeSk7CisKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBtZW1vcnkt
Pmxhc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcy0+b3Bjb2RlKCkg
IT0gQWRkIHx8ICF2YWx1ZVRvSW5zdC5jb250YWlucyhhZGRyZXNzKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcHJlSW5kZXhDYW5kaWRhdGVz
LmFkZChtZW1vcnksIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
ICAgICB0cnlQcmVQb3N0SW5kZXhNZW1vcnkoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBBZGQ6IHsKKyAgICAgICAgICAgICAgICBW
YWx1ZSogbGVmdCA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogcmln
aHQgPSB2YWx1ZS0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIHRyeVBvdGVudGlh
bFBvc3RJbmRleEFkZHJlc3MgPSBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXJp
Z2h0LT5oYXNJbnRQdHIoKSB8fCB2YWx1ZS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQg
PSByaWdodC0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5
cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0KTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjpp
c1ZhbGlkUG9zdEluZGV4Rm9ybShzbWFsbE9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIC8vIHNvIGZhciB0aGlzIEFkZCB2YWx1ZSBp
cyBhIHZhbGlkIGNvbmRpZGF0ZSBmb3IgYm90aCBwcmVmaXggYW5kIHBvc3RmaXggcGF0dGVybgor
ICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWxpZFZhbHVlKCk7IAorCisgICAgICAgICAgICAg
ICAgICAgIGlmICghYmFzZVRvTWVtb3JpZXMuY29udGFpbnMobGVmdCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUq
IG1lbW9yeSA6IGJhc2VUb01lbW9yaWVzLmdldChsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBvc3RJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOworICAgICAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgICAgICB0cnlQb3RlbnRpYWxQb3N0SW5kZXhBZGRyZXNzKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgYXV0byB1cGRhdGVBbmFseXNpc0RhdGEgPSBbJl0gKEluc3QmIGluc3QpIHsK
KyAgICAgICAgICAgICsrbG9jOworICAgICAgICAgICAgdHJ5UHJlUG9zdEluZGV4KGluc3Qub3Jp
Z2luLCBpbnN0LCBsb2MpOworICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKFsmXSAoQXJnJiBh
cmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzQW55VXNlKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1w
RmFzdChbJl0gKFRtcCYgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXBUb0xvY3Mu
YWRkKHRtcCwgVmVjdG9yPHVpbnQzMl90PigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGxvYyk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0pOworICAgICAgICB9OworCisgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGIzYmxvY2sg
OiBtX3Byb2NlZHVyZS5ibG9ja3NJblByZU9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoSW5z
dCYgaW5zdCA6IG1fYmxvY2tUb0Jsb2NrW2IzYmxvY2tdLT5pbnN0cygpKQorICAgICAgICAgICAg
ICAgIHVwZGF0ZUFuYWx5c2lzRGF0YShpbnN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8g
bGFzdFVzZUxvY2F0aW9uID0gWyZdIChUbXAmIHRtcCkgLT4gdWludDMyX3QgeworICAgICAgICAg
ICAgcmV0dXJuIHRtcFRvTG9jcy5jb250YWlucyh0bXApID8gdG1wVG9Mb2NzLmdldCh0bXApLmxh
c3QoKSA6IDA7CisgICAgICAgIH07CisKKyAgICAgICAgZm9yIChhdXRvIGl0ciA9IHByZUluZGV4
Q2FuZGlkYXRlcy5iZWdpbigpOyBpdHIgIT0gcHJlSW5kZXhDYW5kaWRhdGVzLmVuZCgpOyArK2l0
cikgeworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGl0ci0+a2V5OworICAgICAg
ICAgICAgVmFsdWUqIGFkZHJlc3MgPSBpdHItPnZhbHVlOworICAgICAgICAgICAgVmFsdWUqIGJh
c2UgPSBhZGRyZXNzLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNv
bnRhaW5zKG1lbW9yeSkgfHwgaWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgVG1wJiBtZW1vcnlUbXAgPSBtX3Zh
bHVlVG9UbXBbbWVtb3J5XTsKKyAgICAgICAgICAgIFRtcCYgYWRkcmVzc1RtcCA9IG1fdmFsdWVU
b1RtcFthZGRyZXNzXTsKKyAgICAgICAgICAgIFRtcCYgYmFzZVRtcCA9IG1fdmFsdWVUb1RtcFti
YXNlXTsKKyAgICAgICAgICAgIGlmICghbWVtb3J5VG1wIHx8ICFhZGRyZXNzVG1wIHx8ICFiYXNl
VG1wKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdWludDMyX3QgbWVt
b3J5TG9jID0gdmFsdWVUb0xvYy5nZXQobWVtb3J5KTsKKyAgICAgICAgICAgIGlmIChsYXN0VXNl
TG9jYXRpb24oYmFzZVRtcCkgPiBtZW1vcnlMb2MgfHwgbGFzdFVzZUxvY2F0aW9uKGFkZHJlc3NU
bXApIDw9IG1lbW9yeUxvYykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgSW5zdCogbWVtb3J5SW5zdCA9IHZhbHVlVG9JbnN0LmdldChtZW1vcnkpOworICAgICAgICAg
ICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShNb3ZlV2l0aEluY3JlbWVu
dDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1vcnktPnR5cGUoKSk7CisgICAgICAgICAgICBW
YWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRU
eXBlPihhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQdHIoKSk7CisgICAgICAgICAgICBtZW1vcnlJ
bnN0LT5yZXBsYWNlSW5kZW50aXR5KG9wY29kZSwgQXJnOjpwcmVJbmRleChiYXNlVG1wLCBzbWFs
bE9mZnNldCksIG1lbW9yeVRtcCk7CisgICAgICAgICAgICBJbnN0KiBhZGRyZXNzSW5zdCA9IHZh
bHVlVG9JbnN0LmdldChhZGRyZXNzKTsKKyAgICAgICAgICAgIGFkZHJlc3NJbnN0LT5yZXBsYWNl
SW5kZW50aXR5KHJlbGF4ZWRNb3ZlRm9yVHlwZShhZGRyZXNzLT50eXBlKCkpLCBiYXNlVG1wLCBh
ZGRyZXNzVG1wKTsKKworICAgICAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQoYWRkcmVzcyk7Cisg
ICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChtZW1vcnkpOworICAgICAgICB9CisKKyAgICAg
ICAgYXV0byBiZWZvcmVMYXN0VXNlTG9jYXRpb24gPSBbJl0gKFRtcCYgdG1wKSAtPiB1aW50MzJf
dCB7CisgICAgICAgICAgICBpZiAodG1wVG9Mb2NzLmNvbnRhaW5zKHRtcCkpIHsKKyAgICAgICAg
ICAgICAgICBWZWN0b3I8dWludDMyX3Q+IGxvY3MgPSB0bXBUb0xvY3MuZ2V0KHRtcCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGxvY3Muc2l6ZSgpID4gMSA/IGxvY3MuYXQobG9jcy5zaXplKCkg
LSAyKSA6IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fTsKKworICAgICAgICBmb3IgKGF1dG8gaXRyID0gcG9zdEluZGV4Q2FuZGlkYXRlcy5iZWdpbigp
OyBpdHIgIT0gcG9zdEluZGV4Q2FuZGlkYXRlcy5lbmQoKTsgKytpdHIpIHsKKyAgICAgICAgICAg
IE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBpdHItPmtleTsKKyAgICAgICAgICAgIFZhbHVlKiBhZGRy
ZXNzID0gaXRyLT52YWx1ZTsKKyAgICAgICAgICAgIFZhbHVlKiBiYXNlID0gYWRkcmVzcy0+Y2hp
bGQoMCk7CisgICAgICAgICAgICBpZiAoaWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8
IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIFRtcCYgbWVtb3J5VG1wID0gbV92YWx1ZVRvVG1wW21lbW9yeV07
CisgICAgICAgICAgICBUbXAmIGFkZHJlc3NUbXAgPSBtX3ZhbHVlVG9UbXBbYWRkcmVzc107Cisg
ICAgICAgICAgICBUbXAmIGJhc2VUbXAgPSBtX3ZhbHVlVG9UbXBbYmFzZV07CisgICAgICAgICAg
ICBpZiAoIW1lbW9yeVRtcCB8fCAhYWRkcmVzc1RtcCB8fCAhYmFzZVRtcCkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChiZWZvcmVMYXN0VXNlTG9jYXRpb24oYmFz
ZVRtcCkgPiB2YWx1ZVRvTG9jLmdldChtZW1vcnkpIHx8IGxhc3RVc2VMb2NhdGlvbihhZGRyZXNz
VG1wKSA8PSB2YWx1ZVRvTG9jLmdldChhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgSW5zdCogbWVtb3J5SW5zdCA9IHZhbHVlVG9JbnN0LmdldChtZW1v
cnkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShN
b3ZlV2l0aEluY3JlbWVudDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1vcnktPnR5cGUoKSk7
CisgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0
PFZhbHVlOjpPZmZzZXRUeXBlPihhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQdHIoKSk7CisgICAg
ICAgICAgICBtZW1vcnlJbnN0LT5yZXBsYWNlSW5kZW50aXR5KG9wY29kZSwgQXJnOjpwb3N0SW5k
ZXgoYmFzZVRtcCwgc21hbGxPZmZzZXQpLCBtZW1vcnlUbXApOworCisgICAgICAgICAgICBJbnN0
KiBhZGRyZXNzSW5zdCA9IHZhbHVlVG9JbnN0LmdldChhZGRyZXNzKTsKKyAgICAgICAgICAgIGFk
ZHJlc3NJbnN0LT5yZXBsYWNlSW5kZW50aXR5KHJlbGF4ZWRNb3ZlRm9yVHlwZShhZGRyZXNzLT50
eXBlKCkpLCBiYXNlVG1wLCBhZGRyZXNzVG1wKTsKKworICAgICAgICAgICAgaWdub3JlZFZhbHVl
cy5hZGQoYWRkcmVzcyk7CisgICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChtZW1vcnkpOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgYm9vbCBzaG91bGRDb3B5UHJvcGFnYXRlKFZhbHVlKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CkBAIC01NDYs
NyArNzExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAg
ICAgICAgIHJldHVybiBzY2FsZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBUaGlzIHR1cm5zIHRo
ZSBnaXZlbiBvcGVyYW5kIGludG8gYW4gYWRkcmVzcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
bnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KICAgICBBcmcgZWZmZWN0
aXZlQWRkcihWYWx1ZSogYWRkcmVzcywgSW50IG9mZnNldCwgV2lkdGggd2lkdGgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKaW5kZXggMjI4MGZkNzcx
MjUyZTcyNjBmNjg1MDUwOTJmZDU0M2NmZTA2MTg1Ny4uZjRhZmY2NzRkNDQ4YjhmODgwN2JhNDQw
ZTc1NTExNTM4ZmNjMTIwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVj
ZVN0cmVuZ3RoLmNwcApAQCAtMTkyOSw2ICsxOTI5LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBWYWx1ZSogYWRkcmVzcyA9IG1fdmFsdWUtPmxhc3RDaGlsZCgpOwogICAgICAgICAgICAgTWVt
b3J5VmFsdWUqIG1lbW9yeSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOwogCisgICAgICAg
ICAgICAvLyBQb3RlbnRpYWwgUHJlLUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAvLyAgICAg
TG9hZChBZGQoYWRkcmVzcywgb2Zmc2V0MSksIG9mZnNldCA9IDApCisgICAgICAgICAgICBhdXRv
IGlzUG90ZW50aWFsUHJlSW5kZXggPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAg
aWYgKGFkZHJlc3MtPm9wY29kZSgpICE9IEFkZCB8fCAhYWRkcmVzcy0+Y2hpbGQoMSktPmhhc0lu
dFB0cigpIHx8IG1lbW9yeS0+b2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5vcGNvZGUoKSAhPSBMb2FkKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKG1lbW9y
eS0+dHlwZSgpICE9IEludDMyICYmIG1lbW9yeS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAoaXNQb3RlbnRpYWxQcmVJbmRleCgpKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IExvYWQo
QWRkKGFkZHJlc3MsIG9mZnNldDEpLCBvZmZzZXQgPSBvZmZzZXQyKQogICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBMb2FkKGFkZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQogICAg
ICAgICAgICAgLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAppbmRleCAx
MDNjNmVjY2EzZDMxNGJiNGVkOGMwMmE0ZDJmMDA5Y2E2NDFkMDAxLi43N2VlODQyNTEyNGI5ZDhi
OGM1ODJmMzlmZjk2OWY2MGZkMTZjYzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBcmcuY3BwCkBAIC0xMzAsNiArMTMwLDExIEBAIHVuc2lnbmVkIEFyZzo6anNIYXNoKCkgY29u
c3QKICAgICAgICAgcmVzdWx0ICs9IG1fYmFzZS5pbnRlcm5hbFZhbHVlKCk7CiAgICAgICAgIHJl
c3VsdCArPSBtX2luZGV4LmludGVybmFsVmFsdWUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQcmVJbmRleDoKKyAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgcmVzdWx0ICs9IG1fb2Zm
c2V0OworICAgICAgICByZXN1bHQgKz0gbV9iYXNlLmludGVybmFsVmFsdWUoKTsKKyAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBTdGFjazoKICAgICAgICAgcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX3NjYWxlKTsKICAgICAgICAgcmVzdWx0ICs9IHN0YWNrU2xvdCgpLT5pbmRleCgp
OwpAQCAtMTYxLDcgKzE2Niw3IEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiAgICAgICAgIG91dC5wcmludGYoIiQweCVsbHgiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmcg
dW5zaWduZWQ+KG1fb2Zmc2V0KSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFplcm9SZWc6
Ci0gICAgICAgIG91dC5wcmludCgiJSV4enIiKTsKKyAgICAgICAgb3V0LnByaW50KCIleHpyIik7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIG91dC5wcmlu
dCgiKCIsIGJhc2UoKSwgIikiKTsKQEAgLTE4MCw2ICsxODUsMTIgQEAgdm9pZCBBcmc6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxl
KCkpOwogICAgICAgICBvdXQucHJpbnQoIikiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
UHJlSW5kZXg6CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIixQcmUoJCIsIG9mZnNl
dCgpLCAiKSkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUG9zdEluZGV4OgorICAgICAg
ICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIsUG9zdCgkIiwgb2Zmc2V0KCksICIpKSIpOworICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBTdGFjazoKICAgICAgICAgaWYgKG9mZnNldCgpKQogICAg
ICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKQEAgLTI2MSw2ICsyNzIsMTIgQEAgdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6S2luZCBraW5kKQogICAgIGNhc2Ug
QXJnOjpJbmRleDoKICAgICAgICAgb3V0LnByaW50KCJJbmRleCIpOwogICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBcmc6OlByZUluZGV4OgorICAgICAgICBvdXQucHJpbnQoIlByZUluZGV4Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6UG9zdEluZGV4OgorICAgICAgICBvdXQu
cHJpbnQoIlBvc3RJbmRleCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OlJlbENv
bmQ6CiAgICAgICAgIG91dC5wcmludCgiUmVsQ29uZCIpOwogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAppbmRleCBjZTVhNGU3Mzc5YWQ2NDQ0NWYwYzNh
YmQxMjlmMzI5Yjk0N2ZlODEyLi4xZWJmNTJhMjE3MmEzYjI5M2ZiOWVlMjYyNGVhMDUyYTRhY2U0
OGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKQEAgLTc3LDYgKzc3LDgg
QEAgcHVibGljOgogICAgICAgICBTdGFjaywKICAgICAgICAgQ2FsbEFyZywKICAgICAgICAgSW5k
ZXgsCisgICAgICAgIFByZUluZGV4LAorICAgICAgICBQb3N0SW5kZXgsCiAKICAgICAgICAgLy8g
SW1tZWRpYXRlIG9wZXJhbmRzIHRoYXQgY3VzdG9taXplIHRoZSBiZWhhdmlvciBvZiBhbiBvcGVy
YXRpb24uIFlvdSBjYW4gdGhpbmsgb2YgdGhlbSBhcwogICAgICAgICAvLyBzZWNvbmRhcnkgb3Bj
b2Rlcy4gVGhleSBhcmUgYWx3YXlzICJVc2UiJ2QuCkBAIC02NDksNiArNjUxLDMwIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIEFyZzo6aW5kZXgoYmFzZSwgaW5kZXgsIHNjYWxlLCAwKTsKICAg
ICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVn
YWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgQXJnIHByZUluZGV4KEFpcjo6VG1wIGJhc2UsIElu
dCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFT
U0VSVChpc0ludDkoaW5kZXgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fa2luZCA9IFByZUluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAg
ICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2Fs
T2Zmc2V0PEludD4+CisgICAgc3RhdGljIEFyZyBwb3N0SW5kZXgoQWlyOjpUbXAgYmFzZSwgSW50
IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNT
RVJUKGlzSW50OShpbmRleCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gUG9zdEluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAg
ICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCiAgICAgc3RhdGljIEFyZyByZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIEFyZyByZXN1bHQ7CkBAIC03OTksNiAr
ODI1LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKICAgICB9
CiAKKyAgICBib29sIGlzUHJlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBQcmVJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUG9zdEluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUG9zdEluZGV4OworICAgIH0KKwogICAg
IGJvb2wgaXNNZW1vcnkoKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsK
QEAgLTgwOCw2ICs4NDQsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAg
IGNhc2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRl
eDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk3Miw3ICsxMDEw
LDcgQEAgcHVibGljOgogCiAgICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0CiAgICAgewotICAgICAg
ICBBU1NFUlQoa2luZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwga2luZCgp
ID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEV4
dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXggfHwga2luZCgpID09IFByZUluZGV4
IHx8IGtpbmQoKSA9PSBQb3N0SW5kZXgpOwogICAgICAgICByZXR1cm4gbV9iYXNlOwogICAgIH0K
IApAQCAtOTgyLDcgKzEwMjAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoa2luZCgp
ID09IFN0YWNrKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRU
eXBlPihtX3NjYWxlKTsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9
PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IElu
ZGV4KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRl
ZE9mZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4IHx8IGtp
bmQoKSA9PSBQcmVJbmRleCB8fCBraW5kKCkgPT0gUG9zdEluZGV4KTsKICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCk7CiAgICAgfQogCkBAIC0x
MDQ0LDYgKzEwODIsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2Fz
ZSBFeHRlbmRlZE9mZnNldEFkZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2Ug
UHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICBjYXNlIFN0YWNrOgog
ICAgICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKQEAgLTEwODEsNiAr
MTEyMSw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVu
ZGVkT2Zmc2V0QWRkcjoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRl
eDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAg
IGNhc2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBCaWdJbW06IC8vIFllcywgd2UgYWxsb3cgQmln
SW1tIGFzIGEgZG91YmxlIGltbWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVudGluZyBz
dGFja21hcHMuCkBAIC0xMjM3LDYgKzEyNzksMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZh
bHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFByZUluZGV4
Rm9ybShJbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBpc1ZhbGlkU2lnbmVkSW1tOShvZmZzZXQpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVl
OjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFBvc3RJbmRleEZv
cm0oSW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAg
ICByZXR1cm4gaXNWYWxpZFNpZ25lZEltbTkob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKwogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgd2lkdGggdGhlbiB0aGlzIG9w
dGltaXN0aWNhbGx5IGFzc3VtZXMgdGhhdCB5b3UncmUgdXNpbmcgdGhlIHJpZ2h0IHdpZHRoLiBC
dXQKICAgICAvLyB0aGUgd2lkdGggaXMgcmVsZXZhbnQgdG8gdmFsaWRpdHksIHNvIHBhc3Npbmcg
YSBudWxsIHdpZHRoIGlzIG9ubHkgdXNlZnVsIGZvciBhc3NlcnRpb25zLiBEb24ndAogICAgIC8v
IHBhc3MgbnVsbCB3aWR0aHMgd2hlbiBjYXNjYWRpbmcgdGhyb3VnaCBBcmdzIGluIHRoZSBpbnN0
cnVjdGlvbiBzZWxlY3RvciEKQEAgLTEyNjUsNiArMTMyMywxMCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gaXNWYWxpZEFkZHJGb3JtKG9mZnNldCgpLCB3aWR0aCk7CiAgICAgICAgIGNh
c2UgSW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEluZGV4Rm9ybShzY2FsZSgpLCBv
ZmZzZXQoKSwgd2lkdGgpOworICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICAgICAgcmV0
dXJuIGlzVmFsaWRQcmVJbmRleEZvcm0ob2Zmc2V0KCkpOworICAgICAgICBjYXNlIFBvc3RJbmRl
eDoKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkUG9zdEluZGV4Rm9ybShvZmZzZXQoKSk7CiAg
ICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNl
IERvdWJsZUNvbmQ6CkBAIC0xMjg0LDYgKzEzNDYsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
U2ltcGxlQWRkcjoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zm
c2V0QWRkcjoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6
CiAgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBJbmRleDoKQEAgLTEzMjYsNiArMTM5MCw4IEBAIHB1YmxpYzoKICAgICAgICAgY2Fz
ZSBTaW1wbGVBZGRyOgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRP
ZmZzZXRBZGRyOgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRl
eDoKICAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQLCBhcmdSb2xlID09IFVzZUFk
ZHIgPyBhcmdXaWR0aCA6IHBvaW50ZXJXaWR0aCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEluZGV4OgpAQCAtMTM4Myw2ICsxNDQ5LDE4IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCksIG1fZXh0ZW5kKTsK
ICAgICB9CiAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzIGFzUHJlSW5kZXhB
ZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ByZUluZGV4KCkpOworICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzcyhtX2Jhc2UuZ3ByKCks
IG9mZnNldCgpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVz
cyBhc1Bvc3RJbmRleEFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUG9z
dEluZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJl
c3MobV9iYXNlLmdwcigpLCBvZmZzZXQoKSk7CisgICAgfQorCiAgICAgTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5oCmluZGV4IGU4MjU4MmJiNWVkMDIyMmZmNzQ0M2VlYTI2MjM4MzQxNTk4YTU1ZTgu
LmExNTljOGIzMjgzZWZlMjBiMzJjZmFkZjMxZmRkOGI2ZjFkYjRlMDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCkBAIC05Miw2ICs5MiwxNSBAQCBzdHJ1Y3QgSW5zdCB7
CiAgICAgICAgIGFwcGVuZChhcmd1bWVudHMuLi4pOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIHJlcGxhY2VJbmRlbnRpdHkoS2luZCBraW5k
LCBBcmcgYXJnLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgdGhpcy0+
a2luZCA9IGtpbmQ7CisgICAgICAgIGFyZ3MuY2xlYXIoKTsKKyAgICAgICAgYXJncy5hcHBlbmQo
YXJnKTsKKyAgICAgICAgYXBwZW5kKGFyZ3VtZW50cy4uLik7CisgICAgfQorCiAgICAgLy8gTm90
ZSB0aGF0IHRoZXNlIGZ1bmN0b3JzIGFsbCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ug
d2FudCB0byB1c2UgdGhlbSBmb3IgdGhpbmdzIHRoYXQKICAgICAvLyBlZGl0IElSLiBJUiBpcyBt
ZWFudCB0byBiZSBlZGl0ZWQ7IGlmIHlvdSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29uc3QgSW5z
dCYiIHRoZW4geW91J3JlCiAgICAgLy8gcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRleCA2NjFlYWRk
MjM3M2M1NGE0YmJhOTQ3YTU0YmRhMjU1N2JkYjhhZTRhLi5hNDY2MTM3YjcyYzlkMjkwMmU5ZGJh
ZmVmYjBiODNiMWM2NzZjMjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyT3Bjb2RlLm9wY29kZXMKQEAgLTY2MSw2ICs2NjEsMTIgQEAgeDg2XzY0OiBTd2FwNjQgVUQ6
Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCiAgICAgVG1wLCBBZGRyCiAKK2FybTY0OiBNb3Zl
V2l0aEluY3JlbWVudDY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIFByZUluZGV4LCBUbXAgYXMgbG9h
ZDY0CisgICAgUG9zdEluZGV4LCBUbXAgYXMgbG9hZDY0CisgICAgVG1wLCBQcmVJbmRleCBhcyBz
dG9yZTY0CisgICAgVG1wLCBQb3N0SW5kZXggYXMgc3RvcmU2NAorCiBNb3ZlMzIgVTpHOjMyLCBa
RDpHOjMyCiAgICAgVG1wLCBUbXAgYXMgemVyb0V4dGVuZDMyVG9Xb3JkCiAgICAgQWRkciwgVG1w
IGFzIGxvYWQzMgpAQCAtNjcxLDYgKzY3NywxMiBAQCBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyCiAg
ICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmUzMgogICAgIHg4NjogSW1tLCBJbmRleCBhcyBzdG9y
ZTMyCiAKK2FybTY0OiBNb3ZlV2l0aEluY3JlbWVudDMyIFU6RzozMiwgVVpEOkc6MzIKKyAgICBQ
cmVJbmRleCwgVG1wIGFzIGxvYWQzMgorICAgIFBvc3RJbmRleCwgVG1wIGFzIGxvYWQzMgorICAg
IFRtcCwgUHJlSW5kZXggYXMgc3RvcmUzMgorICAgIFRtcCwgUG9zdEluZGV4IGFzIHN0b3JlMzIK
KwogIyBUaGlzIGlzIGZvciBtb3ZpbmcgYmV0d2VlbiBzcGlsbCBzbG90cy4KIE1vdmUzMiBVOkc6
MzIsIFpEOkc6MzIsIFM6RzozMgogICAgIEFkZHIsIEFkZHIsIFRtcApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCmluZGV4IDM3NDBlZmRiZGQx
NDZhMzdmNmVkZTlkZGJjMjNkZGJhMDNiMDc2NDYuLmYxYmYxYTQ2Y2ZjODg5ZWMxOTM0NmYyYzA2
YjdjZjUwZjllM2RlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
b3Bjb2RlX2dlbmVyYXRvci5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmIKQEAgLTIyOSw3ICsyMjksNyBAQCBkZWYgaXNHRih0b2tlbikKIGVu
ZAogCiBkZWYgaXNLaW5kKHRva2VuKQotICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmln
SW1tKXwoQml0SW1tKXwoQml0SW1tNjQpfChaZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFkZHIpfChF
eHRlbmRlZE9mZnNldEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29u
ZCl8KFN0YXR1c0NvbmQpKVxaLworICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1t
KXwoQml0SW1tKXwoQml0SW1tNjQpfChaZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFkZHIpfChFeHRl
bmRlZE9mZnNldEFkZHIpfChJbmRleCl8KFByZUluZGV4KXwoUG9zdEluZGV4KXwoUmVsQ29uZCl8
KFJlc0NvbmQpfChEb3VibGVDb25kKXwoU3RhdHVzQ29uZCkpXFovCiBlbmQKIAogZGVmIGlzQXJj
aCh0b2tlbikKQEAgLTMwMyw3ICszMDMsNyBAQCBjbGFzcyBQYXJzZXIKIAogICAgIGRlZiBjb25z
dW1lS2luZAogICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKLSAgICAgICAgcGFyc2VFcnJv
cigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFplcm9SZWcs
IFRtcCwgU2ltcGxlQWRkciwgQWRkciwgRXh0ZW5kZWRPZmZzZXRBZGRyLCBJbmRleCwgUmVsQ29u
ZCwgUmVzQ29uZCwgRG91YmxlQ29uZCwgb3IgU3RhdHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJl
c3VsdCkKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJp
dEltbSwgQml0SW1tNjQsIFplcm9SZWcsIFRtcCwgU2ltcGxlQWRkciwgQWRkciwgRXh0ZW5kZWRP
ZmZzZXRBZGRyLCBJbmRleCwgUHJlSW5kZXgsIFBvc3RJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwg
RG91YmxlQ29uZCwgb3IgU3RhdHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKICAgICAg
ICAgYWR2YW5jZQogICAgICAgICByZXN1bHQKICAgICBlbmQKQEAgLTkyOSw2ICs5MjksMTIgQEAg
d3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgi
CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRJbmRleEZv
cm0oYXJnc1sje2luZGV4fV0uc2NhbGUoKSwgYXJnc1sje2luZGV4fV0ub2Zmc2V0KCksICN7YXJn
LndpZHRoQ29kZX0pKSIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRV
Uk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICB3aGVuICJQcmVJbmRleCIKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybShhcmdzWyN7
aW5kZXh9XS5vZmZzZXQoKSkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VO
X1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIHdoZW4gIlBvc3RJbmRleCIKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZFBvc3RJbmRleEZvcm0o
YXJnc1sje2luZGV4fV0ub2Zmc2V0KCkpKSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKICAgICAgICAgICAgICAgICB3aGVuICJCaWdJbW0iCiAg
ICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29uZCIKICAgICAgICAgICAgICAgICB3aGVuICJSZXND
b25kIgpAQCAtMTIzNSw2ICsxMjQxLDEwIEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewog
ICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0FkZHJlc3Mo
KSIKICAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKICAgICAgICAgICAgICAgICAgICAgb3V0
cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAgICAgICAgICAgICB3
aGVuICJQcmVJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2lu
ZGV4fV0uYXNQcmVJbmRleEFkZHJlc3MoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJQb3N0SW5k
ZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUG9z
dEluZGV4QWRkcmVzcygpIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCiAgICAgICAg
ICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENvbmRp
dGlvbigpIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmgKaW5kZXggYzcwMzJlYzA4NGRkZmRkOTM1ZTU1MjdmYWFlOTM1NjgxOTg0ODE3OS4u
NzIxZWIzYWRkNjI3NDhlMmZiMDJkZGY0MjU1N2NjNTlkNWQ4ODBlYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuaApAQCAtMTE0MCw0ICsxMTQwLDkgQEAgdm9pZCBhZGRDb3B5VGVzdHMoY29u
c3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mKTsKIAog
Ym9vbCBzaG91bGRSdW4oY29uc3QgY2hhciogZmlsdGVyLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSk7
CiAKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCk7Cit2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgp
Owordm9pZCB0ZXN0TG9hZFBvc3RJbmRleDMyKCk7Cit2b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQo
KTsKKwogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
M18zLmNwcAppbmRleCA0YzUyYWRhOWNjNDAyZGRlNTM5ODhjYzhmMmY1ZTllMGRkZTJlMTFjLi4w
YTUwYWE4NzAzN2ZlZTNjMjE1OGFiYzhiMmI2ZGY5OWMwZGY4YjdhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjNfMy5jcHAKQEAgLTI4LDYgKzI4LDMwMCBAQAogCiAjaWYgRU5BQkxFKEIz
X0pJVCkKIAorCit2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6
OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90
IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQzMl90
KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIg
PSBwcm9jLmFkZFZhcmlhYmxlKEludDMyKTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFy
aWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2Nr
CisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKSAgICAgICAgICAgICAKKyAg
ICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0g
cm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCAwKTsKKyAgICBy
b290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIs
IHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAg
cm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9v
cF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIg
PSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxv
b3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCks
IHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVz
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9v
cFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25k
LCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisg
ICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9
IHAyICsgMQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyByMyA9IHIyICsgbG9hZChw
MykKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUq
IHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIs
IGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCkpOwor
ICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3Jp
Z2luKCksIHAsIHAzKTsKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBwMykpOworICAgIGxvb3BCb2R5LT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAg
ICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBG
cmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsgIAorCisg
ICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZp
eFNTQShwcm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlm
IChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzRdISIp
OworCisgICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDMyX3QgeworICAgICAgICBpbnQzMl90
IHIgPSAwOworICAgICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqKytwdHI7
CisgICAgICAgIHJldHVybiByOworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50MzJf
dD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3Zv
aWQgdGVzdExvYWRQcmVJbmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0
TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVtc1tdID0geyAx
LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDY0X3QqIHB0ciA9IG51bXM7
CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAg
IEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sq
IGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFy
aWFibGUoSW50NjQpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7
CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAgICAvLyByMSA9
IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpICAgICAgICAgICAgIAorICAgIC8vIHAxID0gYWRk
cgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmRJ
bnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50NjQsIDApOworICAgIHJvb3QtPmFwcGVuZE5l
dzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAgIFZh
bHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29w
VGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxvY2sK
KyAgICAvLyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisgICAg
Ly8gaWYgcjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFs
dWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0
LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50ZWRC
bG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHAzID0gcDIgKyAxCisgICAg
Ly8gVXBzaWxvbihwMywgXnAyKQorICAgIC8vIHIzID0gcjIgKyBsb2FkKHAzKQorICAgIC8vIFVw
c2lsb24ocjMsIF5yMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9k
eS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KSk7CisgICAgbG9vcEJvZHkt
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMp
OworICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwg
T3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2Fk
LCBJbnQ2NCwgT3JpZ2luKCksIHAzKSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5h
cHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9j
ayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2Nr
CisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdDb250
cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOyAgIAorCisgICAgcHJvYy5yZXNl
dFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsK
KworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkp
CisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzhdISIpOworCisgICAgYXV0
byB0ZXN0ID0gWyZdICgpIC0+IGludDY0X3QgeworICAgICAgICBpbnQ2NF90IHIgPSAwOworICAg
ICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqKytwdHI7CisgICAgICAgIHJl
dHVybiByOworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50NjRfdD4oKmNvZGUsIGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQ
b3N0SW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAy
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwg
NSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQzMl90KiBwdHIgPSBudW1zOworCisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJv
Yy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDMy
KTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8g
VXBzaWxvbihyMSwgXnIyKSAgICAgICAgICAgICAKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBV
cHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQo
cHJvYywgT3JpZ2luKCksIEludDMyLCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2Ms
IEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKwor
ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9v
cDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49
IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFi
bGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxv
b3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCks
IHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
QWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSks
IEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMikKKyAgICAvLyBw
MyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBVcHNpbG9uKHAzLCBe
cDIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwgcDIpKTsKKyAgICBWYWx1ZSog
cDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwg
bG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA0KSk7Cisg
ICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmln
aW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJv
YywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3Qp
KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRv
bmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsgCisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5
KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NBKHByb2MpOworCisgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hl
Y2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJdLCAjNCIpOworCisgICAgYXV0byB0ZXN0ID0gWyZd
ICgpIC0+IGludDMyX3QgeworICAgICAgICBpbnQzMl90IHIgPSAwOworICAgICAgICB3aGlsZSAo
ciA8IDEwKQorICAgICAgICAgICAgciArPSAqcHRyKys7CisgICAgICAgIHJldHVybiByOworICAg
IH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50MzJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQb3N0SW5kZXg2NCgp
Cit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwg
OSwgMTAgfTsKKyAgICBpbnQ2NF90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygp
OworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKyAgICBWYXJp
YWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwg
XnIyKSAgICAgICAgICAgICAKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBe
cDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2lu
KCksIEludDY0LCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9y
aWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1
bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBw
MiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9u
ZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJv
YywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZh
bHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwg
T3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBC
cmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRC
bG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0Jv
ZHlfQmxvY2sKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMikKKyAgICAvLyBwMyA9IHAyICsgMQor
ICAgIC8vIFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8g
Z290byBsb29wCisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHBy
b2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwgcDIpKTsKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9k
eS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KSk7CisgICAgbG9vcEJvZHkt
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMp
OworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwg
T3JpZ2luKCksIHAsIHAzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8g
cmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwg
T3JpZ2luKCksIHIyKTsgCisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFs
aWRhdGUocHJvYyk7CisgICAgZml4U1NBKHByb2MpOworCisgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1
Y3Rpb24oKmNvZGUsICJdLCAjOCIpOworCisgICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDY0
X3QgeworICAgICAgICBpbnQ2NF90IHIgPSAwOworICAgICAgICB3aGlsZSAociA8IDEwKQorICAg
ICAgICAgICAgciArPSAqcHRyKys7CisgICAgICAgIHJldHVybiByOworICAgIH07CisKKyAgICBD
SEVDS19FUShpbnZva2U8aW50NjRfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRy
KSksIHRlc3QoKSk7Cit9CisKKwogdm9pZCB0ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm8z
MigpCiB7CiAgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCkBA
IC0zNjk3LDYgKzM5OTEsMTEgQEAgdm9pZCBhZGRTaHJUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIs
IERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3Ra
U2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMCkpOwogICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4
ZmZmZmZmZmYsIDEpKTsKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCA2Mykp
OworCisgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRQcmVJ
bmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDMyKCkpOworICAgIFJVTih0ZXN0
TG9hZFBvc3RJbmRleDY0KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCmluZGV4
IDYzZTI2Njc4ODUyMDE4YTc2ODBjYTVmMDcxNDY5NjgxMDU4ODRiM2IuLjY5YmI2YjJiZTgxODcw
YjU5ODMzMzY3YWYyNjc1YjdmNGVmMDU2ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcApAQCAtMjMzLDggKzIzMyw4IEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaml0
V3JpdGVUaHVua0dlbmVyYXRvCiAgICAgaml0LnJldCgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIGxvY2FsMCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5sb2FkNjQoeDEsIFBvc3RJbmRl
eCg4KSwgeDYpOwotICAgIGppdC5zdG9yZTY0KHg2LCB4MywgUG9zdEluZGV4KDgpKTsKKyAgICBq
aXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgxLCA4KSwgeDYpOwor
ICAgIGppdC5zdG9yZTY0KHg2LCBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyh4Mywg
OCkpOwogICAgIHNtYWxsQ29weS5saW5rKCZqaXQpOwogICAgIGppdC5icmFuY2hTdWI2NChNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgyKS5saW5rVG8obG9j
YWwwLCAmaml0KTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsb2NhbDIgPSBqaXQuYnJhbmNo
QWRkNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434416</attachid>
            <date>2021-07-28 02:38:20 -0700</date>
            <delta_ts>2021-07-29 13:52:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210728043819.patch</filename>
            <type>text/plain</type>
            <size>65727</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi5hM2I2NmUxYmQzZjlkYmMz
YzAzNDk5NmQzZWU1MTNmZmI4NmE4YWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MzcgQEAKKzIwMjEtMDctMjggIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBQcmUvUG9zdC1JbmRleGVkIEFkZHJlc3MgTW9kZSB0byBBaXIg
Zm9yIEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjgwNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcmUtaW5kZXhlZCBhZGRyZXNzaW5nIG1lYW5zIHRoYXQgdGhlIGFkZHJlc3MgaXMgdGhlIHN1
bSBvZiB0aGUgdmFsdWUgaW4gdGhlIDY0LWJpdCBiYXNlIHJlZ2lzdGVyIAorICAgICAgICBhbmQg
YW4gb2Zmc2V0LCBhbmQgdGhlIGFkZHJlc3MgaXMgdGhlbiB3cml0dGVuIGJhY2sgdG8gdGhlIGJh
c2UgcmVnaXN0ZXIuIEFuZCBwb3N0LWluZGV4ZWQgCisgICAgICAgIGFkZHJlc3NpbmcgbWVhbnMg
dGhhdCB0aGUgYWRkcmVzcyBpcyB0aGUgdmFsdWUgaW4gdGhlIDY0LWJpdCBiYXNlIHJlZ2lzdGVy
LCBhbmQgdGhlIHN1bSBvZiB0aGUgCisgICAgICAgIGFkZHJlc3MgYW5kIHRoZSBvZmZzZXQgaXMg
dGhlbiB3cml0dGVuIGJhY2sgdG8gdGhlIGJhc2UgcmVnaXN0ZXIuIFRoZXkgYXJlIHJlbGF0aXZl
bHkgY29tbW9uIGZvciAKKyAgICAgICAgbG9vcHMgdG8gaXRlcmF0ZSBvdmVyIGFuIGFycmF5IGJ5
IGluY3JlYXNpbmcvZGVjcmVhc2luZyBhIHBvaW50ZXIgaW50byB0aGUgYXJyYXkgYXQgZWFjaCBp
dGVyYXRpb24uIAorICAgICAgICBXaXRoIHN1Y2ggYW4gYWRkcmVzc2luZyBtb2RlLCB0aGUgaW5z
dHJ1Y3Rpb24gc2VsZWN0b3IgY2FuIG1lcmdlIHRoZSBpbmNyZW1lbnQgYW5kIGFjY2VzcyB0aGUg
YXJyYXkuCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor
ICAgICAgICAjIyBQcmUtSW5kZXggQWRkcmVzcyBNb2RlIEZvciBMb2FkICMjCisgICAgICAgICMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICAgICBMRFIgV3QsIFtY
biwgI2ltbV0hCisKKyAgICAgICAgSW4gQjMgUmVkdWN0aW9uIFN0cmVuZ3RoLCBzaW5jZSB3ZSBo
YXZlIHRoaXMgcmVkdWN0aW9uIHJ1bGU6CisgICAgICAgICAgICBUdXJuIHRoaXM6IExvYWQoQWRk
KGFkZHJlc3MsIG9mZnNldDEpLCBvZmZzZXQgPSBvZmZzZXQyKQorICAgICAgICAgICAgSW50byB0
aGlzOiBMb2FkKGFkZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorCisgICAgICAg
IFRoZW4sIHRoZSBlcXVpdmFsZW50IHBhdHRlcm4gaXM6CisgICAgICAgICAgICB4ID0gLi4uIAor
ICAgICAgICAgICAgeSA9IGFkZCh4LCBvZmZzZXQpCisgICAgICAgICAgICB6ID0gbG9hZCh4LCBv
ZmZzZXQpCisKKyAgICAgICAgVGhlIFN0cmF0ZWd5OgorICAgICAgICB4ID0gLi4uICAgICAgICAg
ICAgICAgICAgICAgIG1vdmUgeCB0byB0bXAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IC4u
LgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAg
IC4uLiBDb2RlIEEgLi4uICAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgICAgICB5ID0gYWRkKHgsIG9mZnNldCkgICAgICAgICAgIG1vdmUgdG1wIHRvIHkg
ICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHgKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0t
ICAgLS0tLT4gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAtLS0tPiAgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAuLi4gQ29kZSBCIC4uLiAgICAgICAgICAgICAg
IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgIC0tLS0t
LS0tLS0tLS0tLS0tLSAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAg
ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgeiA9IGxvYWQoeCwgb2Zm
c2V0KSAgICAgICAgICBsb2FkIHkgd2l0aCBwcmVmaXggdG8geiAgICAgICAgICAgICAgIHogPSBs
b2FkKHksIHByZWZpeChvZmZzZXQpKQorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0gICAgICAg
ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICAgICAgIC4uLiBDb2RlIEMgLi4uICAgICAgICAgICAgICAgLi4uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0t
LS0tLS0tICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyMgUHJlLUluZGV4IEFkZHJlc3MgUGF0
dGVybiBDb25zdHJhaW50cyAjIworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgICAgICBVc2UgUmVmZXJlbmNlcyBvZiB4IGluIHwgQSB8IEIgfCBDIHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IFkgfCBZIHwgWSB8CisgICAgICAgIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFVzZSBSZWZlcmVuY2VzIG9mIHgg
aW4gQToKKyAgICAgICAgeCA9IC4uLiAgICAgICAgICAgICAgICAgICAgICBtb3ZlIHggdG8gdG1w
ICAgICAgICAgICAgICAgICAgICAgICB4ID0gLi4uCisgICAgICAgIHByaW50KHgpICAgICAgICAg
ICAgIC0tLS0+ICAgcHJpbnQoeCkgICAgICAgICAgICAgICAgICAgIC0tLS0+ICAgcHJpbnQoeCkK
KyAgICAgICAgeSA9IGFkZCh4LCBvZmZzZXQpICAgICAgICAgICBtb3ZlIHRtcCB0byB5ICAgICAg
ICAgICAgICAgICAgICAgICB5ID0geAorICAgICAgICB6ID0gbG9hZCh4LCBvZmZzZXQpICAgICAg
ICAgIGxvYWQgeSB3aXRoIHByZWZpeCB0byB6ICAgICAgICAgICAgIHogPSBsb2FkKHksIHByZWZp
eChvZmZzZXQpKQorCisgICAgICAgIFVzZSBSZWZlcmVuY2VzIG9mIHggaW4gQjoKKyAgICAgICAg
eCA9IC4uLiAgICAgICAgICAgICAgICAgICAgICBtb3ZlIHggdG8gdG1wICAgICAgICAgICAgICAg
ICAgICAgICB4ID0gLi4uCisgICAgICAgIHkgPSBhZGQoeCwgb2Zmc2V0KSAgIC0tLS0+ICAgbW92
ZSB0bXAgdG8geSAgICAgICAgICAgICAgIC0tLS0+ICAgeSA9IHgKKyAgICAgICAgcHJpbnQoeCkg
ICAgICAgICAgICAgICAgICAgICBwcmludCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmludCh4KQorICAgICAgICB6ID0gbG9hZCh4LCBvZmZzZXQpICAgICAgICAgIGxvYWQgeSB3aXRo
IHByZWZpeCB0byB6ICAgICAgICAgICAgIHogPSBsb2FkKHksIHByZWZpeChvZmZzZXQpKQorCisg
ICAgICAgIFVzZSBSZWZlcmVuY2VzIG9mIHggaW4gQzoKKyAgICAgICAgeCA9IC4uLiAgICAgICAg
ICAgICAgICAgICAgICBtb3ZlIHggdG8gdG1wICAgICAgICAgICAgICAgICAgICAgICB4ID0gLi4u
IAorICAgICAgICB5ID0gYWRkKHgsIG9mZnNldCkgICAtLS0tPiAgIG1vdmUgdG1wIHRvIHkgICAg
ICAgICAgICAgICAtLS0tPiAgIHkgPSB4CisgICAgICAgIHogPSBsb2FkKHgsIG9mZnNldCkgICAg
ICAgICAgbG9hZCB5IHdpdGggcHJlZml4IHRvIHogICAgICAgICAgICAgeiA9IGxvYWQoeSwgcHJl
Zml4KG9mZnNldCkpCisgICAgICAgIHByaW50KHgpICAgICAgICAgICAgICAgICAgICAgcHJpbnQo
eCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoeCkKKworICAgICAgICBTaW5jZSBh
bGwgeCdzIHVzZSByZWZlcmVuY2VzIGFyZSBhdmFpbGFibGUgaW4gQ29kZSBBLCBCLCBhbmQgQy4g
U28sIHdlIG5vIGxvbmdlciBuZWVkIHRvIHdvcnJ5IAorICAgICAgICBhYm91dCBpdHMgY29uc3Ry
YWludHMuCisKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgICAgIFVzZSBSZWZlcmVuY2VzIG9mIHkgaW4gfCBBIHwgQiB8IEMgfAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgWCB8IFkgfCBZIHwKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVXNlIFJlZmVyZW5jZXMgb2YgeSBpbiBCOgor
ICAgICAgICB4ID0gLi4uICAgICAgICAgICAgICAgICAgICAgIG1vdmUgeCB0byB0bXAgICAgICAg
ICAgICAgICAgICAgICAgIHggPSAuLi4gCisgICAgICAgIHkgPSBhZGQoeCwgb2Zmc2V0KSAgIC0t
LS0+ICAgbW92ZSB0bXAgdG8geSAgICAgICAgICAgICAgIC0tLS0+ICAgeSA9IHggCisgICAgICAg
IHByaW50KHkpICAgICAgICAgICAgICAgICAgICAgcHJpbnQoeSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJpbnQoeSkgCisgICAgICAgIHogPSBsb2FkKHgsIG9mZnNldCkgICAgICAgICAg
bG9hZCB5IHdpdGggcHJlZml4IHRvIHogICAgICAgICAgICAgeiA9IGxvYWQoeSwgcHJlZml4KG9m
ZnNldCkpCisKKyAgICAgICAgVXNlIFJlZmVyZW5jZXMgb2YgeSBpbiBDOgorICAgICAgICB4ID0g
Li4uICAgICAgICAgICAgICAgICAgICAgIG1vdmUgeCB0byB0bXAgICAgICAgICAgICAgICAgICAg
ICAgIHggPSAuLi4gICAgICAgICAgICAgICAgCisgICAgICAgIHkgPSBhZGQoeCwgb2Zmc2V0KSAg
IC0tLS0+ICAgbW92ZSB0bXAgdG8geSAgICAgICAgICAgICAgIC0tLS0+ICAgeSA9IHggCisgICAg
ICAgIHogPSBsb2FkKHgsIG9mZnNldCkgICAgICAgICAgbG9hZCB5IHdpdGggcHJlZml4IHRvIHog
ICAgICAgICAgICAgeiA9IGxvYWQoeSwgcHJlZml4KG9mZnNldCkpCisgICAgICAgIHByaW50KHkp
ICAgICAgICAgICAgICAgICAgICAgcHJpbnQoeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpbnQoeSkKKworICAgICAgICBUaGUgdXNlIHJlZmVyZW5jZXMgb2YgeSBtdXN0IGFwcGVhciBh
ZnRlciB0aGUgbG9hZCB2YWx1ZSB6LiBTbywgTGFzdFVzZUxvY2F0aW9uKHkpID4gTG9jYXRpb24o
eikuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gLi4gICAgICAgICAgICAgICAg
ICAgICAgICAgeCA9IC4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGFkZCh4LCBv
ZmZzZXQpICAgICAtLT4gICAgIC8vIHkgPSBhZGQoeCwgb2Zmc2V0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHogPSBsb2FkKHgsIG9mZnNldCkgICAgICAgICAgICB6ID0gbG9hZCh4LCBv
ZmZzZXQpCisKKyAgICAgICAgTm90ZSB0aGF0IGlmIG5vIHkncyB1c2UgcmVmZXJlbmNlIGJlbG93
IHosIHdlIHNob3VsZCBsZWF2ZSBpdCB3aXRob3V0IHRoZSBwcmVmaXggaW5jcmVtZW50LgorCisg
ICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMj
IFBvc3QtSW5kZXggQWRkcmVzcyBNb2RlIEZvciBMb2FkICMjCisgICAgICAgICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgTERSIFd0LCBbWG5dLCAjaW1t
CisKKyAgICAgICAgVGhlIGVxdWl2YWxlbnQgcGF0dGVybiBpczoKKyAgICAgICAgICAgIHggPSAu
Li4gCisgICAgICAgICAgICB5ID0gbG9hZCh4LCAwKQorICAgICAgICAgICAgeiA9IGFkZCh4LCBv
ZmZzZXQpCisKKyAgICAgICAgVGhlIFN0cmF0ZWd5OgorICAgICAgICB4ID0gLi4uICAgICAgICAg
ICAgICAgICAgICAgIG1vdmUgeCB0byB0bXAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IC4u
LgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAg
IC4uLiBDb2RlIEEgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgICAgICB5ID0gbG9hZCh4LCAwKSAgICAgICAgICAgICAgIGxvYWQgdG1wIHdpdGgg
cHJlZml4IHRvIHkgICAgICAgICAgICAgeSA9IGxvYWQoeCwgcG9zdGZpeChvZmZzZXQpKQorICAg
ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0gICAtLS0tPiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAgIC0tLS0+ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC4uLiBD
b2RlIEIgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgICAgICB6ID0gYWRkKHgsIG9mZnNldCkgICAgICAgICAgIG1vdmUgdG1wIHRvIHogICAgICAg
ICAgICAgICAgICAgICAgICAgeiA9IHgKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tICAgICAg
ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgICAgICAuLi4gQ29kZSBDICAgICAgICAgICAgICAgICAgIC4uLiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgIC0tLS0tLS0tLS0t
LS0tLS0tLSAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIyBQb3N0LUluZGV4IEFkZHJlc3Mg
UGF0dGVybiBDb25zdHJhaW50cyAjIworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAgICAgICAgVXNlIFJlZmVyZW5jZXMgb2YgeCBpbiB8IEEgfCBCIHwgQyB8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZIHwgTiB8IE4gfAorICAgICAgICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBVc2UgUmVmZXJlbmNlcyBv
ZiB4IGluIEE6CisgICAgICAgIHggPSAuLi4gICAgICAgICAgICAgICAgICAgICAgIG1vdmUgeCB0
byB0bXAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gLi4uCisgICAgICAgIHByaW50KHgpICAg
ICAgICAgICAgIC0tLS0+ICAgIHByaW50KHgpICAgICAgICAgICAgICAgICAgICAtLS0tPiAgICBw
cmludCh4KQorICAgICAgICB5ID0gbG9hZCh4LCAwKSAgICAgICAgICAgICAgICBsb2FkIHRtcCB3
aXRoIHBvc3RmaXggdG8geSAgICAgICAgICAgeSA9IGxvYWQoeCwgcG9zdGZpeChvZmZzZXQpKQor
ICAgICAgICB6ID0gYWRkKHgsIG9mZnNldCkgICAgICAgICAgICBtb3ZlIHRtcCB0byB6ICAgICAg
ICAgICAgICAgICAgICAgICAgeiA9IHgKKworICAgICAgICBVc2UgUmVmZXJlbmNlcyBvZiB4IGlu
IEI6CisgICAgICAgIHggPSAuLi4gICAgICAgICAgICAgICAgICAgICAgIG1vdmUgeCB0byB0bXAg
ICAgICAgICAgICAgICAgICAgICAgICB4ID0gLi4uCisgICAgICAgIHkgPSBsb2FkKHgsIDApICAg
ICAgIC0tLS0+ICAgIGxvYWQgdG1wIHdpdGggcG9zdGZpeCB0byB6ICAtLS0tPiAgICB5ID0gbG9h
ZCh4LCBwb3N0Zml4KG9mZnNldCkpCisgICAgICAgIHByaW50KHgpICAgICAgICAgICAgICAgICAg
ICAgIHByaW50KHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCh4KQorICAgICAg
ICB6ID0gYWRkKHgsIG9mZnNldCkgICAgICAgICAgICBtb3ZlIHRtcCB0byB5ICAgICAgICAgICAg
ICAgICAgICAgICAgeiA9IHgKKworICAgICAgICBVc2UgUmVmZXJlbmNlcyBvZiB4IGluIEM6Cisg
ICAgICAgIHggPSAuLi4gICAgICAgICAgICAgICAgICAgICAgIG1vdmUgeCB0byB0bXAgICAgICAg
ICAgICAgICAgICAgICAgICB4ID0gLi4uIAorICAgICAgICB5ID0gbG9hZCh4LCAwKSAgICAgICAt
LS0tPiAgICBsb2FkIHRtcCB3aXRoIHBvc3RmaXggdG8geSAgLS0tLT4gICAgeSA9IGxvYWQoeCwg
cG9zdGZpeChvZmZzZXQpKQorICAgICAgICB6ID0gYWRkKHgsIG9mZnNldCkgICAgICAgICAgICBt
b3ZlIHRtcCB0byB6ICAgICAgICAgICAgICAgICAgICAgICAgeiA9IHgKKyAgICAgICAgcHJpbnQo
eCkgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoeCkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByaW50KHgpCisKKyAgICAgICAgVGhlIGNvbnN0cmFpbnQgb2YgeCdzIFJlZmVyZW5jZXM6
IFRoZSB1c2UgcmVmZXJlbmNlcyBvZiB4IGV4Y2VwdCB6IHNob3VsZCBub3QgYXBwZWFyIGFmdGVy
IHRoZSBsb2FkIAorICAgICAgICB2YWx1ZSB5LiBTbywgQmVmb3JlTGFzdFVzZUxvY2F0aW9uKHgp
IDw9IExvY2F0aW9uKHkpLiAoSGVyZSwgdGhlIExvY2F0aW9uIHJldHVybnMgdGhlIGNvcnJlc3Bv
bmRpbmcgCisgICAgICAgIGluZGV4IGluIHRoZSByZWxhdGl2ZSBjb2RlIGV4ZWN1dGlvbiBvcmRl
ci4pCisKKyAgICAgICAgVGhlIGNvbnN0cmFpbnQgb2YgeidzIFJlZmVyZW5jZXM6IFRoZSB1c2Ug
cmVmZXJlbmNlcyBvZiB6IG11c3QgYXBwZWFyIGFmdGVyIGl0cyBkZWZpbml0aW9uLiAKKyAgICAg
ICAgU28sIExhc3RVc2VMb2NhdGlvbih6KSA+IExvY2F0aW9uKHopLgorCisgICAgICAgICMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyMgSW1wbGVtZW50YXRpb24gQ2hh
bGxlbmdlcyAjIworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAg
ICAgICAgIyMjIENoYWxsZW5nZSAxOiBEeW5hbWljIFVzZSBSZWZlcmVuY2VzIGluIExvd2VyaW5n
CisgICAgICAgIFRvIGRldGVjdCB0aGUgdmFsaWQgcHJlLWluZGV4IGFkZHJlc3MgcGF0dGVybiBp
cyBhIGNoYWxsZW5nZSBpbiBCMyBzaW5jZSB1c2UgcmVmZXJlbmNlcyBhcmUgCisgICAgICAgIGR5
bmFtaWNhbGx5IGNoYW5naW5nIHdoaWxlIGxvd2VyaW5nIHRvIEFpci4gRm9yIGV4YW1wbGU6CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gLi4gICAgICAgICAgICAgICAgICAgICAg
ICAgIHggPSAuLiAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHkgPSBsb2FkKHgsIDApICAgICAgICAgICAgICAgICAgeSA9IGxvYWQoeCwgMCkgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeiA9IGFkZCh4LCBvZmZzZXQpICAg
ICAtLT4gICAgICB6ID0gYWRkKHgsIG9mZnNldCkgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3ID0gbG9hZCh6LCAwKSAgICAgICAgICAgICAgICAgIHcgPSBsb2FkKHgsIG9m
ZnNldCkgQGhlcmUgICAgICAgICAgICAKKworICAgICAgICBIZXJlLCBib3RoIHkgc2hvdWxkIG1h
dGNoIHRoZSBwb3N0Zml4IHBhdHRlcm4uIEhvd2V2ZXIsIHRoZSBjaGFuZ2VzIGluIHRoZSBsb3dl
cmluZyBvZiB3IAorICAgICAgICB2aW9sYXRlIHRoZSBwYXR0ZXJuIGluIHkuIEFueSBCMyB3aXRo
IGFuIGFkZHJlc3MgY2hpbGQgbWlnaHQgY2hhbmdlIHRoZSB1c2UgcmVmZXJlbmNlcy4gSGVuY2Us
IHRoZSAKKyAgICAgICAgdXNlIHJlZmVyZW5jZXMgYmFzZWQgb24gdG1wICh2YWx1ZSAtPiB0bXAg
LT4gdXNlcykgYWZ0ZXIgbG93ZXJpbmcgYXJlIG5lZWRlZC4KKworICAgICAgICAjIyMgQ2hhbGxl
bmdlIDI6IFRyYXZlcnNhbCBPcmRlciBpbiBMb3dlcmluZworICAgICAgICBUaGUgdHJhdmVyc2Fs
IG9yZGVyIG9mIGxvd2VyaW5nIEIzIHZhbHVlcyBpcyBpbiBhIGJvdHRvbS11cCBtYW5uZXIgaW4g
ZWFjaCBiYXNpYyBibG9jay4gQnV0LCB0aGUgCisgICAgICAgIHRyYXZlcnNhbCBvZiBiYXNpYyBi
bG9ja3MgaXMgaW4gcHJlb3JkZXIsIG1ha2luZyBpdCBoYXJkIHRvIGRldGVjdCB0aGUgcGF0dGVy
bnMgaW4gdGhlIGxvd2VyaW5nIAorICAgICAgICBwaGFzZSB3aXRoIGEgc2luZ2xlIHBhdGguIEZv
ciBleGFtcGxlOgorCisgICAgICAgIEdpdmVuIGNvZGU6CisgICAgICAgIGludDY0X3QgbGRyX3By
ZShpbnQ2NF90ICpwKSB7CisgICAgICAgICAgICBpbnQ2NF90IHJlcyA9IDA7CisgICAgICAgICAg
ICB3aGlsZSAocmVzIDwgMTApCisgICAgICAgICAgICAgICAgcmVzICs9ICorK3A7CisgICAgICAg
ICAgICByZXR1cm4gcmVzOworICAgICAgICB9CisKKyAgICAgICAgU1NBOgorICAgICAgICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICMwIFJvb3RfQmxvY2sKKyAgICAgICAgQDAgIHIxID0gMAorICAg
ICAgICBAMSAgVXBzaWxvbihyMSwgXnIyKSAgICAgICAgICAgICAKKyAgICAgICAgQDIgIHAxID0g
YWRkcgorICAgICAgICBAMyAgVXBzaWxvbihwMSwgXnAyKQorICAgICAgICAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tICMxIExvb3BfVGVzdF9CbG9jaworICAgICAgICBsb29wOgorICAgICAgICBANCAg
cDIgPSBQaGkoKSAgICAgICAgICAgICAgCisgICAgICAgIEA1ICByMiA9IFBoaSgpCisgICAgICAg
IEA2ICBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAjMiBMb29wX0JvZHlfQmxvY2sKKyAgICAgICAgQDcgIHAzID0gcDIgKyAxICAgICAgICAgICAg
IAorICAgICAgICBAOCAgbDEgPSBsb2FkKHAzKSAgICAgICAgICAgCisgICAgICAgIEA5ICByMyA9
IHIyICsgbDEKKyAgICAgICAgQDEwIFVwc2lsb24ocjMsIF5yMikKKyAgICAgICAgQDExIFVwc2ls
b24ocDMsIF5wMikKKyAgICAgICAgQDEyIGdvdG8gbG9vcAorICAgICAgICAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tICMzIERvbmVfQmxvY2sKKyAgICAgICAgZG9uZToKKyAgICAgICAgQDEzIHJldHVy
biByMgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgRmxvdyBHcmFw
aDoKKyAgICAgICAgIzAgUm9vdF9CbG9jaworICAgICAgICAgICAgfAorICAgICAgICAgICAgfAor
ICAgICAgICAgICAgViAgICAgICAgICAgICAgCisgICAgICAgICMxIExvb3BfVGVzdF9CbG9jayAt
LS0tLS0+ICMzIERvbmVfQmxvY2sKKyAgICAgICAgICAgIHwgICAgICAgXgorICAgICAgICAgICAg
fCAgICAgICB8CisgICAgICAgICAgICB8ICAgICAgIHwgICAgCisgICAgICAgICAgICB8ICAgICAg
IHwgICAgICAgICAKKyAgICAgICAgICAgIFYgICAgICAgfCAgICAgICAgICAKKyAgICAgICAgIzIg
TG9vcF9Cb2R5X0Jsb2NrIAorCisgICAgICAgIExvd2VyaW5nIE9yZGVyIGZvciBCMyB2YWx1ZXM6
CisgICAgICAgICMwIFJvb3RfQmxvY2s6IEAzLCBAMiwgQDEsIEAwCisgICAgICAgICMxIExvb3Bf
VGVzdF9CbG9jazogQDYsIEA1LCBANAorICAgICAgICAjMiBMb29wX0JvZHlfQmxvY2s6IEAxMiwg
Li4uCisKKyAgICAgICAgVG8gbWl0aWdhdGUgY2hhbGxlbmdlcyAxIGFuZCAyLCB0aGlzIHBhdGNo
IG1vdmVzIHRoZSBwYXR0ZXJuIGRldGVjdGlvbiBwaGFzZSB0byBqdXN0IGFmdGVyIGxvd2VyaW5n
IAorICAgICAgICBhbmQgYmVmb3JlIGVudGVyaW5nIEFpci4gVGhpcyBwcm92aWRlcyB0d28gYmVu
ZWZpdHMsIEEpIHRoZXJlIGFyZSBubyBtb3JlIHVzZSBjaGFuZ2VzIChhdCBsZWFzdCBpbiAKKyAg
ICAgICAgQjMpLiBCKSBObyBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSB6aWd6YWcgdHJhdmVyc2Fs
LiBJbiBjb250cmFzdCwgaXQgbWlnaHQgYmUgY29zdGx5IGR1ZSB0byB0aGUgCisgICAgICAgIGFk
ZGl0aW9uYWwgdHJhdmVyc2FsIG92ZXJhbGwgQjMgdmFsdWVzIGZvciBwYXR0ZXJuIGRldGVjdGlv
bi4KKworICAgICAgICBEZXRlY3QgdGhlIHBhdHRlcm4gZm9yIHByZWZpeC9wb3N0Zml4IGFkZHJl
c3MgaXMgdHJpY2t5IGR1ZSB0byB0aGUgc3RydWN0dXJlIGluIEIzIElSLiBUaGUgCisgICAgICAg
IGFsZ29yaXRobSB1c2VkIGluIHRoaXMgcGF0Y2ggaXMgdG8gY29sbGVjdCB0aGUgZmlyc3QgdmFs
aWQgdmFsdWVzIChhZGQvbG9hZCksIHRoZW4gc2VhcmNoIGZvciBhbnkgCisgICAgICAgIHBhaXJl
ZCB2YWx1ZSAobG9hZC9hZGQpIHRvIG1hdGNoIGFsbCBvZiB0aGVtLiBUaGUgcHJvYmxlbSBpcyB0
aGF0IHRoZSB3b3JzdC1jYXNlIHdvdWxkIGxlYWQgdG8gYW4gTworICAgICAgICAobl4yKSBpbiB0
aGUgcnVudGltZSB3aGVuIG4gaXMgdGhlIG51bWJlciBvZiBhbGwgdmFsdWVzLiBNYXliZSwgd2Ug
c2hvdWxkIHByb3ZpZGUgYSBiZXR0ZXIgd2F5IHRvIAorICAgICAgICBoYW5kbGUgaXQuCisKKyAg
ICAgICAgQWZ0ZXIgY29sbGVjdGluZyB0d28gc2V0cyBvZiBjYW5kaWRhdGVzLCB3ZSBtYXRjaCB0
aGUgcHJlZml4IGluY3JlbWVudGFsIGFkZHJlc3MgZmlyc3Qgc2luY2UgaXQgc2VlbXMgCisgICAg
ICAgIG1vcmUgYmVuZWZpY2lhbCB0byB0aGUgY29tcGlsZXIgKHNob3duIGluIHRoZSBuZXh0IHNl
Y3Rpb24pLiBBbmQgdGhlbiwgZ28gZm9yIHRoZSBwb3N0Zml4IG9uZS4KKworICAgICAgICAjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMjIFRl
c3QgZm9yIFByZS9Qb3N0LUluY3JlbWVudCBBZGRyZXNzIE1vZGUgIyMKKyAgICAgICAgIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgIEdpdmVu
IExvb3Agd2l0aCBQcmUtSW5jcmVtZW50OgorICAgICAgICBpbnQ2NF90IGxkcl9wcmUoaW50NjRf
dCAqcCkgeworICAgICAgICAgICAgaW50NjRfdCByZXMgPSAwOworICAgICAgICAgICAgd2hpbGUg
KHJlcyA8IDEwKQorICAgICAgICAgICAgICAgIHJlcyArPSAqKytwOworICAgICAgICAgICAgcmV0
dXJuIHJlczsKKyAgICAgICAgfQorCisgICAgICAgIEIzIElSOgorICAgICAgICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQkIj
MDogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICAgICAgSW50NjQgYkAwID0gQ29uc3Q2
NCgwKQorICAgICAgICAgICAgSW50NjQgYkAyID0gQXJndW1lbnRSZWcoJXgwKQorICAgICAgICAg
ICAgVm9pZCBiQDIwID0gVXBzaWxvbigkMChiQDApLCBeMTgsIFdyaXRlc0xvY2FsU3RhdGUpCisg
ICAgICAgICAgICBWb2lkIGJAMjEgPSBVcHNpbG9uKGJAMiwgXjE5LCBXcml0ZXNMb2NhbFN0YXRl
KQorICAgICAgICAgICAgVm9pZCBiQDQgPSBKdW1wKFRlcm1pbmFsKQorICAgICAgICBTdWNjZXNz
b3JzOiAjMQorICAgICAgICBCQiMxOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgIFBy
ZWRlY2Vzc29yczogIzAsICMyCisgICAgICAgICAgICBJbnQ2NCBiQDE4ID0gUGhpKFJlYWRzTG9j
YWxTdGF0ZSkKKyAgICAgICAgICAgIEludDY0IGJAMTkgPSBQaGkoUmVhZHNMb2NhbFN0YXRlKQor
ICAgICAgICAgICAgSW50NjQgYkA3ID0gQ29uc3Q2NCgxMCkKKyAgICAgICAgICAgIEludDMyIGJA
OCA9IEFib3ZlRXF1YWwoYkAxOCwgJDEwKGJANykpCisgICAgICAgICAgICBWb2lkIGJAOSA9IEJy
YW5jaChiQDgsIFRlcm1pbmFsKQorICAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiMzLCBFbHNlOiMy
CisgICAgICAgIEJCIzI6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNz
b3JzOiAjMQorICAgICAgICAgICAgSW50NjQgYkAxMCA9IENvbnN0NjQoOCkKKyAgICAgICAgICAg
IEludDY0IGJAMTEgPSBBZGQoYkAxOSwgJDgoYkAxMCkpCisgICAgICAgICAgICBJbnQ2NCBiQDEz
ID0gTG9hZChiQDExLCBDb250cm9sRGVwZW5kZW50fFJlYWRzOlRvcCkKKyAgICAgICAgICAgIElu
dDY0IGJAMTQgPSBBZGQoYkAxOCwgYkAxMykKKyAgICAgICAgICAgIFZvaWQgYkAyMiA9IFVwc2ls
b24oYkAxNCwgXjE4LCBXcml0ZXNMb2NhbFN0YXRlKQorICAgICAgICAgICAgVm9pZCBiQDIzID0g
VXBzaWxvbihiQDExLCBeMTksIFdyaXRlc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBWb2lkIGJA
MTYgPSBKdW1wKFRlcm1pbmFsKQorICAgICAgICBTdWNjZXNzb3JzOiAjMQorICAgICAgICBCQiMz
OiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRlY2Vzc29yczogIzEKKyAgICAg
ICAgICAgIFZvaWQgYkAxNyA9IFJldHVybihiQDE4LCBUZXJtaW5hbCkKKyAgICAgICAgVmFyaWFi
bGVzOgorICAgICAgICAgICAgSW50NjQgdmFyMAorICAgICAgICAgICAgSW50NjQgdmFyMQorICAg
ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgICAgICBXL08gUHJlLUluY3JlbWVudCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
ICAgICAuLi4KKyAgICAgICAgQkIjMjogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQ
cmVkZWNlc3NvcnM6ICMxCisgICAgICAgICAgICBNb3ZlICQ4LCAleDMsICQ4KGJAMTIpCisgICAg
ICAgICAgICBBZGQ2NCAkOCwgJXgwLCAleDEsIGJAMTEKKyAgICAgICAgICAgIE1vdmUgKCV4MCwl
eDMpLCAleDAsIGJAMTMKKyAgICAgICAgICAgIEFkZDY0ICV4MCwgJXgyLCAleDIsIGJAMTQKKyAg
ICAgICAgICAgIE1vdmUgJXgxLCAleDAsIGJAMjMKKyAgICAgICAgICAgIEp1bXAgYkAxNgorICAg
ICAgICBTdWNjZXNzb3JzOiAjMQorICAgICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVy8gUHJl
LUluY3JlbWVudCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAuLi4KKyAgICAgICAgQkIj
MjogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNlc3NvcnM6ICMxCisgICAg
ICAgICAgICBNb3ZlV2l0aEluY3JlbWVudDY0ICgleDAsUHJlKCQ4KSksICV4MiwgYkAxMworICAg
ICAgICAgICAgQWRkNjQgJXgyLCAleDEsICV4MSwgYkAxNAorICAgICAgICAgICAgSnVtcCBiQDE2
CisgICAgICAgIFN1Y2Nlc3NvcnM6ICMxCisgICAgICAgIC4uLgorICAgICAgICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBH
aXZlbiBMb29wIHdpdGggUG9zdC1JbmNyZW1lbnQ6CisgICAgICAgIGludDY0X3QgbGRyX3ByZShp
bnQ2NF90ICpwKSB7CisgICAgICAgICAgICBpbnQ2NF90IHJlcyA9IDA7CisgICAgICAgICAgICB3
aGlsZSAocmVzIDwgMTApCisgICAgICAgICAgICAgICAgcmVzICs9ICpwKys7CisgICAgICAgICAg
ICByZXR1cm4gcmVzOworICAgICAgICB9CisKKyAgICAgICAgQjMgSVI6CisgICAgICAgIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg
ICBCQiMwOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgICAgICBJbnQ2NCBiQDAgPSBD
b25zdDY0KDApCisgICAgICAgICAgICBJbnQ2NCBiQDIgPSBBcmd1bWVudFJlZygleDApCisgICAg
ICAgICAgICBWb2lkIGJAMjAgPSBVcHNpbG9uKCQwKGJAMCksIF4xOCwgV3JpdGVzTG9jYWxTdGF0
ZSkKKyAgICAgICAgICAgIFZvaWQgYkAyMSA9IFVwc2lsb24oYkAyLCBeMTksIFdyaXRlc0xvY2Fs
U3RhdGUpCisgICAgICAgICAgICBWb2lkIGJANCA9IEp1bXAoVGVybWluYWwpCisgICAgICAgIFN1
Y2Nlc3NvcnM6ICMxCisgICAgICAgIEJCIzE6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAg
ICAgUHJlZGVjZXNzb3JzOiAjMCwgIzIKKyAgICAgICAgICAgIEludDY0IGJAMTggPSBQaGkoUmVh
ZHNMb2NhbFN0YXRlKQorICAgICAgICAgICAgSW50NjQgYkAxOSA9IFBoaShSZWFkc0xvY2FsU3Rh
dGUpCisgICAgICAgICAgICBJbnQ2NCBiQDcgPSBDb25zdDY0KDEwKQorICAgICAgICAgICAgSW50
MzIgYkA4ID0gQWJvdmVFcXVhbChiQDE4LCAkMTAoYkA3KSkKKyAgICAgICAgICAgIFZvaWQgYkA5
ID0gQnJhbmNoKGJAOCwgVGVybWluYWwpCisgICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46IzMsIEVs
c2U6IzIKKyAgICAgICAgQkIjMjogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVk
ZWNlc3NvcnM6ICMxCisgICAgICAgICAgICBJbnQ2NCBiQDEwID0gTG9hZChiQDE5LCBDb250cm9s
RGVwZW5kZW50fFJlYWRzOlRvcCkKKyAgICAgICAgICAgIEludDY0IGJAMTEgPSBBZGQoYkAxOCwg
YkAxMCkKKyAgICAgICAgICAgIEludDY0IGJAMTIgPSBDb25zdDY0KDgpCisgICAgICAgICAgICBJ
bnQ2NCBiQDEzID0gQWRkKGJAMTksICQ4KGJAMTIpKQorICAgICAgICAgICAgVm9pZCBiQDIyID0g
VXBzaWxvbihiQDExLCBeMTgsIFdyaXRlc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBWb2lkIGJA
MjMgPSBVcHNpbG9uKGJAMTMsIF4xOSwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAgICAgICAgIFZv
aWQgYkAxNiA9IEp1bXAoVGVybWluYWwpCisgICAgICAgIFN1Y2Nlc3NvcnM6ICMxCisgICAgICAg
IEJCIzM6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNzb3JzOiAjMQor
ICAgICAgICAgICAgVm9pZCBiQDE3ID0gUmV0dXJuKGJAMTgsIFRlcm1pbmFsKQorICAgICAgICBW
YXJpYWJsZXM6CisgICAgICAgICAgICBJbnQ2NCB2YXIwCisgICAgICAgICAgICBJbnQ2NCB2YXIx
CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgICAgICAgIFcvTyBQb3N0LUluY3JlbWVudCBBZGRyZXNzIE1vZGU6CisgICAg
ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgICAgICAuLi4KKyAgICAgICAgQkIjMjogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAg
ICAgICBQcmVkZWNlc3NvcnM6ICMxCisgICAgICAgICAgICBNb3ZlICgleDApLCAleDIsIGJAMTAK
KyAgICAgICAgICAgIEFkZDY0ICV4MiwgJXgxLCAleDEsIGJAMTEKKyAgICAgICAgICAgIEFkZDY0
ICQ4LCAleDAsICV4MCwgYkAxMworICAgICAgICAgICAgSnVtcCBiQDE2CisgICAgICAgIFN1Y2Nl
c3NvcnM6ICMxCisgICAgICAgIC4uLgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBXLyBQb3N0LUluY3JlbWVu
dCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAuLi4KKyAgICAgICAgQkIjMjogOyBmcmVx
dWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNlc3NvcnM6ICMxCisgICAgICAgICAgICBN
b3ZlV2l0aEluY3JlbWVudDY0ICgleDAsUG9zdCgkOCkpLCAleDIsIGJAMTAKKyAgICAgICAgICAg
IEFkZDY0ICV4MiwgJXgxLCAleDEsIGJAMTEKKyAgICAgICAgICAgIEp1bXAgYkAxNgorICAgICAg
ICBTdWNjZXNzb3JzOiAjMQorICAgICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgKiBhc3NlbWJs
ZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyOjpQcmVJbmRleEFkZHJlc3M6OlByZUluZGV4QWRkcmVzcyk6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3M6OlBvc3RJbmRleEFk
ZHJlc3MpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxvYWQ2NCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNNjQ6OmxvYWQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
QVJNNjQ6OnN0b3JlNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdG9y
ZTMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlNDOjp0
ZXN0U3RvcmVQcmVQb3N0SW5kZXgzMik6CisgICAgICAgIChKU0M6OnRlc3RTdG9yZVByZVBvc3RJ
bmRleDY0KToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQcmVQb3N0SW5kZXgzMik6CisgICAgICAg
IChKU0M6OnRlc3RMb2FkUHJlUG9zdEluZGV4NjQpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fp
ci5jcHA6CisgICAgICAgICogYjMvQjNWYWx1ZUtleS5oOgorICAgICAgICAqIGIzL0IzVmFsdWVL
ZXlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUtleTo6VmFsdWVLZXkpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJBcmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Ompz
SGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwcmVJbmRleCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6cG9zdEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1By
ZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1Bvc3RJbmRleCBj
b25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNNZW1vcnkgY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmJhc2UgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNH
UCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZFBvc3RJbmRleEZvcm0pOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVmFsaWRGb3JtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpmb3JFYWNoVG1wRmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Zm9yRWFj
aFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNQcmVJbmRleEFkZHJlc3MgY29u
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUG9zdEluZGV4QWRkcmVzcyBjb25z
dCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
SW5zdDo6cmVwbGFjZUluZGVudGl0eSk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzOgorICAgICAgICAqIGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAgICAqIGIz
L3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RMb2Fk
UHJlSW5kZXgzMik6CisgICAgICAgICh0ZXN0TG9hZFByZUluZGV4NjQpOgorICAgICAgICAodGVz
dExvYWRQb3N0SW5kZXgzMik6CisgICAgICAgICh0ZXN0TG9hZFBvc3RJbmRleDY0KToKKyAgICAg
ICAgKGFkZFNoclRlc3RzKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChKU0M6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTI2ICBZ
dXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFRlbXBvcmFs
IHRvIGZlYXR1cmVzLmpzb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKaW5kZXggM2QxOTQ5YTQwNzg1ZDk5Y2E2
MTU5NWFhYjA0YmU2ZjFkMGQ5NmJhMy4uMjM1NGM0NTM2OGM3YzBkNWNlOTAxOGFjZmYyODRjNGEw
YTA0MzFhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAgLTI0NSw2ICsyNDUsMzQgQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgfTsKIAorICAgIC8vIFByZUluZGV4QWRkcmVzczoKKyAgICAvLworICAg
IC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwcmUtaW5jcmVt
ZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3QgUHJlSW5kZXhBZGRyZXNzIHsKKyAgICAg
ICAgUHJlSW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAgICAg
ICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRleDsK
KyAgICB9OworCisgICAgLy8gUG9zdEluZGV4QWRkcmVzczoKKyAgICAvLworICAgIC8vIERlc2Ny
aWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwb3N0LWluY3JlbWVudC9kZWNy
ZW1lbnQgaW5kZXguCisgICAgc3RydWN0IFBvc3RJbmRleEFkZHJlc3MgeworICAgICAgICBQb3N0
SW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAgICAgICAgOiBi
YXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRleDsKKyAgICB9
OworCiAgICAgLy8gQWJzb2x1dGVBZGRyZXNzOgogICAgIC8vCiAgICAgLy8gRGVzY3JpYmVzIGFu
IG1lbW9yeSBvcGVyYW5kIGdpdmVuIGJ5IGEgcG9pbnRlci4gIEZvciByZWd1bGFyIGxvYWQgJiBz
dG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5
MGZkLi4yYTkxMmQwZGQyNjYyNmJkNzRlMTAzYmVmOTY1ZjJiYWRmY2UwYmQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQu
aApAQCAtMTQ0NSw5ICsxNDQ1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDw2ND4oYWRkcmVz
cywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkNjQoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJ
bmRleCBzaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQoUHJlSW5kZXhBZGRy
ZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIubGRy
PDY0PihkZXN0LCBzcmMsIHNpbW0pOworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3Qs
IHNyYy5iYXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQ2
NChQb3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkp
OwogICAgIH0KIAogICAgIERhdGFMYWJlbDMyIGxvYWQ2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2go
QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCkBAIC0xNTQ0LDYgKzE1NDksMTYgQEAg
cHVibGljOgogICAgICAgICBsb2FkPDMyPihhZGRyZXNzLCBkZXN0KTsKICAgICB9CiAKKyAgICB2
b2lkIGxvYWQzMihQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRleChzcmMu
aW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihQb3N0SW5kZXhBZGRyZXNzIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihkZXN0
LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkpOworICAgIH0KKwogICAgIERhdGFMYWJl
bDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKQEAgLTE3
MzMsNyArMTc0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4obWVt
b3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGluZGV4
RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgIG1fYXNzZW1ibGVy
LnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rlcik7CiAgICAgfQot
ICAgIAorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBQcmVJbmRleEFkZHJlc3Mg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2Us
IFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlNjQoUmVnaXN0
ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2UsIFBvc3RJbmRleChkZXN0LmluZGV4KSk7CisgICAg
fQorCiAgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBjb25zdCB2b2lkKiBhZGRyZXNz
KQogICAgIHsKICAgICAgICAgc3RvcmU8NjQ+KHNyYywgYWRkcmVzcyk7CkBAIC0xNzc3LDExICsx
ODAyLDYgQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJl
c3MpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0LCBQb3N0SW5kZXggc2ltbSkKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2
ND4oc3JjLCBkZXN0LCBzaW1tKTsKLSAgICB9Ci0gICAgCiAgICAgRGF0YUxhYmVsMzIgc3RvcmU2
NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykK
ICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTg3OSw2ICsxODk5
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNz
KTsKICAgICB9CiAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4QWRk
cmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3Qu
YmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihS
ZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgpKTsK
KyAgICB9CisKICAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgRGF0YUxhYmVs
MzIgbGFiZWwodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL3Rlc3RtYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1h
c20uY3BwCmluZGV4IGYyMmJmZmNlMTU1NGIwMmMyMjZjMjE0OTJhYjA2N2JhYjM4YzQwYjUuLjcw
N2FiYjA1MmIzODMyODE4NTk4NDVjMmM1OTQ5YzljYzc1YmYwMTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCkBAIC0yMjEyLDYgKzIyMTIsMTc2IEBA
IHZvaWQgdGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCiAgICAgICAgIH0KICAg
ICB9CiB9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKQoreworICAgIGludDMyX3Qg
bnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50cHRyX3QgYWRkciA9IGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMyX3QgaW5kZXggPSBzaXplb2YoaW50MzJfdCk7
CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQzMl90IHNyYykgeworICAgICAgICBhdXRvIHN0
b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0
RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAqKytwMSA9IDQ7IHJldHVy
biBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgQ0Nh
bGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkp
OworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7
CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52
b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCog
cDEgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QxKDQpKTsKKyAgICBDSEVDS19FUSgqcDEs
IDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1zWzFdKTsKKworICAgIGF1dG8gdGVzdDIgPSBb
Jl0gKGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7
CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsgcmV0dXJuIHAyOworICAgICAgICAgICAgaml0
LnN0b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFk
ZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAg
ICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0
KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwg
c3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCogcDIgPSBiaXR3aXNlX2Nhc3Q8aW50
MzJfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19FUSgqcDIsIDQpOworICAgIENIRUNLX0VRKCot
LXAyLCA1KTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaW50
NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnRwdHJfdCBhZGRyID0gYml0d2lzZV9j
YXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVvZihpbnQ2
NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3Qgc3JjKSB7CisgICAgICAgIGF1
dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAg
IGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICorK3AxID0gNDsg
cmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGlu
ZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
aml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
biBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2
NF90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDEoNCkpOworICAgIENIRUNLX0VR
KCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEsIG51bXNbMV0pOworCisgICAgYXV0byB0ZXN0
MiA9IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
aml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysgPSA1OyByZXR1cm4gcDI7CisgICAgICAgICAg
ICBqaXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UG9zdElu
ZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBq
aXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
KworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGpp
dC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0
b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2NF90KiBwMiA9IGJpdHdpc2VfY2Fz
dDxpbnQ2NF90Kj4odGVzdDIoNSkpOworICAgIENIRUNLX0VRKCpwMiwgNCk7CisgICAgQ0hFQ0tf
RVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4MzIoKQoreworICAg
IGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVv
ZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkgewor
ICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJl
cyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQzMihD
Q2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRk
cmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUklu
Zm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90Pihsb2FkLCAmbnVtc1sxXSk7
CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1z
WzJdLCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkgeworICAg
ICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9
ICpwMisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQzMihDQ2Fs
bEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJl
c3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAg
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4obG9hZCwgJm51bXNbMV0pOwor
ICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1sy
XSwgNSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaW50NjRf
dCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0
X3QpOworCisgICAgYXV0byB0ZXN0MSA9IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAg
IGF1dG8gbG9hZCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisr
cDE7ICpwMSA9IDQ7IHJldHVybiByZXM7CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVs
cGVyczo6UHJlSW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tNjQocmVwbGFjZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRG
dW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0p
OworICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9
OworCisgICAgQ0hFQ0tfRVEodGVzdDEoNCksIDMpOworICAgIENIRUNLX0VRKG51bXNbMl0sIDQp
OworCisgICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1
dG8gbG9hZCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAg
ZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKnAyKys7
ICpwMiA9IDU7IHJldHVybiByZXM7CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVy
czo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4KSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJ
bmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVu
Y3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsK
KyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7CisgICAgfTsK
KworICAgIENIRUNLX0VRKHRlc3QyKDUpLCAyKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA1KTsK
K30KICNlbmRpZgogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpA
QCAtNDQ3NSw2ICs0NjQ1LDExIEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lH
Tk9SRVNfVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwogICAgIFJVTih0ZXN0WG9yTm90V2l0aExlZnRT
aGlmdDY0KCkpOwogICAgIFJVTih0ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2NCgpKTsKICAgICBS
VU4odGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0
U3RvcmVQcmVQb3N0SW5kZXgzMigpKTsKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4NjQo
KSk7CisgICAgUlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2Fk
UHJlUG9zdEluZGV4NjQoKSk7CiAjZW5kaWYKIAogI2lmIENQVShBUk02NEUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IGQ1ZmMzMTY0NjU5NjhlYjczNzFi
NmZmMWNjNmY4MzE3ZmVjZGU1MmUuLjNiZWEwNzcwNTc3ZTdiZGNhNTU0YzhlZTA1YTdkZGQyYmU5
MDQ4M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC01
NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKICNpbmNsdWRlICJCM1Vz
ZUNvdW50cy5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1
ZUtleUlubGluZXMuaCIKICNpbmNsdWRlICJCM1ZhcmlhYmxlLmgiCiAjaW5jbHVkZSAiQjNWYXJp
YWJsZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNXYXNtQWRkcmVzc1ZhbHVlLmgiCkBAIC0yMDcsNyAr
MjA4LDggQEAgcHVibGljOgogCiAgICAgICAgICAgICBmaW5pc2hBcHBlbmRpbmdJbnN0cnVjdGlv
bnMobV9ibG9ja1RvQmxvY2tbYmxvY2tdKTsKICAgICAgICAgfQotICAgICAgICAKKworICAgICAg
ICBkZXRlY3RQcmVQb3N0SW5kZXhBZGRyZXNzKCk7CiAgICAgICAgIG1fYmxvY2tJbnNlcnRpb25T
ZXQuZXhlY3V0ZSgpOwogCiAgICAgICAgIEFpcjo6SW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCht
X2NvZGUpOwpAQCAtMjE3LDYgKzIxOSwxNzYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToK
KyAgICB2b2lkIGRldGVjdFByZVBvc3RJbmRleEFkZHJlc3MoKQorICAgIHsKKyAgICAgICAgaWYg
KG1fcHJvY2VkdXJlLm9wdExldmVsKCkgPCAyIHx8ICFpc0FSTTY0KCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBBaXI7CisKKyAgICAgICAgdWludDMyX3Qg
bG9jID0gMDsKKyAgICAgICAgSGFzaE1hcDxWYWx1ZSosIEluc3QqPiB2YWx1ZVRvSW5zdDsKKyAg
ICAgICAgSGFzaE1hcDxWYWx1ZSosIHVpbnQzMl90PiB2YWx1ZVRvTG9jOworICAgICAgICBIYXNo
TWFwPFRtcCwgVmVjdG9yPHVpbnQzMl90Pj4gdG1wVG9Mb2NzOworICAgICAgICBIYXNoTWFwPFZh
bHVlS2V5LCBWZWN0b3I8VmFsdWUqPj4gYmFzZU9mZnNldFRvQWRkcmVzc2VzOworICAgICAgICBI
YXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwcmVJbmRleENhbmRpZGF0ZXM7CisgICAgICAg
IEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvTWVtb3JpZXM7Cisg
ICAgICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleENhbmRpZGF0ZXM7
CisgICAgICAgIEluZGV4U2V0PFZhbHVlKj4gaWdub3JlZFZhbHVlczsKKworICAgICAgICBhdXRv
IHRyeVByZVBvc3RJbmRleCA9IFsmXSAoVmFsdWUqIHZhbHVlLCBJbnN0JiBpbnN0LCB1aW50MzJf
dCBsb2MpIHsKKyAgICAgICAgICAgIGF1dG8gdXBkYXRlVmFsaWRWYWx1ZSA9IFsmXSAoKSB7Cisg
ICAgICAgICAgICAgICAgdmFsdWVUb0luc3QuYWRkKHZhbHVlLCAmaW5zdCk7CisgICAgICAgICAg
ICAgICAgdmFsdWVUb0xvYy5hZGQodmFsdWUsIGxvYyk7CisgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgeworICAgICAgICAgICAgY2FzZSBMb2Fk
OiB7CisgICAgICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1v
cnlWYWx1ZT4oKTsKKworICAgICAgICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgorICAg
ICAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gYWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAg
ICAgICAgICAvLyAgICAgbWVtb3J5ID0gbG9hZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAg
ICAgLy8gUG9zdC1JbmRleCBQYXR0ZXJuOgorICAgICAgICAgICAgICAgIC8vICAgICBtZW1vcnkg
PSBsb2FkKGJhc2UsIDApCisgICAgICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBhZGQoYmFz
ZSwgb2Zmc2V0KQorICAgICAgICAgICAgICAgIGF1dG8gdHJ5UHJlUG9zdEluZGV4TWVtb3J5ID0g
WyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bj
b2RlRm9yVHlwZShNb3ZlV2l0aEluY3JlbWVudDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1v
cnktPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2Rl
LCBBcmc6OlByZUluZGV4LCBBcmc6OlRtcCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhbGlkVmFsdWUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtleShtZW1vcnktPmNoaWxkKDApLCBzdGF0
aWNfY2FzdDxpbnQ2NF90PihtZW1vcnktPm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYmFzZU9mZnNldFRvQWRkcmVzc2VzLmNvbnRhaW5zKGJhc2VPZmZzZXRrZXkpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogYWRkcmVzcyA6IGJhc2VP
ZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFzZU9mZnNldGtleSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByZUluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCBhZGRyZXNzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBiYXNlVG9NZW1vcmllcy5hZGQobWVtb3J5LT5jaGlsZCgwKSwg
VmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwor
ICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICB0cnlQcmVQb3N0SW5kZXhNZW1v
cnkoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY2FzZSBBZGQ6IHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbGVmdCA9IHZhbHVlLT5jaGls
ZCgwKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSB2YWx1ZS0+Y2hpbGQoMSk7CisK
KyAgICAgICAgICAgICAgICBhdXRvIHRyeVBvdGVudGlhbFBvc3RJbmRleEFkZHJlc3MgPSBbJl0g
KCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXJpZ2h0LT5oYXNJbnRQdHIoKSB8fCB2YWx1
ZS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSByaWdodC0+YXNJbnRQdHIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNf
Y2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShzbWFs
bE9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgIC8vIHNvIGZhciB0aGlzIEFkZCB2YWx1ZSBpcyBhIHZhbGlkIGFkZHJlc3MgY2FuZGlk
YXRlIGZvciBib3RoIHByZWZpeCBhbmQgcG9zdGZpeCBwYXR0ZXJuCisgICAgICAgICAgICAgICAg
ICAgIHVwZGF0ZVZhbGlkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVLZXkgYmFz
ZU9mZnNldGtleSA9IFZhbHVlS2V5KGxlZnQsIHN0YXRpY19jYXN0PGludDY0X3Q+KHNtYWxsT2Zm
c2V0KSk7CisgICAgICAgICAgICAgICAgICAgIGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5hZGQoYmFz
ZU9mZnNldGtleSwgVmVjdG9yPFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh2YWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlVG9NZW1vcmllcy5jb250YWlucyhsZWZ0
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDog
YmFzZVRvTWVtb3JpZXMuZ2V0KGxlZnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBv
c3RJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIHRyeVBvdGVudGlhbFBv
c3RJbmRleEFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIHVwZGF0ZUFuYWx5c2lzRGF0YSA9IFsm
XSAoSW5zdCYgaW5zdCkgeworICAgICAgICAgICAgKytsb2M7CisgICAgICAgICAgICB0cnlQcmVQ
b3N0SW5kZXgoaW5zdC5vcmlnaW4sIGluc3QsIGxvYyk7CisgICAgICAgICAgICBpbnN0LmZvckVh
Y2hBcmcoWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXJnLmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wJiB0bXApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRtcFRvTG9jcy5hZGQodG1wLCBWZWN0b3I8dWludDMyX3Q+KCkpLml0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQobG9jKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH07CisKKyAgICAgICAgZm9yIChCMzo6QmFz
aWNCbG9jayogYjNibG9jayA6IG1fcHJvY2VkdXJlLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAg
ICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9ibG9ja1RvQmxvY2tbYjNibG9ja10tPmluc3Rz
KCkpCisgICAgICAgICAgICAgICAgdXBkYXRlQW5hbHlzaXNEYXRhKGluc3QpOworICAgICAgICB9
CisKKyAgICAgICAgYXV0byBsYXN0VXNlTG9jYXRpb24gPSBbJl0gKFRtcCYgdG1wKSAtPiB1aW50
MzJfdCB7CisgICAgICAgICAgICByZXR1cm4gdG1wVG9Mb2NzLmNvbnRhaW5zKHRtcCkgPyB0bXBU
b0xvY3MuZ2V0KHRtcCkubGFzdCgpIDogMDsKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGF1
dG8gaXRyID0gcHJlSW5kZXhDYW5kaWRhdGVzLmJlZ2luKCk7IGl0ciAhPSBwcmVJbmRleENhbmRp
ZGF0ZXMuZW5kKCk7ICsraXRyKSB7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0g
aXRyLT5rZXk7CisgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IGl0ci0+dmFsdWU7CisgICAg
ICAgICAgICBWYWx1ZSogYmFzZSA9IGFkZHJlc3MtPmNoaWxkKDApOworICAgICAgICAgICAgaWYg
KGlnbm9yZWRWYWx1ZXMuY29udGFpbnMobWVtb3J5KSB8fCBpZ25vcmVkVmFsdWVzLmNvbnRhaW5z
KGFkZHJlc3MpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBUbXAm
IG1lbW9yeVRtcCA9IG1fdmFsdWVUb1RtcFttZW1vcnldOworICAgICAgICAgICAgVG1wJiBhZGRy
ZXNzVG1wID0gbV92YWx1ZVRvVG1wW2FkZHJlc3NdOworICAgICAgICAgICAgVG1wJiBiYXNlVG1w
ID0gbV92YWx1ZVRvVG1wW2Jhc2VdOworICAgICAgICAgICAgaWYgKCFtZW1vcnlUbXAgfHwgIWFk
ZHJlc3NUbXAgfHwgIWJhc2VUbXApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBpZiAobGFzdFVzZUxvY2F0aW9uKGFkZHJlc3NUbXApIDw9IHZhbHVlVG9Mb2MuZ2V0KG1l
bW9yeSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIGJhc2Ug
PSBYWFggICAgICAgICAgICAgICAgICAgICAgICBiYXNlID0gWFhYIAorICAgICAgICAgICAgLy8g
YWRkcmVzcyA9IGFkZChiYXNlLCBvZmZzZXQpICAtLT4gIGFkZHJlc3MgPSBiYXNlCisgICAgICAg
ICAgICAvLyBtZW1vcnkgPSBsb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVtb3J5ID0gbG9hZChh
ZGRyZXNzLCBwcmVmaXgob2Zmc2V0KSkKKyAgICAgICAgICAgIEluc3QqIGFkZHJlc3NJbnN0ID0g
dmFsdWVUb0luc3QuZ2V0KGFkZHJlc3MpOworICAgICAgICAgICAgYWRkcmVzc0luc3QtPnJlcGxh
Y2VJbmRlbnRpdHkocmVsYXhlZE1vdmVGb3JUeXBlKGFkZHJlc3MtPnR5cGUoKSksIGJhc2VUbXAs
IGFkZHJlc3NUbXApOworCisgICAgICAgICAgICBJbnN0KiBtZW1vcnlJbnN0ID0gdmFsdWVUb0lu
c3QuZ2V0KG1lbW9yeSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNv
ZGVGb3JUeXBlKE1vdmVXaXRoSW5jcmVtZW50MzIsIE1vdmVXaXRoSW5jcmVtZW50NjQsIG1lbW9y
eS0+dHlwZSgpKTsKKyAgICAgICAgICAgIG1lbW9yeUluc3QtPnJlcGxhY2VJbmRlbnRpdHkob3Bj
b2RlLCBBcmc6OnByZUluZGV4KGFkZHJlc3NUbXAsIG1lbW9yeS0+b2Zmc2V0KCkpLCBtZW1vcnlU
bXApOworCisgICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAgICAg
ICAgIGlnbm9yZWRWYWx1ZXMuYWRkKG1lbW9yeSk7CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IGJlZm9yZUxhc3RVc2VMb2NhdGlvbiA9IFsmXSAoVG1wJiB0bXApIC0+IHVpbnQzMl90IHsKKyAg
ICAgICAgICAgIGlmICh0bXBUb0xvY3MuY29udGFpbnModG1wKSkgeworICAgICAgICAgICAgICAg
IFZlY3Rvcjx1aW50MzJfdD4gbG9jcyA9IHRtcFRvTG9jcy5nZXQodG1wKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbG9jcy5zaXplKCkgPiAxID8gbG9jcy5hdChsb2NzLnNpemUoKSAtIDIpIDog
MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9OworCisg
ICAgICAgIGZvciAoYXV0byBpdHIgPSBwb3N0SW5kZXhDYW5kaWRhdGVzLmJlZ2luKCk7IGl0ciAh
PSBwb3N0SW5kZXhDYW5kaWRhdGVzLmVuZCgpOyArK2l0cikgeworICAgICAgICAgICAgTWVtb3J5
VmFsdWUqIG1lbW9yeSA9IGl0ci0+a2V5OworICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBp
dHItPnZhbHVlOworICAgICAgICAgICAgVmFsdWUqIGJhc2UgPSBhZGRyZXNzLT5jaGlsZCgwKTsK
KyAgICAgICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaWdub3Jl
ZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgVG1wJiBtZW1vcnlUbXAgPSBtX3ZhbHVlVG9UbXBbbWVtb3J5XTsKKyAgICAg
ICAgICAgIFRtcCYgYWRkcmVzc1RtcCA9IG1fdmFsdWVUb1RtcFthZGRyZXNzXTsKKyAgICAgICAg
ICAgIFRtcCYgYmFzZVRtcCA9IG1fdmFsdWVUb1RtcFtiYXNlXTsKKyAgICAgICAgICAgIGlmICgh
bWVtb3J5VG1wIHx8ICFhZGRyZXNzVG1wIHx8ICFiYXNlVG1wKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKGJlZm9yZUxhc3RVc2VMb2NhdGlvbihiYXNlVG1wKSA+
IHZhbHVlVG9Mb2MuZ2V0KG1lbW9yeSkgfHwgbGFzdFVzZUxvY2F0aW9uKGFkZHJlc3NUbXApIDw9
IHZhbHVlVG9Mb2MuZ2V0KGFkZHJlc3MpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAvLyBiYXNlID0gWFhYICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSA9IFhY
WAorICAgICAgICAgICAgLy8gbWVtb3J5ID0gbG9hZChiYXNlLCAwKSAgICAgICAtLT4gIG1lbW9y
eSA9IGxvYWQoYmFzZSwgcHJlZml4KG9mZnNldCkpCisgICAgICAgICAgICAvLyBhZGRyZXNzID0g
YWRkKGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IGJhc2UKKyAgICAgICAgICAgIEluc3Qq
IG1lbW9yeUluc3QgPSB2YWx1ZVRvSW5zdC5nZXQobWVtb3J5KTsKKyAgICAgICAgICAgIEFpcjo6
T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTW92ZVdpdGhJbmNyZW1lbnQzMiwgTW92
ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50eXBlKCkpOworICAgICAgICAgICAgVmFsdWU6Ok9m
ZnNldFR5cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4oYWRk
cmVzcy0+Y2hpbGQoMSktPmFzSW50UHRyKCkpOworICAgICAgICAgICAgbWVtb3J5SW5zdC0+cmVw
bGFjZUluZGVudGl0eShvcGNvZGUsIEFyZzo6cG9zdEluZGV4KGJhc2VUbXAsIHNtYWxsT2Zmc2V0
KSwgbWVtb3J5VG1wKTsKKworICAgICAgICAgICAgSW5zdCogYWRkcmVzc0luc3QgPSB2YWx1ZVRv
SW5zdC5nZXQoYWRkcmVzcyk7CisgICAgICAgICAgICBhZGRyZXNzSW5zdC0+cmVwbGFjZUluZGVu
dGl0eShyZWxheGVkTW92ZUZvclR5cGUoYWRkcmVzcy0+dHlwZSgpKSwgYmFzZVRtcCwgYWRkcmVz
c1RtcCk7CisKKyAgICAgICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKGFkZHJlc3MpOworICAgICAg
ICAgICAgaWdub3JlZFZhbHVlcy5hZGQobWVtb3J5KTsKKyAgICAgICAgfQorICAgIH0KKwogICAg
IGJvb2wgc2hvdWxkQ29weVByb3BhZ2F0ZShWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBz
d2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewpAQCAtNTQ2LDcgKzcxOCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gc2NhbGU7CiAg
ICAgfQotICAgIAorCiAgICAgLy8gVGhpcyB0dXJucyB0aGUgZ2l2ZW4gb3BlcmFuZCBpbnRvIGFu
IGFkZHJlc3MuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJ
c0xlZ2FsT2Zmc2V0PEludD4+CiAgICAgQXJnIGVmZmVjdGl2ZUFkZHIoVmFsdWUqIGFkZHJlc3Ms
IEludCBvZmZzZXQsIFdpZHRoIHdpZHRoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWVLZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5
LmgKaW5kZXggYjMzNDk3YWEyZGNiNDg1ZmY1ZjExYTMwY2NkY2UyYmYxMGEyOGE2ZC4uNDZmNDQw
YzUyZmQ0ZTBjZTlkZjA5NjU5OGNkNWNjMDZmMzk5NTFhMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZUtleS5oCkBAIC01Niw2ICs1Niw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQog
CisgICAgVmFsdWVLZXkoVmFsdWUqIGNoaWxkLCBpbnQ2NF90IHZhbHVlKTsKKwogICAgIFZhbHVl
S2V5KEtpbmQsIFR5cGUsIFZhbHVlKiBjaGlsZCk7CiAKICAgICBWYWx1ZUtleShLaW5kLCBUeXBl
LCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWVLZXlJbmxpbmVzLmgKaW5kZXggMTQxNThkNTAxZjczZmNiZjcwZDc1NzNmODAwZWIy
MGI2MmZiOWFhZi4uZTE4NjYxOTQ5MjYyMTQwNjZmZTg5ZTVjNzFiMmQwNzc4MDU0NzAxZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgKQEAgLTMzLDYg
KzMzLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCitpbmxpbmUgVmFs
dWVLZXk6OlZhbHVlS2V5KFZhbHVlKiBjaGlsZCwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICBtX2tp
bmQgPSBPb3BzOworICAgIG1fdHlwZSA9IFZvaWQ7CisgICAgdS5pbmRpY2VzWzBdID0gY2hpbGQt
PmluZGV4KCk7CisgICAgdS52YWx1ZSA9IHZhbHVlOworfQorCiBpbmxpbmUgVmFsdWVLZXk6OlZh
bHVlS2V5KEtpbmQga2luZCwgVHlwZSB0eXBlLCBWYWx1ZSogY2hpbGQpCiAgICAgOiBtX2tpbmQo
a2luZCkKICAgICAsIG1fdHlwZSh0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuY3BwCmluZGV4IDEwM2M2ZWNjYTNkMzE0YmI0ZWQ4YzAyYTRkMmYwMDljYTY0MWQwMDEuLjc3
ZWU4NDI1MTI0YjlkOGI4YzU4MmYzOWZmOTY5ZjYwZmQxNmNjMDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5jcHAKQEAgLTEzMCw2ICsxMzAsMTEgQEAgdW5zaWduZWQgQXJn
Ojpqc0hhc2goKSBjb25zdAogICAgICAgICByZXN1bHQgKz0gbV9iYXNlLmludGVybmFsVmFsdWUo
KTsKICAgICAgICAgcmVzdWx0ICs9IG1faW5kZXguaW50ZXJuYWxWYWx1ZSgpOwogICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFByZUluZGV4OgorICAgIGNhc2UgUG9zdEluZGV4OgorICAgICAgICBy
ZXN1bHQgKz0gbV9vZmZzZXQ7CisgICAgICAgIHJlc3VsdCArPSBtX2Jhc2UuaW50ZXJuYWxWYWx1
ZSgpOworICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YWNrOgogICAgICAgICByZXN1bHQgKz0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2NhbGUpOwogICAgICAgICByZXN1bHQgKz0gc3RhY2tT
bG90KCktPmluZGV4KCk7CkBAIC0xNjEsNyArMTY2LDcgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50ZigiJDB4JWxseCIsIHN0YXRpY19j
YXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4obV9vZmZzZXQpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgWmVyb1JlZzoKLSAgICAgICAgb3V0LnByaW50KCIlJXh6ciIpOworICAgICAgICBvdXQu
cHJpbnQoIiV4enIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2ltcGxlQWRkcjoKICAg
ICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOwpAQCAtMTgwLDYgKzE4NSwxMiBAQCB2
b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICAgICAgb3V0LnBy
aW50KCIsIiwgc2NhbGUoKSk7CiAgICAgICAgIG91dC5wcmludCgiKSIpOwogICAgICAgICByZXR1
cm47CisgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAi
LFByZSgkIiwgb2Zmc2V0KCksICIpKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQb3N0
SW5kZXg6CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIixQb3N0KCQiLCBvZmZzZXQo
KSwgIikpIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFN0YWNrOgogICAgICAgICBpZiAo
b2Zmc2V0KCkpCiAgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOwpAQCAtMjYxLDYgKzI3
MiwxMiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpLaW5kIGtp
bmQpCiAgICAgY2FzZSBBcmc6OkluZGV4OgogICAgICAgICBvdXQucHJpbnQoIkluZGV4Iik7CiAg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6UHJlSW5kZXg6CisgICAgICAgIG91dC5wcmlu
dCgiUHJlSW5kZXgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpQb3N0SW5kZXg6
CisgICAgICAgIG91dC5wcmludCgiUG9zdEluZGV4Iik7CisgICAgICAgIHJldHVybjsKICAgICBj
YXNlIEFyZzo6UmVsQ29uZDoKICAgICAgICAgb3V0LnByaW50KCJSZWxDb25kIik7CiAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCmluZGV4IGNlNWE0ZTcz
NzlhZDY0NDQ1ZjBjM2FiZDEyOWYzMjliOTQ3ZmU4MTIuLjFlYmY1MmEyMTcyYTNiMjkzZmI5ZWUy
NjI0ZWEwNTJhNGFjZTQ4ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaApA
QCAtNzcsNiArNzcsOCBAQCBwdWJsaWM6CiAgICAgICAgIFN0YWNrLAogICAgICAgICBDYWxsQXJn
LAogICAgICAgICBJbmRleCwKKyAgICAgICAgUHJlSW5kZXgsCisgICAgICAgIFBvc3RJbmRleCwK
IAogICAgICAgICAvLyBJbW1lZGlhdGUgb3BlcmFuZHMgdGhhdCBjdXN0b21pemUgdGhlIGJlaGF2
aW9yIG9mIGFuIG9wZXJhdGlvbi4gWW91IGNhbiB0aGluayBvZiB0aGVtIGFzCiAgICAgICAgIC8v
IHNlY29uZGFyeSBvcGNvZGVzLiBUaGV5IGFyZSBhbHdheXMgIlVzZSInZC4KQEAgLTY0OSw2ICs2
NTEsMzAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQXJnOjppbmRleChiYXNlLCBpbmRleCwg
c2NhbGUsIDApOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUg
PSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBBcmcgcHJlSW5kZXgoQWly
OjpUbXAgYmFzZSwgSW50IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgp
KTsKKyAgICAgICAgQVNTRVJUKGlzSW50OShpbmRleCkpOworICAgICAgICBBcmcgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9raW5kID0gUHJlSW5kZXg7CisgICAgICAgIHJlc3VsdC5tX2Jhc2Ug
PSBiYXNlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBpbmRleDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0g
VmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgQXJnIHBvc3RJbmRleChBaXI6
OlRtcCBiYXNlLCBJbnQgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkp
OworICAgICAgICBBU1NFUlQoaXNJbnQ5KGluZGV4KSk7CisgICAgICAgIEFyZyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQb3N0SW5kZXg7CisgICAgICAgIHJlc3VsdC5tX2Jhc2Ug
PSBiYXNlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBpbmRleDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKICAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogICAgIHsKICAgICAgICAgQXJnIHJlc3Vs
dDsKQEAgLTc5OSw2ICs4MjUsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09
IEluZGV4OwogICAgIH0KIAorICAgIGJvb2wgaXNQcmVJbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4ga2luZCgpID09IFByZUluZGV4OworICAgIH0KKworICAgIGJvb2wgaXNQb3N0
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBQb3N0SW5kZXg7
CisgICAgfQorCiAgICAgYm9vbCBpc01lbW9yeSgpIGNvbnN0CiAgICAgewogICAgICAgICBzd2l0
Y2ggKGtpbmQoKSkgewpAQCAtODA4LDYgKzg0NCw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBT
dGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBjYXNlIEluZGV4OgorICAgICAg
ICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtOTcyLDcgKzEwMTAsNyBAQCBwdWJsaWM6CiAKICAgICBBaXI6OlRtcCBiYXNlKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2ltcGxlQWRkciB8fCBraW5kKCkgPT0g
QWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBJbmRleCk7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2ltcGxlQWRkciB8fCBraW5kKCkgPT0gQWRkciB8
fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBJbmRleCB8fCBraW5k
KCkgPT0gUHJlSW5kZXggfHwga2luZCgpID09IFBvc3RJbmRleCk7CiAgICAgICAgIHJldHVybiBt
X2Jhc2U7CiAgICAgfQogCkBAIC05ODIsNyArMTAyMCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIGlmIChraW5kKCkgPT0gU3RhY2spCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VmFsdWU6Ok9mZnNldFR5cGU+KG1fc2NhbGUpOwotICAgICAgICBBU1NFUlQoa2luZCgpID09IEFk
ZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gQ2FsbEFyZyB8
fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2lu
ZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gQ2FsbEFyZyB8fCBraW5kKCkg
PT0gSW5kZXggfHwga2luZCgpID09IFByZUluZGV4IHx8IGtpbmQoKSA9PSBQb3N0SW5kZXgpOwog
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG1fb2Zmc2V0KTsK
ICAgICB9CiAKQEAgLTEwNDQsNiArMTA4Miw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBZGRy
OgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKICAgICAgICAgY2FzZSBJbmRleDoK
KyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAg
IGNhc2UgU3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBSZWxDb25k
OgpAQCAtMTA4MSw2ICsxMTIxLDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEFkZHI6CiAgICAg
ICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgogICAgICAgICBjYXNlIEluZGV4OgorICAgICAg
ICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgY2FzZSBT
dGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBjYXNlIEJpZ0ltbTogLy8gWWVz
LCB3ZSBhbGxvdyBCaWdJbW0gYXMgYSBkb3VibGUgaW1tZWRpYXRlLiBXZSB1c2UgdGhpcyBmb3Ig
aW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KQEAgLTEyMzcsNiArMTI3OSwyMiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQs
IHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgYm9vbCBp
c1ZhbGlkUHJlSW5kZXhGb3JtKEludCBvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoaXNBUk02
NCgpKQorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRTaWduZWRJbW05KG9mZnNldCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5
cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgYm9vbCBpc1Zh
bGlkUG9zdEluZGV4Rm9ybShJbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKGlzQVJNNjQo
KSkKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkU2lnbmVkSW1tOShvZmZzZXQpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgLy8gSWYgeW91IGRvbid0IHBhc3MgYSB3aWR0
aCB0aGVuIHRoaXMgb3B0aW1pc3RpY2FsbHkgYXNzdW1lcyB0aGF0IHlvdSdyZSB1c2luZyB0aGUg
cmlnaHQgd2lkdGguIEJ1dAogICAgIC8vIHRoZSB3aWR0aCBpcyByZWxldmFudCB0byB2YWxpZGl0
eSwgc28gcGFzc2luZyBhIG51bGwgd2lkdGggaXMgb25seSB1c2VmdWwgZm9yIGFzc2VydGlvbnMu
IERvbid0CiAgICAgLy8gcGFzcyBudWxsIHdpZHRocyB3aGVuIGNhc2NhZGluZyB0aHJvdWdoIEFy
Z3MgaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIQpAQCAtMTI2NSw2ICsxMzIzLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkQWRkckZvcm0ob2Zmc2V0KCksIHdpZHRo
KTsKICAgICAgICAgY2FzZSBJbmRleDoKICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkSW5kZXhG
b3JtKHNjYWxlKCksIG9mZnNldCgpLCB3aWR0aCk7CisgICAgICAgIGNhc2UgUHJlSW5kZXg6Cisg
ICAgICAgICAgICByZXR1cm4gaXNWYWxpZFByZUluZGV4Rm9ybShvZmZzZXQoKSk7CisgICAgICAg
IGNhc2UgUG9zdEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRQb3N0SW5kZXhGb3Jt
KG9mZnNldCgpKTsKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIFJlc0NvbmQ6
CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKQEAgLTEyODQsNiArMTM0Niw4IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBTaW1wbGVBZGRyOgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGNh
c2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBj
YXNlIFBvc3RJbmRleDoKICAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEluZGV4OgpAQCAtMTMyNiw2ICsxMzkwLDggQEAgcHVibGlj
OgogICAgICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAg
Y2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAg
IGNhc2UgUG9zdEluZGV4OgogICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1AsIGFy
Z1JvbGUgPT0gVXNlQWRkciA/IGFyZ1dpZHRoIDogcG9pbnRlcldpZHRoKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5kZXg6CkBAIC0xMzgzLDYgKzE0NDksMTggQEAgcHVi
bGljOgogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG1fb2Zmc2V0
KSwgbV9leHRlbmQpOwogICAgIH0KIAorICAgIE1hY3JvQXNzZW1ibGVyOjpQcmVJbmRleEFkZHJl
c3MgYXNQcmVJbmRleEFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUHJl
SW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNz
KG1fYmFzZS5ncHIoKSwgb2Zmc2V0KCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpQ
b3N0SW5kZXhBZGRyZXNzIGFzUG9zdEluZGV4QWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNQb3N0SW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6
UG9zdEluZGV4QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIG9mZnNldCgpKTsKKyAgICB9CisKICAgICBN
YWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBhc1JlbGF0aW9uYWxDb25kaXRpb24o
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzUmVsQ29uZCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKaW5kZXggZTgyNTgyYmI1ZWQwMjIyZmY3NDQzZWVhMjYy
MzgzNDE1OThhNTVlOC4uYTE1OWM4YjMyODNlZmUyMGIzMmNmYWRmMzFmZGQ4YjZmMWRiNGUwOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKQEAgLTkyLDYgKzkyLDE1IEBA
IHN0cnVjdCBJbnN0IHsKICAgICAgICAgYXBwZW5kKGFyZ3VtZW50cy4uLik7CiAgICAgfQogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgcmVwbGFjZUluZGVu
dGl0eShLaW5kIGtpbmQsIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgewor
ICAgICAgICB0aGlzLT5raW5kID0ga2luZDsKKyAgICAgICAgYXJncy5jbGVhcigpOworICAgICAg
ICBhcmdzLmFwcGVuZChhcmcpOworICAgICAgICBhcHBlbmQoYXJndW1lbnRzLi4uKTsKKyAgICB9
CisKICAgICAvLyBOb3RlIHRoYXQgdGhlc2UgZnVuY3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25z
dCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0aGVtIGZvciB0aGluZ3MgdGhhdAogICAgIC8vIGVk
aXQgSVIuIElSIGlzIG1lYW50IHRvIGJlIGVkaXRlZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3Vu
ZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5b3UncmUKICAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3
cm9uZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
CmluZGV4IDY2MWVhZGQyMzczYzU0YTRiYmE5NDdhNTRiZGEyNTU3YmRiOGFlNGEuLjQ5ZmVkMWFh
YTE5YWY2ZGRjZDkyYzMzOWY3MGI1NzZkMGQzOTVkZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwpAQCAtNjYxLDYgKzY2MSwxMiBAQCB4ODZf
NjQ6IFN3YXA2NCBVRDpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKICAgICBUbXAsIEFkZHIK
IAorYXJtNjQ6IE1vdmVXaXRoSW5jcmVtZW50NjQgVUQ6Rzo2NCwgRDpHOjY0CisgICAgUHJlSW5k
ZXgsIFRtcCBhcyBsb2FkNjQKKyAgICBQb3N0SW5kZXgsIFRtcCBhcyBsb2FkNjQKKyAgICBUbXAs
IFByZUluZGV4IGFzIHN0b3JlNjQKKyAgICBUbXAsIFBvc3RJbmRleCBhcyBzdG9yZTY0CisKIE1v
dmUzMiBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCBhcyB6ZXJvRXh0ZW5kMzJUb1dvcmQK
ICAgICBBZGRyLCBUbXAgYXMgbG9hZDMyCkBAIC02NzEsNiArNjc3LDEyIEBAIE1vdmUzMiBVOkc6
MzIsIFpEOkc6MzIKICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZTMyCiAgICAgeDg2OiBJbW0s
IEluZGV4IGFzIHN0b3JlMzIKIAorYXJtNjQ6IE1vdmVXaXRoSW5jcmVtZW50MzIgVUQ6RzozMiwg
WkQ6RzozMgorICAgIFByZUluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgUG9zdEluZGV4LCBUbXAg
YXMgbG9hZDMyCisgICAgVG1wLCBQcmVJbmRleCBhcyBzdG9yZTMyCisgICAgVG1wLCBQb3N0SW5k
ZXggYXMgc3RvcmUzMgorCiAjIFRoaXMgaXMgZm9yIG1vdmluZyBiZXR3ZWVuIHNwaWxsIHNsb3Rz
LgogTW92ZTMyIFU6RzozMiwgWkQ6RzozMiwgUzpHOjMyCiAgICAgQWRkciwgQWRkciwgVG1wCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3Iu
cmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKaW5k
ZXggMzc0MGVmZGJkZDE0NmEzN2Y2ZWRlOWRkYmMyM2RkYmEwM2IwNzY0Ni4uZjFiZjFhNDZjZmM4
ODllYzE5MzQ2ZjJjMDZiN2NmNTBmOWUzZGUwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgpAQCAtMjI5LDcgKzIyOSw3IEBAIGRlZiBp
c0dGKHRva2VuKQogZW5kCiAKIGRlZiBpc0tpbmQodG9rZW4pCi0gICAgdG9rZW4gPX4gL1xBKChU
bXApfChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KFplcm9SZWcpfChTaW1wbGVB
ZGRyKXwoQWRkcil8KEV4dGVuZGVkT2Zmc2V0QWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0Nv
bmQpfChEb3VibGVDb25kKXwoU3RhdHVzQ29uZCkpXFovCisgICAgdG9rZW4gPX4gL1xBKChUbXAp
fChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KFplcm9SZWcpfChTaW1wbGVBZGRy
KXwoQWRkcil8KEV4dGVuZGVkT2Zmc2V0QWRkcil8KEluZGV4KXwoUHJlSW5kZXgpfChQb3N0SW5k
ZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KIGVu
ZAogCiBkZWYgaXNBcmNoKHRva2VuKQpAQCAtMzAzLDcgKzMwMyw3IEBAIGNsYXNzIFBhcnNlcgog
CiAgICAgZGVmIGNvbnN1bWVLaW5kCiAgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwotICAg
ICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJ
bW02NCwgWmVyb1JlZywgVG1wLCBTaW1wbGVBZGRyLCBBZGRyLCBFeHRlbmRlZE9mZnNldEFkZHIs
IEluZGV4LCBSZWxDb25kLCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVu
bGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJ
bW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgWmVyb1JlZywgVG1wLCBTaW1wbGVBZGRyLCBB
ZGRyLCBFeHRlbmRlZE9mZnNldEFkZHIsIEluZGV4LCBQcmVJbmRleCwgUG9zdEluZGV4LCBSZWxD
b25kLCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVubGVzcyBpc0tpbmQo
cmVzdWx0KQogICAgICAgICBhZHZhbmNlCiAgICAgICAgIHJlc3VsdAogICAgIGVuZApAQCAtOTI5
LDYgKzkyOSwxMiBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAg
ICB3aGVuICJJbmRleCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6
aXNWYWxpZEluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5zY2FsZSgpLCBhcmdzWyN7aW5kZXh9XS5v
ZmZzZXQoKSwgI3thcmcud2lkdGhDb2RlfSkpIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIHdoZW4gIlByZUluZGV4
IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkUHJlSW5k
ZXhGb3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpKSkiCisgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgd2hlbiAiUG9z
dEluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlk
UG9zdEluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSkpIgorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgogICAgICAgICAgICAgICAgIHdo
ZW4gIkJpZ0ltbSIKICAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAg
ICAgIHdoZW4gIlJlc0NvbmQiCkBAIC0xMjM1LDYgKzEyNDEsMTAgQEAgd3JpdGVIKCJPcGNvZGVH
ZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRl
eH1dLmFzQWRkcmVzcygpIgogICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4IgogICAgICAgICAg
ICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAg
ICAgICAgICAgICAgIHdoZW4gIlByZUluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnBy
aW50ICJhcmdzWyN7aW5kZXh9XS5hc1ByZUluZGV4QWRkcmVzcygpIgorICAgICAgICAgICAgICAg
IHdoZW4gIlBvc3RJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sj
e2luZGV4fV0uYXNQb3N0SW5kZXhBZGRyZXNzKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVs
Q29uZCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNS
ZWxhdGlvbmFsQ29uZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCBjNzAzMmVjMDg0ZGRmZGQ5MzVlNTUyN2ZhYWU5
MzU2ODE5ODQ4MTc5Li43MjFlYjNhZGQ2Mjc0OGUyZmIwMmRkZjQyNTU3Y2M1OWQ1ZDg4MGViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0xMTQwLDQgKzExNDAsOSBAQCB2b2lkIGFk
ZENvcHlUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoKT4+PiYpOwogCiBib29sIHNob3VsZFJ1bihjb25zdCBjaGFyKiBmaWx0ZXIsIGNvbnN0IGNo
YXIqIHRlc3ROYW1lKTsKIAordm9pZCB0ZXN0TG9hZFByZUluZGV4MzIoKTsKK3ZvaWQgdGVzdExv
YWRQcmVJbmRleDY0KCk7Cit2b2lkIHRlc3RMb2FkUG9zdEluZGV4MzIoKTsKK3ZvaWQgdGVzdExv
YWRQb3N0SW5kZXg2NCgpOworCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzXzMuY3BwCmluZGV4IDRjNTJhZGE5Y2M0MDJkZGU1Mzk4OGNjOGYyZjVl
OWUwZGRlMmUxMWMuLmI4OWIwMTlmZDhiZjVmMDcxMmY0NjY4NjUwZjYxY2RmODFkYTRjODMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcApAQCAtMjgsNiArMjgsMzAwIEBACiAK
ICNpZiBFTkFCTEUoQjNfSklUKQogCisKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCkKK3sKKyAg
ICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsK
KworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9
OworICAgIGludDMyX3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BU
ZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAg
ICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50MzIpOworICAgIFZhcmlhYmxlKiBw
ID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIFJvb3RfQmxvY2sKKyAgICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpCisg
ICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9
IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgMCk7CisgICAg
cm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBy
LCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVl
bnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExv
b3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIy
ID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBs
b29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigp
LCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRl
c3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxv
b3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29u
ZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKwor
ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcDMg
PSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gcjMgPSByMiArIGxvYWQo
cDMpCisgICAgLy8gVXBzaWxvbihyMywgXnIyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVl
KiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAy
LCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQpKTsK
KyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9y
aWdpbigpLCBwLCBwMyk7CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwgcDMpKTsKKyAgICBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMyk7Cisg
ICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwg
RnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7CisKKyAg
ICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4
U1NBKHByb2MpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgaWYg
KGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICIjNF0hIik7
CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50MzJfdCB7CisgICAgICAgIGludDMyX3Qg
ciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9ICorK3B0cjsK
KyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGludm9rZTxpbnQzMl90
PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKwordm9p
ZCB0ZXN0TG9hZFByZUluZGV4NjQoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRM
ZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50NjRfdCBudW1zW10gPSB7IDEs
IDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50NjRfdCogcHRyID0gbnVtczsK
KworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
QmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayog
ZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJp
YWJsZShJbnQ2NCk7CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsK
KworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0g
MAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNp
bG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJv
YywgT3JpZ2luKCksIEludDY0LCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIz
OjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAg
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoK
KyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEw
IGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BU
ZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHAp
OworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJv
dmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZy
ZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocDMs
IF5wMikKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMykKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIp
CisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBWYWx1ZSog
cjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwg
bG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdp
bigpLCBwMykpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsK
KworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6
CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIHIyKTsKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsK
KyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1Vz
ZXNJbnN0cnVjdGlvbigqY29kZSwgIiM4XSEiKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAt
PiBpbnQ2NF90IHsKKyAgICAgICAgaW50NjRfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAx
MCkKKyAgICAgICAgICAgIHIgKz0gKisrcHRyOworICAgICAgICByZXR1cm4gcjsKKyAgICB9Owor
CisgICAgQ0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCit2b2lkIHRlc3RMb2FkUG9zdEluZGV4MzIoKQorewor
ICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJu
OworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEw
IH07CisgICAgaW50MzJfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9v
cFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKwor
ICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQzMik7CisgICAgVmFyaWFibGUq
IHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikK
KyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIx
ID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCAwKTsKKyAg
ICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCks
IHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVx
dWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
TG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8g
cjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9
IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2lu
KCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRl
c3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29w
VGVzdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAg
bG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBj
b25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOwor
CisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyBy
MyA9IHIyICsgbG9hZChwMikKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocjMs
IF5yMikKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFs
dWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwg
cjIsIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBP
cmlnaW4oKSwgcDIpKTsKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFs
dWU+KHByb2MsIE9yaWdpbigpLCA0KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsK
KyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigp
LCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9u
ZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsKKwor
ICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBm
aXhTU0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBp
ZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM0
Iik7CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50MzJfdCB7CisgICAgICAgIGludDMy
X3QgciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9ICpwdHIr
KzsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGludm9rZTxpbnQz
Ml90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKwor
dm9pZCB0ZXN0TG9hZFBvc3RJbmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIz
T3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVtc1tdID0g
eyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDY0X3QqIHB0ciA9IG51
bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOwor
ICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxv
Y2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRk
VmFyaWFibGUoSW50NjQpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2
NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAgICAvLyBy
MSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpCisgICAgLy8gcDEgPSBhZGRyCisgICAgLy8g
VXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFwcGVuZEludENvbnN0YW50
KHByb2MsIE9yaWdpbigpLCBJbnQ2NCwgMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxl
VmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAgVmFsdWUqIHAxID0g
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9j
LCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisK
KyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9CbG9jaworICAgIC8vIGxv
b3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkKKyAgICAvLyBpZiByMiA+
PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlh
YmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBWYWx1ZSogcDIgPSBs
b29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigp
LCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDY0VmFs
dWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9s
VmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUp
LCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcjMgPSByMiArIGxvYWQocDIpCisgICAgLy8g
cDMgPSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gVXBzaWxvbihwMywg
XnAyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksIHAyKSk7CisgICAgVmFsdWUq
IHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIs
IGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCkpOwor
ICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3Jp
Z2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHBy
b2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0
KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmVfQmxvY2sKKyAgICAvLyBk
b25lOgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7CisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5
KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NBKHByb2MpOworCisgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hl
Y2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJdLCAjOCIpOworCisgICAgYXV0byB0ZXN0ID0gWyZd
ICgpIC0+IGludDY0X3QgeworICAgICAgICBpbnQ2NF90IHIgPSAwOworICAgICAgICB3aGlsZSAo
ciA8IDEwKQorICAgICAgICAgICAgciArPSAqcHRyKys7CisgICAgICAgIHJldHVybiByOworICAg
IH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50NjRfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKKwogdm9pZCB0ZXN0SW5zZXJ0U2lnbmVkQml0
ZmllbGRJblplcm8zMigpCiB7CiAgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2
ZWwoKSA8IDIpCkBAIC0zNjk3LDYgKzM5OTEsMTEgQEAgdm9pZCBhZGRTaHJUZXN0cyhjb25zdCBj
aGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiAg
ICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMCkpOwogICAgIFJVTih0ZXN0WlNo
ckFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDEpKTsKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZm
ZmZmZmZmLCA2MykpOworCisgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXgzMigpKTsKKyAgICBSVU4o
dGVzdExvYWRQcmVJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDMyKCkpOwor
ICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDY0KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwCmluZGV4IDYzZTI2Njc4ODUyMDE4YTc2ODBjYTVmMDcxNDY5NjgxMDU4ODRiM2IuLjY5
YmI2YjJiZTgxODcwYjU5ODMzMzY3YWYyNjc1YjdmNGVmMDU2ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcApAQCAtMjMzLDggKzIz
Myw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gaml0V3JpdGVUaHVua0dlbmVyYXRvCiAgICAgaml0LnJldCgpOwogCiAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5sb2FkNjQo
eDEsIFBvc3RJbmRleCg4KSwgeDYpOwotICAgIGppdC5zdG9yZTY0KHg2LCB4MywgUG9zdEluZGV4
KDgpKTsKKyAgICBqaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgx
LCA4KSwgeDYpOworICAgIGppdC5zdG9yZTY0KHg2LCBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4
QWRkcmVzcyh4MywgOCkpOwogICAgIHNtYWxsQ29weS5saW5rKCZqaXQpOwogICAgIGppdC5icmFu
Y2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgy
KS5saW5rVG8obG9jYWwwLCAmaml0KTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsb2NhbDIg
PSBqaXQuYnJhbmNoQWRkNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoOCks
IHgyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434567</attachid>
            <date>2021-07-29 13:52:34 -0700</date>
            <delta_ts>2021-07-29 14:19:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210729155232.patch</filename>
            <type>text/plain</type>
            <size>48815</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi5iOTJhZGMwODE3MjQ2NTMx
NTA3ZjNmNzc5ODg0OWJmNmNkOGMzM2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NSBAQAorMjAyMS0wNy0yOSAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyODA0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzOjpQcmVJbmRleEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzOjpQ
b3N0SW5kZXhBZGRyZXNzKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6c3RvcmUzMik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAg
ICAgKEpTQzo6dGVzdFN0b3JlUHJlUG9zdEluZGV4MzIpOgorICAgICAgICAoSlNDOjp0ZXN0U3Rv
cmVQcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJlUG9zdEluZGV4MzIp
OgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJbmRleDY0KToKKyAgICAgICAgKiBiMy9C
M0dlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgorICAgICAg
ICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpjYW5vbmljYWxpemVJbmNyZW1lbnRhbEFkcmVzcyk6Cisg
ICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOgorICAgICAgICAqIGIzL0IzVmFsdWVLZXku
aDoKKyAgICAgICAgKiBiMy9CM1ZhbHVlS2V5SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWVLZXk6OlZhbHVlS2V5KToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpqc0hhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmR1bXAgY29uc3QpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyQXJnLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cHJl
SW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnBvc3RJbmRleCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNQcmVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNQb3N0SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmlzTWVtb3J5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpvZmZzZXQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1AgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzRlAgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRQ
cmVJbmRleEZvcm0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRQb3N0SW5k
ZXhGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkRm9ybSBjb25zdCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmFzUHJlSW5kZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojphc1Bvc3RJbmRleEFkZHJlc3MgY29uc3QpOgorICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUu
b3Bjb2RlczoKKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYjoKKyAgICAgICAg
KiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0
TG9hZFByZUluZGV4MzIpOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDY0KToKKyAgICAgICAg
KHRlc3RMb2FkUG9zdEluZGV4MzIpOgorICAgICAgICAodGVzdExvYWRQb3N0SW5kZXg2NCk6Cisg
ICAgICAgIChhZGRTaHJUZXN0cyk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpqaXRXcml0ZVRodW5rR2VuZXJhdG9yKToKKwogMjAyMS0wNy0y
NiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBUZW1w
b3JhbCB0byBmZWF0dXJlcy5qc29uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCmluZGV4IDNkMTk0OWE0MDc4NWQ5
OWNhNjE1OTVhYWIwNGJlNmYxZDBkOTZiYTMuLjIzNTRjNDUzNjhjN2MwZDVjZTkwMThhY2ZmMjg0
YzRhMGEwNDMxYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCkBAIC0yNDUsNiArMjQ1LDM0IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogICAgIH07CiAKKyAgICAvLyBQcmVJbmRleEFkZHJlc3M6CisgICAgLy8K
KyAgICAvLyBEZXNjcmliZXMgYW4gYWRkcmVzcyB3aXRoIGJhc2UgYWRkcmVzcyBhbmQgcHJlLWlu
Y3JlbWVudC9kZWNyZW1lbnQgaW5kZXguCisgICAgc3RydWN0IFByZUluZGV4QWRkcmVzcyB7Cisg
ICAgICAgIFByZUluZGV4QWRkcmVzcyhSZWdpc3RlcklEIGJhc2UsIGludCBpbmRleCkKKyAgICAg
ICAgICAgIDogYmFzZShiYXNlKQorICAgICAgICAgICAgLCBpbmRleChpbmRleCkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBiYXNlOworICAgICAgICBpbnQgaW5k
ZXg7CisgICAgfTsKKworICAgIC8vIFBvc3RJbmRleEFkZHJlc3M6CisgICAgLy8KKyAgICAvLyBE
ZXNjcmliZXMgYW4gYWRkcmVzcyB3aXRoIGJhc2UgYWRkcmVzcyBhbmQgcG9zdC1pbmNyZW1lbnQv
ZGVjcmVtZW50IGluZGV4LgorICAgIHN0cnVjdCBQb3N0SW5kZXhBZGRyZXNzIHsKKyAgICAgICAg
UG9zdEluZGV4QWRkcmVzcyhSZWdpc3RlcklEIGJhc2UsIGludCBpbmRleCkKKyAgICAgICAgICAg
IDogYmFzZShiYXNlKQorICAgICAgICAgICAgLCBpbmRleChpbmRleCkKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBiYXNlOworICAgICAgICBpbnQgaW5kZXg7Cisg
ICAgfTsKKwogICAgIC8vIEFic29sdXRlQWRkcmVzczoKICAgICAvLwogICAgIC8vIERlc2NyaWJl
cyBhbiBtZW1vcnkgb3BlcmFuZCBnaXZlbiBieSBhIHBvaW50ZXIuICBGb3IgcmVndWxhciBsb2Fk
ICYgc3RvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggZmUzMGQ5Yzg0ZDM1MjdlZWIxNmZjZDA2ZTExNWZjNjhk
NjkwOTBmZC4uMmE5MTJkMGRkMjY2MjZiZDc0ZTEwM2JlZjk2NWYyYmFkZmNlMGJkMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0LmgKQEAgLTE0NDUsOSArMTQ0NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWQ8NjQ+KGFk
ZHJlc3MsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgbG9hZDY0KFJlZ2lzdGVySUQgc3JjLCBQ
b3N0SW5kZXggc2ltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgbG9hZDY0KFByZUluZGV4
QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVy
Lmxkcjw2ND4oZGVzdCwgc3JjLCBzaW1tKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDY0Pihk
ZXN0LCBzcmMuYmFzZSwgUHJlSW5kZXgoc3JjLmluZGV4KSk7CisgICAgfQorCisgICAgdm9pZCBs
b2FkNjQoUG9zdEluZGV4QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLmJhc2UsIFBvc3RJbmRleChzcmMuaW5k
ZXgpKTsKICAgICB9CiAKICAgICBEYXRhTGFiZWwzMiBsb2FkNjRXaXRoQWRkcmVzc09mZnNldFBh
dGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQpAQCAtMTU0NCw2ICsxNTQ5LDE2
IEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDwzMj4oYWRkcmVzcywgZGVzdCk7CiAgICAgfQogCisg
ICAgdm9pZCBsb2FkMzIoUHJlSW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihkZXN0LCBzcmMuYmFzZSwgUHJlSW5kZXgo
c3JjLmluZGV4KSk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoUG9zdEluZGV4QWRkcmVzcyBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcjwzMj4o
ZGVzdCwgc3JjLmJhc2UsIFBvc3RJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKICAgICBEYXRh
TGFiZWwzMiBsb2FkMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVn
aXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CkBA
IC0xNzMzLDcgKzE3NDgsMTcgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5hZGQ8NjQ+
KG1lbW9yeVRlbXBSZWdpc3RlciwgbWVtb3J5VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBp
bmRleEV4dGVuZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOwogICAgICAgICBtX2Fzc2Vt
Ymxlci5zdHI8NjQ+KHNyYywgYWRkcmVzcy5iYXNlLCBtZW1vcnlUZW1wUmVnaXN0ZXIpOwogICAg
IH0KLSAgICAKKworICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUHJlSW5kZXhBZGRy
ZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgZGVzdC5i
YXNlLCBQcmVJbmRleChkZXN0LmluZGV4KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTY0KFJl
Z2lzdGVySUQgc3JjLCBQb3N0SW5kZXhBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5zdHI8NjQ+KHNyYywgZGVzdC5iYXNlLCBQb3N0SW5kZXgoZGVzdC5pbmRleCkpOwor
ICAgIH0KKwogICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgY29uc3Qgdm9pZCogYWRk
cmVzcykKICAgICB7CiAgICAgICAgIHN0b3JlPDY0PihzcmMsIGFkZHJlc3MpOwpAQCAtMTc3Nywx
MSArMTgwMiw2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmU2NChkYXRhVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzKTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCwgUG9zdEluZGV4IHNpbW0pCi0gICAgewotICAgICAgICBtX2Fzc2VtYmxlci5z
dHI8NjQ+KHNyYywgZGVzdCwgc2ltbSk7Ci0gICAgfQotICAgIAogICAgIERhdGFMYWJlbDMyIHN0
b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJl
c3MpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKQEAgLTE4NzksNiAr
MTg5OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdpc3RlciwgYWRk
cmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBQcmVJbmRl
eEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjwzMj4oc3JjLCBk
ZXN0LmJhc2UsIFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3Jl
MzIoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLnN0cjwzMj4oc3JjLCBkZXN0LmJhc2UsIFBvc3RJbmRleChkZXN0LmluZGV4
KSk7CisgICAgfQorCiAgICAgRGF0YUxhYmVsMzIgc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0
Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIERhdGFM
YWJlbDMyIGxhYmVsKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci90ZXN0bWFzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rl
c3RtYXNtLmNwcAppbmRleCBmMjJiZmZjZTE1NTRiMDJjMjI2YzIxNDkyYWIwNjdiYWIzOGM0MGI1
Li43MDdhYmIwNTJiMzgzMjgxODU5ODQ1YzJjNTk0OWM5Y2M3NWJmMDExIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtMjIxMiw2ICsyMjEyLDE3
NiBAQCB2b2lkIHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKQogICAgICAgICB9
CiAgICAgfQogfQorCit2b2lkIHRlc3RTdG9yZVByZVBvc3RJbmRleDMyKCkKK3sKKyAgICBpbnQz
Ml90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAgIGludHB0cl90IGFkZHIgPSBiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KCZudW1zWzFdKTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDMy
X3QpOworCisgICAgYXV0byB0ZXN0MSA9IFsmXSAoaW50MzJfdCBzcmMpIHsKKyAgICAgICAgYXV0
byBzdG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAg
ZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKisrcDEgPSA0OyBy
ZXR1cm4gcDE7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjphcmd1bWVudEdQUjAs
IENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgaW5k
ZXgpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShq
aXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJu
IGludm9rZTxpbnRwdHJfdD4oc3RvcmUsIHNyYywgYWRkcik7CisgICAgfTsKKworICAgIGludDMy
X3QqIHAxID0gYml0d2lzZV9jYXN0PGludDMyX3QqPih0ZXN0MSg0KSk7CisgICAgQ0hFQ0tfRVEo
KnAxLCA0KTsKKyAgICBDSEVDS19FUSgqLS1wMSwgbnVtc1sxXSk7CisKKyAgICBhdXRvIHRlc3Qy
ID0gWyZdIChpbnQzMl90IHNyYykgeworICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShq
aXQpOworCisgICAgICAgICAgICAvLyAqcDIrKyA9IDU7IHJldHVybiBwMjsKKyAgICAgICAgICAg
IGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQb3N0SW5k
ZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGpp
dC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0
LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3Rv
cmUsIHNyYywgYWRkcik7CisgICAgfTsKKworICAgIGludDMyX3QqIHAyID0gYml0d2lzZV9jYXN0
PGludDMyX3QqPih0ZXN0Mig1KSk7CisgICAgQ0hFQ0tfRVEoKnAyLCA0KTsKKyAgICBDSEVDS19F
USgqLS1wMiwgNSk7Cit9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9zdEluZGV4NjQoKQoreworICAg
IGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50cHRyX3QgYWRkciA9IGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMyX3QgaW5kZXggPSBzaXplb2Yo
aW50NjRfdCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQ2NF90IHNyYykgeworICAgICAg
ICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
ICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAqKytwMSA9
IDQ7IHJldHVybiBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OmFyZ3VtZW50
R1BSMCwgQ0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIx
LCBpbmRleCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxv
Z3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAg
aW50NjRfdCogcDEgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHRlc3QxKDQpKTsKKyAgICBDSEVD
S19FUSgqcDEsIDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1zWzFdKTsKKworICAgIGF1dG8g
dGVzdDIgPSBbJl0gKGludDY0X3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxl
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xv
Z3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsgcmV0dXJuIHAyOworICAgICAg
ICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlBv
c3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAg
ICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAg
ICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90
PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50NjRfdCogcDIgPSBiaXR3aXNl
X2Nhc3Q8aW50NjRfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19FUSgqcDIsIDQpOworICAgIENI
RUNLX0VRKCotLXAyLCA1KTsKK30KKwordm9pZCB0ZXN0TG9hZFByZVBvc3RJbmRleDMyKCkKK3sK
KyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAgIGludDMyX3QgaW5kZXggPSBz
aXplb2YoaW50MzJfdCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQzMl90IHJlcGxhY2Up
IHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7
CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAv
LyByZXMgPSAqKytwMTsgKnAxID0gNDsgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIGppdC5sb2Fk
MzIoQ0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBp
bmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNp
dEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4obG9hZCwgJm51bXNb
MV0pOworICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0MSg0KSwgMyk7CisgICAgQ0hFQ0tfRVEo
bnVtc1syXSwgNCk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQzMl90IHJlcGxhY2UpIHsK
KyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Cisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyBy
ZXMgPSAqcDIrKzsgKnAyID0gNTsgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIGppdC5sb2FkMzIo
Q0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5k
ZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVwbGFjZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BS
SW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAg
ICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7Cisg
ICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KGxvYWQsICZudW1zWzFd
KTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVzdDIoNSksIDIpOworICAgIENIRUNLX0VRKG51
bXNbMl0sIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKQoreworICAgIGlu
dDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVvZihp
bnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkgeworICAg
ICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9
ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2Fs
bEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4KSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRkcmVz
cyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86
OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBl
bWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAg
ICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7Cisg
ICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1zWzJd
LCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkgeworICAgICAg
ICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9ICpw
MisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhl
bHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW02NChyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJlc3Mo
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjph
cmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4obG9hZCwgJm51bXNbMV0pOworICAg
IH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwg
NSk7Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02
NCkKQEAgLTQ0NzUsNiArNDY0NSwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpIFdU
Rl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdFhvck5vdFdpdGhM
ZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0NjQoKSk7CiAg
ICAgUlVOKHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CisKKyAgICBSVU4o
dGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9yZVByZVBvc3RJbmRl
eDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDMyKCkpOworICAgIFJVTih0ZXN0
TG9hZFByZVBvc3RJbmRleDY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUoQVJNNjRFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCmluZGV4IGNkNDRhMjkxNTc3NzQwZDIzOTkz
MDhjMjYyYTc5Mjc1OTVmZTdiNDMuLjlhM2I5NWZlNjZkM2JiYWVmMWE3ZDU0MjM5OTlkYmIwYzJk
YTg1ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKQEAgLTExOSw2
ICsxMTksOSBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCiAgICAg
bW92ZUNvbnN0YW50cyhwcm9jZWR1cmUpOwogICAgIGVsaW1pbmF0ZURlYWRDb2RlKHByb2NlZHVy
ZSk7CiAKKyAgICBpZiAocHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMikKKyAgICAgICAgY2Fub25p
Y2FsaXplSW5jcmVtZW50YWxBZHJlc3MocHJvY2VkdXJlKTsKKwogICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgcnVuIHB1cmVDU0UgaGVyZSB0byBjbGVhbiB1cCBzb21lIHBsYXRmb3JtIHNwZWNpZmlj
IGNoYW5nZXMgZnJvbSB0aGUgcHJldmlvdXMgcGhhc2VzLgogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4NzMKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBkNWZjMzE2NDY1OTY4ZWI3MzcxYjZmZjFjYzZmODMx
N2ZlY2RlNTJlLi5iNDU4MGQ4YjE1MzU1NmYyMDk2MTA1NmU4NDlkNjFlZDM0MGIxYzJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcApAQCAtNTQsNiArNTQsNyBA
QAogI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCiAjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIK
ICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQjNWYXJpYWJsZS5oIgogI2luY2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5o
IgogI2luY2x1ZGUgIkIzV2FzbUFkZHJlc3NWYWx1ZS5oIgpAQCAtMjA3LDcgKzIwOCw3IEBAIHB1
YmxpYzoKIAogICAgICAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKG1fYmxvY2tU
b0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgbV9ibG9ja0lu
c2VydGlvblNldC5leGVjdXRlKCk7CiAKICAgICAgICAgQWlyOjpJbnNlcnRpb25TZXQgaW5zZXJ0
aW9uU2V0KG1fY29kZSk7CkBAIC01NDYsNyArNTQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBzY2FsZTsKICAgICB9Ci0gICAg
CisKICAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBvcGVyYW5kIGludG8gYW4gYWRkcmVzcy4K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZz
ZXQ8SW50Pj4KICAgICBBcmcgZWZmZWN0aXZlQWRkcihWYWx1ZSogYWRkcmVzcywgSW50IG9mZnNl
dCwgV2lkdGggd2lkdGgpCkBAIC0yNTU5LDYgKzI1NjAsNDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gUHJlLUluZGV4IENhbm9uaWNhbCBGb3JtOgorICAgICAgICAgICAgLy8gICAgIGFk
ZHJlc3MgPSBhZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IGxv
YWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBDYW5vbmljYWwgRm9y
bToKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBsb2FkKGJhc2UsIDApCisgICAgICAgICAg
ICAvLyAgICAgYWRkcmVzcyA9IGFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICBhdXRvIHRy
eUFwcGVuZEluY3JlbWVudEFkZHJlc3MgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShNb3ZlV2l0aEluY3JlbWVu
dDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1vcnktPnR5cGUoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6UHJlSW5kZXgsIEFyZzo6VG1wKSB8fCAh
bV9pbmRleCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIFZhbHVlKiBhZGRyZXNzID0gbV9ibG9jay0+YXQobV9pbmRleCAtIDEpOworICAgICAgICAg
ICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSAhPSBBZGQgfHwgYWRkcmVzcy0+dHlwZSgpICE9
IEludDY0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgaWYgKGFkZHJlc3MtPmNoaWxkKDApICE9IG1lbW9yeS0+bGFzdENoaWxkKCkgfHwgIWFkZHJl
c3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IGFkZHJlc3MtPmNoaWxkKDEp
LT5hc0ludFB0cigpOworICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zm
c2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7CisgICAgICAgICAg
ICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkUG9zdEluZGV4
Rm9ybShzbWFsbE9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgICAgIEFyZyBpbmNyZW1lbnRBcmcgPSBBcmcoKTsKKyAgICAgICAgICAgICAg
ICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc21hbGxP
ZmZzZXQgPT0gbWVtb3J5LT5vZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY3Jl
bWVudEFyZyA9IEFyZzo6cHJlSW5kZXgodG1wKGFkZHJlc3MpLCBzbWFsbE9mZnNldCk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudEFyZyA9IEFy
Zzo6cG9zdEluZGV4KHRtcChhZGRyZXNzKSwgc21hbGxPZmZzZXQpOworCisgICAgICAgICAgICAg
ICAgaWYgKGluY3JlbWVudEFyZykgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhl
ZE1vdmVGb3JUeXBlKGFkZHJlc3MtPnR5cGUoKSksIHRtcChhZGRyZXNzLT5jaGlsZCgwKSksIHRt
cChhZGRyZXNzKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGluY3JlbWVu
dEFyZywgdG1wKG1lbW9yeSkpOworICAgICAgICAgICAgICAgICAgICBtX2xvY2tlZC5hZGQoYWRk
cmVzcyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICBpZiAodHJ5QXBwZW5kSW5jcmVtZW50QWRkcmVzcygpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBraW5k
LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3Ry
ZW5ndGguY3BwCmluZGV4IDIyODBmZDc3MTI1MmU3MjYwZjY4NTA1MDkyZmQ1NDNjZmUwNjE4NTcu
LmEzZjU1NWQ2MjA1NjA4NGI2NzQxNGMxNzE0NjIxZmE4ODc1NmNiN2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKQEAgLTQyLDYgKzQyLDcgQEAK
ICNpbmNsdWRlICJCM1ZhbHVlS2V5SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVz
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KIApAQCAtNDEyLDYgKzQxMywxMTYgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICBi
b29sIGNhbm9uaWNhbGl6ZUluY3JlbWVudEFkZHJlc3MoKQorICAgIHsKKyAgICAgICAgdXNpbmcg
QXJnID0gQWlyOjpBcmc7CisKKyAgICAgICAgRG9taW5hdG9ycyYgZG9taW5hdG9ycyA9IG1fcHJv
Yy5kb21pbmF0b3JzKCk7CisgICAgICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGJhY2t3YXJkc0Rv
bWluYXRvcnMgPSBtX3Byb2MuYmFja3dhcmRzRG9taW5hdG9ycygpOworICAgICAgICBIYXNoTWFw
PFZhbHVlS2V5LCBWZWN0b3I8VmFsdWUqPj4gYmFzZU9mZnNldFRvQWRkcmVzc2VzOworICAgICAg
ICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwcmVJbmRleENhbmRpZGF0ZXM7CisgICAg
ICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvTWVtb3JpZXM7
CisgICAgICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleENhbmRpZGF0
ZXM7CisgICAgICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCB1bnNpZ25lZD4gbWVtb3J5VG9JbmRl
eDsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiBpZ25vcmVkVmFsdWVzOworCisgICAgICAgIGF1
dG8gdHJ5UHJlUG9zdEluZGV4ID0gWyZdIChWYWx1ZSogdmFsdWUpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ6IHsKKyAgICAg
ICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigp
OworCisgICAgICAgICAgICAgICAgLy8gUHJlLUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAg
ICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgICAgIC8v
ICAgICAuLi4KKyAgICAgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZz
ZXQpCisgICAgICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBQYXR0ZXJuOgorICAgICAgICAgICAg
ICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCisgICAgICAgICAgICAgICAgLy8gICAg
IC4uLgorICAgICAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgICAgICBhdXRvIHRyeVByZVBvc3RJbmRleE1lbW9yeSA9IFsmXSAoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobWVtb3J5LT5jaGls
ZCgwKSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4obWVtb3J5LT5vZmZzZXQoKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zm
c2V0a2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGFkZHJl
c3MgOiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuZ2V0KGJhc2VPZmZzZXRrZXkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgYWRk
cmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVRvTWVtb3JpZXMuYWRkKG1lbW9yeS0+
Y2hpbGQoMCksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQo
bWVtb3J5KTsKKyAgICAgICAgICAgICAgICAgICAgbWVtb3J5VG9JbmRleC5hZGQobWVtb3J5LCBt
X2luZGV4KTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgdHJ5UHJlUG9z
dEluZGV4TWVtb3J5KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGNhc2UgQWRkOiB7CisgICAgICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSB2
YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIHJpZ2h0ID0gdmFsdWUtPmNo
aWxkKDEpOworCisgICAgICAgICAgICAgICAgYXV0byB0cnlQb3RlbnRpYWxQb3N0SW5kZXhBZGRy
ZXNzID0gWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyaWdodC0+aGFzSW50UHRy
KCkgfHwgdmFsdWUtPnR5cGUoKSAhPSBJbnQ2NCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmlnaHQtPmFzSW50
UHRyKCk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0
ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNWYWxpZFBvc3RJbmRl
eEZvcm0oc21hbGxPZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAvLyBzbyBmYXIgdGhpcyBBZGQgdmFsdWUgaXMgYSB2YWxpZCBhZGRy
ZXNzIGNhbmRpZGF0ZSBmb3IgYm90aCBwcmVmaXggYW5kIHBvc3RmaXggcGF0dGVybgorICAgICAg
ICAgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobGVmdCwgc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oc21hbGxPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgYmFz
ZU9mZnNldFRvQWRkcmVzc2VzLmFkZChiYXNlT2Zmc2V0a2V5LCBWZWN0b3I8VmFsdWUqPigpKS5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJh
c2VUb01lbW9yaWVzLmNvbnRhaW5zKGxlZnQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9NZW1vcmllcy5nZXQobGVmdCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAgICAgdHJ5UG90ZW50aWFsUG9zdEluZGV4QWRkcmVzcygpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAg
ICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAgICAgICAgICBmb3IgKG1faW5kZXggPSAwOyBt
X2luZGV4IDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4KQorICAgICAgICAgICAgICAgIHRyeVBy
ZVBvc3RJbmRleChibG9jay0+YXQobV9pbmRleCkpOworICAgICAgICB9CisKKyAgICAgICAgYXV0
byBjb250cm9sRXF1aXZhbGVudCA9IFsmXSAoVmFsdWUqIHYxLCBWYWx1ZSogdjIpIC0+IGJvb2wg
eworICAgICAgICAgICAgcmV0dXJuIChkb21pbmF0b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYy
LT5vd25lcikgJiYgYmFja3dhcmRzRG9taW5hdG9ycy5kb21pbmF0ZXModjItPm93bmVyLCB2MS0+
b3duZXIpKQorICAgICAgICAgICAgICAgIHx8IChkb21pbmF0b3JzLmRvbWluYXRlcyh2Mi0+b3du
ZXIsIHYxLT5vd25lcikgJiYgYmFja3dhcmRzRG9taW5hdG9ycy5kb21pbmF0ZXModjEtPm93bmVy
LCB2Mi0+b3duZXIpKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGRldGVjdCA9IFsmXSAo
SGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gY2FuZGlkYXRlcykgeworICAgICAgICAgICAg
Zm9yIChhdXRvIGl0ciA9IGNhbmRpZGF0ZXMuYmVnaW4oKTsgaXRyICE9IGNhbmRpZGF0ZXMuZW5k
KCk7ICsraXRyKSB7CisgICAgICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGl0ci0+
a2V5OworICAgICAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gaXRyLT52YWx1ZTsKKyAgICAg
ICAgICAgICAgICBpZiAoaWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRW
YWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRk
cmVzcykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAg
VmFsdWUqIG5ld0FkZHJlc3MgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1lbW9yeVRv
SW5kZXguZ2V0KG1lbW9yeSksIEFkZCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQo
MCksIGFkZHJlc3MtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5yZXBsYWNl
V2l0aElkZW50aXR5KG5ld0FkZHJlc3MpOworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
LmV4ZWN1dGUobWVtb3J5LT5vd25lcik7CisKKyAgICAgICAgICAgICAgICBpZ25vcmVkVmFsdWVz
LmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChtZW1vcnkp
OworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIC8vIGFkZHJlc3MgPSBBZGQo
YmFzZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3QWRkcmVzcykKKyAgICAg
ICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gIG5ld0FkZHJlc3MgPSBBZGQo
YmFzZSwgb2Zmc2V0KQorICAgICAgICAvLyBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAg
ICAgbWVtb3J5ID0gTG9hZChhZGRyZXNzLCBvZmZzZXQpCisgICAgICAgIGRldGVjdChwcmVJbmRl
eENhbmRpZGF0ZXMpOworCisgICAgICAgIC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkgICAgICAg
ICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgLy8gLi4uICAgICAg
ICAgICAgICAgICAgICAgICAgICAtLT4gIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKKyAgICAgICAg
Ly8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgIGFkZHJlc3MgPSBJZGVudGl0eShu
ZXdBZGRyZXNzKQorICAgICAgICBkZXRlY3QocG9zdEluZGV4Q2FuZGlkYXRlcyk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKwogICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIGJv
b2wgcmVzdWx0ID0gZmFsc2U7CkBAIC0zMDQ2LDYgKzMxNTcsMTMgQEAgcHJpdmF0ZToKIAogfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKK2Jvb2wgY2Fub25pY2FsaXplSW5jcmVtZW50YWxBZHJl
c3MoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jLCAi
Y2Fub25pY2FsaXplSW5jcmVtZW50YWxBZHJlc3MiKTsKKyAgICBSZWR1Y2VTdHJlbmd0aCByZWR1
Y2VTdHJlbmd0aChwcm9jKTsKKyAgICByZXR1cm4gcmVkdWNlU3RyZW5ndGguY2Fub25pY2FsaXpl
SW5jcmVtZW50QWRkcmVzcygpOworfQorCiBib29sIHJlZHVjZVN0cmVuZ3RoKFByb2NlZHVyZSYg
cHJvYykKIHsKICAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywgInJlZHVjZVN0cmVuZ3Ro
Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0
aC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguaAppbmRleCAx
YWJiODBmNjQzNDk3ZDkzZGE3MzdkMWE4Y2RhNzg1YjM3NDViMjZlLi5kNTk1M2UyMjMyZTk4ZjAx
NGQzOWVmY2I3ZTdmMzhkNGViNTZjMDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1JlZHVjZVN0cmVuZ3RoLmgKQEAgLTQxLDYgKzQxLDggQEAgY2xhc3MgUHJvY2VkdXJlOwogCiBK
U19FWFBPUlRfUFJJVkFURSBib29sIHJlZHVjZVN0cmVuZ3RoKFByb2NlZHVyZSYpOwogCitKU19F
WFBPUlRfUFJJVkFURSBib29sIGNhbm9uaWNhbGl6ZUluY3JlbWVudGFsQWRyZXNzKFByb2NlZHVy
ZSYpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaAppbmRleCBiMzM0OTdhYTJkY2I0
ODVmZjVmMTFhMzBjY2RjZTJiZjEwYTI4YTZkLi40NmY0NDBjNTJmZDRlMGNlOWRmMDk2NTk4Y2Q1
Y2MwNmYzOTk1MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZUtleS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgKQEAgLTU2
LDYgKzU2LDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICBWYWx1ZUtleShWYWx1ZSog
Y2hpbGQsIGludDY0X3QgdmFsdWUpOworCiAgICAgVmFsdWVLZXkoS2luZCwgVHlwZSwgVmFsdWUq
IGNoaWxkKTsKIAogICAgIFZhbHVlS2V5KEtpbmQsIFR5cGUsIFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJ
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaApp
bmRleCAxNDE1OGQ1MDFmNzNmY2JmNzBkNzU3M2Y4MDBlYjIwYjYyZmI5YWFmLi5lMTg2NjE5NDky
NjIxNDA2NmZlODllNWM3MWIyZDA3NzgwNTQ3MDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaApAQCAtMzMsNiArMzMsMTQgQEAKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKK2lubGluZSBWYWx1ZUtleTo6VmFsdWVLZXkoVmFsdWUq
IGNoaWxkLCBpbnQ2NF90IHZhbHVlKQoreworICAgIG1fa2luZCA9IE9vcHM7CisgICAgbV90eXBl
ID0gVm9pZDsKKyAgICB1LmluZGljZXNbMF0gPSBjaGlsZC0+aW5kZXgoKTsKKyAgICB1LnZhbHVl
ID0gdmFsdWU7Cit9CisKIGlubGluZSBWYWx1ZUtleTo6VmFsdWVLZXkoS2luZCBraW5kLCBUeXBl
IHR5cGUsIFZhbHVlKiBjaGlsZCkKICAgICA6IG1fa2luZChraW5kKQogICAgICwgbV90eXBlKHR5
cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKaW5kZXggMTAzYzZlY2Nh
M2QzMTRiYjRlZDhjMDJhNGQyZjAwOWNhNjQxZDAwMS4uNzdlZTg0MjUxMjRiOWQ4YjhjNTgyZjM5
ZmY5NjlmNjBmZDE2Y2MwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNw
cApAQCAtMTMwLDYgKzEzMCwxMSBAQCB1bnNpZ25lZCBBcmc6OmpzSGFzaCgpIGNvbnN0CiAgICAg
ICAgIHJlc3VsdCArPSBtX2Jhc2UuaW50ZXJuYWxWYWx1ZSgpOwogICAgICAgICByZXN1bHQgKz0g
bV9pbmRleC5pbnRlcm5hbFZhbHVlKCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJlSW5k
ZXg6CisgICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAgIHJlc3VsdCArPSBtX29mZnNldDsKKyAg
ICAgICAgcmVzdWx0ICs9IG1fYmFzZS5pbnRlcm5hbFZhbHVlKCk7CisgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9zY2FsZSk7CiAgICAgICAgIHJlc3VsdCArPSBzdGFja1Nsb3QoKS0+aW5kZXgoKTsKQEAgLTE2
MSw3ICsxNjYsNyBAQCB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAg
ICAgICBvdXQucHJpbnRmKCIkMHglbGx4Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIHVuc2lnbmVk
PihtX29mZnNldCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBaZXJvUmVnOgotICAgICAg
ICBvdXQucHJpbnQoIiUleHpyIik7CisgICAgICAgIG91dC5wcmludCgiJXh6ciIpOwogICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBTaW1wbGVBZGRyOgogICAgICAgICBvdXQucHJpbnQoIigiLCBi
YXNlKCksICIpIik7CkBAIC0xODAsNiArMTg1LDEyIEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgpKTsKICAg
ICAgICAgb3V0LnByaW50KCIpIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByZUluZGV4
OgorICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIsUHJlKCQiLCBvZmZzZXQoKSwgIikp
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgb3V0LnBy
aW50KCIoIiwgYmFzZSgpLCAiLFBvc3QoJCIsIG9mZnNldCgpLCAiKSkiKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGlmIChvZmZzZXQoKSkKICAgICAgICAgICAg
IG91dC5wcmludChvZmZzZXQoKSk7CkBAIC0yNjEsNiArMjcyLDEyIEBAIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6OktpbmQga2luZCkKICAgICBjYXNlIEFyZzo6SW5k
ZXg6CiAgICAgICAgIG91dC5wcmludCgiSW5kZXgiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQXJnOjpQcmVJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQcmVJbmRleCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBcmc6OlBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQ
b3N0SW5kZXgiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpSZWxDb25kOgogICAg
ICAgICBvdXQucHJpbnQoIlJlbENvbmQiKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgKaW5kZXggY2U1YTRlNzM3OWFkNjQ0NDVmMGMzYWJkMTI5ZjMy
OWI5NDdmZTgxMi4uMWViZjUyYTIxNzJhM2IyOTNmYjllZTI2MjRlYTA1MmE0YWNlNDhkMCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCkBAIC03Nyw2ICs3Nyw4IEBAIHB1Ymxp
YzoKICAgICAgICAgU3RhY2ssCiAgICAgICAgIENhbGxBcmcsCiAgICAgICAgIEluZGV4LAorICAg
ICAgICBQcmVJbmRleCwKKyAgICAgICAgUG9zdEluZGV4LAogCiAgICAgICAgIC8vIEltbWVkaWF0
ZSBvcGVyYW5kcyB0aGF0IGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3Igb2YgYW4gb3BlcmF0aW9uLiBZ
b3UgY2FuIHRoaW5rIG9mIHRoZW0gYXMKICAgICAgICAgLy8gc2Vjb25kYXJ5IG9wY29kZXMuIFRo
ZXkgYXJlIGFsd2F5cyAiVXNlIidkLgpAQCAtNjQ5LDYgKzY1MSwzMCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBBcmc6OmluZGV4KGJhc2UsIGluZGV4LCBzY2FsZSwgMCk7CiAgICAgfQogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0
PEludD4+CisgICAgc3RhdGljIEFyZyBwcmVJbmRleChBaXI6OlRtcCBiYXNlLCBJbnQgaW5kZXgp
CisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNJ
bnQ5KGluZGV4KSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQg
PSBQcmVJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IGluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJ
bnQ+PgorICAgIHN0YXRpYyBBcmcgcG9zdEluZGV4KEFpcjo6VG1wIGJhc2UsIEludCBpbmRleCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc0lu
dDkoaW5kZXgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IFBvc3RJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IGluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAg
IHN0YXRpYyBBcmcgcmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24pCiAgICAgewogICAgICAgICBBcmcgcmVzdWx0OwpAQCAtNzk5LDYgKzgyNSwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CiAgICAgfQogCisgICAg
Ym9vbCBpc1ByZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
UHJlSW5kZXg7CisgICAgfQorCisgICAgYm9vbCBpc1Bvc3RJbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4ga2luZCgpID09IFBvc3RJbmRleDsKKyAgICB9CisKICAgICBib29sIGlz
TWVtb3J5KCkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CkBAIC04MDgs
NiArODQ0LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENh
bGxBcmc6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAg
ICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05NzIsNyArMTAxMCw3IEBAIHB1
YmxpYzoKIAogICAgIEFpcjo6VG1wIGJhc2UoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBTaW1wbGVBZGRyIHx8IGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRl
bmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTaW1wbGVBZGRyIHx8IGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9m
ZnNldEFkZHIgfHwga2luZCgpID09IEluZGV4IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8fCBraW5k
KCkgPT0gUG9zdEluZGV4KTsKICAgICAgICAgcmV0dXJuIG1fYmFzZTsKICAgICB9CiAKQEAgLTk4
Miw3ICsxMDIwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGtpbmQoKSA9PSBTdGFj
aykKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9z
Y2FsZSk7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5k
ZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRB
ZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCB8fCBraW5kKCkgPT0g
UHJlSW5kZXggfHwga2luZCgpID09IFBvc3RJbmRleCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9vZmZzZXQpOwogICAgIH0KIApAQCAtMTA0NCw2ICsx
MDgyLDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5k
ZWRPZmZzZXRBZGRyOgogICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIFByZUluZGV4
OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgY2FzZSBTdGFjazoKICAgICAgICAg
Y2FzZSBDYWxsQXJnOgogICAgICAgICBjYXNlIFJlbENvbmQ6CkBAIC0xMDgxLDYgKzExMjEsOCBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNl
dEFkZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAg
ICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENh
bGxBcmc6CiAgICAgICAgIGNhc2UgQmlnSW1tOiAvLyBZZXMsIHdlIGFsbG93IEJpZ0ltbSBhcyBh
IGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBz
LgpAQCAtMTIzNyw2ICsxMjc5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNM
ZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBib29sIGlzVmFsaWRQcmVJbmRleEZvcm0oSW50
IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICByZXR1
cm4gaXNWYWxpZFNpZ25lZEltbTkob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdh
bE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBib29sIGlzVmFsaWRQb3N0SW5kZXhGb3JtKEludCBv
ZmZzZXQpCisgICAgeworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgcmV0dXJu
IGlzVmFsaWRTaWduZWRJbW05KG9mZnNldCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKICAgICAvLyBJZiB5b3UgZG9uJ3QgcGFzcyBhIHdpZHRoIHRoZW4gdGhpcyBvcHRpbWlzdGlj
YWxseSBhc3N1bWVzIHRoYXQgeW91J3JlIHVzaW5nIHRoZSByaWdodCB3aWR0aC4gQnV0CiAgICAg
Ly8gdGhlIHdpZHRoIGlzIHJlbGV2YW50IHRvIHZhbGlkaXR5LCBzbyBwYXNzaW5nIGEgbnVsbCB3
aWR0aCBpcyBvbmx5IHVzZWZ1bCBmb3IgYXNzZXJ0aW9ucy4gRG9uJ3QKICAgICAvLyBwYXNzIG51
bGwgd2lkdGhzIHdoZW4gY2FzY2FkaW5nIHRocm91Z2ggQXJncyBpbiB0aGUgaW5zdHJ1Y3Rpb24g
c2VsZWN0b3IhCkBAIC0xMjY1LDYgKzEzMjMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0
dXJuIGlzVmFsaWRBZGRyRm9ybShvZmZzZXQoKSwgd2lkdGgpOwogICAgICAgICBjYXNlIEluZGV4
OgogICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRJbmRleEZvcm0oc2NhbGUoKSwgb2Zmc2V0KCks
IHdpZHRoKTsKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpc1Zh
bGlkUHJlSW5kZXhGb3JtKG9mZnNldCgpKTsKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CisgICAg
ICAgICAgICByZXR1cm4gaXNWYWxpZFBvc3RJbmRleEZvcm0ob2Zmc2V0KCkpOwogICAgICAgICBj
YXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVD
b25kOgpAQCAtMTI4NCw2ICsxMzQ2LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIFNpbXBsZUFk
ZHI6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6
CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAg
ICAgICAgZnVuY3RvcihtX2Jhc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
SW5kZXg6CkBAIC0xMzI2LDYgKzEzOTAsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU2ltcGxl
QWRkcjoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRk
cjoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAg
ICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCwgYXJnUm9sZSA9PSBVc2VBZGRyID8gYXJn
V2lkdGggOiBwb2ludGVyV2lkdGgoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBJbmRleDoKQEAgLTEzODMsNiArMTQ0OSwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9vZmZzZXQpLCBtX2V4dGVuZCk7CiAgICAgfQog
CisgICAgTWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzcyBhc1ByZUluZGV4QWRkcmVzcygp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNQcmVJbmRleCgpKTsKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyOjpQcmVJbmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBvZmZzZXQo
KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MgYXNQb3N0
SW5kZXhBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Bvc3RJbmRleCgp
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKG1fYmFz
ZS5ncHIoKSwgb2Zmc2V0KCkpOworICAgIH0KKwogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uIGFzUmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaXNSZWxDb25kKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyT3Bjb2RlLm9wY29kZXMKaW5kZXggNjYxZWFkZDIzNzNjNTRhNGJiYTk0N2E1NGJkYTI1NTdi
ZGI4YWU0YS4uNDlmZWQxYWFhMTlhZjZkZGNkOTJjMzM5ZjcwYjU3NmQwZDM5NWRkZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC02NjEs
NiArNjYxLDEyIEBAIHg4Nl82NDogU3dhcDY0IFVEOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRt
cAogICAgIFRtcCwgQWRkcgogCithcm02NDogTW92ZVdpdGhJbmNyZW1lbnQ2NCBVRDpHOjY0LCBE
Okc6NjQKKyAgICBQcmVJbmRleCwgVG1wIGFzIGxvYWQ2NAorICAgIFBvc3RJbmRleCwgVG1wIGFz
IGxvYWQ2NAorICAgIFRtcCwgUHJlSW5kZXggYXMgc3RvcmU2NAorICAgIFRtcCwgUG9zdEluZGV4
IGFzIHN0b3JlNjQKKwogTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wIGFzIHpl
cm9FeHRlbmQzMlRvV29yZAogICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKQEAgLTY3MSw2ICs2Nzcs
MTIgQEAgTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIHg4NjogSW1tLCBBZGRyIGFzIHN0b3Jl
MzIKICAgICB4ODY6IEltbSwgSW5kZXggYXMgc3RvcmUzMgogCithcm02NDogTW92ZVdpdGhJbmNy
ZW1lbnQzMiBVRDpHOjMyLCBaRDpHOjMyCisgICAgUHJlSW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAg
ICBQb3N0SW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBUbXAsIFByZUluZGV4IGFzIHN0b3JlMzIK
KyAgICBUbXAsIFBvc3RJbmRleCBhcyBzdG9yZTMyCisKICMgVGhpcyBpcyBmb3IgbW92aW5nIGJl
dHdlZW4gc3BpbGwgc2xvdHMuCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyLCBTOkc6MzIKICAgICBB
ZGRyLCBBZGRyLCBUbXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
b3Bjb2RlX2dlbmVyYXRvci5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2Rl
X2dlbmVyYXRvci5yYgppbmRleCAzNzQwZWZkYmRkMTQ2YTM3ZjZlZGU5ZGRiYzIzZGRiYTAzYjA3
NjQ2Li5mMWJmMWE0NmNmYzg4OWVjMTkzNDZmMmMwNmI3Y2Y1MGY5ZTNkZTBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCkBAIC0yMjks
NyArMjI5LDcgQEAgZGVmIGlzR0YodG9rZW4pCiBlbmQKIAogZGVmIGlzS2luZCh0b2tlbikKLSAg
ICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwo
WmVyb1JlZyl8KFNpbXBsZUFkZHIpfChBZGRyKXwoRXh0ZW5kZWRPZmZzZXRBZGRyKXwoSW5kZXgp
fChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KKyAgICB0
b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoWmVy
b1JlZyl8KFNpbXBsZUFkZHIpfChBZGRyKXwoRXh0ZW5kZWRPZmZzZXRBZGRyKXwoSW5kZXgpfChQ
cmVJbmRleCl8KFBvc3RJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCl8KFN0
YXR1c0NvbmQpKVxaLwogZW5kCiAKIGRlZiBpc0FyY2godG9rZW4pCkBAIC0zMDMsNyArMzAzLDcg
QEAgY2xhc3MgUGFyc2VyCiAKICAgICBkZWYgY29uc3VtZUtpbmQKICAgICAgICAgcmVzdWx0ID0g
dG9rZW4uc3RyaW5nCi0gICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgQmln
SW1tLCBCaXRJbW0sIEJpdEltbTY0LCBaZXJvUmVnLCBUbXAsIFNpbXBsZUFkZHIsIEFkZHIsIEV4
dGVuZGVkT2Zmc2V0QWRkciwgSW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9y
IFN0YXR1c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIHBhcnNlRXJyb3Io
IkV4cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0LCBaZXJvUmVnLCBU
bXAsIFNpbXBsZUFkZHIsIEFkZHIsIEV4dGVuZGVkT2Zmc2V0QWRkciwgSW5kZXgsIFByZUluZGV4
LCBQb3N0SW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1c0NvbmQp
IikgdW5sZXNzIGlzS2luZChyZXN1bHQpCiAgICAgICAgIGFkdmFuY2UKICAgICAgICAgcmVzdWx0
CiAgICAgZW5kCkBAIC05MjksNiArOTI5LDEyIEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikg
ewogICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4IgogICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImlmICghQXJnOjppc1ZhbGlkSW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLnNjYWxlKCks
IGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpLCAje2FyZy53aWR0aENvZGV9KSkiCiAgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAg
ICAgd2hlbiAiUHJlSW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFB
cmc6OmlzVmFsaWRQcmVJbmRleEZvcm0oYXJnc1sje2luZGV4fV0ub2Zmc2V0KCkpKSIKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAg
ICAgICAgICB3aGVuICJQb3N0SW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
aWYgKCFBcmc6OmlzVmFsaWRQb3N0SW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpKSki
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCiAg
ICAgICAgICAgICAgICAgd2hlbiAiQmlnSW1tIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlbENv
bmQiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKQEAgLTEyMzUsNiArMTI0MSwxMCBA
QCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
cmludCAiYXJnc1sje2luZGV4fV0uYXNBZGRyZXNzKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAi
SW5kZXgiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFz
QmFzZUluZGV4KCkiCisgICAgICAgICAgICAgICAgd2hlbiAiUHJlSW5kZXgiCisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUHJlSW5kZXhBZGRyZXNzKCki
CisgICAgICAgICAgICAgICAgd2hlbiAiUG9zdEluZGV4IgorICAgICAgICAgICAgICAgICAgICBv
dXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Bvc3RJbmRleEFkZHJlc3MoKSIKICAgICAgICAg
ICAgICAgICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJh
cmdzWyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKICAgICAgICAgICAgICAgICB3
aGVuICJSZXNDb25kIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IGM3MDMyZWMwODRk
ZGZkZDkzNWU1NTI3ZmFhZTkzNTY4MTk4NDgxNzkuLjcyMWViM2FkZDYyNzQ4ZTJmYjAyZGRmNDI1
NTdjYzU5ZDVkODgwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTExNDAsNCAr
MTE0MCw5IEBAIHZvaWQgYWRkQ29weVRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVm
UHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+Jik7CiAKIGJvb2wgc2hvdWxkUnVuKGNvbnN0IGNoYXIq
IGZpbHRlciwgY29uc3QgY2hhciogdGVzdE5hbWUpOwogCit2b2lkIHRlc3RMb2FkUHJlSW5kZXgz
MigpOwordm9pZCB0ZXN0TG9hZFByZUluZGV4NjQoKTsKK3ZvaWQgdGVzdExvYWRQb3N0SW5kZXgz
MigpOwordm9pZCB0ZXN0TG9hZFBvc3RJbmRleDY0KCk7CisKICNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKaW5kZXggNGM1MmFkYTljYzQw
MmRkZTUzOTg4Y2M4ZjJmNWU5ZTBkZGUyZTExYy4uYjg5YjAxOWZkOGJmNWYwNzEyZjQ2Njg2NTBm
NjFjZGY4MWRhNGM4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
M18zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCkBAIC0y
OCw2ICsyOCwzMDAgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKwordm9pZCB0ZXN0TG9hZFBy
ZUluZGV4MzIoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikK
KyAgICAgICAgcmV0dXJuOworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUs
IDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50MzJfdCogcHRyID0gbnVtczsKKworICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
QmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayog
bG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2Mu
YWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQzMik7
CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVw
c2lsb24ocjEsIF5yMikKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIp
CisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCks
IEludDMyLCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6
OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdp
bigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAs
IE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9
IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQor
ICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmRO
ZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVl
KiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3Jp
Z2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFu
Y2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9j
ayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlf
QmxvY2sKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAv
LyByMyA9IHIyICsgbG9hZChwMykKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gZ290
byBsb29wCisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
QWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgNCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9k
eS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHktPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBwMykpOwor
ICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3Jp
Z2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0
dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHIyKTsKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0
ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bigqY29kZSwgIiM0XSEiKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQzMl90IHsK
KyAgICAgICAgaW50MzJfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAg
ICAgIHIgKz0gKisrcHRyOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tf
RVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0
ZXN0KCkpOworfQorCit2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpCit7CisgICAgaWYgKE9wdGlv
bnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQ2
NF90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQ2
NF90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayog
cm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUq
IHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRk
VmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Js
b2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKQorICAgIC8vIHAxID0g
YWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBl
bmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50NjQsIDApOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAg
IFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFi
bGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290LT5hcHBl
bmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhs
b29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxv
Y2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisg
ICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAg
VmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6
R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmRO
ZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50
ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHAzID0gcDIgKyAxCisg
ICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAgIC8vIHIzID0gcjIgKyBsb2FkKHAzKQorICAgIC8v
IFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcDMgPSBsb29w
Qm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHkt
PmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KSk7CisgICAgbG9vcEJv
ZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwg
cDMpOworICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFk
ZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBM
b2FkLCBJbnQ2NCwgT3JpZ2luKCksIHAzKSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJp
YWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRC
bG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Js
b2NrCisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOworCisgICAgcHJvYy5yZXNl
dFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsK
KworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkp
CisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzhdISIpOworCisgICAgYXV0
byB0ZXN0ID0gWyZdICgpIC0+IGludDY0X3QgeworICAgICAgICBpbnQ2NF90IHIgPSAwOworICAg
ICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqKytwdHI7CisgICAgICAgIHJl
dHVybiByOworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50NjRfdD4oKmNvZGUsIGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQ
b3N0SW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAy
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwg
NSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQzMl90KiBwdHIgPSBudW1zOworCisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJv
Yy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDMy
KTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8g
VXBzaWxvbihyMSwgXnIyKQorICAgIC8vIHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5w
MikKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4o
KSwgSW50MzIsIDApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBC
Mzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3Jp
Z2luKCksIHAsIHAxKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVt
cCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAy
ID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25l
CisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9j
LCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFs
dWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBP
cmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJy
YW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJs
b2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9k
eV9CbG9jaworICAgIC8vIHIzID0gcjIgKyBsb2FkKHAyKQorICAgIC8vIHAzID0gcDIgKyAxCisg
ICAgLy8gVXBzaWxvbihyMywgXnIyKQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyBn
b3RvIGxvb3AKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJv
YywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBwMikpOworICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBsb29wQm9keS0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQpKTsKKyAgICBsb29wQm9keS0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMyk7
CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBP
cmlnaW4oKSwgcCwgcDMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJv
YywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAvLyBy
ZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgcjIpOworCisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlk
YXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0
aW9uKCpjb2RlLCAiXSwgIzQiKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQzMl90
IHsKKyAgICAgICAgaW50MzJfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAg
ICAgICAgIHIgKz0gKnB0cisrOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hF
Q0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikp
LCB0ZXN0KCkpOworfQorCit2b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQoKQoreworICAgIGlmIChP
cHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAg
aW50NjRfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBw
cm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlh
YmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisgICAgVmFyaWFibGUqIHAgPSBwcm9j
LmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9v
dF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikKKyAgICAvLyBw
MSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+
YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDY0LCAwKTsKKyAgICByb290LT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsK
KyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZh
cmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxv
Y2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0
X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGko
KQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOwor
ICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVx
dWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyByMyA9IHIyICsg
bG9hZChwMikKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocjMsIF5yMikKKyAg
ICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHIzID0g
bG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BC
b2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwg
cDIpKTsKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBB
ZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2Ms
IE9yaWdpbigpLCA4KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihw
cm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBsb29w
Qm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9u
ZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsKKworICAgIHByb2Mu
cmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJv
Yyk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02
NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM4Iik7CisKKyAg
ICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50NjRfdCB7CisgICAgICAgIGludDY0X3QgciA9IDA7
CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9ICpwdHIrKzsKKyAgICAg
ICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGludm9rZTxpbnQ2NF90PigqY29k
ZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKworCiB2b2lkIHRl
c3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzMyKCkKIHsKICAgICBpZiAoSlNDOjpPcHRpb25z
OjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKQEAgLTM2OTcsNiArMzk5MSwxMSBAQCB2b2lkIGFk
ZFNoclRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZCgpPj4+JiB0YXNrcykKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCAwKSk7
CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMSkpOwogICAgIFJVTih0ZXN0
WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDYzKSk7CisKKyAgICBSVU4odGVzdExvYWRQcmVJbmRl
eDMyKCkpOworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2Fk
UG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4NjQoKSk7CiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKaW5kZXggNjNlMjY2Nzg4NTIwMThhNzY4MGNhNWYwNzE0
Njk2ODEwNTg4NGIzYi4uNjliYjZiMmJlODE4NzBiNTk4MzMzNjdhZjI2NzViN2Y0ZWYwNTZmNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
Y3BwCkBAIC0yMzMsOCArMjMzLDggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJhdG8KICAgICBqaXQu
cmV0KCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9jYWwwID0gaml0LmxhYmVsKCk7
Ci0gICAgaml0LmxvYWQ2NCh4MSwgUG9zdEluZGV4KDgpLCB4Nik7Ci0gICAgaml0LnN0b3JlNjQo
eDYsIHgzLCBQb3N0SW5kZXgoOCkpOworICAgIGppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OlBv
c3RJbmRleEFkZHJlc3MoeDEsIDgpLCB4Nik7CisgICAgaml0LnN0b3JlNjQoeDYsIE1hY3JvQXNz
ZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgzLCA4KSk7CiAgICAgc21hbGxDb3B5LmxpbmsoJmpp
dCk7CiAgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIFRy
dXN0ZWRJbW0zMig4KSwgeDIpLmxpbmtUbyhsb2NhbDAsICZqaXQpOwogICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGxvY2FsMiA9IGppdC5icmFuY2hBZGQ2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IFRydXN0ZWRJbW0zMig4KSwgeDIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434573</attachid>
            <date>2021-07-29 14:19:10 -0700</date>
            <delta_ts>2021-07-29 16:07:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210729161909.patch</filename>
            <type>text/plain</type>
            <size>56687</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi45OWNiYmQyZjQ1NGJiYmFi
NmE5MzkwNGQwOTEzZTkwYWY3ZDdjMjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNzIgQEAKKzIwMjEtMDctMjkgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBQcmUvUG9zdC1JbmRleGVkIEFkZHJlc3MgTW9kZSB0byBBaXIg
Zm9yIEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjgwNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcmUtaW5kZXhlZCBhZGRyZXNzaW5nIG1lYW5zIHRoYXQgdGhlIGFkZHJlc3MgaXMgdGhlIHN1
bSBvZiB0aGUgdmFsdWUgaW4gdGhlIDY0LWJpdCBiYXNlIHJlZ2lzdGVyIAorICAgICAgICBhbmQg
YW4gb2Zmc2V0LCBhbmQgdGhlIGFkZHJlc3MgaXMgdGhlbiB3cml0dGVuIGJhY2sgdG8gdGhlIGJh
c2UgcmVnaXN0ZXIuIEFuZCBwb3N0LWluZGV4ZWQgCisgICAgICAgIGFkZHJlc3NpbmcgbWVhbnMg
dGhhdCB0aGUgYWRkcmVzcyBpcyB0aGUgdmFsdWUgaW4gdGhlIDY0LWJpdCBiYXNlIHJlZ2lzdGVy
LCBhbmQgdGhlIHN1bSBvZiB0aGUgCisgICAgICAgIGFkZHJlc3MgYW5kIHRoZSBvZmZzZXQgaXMg
dGhlbiB3cml0dGVuIGJhY2sgdG8gdGhlIGJhc2UgcmVnaXN0ZXIuIFRoZXkgYXJlIHJlbGF0aXZl
bHkgY29tbW9uIGZvciAKKyAgICAgICAgbG9vcHMgdG8gaXRlcmF0ZSBvdmVyIGFuIGFycmF5IGJ5
IGluY3JlYXNpbmcvZGVjcmVhc2luZyBhIHBvaW50ZXIgaW50byB0aGUgYXJyYXkgYXQgZWFjaCBp
dGVyYXRpb24uIAorICAgICAgICBXaXRoIHN1Y2ggYW4gYWRkcmVzc2luZyBtb2RlLCB0aGUgaW5z
dHJ1Y3Rpb24gc2VsZWN0b3IgY2FuIG1lcmdlIHRoZSBpbmNyZW1lbnQgYW5kIGFjY2VzcyB0aGUg
YXJyYXkuCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor
ICAgICAgICAjIyBQcmUtSW5kZXggQWRkcmVzcyBNb2RlIEZvciBMb2FkICMjCisgICAgICAgICMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICAgICBMRFIgV3QsIFtY
biwgI2ltbV0hCisKKyAgICAgICAgSW4gQjMgUmVkdWN0aW9uIFN0cmVuZ3RoLCBzaW5jZSB3ZSBo
YXZlIHRoaXMgcmVkdWN0aW9uIHJ1bGU6CisgICAgICAgICAgICBUdXJuIHRoaXM6IExvYWQoQWRk
KGFkZHJlc3MsIG9mZnNldDEpLCBvZmZzZXQgPSBvZmZzZXQyKQorICAgICAgICAgICAgSW50byB0
aGlzOiBMb2FkKGFkZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorCisgICAgICAg
IFRoZW4sIHRoZSBlcXVpdmFsZW50IHBhdHRlcm4gaXM6CisgICAgICAgICAgICBhZGRyZXNzID0g
QWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgbWVtb3J5ID0g
TG9hZChiYXNlLCBvZmZzZXQpCisKKyAgICAgICAgRmlyc3QsIHdlIGNvbnZlcnQgaXQgdG8gdGhl
IGNhbm9uaWNhbCBmb3JtOgorICAgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0FkZHJl
c3MpCisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwg
b2Zmc2V0KQorICAgICAgICAgICAgbWVtb3J5ID0gTG9hZChhZGRyZXNzLCBvZmZzZXQpCisKKyAg
ICAgICAgTmV4dCwgbG93ZXIgdG8gQWlyOgorICAgICAgICAgICAgTW92ZSAlYmFzZSwgJWFkZHJl
c3MKKyAgICAgICAgICAgIE1vdmUgKCVhZGRyZXNzLCBwcmVmaXgob2Zmc2V0KSksICVtZW1vcnkK
KworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAg
ICAjIyBQb3N0LUluZGV4IEFkZHJlc3MgTW9kZSBGb3IgTG9hZCAjIworICAgICAgICAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgIExEUiBXdCwgW1huXSwg
I2ltbQorCisgICAgICAgIFRoZW4sIHRoZSBlcXVpdmFsZW50IHBhdHRlcm4gaXM6CisgICAgICAg
ICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAg
IGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorCisgICAgICAgIEZpcnN0LCB3ZSBjb252ZXJ0
IGl0IHRvIHRoZSBjYW5vbmljYWwgZm9ybToKKyAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQo
YmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQorICAgICAg
ICAgICAgLi4uCisgICAgICAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3QWRkcmVzcykKKwor
ICAgICAgICBOZXh0LCBsb3dlciB0byBBaXI6CisgICAgICAgICAgICBNb3ZlICViYXNlLCAlYWRk
cmVzcworICAgICAgICAgICAgTW92ZSAoJWFkZHJlc3MsIHBvc3RmaXgob2Zmc2V0KSksICVtZW1v
cnkKKworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIyBQ
YXR0ZXJuIE1hdGNoIEFsZ29yaXRobSAjIworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIworCisgICAgICAgIFRvIGRldGVjdCB0aGUgcGF0dGVybiBmb3IgcHJlZml4L3Bvc3Rm
aXggaW5jcmVtZW50IGFkZHJlc3MgaXMgdHJpY2t5IGR1ZSB0byB0aGUgc3RydWN0dXJlIGluIEIz
IElSLiBUaGUgCisgICAgICAgIGFsZ29yaXRobSB1c2VkIGluIHRoaXMgcGF0Y2ggaXMgdG8gY29s
bGVjdCB0aGUgZmlyc3QgdmFsaWQgdmFsdWVzIChhZGQvbG9hZCksIHRoZW4gc2VhcmNoIGZvciBh
bnkgCisgICAgICAgIHBhaXJlZCB2YWx1ZSAobG9hZC9hZGQpIHRvIG1hdGNoIGFsbCBvZiB0aGVt
LiBJbiB3b3JzdCBjYXNlLCB0aGUgcnVudGltZSBjb21wbGV4aXR5IGlzIE8obl4yKSAKKyAgICAg
ICAgd2hlbiBuIGlzIHRoZSBudW1iZXIgb2YgYWxsIHZhbHVlcy4KKworICAgICAgICBBZnRlciBj
b2xsZWN0aW5nIHR3byBzZXRzIG9mIGNhbmRpZGF0ZXMsIHdlIG1hdGNoIHRoZSBwcmVmaXggaW5j
cmVtZW50YWwgYWRkcmVzcyBmaXJzdCBzaW5jZSBpdCBzZWVtcyAKKyAgICAgICAgbW9yZSBiZW5l
ZmljaWFsIHRvIHRoZSBjb21waWxlciAoc2hvd24gaW4gdGhlIG5leHQgc2VjdGlvbikuIEFuZCB0
aGVuLCBnbyBmb3IgdGhlIHBvc3RmaXggb25lLgorCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyMgVGVzdCBmb3IgUHJlL1Bv
c3QtSW5jcmVtZW50IEFkZHJlc3MgTW9kZSAjIworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgR2l2ZW4gTG9vcCB3aXRoIFBy
ZS1JbmNyZW1lbnQ6CisgICAgICAgIGludDY0X3QgbGRyX3ByZShpbnQ2NF90ICpwKSB7CisgICAg
ICAgICAgICBpbnQ2NF90IHJlcyA9IDA7CisgICAgICAgICAgICB3aGlsZSAocmVzIDwgMTApCisg
ICAgICAgICAgICAgICAgcmVzICs9ICorK3A7CisgICAgICAgICAgICByZXR1cm4gcmVzOworICAg
ICAgICB9CisKKyAgICAgICAgQjMgSVI6CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCQiMwOiA7IGZyZXF1ZW5j
eSA9IDEuMDAwMDAwCisgICAgICAgICAgICBJbnQ2NCBiQDAgPSBDb25zdDY0KDApCisgICAgICAg
ICAgICBJbnQ2NCBiQDIgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgICAgICBWb2lkIGJAMjAg
PSBVcHNpbG9uKCQwKGJAMCksIF4xOCwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAgICAgICAgIFZv
aWQgYkAyMSA9IFVwc2lsb24oYkAyLCBeMTksIFdyaXRlc0xvY2FsU3RhdGUpCisgICAgICAgICAg
ICBWb2lkIGJANCA9IEp1bXAoVGVybWluYWwpCisgICAgICAgIFN1Y2Nlc3NvcnM6ICMxCisgICAg
ICAgIEJCIzE6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNzb3JzOiAj
MCwgIzIKKyAgICAgICAgICAgIEludDY0IGJAMTggPSBQaGkoUmVhZHNMb2NhbFN0YXRlKQorICAg
ICAgICAgICAgSW50NjQgYkAxOSA9IFBoaShSZWFkc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBJ
bnQ2NCBiQDcgPSBDb25zdDY0KDEwKQorICAgICAgICAgICAgSW50MzIgYkA4ID0gQWJvdmVFcXVh
bChiQDE4LCAkMTAoYkA3KSkKKyAgICAgICAgICAgIFZvaWQgYkA5ID0gQnJhbmNoKGJAOCwgVGVy
bWluYWwpCisgICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46IzMsIEVsc2U6IzIKKyAgICAgICAgQkIj
MjogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNlc3NvcnM6ICMxCisgICAg
ICAgICAgICBJbnQ2NCBiQDEwID0gQ29uc3Q2NCg4KQorICAgICAgICAgICAgSW50NjQgYkAxMSA9
IEFkZChiQDE5LCAkOChiQDEwKSkKKyAgICAgICAgICAgIEludDY0IGJAMTMgPSBMb2FkKGJAMTEs
IENvbnRyb2xEZXBlbmRlbnR8UmVhZHM6VG9wKQorICAgICAgICAgICAgSW50NjQgYkAxNCA9IEFk
ZChiQDE4LCBiQDEzKQorICAgICAgICAgICAgVm9pZCBiQDIyID0gVXBzaWxvbihiQDE0LCBeMTgs
IFdyaXRlc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBWb2lkIGJAMjMgPSBVcHNpbG9uKGJAMTEs
IF4xOSwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAgICAgICAgIFZvaWQgYkAxNiA9IEp1bXAoVGVy
bWluYWwpCisgICAgICAgIFN1Y2Nlc3NvcnM6ICMxCisgICAgICAgIEJCIzM6IDsgZnJlcXVlbmN5
ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNzb3JzOiAjMQorICAgICAgICAgICAgVm9pZCBi
QDE3ID0gUmV0dXJuKGJAMTgsIFRlcm1pbmFsKQorICAgICAgICBWYXJpYWJsZXM6CisgICAgICAg
ICAgICBJbnQ2NCB2YXIwCisgICAgICAgICAgICBJbnQ2NCB2YXIxCisgICAgICAgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAg
IFcvTyBQcmUtSW5jcmVtZW50IEFkZHJlc3MgTW9kZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC4uLgorICAg
ICAgICBCQiMyOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRlY2Vzc29yczog
IzEKKyAgICAgICAgICAgIE1vdmUgJDgsICV4MywgJDgoYkAxMikKKyAgICAgICAgICAgIEFkZDY0
ICQ4LCAleDAsICV4MSwgYkAxMQorICAgICAgICAgICAgTW92ZSAoJXgwLCV4MyksICV4MCwgYkAx
MworICAgICAgICAgICAgQWRkNjQgJXgwLCAleDIsICV4MiwgYkAxNAorICAgICAgICAgICAgTW92
ZSAleDEsICV4MCwgYkAyMworICAgICAgICAgICAgSnVtcCBiQDE2CisgICAgICAgIFN1Y2Nlc3Nv
cnM6ICMxCisgICAgICAgIC4uLgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBXLyBQcmUtSW5jcmVtZW50IEFk
ZHJlc3MgTW9kZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC4uLgorICAgICAgICBCQiMyOiA7IGZyZXF1ZW5j
eSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRlY2Vzc29yczogIzEKKyAgICAgICAgICAgIE1vdmVX
aXRoSW5jcmVtZW50NjQgKCV4MCxQcmUoJDgpKSwgJXgyLCBiQDEzCisgICAgICAgICAgICBBZGQ2
NCAleDIsICV4MSwgJXgxLCBiQDE0CisgICAgICAgICAgICBKdW1wIGJAMTYKKyAgICAgICAgU3Vj
Y2Vzc29yczogIzEKKyAgICAgICAgLi4uCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIEdpdmVuIExvb3Agd2l0
aCBQb3N0LUluY3JlbWVudDoKKyAgICAgICAgaW50NjRfdCBsZHJfcHJlKGludDY0X3QgKnApIHsK
KyAgICAgICAgICAgIGludDY0X3QgcmVzID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChyZXMgPCAx
MCkKKyAgICAgICAgICAgICAgICByZXMgKz0gKnArKzsKKyAgICAgICAgICAgIHJldHVybiByZXM7
CisgICAgICAgIH0KKworICAgICAgICBCMyBJUjoKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJCIzA6IDsgZnJl
cXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgICAgIEludDY0IGJAMCA9IENvbnN0NjQoMCkKKyAg
ICAgICAgICAgIEludDY0IGJAMiA9IEFyZ3VtZW50UmVnKCV4MCkKKyAgICAgICAgICAgIFZvaWQg
YkAyMCA9IFVwc2lsb24oJDAoYkAwKSwgXjE4LCBXcml0ZXNMb2NhbFN0YXRlKQorICAgICAgICAg
ICAgVm9pZCBiQDIxID0gVXBzaWxvbihiQDIsIF4xOSwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAg
ICAgICAgIFZvaWQgYkA0ID0gSnVtcChUZXJtaW5hbCkKKyAgICAgICAgU3VjY2Vzc29yczogIzEK
KyAgICAgICAgQkIjMTogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNlc3Nv
cnM6ICMwLCAjMgorICAgICAgICAgICAgSW50NjQgYkAxOCA9IFBoaShSZWFkc0xvY2FsU3RhdGUp
CisgICAgICAgICAgICBJbnQ2NCBiQDE5ID0gUGhpKFJlYWRzTG9jYWxTdGF0ZSkKKyAgICAgICAg
ICAgIEludDY0IGJANyA9IENvbnN0NjQoMTApCisgICAgICAgICAgICBJbnQzMiBiQDggPSBBYm92
ZUVxdWFsKGJAMTgsICQxMChiQDcpKQorICAgICAgICAgICAgVm9pZCBiQDkgPSBCcmFuY2goYkA4
LCBUZXJtaW5hbCkKKyAgICAgICAgU3VjY2Vzc29yczogVGhlbjojMywgRWxzZTojMgorICAgICAg
ICBCQiMyOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRlY2Vzc29yczogIzEK
KyAgICAgICAgICAgIEludDY0IGJAMTAgPSBMb2FkKGJAMTksIENvbnRyb2xEZXBlbmRlbnR8UmVh
ZHM6VG9wKQorICAgICAgICAgICAgSW50NjQgYkAxMSA9IEFkZChiQDE4LCBiQDEwKQorICAgICAg
ICAgICAgSW50NjQgYkAxMiA9IENvbnN0NjQoOCkKKyAgICAgICAgICAgIEludDY0IGJAMTMgPSBB
ZGQoYkAxOSwgJDgoYkAxMikpCisgICAgICAgICAgICBWb2lkIGJAMjIgPSBVcHNpbG9uKGJAMTEs
IF4xOCwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAgICAgICAgIFZvaWQgYkAyMyA9IFVwc2lsb24o
YkAxMywgXjE5LCBXcml0ZXNMb2NhbFN0YXRlKQorICAgICAgICAgICAgVm9pZCBiQDE2ID0gSnVt
cChUZXJtaW5hbCkKKyAgICAgICAgU3VjY2Vzc29yczogIzEKKyAgICAgICAgQkIjMzogOyBmcmVx
dWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNlc3NvcnM6ICMxCisgICAgICAgICAgICBW
b2lkIGJAMTcgPSBSZXR1cm4oYkAxOCwgVGVybWluYWwpCisgICAgICAgIFZhcmlhYmxlczoKKyAg
ICAgICAgICAgIEludDY0IHZhcjAKKyAgICAgICAgICAgIEludDY0IHZhcjEKKyAgICAgICAgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICAgICAgVy9PIFBvc3QtSW5jcmVtZW50IEFkZHJlc3MgTW9kZToKKyAgICAgICAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC4u
LgorICAgICAgICBCQiMyOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRlY2Vz
c29yczogIzEKKyAgICAgICAgICAgIE1vdmUgKCV4MCksICV4MiwgYkAxMAorICAgICAgICAgICAg
QWRkNjQgJXgyLCAleDEsICV4MSwgYkAxMQorICAgICAgICAgICAgQWRkNjQgJDgsICV4MCwgJXgw
LCBiQDEzCisgICAgICAgICAgICBKdW1wIGJAMTYKKyAgICAgICAgU3VjY2Vzc29yczogIzEKKyAg
ICAgICAgLi4uCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcvIFBvc3QtSW5jcmVtZW50IEFkZHJlc3MgTW9k
ZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgICAgIC4uLgorICAgICAgICBCQiMyOiA7IGZyZXF1ZW5jeSA9IDEuMDAw
MDAwCisgICAgICAgIFByZWRlY2Vzc29yczogIzEKKyAgICAgICAgICAgIE1vdmVXaXRoSW5jcmVt
ZW50NjQgKCV4MCxQb3N0KCQ4KSksICV4MiwgYkAxMAorICAgICAgICAgICAgQWRkNjQgJXgyLCAl
eDEsICV4MSwgYkAxMQorICAgICAgICAgICAgSnVtcCBiQDE2CisgICAgICAgIFN1Y2Nlc3NvcnM6
ICMxCisgICAgICAgIC4uLgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlBy
ZUluZGV4QWRkcmVzczo6UHJlSW5kZXhBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RN
YWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzczo6UG9zdEluZGV4QWRkcmVzcyk6CisgICAg
ICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJBUk02NDo6bG9hZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6bG9hZDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RvcmU2
NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN0b3JlMzIpOgorICAgICAg
ICAqIGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6CisgICAgICAgIChKU0M6OnRlc3RTdG9yZVByZVBv
c3RJbmRleDMyKToKKyAgICAgICAgKEpTQzo6dGVzdFN0b3JlUHJlUG9zdEluZGV4NjQpOgorICAg
ICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJbmRleDMyKToKKyAgICAgICAgKEpTQzo6dGVzdExv
YWRQcmVQb3N0SW5kZXg2NCk6CisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6CisgICAgICAg
IChKU0M6OkIzOjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3Bw
OgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwOgorICAgICAgICAoSlNDOjpCMzo6
Y2Fub25pY2FsaXplKToKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmg6CisgICAgICAg
ICogYjMvQjNWYWx1ZUtleS5oOgorICAgICAgICAqIGIzL0IzVmFsdWVLZXlJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZUtleTo6VmFsdWVLZXkpOgorICAgICAgICAqIGIzL2Fpci9B
aXJBcmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmpzSGFzaCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6ZHVtcCBjb25zdCk6CisgICAgICAgIChXVEY6OnBy
aW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuaDoKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjpwcmVJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cG9z
dEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ByZUluZGV4IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1Bvc3RJbmRleCBjb25zdCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNNZW1vcnkgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmJhc2UgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNl
dCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFy
Zzo6aXNWYWxpZFBvc3RJbmRleEZvcm0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
VmFsaWRGb3JtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1w
RmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Zm9yRWFjaFRtcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6YXNQcmVJbmRleEFkZHJlc3MgY29uc3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6OmFzUG9zdEluZGV4QWRkcmVzcyBjb25zdCk6CisgICAgICAgICog
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL2Fpci9vcGNvZGVfZ2VuZXJh
dG9yLnJiOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18zLmNw
cDoKKyAgICAgICAgKHRlc3RMb2FkUHJlSW5kZXgzMik6CisgICAgICAgICh0ZXN0TG9hZFByZUlu
ZGV4NjQpOgorICAgICAgICAodGVzdExvYWRQb3N0SW5kZXgzMik6CisgICAgICAgICh0ZXN0TG9h
ZFBvc3RJbmRleDY0KToKKyAgICAgICAgKGFkZFNoclRlc3RzKToKKyAgICAgICAgKiBqaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OmppdFdyaXRlVGh1bmtHZW5lcmF0
b3IpOgorCiAyMDIxLTA3LTI2ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIFRlbXBvcmFsIHRvIGZlYXR1cmVzLmpzb24KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKaW5k
ZXggM2QxOTQ5YTQwNzg1ZDk5Y2E2MTU5NWFhYjA0YmU2ZjFkMGQ5NmJhMy4uMjM1NGM0NTM2OGM3
YzBkNWNlOTAxOGFjZmYyODRjNGEwYTA0MzFhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAgLTI0NSw2
ICsyNDUsMzQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8vIFByZUluZGV4
QWRkcmVzczoKKyAgICAvLworICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBh
ZGRyZXNzIGFuZCBwcmUtaW5jcmVtZW50L2RlY3JlbWVudCBpbmRleC4KKyAgICBzdHJ1Y3QgUHJl
SW5kZXhBZGRyZXNzIHsKKyAgICAgICAgUHJlSW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwg
aW50IGluZGV4KQorICAgICAgICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4
KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7
CisgICAgICAgIGludCBpbmRleDsKKyAgICB9OworCisgICAgLy8gUG9zdEluZGV4QWRkcmVzczoK
KyAgICAvLworICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFu
ZCBwb3N0LWluY3JlbWVudC9kZWNyZW1lbnQgaW5kZXguCisgICAgc3RydWN0IFBvc3RJbmRleEFk
ZHJlc3MgeworICAgICAgICBQb3N0SW5kZXhBZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwgaW50IGlu
ZGV4KQorICAgICAgICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIGJhc2U7CisgICAg
ICAgIGludCBpbmRleDsKKyAgICB9OworCiAgICAgLy8gQWJzb2x1dGVBZGRyZXNzOgogICAgIC8v
CiAgICAgLy8gRGVzY3JpYmVzIGFuIG1lbW9yeSBvcGVyYW5kIGdpdmVuIGJ5IGEgcG9pbnRlci4g
IEZvciByZWd1bGFyIGxvYWQgJiBzdG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2Vl
YjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5MGZkLi4yYTkxMmQwZGQyNjYyNmJkNzRlMTAzYmVmOTY1ZjJi
YWRmY2UwYmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtMTQ0NSw5ICsxNDQ1LDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgbG9hZDw2ND4oYWRkcmVzcywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkNjQo
UmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRleCBzaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9p
ZCBsb2FkNjQoUHJlSW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAg
ICAgICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMsIHNpbW0pOworICAgICAgICBtX2Fz
c2VtYmxlci5sZHI8NjQ+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGxvYWQ2NChQb3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMuYmFzZSwg
UG9zdEluZGV4KHNyYy5pbmRleCkpOwogICAgIH0KIAogICAgIERhdGFMYWJlbDMyIGxvYWQ2NFdp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCkBA
IC0xNTQ0LDYgKzE1NDksMTYgQEAgcHVibGljOgogICAgICAgICBsb2FkPDMyPihhZGRyZXNzLCBk
ZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGxvYWQzMihQcmVJbmRleEFkZHJlc3Mgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIHNy
Yy5iYXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihQ
b3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubGRyPDMyPihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkpOwor
ICAgIH0KKwogICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRk
cmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwz
MiBsYWJlbCh0aGlzKTsKQEAgLTE3MzMsNyArMTc0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIs
IGFkZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7
CiAgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRl
bXBSZWdpc3Rlcik7CiAgICAgfQotICAgIAorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQg
c3JjLCBQcmVJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0
cjw2ND4oc3JjLCBkZXN0LmJhc2UsIFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2UsIFBvc3RJbmRl
eChkZXN0LmluZGV4KSk7CisgICAgfQorCiAgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3Jj
LCBjb25zdCB2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgc3RvcmU8NjQ+KHNyYywgYWRk
cmVzcyk7CkBAIC0xNzc3LDExICsxODAyLDYgQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KGRh
dGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmU2NChSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBQb3N0SW5kZXggc2ltbSkKLSAgICB7Ci0gICAg
ICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LCBzaW1tKTsKLSAgICB9Ci0gICAgCiAg
ICAgRGF0YUxhYmVsMzIgc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBz
cmMsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRo
aXMpOwpAQCAtMTg3OSw2ICsxODk5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmUzMihkYXRh
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzKTsKICAgICB9CiAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0
ZXJJRCBzcmMsIFByZUluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuc3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVzdC5pbmRleCkpOworICAgIH0K
KworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgUG9zdEluZGV4QWRkcmVzcyBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUG9z
dEluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKICAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0
aEFkZHJlc3NPZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAg
IHsKICAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCmluZGV4IGYyMmJmZmNlMTU1NGIwMmMyMjZjMjE0
OTJhYjA2N2JhYjM4YzQwYjUuLjcwN2FiYjA1MmIzODMyODE4NTk4NDVjMmM1OTQ5YzljYzc1YmYw
MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCkBA
IC0yMjEyLDYgKzIyMTIsMTc2IEBAIHZvaWQgdGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hp
ZnQ2NCgpCiAgICAgICAgIH0KICAgICB9CiB9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9zdEluZGV4
MzIoKQoreworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50cHRyX3Qg
YWRkciA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMyX3QgaW5k
ZXggPSBzaXplb2YoaW50MzJfdCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQzMl90IHNy
YykgeworICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0
KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAg
ICAvLyAqKytwMSA9IDQ7IHJldHVybiBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6
YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRG
dW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0p
OworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAg
ICB9OworCisgICAgaW50MzJfdCogcDEgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QxKDQp
KTsKKyAgICBDSEVDS19FUSgqcDEsIDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1zWzFdKTsK
KworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDMyX3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3Rv
cmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRG
dW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsgcmV0dXJu
IHAyOworICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2Fs
bEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkp
OworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7
CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52
b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCog
cDIgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19FUSgqcDIs
IDQpOworICAgIENIRUNLX0VRKCotLXAyLCA1KTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVQb3N0
SW5kZXg2NCgpCit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnRw
dHJfdCBhZGRyID0gYml0d2lzZV9jYXN0PGludHB0cl90PigmbnVtc1sxXSk7CisgICAgaW50MzJf
dCBpbmRleCA9IHNpemVvZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0
X3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAg
ICAgICAgIC8vICorK3AxID0gNDsgcmV0dXJuIHAxOworICAgICAgICAgICAgaml0LnN0b3JlNjQo
R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAg
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIp
OworICAgIH07CisKKyAgICBpbnQ2NF90KiBwMSA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVz
dDEoNCkpOworICAgIENIRUNLX0VRKCpwMSwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDEsIG51bXNb
MV0pOworCisgICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50NjRfdCBzcmMpIHsKKyAgICAgICAgYXV0
byBzdG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAg
ZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKnAyKysgPSA1OyBy
ZXR1cm4gcDI7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjphcmd1bWVudEdQUjAs
IENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGlu
ZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
aml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
biBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2
NF90KiBwMiA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDIoNSkpOworICAgIENIRUNLX0VR
KCpwMiwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDIsIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJl
UG9zdEluZGV4MzIoKQoreworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAg
aW50MzJfdCBpbmRleCA9IHNpemVvZihpbnQzMl90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0g
KGludDMyX3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7
CisKKyAgICAgICAgICAgIC8vIHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAg
ICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZv
Ojphcmd1bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAg
ICAgIGppdC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJlcGxhY2UpLCBDQ2Fs
bEhlbHBlcnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAg
ICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAg
ICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQz
Ml90Pihsb2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QxKDQpLCAz
KTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGlu
dDMyX3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgIC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAg
ICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAg
ICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihyZXBsYWNlKSwgQ0NhbGxI
ZWxwZXJzOjpJbXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAg
ICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAg
ICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50MzJf
dD4obG9hZCwgJm51bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7
CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgNSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQcmVQb3N0SW5k
ZXg2NCgpCit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnQzMl90
IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0ZXN0MSA9IFsmXSAoaW50NjRf
dCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAg
ICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVybiByZXM7CisgICAgICAgICAg
ICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgaml0
LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQocmVwbGFjZSksIENDYWxsSGVscGVy
czo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICAgICAg
aml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBq
aXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KGxv
YWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVzdDEoNCksIDMpOworICAg
IENIRUNLX0VRKG51bXNbMl0sIDQpOworCisgICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50NjRfdCBy
ZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAg
ICAgICAgLy8gcmVzID0gKnAyKys7ICpwMiA9IDU7IHJldHVybiByZXM7CisgICAgICAgICAgICBq
aXQubG9hZDY0KENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5z
dG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6
OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGpp
dC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0
LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihsb2Fk
LCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QyKDUpLCAyKTsKKyAgICBD
SEVDS19FUShudW1zWzJdLCA1KTsKK30KICNlbmRpZgogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4
Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtNDQ3NSw2ICs0NjQ1LDExIEBAIHZvaWQgcnVuKGNvbnN0
IGNoYXIqIGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwogICAgIFJV
Tih0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDY0KCkpOwogICAgIFJVTih0ZXN0WG9yTm90V2l0aFJp
Z2h0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2
NCgpKTsKKworICAgIFJVTih0ZXN0U3RvcmVQcmVQb3N0SW5kZXgzMigpKTsKKyAgICBSVU4odGVz
dFN0b3JlUHJlUG9zdEluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4MzIo
KSk7CisgICAgUlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKSk7CiAjZW5kaWYKIAogI2lmIENQ
VShBUk02NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKaW5kZXggY2Q0
NGEyOTE1Nzc3NDBkMjM5OTMwOGMyNjJhNzkyNzU5NWZlN2I0My4uM2FkODk3YzRmMjMyMjEzMGI4
YzNlNDY4ZDQ4N2RlZTMwYTc4M2FhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzR2VuZXJhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVy
YXRlLmNwcApAQCAtMTE5LDYgKzExOSw5IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUm
IHByb2NlZHVyZSkKICAgICBtb3ZlQ29uc3RhbnRzKHByb2NlZHVyZSk7CiAgICAgZWxpbWluYXRl
RGVhZENvZGUocHJvY2VkdXJlKTsKIAorICAgIGlmIChwcm9jZWR1cmUub3B0TGV2ZWwoKSA+PSAy
KQorICAgICAgICBjYW5vbmljYWxpemUocHJvY2VkdXJlKTsKKwogICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgcnVuIHB1cmVDU0UgaGVyZSB0byBjbGVhbiB1cCBzb21lIHBsYXRmb3JtIHNwZWNpZmlj
IGNoYW5nZXMgZnJvbSB0aGUgcHJldmlvdXMgcGhhc2VzLgogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4NzMKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBkNWZjMzE2NDY1OTY4ZWI3MzcxYjZmZjFjYzZmODMx
N2ZlY2RlNTJlLi5iNDU4MGQ4YjE1MzU1NmYyMDk2MTA1NmU4NDlkNjFlZDM0MGIxYzJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcApAQCAtNTQsNiArNTQsNyBA
QAogI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCiAjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIK
ICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQjNWYXJpYWJsZS5oIgogI2luY2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5o
IgogI2luY2x1ZGUgIkIzV2FzbUFkZHJlc3NWYWx1ZS5oIgpAQCAtMjA3LDcgKzIwOCw3IEBAIHB1
YmxpYzoKIAogICAgICAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKG1fYmxvY2tU
b0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgbV9ibG9ja0lu
c2VydGlvblNldC5leGVjdXRlKCk7CiAKICAgICAgICAgQWlyOjpJbnNlcnRpb25TZXQgaW5zZXJ0
aW9uU2V0KG1fY29kZSk7CkBAIC01NDYsNyArNTQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBzY2FsZTsKICAgICB9Ci0gICAg
CisKICAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBvcGVyYW5kIGludG8gYW4gYWRkcmVzcy4K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZz
ZXQ8SW50Pj4KICAgICBBcmcgZWZmZWN0aXZlQWRkcihWYWx1ZSogYWRkcmVzcywgSW50IG9mZnNl
dCwgV2lkdGggd2lkdGgpCkBAIC0yNTU5LDYgKzI1NjAsNDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gUHJlLUluZGV4IENhbm9uaWNhbCBGb3JtOgorICAgICAgICAgICAgLy8gICAgIGFk
ZHJlc3MgPSBhZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IGxv
YWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBDYW5vbmljYWwgRm9y
bToKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBsb2FkKGJhc2UsIDApCisgICAgICAgICAg
ICAvLyAgICAgYWRkcmVzcyA9IGFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICBhdXRvIHRy
eUFwcGVuZEluY3JlbWVudEFkZHJlc3MgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShNb3ZlV2l0aEluY3JlbWVu
dDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1vcnktPnR5cGUoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6UHJlSW5kZXgsIEFyZzo6VG1wKSB8fCAh
bV9pbmRleCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIFZhbHVlKiBhZGRyZXNzID0gbV9ibG9jay0+YXQobV9pbmRleCAtIDEpOworICAgICAgICAg
ICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSAhPSBBZGQgfHwgYWRkcmVzcy0+dHlwZSgpICE9
IEludDY0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgaWYgKGFkZHJlc3MtPmNoaWxkKDApICE9IG1lbW9yeS0+bGFzdENoaWxkKCkgfHwgIWFkZHJl
c3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IGFkZHJlc3MtPmNoaWxkKDEp
LT5hc0ludFB0cigpOworICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zm
c2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7CisgICAgICAgICAg
ICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkUG9zdEluZGV4
Rm9ybShzbWFsbE9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgICAgIEFyZyBpbmNyZW1lbnRBcmcgPSBBcmcoKTsKKyAgICAgICAgICAgICAg
ICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc21hbGxP
ZmZzZXQgPT0gbWVtb3J5LT5vZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY3Jl
bWVudEFyZyA9IEFyZzo6cHJlSW5kZXgodG1wKGFkZHJlc3MpLCBzbWFsbE9mZnNldCk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudEFyZyA9IEFy
Zzo6cG9zdEluZGV4KHRtcChhZGRyZXNzKSwgc21hbGxPZmZzZXQpOworCisgICAgICAgICAgICAg
ICAgaWYgKGluY3JlbWVudEFyZykgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhl
ZE1vdmVGb3JUeXBlKGFkZHJlc3MtPnR5cGUoKSksIHRtcChhZGRyZXNzLT5jaGlsZCgwKSksIHRt
cChhZGRyZXNzKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGluY3JlbWVu
dEFyZywgdG1wKG1lbW9yeSkpOworICAgICAgICAgICAgICAgICAgICBtX2xvY2tlZC5hZGQoYWRk
cmVzcyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICBpZiAodHJ5QXBwZW5kSW5jcmVtZW50QWRkcmVzcygpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBraW5k
LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3Ry
ZW5ndGguY3BwCmluZGV4IDIyODBmZDc3MTI1MmU3MjYwZjY4NTA1MDkyZmQ1NDNjZmUwNjE4NTcu
LjYzMjVhMTUyYTQzM2QwYjRlZGExYTZkNjE3N2EwMmZiODZhMWMyZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKQEAgLTQyLDYgKzQyLDcgQEAK
ICNpbmNsdWRlICJCM1ZhbHVlS2V5SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVz
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KIApAQCAtNDEyLDYgKzQxMywxMTYgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICBi
b29sIGNhbm9uaWNhbGl6ZUluY3JlbWVudEFkZHJlc3MoKQorICAgIHsKKyAgICAgICAgdXNpbmcg
QXJnID0gQWlyOjpBcmc7CisKKyAgICAgICAgRG9taW5hdG9ycyYgZG9taW5hdG9ycyA9IG1fcHJv
Yy5kb21pbmF0b3JzKCk7CisgICAgICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGJhY2t3YXJkc0Rv
bWluYXRvcnMgPSBtX3Byb2MuYmFja3dhcmRzRG9taW5hdG9ycygpOworICAgICAgICBIYXNoTWFw
PFZhbHVlS2V5LCBWZWN0b3I8VmFsdWUqPj4gYmFzZU9mZnNldFRvQWRkcmVzc2VzOworICAgICAg
ICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwcmVJbmRleENhbmRpZGF0ZXM7CisgICAg
ICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvTWVtb3JpZXM7
CisgICAgICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleENhbmRpZGF0
ZXM7CisgICAgICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCB1bnNpZ25lZD4gbWVtb3J5VG9JbmRl
eDsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiBpZ25vcmVkVmFsdWVzOworCisgICAgICAgIGF1
dG8gdHJ5UHJlUG9zdEluZGV4ID0gWyZdIChWYWx1ZSogdmFsdWUpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ6IHsKKyAgICAg
ICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigp
OworCisgICAgICAgICAgICAgICAgLy8gUHJlLUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAg
ICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgICAgIC8v
ICAgICAuLi4KKyAgICAgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZz
ZXQpCisgICAgICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBQYXR0ZXJuOgorICAgICAgICAgICAg
ICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCisgICAgICAgICAgICAgICAgLy8gICAg
IC4uLgorICAgICAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgICAgICBhdXRvIHRyeVByZVBvc3RJbmRleE1lbW9yeSA9IFsmXSAoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobWVtb3J5LT5jaGls
ZCgwKSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4obWVtb3J5LT5vZmZzZXQoKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zm
c2V0a2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGFkZHJl
c3MgOiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuZ2V0KGJhc2VPZmZzZXRrZXkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgYWRk
cmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVRvTWVtb3JpZXMuYWRkKG1lbW9yeS0+
Y2hpbGQoMCksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQo
bWVtb3J5KTsKKyAgICAgICAgICAgICAgICAgICAgbWVtb3J5VG9JbmRleC5hZGQobWVtb3J5LCBt
X2luZGV4KTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgdHJ5UHJlUG9z
dEluZGV4TWVtb3J5KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGNhc2UgQWRkOiB7CisgICAgICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSB2
YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIHJpZ2h0ID0gdmFsdWUtPmNo
aWxkKDEpOworCisgICAgICAgICAgICAgICAgYXV0byB0cnlQb3RlbnRpYWxQb3N0SW5kZXhBZGRy
ZXNzID0gWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyaWdodC0+aGFzSW50UHRy
KCkgfHwgdmFsdWUtPnR5cGUoKSAhPSBJbnQ2NCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmlnaHQtPmFzSW50
UHRyKCk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0
ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNWYWxpZFBvc3RJbmRl
eEZvcm0oc21hbGxPZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAvLyBzbyBmYXIgdGhpcyBBZGQgdmFsdWUgaXMgYSB2YWxpZCBhZGRy
ZXNzIGNhbmRpZGF0ZSBmb3IgYm90aCBwcmVmaXggYW5kIHBvc3RmaXggcGF0dGVybgorICAgICAg
ICAgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobGVmdCwgc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oc21hbGxPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgYmFz
ZU9mZnNldFRvQWRkcmVzc2VzLmFkZChiYXNlT2Zmc2V0a2V5LCBWZWN0b3I8VmFsdWUqPigpKS5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJh
c2VUb01lbW9yaWVzLmNvbnRhaW5zKGxlZnQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9NZW1vcmllcy5nZXQobGVmdCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAgICAgdHJ5UG90ZW50aWFsUG9zdEluZGV4QWRkcmVzcygpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAg
ICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAgICAgICAgICBmb3IgKG1faW5kZXggPSAwOyBt
X2luZGV4IDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4KQorICAgICAgICAgICAgICAgIHRyeVBy
ZVBvc3RJbmRleChibG9jay0+YXQobV9pbmRleCkpOworICAgICAgICB9CisKKyAgICAgICAgYXV0
byBjb250cm9sRXF1aXZhbGVudCA9IFsmXSAoVmFsdWUqIHYxLCBWYWx1ZSogdjIpIC0+IGJvb2wg
eworICAgICAgICAgICAgcmV0dXJuIChkb21pbmF0b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYy
LT5vd25lcikgJiYgYmFja3dhcmRzRG9taW5hdG9ycy5kb21pbmF0ZXModjItPm93bmVyLCB2MS0+
b3duZXIpKQorICAgICAgICAgICAgICAgIHx8IChkb21pbmF0b3JzLmRvbWluYXRlcyh2Mi0+b3du
ZXIsIHYxLT5vd25lcikgJiYgYmFja3dhcmRzRG9taW5hdG9ycy5kb21pbmF0ZXModjEtPm93bmVy
LCB2Mi0+b3duZXIpKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGRldGVjdCA9IFsmXSAo
SGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gY2FuZGlkYXRlcykgeworICAgICAgICAgICAg
Zm9yIChhdXRvIGl0ciA9IGNhbmRpZGF0ZXMuYmVnaW4oKTsgaXRyICE9IGNhbmRpZGF0ZXMuZW5k
KCk7ICsraXRyKSB7CisgICAgICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGl0ci0+
a2V5OworICAgICAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gaXRyLT52YWx1ZTsKKyAgICAg
ICAgICAgICAgICBpZiAoaWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRW
YWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRk
cmVzcykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAg
VmFsdWUqIG5ld0FkZHJlc3MgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1lbW9yeVRv
SW5kZXguZ2V0KG1lbW9yeSksIEFkZCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQo
MCksIGFkZHJlc3MtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5yZXBsYWNl
V2l0aElkZW50aXR5KG5ld0FkZHJlc3MpOworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
LmV4ZWN1dGUobWVtb3J5LT5vd25lcik7CisKKyAgICAgICAgICAgICAgICBpZ25vcmVkVmFsdWVz
LmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChtZW1vcnkp
OworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIC8vIGFkZHJlc3MgPSBBZGQo
YmFzZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3QWRkcmVzcykKKyAgICAg
ICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gIG5ld0FkZHJlc3MgPSBBZGQo
YmFzZSwgb2Zmc2V0KQorICAgICAgICAvLyBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAg
ICAgbWVtb3J5ID0gTG9hZChhZGRyZXNzLCBvZmZzZXQpCisgICAgICAgIGRldGVjdChwcmVJbmRl
eENhbmRpZGF0ZXMpOworCisgICAgICAgIC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkgICAgICAg
ICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgLy8gLi4uICAgICAg
ICAgICAgICAgICAgICAgICAgICAtLT4gIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKKyAgICAgICAg
Ly8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgIGFkZHJlc3MgPSBJZGVudGl0eShu
ZXdBZGRyZXNzKQorICAgICAgICBkZXRlY3QocG9zdEluZGV4Q2FuZGlkYXRlcyk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKwogICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIGJv
b2wgcmVzdWx0ID0gZmFsc2U7CkBAIC0zMDQ2LDYgKzMxNTcsMTMgQEAgcHJpdmF0ZToKIAogfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKK2Jvb2wgY2Fub25pY2FsaXplKFByb2NlZHVyZSYgcHJv
YykKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywgImNhbm9uaWNhbGl6ZSIpOwor
ICAgIFJlZHVjZVN0cmVuZ3RoIHJlZHVjZVN0cmVuZ3RoKHByb2MpOworICAgIHJldHVybiByZWR1
Y2VTdHJlbmd0aC5jYW5vbmljYWxpemVJbmNyZW1lbnRBZGRyZXNzKCk7Cit9CisKIGJvb2wgcmVk
dWNlU3RyZW5ndGgoUHJvY2VkdXJlJiBwcm9jKQogewogICAgIFBoYXNlU2NvcGUgcGhhc2VTY29w
ZShwcm9jLCAicmVkdWNlU3RyZW5ndGgiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNS
ZWR1Y2VTdHJlbmd0aC5oCmluZGV4IDFhYmI4MGY2NDM0OTdkOTNkYTczN2QxYThjZGE3ODViMzc0
NWIyNmUuLmJjNjE4MzlmMzQ1ZTViM2UzZDM3NjNmMDU0MWFjN2VhYzRjYjY5NjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguaApAQCAtNDEsNiArNDEsOCBA
QCBjbGFzcyBQcm9jZWR1cmU7CiAKIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcmVkdWNlU3RyZW5n
dGgoUHJvY2VkdXJlJik7CiAKK0pTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2Fub25pY2FsaXplKFBy
b2NlZHVyZSYpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtl
eS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaAppbmRleCBiMzM0OTdh
YTJkY2I0ODVmZjVmMTFhMzBjY2RjZTJiZjEwYTI4YTZkLi40NmY0NDBjNTJmZDRlMGNlOWRmMDk2
NTk4Y2Q1Y2MwNmYzOTk1MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZUtleS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgK
QEAgLTU2LDYgKzU2LDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICBWYWx1ZUtleShW
YWx1ZSogY2hpbGQsIGludDY0X3QgdmFsdWUpOworCiAgICAgVmFsdWVLZXkoS2luZCwgVHlwZSwg
VmFsdWUqIGNoaWxkKTsKIAogICAgIFZhbHVlS2V5KEtpbmQsIFR5cGUsIFZhbHVlKiBsZWZ0LCBW
YWx1ZSogcmlnaHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWVLZXlJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleUlubGlu
ZXMuaAppbmRleCAxNDE1OGQ1MDFmNzNmY2JmNzBkNzU3M2Y4MDBlYjIwYjYyZmI5YWFmLi5lMTg2
NjE5NDkyNjIxNDA2NmZlODllNWM3MWIyZDA3NzgwNTQ3MDFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaApAQCAtMzMsNiArMzMsMTQgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKK2lubGluZSBWYWx1ZUtleTo6VmFsdWVLZXko
VmFsdWUqIGNoaWxkLCBpbnQ2NF90IHZhbHVlKQoreworICAgIG1fa2luZCA9IE9vcHM7CisgICAg
bV90eXBlID0gVm9pZDsKKyAgICB1LmluZGljZXNbMF0gPSBjaGlsZC0+aW5kZXgoKTsKKyAgICB1
LnZhbHVlID0gdmFsdWU7Cit9CisKIGlubGluZSBWYWx1ZUtleTo6VmFsdWVLZXkoS2luZCBraW5k
LCBUeXBlIHR5cGUsIFZhbHVlKiBjaGlsZCkKICAgICA6IG1fa2luZChraW5kKQogICAgICwgbV90
eXBlKHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKaW5kZXggMTAz
YzZlY2NhM2QzMTRiYjRlZDhjMDJhNGQyZjAwOWNhNjQxZDAwMS4uNzdlZTg0MjUxMjRiOWQ4Yjhj
NTgyZjM5ZmY5NjlmNjBmZDE2Y2MwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmNwcApAQCAtMTMwLDYgKzEzMCwxMSBAQCB1bnNpZ25lZCBBcmc6OmpzSGFzaCgpIGNvbnN0
CiAgICAgICAgIHJlc3VsdCArPSBtX2Jhc2UuaW50ZXJuYWxWYWx1ZSgpOwogICAgICAgICByZXN1
bHQgKz0gbV9pbmRleC5pbnRlcm5hbFZhbHVlKCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UHJlSW5kZXg6CisgICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAgIHJlc3VsdCArPSBtX29mZnNl
dDsKKyAgICAgICAgcmVzdWx0ICs9IG1fYmFzZS5pbnRlcm5hbFZhbHVlKCk7CisgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9zY2FsZSk7CiAgICAgICAgIHJlc3VsdCArPSBzdGFja1Nsb3QoKS0+aW5kZXgoKTsK
QEAgLTE2MSw3ICsxNjYsNyBAQCB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIHVu
c2lnbmVkPihtX29mZnNldCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBaZXJvUmVnOgot
ICAgICAgICBvdXQucHJpbnQoIiUleHpyIik7CisgICAgICAgIG91dC5wcmludCgiJXh6ciIpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTaW1wbGVBZGRyOgogICAgICAgICBvdXQucHJpbnQo
IigiLCBiYXNlKCksICIpIik7CkBAIC0xODAsNiArMTg1LDEyIEBAIHZvaWQgQXJnOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgp
KTsKICAgICAgICAgb3V0LnByaW50KCIpIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBy
ZUluZGV4OgorICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIsUHJlKCQiLCBvZmZzZXQo
KSwgIikpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAg
b3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLFBvc3QoJCIsIG9mZnNldCgpLCAiKSkiKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGlmIChvZmZzZXQoKSkKICAgICAg
ICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CkBAIC0yNjEsNiArMjcyLDEyIEBAIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6OktpbmQga2luZCkKICAgICBjYXNlIEFy
Zzo6SW5kZXg6CiAgICAgICAgIG91dC5wcmludCgiSW5kZXgiKTsKICAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQXJnOjpQcmVJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQcmVJbmRleCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OlBvc3RJbmRleDoKKyAgICAgICAgb3V0LnBy
aW50KCJQb3N0SW5kZXgiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpSZWxDb25k
OgogICAgICAgICBvdXQucHJpbnQoIlJlbENvbmQiKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKaW5kZXggY2U1YTRlNzM3OWFkNjQ0NDVmMGMzYWJk
MTI5ZjMyOWI5NDdmZTgxMi4uMWViZjUyYTIxNzJhM2IyOTNmYjllZTI2MjRlYTA1MmE0YWNlNDhk
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCkBAIC03Nyw2ICs3Nyw4IEBA
IHB1YmxpYzoKICAgICAgICAgU3RhY2ssCiAgICAgICAgIENhbGxBcmcsCiAgICAgICAgIEluZGV4
LAorICAgICAgICBQcmVJbmRleCwKKyAgICAgICAgUG9zdEluZGV4LAogCiAgICAgICAgIC8vIElt
bWVkaWF0ZSBvcGVyYW5kcyB0aGF0IGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3Igb2YgYW4gb3BlcmF0
aW9uLiBZb3UgY2FuIHRoaW5rIG9mIHRoZW0gYXMKICAgICAgICAgLy8gc2Vjb25kYXJ5IG9wY29k
ZXMuIFRoZXkgYXJlIGFsd2F5cyAiVXNlIidkLgpAQCAtNjQ5LDYgKzY1MSwzMCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBBcmc6OmluZGV4KGJhc2UsIGluZGV4LCBzY2FsZSwgMCk7CiAgICAg
fQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2Fs
T2Zmc2V0PEludD4+CisgICAgc3RhdGljIEFyZyBwcmVJbmRleChBaXI6OlRtcCBiYXNlLCBJbnQg
aW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBU1NF
UlQoaXNJbnQ5KGluZGV4KSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBQcmVJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAg
IHJlc3VsdC5tX29mZnNldCA9IGluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9m
ZnNldDxJbnQ+PgorICAgIHN0YXRpYyBBcmcgcG9zdEluZGV4KEFpcjo6VG1wIGJhc2UsIEludCBp
bmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VS
VChpc0ludDkoaW5kZXgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IFBvc3RJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAg
IHJlc3VsdC5tX29mZnNldCA9IGluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KwogICAgIHN0YXRpYyBBcmcgcmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24pCiAgICAgewogICAgICAgICBBcmcgcmVzdWx0OwpAQCAtNzk5LDYgKzgy
NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CiAgICAgfQog
CisgICAgYm9vbCBpc1ByZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5k
KCkgPT0gUHJlSW5kZXg7CisgICAgfQorCisgICAgYm9vbCBpc1Bvc3RJbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFBvc3RJbmRleDsKKyAgICB9CisKICAgICBi
b29sIGlzTWVtb3J5KCkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CkBA
IC04MDgsNiArODQ0LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBj
YXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6
CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05NzIsNyArMTAxMCw3
IEBAIHB1YmxpYzoKIAogICAgIEFpcjo6VG1wIGJhc2UoKSBjb25zdAogICAgIHsKLSAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBTaW1wbGVBZGRyIHx8IGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9
PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBTaW1wbGVBZGRyIHx8IGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRl
bmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IEluZGV4IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8
fCBraW5kKCkgPT0gUG9zdEluZGV4KTsKICAgICAgICAgcmV0dXJuIG1fYmFzZTsKICAgICB9CiAK
QEAgLTk4Miw3ICsxMDIwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGtpbmQoKSA9
PSBTdGFjaykKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlw
ZT4obV9zY2FsZSk7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0g
RXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRl
eCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRP
ZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCB8fCBraW5k
KCkgPT0gUHJlSW5kZXggfHwga2luZCgpID09IFBvc3RJbmRleCk7CiAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9vZmZzZXQpOwogICAgIH0KIApAQCAtMTA0
NCw2ICsxMDgyLDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2Ug
RXh0ZW5kZWRPZmZzZXRBZGRyOgogICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIFBy
ZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgY2FzZSBTdGFjazoKICAg
ICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBjYXNlIFJlbENvbmQ6CkBAIC0xMDgxLDYgKzEx
MjEsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRl
ZE9mZnNldEFkZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6
CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBj
YXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgQmlnSW1tOiAvLyBZZXMsIHdlIGFsbG93IEJpZ0lt
bSBhcyBhIGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3Rh
Y2ttYXBzLgpAQCAtMTIzNyw2ICsxMjc5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1
ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBib29sIGlzVmFsaWRQcmVJbmRleEZv
cm0oSW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAg
ICByZXR1cm4gaXNWYWxpZFNpZ25lZEltbTkob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6
SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBib29sIGlzVmFsaWRQb3N0SW5kZXhGb3Jt
KEludCBvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAg
cmV0dXJuIGlzVmFsaWRTaWduZWRJbW05KG9mZnNldCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKICAgICAvLyBJZiB5b3UgZG9uJ3QgcGFzcyBhIHdpZHRoIHRoZW4gdGhpcyBvcHRp
bWlzdGljYWxseSBhc3N1bWVzIHRoYXQgeW91J3JlIHVzaW5nIHRoZSByaWdodCB3aWR0aC4gQnV0
CiAgICAgLy8gdGhlIHdpZHRoIGlzIHJlbGV2YW50IHRvIHZhbGlkaXR5LCBzbyBwYXNzaW5nIGEg
bnVsbCB3aWR0aCBpcyBvbmx5IHVzZWZ1bCBmb3IgYXNzZXJ0aW9ucy4gRG9uJ3QKICAgICAvLyBw
YXNzIG51bGwgd2lkdGhzIHdoZW4gY2FzY2FkaW5nIHRocm91Z2ggQXJncyBpbiB0aGUgaW5zdHJ1
Y3Rpb24gc2VsZWN0b3IhCkBAIC0xMjY1LDYgKzEzMjMsMTAgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIGlzVmFsaWRBZGRyRm9ybShvZmZzZXQoKSwgd2lkdGgpOwogICAgICAgICBjYXNl
IEluZGV4OgogICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRJbmRleEZvcm0oc2NhbGUoKSwgb2Zm
c2V0KCksIHdpZHRoKTsKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgICAgIHJldHVy
biBpc1ZhbGlkUHJlSW5kZXhGb3JtKG9mZnNldCgpKTsKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6
CisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFBvc3RJbmRleEZvcm0ob2Zmc2V0KCkpOwogICAg
ICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBE
b3VibGVDb25kOgpAQCAtMTI4NCw2ICsxMzQ2LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIFNp
bXBsZUFkZHI6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNl
dEFkZHI6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4Ogog
ICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgSW5kZXg6CkBAIC0xMzI2LDYgKzEzOTAsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
U2ltcGxlQWRkcjoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zm
c2V0QWRkcjoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6
CiAgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCwgYXJnUm9sZSA9PSBVc2VBZGRy
ID8gYXJnV2lkdGggOiBwb2ludGVyV2lkdGgoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBJbmRleDoKQEAgLTEzODMsNiArMTQ0OSwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9vZmZzZXQpLCBtX2V4dGVuZCk7CiAg
ICAgfQogCisgICAgTWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzcyBhc1ByZUluZGV4QWRk
cmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNQcmVJbmRleCgpKTsKKyAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpQcmVJbmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBv
ZmZzZXQoKSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3Mg
YXNQb3N0SW5kZXhBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Bvc3RJ
bmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNz
KG1fYmFzZS5ncHIoKSwgb2Zmc2V0KCkpOworICAgIH0KKwogICAgIE1hY3JvQXNzZW1ibGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uIGFzUmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQoaXNSZWxDb25kKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXggNjYxZWFkZDIzNzNjNTRhNGJiYTk0N2E1NGJk
YTI1NTdiZGI4YWU0YS4uNDlmZWQxYWFhMTlhZjZkZGNkOTJjMzM5ZjcwYjU3NmQwZDM5NWRkZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rl
cworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBA
IC02NjEsNiArNjYxLDEyIEBAIHg4Nl82NDogU3dhcDY0IFVEOkc6NjQsIFVEOkc6NjQKICAgICBU
bXAsIFRtcAogICAgIFRtcCwgQWRkcgogCithcm02NDogTW92ZVdpdGhJbmNyZW1lbnQ2NCBVRDpH
OjY0LCBEOkc6NjQKKyAgICBQcmVJbmRleCwgVG1wIGFzIGxvYWQ2NAorICAgIFBvc3RJbmRleCwg
VG1wIGFzIGxvYWQ2NAorICAgIFRtcCwgUHJlSW5kZXggYXMgc3RvcmU2NAorICAgIFRtcCwgUG9z
dEluZGV4IGFzIHN0b3JlNjQKKwogTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1w
IGFzIHplcm9FeHRlbmQzMlRvV29yZAogICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKQEAgLTY3MSw2
ICs2NzcsMTIgQEAgTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIHg4NjogSW1tLCBBZGRyIGFz
IHN0b3JlMzIKICAgICB4ODY6IEltbSwgSW5kZXggYXMgc3RvcmUzMgogCithcm02NDogTW92ZVdp
dGhJbmNyZW1lbnQzMiBVRDpHOjMyLCBaRDpHOjMyCisgICAgUHJlSW5kZXgsIFRtcCBhcyBsb2Fk
MzIKKyAgICBQb3N0SW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBUbXAsIFByZUluZGV4IGFzIHN0
b3JlMzIKKyAgICBUbXAsIFBvc3RJbmRleCBhcyBzdG9yZTMyCisKICMgVGhpcyBpcyBmb3IgbW92
aW5nIGJldHdlZW4gc3BpbGwgc2xvdHMuCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyLCBTOkc6MzIK
ICAgICBBZGRyLCBBZGRyLCBUbXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
b3Bjb2RlX2dlbmVyYXRvci5yYgppbmRleCAzNzQwZWZkYmRkMTQ2YTM3ZjZlZGU5ZGRiYzIzZGRi
YTAzYjA3NjQ2Li5mMWJmMWE0NmNmYzg4OWVjMTkzNDZmMmMwNmI3Y2Y1MGY5ZTNkZTBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCkBA
IC0yMjksNyArMjI5LDcgQEAgZGVmIGlzR0YodG9rZW4pCiBlbmQKIAogZGVmIGlzS2luZCh0b2tl
bikKLSAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdElt
bTY0KXwoWmVyb1JlZyl8KFNpbXBsZUFkZHIpfChBZGRyKXwoRXh0ZW5kZWRPZmZzZXRBZGRyKXwo
SW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8K
KyAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0
KXwoWmVyb1JlZyl8KFNpbXBsZUFkZHIpfChBZGRyKXwoRXh0ZW5kZWRPZmZzZXRBZGRyKXwoSW5k
ZXgpfChQcmVJbmRleCl8KFBvc3RJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29u
ZCl8KFN0YXR1c0NvbmQpKVxaLwogZW5kCiAKIGRlZiBpc0FyY2godG9rZW4pCkBAIC0zMDMsNyAr
MzAzLDcgQEAgY2xhc3MgUGFyc2VyCiAKICAgICBkZWYgY29uc3VtZUtpbmQKICAgICAgICAgcmVz
dWx0ID0gdG9rZW4uc3RyaW5nCi0gICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKElt
bSwgQmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0LCBaZXJvUmVnLCBUbXAsIFNpbXBsZUFkZHIsIEFk
ZHIsIEV4dGVuZGVkT2Zmc2V0QWRkciwgSW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNv
bmQsIG9yIFN0YXR1c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIHBhcnNl
RXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0LCBaZXJv
UmVnLCBUbXAsIFNpbXBsZUFkZHIsIEFkZHIsIEV4dGVuZGVkT2Zmc2V0QWRkciwgSW5kZXgsIFBy
ZUluZGV4LCBQb3N0SW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1
c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCiAgICAgICAgIGFkdmFuY2UKICAgICAgICAg
cmVzdWx0CiAgICAgZW5kCkBAIC05MjksNiArOTI5LDEyIEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJh
dGVkIikgewogICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4IgogICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkSW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLnNj
YWxlKCksIGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpLCAje2FyZy53aWR0aENvZGV9KSkiCiAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAg
ICAgICAgICAgd2hlbiAiUHJlSW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
aWYgKCFBcmc6OmlzVmFsaWRQcmVJbmRleEZvcm0oYXJnc1sje2luZGV4fV0ub2Zmc2V0KCkpKSIK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAg
ICAgICAgICAgICAgICB3aGVuICJQb3N0SW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRQb3N0SW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNl
dCgpKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNl
KTsiCiAgICAgICAgICAgICAgICAgd2hlbiAiQmlnSW1tIgogICAgICAgICAgICAgICAgIHdoZW4g
IlJlbENvbmQiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKQEAgLTEyMzUsNiArMTI0
MSwxMCBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICAgICAg
b3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNBZGRyZXNzKCkiCiAgICAgICAgICAgICAgICAg
d2hlbiAiSW5kZXgiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRl
eH1dLmFzQmFzZUluZGV4KCkiCisgICAgICAgICAgICAgICAgd2hlbiAiUHJlSW5kZXgiCisgICAg
ICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUHJlSW5kZXhBZGRy
ZXNzKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiUG9zdEluZGV4IgorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Bvc3RJbmRleEFkZHJlc3MoKSIKICAg
ICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnBy
aW50ICJhcmdzWyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKICAgICAgICAgICAg
ICAgICB3aGVuICJSZXNDb25kIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IGM3MDMy
ZWMwODRkZGZkZDkzNWU1NTI3ZmFhZTkzNTY4MTk4NDgxNzkuLjcyMWViM2FkZDYyNzQ4ZTJmYjAy
ZGRmNDI1NTdjYzU5ZDVkODgwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTEx
NDAsNCArMTE0MCw5IEBAIHZvaWQgYWRkQ29weVRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVx
dWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+Jik7CiAKIGJvb2wgc2hvdWxkUnVuKGNvbnN0
IGNoYXIqIGZpbHRlciwgY29uc3QgY2hhciogdGVzdE5hbWUpOwogCit2b2lkIHRlc3RMb2FkUHJl
SW5kZXgzMigpOwordm9pZCB0ZXN0TG9hZFByZUluZGV4NjQoKTsKK3ZvaWQgdGVzdExvYWRQb3N0
SW5kZXgzMigpOwordm9pZCB0ZXN0TG9hZFBvc3RJbmRleDY0KCk7CisKICNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18z
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKaW5kZXggNGM1MmFk
YTljYzQwMmRkZTUzOTg4Y2M4ZjJmNWU5ZTBkZGUyZTExYy4uYjg5YjAxOWZkOGJmNWYwNzEyZjQ2
Njg2NTBmNjFjZGY4MWRhNGM4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiM18zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3Bw
CkBAIC0yOCw2ICsyOCwzMDAgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKwordm9pZCB0ZXN0
TG9hZFByZUluZGV4MzIoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgp
IDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMs
IDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50MzJfdCogcHRyID0gbnVtczsKKworICAg
IFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9
IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJ
bnQzMik7CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAg
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAg
IC8vIFVwc2lsb24ocjEsIF5yMikKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAx
LCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3Jp
Z2luKCksIEludDMyLCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJv
YywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQs
IE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAv
LyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8g
ZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAg
IFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVh
bCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9j
LCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50
ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29w
X0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikK
KyAgICAvLyByMyA9IHIyICsgbG9hZChwMykKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAg
Ly8gZ290byBsb29wCisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgNCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBWYWx1ZSogcjMgPSBs
b29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJv
ZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBw
MykpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNl
dCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAg
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAg
Ly8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVy
biwgT3JpZ2luKCksIHIyKTsKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2
YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgIiM0XSEiKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQz
Ml90IHsKKyAgICAgICAgaW50MzJfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAg
ICAgICAgICAgIHIgKz0gKisrcHRyOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAg
Q0hFQ0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0
cikpLCB0ZXN0KCkpOworfQorCit2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpCit7CisgICAgaWYg
KE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAg
ICBpbnQ2NF90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFy
aWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKyAgICBWYXJpYWJsZSogcCA9IHBy
b2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBS
b290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKQorICAgIC8v
IHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290
LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50NjQsIDApOworICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEp
OworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRC
bG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rl
c3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBo
aSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRl
c3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7
CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9j
LCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5h
cHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVz
dC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZy
ZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHAzID0gcDIg
KyAxCisgICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAgIC8vIHIzID0gcjIgKyBsb2FkKHAzKQor
ICAgIC8vIFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcDMg
PSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9v
cEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KSk7CisgICAg
bG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4o
KSwgcCwgcDMpOworICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihw
cm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksIHAzKSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5l
dzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxv
b3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1
ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBE
b25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBl
bmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOworCisgICAgcHJv
Yy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShw
cm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FS
TTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzhdISIpOworCisg
ICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDY0X3QgeworICAgICAgICBpbnQ2NF90IHIgPSAw
OworICAgICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqKytwdHI7CisgICAg
ICAgIHJldHVybiByOworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50NjRfdD4oKmNv
ZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVz
dExvYWRQb3N0SW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVs
KCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwg
MywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQzMl90KiBwdHIgPSBudW1zOworCisg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25l
ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxl
KEludDMyKTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisg
ICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisg
ICAgLy8gVXBzaWxvbihyMSwgXnIyKQorICAgIC8vIHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24o
cDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBP
cmlnaW4oKSwgSW50MzIsIDApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihw
cm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNl
dCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJv
YywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAg
IC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290
byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVl
Pihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3Qt
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7Cisg
ICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVx
dWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVl
bnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExv
b3BfQm9keV9CbG9jaworICAgIC8vIHIzID0gcjIgKyBsb2FkKHAyKQorICAgIC8vIHAzID0gcDIg
KyAxCisgICAgLy8gVXBzaWxvbihyMywgXnIyKQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAg
ICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBwMikpOworICAgIFZhbHVlKiBwMyA9IGxv
b3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBsb29wQm9k
eS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQpKTsKKyAgICBsb29w
Qm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBy
LCByMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6
U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisg
ICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAg
ICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcjIpOworCisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAg
IHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0lu
c3RydWN0aW9uKCpjb2RlLCAiXSwgIzQiKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBp
bnQzMl90IHsKKyAgICAgICAgaW50MzJfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkK
KyAgICAgICAgICAgIHIgKz0gKnB0cisrOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KHB0cikpLCB0ZXN0KCkpOworfQorCit2b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQoKQoreworICAg
IGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07
CisgICAgaW50NjRfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRl
c3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
IFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisgICAgVmFyaWFibGUqIHAg
PSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikKKyAg
ICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0g
cm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDY0LCAwKTsKKyAgICBy
b290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIs
IHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAg
cm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9v
cF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIg
PSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxv
b3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCks
IHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVz
dC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9v
cFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25k
LCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisg
ICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyByMyA9
IHIyICsgbG9hZChwMikKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocjMsIF5y
MikKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUq
IHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIs
IGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0LCBPcmln
aW4oKSwgcDIpKTsKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KHByb2MsIE9yaWdpbigpLCA4KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAg
ICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBG
cmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsKKworICAg
IHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhT
U0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAo
aXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM4Iik7
CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50NjRfdCB7CisgICAgICAgIGludDY0X3Qg
ciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9ICpwdHIrKzsK
KyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGludm9rZTxpbnQ2NF90
PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKworCiB2
b2lkIHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzMyKCkKIHsKICAgICBpZiAoSlNDOjpP
cHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKQEAgLTM2OTcsNiArMzk5MSwxMSBAQCB2
b2lkIGFkZFNoclRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRh
c2s8dm9pZCgpPj4+JiB0YXNrcykKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZm
LCAwKSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMSkpOwogICAgIFJV
Tih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDYzKSk7CisKKyAgICBSVU4odGVzdExvYWRQ
cmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7CisgICAgUlVOKHRl
c3RMb2FkUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4NjQoKSk7CiB9
CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKaW5kZXggNjNlMjY2Nzg4NTIwMThhNzY4MGNh
NWYwNzE0Njk2ODEwNTg4NGIzYi4uNjliYjZiMmJlODE4NzBiNTk4MzMzNjdhZjI2NzViN2Y0ZWYw
NTZmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwCkBAIC0yMzMsOCArMjMzLDggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJhdG8KICAg
ICBqaXQucmV0KCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9jYWwwID0gaml0Lmxh
YmVsKCk7Ci0gICAgaml0LmxvYWQ2NCh4MSwgUG9zdEluZGV4KDgpLCB4Nik7Ci0gICAgaml0LnN0
b3JlNjQoeDYsIHgzLCBQb3N0SW5kZXgoOCkpOworICAgIGppdC5sb2FkNjQoTWFjcm9Bc3NlbWJs
ZXI6OlBvc3RJbmRleEFkZHJlc3MoeDEsIDgpLCB4Nik7CisgICAgaml0LnN0b3JlNjQoeDYsIE1h
Y3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgzLCA4KSk7CiAgICAgc21hbGxDb3B5Lmxp
bmsoJmppdCk7CiAgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIFRydXN0ZWRJbW0zMig4KSwgeDIpLmxpbmtUbyhsb2NhbDAsICZqaXQpOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGxvY2FsMiA9IGppdC5icmFuY2hBZGQ2NChNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIFRydXN0ZWRJbW0zMig4KSwgeDIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434582</attachid>
            <date>2021-07-29 16:07:11 -0700</date>
            <delta_ts>2021-08-09 07:42:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228047-20210729180710.patch</filename>
            <type>text/plain</type>
            <size>60155</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi42NGFjYWQ1YTFhOGMyOGQw
MDIxY2ViZmU0NTk5NTkwMTFhZWQ0MGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNzAgQEAKKzIwMjEtMDctMjkgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBQcmUvUG9zdC1JbmRleGVkIEFkZHJlc3MgTW9kZSB0byBBaXIg
Zm9yIEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjgwNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcmUtaW5kZXhlZCBhZGRyZXNzaW5nIG1lYW5zIHRoYXQgdGhlIGFkZHJlc3MgaXMgdGhlIHN1
bSBvZiB0aGUgdmFsdWUgaW4gdGhlIDY0LWJpdCBiYXNlIHJlZ2lzdGVyIAorICAgICAgICBhbmQg
YW4gb2Zmc2V0LCBhbmQgdGhlIGFkZHJlc3MgaXMgdGhlbiB3cml0dGVuIGJhY2sgdG8gdGhlIGJh
c2UgcmVnaXN0ZXIuIEFuZCBwb3N0LWluZGV4ZWQgCisgICAgICAgIGFkZHJlc3NpbmcgbWVhbnMg
dGhhdCB0aGUgYWRkcmVzcyBpcyB0aGUgdmFsdWUgaW4gdGhlIDY0LWJpdCBiYXNlIHJlZ2lzdGVy
LCBhbmQgdGhlIHN1bSBvZiB0aGUgCisgICAgICAgIGFkZHJlc3MgYW5kIHRoZSBvZmZzZXQgaXMg
dGhlbiB3cml0dGVuIGJhY2sgdG8gdGhlIGJhc2UgcmVnaXN0ZXIuIFRoZXkgYXJlIHJlbGF0aXZl
bHkgY29tbW9uIGZvciAKKyAgICAgICAgbG9vcHMgdG8gaXRlcmF0ZSBvdmVyIGFuIGFycmF5IGJ5
IGluY3JlYXNpbmcvZGVjcmVhc2luZyBhIHBvaW50ZXIgaW50byB0aGUgYXJyYXkgYXQgZWFjaCBp
dGVyYXRpb24uIAorICAgICAgICBXaXRoIHN1Y2ggYW4gYWRkcmVzc2luZyBtb2RlLCB0aGUgaW5z
dHJ1Y3Rpb24gc2VsZWN0b3IgY2FuIG1lcmdlIHRoZSBpbmNyZW1lbnQgYW5kIGFjY2VzcyB0aGUg
YXJyYXkuCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor
ICAgICAgICAjIyBQcmUtSW5kZXggQWRkcmVzcyBNb2RlIEZvciBMb2FkICMjCisgICAgICAgICMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICAgICBMRFIgV3QsIFtY
biwgI2ltbV0hCisKKyAgICAgICAgSW4gQjMgUmVkdWN0aW9uIFN0cmVuZ3RoLCBzaW5jZSB3ZSBo
YXZlIHRoaXMgcmVkdWN0aW9uIHJ1bGU6CisgICAgICAgICAgICBUdXJuIHRoaXM6IExvYWQoQWRk
KGFkZHJlc3MsIG9mZnNldDEpLCBvZmZzZXQgPSBvZmZzZXQyKQorICAgICAgICAgICAgSW50byB0
aGlzOiBMb2FkKGFkZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorCisgICAgICAg
IFRoZW4sIHRoZSBlcXVpdmFsZW50IHBhdHRlcm4gaXM6CisgICAgICAgICAgICBhZGRyZXNzID0g
QWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgbWVtb3J5ID0g
TG9hZChiYXNlLCBvZmZzZXQpCisKKyAgICAgICAgRmlyc3QsIHdlIGNvbnZlcnQgaXQgdG8gdGhl
IGNhbm9uaWNhbCBmb3JtOgorICAgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0FkZHJl
c3MpCisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwg
b2Zmc2V0KQorICAgICAgICAgICAgbWVtb3J5ID0gTG9hZChhZGRyZXNzLCBvZmZzZXQpCisKKyAg
ICAgICAgTmV4dCwgbG93ZXIgdG8gQWlyOgorICAgICAgICAgICAgTW92ZSAlYmFzZSwgJWFkZHJl
c3MKKyAgICAgICAgICAgIE1vdmUgKCVhZGRyZXNzLCBwcmVmaXgob2Zmc2V0KSksICVtZW1vcnkK
KworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAg
ICAjIyBQb3N0LUluZGV4IEFkZHJlc3MgTW9kZSBGb3IgTG9hZCAjIworICAgICAgICAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgIExEUiBXdCwgW1huXSwg
I2ltbQorCisgICAgICAgIFRoZW4sIHRoZSBlcXVpdmFsZW50IHBhdHRlcm4gaXM6CisgICAgICAg
ICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLgorICAgICAg
ICAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCisKKyAgICAgICAgRmlyc3QsIHdlIGNv
bnZlcnQgaXQgdG8gdGhlIGNhbm9uaWNhbCBmb3JtOgorICAgICAgICAgICAgbmV3QWRkcmVzcyA9
IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCisg
ICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNz
KQorCisgICAgICAgIE5leHQsIGxvd2VyIHRvIEFpcjoKKyAgICAgICAgICAgIE1vdmUgJWJhc2Us
ICVhZGRyZXNzCisgICAgICAgICAgICBNb3ZlICglYWRkcmVzcywgcG9zdGZpeChvZmZzZXQpKSwg
JW1lbW9yeQorCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAg
ICMjIFBhdHRlcm4gTWF0Y2ggQWxnb3JpdGhtICMjCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjCisKKyAgICAgICAgVG8gZGV0ZWN0IHRoZSBwYXR0ZXJuIGZvciBwcmVmaXgv
cG9zdGZpeCBpbmNyZW1lbnQgYWRkcmVzcyBpcyB0cmlja3kgZHVlIHRvIHRoZSBzdHJ1Y3R1cmUg
aW4gQjMgSVIuIFRoZSAKKyAgICAgICAgYWxnb3JpdGhtIHVzZWQgaW4gdGhpcyBwYXRjaCBpcyB0
byBjb2xsZWN0IHRoZSBmaXJzdCB2YWxpZCB2YWx1ZXMgKGFkZC9sb2FkKSwgdGhlbiBzZWFyY2gg
Zm9yIGFueSAKKyAgICAgICAgcGFpcmVkIHZhbHVlIChsb2FkL2FkZCkgdG8gbWF0Y2ggYWxsIG9m
IHRoZW0uIEluIHdvcnN0IGNhc2UsIHRoZSBydW50aW1lIGNvbXBsZXhpdHkgaXMgTyhuXjIpIAor
ICAgICAgICB3aGVuIG4gaXMgdGhlIG51bWJlciBvZiBhbGwgdmFsdWVzLgorCisgICAgICAgIEFm
dGVyIGNvbGxlY3RpbmcgdHdvIHNldHMgb2YgY2FuZGlkYXRlcywgd2UgbWF0Y2ggdGhlIHByZWZp
eCBpbmNyZW1lbnRhbCBhZGRyZXNzIGZpcnN0IHNpbmNlIGl0IHNlZW1zIAorICAgICAgICBtb3Jl
IGJlbmVmaWNpYWwgdG8gdGhlIGNvbXBpbGVyIChzaG93biBpbiB0aGUgbmV4dCBzZWN0aW9uKS4g
QW5kIHRoZW4sIGdvIGZvciB0aGUgcG9zdGZpeCBvbmUuCisKKyAgICAgICAgIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIyBUZXN0IGZvciBQ
cmUvUG9zdC1JbmNyZW1lbnQgQWRkcmVzcyBNb2RlICMjCisgICAgICAgICMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICAgICBHaXZlbiBMb29wIHdp
dGggUHJlLUluY3JlbWVudDoKKyAgICAgICAgaW50NjRfdCBsZHJfcHJlKGludDY0X3QgKnApIHsK
KyAgICAgICAgICAgIGludDY0X3QgcmVzID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChyZXMgPCAx
MCkKKyAgICAgICAgICAgICAgICByZXMgKz0gKisrcDsKKyAgICAgICAgICAgIHJldHVybiByZXM7
CisgICAgICAgIH0KKworICAgICAgICBCMyBJUjoKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJCIzA6IDsgZnJl
cXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgICAgIEludDY0IGJAMCA9IENvbnN0NjQoMCkKKyAg
ICAgICAgICAgIEludDY0IGJAMiA9IEFyZ3VtZW50UmVnKCV4MCkKKyAgICAgICAgICAgIFZvaWQg
YkAyMCA9IFVwc2lsb24oJDAoYkAwKSwgXjE4LCBXcml0ZXNMb2NhbFN0YXRlKQorICAgICAgICAg
ICAgVm9pZCBiQDIxID0gVXBzaWxvbihiQDIsIF4xOSwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAg
ICAgICAgIFZvaWQgYkA0ID0gSnVtcChUZXJtaW5hbCkKKyAgICAgICAgU3VjY2Vzc29yczogIzEK
KyAgICAgICAgQkIjMTogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNlc3Nv
cnM6ICMwLCAjMgorICAgICAgICAgICAgSW50NjQgYkAxOCA9IFBoaShSZWFkc0xvY2FsU3RhdGUp
CisgICAgICAgICAgICBJbnQ2NCBiQDE5ID0gUGhpKFJlYWRzTG9jYWxTdGF0ZSkKKyAgICAgICAg
ICAgIEludDY0IGJANyA9IENvbnN0NjQoMTApCisgICAgICAgICAgICBJbnQzMiBiQDggPSBBYm92
ZUVxdWFsKGJAMTgsICQxMChiQDcpKQorICAgICAgICAgICAgVm9pZCBiQDkgPSBCcmFuY2goYkA4
LCBUZXJtaW5hbCkKKyAgICAgICAgU3VjY2Vzc29yczogVGhlbjojMywgRWxzZTojMgorICAgICAg
ICBCQiMyOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRlY2Vzc29yczogIzEK
KyAgICAgICAgICAgIEludDY0IGJAMTAgPSBDb25zdDY0KDgpCisgICAgICAgICAgICBJbnQ2NCBi
QDExID0gQWRkKGJAMTksICQ4KGJAMTApKQorICAgICAgICAgICAgSW50NjQgYkAxMyA9IExvYWQo
YkAxMSwgQ29udHJvbERlcGVuZGVudHxSZWFkczpUb3ApCisgICAgICAgICAgICBJbnQ2NCBiQDE0
ID0gQWRkKGJAMTgsIGJAMTMpCisgICAgICAgICAgICBWb2lkIGJAMjIgPSBVcHNpbG9uKGJAMTQs
IF4xOCwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAgICAgICAgIFZvaWQgYkAyMyA9IFVwc2lsb24o
YkAxMSwgXjE5LCBXcml0ZXNMb2NhbFN0YXRlKQorICAgICAgICAgICAgVm9pZCBiQDE2ID0gSnVt
cChUZXJtaW5hbCkKKyAgICAgICAgU3VjY2Vzc29yczogIzEKKyAgICAgICAgQkIjMzogOyBmcmVx
dWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNlc3NvcnM6ICMxCisgICAgICAgICAgICBW
b2lkIGJAMTcgPSBSZXR1cm4oYkAxOCwgVGVybWluYWwpCisgICAgICAgIFZhcmlhYmxlczoKKyAg
ICAgICAgICAgIEludDY0IHZhcjAKKyAgICAgICAgICAgIEludDY0IHZhcjEKKyAgICAgICAgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICAgICAgVy9PIFByZS1JbmNyZW1lbnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLi4u
CisgICAgICAgIEJCIzI6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNz
b3JzOiAjMQorICAgICAgICAgICAgTW92ZSAkOCwgJXgzLCAkOChiQDEyKQorICAgICAgICAgICAg
QWRkNjQgJDgsICV4MCwgJXgxLCBiQDExCisgICAgICAgICAgICBNb3ZlICgleDAsJXgzKSwgJXgw
LCBiQDEzCisgICAgICAgICAgICBBZGQ2NCAleDAsICV4MiwgJXgyLCBiQDE0CisgICAgICAgICAg
ICBNb3ZlICV4MSwgJXgwLCBiQDIzCisgICAgICAgICAgICBKdW1wIGJAMTYKKyAgICAgICAgU3Vj
Y2Vzc29yczogIzEKKyAgICAgICAgLi4uCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcvIFByZS1JbmNyZW1l
bnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLi4uCisgICAgICAgIEJCIzI6IDsgZnJl
cXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNzb3JzOiAjMQorICAgICAgICAgICAg
TW92ZVdpdGhJbmNyZW1lbnQ2NCAoJXgwLFByZSgkOCkpLCAleDIsIGJAMTMKKyAgICAgICAgICAg
IEFkZDY0ICV4MiwgJXgxLCAleDEsIGJAMTQKKyAgICAgICAgICAgIEp1bXAgYkAxNgorICAgICAg
ICBTdWNjZXNzb3JzOiAjMQorICAgICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgR2l2ZW4gTG9v
cCB3aXRoIFBvc3QtSW5jcmVtZW50OgorICAgICAgICBpbnQ2NF90IGxkcl9wcmUoaW50NjRfdCAq
cCkgeworICAgICAgICAgICAgaW50NjRfdCByZXMgPSAwOworICAgICAgICAgICAgd2hpbGUgKHJl
cyA8IDEwKQorICAgICAgICAgICAgICAgIHJlcyArPSAqcCsrOworICAgICAgICAgICAgcmV0dXJu
IHJlczsKKyAgICAgICAgfQorCisgICAgICAgIEIzIElSOgorICAgICAgICAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQkIjMDog
OyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICAgICAgSW50NjQgYkAwID0gQ29uc3Q2NCgw
KQorICAgICAgICAgICAgSW50NjQgYkAyID0gQXJndW1lbnRSZWcoJXgwKQorICAgICAgICAgICAg
Vm9pZCBiQDIwID0gVXBzaWxvbigkMChiQDApLCBeMTgsIFdyaXRlc0xvY2FsU3RhdGUpCisgICAg
ICAgICAgICBWb2lkIGJAMjEgPSBVcHNpbG9uKGJAMiwgXjE5LCBXcml0ZXNMb2NhbFN0YXRlKQor
ICAgICAgICAgICAgVm9pZCBiQDQgPSBKdW1wKFRlcm1pbmFsKQorICAgICAgICBTdWNjZXNzb3Jz
OiAjMQorICAgICAgICBCQiMxOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRl
Y2Vzc29yczogIzAsICMyCisgICAgICAgICAgICBJbnQ2NCBiQDE4ID0gUGhpKFJlYWRzTG9jYWxT
dGF0ZSkKKyAgICAgICAgICAgIEludDY0IGJAMTkgPSBQaGkoUmVhZHNMb2NhbFN0YXRlKQorICAg
ICAgICAgICAgSW50NjQgYkA3ID0gQ29uc3Q2NCgxMCkKKyAgICAgICAgICAgIEludDMyIGJAOCA9
IEFib3ZlRXF1YWwoYkAxOCwgJDEwKGJANykpCisgICAgICAgICAgICBWb2lkIGJAOSA9IEJyYW5j
aChiQDgsIFRlcm1pbmFsKQorICAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiMzLCBFbHNlOiMyCisg
ICAgICAgIEJCIzI6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNzb3Jz
OiAjMQorICAgICAgICAgICAgSW50NjQgYkAxMCA9IExvYWQoYkAxOSwgQ29udHJvbERlcGVuZGVu
dHxSZWFkczpUb3ApCisgICAgICAgICAgICBJbnQ2NCBiQDExID0gQWRkKGJAMTgsIGJAMTApCisg
ICAgICAgICAgICBJbnQ2NCBiQDEyID0gQ29uc3Q2NCg4KQorICAgICAgICAgICAgSW50NjQgYkAx
MyA9IEFkZChiQDE5LCAkOChiQDEyKSkKKyAgICAgICAgICAgIFZvaWQgYkAyMiA9IFVwc2lsb24o
YkAxMSwgXjE4LCBXcml0ZXNMb2NhbFN0YXRlKQorICAgICAgICAgICAgVm9pZCBiQDIzID0gVXBz
aWxvbihiQDEzLCBeMTksIFdyaXRlc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBWb2lkIGJAMTYg
PSBKdW1wKFRlcm1pbmFsKQorICAgICAgICBTdWNjZXNzb3JzOiAjMQorICAgICAgICBCQiMzOiA7
IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRlY2Vzc29yczogIzEKKyAgICAgICAg
ICAgIFZvaWQgYkAxNyA9IFJldHVybihiQDE4LCBUZXJtaW5hbCkKKyAgICAgICAgVmFyaWFibGVz
OgorICAgICAgICAgICAgSW50NjQgdmFyMAorICAgICAgICAgICAgSW50NjQgdmFyMQorICAgICAg
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworICAgICAgICBXL08gUG9zdC1JbmNyZW1lbnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAg
ICAgLi4uCisgICAgICAgIEJCIzI6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJl
ZGVjZXNzb3JzOiAjMQorICAgICAgICAgICAgTW92ZSAoJXgwKSwgJXgyLCBiQDEwCisgICAgICAg
ICAgICBBZGQ2NCAleDIsICV4MSwgJXgxLCBiQDExCisgICAgICAgICAgICBBZGQ2NCAkOCwgJXgw
LCAleDAsIGJAMTMKKyAgICAgICAgICAgIEp1bXAgYkAxNgorICAgICAgICBTdWNjZXNzb3JzOiAj
MQorICAgICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVy8gUG9zdC1JbmNyZW1lbnQgQWRkcmVz
cyBNb2RlOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLi4uCisgICAgICAgIEJCIzI6IDsgZnJlcXVlbmN5ID0g
MS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNzb3JzOiAjMQorICAgICAgICAgICAgTW92ZVdpdGhJ
bmNyZW1lbnQ2NCAoJXgwLFBvc3QoJDgpKSwgJXgyLCBiQDEwCisgICAgICAgICAgICBBZGQ2NCAl
eDIsICV4MSwgJXgxLCBiQDExCisgICAgICAgICAgICBKdW1wIGJAMTYKKyAgICAgICAgU3VjY2Vz
c29yczogIzEKKyAgICAgICAgLi4uCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpT
Qzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzOjpQcmVJbmRleEFkZHJl
c3MpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRy
ZXNzOjpQb3N0SW5kZXhBZGRyZXNzKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk02NDo6c3RvcmUzMik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoK
KyAgICAgICAgKEpTQzo6dGVzdFN0b3JlUHJlUG9zdEluZGV4MzIpOgorICAgICAgICAoSlNDOjp0
ZXN0U3RvcmVQcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJlUG9zdElu
ZGV4MzIpOgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJbmRleDY0KToKKyAgICAgICAg
KiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgor
ICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvQjNWYWx1ZUtleS5o
OgorICAgICAgICAqIGIzL0IzVmFsdWVLZXlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZUtleTo6VmFsdWVLZXkpOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuY3BwOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OmpzSGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6ZHVtcCBjb25zdCk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJBcmcuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwcmVJ
bmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cG9zdEluZGV4KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjppc1ByZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjppc1Bvc3RJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFy
Zzo6aXNNZW1vcnkgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmJhc2UgY29u
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCBjb25zdCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6aXNGUCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZFBy
ZUluZGV4Rm9ybSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZFBvc3RJbmRl
eEZvcm0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRGb3JtIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wRmFzdCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6Zm9yRWFjaFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFy
Zzo6YXNQcmVJbmRleEFkZHJlc3MgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OmFzUG9zdEluZGV4QWRkcmVzcyBjb25zdCk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5v
cGNvZGVzOgorICAgICAgICAqIGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAgICAq
IGIzL3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RM
b2FkUHJlSW5kZXgzMik6CisgICAgICAgICh0ZXN0TG9hZFByZUluZGV4NjQpOgorICAgICAgICAo
dGVzdExvYWRQb3N0SW5kZXgzMik6CisgICAgICAgICh0ZXN0TG9hZFBvc3RJbmRleDY0KToKKyAg
ICAgICAgKGFkZFNoclRlc3RzKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHA6CisgICAgICAgIChKU0M6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorCiAyMDIxLTA3LTI2
ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFRlbXBv
cmFsIHRvIGZlYXR1cmVzLmpzb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA1NWRj
YTFmZjA1M2Y0Y2U5ODVkMjFmZDZkYmMzZGQzYjBkZTdjYjAwLi5hNjQ3MDJkYjYwMWNjMjFhYmI0
YzI2Mjk0NTdkZDFhNzU5YzMwMjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0x
MTMsNiArMTEzLDcgQEAgYjMvQjNCYXNpY0Jsb2NrLmNwcAogYjMvQjNCbG9ja0luc2VydGlvblNl
dC5jcHAKIGIzL0IzQm90dG9tVHVwbGVWYWx1ZS5jcHAKIGIzL0IzQnJlYWtDcml0aWNhbEVkZ2Vz
LmNwcAorYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAKIGIzL0IzQ0NhbGxW
YWx1ZS5jcHAKIGIzL0IzQ2FzZUNvbGxlY3Rpb24uY3BwCiBiMy9CM0NoZWNrU3BlY2lhbC5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgKaW5kZXggM2QxOTQ5YTQwNzg1ZDk5Y2E2MTU5NWFhYjA0YmU2ZjFkMGQ5
NmJhMy4uMjM1NGM0NTM2OGM3YzBkNWNlOTAxOGFjZmYyODRjNGEwYTA0MzFhOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmgKQEAgLTI0NSw2ICsyNDUsMzQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfTsK
IAorICAgIC8vIFByZUluZGV4QWRkcmVzczoKKyAgICAvLworICAgIC8vIERlc2NyaWJlcyBhbiBh
ZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwcmUtaW5jcmVtZW50L2RlY3JlbWVudCBpbmRl
eC4KKyAgICBzdHJ1Y3QgUHJlSW5kZXhBZGRyZXNzIHsKKyAgICAgICAgUHJlSW5kZXhBZGRyZXNz
KFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAgICAgICAgOiBiYXNlKGJhc2UpCisg
ICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRleDsKKyAgICB9OworCisgICAgLy8g
UG9zdEluZGV4QWRkcmVzczoKKyAgICAvLworICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdp
dGggYmFzZSBhZGRyZXNzIGFuZCBwb3N0LWluY3JlbWVudC9kZWNyZW1lbnQgaW5kZXguCisgICAg
c3RydWN0IFBvc3RJbmRleEFkZHJlc3MgeworICAgICAgICBQb3N0SW5kZXhBZGRyZXNzKFJlZ2lz
dGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAgICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAg
ICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZWdp
c3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRleDsKKyAgICB9OworCiAgICAgLy8gQWJzb2x1
dGVBZGRyZXNzOgogICAgIC8vCiAgICAgLy8gRGVzY3JpYmVzIGFuIG1lbW9yeSBvcGVyYW5kIGdp
dmVuIGJ5IGEgcG9pbnRlci4gIEZvciByZWd1bGFyIGxvYWQgJiBzdG9yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRl
eCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5MGZkLi4yYTkxMmQwZGQyNjYy
NmJkNzRlMTAzYmVmOTY1ZjJiYWRmY2UwYmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtMTQ0NSw5ICsxNDQ1
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDw2ND4oYWRkcmVzcywgZGVzdCk7CiAgICAgfQog
Ci0gICAgdm9pZCBsb2FkNjQoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRleCBzaW1tLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQoUHJlSW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMsIHNp
bW0pOworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRl
eChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQ2NChQb3N0SW5kZXhBZGRyZXNz
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDY0
PihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkpOwogICAgIH0KIAogICAgIERh
dGFMYWJlbDMyIGxvYWQ2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBS
ZWdpc3RlcklEIGRlc3QpCkBAIC0xNTQ0LDYgKzE1NDksMTYgQEAgcHVibGljOgogICAgICAgICBs
b2FkPDMyPihhZGRyZXNzLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGxvYWQzMihQcmVJbmRl
eEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisK
KyAgICB2b2lkIGxvYWQzMihQb3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihkZXN0LCBzcmMuYmFzZSwgUG9zdElu
ZGV4KHNyYy5pbmRleCkpOworICAgIH0KKwogICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKQEAgLTE3MzMsNyArMTc0OCwxNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBt
ZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNz
KSwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBhZGRy
ZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rlcik7CiAgICAgfQotICAgIAorCisgICAgdm9pZCBz
dG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBQcmVJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2UsIFByZUluZGV4KGRlc3QuaW5k
ZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRl
eEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBk
ZXN0LmJhc2UsIFBvc3RJbmRleChkZXN0LmluZGV4KSk7CisgICAgfQorCiAgICAgdm9pZCBzdG9y
ZTY0KFJlZ2lzdGVySUQgc3JjLCBjb25zdCB2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAg
c3RvcmU8NjQ+KHNyYywgYWRkcmVzcyk7CkBAIC0xNzc3LDExICsxODAyLDYgQEAgcHVibGljOgog
ICAgICAgICBzdG9yZTY0KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAotICAg
IHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBQb3N0SW5kZXgg
c2ltbSkKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LCBzaW1t
KTsKLSAgICB9Ci0gICAgCiAgICAgRGF0YUxhYmVsMzIgc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0
UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIERh
dGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTg3OSw2ICsxODk5LDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzKTsKICAgICB9CiAKKyAgICB2
b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVz
dC5pbmRleCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgUG9z
dEluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihz
cmMsIGRlc3QuYmFzZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKICAgICBEYXRh
TGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRk
cmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCmluZGV4IGYyMmJm
ZmNlMTU1NGIwMmMyMjZjMjE0OTJhYjA2N2JhYjM4YzQwYjUuLjcwN2FiYjA1MmIzODMyODE4NTk4
NDVjMmM1OTQ5YzljYzc1YmYwMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvdGVzdG1hc20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvdGVzdG1hc20uY3BwCkBAIC0yMjEyLDYgKzIyMTIsMTc2IEBAIHZvaWQgdGVzdFhvck5vdFdp
dGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCiAgICAgICAgIH0KICAgICB9CiB9CisKK3ZvaWQgdGVz
dFN0b3JlUHJlUG9zdEluZGV4MzIoKQoreworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAz
IH07CisgICAgaW50cHRyX3QgYWRkciA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJm51bXNbMV0p
OworICAgIGludDMyX3QgaW5kZXggPSBzaXplb2YoaW50MzJfdCk7CisKKyAgICBhdXRvIHRlc3Qx
ID0gWyZdIChpbnQzMl90IHNyYykgeworICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShq
aXQpOworCisgICAgICAgICAgICAvLyAqKytwMSA9IDQ7IHJldHVybiBwMTsKKyAgICAgICAgICAg
IGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQcmVJbmRl
eEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0
Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQu
cmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9y
ZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCogcDEgPSBiaXR3aXNlX2Nhc3Q8
aW50MzJfdCo+KHRlc3QxKDQpKTsKKyAgICBDSEVDS19FUSgqcDEsIDQpOworICAgIENIRUNLX0VR
KCotLXAxLCBudW1zWzFdKTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDMyX3Qgc3JjKSB7
CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8v
ICpwMisrID0gNTsgcmV0dXJuIHAyOworICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOwor
ICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9
OworCisgICAgaW50MzJfdCogcDIgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QyKDUpKTsK
KyAgICBDSEVDS19FUSgqcDIsIDQpOworICAgIENIRUNLX0VRKCotLXAyLCA1KTsKK30KKwordm9p
ZCB0ZXN0U3RvcmVQcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEs
IDIsIDMgfTsKKyAgICBpbnRwdHJfdCBhZGRyID0gYml0d2lzZV9jYXN0PGludHB0cl90PigmbnVt
c1sxXSk7CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVvZihpbnQ2NF90KTsKKworICAgIGF1dG8g
dGVzdDEgPSBbJl0gKGludDY0X3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxl
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xv
Z3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICorK3AxID0gNDsgcmV0dXJuIHAxOworICAgICAg
ICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlBy
ZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAg
ICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAg
IGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+
KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2NF90KiBwMSA9IGJpdHdpc2Vf
Y2FzdDxpbnQ2NF90Kj4odGVzdDEoNCkpOworICAgIENIRUNLX0VRKCpwMSwgNCk7CisgICAgQ0hF
Q0tfRVEoKi0tcDEsIG51bXNbMV0pOworCisgICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50NjRfdCBz
cmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAg
ICAgLy8gKnAyKysgPSA1OyByZXR1cm4gcDI7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJ
bmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjph
cmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOwor
ICAgIH07CisKKyAgICBpbnQ2NF90KiBwMiA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDIo
NSkpOworICAgIENIRUNLX0VRKCpwMiwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDIsIDUpOworfQor
Cit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4MzIoKQoreworICAgIGludDMyX3QgbnVtc1tdID0g
eyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVvZihpbnQzMl90KTsKKworICAg
IGF1dG8gdGVzdDEgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQg
PSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5j
dGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9ICorK3AxOyAqcDEgPSA0
OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlByZUlu
ZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1
bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGls
b2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAg
cmV0dXJuIGludm9rZTxpbnQzMl90Pihsb2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENI
RUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA0KTsKKworICAgIGF1
dG8gdGVzdDIgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBj
b21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlv
blByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyBy
ZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlBvc3RJbmRl
eEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJl
dHVybiBpbnZva2U8aW50MzJfdD4obG9hZCwgJm51bXNbMV0pOworICAgIH07CisKKyAgICBDSEVD
S19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgNSk7Cit9CisKK3ZvaWQg
dGVzdExvYWRQcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIs
IDMgfTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0
ZXN0MSA9IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBp
bGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVy
biByZXM7CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRy
ZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICAgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQocmVw
bGFjZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
aW52b2tlPGludDY0X3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEo
dGVzdDEoNCksIDMpOworICAgIENIRUNLX0VRKG51bXNbMl0sIDQpOworCisgICAgYXV0byB0ZXN0
MiA9IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKnAyKys7ICpwMiA9IDU7IHJldHVybiBy
ZXM7CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVz
cyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsK
KyAgICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxh
Y2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAp
KTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQp
OworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGlu
dm9rZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRl
c3QyKDUpLCAyKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA1KTsKK30KICNlbmRpZgogCiAjaWYg
Q1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtNDQ3NSw2ICs0NjQ1LDEx
IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVU
WV9BTkFMWVNJUwogICAgIFJVTih0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDY0KCkpOwogICAgIFJV
Tih0ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhV
bnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0U3RvcmVQcmVQb3N0SW5kZXgz
MigpKTsKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RM
b2FkUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKSk7
CiAjZW5kaWYKIAogI2lmIENQVShBUk02NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uM2IxYzlmZTExYTUxMzc0NTlkZjYyYzA2Y2ZkOWE2NTdhNjJmZjE3MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJ
bmNyZW1lbnRzLmNwcApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjND
YW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5oIgorCisjaW5jbHVkZSAiQjNCYWNrd2FyZHNE
b21pbmF0b3JzLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUg
IkIzQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKKyNpbmNs
dWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIK
KyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5l
cy5oIgorI2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhTZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50c0ltcGwoUHJvY2VkdXJl
JiBwcm9jKQoreworICAgIHVzaW5nIEFyZyA9IEFpcjo6QXJnOworCisgICAgSW5zZXJ0aW9uU2V0
IGluc2VydGlvblNldCB7IHByb2MgfTsKKyAgICBCbG9ja0luc2VydGlvblNldCBibG9ja0luc2Vy
dGlvblNldCB7IHByb2MgfTsKKyAgICBCYXNpY0Jsb2NrKiBibG9jayB7IG51bGxwdHIgfTsKKyAg
ICB1bnNpZ25lZCBpbmRleCB7IDAgfTsKKworICAgIERvbWluYXRvcnMmIGRvbWluYXRvcnMgPSBw
cm9jLmRvbWluYXRvcnMoKTsKKyAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBiYWNrd2FyZHNEb21p
bmF0b3JzID0gcHJvYy5iYWNrd2FyZHNEb21pbmF0b3JzKCk7CisKKyAgICBIYXNoTWFwPFZhbHVl
S2V5LCBWZWN0b3I8VmFsdWUqPj4gYmFzZU9mZnNldFRvQWRkcmVzc2VzOworICAgIEhhc2hNYXA8
TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHByZUluZGV4Q2FuZGlkYXRlczsKKyAgICBIYXNoTWFwPFZh
bHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb01lbW9yaWVzOworICAgIEhhc2hNYXA8
TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleENhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxN
ZW1vcnlWYWx1ZSosIHVuc2lnbmVkPiBtZW1vcnlUb0luZGV4OworICAgIEluZGV4U2V0PFZhbHVl
Kj4gaWdub3JlZFZhbHVlczsKKworICAgIGF1dG8gdHJ5UHJlUG9zdEluZGV4ID0gWyZdIChWYWx1
ZSogdmFsdWUpIHsKKyAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAg
Y2FzZSBMb2FkOiB7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFz
PE1lbW9yeVZhbHVlPigpOworCisgICAgICAgICAgICAvLyBQcmUtSW5kZXggUGF0dGVybjoKKyAg
ICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAg
IC8vICAgICAuLi4KKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNl
dCkKKyAgICAgICAgICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoKKyAgICAgICAgICAgIC8vICAg
ICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCisgICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAg
ICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICBhdXRv
IHRyeVByZVBvc3RJbmRleE1lbW9yeSA9IFsmXSAoKSB7CisgICAgICAgICAgICAgICAgaWYgKG1l
bW9yeS0+b2Zmc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNl
dGtleSA9IFZhbHVlS2V5KG1lbW9yeS0+Y2hpbGQoMCksIHN0YXRpY19jYXN0PGludDY0X3Q+KG1l
bW9yeS0+b2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VPZmZzZXRUb0Fk
ZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zmc2V0a2V5KSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChWYWx1ZSogYWRkcmVzcyA6IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFzZU9m
ZnNldGtleSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlSW5kZXhDYW5kaWRhdGVz
LmFkZChtZW1vcnksIGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJhc2VUb01lbW9yaWVzLmFkZChtZW1v
cnktPmNoaWxkKDApLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgbWVtb3J5VG9JbmRleC5hZGQobWVtb3J5LCBp
bmRleCk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB0cnlQcmVQb3N0SW5kZXhNZW1v
cnkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBZGQ6
IHsKKyAgICAgICAgICAgIFZhbHVlKiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDApOworICAgICAgICAg
ICAgVmFsdWUqIHJpZ2h0ID0gdmFsdWUtPmNoaWxkKDEpOworCisgICAgICAgICAgICBhdXRvIHRy
eVBvdGVudGlhbFBvc3RJbmRleEFkZHJlc3MgPSBbJl0gKCkgeworICAgICAgICAgICAgICAgIGlm
ICghcmlnaHQtPmhhc0ludFB0cigpIHx8IHZhbHVlLT50eXBlKCkgIT0gSW50NjQpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBy
aWdodC0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFs
bE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOworICAgICAg
ICAgICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNWYWxpZFBvc3RJ
bmRleEZvcm0oc21hbGxPZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgLy8gc28gZmFyIHRoaXMgQWRkIHZhbHVlIGlzIGEgdmFsaWQgYWRkcmVzcyBj
YW5kaWRhdGUgZm9yIGJvdGggcHJlZml4IGFuZCBwb3N0Zml4IHBhdHRlcm4KKyAgICAgICAgICAg
ICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobGVmdCwgc3RhdGljX2Nhc3Q8
aW50NjRfdD4oc21hbGxPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBiYXNlT2Zmc2V0VG9BZGRy
ZXNzZXMuYWRkKGJhc2VPZmZzZXRrZXksIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1
ZS5hcHBlbmQodmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChiYXNlVG9NZW1vcmllcy5jb250
YWlucyhsZWZ0KSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1v
cnkgOiBiYXNlVG9NZW1vcmllcy5nZXQobGVmdCkpCisgICAgICAgICAgICAgICAgICAgICAgICBw
b3N0SW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB0cnlQb3RlbnRpYWxQb3N0SW5kZXhBZGRy
ZXNzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKEJhc2lj
QmxvY2sqIGJhc2ljQmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAgICAgICBi
bG9jayA9IGJhc2ljQmxvY2s7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGJhc2lj
QmxvY2stPnNpemUoKTsgKytpbmRleCkKKyAgICAgICAgICAgIHRyeVByZVBvc3RJbmRleChiYXNp
Y0Jsb2NrLT5hdChpbmRleCkpOworICAgIH0KKworICAgIGF1dG8gY29udHJvbEVxdWl2YWxlbnQg
PSBbJl0gKFZhbHVlKiB2MSwgVmFsdWUqIHYyKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIChk
b21pbmF0b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYyLT5vd25lcikgJiYgYmFja3dhcmRzRG9t
aW5hdG9ycy5kb21pbmF0ZXModjItPm93bmVyLCB2MS0+b3duZXIpKQorICAgICAgICAgICAgfHwg
KGRvbWluYXRvcnMuZG9taW5hdGVzKHYyLT5vd25lciwgdjEtPm93bmVyKSAmJiBiYWNrd2FyZHNE
b21pbmF0b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYyLT5vd25lcikpOworICAgIH07CisKKyAg
ICBhdXRvIGRldGVjdCA9IFsmXSAoSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gY2FuZGlk
YXRlcykgeworICAgICAgICBmb3IgKGF1dG8gaXRyID0gY2FuZGlkYXRlcy5iZWdpbigpOyBpdHIg
IT0gY2FuZGlkYXRlcy5lbmQoKTsgKytpdHIpIHsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSBpdHItPmtleTsKKyAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gaXRyLT52YWx1
ZTsKKyAgICAgICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaWdu
b3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5
LCBhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgVmFs
dWUqIG5ld0FkZHJlc3MgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtZW1vcnlUb0luZGV4
LmdldChtZW1vcnkpLCBBZGQsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDApLCBh
ZGRyZXNzLT5jaGlsZCgxKSk7CisgICAgICAgICAgICBhZGRyZXNzLT5yZXBsYWNlV2l0aElkZW50
aXR5KG5ld0FkZHJlc3MpOworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUobWVtb3J5
LT5vd25lcik7CisKKyAgICAgICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKGFkZHJlc3MpOworICAg
ICAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQobWVtb3J5KTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICAvLyBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IElkZW50
aXR5KG5ld0FkZHJlc3MpCisgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4g
IG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgIC8vIG1lbW9yeSA9IExvYWQoYmFz
ZSwgb2Zmc2V0KSAgICAgICBtZW1vcnkgPSBMb2FkKGFkZHJlc3MsIG9mZnNldCkKKyAgICBkZXRl
Y3QocHJlSW5kZXhDYW5kaWRhdGVzKTsKKworICAgIC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkg
ICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAvLyAuLi4gICAg
ICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQorICAgIC8v
IGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3
QWRkcmVzcykKKyAgICBkZXRlY3QocG9zdEluZGV4Q2FuZGlkYXRlcyk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBw
cm9jKQoreworICAgIGlmICghaXNBUk02NCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
UGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50
cyIpOworICAgIHJldHVybiBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50c0ltcGwocHJvYyk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVBy
ZVBvc3RJbmNyZW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxp
emVQcmVQb3N0SW5jcmVtZW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0YjYwMjdlYzJlYjBkOGRiZDUxOGE5
MGY1Mjc0ZDllZDEwODdlM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5oCkBAIC0wLDAgKzEsNDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgUHJvY2VkdXJlOworCitib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1l
bnRzSW1wbChQcm9jZWR1cmUmKTsKK0pTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2Fub25pY2FsaXpl
UHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
R2VuZXJhdGUuY3BwCmluZGV4IGNkNDRhMjkxNTc3NzQwZDIzOTkzMDhjMjYyYTc5Mjc1OTVmZTdi
NDMuLjgzNmZhMzExYzM2YjM4ZmQ2ZDk3Y2ZmN2ViNTE1ODAyNTdiZDMwNWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFC
TEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJCM0Nhbm9u
aWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLmgiCiAjaW5jbHVkZSAiQjNDb21tb24uaCIKICNpbmNs
dWRlICJCM0R1cGxpY2F0ZVRhaWxzLmgiCiAjaW5jbHVkZSAiQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5oIgpAQCAtMTE5LDYgKzEyMCw5IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9j
ZWR1cmUmIHByb2NlZHVyZSkKICAgICBtb3ZlQ29uc3RhbnRzKHByb2NlZHVyZSk7CiAgICAgZWxp
bWluYXRlRGVhZENvZGUocHJvY2VkdXJlKTsKIAorICAgIGlmIChwcm9jZWR1cmUub3B0TGV2ZWwo
KSA+PSAyKQorICAgICAgICBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhwcm9jZWR1cmUp
OworCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBydW4gcHVyZUNTRSBoZXJlIHRvIGNsZWFuIHVw
IHNvbWUgcGxhdGZvcm0gc3BlY2lmaWMgY2hhbmdlcyBmcm9tIHRoZSBwcmV2aW91cyBwaGFzZXMu
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDg3Mwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IGQ1ZmMzMTY0
NjU5NjhlYjczNzFiNmZmMWNjNmY4MzE3ZmVjZGU1MmUuLmViYjAzNTJjYjMwODAzZGJjMWZlODE4
ZTM5OTBiYTM3NDU3MDY2MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9B
aXIuY3BwCkBAIC0yMDcsNyArMjA3LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICBmaW5pc2hB
cHBlbmRpbmdJbnN0cnVjdGlvbnMobV9ibG9ja1RvQmxvY2tbYmxvY2tdKTsKICAgICAgICAgfQot
ICAgICAgICAKKwogICAgICAgICBtX2Jsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKIAogICAg
ICAgICBBaXI6Okluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9jb2RlKTsKQEAgLTU0Niw3ICs1
NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAg
ICAgcmV0dXJuIHNjYWxlOwogICAgIH0KLSAgICAKKwogICAgIC8vIFRoaXMgdHVybnMgdGhlIGdp
dmVuIG9wZXJhbmQgaW50byBhbiBhZGRyZXNzLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwg
dHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgogICAgIEFyZyBlZmZlY3RpdmVB
ZGRyKFZhbHVlKiBhZGRyZXNzLCBJbnQgb2Zmc2V0LCBXaWR0aCB3aWR0aCkKQEAgLTI1NTksNiAr
MjU1OSw0NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBQcmUtSW5kZXggQ2Fub25pY2Fs
IEZvcm06CisgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IGFkZChiYXNlLCBvZmZzZXQpCisg
ICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gbG9hZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAg
ICAvLyBQb3N0LUluZGV4IENhbm9uaWNhbCBGb3JtOgorICAgICAgICAgICAgLy8gICAgIG1lbW9y
eSA9IGxvYWQoYmFzZSwgMCkKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gYWRkKGJhc2Us
IG9mZnNldCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kSW5jcmVtZW50QWRkcmVzcyA9IFsm
XSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlP
cGNvZGVGb3JUeXBlKE1vdmVXaXRoSW5jcmVtZW50MzIsIE1vdmVXaXRoSW5jcmVtZW50NjQsIG1l
bW9yeS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwg
QXJnOjpQcmVJbmRleCwgQXJnOjpUbXApIHx8ICFtX2luZGV4KQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBtX2Jsb2Nr
LT5hdChtX2luZGV4IC0gMSk7CisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MtPm9wY29kZSgp
ICE9IEFkZCB8fCBhZGRyZXNzLT50eXBlKCkgIT0gSW50NjQpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcy0+Y2hpbGQoMCkgIT0g
bWVtb3J5LT5sYXN0Q2hpbGQoKSB8fCAhYWRkcmVzcy0+Y2hpbGQoMSktPmhhc0ludFB0cigpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaW50cHRy
X3Qgb2Zmc2V0ID0gYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50UHRyKCk7CisgICAgICAgICAgICAg
ICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zm
c2V0VHlwZT4ob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgIT0gb2Zm
c2V0IHx8ICFBcmc6OmlzVmFsaWRQb3N0SW5kZXhGb3JtKHNtYWxsT2Zmc2V0KSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgQXJnIGluY3JlbWVu
dEFyZyA9IEFyZygpOworICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNldCA9PSBtZW1vcnktPm9mZnNldCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50QXJnID0gQXJnOjpwcmVJbmRleCh0bXAo
YWRkcmVzcyksIHNtYWxsT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgaW5jcmVtZW50QXJnID0gQXJnOjpwb3N0SW5kZXgodG1wKGFkZHJlc3MpLCBz
bWFsbE9mZnNldCk7CisKKyAgICAgICAgICAgICAgICBpZiAoaW5jcmVtZW50QXJnKSB7CisgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoYWRkcmVzcy0+dHlwZSgp
KSwgdG1wKGFkZHJlc3MtPmNoaWxkKDApKSwgdG1wKGFkZHJlc3MpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kKG9wY29kZSwgaW5jcmVtZW50QXJnLCB0bXAobWVtb3J5KSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fbG9ja2VkLmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRJbmNyZW1l
bnRBZGRyZXNzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgICAgICBhcHBl
bmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIGtpbmQsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRt
cChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWVLZXkuaAppbmRleCBiMzM0OTdhYTJkY2I0ODVmZjVmMTFhMzBjY2Rj
ZTJiZjEwYTI4YTZkLi40NmY0NDBjNTJmZDRlMGNlOWRmMDk2NTk4Y2Q1Y2MwNmYzOTk1MWExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgKQEAgLTU2LDYgKzU2LDggQEAgcHVi
bGljOgogICAgIHsKICAgICB9CiAKKyAgICBWYWx1ZUtleShWYWx1ZSogY2hpbGQsIGludDY0X3Qg
dmFsdWUpOworCiAgICAgVmFsdWVLZXkoS2luZCwgVHlwZSwgVmFsdWUqIGNoaWxkKTsKIAogICAg
IFZhbHVlS2V5KEtpbmQsIFR5cGUsIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaAppbmRleCAxNDE1OGQ1MDFm
NzNmY2JmNzBkNzU3M2Y4MDBlYjIwYjYyZmI5YWFmLi5lMTg2NjE5NDkyNjIxNDA2NmZlODllNWM3
MWIyZDA3NzgwNTQ3MDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZUtleUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtl
eUlubGluZXMuaApAQCAtMzMsNiArMzMsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CiAKK2lubGluZSBWYWx1ZUtleTo6VmFsdWVLZXkoVmFsdWUqIGNoaWxkLCBpbnQ2NF90
IHZhbHVlKQoreworICAgIG1fa2luZCA9IE9vcHM7CisgICAgbV90eXBlID0gVm9pZDsKKyAgICB1
LmluZGljZXNbMF0gPSBjaGlsZC0+aW5kZXgoKTsKKyAgICB1LnZhbHVlID0gdmFsdWU7Cit9CisK
IGlubGluZSBWYWx1ZUtleTo6VmFsdWVLZXkoS2luZCBraW5kLCBUeXBlIHR5cGUsIFZhbHVlKiBj
aGlsZCkKICAgICA6IG1fa2luZChraW5kKQogICAgICwgbV90eXBlKHR5cGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKaW5kZXggMTAzYzZlY2NhM2QzMTRiYjRlZDhjMDJh
NGQyZjAwOWNhNjQxZDAwMS4uNzdlZTg0MjUxMjRiOWQ4YjhjNTgyZjM5ZmY5NjlmNjBmZDE2Y2Mw
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcApAQCAtMTMwLDYgKzEz
MCwxMSBAQCB1bnNpZ25lZCBBcmc6OmpzSGFzaCgpIGNvbnN0CiAgICAgICAgIHJlc3VsdCArPSBt
X2Jhc2UuaW50ZXJuYWxWYWx1ZSgpOwogICAgICAgICByZXN1bHQgKz0gbV9pbmRleC5pbnRlcm5h
bFZhbHVlKCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJlSW5kZXg6CisgICAgY2FzZSBQ
b3N0SW5kZXg6CisgICAgICAgIHJlc3VsdCArPSBtX29mZnNldDsKKyAgICAgICAgcmVzdWx0ICs9
IG1fYmFzZS5pbnRlcm5hbFZhbHVlKCk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhY2s6
CiAgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zY2FsZSk7CiAgICAg
ICAgIHJlc3VsdCArPSBzdGFja1Nsb3QoKS0+aW5kZXgoKTsKQEAgLTE2MSw3ICsxNjYsNyBAQCB2
b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnRm
KCIkMHglbGx4Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIHVuc2lnbmVkPihtX29mZnNldCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBaZXJvUmVnOgotICAgICAgICBvdXQucHJpbnQoIiUl
eHpyIik7CisgICAgICAgIG91dC5wcmludCgiJXh6ciIpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBTaW1wbGVBZGRyOgogICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIpIik7CkBA
IC0xODAsNiArMTg1LDEyIEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiAgICAgICAgICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgpKTsKICAgICAgICAgb3V0LnByaW50
KCIpIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBvdXQu
cHJpbnQoIigiLCBiYXNlKCksICIsUHJlKCQiLCBvZmZzZXQoKSwgIikpIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgp
LCAiLFBvc3QoJCIsIG9mZnNldCgpLCAiKSkiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
U3RhY2s6CiAgICAgICAgIGlmIChvZmZzZXQoKSkKICAgICAgICAgICAgIG91dC5wcmludChvZmZz
ZXQoKSk7CkBAIC0yNjEsNiArMjcyLDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBBcmc6OktpbmQga2luZCkKICAgICBjYXNlIEFyZzo6SW5kZXg6CiAgICAgICAgIG91
dC5wcmludCgiSW5kZXgiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpQcmVJbmRl
eDoKKyAgICAgICAgb3V0LnByaW50KCJQcmVJbmRleCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBcmc6OlBvc3RJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJQb3N0SW5kZXgiKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpSZWxDb25kOgogICAgICAgICBvdXQucHJpbnQo
IlJlbENvbmQiKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmgKaW5kZXggY2U1YTRlNzM3OWFkNjQ0NDVmMGMzYWJkMTI5ZjMyOWI5NDdmZTgxMi4uZTFm
NjQ2NmYwMzIyYWI4MjgwYmQ0ZWI4OGY2MWQ5ZmM5NDdmN2JjYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5oCkBAIC03Nyw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgU3Rh
Y2ssCiAgICAgICAgIENhbGxBcmcsCiAgICAgICAgIEluZGV4LAorICAgICAgICBQcmVJbmRleCwK
KyAgICAgICAgUG9zdEluZGV4LAogCiAgICAgICAgIC8vIEltbWVkaWF0ZSBvcGVyYW5kcyB0aGF0
IGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3Igb2YgYW4gb3BlcmF0aW9uLiBZb3UgY2FuIHRoaW5rIG9m
IHRoZW0gYXMKICAgICAgICAgLy8gc2Vjb25kYXJ5IG9wY29kZXMuIFRoZXkgYXJlIGFsd2F5cyAi
VXNlIidkLgpAQCAtNjQ5LDYgKzY1MSwzMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBBcmc6
OmluZGV4KGJhc2UsIGluZGV4LCBzY2FsZSwgMCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3Rh
dGljIEFyZyBwcmVJbmRleChBaXI6OlRtcCBiYXNlLCBJbnQgaW5kZXgpCisgICAgeworICAgICAg
ICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNJbnQ5KGluZGV4KSk7Cisg
ICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQcmVJbmRleDsKKyAg
ICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGlu
ZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRp
YyBBcmcgcG9zdEluZGV4KEFpcjo6VG1wIGJhc2UsIEludCBpbmRleCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc0ludDkoaW5kZXgpKTsKKyAg
ICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFBvc3RJbmRleDsKKyAg
ICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGlu
ZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIHN0YXRpYyBBcmcgcmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiAgICAg
ewogICAgICAgICBBcmcgcmVzdWx0OwpAQCAtNzk5LDYgKzgyNSwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CiAgICAgfQogCisgICAgYm9vbCBpc1ByZUluZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUHJlSW5kZXg7CisgICAg
fQorCisgICAgYm9vbCBpc1Bvc3RJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
a2luZCgpID09IFBvc3RJbmRleDsKKyAgICB9CisKICAgICBib29sIGlzTWVtb3J5KCkgY29uc3QK
ICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CkBAIC04MDgsNiArODQ0LDggQEAgcHVi
bGljOgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAg
IGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdElu
ZGV4OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC05NzIsNyArMTAxMCw3IEBAIHB1YmxpYzoKIAogICAgIEFp
cjo6VG1wIGJhc2UoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTaW1w
bGVBZGRyIHx8IGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIg
fHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTaW1wbGVBZGRy
IHx8IGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2lu
ZCgpID09IEluZGV4IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8fCBraW5kKCkgPT0gUG9zdEluZGV4
KTsKICAgICAgICAgcmV0dXJuIG1fYmFzZTsKICAgICB9CiAKQEAgLTk4Miw3ICsxMDIwLDcgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGtpbmQoKSA9PSBTdGFjaykKICAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9zY2FsZSk7Ci0gICAgICAg
IEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8
IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9
PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCB8fCBraW5kKCkgPT0gUHJlSW5kZXggfHwga2lu
ZCgpID09IFBvc3RJbmRleCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zm
c2V0VHlwZT4obV9vZmZzZXQpOwogICAgIH0KIApAQCAtMTA0NCw2ICsxMDgyLDggQEAgcHVibGlj
OgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgog
ICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNl
IFBvc3RJbmRleDoKICAgICAgICAgY2FzZSBTdGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgog
ICAgICAgICBjYXNlIFJlbENvbmQ6CkBAIC0xMDgxLDYgKzExMjEsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CiAgICAgICAg
IGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdElu
ZGV4OgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAg
IGNhc2UgQmlnSW1tOiAvLyBZZXMsIHdlIGFsbG93IEJpZ0ltbSBhcyBhIGRvdWJsZSBpbW1lZGlh
dGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBzLgpAQCAtMTIzNyw2ICsx
Mjc5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+
PgorICAgIHN0YXRpYyBib29sIGlzVmFsaWRQcmVJbmRleEZvcm0oSW50IG9mZnNldCkKKyAgICB7
CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFNpZ25l
ZEltbTkob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+Pgor
ICAgIHN0YXRpYyBib29sIGlzVmFsaWRQb3N0SW5kZXhGb3JtKEludCBvZmZzZXQpCisgICAgewor
ICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRTaWduZWRJ
bW05KG9mZnNldCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICAvLyBJZiB5
b3UgZG9uJ3QgcGFzcyBhIHdpZHRoIHRoZW4gdGhpcyBvcHRpbWlzdGljYWxseSBhc3N1bWVzIHRo
YXQgeW91J3JlIHVzaW5nIHRoZSByaWdodCB3aWR0aC4gQnV0CiAgICAgLy8gdGhlIHdpZHRoIGlz
IHJlbGV2YW50IHRvIHZhbGlkaXR5LCBzbyBwYXNzaW5nIGEgbnVsbCB3aWR0aCBpcyBvbmx5IHVz
ZWZ1bCBmb3IgYXNzZXJ0aW9ucy4gRG9uJ3QKICAgICAvLyBwYXNzIG51bGwgd2lkdGhzIHdoZW4g
Y2FzY2FkaW5nIHRocm91Z2ggQXJncyBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IhCkBAIC0x
MjY1LDYgKzEzMjMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRBZGRy
Rm9ybShvZmZzZXQoKSwgd2lkdGgpOwogICAgICAgICBjYXNlIEluZGV4OgogICAgICAgICAgICAg
cmV0dXJuIGlzVmFsaWRJbmRleEZvcm0oc2NhbGUoKSwgb2Zmc2V0KCksIHdpZHRoKTsKKyAgICAg
ICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkUHJlSW5kZXhGb3Jt
KG9mZnNldCgpKTsKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAgICAgICByZXR1cm4g
aXNWYWxpZFBvc3RJbmRleEZvcm0ob2Zmc2V0KCkpOwogICAgICAgICBjYXNlIFJlbENvbmQ6CiAg
ICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgpAQCAtMTI4NCw2
ICsxMzQ2LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIGNh
c2UgQWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CisgICAgICAgIGNhc2Ug
UHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICAgICAgZnVuY3Rvciht
X2Jhc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5kZXg6CkBAIC0xMzI4
LDYgKzEzOTIsMTAgQEAgcHVibGljOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoK
ICAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQLCBhcmdSb2xlID09IFVzZUFkZHIg
PyBhcmdXaWR0aCA6IHBvaW50ZXJXaWR0aCgpKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgICAgIGZ1
bmN0b3IobV9iYXNlLCBVc2VEZWYsIEdQLCBhcmdSb2xlID09IFVzZUFkZHIgPyBhcmdXaWR0aCA6
IHBvaW50ZXJXaWR0aCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEluZGV4
OgogICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1AsIGFyZ1JvbGUgPT0gVXNlQWRk
ciA/IGFyZ1dpZHRoIDogcG9pbnRlcldpZHRoKCkpOwogICAgICAgICAgICAgZnVuY3RvcihtX2lu
ZGV4LCBVc2UsIEdQLCBhcmdSb2xlID09IFVzZUFkZHIgPyBhcmdXaWR0aCA6IHBvaW50ZXJXaWR0
aCgpKTsKQEAgLTEzODMsNiArMTQ1MSwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4obV9vZmZzZXQpLCBtX2V4dGVuZCk7CiAgICAgfQogCisg
ICAgTWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4QWRkcmVzcyBhc1ByZUluZGV4QWRkcmVzcygpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNQcmVJbmRleCgpKTsKKyAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyOjpQcmVJbmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBvZmZzZXQoKSk7
CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MgYXNQb3N0SW5k
ZXhBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Bvc3RJbmRleCgpKTsK
KyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKG1fYmFzZS5n
cHIoKSwgb2Zmc2V0KCkpOworICAgIH0KKwogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uIGFzUmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0CiAgICAgewogICAgICAgICBB
U1NFUlQoaXNSZWxDb25kKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMKaW5kZXggNjYxZWFkZDIzNzNjNTRhNGJiYTk0N2E1NGJkYTI1NTdiZGI4
YWU0YS4uNDlmZWQxYWFhMTlhZjZkZGNkOTJjMzM5ZjcwYjU3NmQwZDM5NWRkZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC02NjEsNiAr
NjYxLDEyIEBAIHg4Nl82NDogU3dhcDY0IFVEOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRtcAog
ICAgIFRtcCwgQWRkcgogCithcm02NDogTW92ZVdpdGhJbmNyZW1lbnQ2NCBVRDpHOjY0LCBEOkc6
NjQKKyAgICBQcmVJbmRleCwgVG1wIGFzIGxvYWQ2NAorICAgIFBvc3RJbmRleCwgVG1wIGFzIGxv
YWQ2NAorICAgIFRtcCwgUHJlSW5kZXggYXMgc3RvcmU2NAorICAgIFRtcCwgUG9zdEluZGV4IGFz
IHN0b3JlNjQKKwogTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wIGFzIHplcm9F
eHRlbmQzMlRvV29yZAogICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKQEAgLTY3MSw2ICs2NzcsMTIg
QEAgTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIHg4NjogSW1tLCBBZGRyIGFzIHN0b3JlMzIK
ICAgICB4ODY6IEltbSwgSW5kZXggYXMgc3RvcmUzMgogCithcm02NDogTW92ZVdpdGhJbmNyZW1l
bnQzMiBVRDpHOjMyLCBaRDpHOjMyCisgICAgUHJlSW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBQ
b3N0SW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBUbXAsIFByZUluZGV4IGFzIHN0b3JlMzIKKyAg
ICBUbXAsIFBvc3RJbmRleCBhcyBzdG9yZTMyCisKICMgVGhpcyBpcyBmb3IgbW92aW5nIGJldHdl
ZW4gc3BpbGwgc2xvdHMuCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyLCBTOkc6MzIKICAgICBBZGRy
LCBBZGRyLCBUbXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bj
b2RlX2dlbmVyYXRvci5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dl
bmVyYXRvci5yYgppbmRleCAzNzQwZWZkYmRkMTQ2YTM3ZjZlZGU5ZGRiYzIzZGRiYTAzYjA3NjQ2
Li5mMWJmMWE0NmNmYzg4OWVjMTkzNDZmMmMwNmI3Y2Y1MGY5ZTNkZTBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCkBAIC0yMjksNyAr
MjI5LDcgQEAgZGVmIGlzR0YodG9rZW4pCiBlbmQKIAogZGVmIGlzS2luZCh0b2tlbikKLSAgICB0
b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoWmVy
b1JlZyl8KFNpbXBsZUFkZHIpfChBZGRyKXwoRXh0ZW5kZWRPZmZzZXRBZGRyKXwoSW5kZXgpfChS
ZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KKyAgICB0b2tl
biA9fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoWmVyb1Jl
Zyl8KFNpbXBsZUFkZHIpfChBZGRyKXwoRXh0ZW5kZWRPZmZzZXRBZGRyKXwoSW5kZXgpfChQcmVJ
bmRleCl8KFBvc3RJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCl8KFN0YXR1
c0NvbmQpKVxaLwogZW5kCiAKIGRlZiBpc0FyY2godG9rZW4pCkBAIC0zMDMsNyArMzAzLDcgQEAg
Y2xhc3MgUGFyc2VyCiAKICAgICBkZWYgY29uc3VtZUtpbmQKICAgICAgICAgcmVzdWx0ID0gdG9r
ZW4uc3RyaW5nCi0gICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1t
LCBCaXRJbW0sIEJpdEltbTY0LCBaZXJvUmVnLCBUbXAsIFNpbXBsZUFkZHIsIEFkZHIsIEV4dGVu
ZGVkT2Zmc2V0QWRkciwgSW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9yIFN0
YXR1c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4
cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0LCBaZXJvUmVnLCBUbXAs
IFNpbXBsZUFkZHIsIEFkZHIsIEV4dGVuZGVkT2Zmc2V0QWRkciwgSW5kZXgsIFByZUluZGV4LCBQ
b3N0SW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1c0NvbmQpIikg
dW5sZXNzIGlzS2luZChyZXN1bHQpCiAgICAgICAgIGFkdmFuY2UKICAgICAgICAgcmVzdWx0CiAg
ICAgZW5kCkBAIC05MjksNiArOTI5LDEyIEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewog
ICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4IgogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImlmICghQXJnOjppc1ZhbGlkSW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLnNjYWxlKCksIGFy
Z3NbI3tpbmRleH1dLm9mZnNldCgpLCAje2FyZy53aWR0aENvZGV9KSkiCiAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAg
d2hlbiAiUHJlSW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6
OmlzVmFsaWRQcmVJbmRleEZvcm0oYXJnc1sje2luZGV4fV0ub2Zmc2V0KCkpKSIKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAg
ICAgICB3aGVuICJQb3N0SW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KCFBcmc6OmlzVmFsaWRQb3N0SW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpKSkiCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCiAgICAg
ICAgICAgICAgICAgd2hlbiAiQmlnSW1tIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQi
CiAgICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKQEAgLTEyMzUsNiArMTI0MSwxMCBAQCB3
cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmlu
dCAiYXJnc1sje2luZGV4fV0uYXNBZGRyZXNzKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiSW5k
ZXgiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQmFz
ZUluZGV4KCkiCisgICAgICAgICAgICAgICAgd2hlbiAiUHJlSW5kZXgiCisgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUHJlSW5kZXhBZGRyZXNzKCkiCisg
ICAgICAgICAgICAgICAgd2hlbiAiUG9zdEluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRw
LnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Bvc3RJbmRleEFkZHJlc3MoKSIKICAgICAgICAgICAg
ICAgICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdz
WyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKICAgICAgICAgICAgICAgICB3aGVu
ICJSZXNDb25kIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IGM3MDMyZWMwODRkZGZk
ZDkzNWU1NTI3ZmFhZTkzNTY4MTk4NDgxNzkuLjcyMWViM2FkZDYyNzQ4ZTJmYjAyZGRmNDI1NTdj
YzU5ZDVkODgwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTExNDAsNCArMTE0
MCw5IEBAIHZvaWQgYWRkQ29weVRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRy
PFNoYXJlZFRhc2s8dm9pZCgpPj4+Jik7CiAKIGJvb2wgc2hvdWxkUnVuKGNvbnN0IGNoYXIqIGZp
bHRlciwgY29uc3QgY2hhciogdGVzdE5hbWUpOwogCit2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigp
Owordm9pZCB0ZXN0TG9hZFByZUluZGV4NjQoKTsKK3ZvaWQgdGVzdExvYWRQb3N0SW5kZXgzMigp
Owordm9pZCB0ZXN0TG9hZFBvc3RJbmRleDY0KCk7CisKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKaW5kZXggNGM1MmFkYTljYzQwMmRk
ZTUzOTg4Y2M4ZjJmNWU5ZTBkZGUyZTExYy4uYjg5YjAxOWZkOGJmNWYwNzEyZjQ2Njg2NTBmNjFj
ZGY4MWRhNGM4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCkBAIC0yOCw2
ICsyOCwzMDAgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKwordm9pZCB0ZXN0TG9hZFByZUlu
ZGV4MzIoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYs
IDcsIDgsIDksIDEwIH07CisgICAgaW50MzJfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVy
ZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9v
cEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRk
QmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQzMik7Cisg
ICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2ls
b24ocjEsIF5yMikKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisg
ICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIElu
dDMyLCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNl
dCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigp
LCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9y
aWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBo
aSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAg
IFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6
OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBj
b25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2lu
KCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gs
IE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhs
b29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxv
Y2sKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyBy
MyA9IHIyICsgbG9hZChwMykKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gZ290byBs
b29wCisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRk
LCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgNCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJv
YywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHktPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBwMykpOworICAg
IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2lu
KCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1
bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJu
IHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIHIyKTsKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShw
cm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgIiM0XSEiKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQzMl90IHsKKyAg
ICAgICAgaW50MzJfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAg
IHIgKz0gKisrcHRyOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEo
aW52b2tlPGludDMyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0
KCkpOworfQorCit2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpCit7CisgICAgaWYgKE9wdGlvbnM6
OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQ2NF90
IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQ2NF90
KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIg
PSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFy
aWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2Nr
CisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKQorICAgIC8vIHAxID0gYWRk
cgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmRJ
bnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50NjQsIDApOworICAgIHJvb3QtPmFwcGVuZE5l
dzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAgIFZh
bHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29w
VGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxvY2sK
KyAgICAvLyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisgICAg
Ly8gaWYgcjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFs
dWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0
LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50ZWRC
bG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHAzID0gcDIgKyAxCisgICAg
Ly8gVXBzaWxvbihwMywgXnAyKQorICAgIC8vIHIzID0gcjIgKyBsb2FkKHAzKQorICAgIC8vIFVw
c2lsb24ocjMsIF5yMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9k
eS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KSk7CisgICAgbG9vcEJvZHkt
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMp
OworICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwg
T3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2Fk
LCBJbnQ2NCwgT3JpZ2luKCksIHAzKSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5h
cHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9j
ayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2Nr
CisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdDb250
cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOworCisgICAgcHJvYy5yZXNldFJl
YWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisg
ICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzhdISIpOworCisgICAgYXV0byB0
ZXN0ID0gWyZdICgpIC0+IGludDY0X3QgeworICAgICAgICBpbnQ2NF90IHIgPSAwOworICAgICAg
ICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqKytwdHI7CisgICAgICAgIHJldHVy
biByOworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50NjRfdD4oKmNvZGUsIGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQb3N0
SW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwg
NiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQzMl90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBs
b29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5h
ZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDMyKTsK
KyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBz
aWxvbihyMSwgXnIyKQorICAgIC8vIHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikK
KyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwg
SW50MzIsIDApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6
U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2lu
KCksIHAsIHAxKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwg
T3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAyID0g
UGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25lCisg
ICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBC
Mzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5l
dzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUq
IGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmln
aW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5j
aCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2Nr
KGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9C
bG9jaworICAgIC8vIHIzID0gcjIgKyBsb2FkKHAyKQorICAgIC8vIHAzID0gcDIgKyAxCisgICAg
Ly8gVXBzaWxvbihyMywgXnIyKQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyBnb3Rv
IGxvb3AKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBB
ZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywg
TG9hZCwgSW50MzIsIE9yaWdpbigpLCBwMikpOworICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBsb29wQm9keS0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQpKTsKKyAgICBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMyk7Cisg
ICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmln
aW4oKSwgcCwgcDMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
SnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1
cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgcjIpOworCisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRl
KHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9u
KCpjb2RlLCAiXSwgIzQiKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQzMl90IHsK
KyAgICAgICAgaW50MzJfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAg
ICAgIHIgKz0gKnB0cisrOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tf
RVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0
ZXN0KCkpOworfQorCit2b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQoKQoreworICAgIGlmIChPcHRp
b25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50
NjRfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50
NjRfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxl
KiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFk
ZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9C
bG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikKKyAgICAvLyBwMSA9
IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBw
ZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDY0LCAwKTsKKyAgICByb290LT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAg
ICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlh
YmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2so
bG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Js
b2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQor
ICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAg
IFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6
OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVu
dGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyByMyA9IHIyICsgbG9h
ZChwMikKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocjMsIF5yMikKKyAgICAv
LyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHIzID0gbG9v
cEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwgcDIp
KTsKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQs
IE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9y
aWdpbigpLCA4KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9j
LCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBsb29wQm9k
eS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVk
QmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9C
bG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsKKworICAgIHByb2MucmVz
ZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7
CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgp
KQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM4Iik7CisKKyAgICBh
dXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50NjRfdCB7CisgICAgICAgIGludDY0X3QgciA9IDA7Cisg
ICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9ICpwdHIrKzsKKyAgICAgICAg
cmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGludm9rZTxpbnQ2NF90PigqY29kZSwg
Yml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKworCiB2b2lkIHRlc3RJ
bnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzMyKCkKIHsKICAgICBpZiAoSlNDOjpPcHRpb25zOjpk
ZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKQEAgLTM2OTcsNiArMzk5MSwxMSBAQCB2b2lkIGFkZFNo
clRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgp
Pj4+JiB0YXNrcykKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCAwKSk7CiAg
ICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMSkpOwogICAgIFJVTih0ZXN0WlNo
ckFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDYzKSk7CisKKyAgICBSVU4odGVzdExvYWRQcmVJbmRleDMy
KCkpOworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2FkUG9z
dEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4NjQoKSk7CiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5jcHAKaW5kZXggNjNlMjY2Nzg4NTIwMThhNzY4MGNhNWYwNzE0Njk2
ODEwNTg4NGIzYi4uNjliYjZiMmJlODE4NzBiNTk4MzMzNjdhZjI2NzViN2Y0ZWYwNTZmNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
CkBAIC0yMzMsOCArMjMzLDggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJhdG8KICAgICBqaXQucmV0
KCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9jYWwwID0gaml0LmxhYmVsKCk7Ci0g
ICAgaml0LmxvYWQ2NCh4MSwgUG9zdEluZGV4KDgpLCB4Nik7Ci0gICAgaml0LnN0b3JlNjQoeDYs
IHgzLCBQb3N0SW5kZXgoOCkpOworICAgIGppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OlBvc3RJ
bmRleEFkZHJlc3MoeDEsIDgpLCB4Nik7CisgICAgaml0LnN0b3JlNjQoeDYsIE1hY3JvQXNzZW1i
bGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgzLCA4KSk7CiAgICAgc21hbGxDb3B5LmxpbmsoJmppdCk7
CiAgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIFRydXN0
ZWRJbW0zMig4KSwgeDIpLmxpbmtUbyhsb2NhbDAsICZqaXQpOwogICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGxvY2FsMiA9IGppdC5icmFuY2hBZGQ2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIFRy
dXN0ZWRJbW0zMig4KSwgeDIpOwo=
</data>
<flag name="review"
          id="457117"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434610</attachid>
            <date>2021-07-30 00:58:33 -0700</date>
            <delta_ts>2021-08-06 21:41:19 -0700</delta_ts>
            <desc>Patch for fixing the layout test failure</desc>
            <filename>bug-228047-20210730025832.patch</filename>
            <type>text/plain</type>
            <size>60480</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
OWZmZWNhOTY5ZTk5MDhlZDhhZjU5OGUxZTc3YTU5MjIzZDViNGVkLi42MjkyMTg5YWE3YTYwZGFi
OGI5NjI2Y2MyMGQ3ZDI5Nzk3YjIyYzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNzMgQEAKKzIwMjEtMDctMzAgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBQcmUvUG9zdC1JbmRleGVkIEFkZHJlc3MgTW9kZSB0byBBaXIg
Zm9yIEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjgwNDcKKworICAgICAgICBSZXZpZXdlZCBieSBQaGlsIFBpemxvLgorCisgICAgICAgIFBy
ZS1pbmRleGVkIGFkZHJlc3NpbmcgbWVhbnMgdGhhdCB0aGUgYWRkcmVzcyBpcyB0aGUgc3VtIG9m
IHRoZSB2YWx1ZSBpbiB0aGUgNjQtYml0IGJhc2UgcmVnaXN0ZXIgCisgICAgICAgIGFuZCBhbiBv
ZmZzZXQsIGFuZCB0aGUgYWRkcmVzcyBpcyB0aGVuIHdyaXR0ZW4gYmFjayB0byB0aGUgYmFzZSBy
ZWdpc3Rlci4gQW5kIHBvc3QtaW5kZXhlZCAKKyAgICAgICAgYWRkcmVzc2luZyBtZWFucyB0aGF0
IHRoZSBhZGRyZXNzIGlzIHRoZSB2YWx1ZSBpbiB0aGUgNjQtYml0IGJhc2UgcmVnaXN0ZXIsIGFu
ZCB0aGUgc3VtIG9mIHRoZSAKKyAgICAgICAgYWRkcmVzcyBhbmQgdGhlIG9mZnNldCBpcyB0aGVu
IHdyaXR0ZW4gYmFjayB0byB0aGUgYmFzZSByZWdpc3Rlci4gVGhleSBhcmUgcmVsYXRpdmVseSBj
b21tb24gZm9yIAorICAgICAgICBsb29wcyB0byBpdGVyYXRlIG92ZXIgYW4gYXJyYXkgYnkgaW5j
cmVhc2luZy9kZWNyZWFzaW5nIGEgcG9pbnRlciBpbnRvIHRoZSBhcnJheSBhdCBlYWNoIGl0ZXJh
dGlvbi4gCisgICAgICAgIFdpdGggc3VjaCBhbiBhZGRyZXNzaW5nIG1vZGUsIHRoZSBpbnN0cnVj
dGlvbiBzZWxlY3RvciBjYW4gbWVyZ2UgdGhlIGluY3JlbWVudCBhbmQgYWNjZXNzIHRoZSBhcnJh
eS4KKworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAg
ICAgICMjIFByZS1JbmRleCBBZGRyZXNzIE1vZGUgRm9yIExvYWQgIyMKKyAgICAgICAgIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgIExEUiBXdCwgW1huLCAj
aW1tXSEKKworICAgICAgICBJbiBCMyBSZWR1Y3Rpb24gU3RyZW5ndGgsIHNpbmNlIHdlIGhhdmUg
dGhpcyByZWR1Y3Rpb24gcnVsZToKKyAgICAgICAgICAgIFR1cm4gdGhpczogTG9hZChBZGQoYWRk
cmVzcywgb2Zmc2V0MSksIG9mZnNldCA9IG9mZnNldDIpCisgICAgICAgICAgICBJbnRvIHRoaXM6
IExvYWQoYWRkcmVzcywgb2Zmc2V0ID0gb2Zmc2V0MSArIG9mZnNldDIpCisKKyAgICAgICAgVGhl
biwgdGhlIGVxdWl2YWxlbnQgcGF0dGVybiBpczoKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQo
YmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBtZW1vcnkgPSBMb2Fk
KGJhc2UsIG9mZnNldCkKKworICAgICAgICBGaXJzdCwgd2UgY29udmVydCBpdCB0byB0aGUgY2Fu
b25pY2FsIGZvcm06CisgICAgICAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3QWRkcmVzcykK
KyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBvZmZz
ZXQpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGFkZHJlc3MsIG9mZnNldCkKKworICAgICAg
ICBOZXh0LCBsb3dlciB0byBBaXI6CisgICAgICAgICAgICBNb3ZlICViYXNlLCAlYWRkcmVzcwor
ICAgICAgICAgICAgTW92ZSAoJWFkZHJlc3MsIHByZWZpeChvZmZzZXQpKSwgJW1lbW9yeQorCisg
ICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMj
IFBvc3QtSW5kZXggQWRkcmVzcyBNb2RlIEZvciBMb2FkICMjCisgICAgICAgICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgTERSIFd0LCBbWG5dLCAjaW1t
CisKKyAgICAgICAgVGhlbiwgdGhlIGVxdWl2YWxlbnQgcGF0dGVybiBpczoKKyAgICAgICAgICAg
IGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLi4uCisgICAgICAgICAg
ICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKKworICAgICAgICBGaXJzdCwgd2UgY29udmVy
dCBpdCB0byB0aGUgY2Fub25pY2FsIGZvcm06CisgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKKyAgICAg
ICAgICAgIC4uLgorICAgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCisK
KyAgICAgICAgTmV4dCwgbG93ZXIgdG8gQWlyOgorICAgICAgICAgICAgTW92ZSAlYmFzZSwgJWFk
ZHJlc3MKKyAgICAgICAgICAgIE1vdmUgKCVhZGRyZXNzLCBwb3N0Zml4KG9mZnNldCkpLCAlbWVt
b3J5CisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyMg
UGF0dGVybiBNYXRjaCBBbGdvcml0aG0gIyMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKKworICAgICAgICBUbyBkZXRlY3QgdGhlIHBhdHRlcm4gZm9yIHByZWZpeC9wb3N0
Zml4IGluY3JlbWVudCBhZGRyZXNzIGlzIHRyaWNreSBkdWUgdG8gdGhlIHN0cnVjdHVyZSBpbiBC
MyBJUi4gVGhlIAorICAgICAgICBhbGdvcml0aG0gdXNlZCBpbiB0aGlzIHBhdGNoIGlzIHRvIGNv
bGxlY3QgdGhlIGZpcnN0IHZhbGlkIHZhbHVlcyAoYWRkL2xvYWQpLCB0aGVuIHNlYXJjaCBmb3Ig
YW55IAorICAgICAgICBwYWlyZWQgdmFsdWUgKGxvYWQvYWRkKSB0byBtYXRjaCBhbGwgb2YgdGhl
bS4gSW4gd29yc3QgY2FzZSwgdGhlIHJ1bnRpbWUgY29tcGxleGl0eSBpcyBPKG5eMikgCisgICAg
ICAgIHdoZW4gbiBpcyB0aGUgbnVtYmVyIG9mIGFsbCB2YWx1ZXMuCisKKyAgICAgICAgQWZ0ZXIg
Y29sbGVjdGluZyB0d28gc2V0cyBvZiBjYW5kaWRhdGVzLCB3ZSBtYXRjaCB0aGUgcHJlZml4IGlu
Y3JlbWVudGFsIGFkZHJlc3MgZmlyc3Qgc2luY2UgaXQgc2VlbXMgCisgICAgICAgIG1vcmUgYmVu
ZWZpY2lhbCB0byB0aGUgY29tcGlsZXIgKHNob3duIGluIHRoZSBuZXh0IHNlY3Rpb24pLiBBbmQg
dGhlbiwgZ28gZm9yIHRoZSBwb3N0Zml4IG9uZS4KKworICAgICAgICAjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMjIFRlc3QgZm9yIFByZS9Q
b3N0LUluY3JlbWVudCBBZGRyZXNzIE1vZGUgIyMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgIEdpdmVuIExvb3Agd2l0aCBQ
cmUtSW5jcmVtZW50OgorICAgICAgICBpbnQ2NF90IGxkcl9wcmUoaW50NjRfdCAqcCkgeworICAg
ICAgICAgICAgaW50NjRfdCByZXMgPSAwOworICAgICAgICAgICAgd2hpbGUgKHJlcyA8IDEwKQor
ICAgICAgICAgICAgICAgIHJlcyArPSAqKytwOworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAg
ICAgICAgfQorCisgICAgICAgIEIzIElSOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQkIjMDogOyBmcmVxdWVu
Y3kgPSAxLjAwMDAwMAorICAgICAgICAgICAgSW50NjQgYkAwID0gQ29uc3Q2NCgwKQorICAgICAg
ICAgICAgSW50NjQgYkAyID0gQXJndW1lbnRSZWcoJXgwKQorICAgICAgICAgICAgVm9pZCBiQDIw
ID0gVXBzaWxvbigkMChiQDApLCBeMTgsIFdyaXRlc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBW
b2lkIGJAMjEgPSBVcHNpbG9uKGJAMiwgXjE5LCBXcml0ZXNMb2NhbFN0YXRlKQorICAgICAgICAg
ICAgVm9pZCBiQDQgPSBKdW1wKFRlcm1pbmFsKQorICAgICAgICBTdWNjZXNzb3JzOiAjMQorICAg
ICAgICBCQiMxOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRlY2Vzc29yczog
IzAsICMyCisgICAgICAgICAgICBJbnQ2NCBiQDE4ID0gUGhpKFJlYWRzTG9jYWxTdGF0ZSkKKyAg
ICAgICAgICAgIEludDY0IGJAMTkgPSBQaGkoUmVhZHNMb2NhbFN0YXRlKQorICAgICAgICAgICAg
SW50NjQgYkA3ID0gQ29uc3Q2NCgxMCkKKyAgICAgICAgICAgIEludDMyIGJAOCA9IEFib3ZlRXF1
YWwoYkAxOCwgJDEwKGJANykpCisgICAgICAgICAgICBWb2lkIGJAOSA9IEJyYW5jaChiQDgsIFRl
cm1pbmFsKQorICAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiMzLCBFbHNlOiMyCisgICAgICAgIEJC
IzI6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNzb3JzOiAjMQorICAg
ICAgICAgICAgSW50NjQgYkAxMCA9IENvbnN0NjQoOCkKKyAgICAgICAgICAgIEludDY0IGJAMTEg
PSBBZGQoYkAxOSwgJDgoYkAxMCkpCisgICAgICAgICAgICBJbnQ2NCBiQDEzID0gTG9hZChiQDEx
LCBDb250cm9sRGVwZW5kZW50fFJlYWRzOlRvcCkKKyAgICAgICAgICAgIEludDY0IGJAMTQgPSBB
ZGQoYkAxOCwgYkAxMykKKyAgICAgICAgICAgIFZvaWQgYkAyMiA9IFVwc2lsb24oYkAxNCwgXjE4
LCBXcml0ZXNMb2NhbFN0YXRlKQorICAgICAgICAgICAgVm9pZCBiQDIzID0gVXBzaWxvbihiQDEx
LCBeMTksIFdyaXRlc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBWb2lkIGJAMTYgPSBKdW1wKFRl
cm1pbmFsKQorICAgICAgICBTdWNjZXNzb3JzOiAjMQorICAgICAgICBCQiMzOiA7IGZyZXF1ZW5j
eSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRlY2Vzc29yczogIzEKKyAgICAgICAgICAgIFZvaWQg
YkAxNyA9IFJldHVybihiQDE4LCBUZXJtaW5hbCkKKyAgICAgICAgVmFyaWFibGVzOgorICAgICAg
ICAgICAgSW50NjQgdmFyMAorICAgICAgICAgICAgSW50NjQgdmFyMQorICAgICAgICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAg
ICBXL08gUHJlLUluY3JlbWVudCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAuLi4KKyAg
ICAgICAgQkIjMjogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNlc3NvcnM6
ICMxCisgICAgICAgICAgICBNb3ZlICQ4LCAleDMsICQ4KGJAMTIpCisgICAgICAgICAgICBBZGQ2
NCAkOCwgJXgwLCAleDEsIGJAMTEKKyAgICAgICAgICAgIE1vdmUgKCV4MCwleDMpLCAleDAsIGJA
MTMKKyAgICAgICAgICAgIEFkZDY0ICV4MCwgJXgyLCAleDIsIGJAMTQKKyAgICAgICAgICAgIE1v
dmUgJXgxLCAleDAsIGJAMjMKKyAgICAgICAgICAgIEp1bXAgYkAxNgorICAgICAgICBTdWNjZXNz
b3JzOiAjMQorICAgICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVy8gUHJlLUluY3JlbWVudCBB
ZGRyZXNzIE1vZGU6CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAuLi4KKyAgICAgICAgQkIjMjogOyBmcmVxdWVu
Y3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNlc3NvcnM6ICMxCisgICAgICAgICAgICBNb3Zl
V2l0aEluY3JlbWVudDY0ICgleDAsUHJlKCQ4KSksICV4MiwgYkAxMworICAgICAgICAgICAgQWRk
NjQgJXgyLCAleDEsICV4MSwgYkAxNAorICAgICAgICAgICAgSnVtcCBiQDE2CisgICAgICAgIFN1
Y2Nlc3NvcnM6ICMxCisgICAgICAgIC4uLgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBHaXZlbiBMb29wIHdp
dGggUG9zdC1JbmNyZW1lbnQ6CisgICAgICAgIGludDY0X3QgbGRyX3ByZShpbnQ2NF90ICpwKSB7
CisgICAgICAgICAgICBpbnQ2NF90IHJlcyA9IDA7CisgICAgICAgICAgICB3aGlsZSAocmVzIDwg
MTApCisgICAgICAgICAgICAgICAgcmVzICs9ICpwKys7CisgICAgICAgICAgICByZXR1cm4gcmVz
OworICAgICAgICB9CisKKyAgICAgICAgQjMgSVI6CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCQiMwOiA7IGZy
ZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgICAgICBJbnQ2NCBiQDAgPSBDb25zdDY0KDApCisg
ICAgICAgICAgICBJbnQ2NCBiQDIgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgICAgICBWb2lk
IGJAMjAgPSBVcHNpbG9uKCQwKGJAMCksIF4xOCwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAgICAg
ICAgIFZvaWQgYkAyMSA9IFVwc2lsb24oYkAyLCBeMTksIFdyaXRlc0xvY2FsU3RhdGUpCisgICAg
ICAgICAgICBWb2lkIGJANCA9IEp1bXAoVGVybWluYWwpCisgICAgICAgIFN1Y2Nlc3NvcnM6ICMx
CisgICAgICAgIEJCIzE6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNz
b3JzOiAjMCwgIzIKKyAgICAgICAgICAgIEludDY0IGJAMTggPSBQaGkoUmVhZHNMb2NhbFN0YXRl
KQorICAgICAgICAgICAgSW50NjQgYkAxOSA9IFBoaShSZWFkc0xvY2FsU3RhdGUpCisgICAgICAg
ICAgICBJbnQ2NCBiQDcgPSBDb25zdDY0KDEwKQorICAgICAgICAgICAgSW50MzIgYkA4ID0gQWJv
dmVFcXVhbChiQDE4LCAkMTAoYkA3KSkKKyAgICAgICAgICAgIFZvaWQgYkA5ID0gQnJhbmNoKGJA
OCwgVGVybWluYWwpCisgICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46IzMsIEVsc2U6IzIKKyAgICAg
ICAgQkIjMjogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNlc3NvcnM6ICMx
CisgICAgICAgICAgICBJbnQ2NCBiQDEwID0gTG9hZChiQDE5LCBDb250cm9sRGVwZW5kZW50fFJl
YWRzOlRvcCkKKyAgICAgICAgICAgIEludDY0IGJAMTEgPSBBZGQoYkAxOCwgYkAxMCkKKyAgICAg
ICAgICAgIEludDY0IGJAMTIgPSBDb25zdDY0KDgpCisgICAgICAgICAgICBJbnQ2NCBiQDEzID0g
QWRkKGJAMTksICQ4KGJAMTIpKQorICAgICAgICAgICAgVm9pZCBiQDIyID0gVXBzaWxvbihiQDEx
LCBeMTgsIFdyaXRlc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBWb2lkIGJAMjMgPSBVcHNpbG9u
KGJAMTMsIF4xOSwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAgICAgICAgIFZvaWQgYkAxNiA9IEp1
bXAoVGVybWluYWwpCisgICAgICAgIFN1Y2Nlc3NvcnM6ICMxCisgICAgICAgIEJCIzM6IDsgZnJl
cXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNzb3JzOiAjMQorICAgICAgICAgICAg
Vm9pZCBiQDE3ID0gUmV0dXJuKGJAMTgsIFRlcm1pbmFsKQorICAgICAgICBWYXJpYWJsZXM6Cisg
ICAgICAgICAgICBJbnQ2NCB2YXIwCisgICAgICAgICAgICBJbnQ2NCB2YXIxCisgICAgICAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisg
ICAgICAgIFcvTyBQb3N0LUluY3JlbWVudCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAu
Li4KKyAgICAgICAgQkIjMjogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNl
c3NvcnM6ICMxCisgICAgICAgICAgICBNb3ZlICgleDApLCAleDIsIGJAMTAKKyAgICAgICAgICAg
IEFkZDY0ICV4MiwgJXgxLCAleDEsIGJAMTEKKyAgICAgICAgICAgIEFkZDY0ICQ4LCAleDAsICV4
MCwgYkAxMworICAgICAgICAgICAgSnVtcCBiQDE2CisgICAgICAgIFN1Y2Nlc3NvcnM6ICMxCisg
ICAgICAgIC4uLgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBXLyBQb3N0LUluY3JlbWVudCBBZGRyZXNzIE1v
ZGU6CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgICAgICAuLi4KKyAgICAgICAgQkIjMjogOyBmcmVxdWVuY3kgPSAxLjAw
MDAwMAorICAgICAgICBQcmVkZWNlc3NvcnM6ICMxCisgICAgICAgICAgICBNb3ZlV2l0aEluY3Jl
bWVudDY0ICgleDAsUG9zdCgkOCkpLCAleDIsIGJAMTAKKyAgICAgICAgICAgIEFkZDY0ICV4Miwg
JXgxLCAleDEsIGJAMTEKKyAgICAgICAgICAgIEp1bXAgYkAxNgorICAgICAgICBTdWNjZXNzb3Jz
OiAjMQorICAgICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAg
ICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQcmVJbmRleEFkZHJlc3M6OlByZUluZGV4QWRkcmVzcyk6
CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3M6
OlBvc3RJbmRleEFkZHJlc3MpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxvYWQ2NCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxvYWQzMik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNNjQ6OnN0b3JlNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTTY0OjpzdG9yZTMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20uY3BwOgorICAg
ICAgICAoSlNDOjp0ZXN0U3RvcmVQcmVQb3N0SW5kZXgzMik6CisgICAgICAgIChKU0M6OnRlc3RT
dG9yZVByZVBvc3RJbmRleDY0KToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQcmVQb3N0SW5kZXgz
Mik6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJlUG9zdEluZGV4NjQpOgorICAgICAgICAqIGIz
L0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OmNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKToKKyAgICAgICAgKiBiMy9CM0Nh
bm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oLgorICAgICAgICAqIGIzL0IzR2VuZXJhdGUu
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6CisgICAgICAgICogYjMvQjNM
b3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM1ZhbHVlS2V5Lmg6CisgICAgICAgICogYjMv
QjNWYWx1ZUtleUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlS2V5OjpWYWx1ZUtl
eSk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6anNIYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpkdW1wIGNv
bnN0KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvYWlyL0Fp
ckFyZy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnByZUluZGV4KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjpwb3N0SW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmlzUHJlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUG9z
dEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc01lbW9yeSBjb25z
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YmFzZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjppc0dQIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZEZvcm0gY29uc3QpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1ByZUluZGV4QWRk
cmVzcyBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNQb3N0SW5kZXhBZGRy
ZXNzIGNvbnN0KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAg
ICogYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmI6CisgICAgICAgICogYjMvdGVzdGIzLmg6Cisg
ICAgICAgICogYjMvdGVzdGIzXzMuY3BwOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDMyKToK
KyAgICAgICAgKHRlc3RMb2FkUHJlSW5kZXg2NCk6CisgICAgICAgICh0ZXN0TG9hZFBvc3RJbmRl
eDMyKToKKyAgICAgICAgKHRlc3RMb2FkUG9zdEluZGV4NjQpOgorICAgICAgICAoYWRkU2hyVGVz
dHMpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6aml0V3JpdGVUaHVua0dlbmVyYXRvcik6CisKIDIwMjEtMDctMjkgIE15bGVzIEMuIE1heGZp
ZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIGJ1aWxkaW5nIFdlYkdQ
VSBhbmQgdGhlIFdITFNMIGNvbXBpbGVyIHRvIGRlY3JlYXNlIGJpbmFyeSBzaXplCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKaW5kZXggNTVkY2ExZmYwNTNmNGNlOTg1ZDIxZmQ2ZGJjM2RkM2Iw
ZGU3Y2IwMC4uYTY0NzAyZGI2MDFjYzIxYWJiNGMyNjI5NDU3ZGQxYTc1OWMzMDIwZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMTEzLDYgKzExMyw3IEBAIGIzL0IzQmFzaWNCbG9j
ay5jcHAKIGIzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCiBiMy9CM0JvdHRvbVR1cGxlVmFsdWUu
Y3BwCiBiMy9CM0JyZWFrQ3JpdGljYWxFZGdlcy5jcHAKK2IzL0IzQ2Fub25pY2FsaXplUHJlUG9z
dEluY3JlbWVudHMuY3BwCiBiMy9CM0NDYWxsVmFsdWUuY3BwCiBiMy9CM0Nhc2VDb2xsZWN0aW9u
LmNwcAogYjMvQjNDaGVja1NwZWNpYWwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCmluZGV4IDNkMTk0OWE0
MDc4NWQ5OWNhNjE1OTVhYWIwNGJlNmYxZDBkOTZiYTMuLjIzNTRjNDUzNjhjN2MwZDVjZTkwMThh
Y2ZmMjg0YzRhMGEwNDMxYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCkBAIC0yNDUsNiArMjQ1LDM0IEBA
IHB1YmxpYzoKICAgICAgICAgfQogICAgIH07CiAKKyAgICAvLyBQcmVJbmRleEFkZHJlc3M6Cisg
ICAgLy8KKyAgICAvLyBEZXNjcmliZXMgYW4gYWRkcmVzcyB3aXRoIGJhc2UgYWRkcmVzcyBhbmQg
cHJlLWluY3JlbWVudC9kZWNyZW1lbnQgaW5kZXguCisgICAgc3RydWN0IFByZUluZGV4QWRkcmVz
cyB7CisgICAgICAgIFByZUluZGV4QWRkcmVzcyhSZWdpc3RlcklEIGJhc2UsIGludCBpbmRleCkK
KyAgICAgICAgICAgIDogYmFzZShiYXNlKQorICAgICAgICAgICAgLCBpbmRleChpbmRleCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBiYXNlOworICAgICAgICBp
bnQgaW5kZXg7CisgICAgfTsKKworICAgIC8vIFBvc3RJbmRleEFkZHJlc3M6CisgICAgLy8KKyAg
ICAvLyBEZXNjcmliZXMgYW4gYWRkcmVzcyB3aXRoIGJhc2UgYWRkcmVzcyBhbmQgcG9zdC1pbmNy
ZW1lbnQvZGVjcmVtZW50IGluZGV4LgorICAgIHN0cnVjdCBQb3N0SW5kZXhBZGRyZXNzIHsKKyAg
ICAgICAgUG9zdEluZGV4QWRkcmVzcyhSZWdpc3RlcklEIGJhc2UsIGludCBpbmRleCkKKyAgICAg
ICAgICAgIDogYmFzZShiYXNlKQorICAgICAgICAgICAgLCBpbmRleChpbmRleCkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBiYXNlOworICAgICAgICBpbnQgaW5k
ZXg7CisgICAgfTsKKwogICAgIC8vIEFic29sdXRlQWRkcmVzczoKICAgICAvLwogICAgIC8vIERl
c2NyaWJlcyBhbiBtZW1vcnkgb3BlcmFuZCBnaXZlbiBieSBhIHBvaW50ZXIuICBGb3IgcmVndWxh
ciBsb2FkICYgc3RvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggMjk2ZTg4ZjliNTQ2MmM0YWY3ZDFmNDc0MGRj
ODJiYmFlYjU2ZjA0MC4uZTZiZmJlYzYwMDFjMTBjNjFlOWYyNjZlZmYyN2FkNmYxMGU4OWY4ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmgKQEAgLTE0NDcsOSArMTQ0NywxNCBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWQ8
NjQ+KGFkZHJlc3MsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgbG9hZDY0KFJlZ2lzdGVySUQg
c3JjLCBQb3N0SW5kZXggc2ltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgbG9hZDY0KFBy
ZUluZGV4QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIG1fYXNz
ZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLCBzaW1tKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRy
PDY0PihkZXN0LCBzcmMuYmFzZSwgUHJlSW5kZXgoc3JjLmluZGV4KSk7CisgICAgfQorCisgICAg
dm9pZCBsb2FkNjQoUG9zdEluZGV4QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLmJhc2UsIFBvc3RJbmRleChz
cmMuaW5kZXgpKTsKICAgICB9CiAKICAgICBEYXRhTGFiZWwzMiBsb2FkNjRXaXRoQWRkcmVzc09m
ZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQpAQCAtMTU0OCw2ICsx
NTUzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDwzMj4oYWRkcmVzcywgZGVzdCk7CiAgICAg
fQogCisgICAgdm9pZCBsb2FkMzIoUHJlSW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihkZXN0LCBzcmMuYmFzZSwgUHJl
SW5kZXgoc3JjLmluZGV4KSk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoUG9zdEluZGV4QWRk
cmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxk
cjwzMj4oZGVzdCwgc3JjLmJhc2UsIFBvc3RJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisKICAg
ICBEYXRhTGFiZWwzMiBsb2FkMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVz
cywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhp
cyk7CkBAIC0xNzQ3LDcgKzE3NjIsMTcgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5h
ZGQ8NjQ+KG1lbW9yeVRlbXBSZWdpc3RlciwgbWVtb3J5VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmlu
ZGV4LCBpbmRleEV4dGVuZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOwogICAgICAgICBt
X2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgYWRkcmVzcy5iYXNlLCBtZW1vcnlUZW1wUmVnaXN0ZXIp
OwogICAgIH0KLSAgICAKKworICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUHJlSW5k
ZXhBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywg
ZGVzdC5iYXNlLCBQcmVJbmRleChkZXN0LmluZGV4KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9y
ZTY0KFJlZ2lzdGVySUQgc3JjLCBQb3N0SW5kZXhBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgZGVzdC5iYXNlLCBQb3N0SW5kZXgoZGVzdC5pbmRl
eCkpOworICAgIH0KKwogICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgY29uc3Qgdm9p
ZCogYWRkcmVzcykKICAgICB7CiAgICAgICAgIHN0b3JlPDY0PihzcmMsIGFkZHJlc3MpOwpAQCAt
MTc5MSwxMSArMTgxNiw2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmU2NChkYXRhVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzKTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCwgUG9zdEluZGV4IHNpbW0pCi0gICAgewotICAgICAgICBtX2Fzc2Vt
Ymxlci5zdHI8NjQ+KHNyYywgZGVzdCwgc2ltbSk7Ci0gICAgfQotICAgIAogICAgIERhdGFMYWJl
bDMyIHN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNz
IGFkZHJlc3MpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKQEAgLTE4
OTUsNiArMTkxNSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdpc3Rl
ciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBQ
cmVJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjwzMj4o
c3JjLCBkZXN0LmJhc2UsIFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lk
IHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnN0cjwzMj4oc3JjLCBkZXN0LmJhc2UsIFBvc3RJbmRleChkZXN0
LmluZGV4KSk7CisgICAgfQorCiAgICAgRGF0YUxhYmVsMzIgc3RvcmUzMldpdGhBZGRyZXNzT2Zm
c2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAg
IERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL3Rlc3RtYXNtLmNwcAppbmRleCBmNmQxNmNmZDk2MDZlMDY3YzBkOTUyNmVkOGQzNmEyZjE3
ZWE2MjRmLi4xY2E2OTgzZWI3MGQ5NjQwYmU0ZmIyZjExMGUyZjhlMDFmMzhmODM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtMjIxMiw2ICsy
MjEyLDE3NiBAQCB2b2lkIHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKQogICAg
ICAgICB9CiAgICAgfQogfQorCit2b2lkIHRlc3RTdG9yZVByZVBvc3RJbmRleDMyKCkKK3sKKyAg
ICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAgIGludHB0cl90IGFkZHIgPSBiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KCZudW1zWzFdKTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9m
KGludDMyX3QpOworCisgICAgYXV0byB0ZXN0MSA9IFsmXSAoaW50MzJfdCBzcmMpIHsKKyAgICAg
ICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gKisrcDEg
PSA0OyByZXR1cm4gcDE7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGls
b2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAg
cmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUsIHNyYywgYWRkcik7CisgICAgfTsKKworICAg
IGludDMyX3QqIHAxID0gYml0d2lzZV9jYXN0PGludDMyX3QqPih0ZXN0MSg0KSk7CisgICAgQ0hF
Q0tfRVEoKnAxLCA0KTsKKyAgICBDSEVDS19FUSgqLS1wMSwgbnVtc1sxXSk7CisKKyAgICBhdXRv
IHRlc3QyID0gWyZdIChpbnQzMl90IHNyYykgeworICAgICAgICBhdXRvIHN0b3JlID0gY29tcGls
ZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAqcDIrKyA9IDU7IHJldHVybiBwMjsKKyAgICAg
ICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQ
b3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAg
ICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAg
ICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJf
dD4oc3RvcmUsIHNyYywgYWRkcik7CisgICAgfTsKKworICAgIGludDMyX3QqIHAyID0gYml0d2lz
ZV9jYXN0PGludDMyX3QqPih0ZXN0Mig1KSk7CisgICAgQ0hFQ0tfRVEoKnAyLCA0KTsKKyAgICBD
SEVDS19FUSgqLS1wMiwgNSk7Cit9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9zdEluZGV4NjQoKQor
eworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50cHRyX3QgYWRkciA9
IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMyX3QgaW5kZXggPSBz
aXplb2YoaW50NjRfdCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQ2NF90IHNyYykgewor
ICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Cisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAq
KytwMSA9IDQ7IHJldHVybiBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRH
UFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAg
ICAgICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9Owor
CisgICAgaW50NjRfdCogcDEgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHRlc3QxKDQpKTsKKyAg
ICBDSEVDS19FUSgqcDEsIDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1zWzFdKTsKKworICAg
IGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBj
b21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlv
blByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsgcmV0dXJuIHAyOwor
ICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBl
cnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAg
ICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAg
ICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGlu
dHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50NjRfdCogcDIgPSBi
aXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19FUSgqcDIsIDQpOwor
ICAgIENIRUNLX0VRKCotLXAyLCA1KTsKK30KKwordm9pZCB0ZXN0TG9hZFByZVBvc3RJbmRleDMy
KCkKK3sKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAgIGludDMyX3QgaW5k
ZXggPSBzaXplb2YoaW50MzJfdCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQzMl90IHJl
cGxhY2UpIHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAg
ICAgICAvLyByZXMgPSAqKytwMTsgKnAxID0gNDsgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIGpp
dC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRH
UFIwLCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3Rv
cmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJ
bXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQu
bW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKwor
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5y
ZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4obG9hZCwg
Jm51bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0MSg0KSwgMyk7CisgICAgQ0hF
Q0tfRVEobnVtc1syXSwgNCk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQzMl90IHJlcGxh
Y2UpIHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0
KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAg
ICAvLyByZXMgPSAqcDIrKzsgKnAyID0gNTsgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIGppdC5s
b2FkMzIoQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgaml0LnN0b3Jl
MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVwbGFjZSksIENDYWxsSGVscGVyczo6SW1w
bGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAg
ICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0
KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KGxvYWQsICZu
dW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVzdDIoNSksIDIpOworICAgIENIRUNL
X0VRKG51bXNbMl0sIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKQorewor
ICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNp
emVvZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkg
eworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8v
IHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2
NChDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGlu
ZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0
QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAg
ICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sx
XSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShu
dW1zWzJdLCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3QgcmVwbGFjZSkgewor
ICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJl
cyA9ICpwMisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQ2NChD
Q2FsbEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRl
eCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW02NChyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFk
ZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4obG9hZCwgJm51bXNbMV0p
OworICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVt
c1syXSwgNSk7Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQ
VShBUk02NCkKQEAgLTQ4MDUsNiArNDk3NSwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0
ZXIpIFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdFhvck5v
dFdpdGhMZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0NjQo
KSk7CiAgICAgUlVOKHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CisKKyAg
ICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9yZVByZVBv
c3RJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDMyKCkpOworICAgIFJV
Tih0ZXN0TG9hZFByZVBvc3RJbmRleDY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUoQVJNNjRFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9z
dEluY3JlbWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXpl
UHJlUG9zdEluY3JlbWVudHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4ZWI5YzQwZmRlNjA4YTYyZjAzNTZm
ODViYWQ2YmNhZGNhNTUzN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAKQEAgLTAsMCArMSwxNzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5o
IgorCisjaW5jbHVkZSAiQjNCYWNrd2FyZHNEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNs
dWRlICJCM0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIK
KyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMu
aCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxp
bmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBjYW5vbmljYWxpemVQcmVQ
b3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCit7CisgICAgaWYgKCFpc0FSTTY0KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywgImNh
bm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzIik7CisgICAgdXNpbmcgQXJnID0gQWlyOjpBcmc7
CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0IHsgcHJvYyB9OworICAgIEJsb2NrSW5z
ZXJ0aW9uU2V0IGJsb2NrSW5zZXJ0aW9uU2V0IHsgcHJvYyB9OworICAgIEJhc2ljQmxvY2sqIGJs
b2NrIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIGluZGV4IHsgMCB9OworCisgICAgRG9taW5h
dG9ycyYgZG9taW5hdG9ycyA9IHByb2MuZG9taW5hdG9ycygpOworICAgIEJhY2t3YXJkc0RvbWlu
YXRvcnMmIGJhY2t3YXJkc0RvbWluYXRvcnMgPSBwcm9jLmJhY2t3YXJkc0RvbWluYXRvcnMoKTsK
KworICAgIEhhc2hNYXA8VmFsdWVLZXksIFZlY3RvcjxWYWx1ZSo+PiBiYXNlT2Zmc2V0VG9BZGRy
ZXNzZXM7CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcHJlSW5kZXhDYW5kaWRh
dGVzOworICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvTWVt
b3JpZXM7CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4Q2FuZGlk
YXRlczsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgdW5zaWduZWQ+IG1lbW9yeVRvSW5kZXg7
CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBpZ25vcmVkVmFsdWVzOworCisgICAgYXV0byB0cnlQcmVQ
b3N0SW5kZXggPSBbJl0gKFZhbHVlKiB2YWx1ZSkgeworICAgICAgICBzd2l0Y2ggKHZhbHVlLT5v
cGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ6IHsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVl
KiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisKKyAgICAgICAgICAgIC8vIFBy
ZS1JbmRleCBQYXR0ZXJuOgorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwg
b2Zmc2V0KQorICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgLy8gICAgIG1lbW9y
eSA9IExvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBQYXR0ZXJu
OgorICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKKyAgICAgICAgICAg
IC8vICAgICAuLi4KKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNl
dCkKKyAgICAgICAgICAgIGF1dG8gdHJ5UHJlUG9zdEluZGV4TWVtb3J5ID0gWyZdICgpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobWVtb3J5LT50eXBlKCkgIT0gSW50MzIgJiYgbWVtb3J5LT50eXBl
KCkgIT0gSW50NjQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6
aXNWYWxpZFByZUluZGV4Rm9ybShtZW1vcnktPm9mZnNldCgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNldGtl
eSA9IFZhbHVlS2V5KG1lbW9yeS0+Y2hpbGQoMCksIHN0YXRpY19jYXN0PGludDY0X3Q+KG1lbW9y
eS0+b2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VPZmZzZXRUb0FkZHJl
c3Nlcy5jb250YWlucyhiYXNlT2Zmc2V0a2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChWYWx1ZSogYWRkcmVzcyA6IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFzZU9mZnNl
dGtleSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlSW5kZXhDYW5kaWRhdGVzLmFk
ZChtZW1vcnksIGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgYmFzZVRvTWVtb3JpZXMuYWRkKG1lbW9yeS0+Y2hpbGQoMCksIFZlY3RvcjxN
ZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWVtb3J5KTsKKyAgICAgICAg
ICAgICAgICBtZW1vcnlUb0luZGV4LmFkZChtZW1vcnksIGluZGV4KTsKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIHRyeVByZVBvc3RJbmRleE1lbW9yeSgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFkZDogeworICAgICAgICAgICAgVmFsdWUq
IGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSB2YWx1
ZS0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgIGF1dG8gdHJ5UG90ZW50aWFsUG9zdEluZGV4QWRk
cmVzcyA9IFsmXSAoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFyaWdodC0+aGFzSW50UHRyKCkg
fHwgdmFsdWUtPnR5cGUoKSAhPSBJbnQ2NCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJpZ2h0LT5hc0ludFB0cigpOworICAg
ICAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8
VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKHNtYWxsT2Zm
c2V0ICE9IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKHNtYWxsT2Zmc2V0KSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIC8vIHNvIGZhciB0
aGlzIEFkZCB2YWx1ZSBpcyBhIHZhbGlkIGFkZHJlc3MgY2FuZGlkYXRlIGZvciBib3RoIHByZWZp
eCBhbmQgcG9zdGZpeCBwYXR0ZXJuCisgICAgICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNl
dGtleSA9IFZhbHVlS2V5KGxlZnQsIHN0YXRpY19jYXN0PGludDY0X3Q+KHNtYWxsT2Zmc2V0KSk7
CisgICAgICAgICAgICAgICAgYmFzZU9mZnNldFRvQWRkcmVzc2VzLmFkZChiYXNlT2Zmc2V0a2V5
LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoYmFzZVRvTWVtb3JpZXMuY29udGFpbnMobGVmdCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFzZVRvTWVtb3JpZXMuZ2V0
KGxlZnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQo
bWVtb3J5LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAg
ICAgICAgICAgdHJ5UG90ZW50aWFsUG9zdEluZGV4QWRkcmVzcygpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrIDogcHJv
Yy5ibG9ja3NJblByZU9yZGVyKCkpIHsKKyAgICAgICAgYmxvY2sgPSBiYXNpY0Jsb2NrOworICAg
ICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBiYXNpY0Jsb2NrLT5zaXplKCk7ICsraW5kZXgp
CisgICAgICAgICAgICB0cnlQcmVQb3N0SW5kZXgoYmFzaWNCbG9jay0+YXQoaW5kZXgpKTsKKyAg
ICB9CisKKyAgICBhdXRvIGNvbnRyb2xFcXVpdmFsZW50ID0gWyZdIChWYWx1ZSogdjEsIFZhbHVl
KiB2MikgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiAoZG9taW5hdG9ycy5kb21pbmF0ZXModjEt
Pm93bmVyLCB2Mi0+b3duZXIpICYmIGJhY2t3YXJkc0RvbWluYXRvcnMuZG9taW5hdGVzKHYyLT5v
d25lciwgdjEtPm93bmVyKSkKKyAgICAgICAgICAgIHx8IChkb21pbmF0b3JzLmRvbWluYXRlcyh2
Mi0+b3duZXIsIHYxLT5vd25lcikgJiYgYmFja3dhcmRzRG9taW5hdG9ycy5kb21pbmF0ZXModjEt
Pm93bmVyLCB2Mi0+b3duZXIpKTsKKyAgICB9OworCisgICAgYXV0byBkZXRlY3QgPSBbJl0gKEhh
c2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgZm9yIChh
dXRvIGl0ciA9IGNhbmRpZGF0ZXMuYmVnaW4oKTsgaXRyICE9IGNhbmRpZGF0ZXMuZW5kKCk7ICsr
aXRyKSB7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gaXRyLT5rZXk7CisgICAg
ICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IGl0ci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoaWdu
b3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMoYWRk
cmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFZhbHVlKiBuZXdBZGRyZXNzID0gaW5zZXJ0
aW9uU2V0Lmluc2VydDxWYWx1ZT4obWVtb3J5VG9JbmRleC5nZXQobWVtb3J5KSwgQWRkLCBtZW1v
cnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgwKSwgYWRkcmVzcy0+Y2hpbGQoMSkpOworICAg
ICAgICAgICAgYWRkcmVzcy0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdBZGRyZXNzKTsKKyAgICAg
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKG1lbW9yeS0+b3duZXIpOworCisgICAgICAgICAg
ICBpZ25vcmVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAgIGlnbm9yZWRWYWx1ZXMu
YWRkKG1lbW9yeSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gYWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpICAgICAgIGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNzKQorICAgIC8v
IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdBZGRyZXNzID0gQWRkKGJhc2Us
IG9mZnNldCkKKyAgICAvLyBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVtb3J5
ID0gTG9hZChhZGRyZXNzLCBvZmZzZXQpCisgICAgZGV0ZWN0KHByZUluZGV4Q2FuZGlkYXRlcyk7
CisKKyAgICAvLyBtZW1vcnkgPSBMb2FkKGJhc2UsIDApICAgICAgICAgICAgbmV3QWRkcmVzcyA9
IEFkZChiYXNlLCBvZmZzZXQpCisgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAt
LT4gIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKKyAgICAvLyBhZGRyZXNzID0gQWRkKGJhc2UsIG9m
ZnNldCkgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCisgICAgZGV0ZWN0KHBv
c3RJbmRleENhbmRpZGF0ZXMpOworICAgIHJldHVybiB0cnVlOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lMzk5YmM2NzNlZTk2NzBiODIzMjkxYjcyNmU1NTU5YTc4NTFlM2ZmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXpl
UHJlUG9zdEluY3JlbWVudHMuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJl
OworCitKU19FWFBPUlRfUFJJVkFURSBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
KFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAppbmRl
eCBjZDQ0YTI5MTU3Nzc0MGQyMzk5MzA4YzI2MmE3OTI3NTk1ZmU3YjQzLi44MzZmYTMxMWMzNmIz
OGZkNmQ5N2NmZjdlYjUxNTgwMjU3YmQzMDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
R2VuZXJhdGUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2lu
Y2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVkZSAiQjNDYW5vbmljYWxpemVQcmVQb3N0SW5j
cmVtZW50cy5oIgogI2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNEdXBsaWNhdGVU
YWlscy5oIgogI2luY2x1ZGUgIkIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCIKQEAg
LTExOSw2ICsxMjAsOSBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUp
CiAgICAgbW92ZUNvbnN0YW50cyhwcm9jZWR1cmUpOwogICAgIGVsaW1pbmF0ZURlYWRDb2RlKHBy
b2NlZHVyZSk7CiAKKyAgICBpZiAocHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMikKKyAgICAgICAg
Y2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMocHJvY2VkdXJlKTsKKwogICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgcnVuIHB1cmVDU0UgaGVyZSB0byBjbGVhbiB1cCBzb21lIHBsYXRmb3JtIHNw
ZWNpZmljIGNoYW5nZXMgZnJvbSB0aGUgcHJldmlvdXMgcGhhc2VzLgogICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4NzMKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBkNWZjMzE2NDY1OTY4ZWI3MzcxYjZmZjFj
YzZmODMxN2ZlY2RlNTJlLi5lYmIwMzUyY2IzMDgwM2RiYzFmZTgxOGUzOTkwYmEzNzQ1NzA2NjM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcApAQCAtMjA3LDcg
KzIwNyw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rp
b25zKG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAg
ICAgbV9ibG9ja0luc2VydGlvblNldC5leGVjdXRlKCk7CiAKICAgICAgICAgQWlyOjpJbnNlcnRp
b25TZXQgaW5zZXJ0aW9uU2V0KG1fY29kZSk7CkBAIC01NDYsNyArNTQ2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiBzY2FsZTsK
ICAgICB9Ci0gICAgCisKICAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBvcGVyYW5kIGludG8g
YW4gYWRkcmVzcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6
OklzTGVnYWxPZmZzZXQ8SW50Pj4KICAgICBBcmcgZWZmZWN0aXZlQWRkcihWYWx1ZSogYWRkcmVz
cywgSW50IG9mZnNldCwgV2lkdGggd2lkdGgpCkBAIC0yNTU5LDYgKzI1NTksNDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gUHJlLUluZGV4IENhbm9uaWNhbCBGb3JtOgorICAgICAgICAg
ICAgLy8gICAgIGFkZHJlc3MgPSBhZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gICAg
IG1lbW9yeSA9IGxvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBD
YW5vbmljYWwgRm9ybToKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBsb2FkKGJhc2UsIDAp
CisgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IGFkZChiYXNlLCBvZmZzZXQpCisgICAgICAg
ICAgICBhdXRvIHRyeUFwcGVuZEluY3JlbWVudEFkZHJlc3MgPSBbJl0gKCkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShNb3Zl
V2l0aEluY3JlbWVudDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1vcnktPnR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6UHJlSW5kZXgsIEFy
Zzo6VG1wKSB8fCAhbV9pbmRleCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gbV9ibG9jay0+YXQobV9pbmRleCAtIDEp
OworICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSAhPSBBZGQgfHwgYWRkcmVz
cy0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MtPmNoaWxkKDApICE9IG1lbW9yeS0+bGFzdENoaWxk
KCkgfHwgIWFkZHJlc3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IGFkZHJl
c3MtPmNoaWxkKDEpLT5hc0ludFB0cigpOworICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRU
eXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7
CisgICAgICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjppc1Zh
bGlkUG9zdEluZGV4Rm9ybShzbWFsbE9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgICAgIEFyZyBpbmNyZW1lbnRBcmcgPSBBcmcoKTsKKyAg
ICAgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoc21hbGxPZmZzZXQgPT0gbWVtb3J5LT5vZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluY3JlbWVudEFyZyA9IEFyZzo6cHJlSW5kZXgodG1wKGFkZHJlc3MpLCBzbWFsbE9m
ZnNldCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGluY3Jl
bWVudEFyZyA9IEFyZzo6cG9zdEluZGV4KHRtcChhZGRyZXNzKSwgc21hbGxPZmZzZXQpOworCisg
ICAgICAgICAgICAgICAgaWYgKGluY3JlbWVudEFyZykgeworICAgICAgICAgICAgICAgICAgICBh
cHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGFkZHJlc3MtPnR5cGUoKSksIHRtcChhZGRyZXNzLT5j
aGlsZCgwKSksIHRtcChhZGRyZXNzKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNv
ZGUsIGluY3JlbWVudEFyZywgdG1wKG1lbW9yeSkpOworICAgICAgICAgICAgICAgICAgICBtX2xv
Y2tlZC5hZGQoYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICBpZiAodHJ5QXBwZW5kSW5jcmVtZW50QWRkcmVzcygpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdCht
X3ZhbHVlLCBraW5kLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWVLZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
S2V5LmgKaW5kZXggYjMzNDk3YWEyZGNiNDg1ZmY1ZjExYTMwY2NkY2UyYmYxMGEyOGE2ZC4uNDZm
NDQwYzUyZmQ0ZTBjZTlkZjA5NjU5OGNkNWNjMDZmMzk5NTFhMSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZUtleS5oCkBAIC01Niw2ICs1Niw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCisgICAgVmFsdWVLZXkoVmFsdWUqIGNoaWxkLCBpbnQ2NF90IHZhbHVlKTsKKwogICAgIFZh
bHVlS2V5KEtpbmQsIFR5cGUsIFZhbHVlKiBjaGlsZCk7CiAKICAgICBWYWx1ZUtleShLaW5kLCBU
eXBlLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgKaW5kZXggMTQxNThkNTAxZjczZmNiZjcwZDc1NzNmODAw
ZWIyMGI2MmZiOWFhZi4uZTE4NjYxOTQ5MjYyMTQwNjZmZTg5ZTVjNzFiMmQwNzc4MDU0NzAxZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgKQEAgLTMz
LDYgKzMzLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCitpbmxpbmUg
VmFsdWVLZXk6OlZhbHVlS2V5KFZhbHVlKiBjaGlsZCwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICBt
X2tpbmQgPSBPb3BzOworICAgIG1fdHlwZSA9IFZvaWQ7CisgICAgdS5pbmRpY2VzWzBdID0gY2hp
bGQtPmluZGV4KCk7CisgICAgdS52YWx1ZSA9IHZhbHVlOworfQorCiBpbmxpbmUgVmFsdWVLZXk6
OlZhbHVlS2V5KEtpbmQga2luZCwgVHlwZSB0eXBlLCBWYWx1ZSogY2hpbGQpCiAgICAgOiBtX2tp
bmQoa2luZCkKICAgICAsIG1fdHlwZSh0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBcmcuY3BwCmluZGV4IDEwM2M2ZWNjYTNkMzE0YmI0ZWQ4YzAyYTRkMmYwMDljYTY0MWQwMDEu
Ljc3ZWU4NDI1MTI0YjlkOGI4YzU4MmYzOWZmOTY5ZjYwZmQxNmNjMDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKQEAgLTEzMCw2ICsxMzAsMTEgQEAgdW5zaWduZWQg
QXJnOjpqc0hhc2goKSBjb25zdAogICAgICAgICByZXN1bHQgKz0gbV9iYXNlLmludGVybmFsVmFs
dWUoKTsKICAgICAgICAgcmVzdWx0ICs9IG1faW5kZXguaW50ZXJuYWxWYWx1ZSgpOwogICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFByZUluZGV4OgorICAgIGNhc2UgUG9zdEluZGV4OgorICAgICAg
ICByZXN1bHQgKz0gbV9vZmZzZXQ7CisgICAgICAgIHJlc3VsdCArPSBtX2Jhc2UuaW50ZXJuYWxW
YWx1ZSgpOworICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YWNrOgogICAgICAgICByZXN1bHQg
Kz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2NhbGUpOwogICAgICAgICByZXN1bHQgKz0gc3Rh
Y2tTbG90KCktPmluZGV4KCk7CkBAIC0xNjEsNyArMTY2LDcgQEAgdm9pZCBBcmc6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50ZigiJDB4JWxseCIsIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4obV9vZmZzZXQpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgWmVyb1JlZzoKLSAgICAgICAgb3V0LnByaW50KCIlJXh6ciIpOworICAgICAgICBv
dXQucHJpbnQoIiV4enIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2ltcGxlQWRkcjoK
ICAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOwpAQCAtMTgwLDYgKzE4NSwxMiBA
QCB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICAgICAgb3V0
LnByaW50KCIsIiwgc2NhbGUoKSk7CiAgICAgICAgIG91dC5wcmludCgiKSIpOwogICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgp
LCAiLFByZSgkIiwgb2Zmc2V0KCksICIpKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQ
b3N0SW5kZXg6CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIixQb3N0KCQiLCBvZmZz
ZXQoKSwgIikpIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFN0YWNrOgogICAgICAgICBp
ZiAob2Zmc2V0KCkpCiAgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOwpAQCAtMjYxLDYg
KzI3MiwxMiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpLaW5k
IGtpbmQpCiAgICAgY2FzZSBBcmc6OkluZGV4OgogICAgICAgICBvdXQucHJpbnQoIkluZGV4Iik7
CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6UHJlSW5kZXg6CisgICAgICAgIG91dC5w
cmludCgiUHJlSW5kZXgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpQb3N0SW5k
ZXg6CisgICAgICAgIG91dC5wcmludCgiUG9zdEluZGV4Iik7CisgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEFyZzo6UmVsQ29uZDoKICAgICAgICAgb3V0LnByaW50KCJSZWxDb25kIik7CiAgICAg
ICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCmluZGV4IGNlNWE0
ZTczNzlhZDY0NDQ1ZjBjM2FiZDEyOWYzMjliOTQ3ZmU4MTIuLmUxZjY0NjZmMDMyMmFiODI4MGJk
NGViODhmNjFkOWZjOTQ3ZjdiY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
aApAQCAtNzcsNiArNzcsOCBAQCBwdWJsaWM6CiAgICAgICAgIFN0YWNrLAogICAgICAgICBDYWxs
QXJnLAogICAgICAgICBJbmRleCwKKyAgICAgICAgUHJlSW5kZXgsCisgICAgICAgIFBvc3RJbmRl
eCwKIAogICAgICAgICAvLyBJbW1lZGlhdGUgb3BlcmFuZHMgdGhhdCBjdXN0b21pemUgdGhlIGJl
aGF2aW9yIG9mIGFuIG9wZXJhdGlvbi4gWW91IGNhbiB0aGluayBvZiB0aGVtIGFzCiAgICAgICAg
IC8vIHNlY29uZGFyeSBvcGNvZGVzLiBUaGV5IGFyZSBhbHdheXMgIlVzZSInZC4KQEAgLTY0OSw2
ICs2NTEsMzAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQXJnOjppbmRleChiYXNlLCBpbmRl
eCwgc2NhbGUsIDApOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludCwgdHlwZW5h
bWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRpYyBBcmcgcHJlSW5kZXgo
QWlyOjpUbXAgYmFzZSwgSW50IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNH
UCgpKTsKKyAgICAgICAgQVNTRVJUKGlzSW50OShpbmRleCkpOworICAgICAgICBBcmcgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9raW5kID0gUHJlSW5kZXg7CisgICAgICAgIHJlc3VsdC5tX2Jh
c2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBpbmRleDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1l
ID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgQXJnIHBvc3RJbmRleChB
aXI6OlRtcCBiYXNlLCBJbnQgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQ
KCkpOworICAgICAgICBBU1NFUlQoaXNJbnQ5KGluZGV4KSk7CisgICAgICAgIEFyZyByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQb3N0SW5kZXg7CisgICAgICAgIHJlc3VsdC5tX2Jh
c2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBpbmRleDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogICAgIHsKICAgICAgICAgQXJnIHJl
c3VsdDsKQEAgLTc5OSw2ICs4MjUsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgp
ID09IEluZGV4OwogICAgIH0KIAorICAgIGJvb2wgaXNQcmVJbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4ga2luZCgpID09IFByZUluZGV4OworICAgIH0KKworICAgIGJvb2wgaXNQ
b3N0SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBQb3N0SW5k
ZXg7CisgICAgfQorCiAgICAgYm9vbCBpc01lbW9yeSgpIGNvbnN0CiAgICAgewogICAgICAgICBz
d2l0Y2ggKGtpbmQoKSkgewpAQCAtODA4LDYgKzg0NCw4IEBAIHB1YmxpYzoKICAgICAgICAgY2Fz
ZSBTdGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBjYXNlIEluZGV4OgorICAg
ICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtOTcyLDcgKzEwMTAsNyBAQCBwdWJsaWM6CiAKICAgICBBaXI6OlRtcCBiYXNlKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2ltcGxlQWRkciB8fCBraW5kKCkg
PT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBJbmRl
eCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2ltcGxlQWRkciB8fCBraW5kKCkgPT0gQWRk
ciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQoKSA9PSBJbmRleCB8fCBr
aW5kKCkgPT0gUHJlSW5kZXggfHwga2luZCgpID09IFBvc3RJbmRleCk7CiAgICAgICAgIHJldHVy
biBtX2Jhc2U7CiAgICAgfQogCkBAIC05ODIsNyArMTAyMCw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIGlmIChraW5kKCkgPT0gU3RhY2spCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG1fc2NhbGUpOwotICAgICAgICBBU1NFUlQoa2luZCgpID09
IEFkZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gQ2FsbEFy
ZyB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwg
a2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gQ2FsbEFyZyB8fCBraW5k
KCkgPT0gSW5kZXggfHwga2luZCgpID09IFByZUluZGV4IHx8IGtpbmQoKSA9PSBQb3N0SW5kZXgp
OwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG1fb2Zmc2V0
KTsKICAgICB9CiAKQEAgLTEwNDQsNiArMTA4Miw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBB
ZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKICAgICAgICAgY2FzZSBJbmRl
eDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAg
ICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBSZWxD
b25kOgpAQCAtMTA4MSw2ICsxMTIxLDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEFkZHI6CiAg
ICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgogICAgICAgICBjYXNlIEluZGV4OgorICAg
ICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgY2Fz
ZSBTdGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBjYXNlIEJpZ0ltbTogLy8g
WWVzLCB3ZSBhbGxvdyBCaWdJbW0gYXMgYSBkb3VibGUgaW1tZWRpYXRlLiBXZSB1c2UgdGhpcyBm
b3IgaW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KQEAgLTEyMzcsNiArMTI3OSwyMiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
bnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgYm9v
bCBpc1ZhbGlkUHJlSW5kZXhGb3JtKEludCBvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoaXNB
Uk02NCgpKQorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRTaWduZWRJbW05KG9mZnNldCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQs
IHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgYm9vbCBp
c1ZhbGlkUG9zdEluZGV4Rm9ybShJbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKGlzQVJN
NjQoKSkKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkU2lnbmVkSW1tOShvZmZzZXQpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgLy8gSWYgeW91IGRvbid0IHBhc3MgYSB3
aWR0aCB0aGVuIHRoaXMgb3B0aW1pc3RpY2FsbHkgYXNzdW1lcyB0aGF0IHlvdSdyZSB1c2luZyB0
aGUgcmlnaHQgd2lkdGguIEJ1dAogICAgIC8vIHRoZSB3aWR0aCBpcyByZWxldmFudCB0byB2YWxp
ZGl0eSwgc28gcGFzc2luZyBhIG51bGwgd2lkdGggaXMgb25seSB1c2VmdWwgZm9yIGFzc2VydGlv
bnMuIERvbid0CiAgICAgLy8gcGFzcyBudWxsIHdpZHRocyB3aGVuIGNhc2NhZGluZyB0aHJvdWdo
IEFyZ3MgaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIQpAQCAtMTI2NSw2ICsxMzIzLDEwIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkQWRkckZvcm0ob2Zmc2V0KCksIHdp
ZHRoKTsKICAgICAgICAgY2FzZSBJbmRleDoKICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkSW5k
ZXhGb3JtKHNjYWxlKCksIG9mZnNldCgpLCB3aWR0aCk7CisgICAgICAgIGNhc2UgUHJlSW5kZXg6
CisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFByZUluZGV4Rm9ybShvZmZzZXQoKSk7CisgICAg
ICAgIGNhc2UgUG9zdEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRQb3N0SW5kZXhG
b3JtKG9mZnNldCgpKTsKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIFJlc0Nv
bmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKQEAgLTEyODQsNiArMTM0Niw4IEBAIHB1Ymxp
YzoKICAgICAgICAgY2FzZSBTaW1wbGVBZGRyOgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAg
IGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAg
ICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEluZGV4OgpAQCAtMTMyOCw2ICsxMzkyLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CiAgICAgICAgICAgICBmdW5j
dG9yKG1fYmFzZSwgVXNlLCBHUCwgYXJnUm9sZSA9PSBVc2VBZGRyID8gYXJnV2lkdGggOiBwb2lu
dGVyV2lkdGgoKSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQcmVJbmRleDoK
KyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNl
RGVmLCBHUCwgYXJnUm9sZSA9PSBVc2VBZGRyID8gYXJnV2lkdGggOiBwb2ludGVyV2lkdGgoKSk7
CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmRleDoKICAgICAgICAgICAgIGZ1
bmN0b3IobV9iYXNlLCBVc2UsIEdQLCBhcmdSb2xlID09IFVzZUFkZHIgPyBhcmdXaWR0aCA6IHBv
aW50ZXJXaWR0aCgpKTsKICAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCwgVXNlLCBHUCwgYXJn
Um9sZSA9PSBVc2VBZGRyID8gYXJnV2lkdGggOiBwb2ludGVyV2lkdGgoKSk7CkBAIC0xMzgzLDYg
KzE0NTEsMTggQEAgcHVibGljOgogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNl
dFR5cGU+KG1fb2Zmc2V0KSwgbV9leHRlbmQpOwogICAgIH0KIAorICAgIE1hY3JvQXNzZW1ibGVy
OjpQcmVJbmRleEFkZHJlc3MgYXNQcmVJbmRleEFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzUHJlSW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6
UHJlSW5kZXhBZGRyZXNzKG1fYmFzZS5ncHIoKSwgb2Zmc2V0KCkpOworICAgIH0KKworICAgIE1h
Y3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzIGFzUG9zdEluZGV4QWRkcmVzcygpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaXNQb3N0SW5kZXgoKSk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIG9mZnNldCgpKTsK
KyAgICB9CisKICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBhc1JlbGF0
aW9uYWxDb25kaXRpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzUmVsQ29uZCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9w
Y29kZXMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCmlu
ZGV4IDY2MWVhZGQyMzczYzU0YTRiYmE5NDdhNTRiZGEyNTU3YmRiOGFlNGEuLjQ5ZmVkMWFhYTE5
YWY2ZGRjZDkyYzMzOWY3MGI1NzZkMGQzOTVkZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwpAQCAtNjYxLDYgKzY2MSwxMiBAQCB4ODZfNjQ6
IFN3YXA2NCBVRDpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKICAgICBUbXAsIEFkZHIKIAor
YXJtNjQ6IE1vdmVXaXRoSW5jcmVtZW50NjQgVUQ6Rzo2NCwgRDpHOjY0CisgICAgUHJlSW5kZXgs
IFRtcCBhcyBsb2FkNjQKKyAgICBQb3N0SW5kZXgsIFRtcCBhcyBsb2FkNjQKKyAgICBUbXAsIFBy
ZUluZGV4IGFzIHN0b3JlNjQKKyAgICBUbXAsIFBvc3RJbmRleCBhcyBzdG9yZTY0CisKIE1vdmUz
MiBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCBhcyB6ZXJvRXh0ZW5kMzJUb1dvcmQKICAg
ICBBZGRyLCBUbXAgYXMgbG9hZDMyCkBAIC02NzEsNiArNjc3LDEyIEBAIE1vdmUzMiBVOkc6MzIs
IFpEOkc6MzIKICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZTMyCiAgICAgeDg2OiBJbW0sIElu
ZGV4IGFzIHN0b3JlMzIKIAorYXJtNjQ6IE1vdmVXaXRoSW5jcmVtZW50MzIgVUQ6RzozMiwgWkQ6
RzozMgorICAgIFByZUluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgUG9zdEluZGV4LCBUbXAgYXMg
bG9hZDMyCisgICAgVG1wLCBQcmVJbmRleCBhcyBzdG9yZTMyCisgICAgVG1wLCBQb3N0SW5kZXgg
YXMgc3RvcmUzMgorCiAjIFRoaXMgaXMgZm9yIG1vdmluZyBiZXR3ZWVuIHNwaWxsIHNsb3RzLgog
TW92ZTMyIFU6RzozMiwgWkQ6RzozMiwgUzpHOjMyCiAgICAgQWRkciwgQWRkciwgVG1wCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKaW5kZXgg
Mzc0MGVmZGJkZDE0NmEzN2Y2ZWRlOWRkYmMyM2RkYmEwM2IwNzY0Ni4uZjFiZjFhNDZjZmM4ODll
YzE5MzQ2ZjJjMDZiN2NmNTBmOWUzZGUwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgpAQCAtMjI5LDcgKzIyOSw3IEBAIGRlZiBpc0dG
KHRva2VuKQogZW5kCiAKIGRlZiBpc0tpbmQodG9rZW4pCi0gICAgdG9rZW4gPX4gL1xBKChUbXAp
fChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KFplcm9SZWcpfChTaW1wbGVBZGRy
KXwoQWRkcil8KEV4dGVuZGVkT2Zmc2V0QWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQp
fChEb3VibGVDb25kKXwoU3RhdHVzQ29uZCkpXFovCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJ
bW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KFplcm9SZWcpfChTaW1wbGVBZGRyKXwo
QWRkcil8KEV4dGVuZGVkT2Zmc2V0QWRkcil8KEluZGV4KXwoUHJlSW5kZXgpfChQb3N0SW5kZXgp
fChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KIGVuZAog
CiBkZWYgaXNBcmNoKHRva2VuKQpAQCAtMzAzLDcgKzMwMyw3IEBAIGNsYXNzIFBhcnNlcgogCiAg
ICAgZGVmIGNvbnN1bWVLaW5kCiAgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwotICAgICAg
ICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02
NCwgWmVyb1JlZywgVG1wLCBTaW1wbGVBZGRyLCBBZGRyLCBFeHRlbmRlZE9mZnNldEFkZHIsIElu
ZGV4LCBSZWxDb25kLCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVubGVz
cyBpc0tpbmQocmVzdWx0KQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0s
IEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgWmVyb1JlZywgVG1wLCBTaW1wbGVBZGRyLCBBZGRy
LCBFeHRlbmRlZE9mZnNldEFkZHIsIEluZGV4LCBQcmVJbmRleCwgUG9zdEluZGV4LCBSZWxDb25k
LCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVz
dWx0KQogICAgICAgICBhZHZhbmNlCiAgICAgICAgIHJlc3VsdAogICAgIGVuZApAQCAtOTI5LDYg
KzkyOSwxMiBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICB3
aGVuICJJbmRleCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNW
YWxpZEluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5zY2FsZSgpLCBhcmdzWyN7aW5kZXh9XS5vZmZz
ZXQoKSwgI3thcmcud2lkdGhDb2RlfSkpIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
Ik9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIHdoZW4gIlByZUluZGV4Igor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkUHJlSW5kZXhG
b3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgd2hlbiAiUG9zdElu
ZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkUG9z
dEluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSkpIgorICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgogICAgICAgICAgICAgICAgIHdoZW4g
IkJpZ0ltbSIKICAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAg
IHdoZW4gIlJlc0NvbmQiCkBAIC0xMjM1LDYgKzEyNDEsMTAgQEAgd3JpdGVIKCJPcGNvZGVHZW5l
cmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1d
LmFzQWRkcmVzcygpIgogICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4IgogICAgICAgICAgICAg
ICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAg
ICAgICAgICAgIHdoZW4gIlByZUluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50
ICJhcmdzWyN7aW5kZXh9XS5hc1ByZUluZGV4QWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdo
ZW4gIlBvc3RJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2lu
ZGV4fV0uYXNQb3N0SW5kZXhBZGRyZXNzKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29u
ZCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZWxh
dGlvbmFsQ29uZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCBjNzAzMmVjMDg0ZGRmZGQ5MzVlNTUyN2ZhYWU5MzU2
ODE5ODQ4MTc5Li43MjFlYjNhZGQ2Mjc0OGUyZmIwMmRkZjQyNTU3Y2M1OWQ1ZDg4MGViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0xMTQwLDQgKzExNDAsOSBAQCB2b2lkIGFkZENv
cHlUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQo
KT4+PiYpOwogCiBib29sIHNob3VsZFJ1bihjb25zdCBjaGFyKiBmaWx0ZXIsIGNvbnN0IGNoYXIq
IHRlc3ROYW1lKTsKIAordm9pZCB0ZXN0TG9hZFByZUluZGV4MzIoKTsKK3ZvaWQgdGVzdExvYWRQ
cmVJbmRleDY0KCk7Cit2b2lkIHRlc3RMb2FkUG9zdEluZGV4MzIoKTsKK3ZvaWQgdGVzdExvYWRQ
b3N0SW5kZXg2NCgpOworCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzXzMuY3BwCmluZGV4IDRjNTJhZGE5Y2M0MDJkZGU1Mzk4OGNjOGYyZjVlOWUw
ZGRlMmUxMWMuLmI4OWIwMTlmZDhiZjVmMDcxMmY0NjY4NjUwZjYxY2RmODFkYTRjODMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcApAQCAtMjgsNiArMjgsMzAwIEBACiAKICNp
ZiBFTkFCTEUoQjNfSklUKQogCisKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCkKK3sKKyAgICBp
ZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9Owor
ICAgIGludDMyX3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0
ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBW
YXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50MzIpOworICAgIFZhcmlhYmxlKiBwID0g
cHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IFJvb3RfQmxvY2sKKyAgICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpCisgICAg
Ly8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJv
b3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgMCk7CisgICAgcm9v
dC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCBy
MSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5l
dzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRl
ZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3Bf
VGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0g
UGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29w
VGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBy
KTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHBy
b2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BU
ZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwg
RnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAg
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcDMgPSBw
MiArIDEKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gcjMgPSByMiArIGxvYWQocDMp
CisgICAgLy8gVXBzaWxvbihyMywgXnIyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiBw
MyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBs
b29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQpKTsKKyAg
ICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdp
bigpLCBwLCBwMyk7CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwgcDMpKTsKKyAgICBsb29wQm9keS0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMyk7CisgICAg
bG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJl
cXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUtPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7CisKKyAgICBw
cm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NB
KHByb2MpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgaWYgKGlz
QVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICIjNF0hIik7CisK
KyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50MzJfdCB7CisgICAgICAgIGludDMyX3QgciA9
IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9ICorK3B0cjsKKyAg
ICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGludm9rZTxpbnQzMl90Pigq
Y29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKwordm9pZCB0
ZXN0TG9hZFByZUluZGV4NjQoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZl
bCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIs
IDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50NjRfdCogcHRyID0gbnVtczsKKwor
ICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9u
ZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJs
ZShJbnQ2NCk7CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKwor
ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAor
ICAgIC8vIFVwc2lsb24ocjEsIF5yMikKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9u
KHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywg
T3JpZ2luKCksIEludDY0LCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpT
ZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAg
ICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdv
dG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOwor
ICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVF
cXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1
ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBM
b29wX0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocDMsIF5w
MikKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMykKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisg
ICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgOCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFi
bGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBWYWx1ZSogcjMg
PSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9v
cEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigp
LCBwMykpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6
OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKwor
ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6Cisg
ICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIHIyKTsKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAg
ICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJ
bnN0cnVjdGlvbigqY29kZSwgIiM4XSEiKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBp
bnQ2NF90IHsKKyAgICAgICAgaW50NjRfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkK
KyAgICAgICAgICAgIHIgKz0gKisrcHRyOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KHB0cikpLCB0ZXN0KCkpOworfQorCit2b2lkIHRlc3RMb2FkUG9zdEluZGV4MzIoKQoreworICAg
IGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07
CisgICAgaW50MzJfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRl
c3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
IFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQzMik7CisgICAgVmFyaWFibGUqIHAg
PSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikKKyAg
ICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0g
cm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCAwKTsKKyAgICBy
b290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIs
IHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAg
cm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9v
cF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIg
PSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxv
b3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCks
IHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVz
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9v
cFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25k
LCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisg
ICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyByMyA9
IHIyICsgbG9hZChwMikKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocjMsIF5y
MikKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUq
IHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIs
IGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBPcmln
aW4oKSwgcDIpKTsKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KHByb2MsIE9yaWdpbigpLCA0KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAg
ICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBG
cmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsKKworICAg
IHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhT
U0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAo
aXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM0Iik7
CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50MzJfdCB7CisgICAgICAgIGludDMyX3Qg
ciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9ICpwdHIrKzsK
KyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGludm9rZTxpbnQzMl90
PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKwordm9p
ZCB0ZXN0TG9hZFBvc3RJbmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0
TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVtc1tdID0geyAx
LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDY0X3QqIHB0ciA9IG51bXM7
CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAg
IEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sq
IGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFy
aWFibGUoSW50NjQpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7
CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAgICAvLyByMSA9
IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpCisgICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBz
aWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHBy
b2MsIE9yaWdpbigpLCBJbnQ2NCwgMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFs
dWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBC
Mzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAg
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6
CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAx
MCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxl
VmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29w
VGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBw
KTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFi
b3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBG
cmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcjMgPSByMiArIGxvYWQocDIpCisgICAgLy8gcDMg
PSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gVXBzaWxvbihwMywgXnAy
KQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksIHAyKSk7CisgICAgVmFsdWUqIHAz
ID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxv
b3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCkpOworICAg
IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2lu
KCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2Ms
IEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7
CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25l
OgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLCByMik7CisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7
CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NBKHByb2MpOworCisgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tV
c2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJdLCAjOCIpOworCisgICAgYXV0byB0ZXN0ID0gWyZdICgp
IC0+IGludDY0X3QgeworICAgICAgICBpbnQ2NF90IHIgPSAwOworICAgICAgICB3aGlsZSAociA8
IDEwKQorICAgICAgICAgICAgciArPSAqcHRyKys7CisgICAgICAgIHJldHVybiByOworICAgIH07
CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50NjRfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKKwogdm9pZCB0ZXN0SW5zZXJ0U2lnbmVkQml0Zmll
bGRJblplcm8zMigpCiB7CiAgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwo
KSA8IDIpCkBAIC0zNjk3LDYgKzM5OTEsMTEgQEAgdm9pZCBhZGRTaHJUZXN0cyhjb25zdCBjaGFy
KiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiAgICAg
UlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMCkpOwogICAgIFJVTih0ZXN0WlNockFy
Z0ltbTMyKDB4ZmZmZmZmZmYsIDEpKTsKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZm
ZmZmLCA2MykpOworCisgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXgzMigpKTsKKyAgICBSVU4odGVz
dExvYWRQcmVJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDMyKCkpOworICAg
IFJVTih0ZXN0TG9hZFBvc3RJbmRleDY0KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
Y3BwCmluZGV4IDYzZTI2Njc4ODUyMDE4YTc2ODBjYTVmMDcxNDY5NjgxMDU4ODRiM2IuLjY5YmI2
YjJiZTgxODcwYjU5ODMzMzY3YWYyNjc1YjdmNGVmMDU2ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcApAQCAtMjMzLDggKzIzMyw4
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gaml0V3JpdGVUaHVua0dlbmVyYXRvCiAgICAgaml0LnJldCgpOwogCiAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIGxvY2FsMCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5sb2FkNjQoeDEs
IFBvc3RJbmRleCg4KSwgeDYpOwotICAgIGppdC5zdG9yZTY0KHg2LCB4MywgUG9zdEluZGV4KDgp
KTsKKyAgICBqaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzKHgxLCA4
KSwgeDYpOworICAgIGppdC5zdG9yZTY0KHg2LCBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRk
cmVzcyh4MywgOCkpOwogICAgIHNtYWxsQ29weS5saW5rKCZqaXQpOwogICAgIGppdC5icmFuY2hT
dWI2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgyKS5s
aW5rVG8obG9jYWwwLCAmaml0KTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsb2NhbDIgPSBq
aXQuYnJhbmNoQWRkNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgy
KTsK
</data>
<flag name="commit-queue"
          id="457157"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434641</attachid>
            <date>2021-07-30 10:01:23 -0700</date>
            <delta_ts>2021-08-06 21:41:28 -0700</delta_ts>
            <desc>Patch for fixing the layout test failure</desc>
            <filename>bug-228047-20210730120122.patch</filename>
            <type>text/plain</type>
            <size>61635</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
OWZmZWNhOTY5ZTk5MDhlZDhhZjU5OGUxZTc3YTU5MjIzZDViNGVkLi5iYTg0OGNlOWE0OTBiYjJi
ODNmZGExYWE1OTk2YjQ5ODA5Y2M0YzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNzUgQEAKKzIwMjEtMDctMzAgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBQcmUvUG9zdC1JbmRleGVkIEFkZHJlc3MgTW9kZSB0byBBaXIg
Zm9yIEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjgwNDcKKworICAgICAgICBSZXZpZXdlZCBieSBQaGlsIFBpemxvLgorCisgICAgICAgIFBy
ZS1pbmRleGVkIGFkZHJlc3NpbmcgbWVhbnMgdGhhdCB0aGUgYWRkcmVzcyBpcyB0aGUgc3VtIG9m
IHRoZSB2YWx1ZSBpbiB0aGUgNjQtYml0IGJhc2UgcmVnaXN0ZXIgCisgICAgICAgIGFuZCBhbiBv
ZmZzZXQsIGFuZCB0aGUgYWRkcmVzcyBpcyB0aGVuIHdyaXR0ZW4gYmFjayB0byB0aGUgYmFzZSBy
ZWdpc3Rlci4gQW5kIHBvc3QtaW5kZXhlZCAKKyAgICAgICAgYWRkcmVzc2luZyBtZWFucyB0aGF0
IHRoZSBhZGRyZXNzIGlzIHRoZSB2YWx1ZSBpbiB0aGUgNjQtYml0IGJhc2UgcmVnaXN0ZXIsIGFu
ZCB0aGUgc3VtIG9mIHRoZSAKKyAgICAgICAgYWRkcmVzcyBhbmQgdGhlIG9mZnNldCBpcyB0aGVu
IHdyaXR0ZW4gYmFjayB0byB0aGUgYmFzZSByZWdpc3Rlci4gVGhleSBhcmUgcmVsYXRpdmVseSBj
b21tb24gZm9yIAorICAgICAgICBsb29wcyB0byBpdGVyYXRlIG92ZXIgYW4gYXJyYXkgYnkgaW5j
cmVhc2luZy9kZWNyZWFzaW5nIGEgcG9pbnRlciBpbnRvIHRoZSBhcnJheSBhdCBlYWNoIGl0ZXJh
dGlvbi4gCisgICAgICAgIFdpdGggc3VjaCBhbiBhZGRyZXNzaW5nIG1vZGUsIHRoZSBpbnN0cnVj
dGlvbiBzZWxlY3RvciBjYW4gbWVyZ2UgdGhlIGluY3JlbWVudCBhbmQgYWNjZXNzIHRoZSBhcnJh
eS4KKworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAg
ICAgICMjIFByZS1JbmRleCBBZGRyZXNzIE1vZGUgRm9yIExvYWQgIyMKKyAgICAgICAgIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgIExEUiBXdCwgW1huLCAj
aW1tXSEKKworICAgICAgICBJbiBCMyBSZWR1Y3Rpb24gU3RyZW5ndGgsIHNpbmNlIHdlIGhhdmUg
dGhpcyByZWR1Y3Rpb24gcnVsZToKKyAgICAgICAgICAgIFR1cm4gdGhpczogTG9hZChBZGQoYWRk
cmVzcywgb2Zmc2V0MSksIG9mZnNldCA9IG9mZnNldDIpCisgICAgICAgICAgICBJbnRvIHRoaXM6
IExvYWQoYWRkcmVzcywgb2Zmc2V0ID0gb2Zmc2V0MSArIG9mZnNldDIpCisKKyAgICAgICAgVGhl
biwgdGhlIGVxdWl2YWxlbnQgcGF0dGVybiBpczoKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQo
YmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBtZW1vcnkgPSBMb2Fk
KGJhc2UsIG9mZnNldCkKKworICAgICAgICBGaXJzdCwgd2UgY29udmVydCBpdCB0byB0aGUgY2Fu
b25pY2FsIGZvcm06CisgICAgICAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAg
ICAgICAgICAgIG5ld01lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KSAvLyBtb3ZlIG1lbW9yeSBq
dXN0IGFmdGVyIGFkZHJlc3MKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgbWVtb3J5ID0g
SWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIE5leHQsIGxvd2VyIHRvIEFpcjoKKyAgICAg
ICAgICAgIE1vdmUgJWJhc2UsICVhZGRyZXNzCisgICAgICAgICAgICBNb3ZlICglYWRkcmVzcywg
cHJlZml4KG9mZnNldCkpLCAlbWVtb3J5CisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyMgUG9zdC1JbmRleCBBZGRyZXNzIE1vZGUgRm9y
IExvYWQgIyMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
KworICAgICAgICBMRFIgV3QsIFtYbl0sICNpbW0KKworICAgICAgICBUaGVuLCB0aGUgZXF1aXZh
bGVudCBwYXR0ZXJuIGlzOgorICAgICAgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQp
CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0
KQorCisgICAgICAgIEZpcnN0LCB3ZSBjb252ZXJ0IGl0IHRvIHRoZSBjYW5vbmljYWwgZm9ybToK
KyAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50CisgICAgICAgICAgICBuZXdBZGRyZXNz
ID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkg
Ly8gbW92ZSB0aGUgdmFsdWVzIGp1c3QgYmVmb3JlIG1lbW9yeQorICAgICAgICAgICAgLi4uCisg
ICAgICAgICAgICBvZmZzZXQgPSBJZGVudGl0eShuZXdPZmZzZXQpCisgICAgICAgICAgICBhZGRy
ZXNzID0gSWRlbnRpdHkobmV3QWRkcmVzcykKKworICAgICAgICBOZXh0LCBsb3dlciB0byBBaXI6
CisgICAgICAgICAgICBNb3ZlICViYXNlLCAlYWRkcmVzcworICAgICAgICAgICAgTW92ZSAoJWFk
ZHJlc3MsIHBvc3RmaXgob2Zmc2V0KSksICVtZW1vcnkKKworICAgICAgICAjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIyBQYXR0ZXJuIE1hdGNoIEFsZ29yaXRobSAjIwor
ICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgIFRvIGRldGVj
dCB0aGUgcGF0dGVybiBmb3IgcHJlZml4L3Bvc3RmaXggaW5jcmVtZW50IGFkZHJlc3MgaXMgdHJp
Y2t5IGR1ZSB0byB0aGUgc3RydWN0dXJlIGluIEIzIElSLiBUaGUgCisgICAgICAgIGFsZ29yaXRo
bSB1c2VkIGluIHRoaXMgcGF0Y2ggaXMgdG8gY29sbGVjdCB0aGUgZmlyc3QgdmFsaWQgdmFsdWVz
IChhZGQvbG9hZCksIHRoZW4gc2VhcmNoIGZvciBhbnkgCisgICAgICAgIHBhaXJlZCB2YWx1ZSAo
bG9hZC9hZGQpIHRvIG1hdGNoIGFsbCBvZiB0aGVtLiBJbiB3b3JzdCBjYXNlLCB0aGUgcnVudGlt
ZSBjb21wbGV4aXR5IGlzIE8obl4yKSAKKyAgICAgICAgd2hlbiBuIGlzIHRoZSBudW1iZXIgb2Yg
YWxsIHZhbHVlcy4KKworICAgICAgICBBZnRlciBjb2xsZWN0aW5nIHR3byBzZXRzIG9mIGNhbmRp
ZGF0ZXMsIHdlIG1hdGNoIHRoZSBwcmVmaXggaW5jcmVtZW50YWwgYWRkcmVzcyBmaXJzdCBzaW5j
ZSBpdCBzZWVtcyAKKyAgICAgICAgbW9yZSBiZW5lZmljaWFsIHRvIHRoZSBjb21waWxlciAoc2hv
d24gaW4gdGhlIG5leHQgc2VjdGlvbikuIEFuZCB0aGVuLCBnbyBmb3IgdGhlIHBvc3RmaXggb25l
LgorCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMKKyAgICAgICAgIyMgVGVzdCBmb3IgUHJlL1Bvc3QtSW5jcmVtZW50IEFkZHJlc3MgTW9kZSAj
IworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
CisKKyAgICAgICAgR2l2ZW4gTG9vcCB3aXRoIFByZS1JbmNyZW1lbnQ6CisgICAgICAgIGludDY0
X3QgbGRyX3ByZShpbnQ2NF90ICpwKSB7CisgICAgICAgICAgICBpbnQ2NF90IHJlcyA9IDA7Cisg
ICAgICAgICAgICB3aGlsZSAocmVzIDwgMTApCisgICAgICAgICAgICAgICAgcmVzICs9ICorK3A7
CisgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CisKKyAgICAgICAgQjMgSVI6Cisg
ICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgICAgICBCQiMwOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgICAgICBJ
bnQ2NCBiQDAgPSBDb25zdDY0KDApCisgICAgICAgICAgICBJbnQ2NCBiQDIgPSBBcmd1bWVudFJl
ZygleDApCisgICAgICAgICAgICBWb2lkIGJAMjAgPSBVcHNpbG9uKCQwKGJAMCksIF4xOCwgV3Jp
dGVzTG9jYWxTdGF0ZSkKKyAgICAgICAgICAgIFZvaWQgYkAyMSA9IFVwc2lsb24oYkAyLCBeMTks
IFdyaXRlc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBWb2lkIGJANCA9IEp1bXAoVGVybWluYWwp
CisgICAgICAgIFN1Y2Nlc3NvcnM6ICMxCisgICAgICAgIEJCIzE6IDsgZnJlcXVlbmN5ID0gMS4w
MDAwMDAKKyAgICAgICAgUHJlZGVjZXNzb3JzOiAjMCwgIzIKKyAgICAgICAgICAgIEludDY0IGJA
MTggPSBQaGkoUmVhZHNMb2NhbFN0YXRlKQorICAgICAgICAgICAgSW50NjQgYkAxOSA9IFBoaShS
ZWFkc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBJbnQ2NCBiQDcgPSBDb25zdDY0KDEwKQorICAg
ICAgICAgICAgSW50MzIgYkA4ID0gQWJvdmVFcXVhbChiQDE4LCAkMTAoYkA3KSkKKyAgICAgICAg
ICAgIFZvaWQgYkA5ID0gQnJhbmNoKGJAOCwgVGVybWluYWwpCisgICAgICAgIFN1Y2Nlc3NvcnM6
IFRoZW46IzMsIEVsc2U6IzIKKyAgICAgICAgQkIjMjogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAor
ICAgICAgICBQcmVkZWNlc3NvcnM6ICMxCisgICAgICAgICAgICBJbnQ2NCBiQDEwID0gQ29uc3Q2
NCg4KQorICAgICAgICAgICAgSW50NjQgYkAxMSA9IEFkZChiQDE5LCAkOChiQDEwKSkKKyAgICAg
ICAgICAgIEludDY0IGJAMTMgPSBMb2FkKGJAMTEsIENvbnRyb2xEZXBlbmRlbnR8UmVhZHM6VG9w
KQorICAgICAgICAgICAgSW50NjQgYkAxNCA9IEFkZChiQDE4LCBiQDEzKQorICAgICAgICAgICAg
Vm9pZCBiQDIyID0gVXBzaWxvbihiQDE0LCBeMTgsIFdyaXRlc0xvY2FsU3RhdGUpCisgICAgICAg
ICAgICBWb2lkIGJAMjMgPSBVcHNpbG9uKGJAMTEsIF4xOSwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAg
ICAgICAgICAgIFZvaWQgYkAxNiA9IEp1bXAoVGVybWluYWwpCisgICAgICAgIFN1Y2Nlc3NvcnM6
ICMxCisgICAgICAgIEJCIzM6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVj
ZXNzb3JzOiAjMQorICAgICAgICAgICAgVm9pZCBiQDE3ID0gUmV0dXJuKGJAMTgsIFRlcm1pbmFs
KQorICAgICAgICBWYXJpYWJsZXM6CisgICAgICAgICAgICBJbnQ2NCB2YXIwCisgICAgICAgICAg
ICBJbnQ2NCB2YXIxCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcvTyBQcmUtSW5jcmVtZW50IEFkZHJlc3Mg
TW9kZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICAgICAgIC4uLgorICAgICAgICBCQiMyOiA7IGZyZXF1ZW5jeSA9IDEu
MDAwMDAwCisgICAgICAgIFByZWRlY2Vzc29yczogIzEKKyAgICAgICAgICAgIE1vdmUgJDgsICV4
MywgJDgoYkAxMikKKyAgICAgICAgICAgIEFkZDY0ICQ4LCAleDAsICV4MSwgYkAxMQorICAgICAg
ICAgICAgTW92ZSAoJXgwLCV4MyksICV4MCwgYkAxMworICAgICAgICAgICAgQWRkNjQgJXgwLCAl
eDIsICV4MiwgYkAxNAorICAgICAgICAgICAgTW92ZSAleDEsICV4MCwgYkAyMworICAgICAgICAg
ICAgSnVtcCBiQDE2CisgICAgICAgIFN1Y2Nlc3NvcnM6ICMxCisgICAgICAgIC4uLgorICAgICAg
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworICAgICAgICBXLyBQcmUtSW5jcmVtZW50IEFkZHJlc3MgTW9kZToKKyAgICAgICAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAg
IC4uLgorICAgICAgICBCQiMyOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRl
Y2Vzc29yczogIzEKKyAgICAgICAgICAgIE1vdmVXaXRoSW5jcmVtZW50NjQgKCV4MCxQcmUoJDgp
KSwgJXgyLCBiQDEzCisgICAgICAgICAgICBBZGQ2NCAleDIsICV4MSwgJXgxLCBiQDE0CisgICAg
ICAgICAgICBKdW1wIGJAMTYKKyAgICAgICAgU3VjY2Vzc29yczogIzEKKyAgICAgICAgLi4uCisg
ICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCisgICAgICAgIEdpdmVuIExvb3Agd2l0aCBQb3N0LUluY3JlbWVudDoKKyAgICAgICAg
aW50NjRfdCBsZHJfcHJlKGludDY0X3QgKnApIHsKKyAgICAgICAgICAgIGludDY0X3QgcmVzID0g
MDsKKyAgICAgICAgICAgIHdoaWxlIChyZXMgPCAxMCkKKyAgICAgICAgICAgICAgICByZXMgKz0g
KnArKzsKKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KKworICAgICAgICBCMyBJ
UjoKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgICAgIEJCIzA6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAg
ICAgIEludDY0IGJAMCA9IENvbnN0NjQoMCkKKyAgICAgICAgICAgIEludDY0IGJAMiA9IEFyZ3Vt
ZW50UmVnKCV4MCkKKyAgICAgICAgICAgIFZvaWQgYkAyMCA9IFVwc2lsb24oJDAoYkAwKSwgXjE4
LCBXcml0ZXNMb2NhbFN0YXRlKQorICAgICAgICAgICAgVm9pZCBiQDIxID0gVXBzaWxvbihiQDIs
IF4xOSwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAgICAgICAgIFZvaWQgYkA0ID0gSnVtcChUZXJt
aW5hbCkKKyAgICAgICAgU3VjY2Vzc29yczogIzEKKyAgICAgICAgQkIjMTogOyBmcmVxdWVuY3kg
PSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNlc3NvcnM6ICMwLCAjMgorICAgICAgICAgICAgSW50
NjQgYkAxOCA9IFBoaShSZWFkc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBJbnQ2NCBiQDE5ID0g
UGhpKFJlYWRzTG9jYWxTdGF0ZSkKKyAgICAgICAgICAgIEludDY0IGJANyA9IENvbnN0NjQoMTAp
CisgICAgICAgICAgICBJbnQzMiBiQDggPSBBYm92ZUVxdWFsKGJAMTgsICQxMChiQDcpKQorICAg
ICAgICAgICAgVm9pZCBiQDkgPSBCcmFuY2goYkA4LCBUZXJtaW5hbCkKKyAgICAgICAgU3VjY2Vz
c29yczogVGhlbjojMywgRWxzZTojMgorICAgICAgICBCQiMyOiA7IGZyZXF1ZW5jeSA9IDEuMDAw
MDAwCisgICAgICAgIFByZWRlY2Vzc29yczogIzEKKyAgICAgICAgICAgIEludDY0IGJAMTAgPSBM
b2FkKGJAMTksIENvbnRyb2xEZXBlbmRlbnR8UmVhZHM6VG9wKQorICAgICAgICAgICAgSW50NjQg
YkAxMSA9IEFkZChiQDE4LCBiQDEwKQorICAgICAgICAgICAgSW50NjQgYkAxMiA9IENvbnN0NjQo
OCkKKyAgICAgICAgICAgIEludDY0IGJAMTMgPSBBZGQoYkAxOSwgJDgoYkAxMikpCisgICAgICAg
ICAgICBWb2lkIGJAMjIgPSBVcHNpbG9uKGJAMTEsIF4xOCwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAg
ICAgICAgICAgIFZvaWQgYkAyMyA9IFVwc2lsb24oYkAxMywgXjE5LCBXcml0ZXNMb2NhbFN0YXRl
KQorICAgICAgICAgICAgVm9pZCBiQDE2ID0gSnVtcChUZXJtaW5hbCkKKyAgICAgICAgU3VjY2Vz
c29yczogIzEKKyAgICAgICAgQkIjMzogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQ
cmVkZWNlc3NvcnM6ICMxCisgICAgICAgICAgICBWb2lkIGJAMTcgPSBSZXR1cm4oYkAxOCwgVGVy
bWluYWwpCisgICAgICAgIFZhcmlhYmxlczoKKyAgICAgICAgICAgIEludDY0IHZhcjAKKyAgICAg
ICAgICAgIEludDY0IHZhcjEKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVy9PIFBvc3QtSW5jcmVtZW50IEFk
ZHJlc3MgTW9kZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC4uLgorICAgICAgICBCQiMyOiA7IGZyZXF1ZW5j
eSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRlY2Vzc29yczogIzEKKyAgICAgICAgICAgIE1vdmUg
KCV4MCksICV4MiwgYkAxMAorICAgICAgICAgICAgQWRkNjQgJXgyLCAleDEsICV4MSwgYkAxMQor
ICAgICAgICAgICAgQWRkNjQgJDgsICV4MCwgJXgwLCBiQDEzCisgICAgICAgICAgICBKdW1wIGJA
MTYKKyAgICAgICAgU3VjY2Vzc29yczogIzEKKyAgICAgICAgLi4uCisgICAgICAgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAg
IFcvIFBvc3QtSW5jcmVtZW50IEFkZHJlc3MgTW9kZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC4uLgorICAg
ICAgICBCQiMyOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRlY2Vzc29yczog
IzEKKyAgICAgICAgICAgIE1vdmVXaXRoSW5jcmVtZW50NjQgKCV4MCxQb3N0KCQ4KSksICV4Miwg
YkAxMAorICAgICAgICAgICAgQWRkNjQgJXgyLCAleDEsICV4MSwgYkAxMQorICAgICAgICAgICAg
SnVtcCBiQDE2CisgICAgICAgIFN1Y2Nlc3NvcnM6ICMxCisgICAgICAgIC4uLgorICAgICAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlByZUlu
ZGV4QWRkcmVzczo6UHJlSW5kZXhBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNy
b0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzczo6UG9zdEluZGV4QWRkcmVzcyk6CisgICAgICAg
ICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJBUk02NDo6bG9hZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NDo6bG9hZDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RvcmU2NCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN0b3JlMzIpOgorICAgICAgICAq
IGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6CisgICAgICAgIChKU0M6OnRlc3RTdG9yZVByZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKEpTQzo6dGVzdFN0b3JlUHJlUG9zdEluZGV4NjQpOgorICAgICAg
ICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJbmRleDMyKToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQ
cmVQb3N0SW5kZXg2NCk6CisgICAgICAgICogYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVt
ZW50cy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Y2Fub25pY2FsaXplUHJlUG9zdElu
Y3JlbWVudHMpOgorICAgICAgICAqIGIzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMu
aDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVz
LmguCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpnZW5l
cmF0ZVRvQWlyKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIz
L0IzVmFsdWVLZXkuaDoKKyAgICAgICAgKiBiMy9CM1ZhbHVlS2V5SW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVLZXk6OlZhbHVlS2V5KToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJn
LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpqc0hhc2ggY29uc3QpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OmR1bXAgY29uc3QpOgorICAgICAgICAoV1RGOjpwcmludElu
dGVybmFsKToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6cHJlSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnBvc3RJbmRl
eCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNQcmVJbmRleCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNQb3N0SW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmlzTWVtb3J5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpiYXNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpvZmZzZXQgY29u
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1AgY29uc3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6OmlzRlAgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmlzVmFsaWRQcmVJbmRleEZvcm0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
VmFsaWRQb3N0SW5kZXhGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlk
Rm9ybSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Zm9yRWFjaFRtcEZhc3Qp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXApOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmFzUHJlSW5kZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjphc1Bvc3RJbmRleEFkZHJlc3MgY29uc3QpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5y
YjoKKyAgICAgICAgKiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6Cisg
ICAgICAgICh0ZXN0TG9hZFByZUluZGV4MzIpOgorICAgICAgICAodGVzdExvYWRQcmVJbmRleDY0
KToKKyAgICAgICAgKHRlc3RMb2FkUG9zdEluZGV4MzIpOgorICAgICAgICAodGVzdExvYWRQb3N0
SW5kZXg2NCk6CisgICAgICAgIChhZGRTaHJUZXN0cyk6CisgICAgICAgICogaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpqaXRXcml0ZVRodW5rR2VuZXJhdG9yKToK
KwogMjAyMS0wNy0yOSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgog
CiAgICAgICAgIFN0b3AgYnVpbGRpbmcgV2ViR1BVIGFuZCB0aGUgV0hMU0wgY29tcGlsZXIgdG8g
ZGVjcmVhc2UgYmluYXJ5IHNpemUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA1NWRj
YTFmZjA1M2Y0Y2U5ODVkMjFmZDZkYmMzZGQzYjBkZTdjYjAwLi5hNjQ3MDJkYjYwMWNjMjFhYmI0
YzI2Mjk0NTdkZDFhNzU5YzMwMjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0x
MTMsNiArMTEzLDcgQEAgYjMvQjNCYXNpY0Jsb2NrLmNwcAogYjMvQjNCbG9ja0luc2VydGlvblNl
dC5jcHAKIGIzL0IzQm90dG9tVHVwbGVWYWx1ZS5jcHAKIGIzL0IzQnJlYWtDcml0aWNhbEVkZ2Vz
LmNwcAorYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAKIGIzL0IzQ0NhbGxW
YWx1ZS5jcHAKIGIzL0IzQ2FzZUNvbGxlY3Rpb24uY3BwCiBiMy9CM0NoZWNrU3BlY2lhbC5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgKaW5kZXggM2QxOTQ5YTQwNzg1ZDk5Y2E2MTU5NWFhYjA0YmU2ZjFkMGQ5
NmJhMy4uMjM1NGM0NTM2OGM3YzBkNWNlOTAxOGFjZmYyODRjNGEwYTA0MzFhOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmgKQEAgLTI0NSw2ICsyNDUsMzQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfTsK
IAorICAgIC8vIFByZUluZGV4QWRkcmVzczoKKyAgICAvLworICAgIC8vIERlc2NyaWJlcyBhbiBh
ZGRyZXNzIHdpdGggYmFzZSBhZGRyZXNzIGFuZCBwcmUtaW5jcmVtZW50L2RlY3JlbWVudCBpbmRl
eC4KKyAgICBzdHJ1Y3QgUHJlSW5kZXhBZGRyZXNzIHsKKyAgICAgICAgUHJlSW5kZXhBZGRyZXNz
KFJlZ2lzdGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAgICAgICAgOiBiYXNlKGJhc2UpCisg
ICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBSZWdpc3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRleDsKKyAgICB9OworCisgICAgLy8g
UG9zdEluZGV4QWRkcmVzczoKKyAgICAvLworICAgIC8vIERlc2NyaWJlcyBhbiBhZGRyZXNzIHdp
dGggYmFzZSBhZGRyZXNzIGFuZCBwb3N0LWluY3JlbWVudC9kZWNyZW1lbnQgaW5kZXguCisgICAg
c3RydWN0IFBvc3RJbmRleEFkZHJlc3MgeworICAgICAgICBQb3N0SW5kZXhBZGRyZXNzKFJlZ2lz
dGVySUQgYmFzZSwgaW50IGluZGV4KQorICAgICAgICAgICAgOiBiYXNlKGJhc2UpCisgICAgICAg
ICAgICAsIGluZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZWdp
c3RlcklEIGJhc2U7CisgICAgICAgIGludCBpbmRleDsKKyAgICB9OworCiAgICAgLy8gQWJzb2x1
dGVBZGRyZXNzOgogICAgIC8vCiAgICAgLy8gRGVzY3JpYmVzIGFuIG1lbW9yeSBvcGVyYW5kIGdp
dmVuIGJ5IGEgcG9pbnRlci4gIEZvciByZWd1bGFyIGxvYWQgJiBzdG9yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRl
eCAyOTZlODhmOWI1NDYyYzRhZjdkMWY0NzQwZGM4MmJiYWViNTZmMDQwLi5lNmJmYmVjNjAwMWMx
MGM2MWU5ZjI2NmVmZjI3YWQ2ZjEwZTg5ZjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtMTQ0Nyw5ICsxNDQ3
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDw2ND4oYWRkcmVzcywgZGVzdCk7CiAgICAgfQog
Ci0gICAgdm9pZCBsb2FkNjQoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRleCBzaW1tLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQoUHJlSW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMsIHNp
bW0pOworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRl
eChzcmMuaW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQ2NChQb3N0SW5kZXhBZGRyZXNz
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDY0
PihkZXN0LCBzcmMuYmFzZSwgUG9zdEluZGV4KHNyYy5pbmRleCkpOwogICAgIH0KIAogICAgIERh
dGFMYWJlbDMyIGxvYWQ2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBS
ZWdpc3RlcklEIGRlc3QpCkBAIC0xNTQ4LDYgKzE1NTMsMTYgQEAgcHVibGljOgogICAgICAgICBs
b2FkPDMyPihhZGRyZXNzLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGxvYWQzMihQcmVJbmRl
eEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sZHI8MzI+KGRlc3QsIHNyYy5iYXNlLCBQcmVJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9CisK
KyAgICB2b2lkIGxvYWQzMihQb3N0SW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihkZXN0LCBzcmMuYmFzZSwgUG9zdElu
ZGV4KHNyYy5pbmRleCkpOworICAgIH0KKwogICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKQEAgLTE3NDcsNyArMTc2MiwxNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBt
ZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNz
KSwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBhZGRy
ZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rlcik7CiAgICAgfQotICAgIAorCisgICAgdm9pZCBz
dG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBQcmVJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LmJhc2UsIFByZUluZGV4KGRlc3QuaW5k
ZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRl
eEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBk
ZXN0LmJhc2UsIFBvc3RJbmRleChkZXN0LmluZGV4KSk7CisgICAgfQorCiAgICAgdm9pZCBzdG9y
ZTY0KFJlZ2lzdGVySUQgc3JjLCBjb25zdCB2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAg
c3RvcmU8NjQ+KHNyYywgYWRkcmVzcyk7CkBAIC0xNzkxLDExICsxODE2LDYgQEAgcHVibGljOgog
ICAgICAgICBzdG9yZTY0KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAotICAg
IHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBQb3N0SW5kZXgg
c2ltbSkKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBkZXN0LCBzaW1t
KTsKLSAgICB9Ci0gICAgCiAgICAgRGF0YUxhYmVsMzIgc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0
UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIERh
dGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpAQCAtMTg5NSw2ICsxOTE1LDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzKTsKICAgICB9CiAKKyAgICB2
b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFByZUluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGRlc3QuYmFzZSwgUHJlSW5kZXgoZGVz
dC5pbmRleCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgUG9z
dEluZGV4QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihz
cmMsIGRlc3QuYmFzZSwgUG9zdEluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKICAgICBEYXRh
TGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRk
cmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCmluZGV4IGY2ZDE2
Y2ZkOTYwNmUwNjdjMGQ5NTI2ZWQ4ZDM2YTJmMTdlYTYyNGYuLjFjYTY5ODNlYjcwZDk2NDBiZTRm
YjJmMTEwZTJmOGUwMWYzOGY4MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvdGVzdG1hc20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvdGVzdG1hc20uY3BwCkBAIC0yMjEyLDYgKzIyMTIsMTc2IEBAIHZvaWQgdGVzdFhvck5vdFdp
dGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCiAgICAgICAgIH0KICAgICB9CiB9CisKK3ZvaWQgdGVz
dFN0b3JlUHJlUG9zdEluZGV4MzIoKQoreworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAz
IH07CisgICAgaW50cHRyX3QgYWRkciA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJm51bXNbMV0p
OworICAgIGludDMyX3QgaW5kZXggPSBzaXplb2YoaW50MzJfdCk7CisKKyAgICBhdXRvIHRlc3Qx
ID0gWyZdIChpbnQzMl90IHNyYykgeworICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShq
aXQpOworCisgICAgICAgICAgICAvLyAqKytwMSA9IDQ7IHJldHVybiBwMTsKKyAgICAgICAgICAg
IGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQcmVJbmRl
eEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0
Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQu
cmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9y
ZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50MzJfdCogcDEgPSBiaXR3aXNlX2Nhc3Q8
aW50MzJfdCo+KHRlc3QxKDQpKTsKKyAgICBDSEVDS19FUSgqcDEsIDQpOworICAgIENIRUNLX0VR
KCotLXAxLCBudW1zWzFdKTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDMyX3Qgc3JjKSB7
CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
KyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8v
ICpwMisrID0gNTsgcmV0dXJuIHAyOworICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOwor
ICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9
OworCisgICAgaW50MzJfdCogcDIgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHRlc3QyKDUpKTsK
KyAgICBDSEVDS19FUSgqcDIsIDQpOworICAgIENIRUNLX0VRKCotLXAyLCA1KTsKK30KKwordm9p
ZCB0ZXN0U3RvcmVQcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEs
IDIsIDMgfTsKKyAgICBpbnRwdHJfdCBhZGRyID0gYml0d2lzZV9jYXN0PGludHB0cl90PigmbnVt
c1sxXSk7CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVvZihpbnQ2NF90KTsKKworICAgIGF1dG8g
dGVzdDEgPSBbJl0gKGludDY0X3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3RvcmUgPSBjb21waWxl
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xv
Z3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICorK3AxID0gNDsgcmV0dXJuIHAxOworICAgICAg
ICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhlbHBlcnM6OlBy
ZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAg
ICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAg
IGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+
KHN0b3JlLCBzcmMsIGFkZHIpOworICAgIH07CisKKyAgICBpbnQ2NF90KiBwMSA9IGJpdHdpc2Vf
Y2FzdDxpbnQ2NF90Kj4odGVzdDEoNCkpOworICAgIENIRUNLX0VRKCpwMSwgNCk7CisgICAgQ0hF
Q0tfRVEoKi0tcDEsIG51bXNbMV0pOworCisgICAgYXV0byB0ZXN0MiA9IFsmXSAoaW50NjRfdCBz
cmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAg
ICAgLy8gKnAyKysgPSA1OyByZXR1cm4gcDI7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJ
bmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVzcyhHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIGluZGV4KSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjph
cmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50cHRyX3Q+KHN0b3JlLCBzcmMsIGFkZHIpOwor
ICAgIH07CisKKyAgICBpbnQ2NF90KiBwMiA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4odGVzdDIo
NSkpOworICAgIENIRUNLX0VRKCpwMiwgNCk7CisgICAgQ0hFQ0tfRVEoKi0tcDIsIDUpOworfQor
Cit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4MzIoKQoreworICAgIGludDMyX3QgbnVtc1tdID0g
eyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRleCA9IHNpemVvZihpbnQzMl90KTsKKworICAg
IGF1dG8gdGVzdDEgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQg
PSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5j
dGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9ICorK3AxOyAqcDEgPSA0
OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlByZUlu
ZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1
bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGls
b2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAg
cmV0dXJuIGludm9rZTxpbnQzMl90Pihsb2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENI
RUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA0KTsKKworICAgIGF1
dG8gdGVzdDIgPSBbJl0gKGludDMyX3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBj
b21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlv
blByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyBy
ZXR1cm4gcmVzOworICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OlBvc3RJbmRl
eEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJl
dHVybiBpbnZva2U8aW50MzJfdD4obG9hZCwgJm51bXNbMV0pOworICAgIH07CisKKyAgICBDSEVD
S19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgNSk7Cit9CisKK3ZvaWQg
dGVzdExvYWRQcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIs
IDMgfTsKKyAgICBpbnQzMl90IGluZGV4ID0gc2l6ZW9mKGludDY0X3QpOworCisgICAgYXV0byB0
ZXN0MSA9IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBp
bGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKisrcDE7ICpwMSA9IDQ7IHJldHVy
biByZXM7CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRy
ZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICAgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQocmVw
bGFjZSksIENDYWxsSGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
aW52b2tlPGludDY0X3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEo
dGVzdDEoNCksIDMpOworICAgIENIRUNLX0VRKG51bXNbMl0sIDQpOworCisgICAgYXV0byB0ZXN0
MiA9IFsmXSAoaW50NjRfdCByZXBsYWNlKSB7CisgICAgICAgIGF1dG8gbG9hZCA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICAgICAgLy8gcmVzID0gKnAyKys7ICpwMiA9IDU7IHJldHVybiBy
ZXM7CisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6UG9zdEluZGV4QWRkcmVz
cyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsK
KyAgICAgICAgICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxh
Y2UpLCBDQ2FsbEhlbHBlcnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAp
KTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQp
OworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGlu
dm9rZTxpbnQ2NF90Pihsb2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRl
c3QyKDUpLCAyKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCA1KTsKK30KICNlbmRpZgogCiAjaWYg
Q1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtNDgwNSw2ICs0OTc1LDEx
IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVU
WV9BTkFMWVNJUwogICAgIFJVTih0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDY0KCkpOwogICAgIFJV
Tih0ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhV
bnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0U3RvcmVQcmVQb3N0SW5kZXgz
MigpKTsKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RM
b2FkUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKSk7
CiAjZW5kaWYKIAogI2lmIENQVShBUk02NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODJjOWFmMWQ5Yjg5YWQ1N2Y3NzczNjljOWUxN2RlZTY3NmI4YjI1ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJ
bmNyZW1lbnRzLmNwcApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Nh
bm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLmgiCisKKyNpbmNsdWRlICJCM0JhY2t3YXJkc0Rv
bWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAi
QjNCbG9ja0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkIzRG9taW5hdG9ycy5oIgorI2luY2x1
ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgor
I2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUtleUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9JbmRleFNldC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJv
YykKK3sKKyAgICBpZiAoIWlzQVJNNjQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFBo
YXNlU2NvcGUgcGhhc2VTY29wZShwcm9jLCAiY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMi
KTsKKyAgICB1c2luZyBBcmcgPSBBaXI6OkFyZzsKKworICAgIEluc2VydGlvblNldCBpbnNlcnRp
b25TZXQgeyBwcm9jIH07CisgICAgQmxvY2tJbnNlcnRpb25TZXQgYmxvY2tJbnNlcnRpb25TZXQg
eyBwcm9jIH07CisgICAgQmFzaWNCbG9jayogYmxvY2sgeyBudWxscHRyIH07CisgICAgdW5zaWdu
ZWQgaW5kZXggeyAwIH07CisKKyAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gcHJvYy5kb21p
bmF0b3JzKCk7CisgICAgQmFja3dhcmRzRG9taW5hdG9ycyYgYmFja3dhcmRzRG9taW5hdG9ycyA9
IHByb2MuYmFja3dhcmRzRG9taW5hdG9ycygpOworCisgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmVj
dG9yPFZhbHVlKj4+IGJhc2VPZmZzZXRUb0FkZHJlc3NlczsKKyAgICBIYXNoTWFwPE1lbW9yeVZh
bHVlKiwgVmFsdWUqPiBwcmVJbmRleENhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxWYWx1ZSosIFZl
Y3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9NZW1vcmllczsKKyAgICBIYXNoTWFwPE1lbW9yeVZh
bHVlKiwgVmFsdWUqPiBwb3N0SW5kZXhDYW5kaWRhdGVzOworICAgIEhhc2hNYXA8VmFsdWUqLCB1
bnNpZ25lZD4gdmFsdWVUb0luZGV4OworICAgIEluZGV4U2V0PFZhbHVlKj4gaWdub3JlZFZhbHVl
czsKKworICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgorICAgIC8vICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkKKyAgICAvLyAgICAgLi4uCisgICAgLy8gICAgIG1lbW9yeSA9IExvYWQo
YmFzZSwgb2Zmc2V0KQorICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoKKyAgICAvLyAgICAgbWVt
b3J5ID0gTG9hZChiYXNlLCAwKQorICAgIC8vICAgICAuLi4KKyAgICAvLyAgICAgYWRkcmVzcyA9
IEFkZChiYXNlLCBvZmZzZXQpCisgICAgYXV0byB0cnlQcmVQb3N0SW5kZXggPSBbJl0gKFZhbHVl
KiB2YWx1ZSkgeworICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgeworICAgICAgICBj
YXNlIExvYWQ6IHsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8
TWVtb3J5VmFsdWU+KCk7CisKKyAgICAgICAgICAgIGF1dG8gdHJ5UHJlUG9zdEluZGV4TWVtb3J5
ID0gWyZdICgpIHsKKyAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT50eXBlKCkgIT0gSW50MzIg
JiYgbWVtb3J5LT50eXBlKCkgIT0gSW50NjQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIUFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybShtZW1vcnktPm9mZnNldCgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVL
ZXkgYmFzZU9mZnNldGtleSA9IFZhbHVlS2V5KG1lbW9yeS0+Y2hpbGQoMCksIHN0YXRpY19jYXN0
PGludDY0X3Q+KG1lbW9yeS0+b2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFi
YXNlT2Zmc2V0VG9BZGRyZXNzZXMuY29udGFpbnMoYmFzZU9mZnNldGtleSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGFk
ZHJlc3MgOiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuZ2V0KGJhc2VPZmZzZXRrZXkpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcHJlSW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnksIGFkZHJlc3Mp
OworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBiYXNlVG9NZW1v
cmllcy5hZGQobWVtb3J5LT5jaGlsZCgwKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0
b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOworICAgICAgICAgICAgICAgIHZhbHVlVG9JbmRleC5h
ZGQodmFsdWUsIGluZGV4KTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIHRyeVByZVBv
c3RJbmRleE1lbW9yeSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIEFkZDogeworICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7
CisgICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSB2YWx1ZS0+Y2hpbGQoMSk7CisKKyAgICAgICAg
ICAgIGF1dG8gdHJ5UG90ZW50aWFsUG9zdEluZGV4QWRkcmVzcyA9IFsmXSAoKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFyaWdodC0+aGFzSW50UHRyKCkgfHwgdmFsdWUtPnR5cGUoKSAhPSBJbnQ2
NCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGludHB0cl90
IG9mZnNldCA9IHJpZ2h0LT5hc0ludFB0cigpOworICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZz
ZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNl
dCk7CisgICAgICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjpp
c1ZhbGlkUHJlSW5kZXhGb3JtKHNtYWxsT2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIC8vIHNvIGZhciB0aGlzIEFkZCB2YWx1ZSBpcyBhIHZhbGlk
IGFkZHJlc3MgY2FuZGlkYXRlIGZvciBib3RoIHByZWZpeCBhbmQgcG9zdGZpeCBwYXR0ZXJuCisg
ICAgICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNldGtleSA9IFZhbHVlS2V5KGxlZnQsIHN0
YXRpY19jYXN0PGludDY0X3Q+KHNtYWxsT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgYmFzZU9m
ZnNldFRvQWRkcmVzc2VzLmFkZChiYXNlT2Zmc2V0a2V5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWx1ZVRvSW5kZXgu
YWRkKHZhbHVlLCBpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFiYXNlVG9NZW1vcmllcy5j
b250YWlucyhsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJhc2VUb01lbW9yaWVzLmdldChsZWZ0KSkK
KyAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1
ZSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB0cnlQb3RlbnRpYWxQb3N0SW5kZXhB
ZGRyZXNzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKEJh
c2ljQmxvY2sqIGJhc2ljQmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAgICAg
ICBibG9jayA9IGJhc2ljQmxvY2s7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGJh
c2ljQmxvY2stPnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0g
YmFzaWNCbG9jay0+YXQoaW5kZXgpOworICAgICAgICAgICAgdHJ5UHJlUG9zdEluZGV4KHZhbHVl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gY29udHJvbEVxdWl2YWxlbnQgPSBbJl0g
KFZhbHVlKiB2MSwgVmFsdWUqIHYyKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIChkb21pbmF0
b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYyLT5vd25lcikgJiYgYmFja3dhcmRzRG9taW5hdG9y
cy5kb21pbmF0ZXModjItPm93bmVyLCB2MS0+b3duZXIpKQorICAgICAgICAgICAgfHwgKGRvbWlu
YXRvcnMuZG9taW5hdGVzKHYyLT5vd25lciwgdjEtPm93bmVyKSAmJiBiYWNrd2FyZHNEb21pbmF0
b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYyLT5vd25lcikpOworICAgIH07CisKKyAgICBhdXRv
IGRldGVjdCA9IFsmXSAoSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gY2FuZGlkYXRlcykg
eworICAgICAgICBmb3IgKGF1dG8gaXRyID0gY2FuZGlkYXRlcy5iZWdpbigpOyBpdHIgIT0gY2Fu
ZGlkYXRlcy5lbmQoKTsgKytpdHIpIHsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkg
PSBpdHItPmtleTsKKyAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gaXRyLT52YWx1ZTsKKyAg
ICAgICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaWdub3JlZFZh
bHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRy
ZXNzKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGNhbmRp
ZGF0ZXMgPT0gcHJlSW5kZXhDYW5kaWRhdGVzKSB7CisgICAgICAgICAgICAgICAgLy8gYWRkcmVz
cyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdN
ZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICAvLyAuLi4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgLy8gbWVtb3J5ID0g
TG9hZChiYXNlLCBvZmZzZXQpICAgICAgIG1lbW9yeSA9IElkZW50aXR5KG5ld01lbW9yeSkKKyAg
ICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbmV3TWVtb3J5ID0gaW5zZXJ0aW9uU2V0Lmluc2Vy
dDxNZW1vcnlWYWx1ZT4odmFsdWVUb0luZGV4LmdldChhZGRyZXNzKSArIDEsIExvYWQsIG1lbW9y
eS0+dHlwZSgpLCBhZGRyZXNzLT5vcmlnaW4oKSwgbWVtb3J5LT5sYXN0Q2hpbGQoKSk7CisgICAg
ICAgICAgICAgICAgbmV3TWVtb3J5LT5zZXRPZmZzZXQobWVtb3J5LT5vZmZzZXQoKSk7CisgICAg
ICAgICAgICAgICAgbWVtb3J5LT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld01lbW9yeSk7CisgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYWRkcmVzcy0+b3duZXIpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3T2Zmc2V0ID0gQ29uc3RhbnQKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBuZXdP
ZmZzZXQpCisgICAgICAgICAgICAgICAgLy8gbWVtb3J5ID0gTG9hZChiYXNlLCAwKSAgICAgICAg
ICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKKyAgICAgICAgICAgICAgICAvLyAuLi4gICAgICAg
ICAgICAgICAgICAgICAgICAgIC0tPiAgLi4uCisgICAgICAgICAgICAgICAgLy8gb2Zmc2V0ID0g
Q29uc3RhbnQgICAgICAgICAgICAgICAgIG9mZnNldCA9IElkZW50aXR5KG5ld09mZnNldCkKKyAg
ICAgICAgICAgICAgICAvLyBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVz
cyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbWVtb3J5
SW5kZXggPSB2YWx1ZVRvSW5kZXguZ2V0KG1lbW9yeSk7CisgICAgICAgICAgICAgICAgVmFsdWUq
IG5ld09mZnNldCA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihtZW1vcnlJbmRl
eCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50KCkpOworICAgICAg
ICAgICAgICAgIFZhbHVlKiBuZXdBZGRyZXNzID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4o
bWVtb3J5SW5kZXgsIEFkZCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMCksIG5l
d09mZnNldCk7CisgICAgICAgICAgICAgICAgYWRkcmVzcy0+Y2hpbGQoMSktPnJlcGxhY2VXaXRo
SWRlbnRpdHkobmV3T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5yZXBsYWNlV2l0
aElkZW50aXR5KG5ld0FkZHJlc3MpOworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKG1lbW9yeS0+b3duZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZ25vcmVk
VmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKG1lbW9y
eSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZGV0ZWN0KHByZUluZGV4Q2FuZGlkYXRlcyk7
CisgICAgZGV0ZWN0KHBvc3RJbmRleENhbmRpZGF0ZXMpOworICAgIHJldHVybiB0cnVlOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0
SW5jcmVtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJl
UG9zdEluY3JlbWVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMzk5YmM2NzNlZTk2NzBiODIzMjkxYjcyNmU1
NTU5YTc4NTFlM2ZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuaApAQCAtMCwwICsxLDM5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgUHJvY2VkdXJlOworCitKU19FWFBPUlRfUFJJVkFURSBib29sIGNhbm9uaWNhbGl6ZVBy
ZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyYXRlLmNwcAppbmRleCBjZDQ0YTI5MTU3Nzc0MGQyMzk5MzA4YzI2MmE3OTI3NTk1ZmU3YjQz
Li44MzZmYTMxMWMzNmIzOGZkNmQ5N2NmZjdlYjUxNTgwMjU3YmQzMDVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVkZSAiQjNDYW5vbmlj
YWxpemVQcmVQb3N0SW5jcmVtZW50cy5oIgogI2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVk
ZSAiQjNEdXBsaWNhdGVUYWlscy5oIgogI2luY2x1ZGUgIkIzRWxpbWluYXRlQ29tbW9uU3ViZXhw
cmVzc2lvbnMuaCIKQEAgLTExOSw2ICsxMjAsOSBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2Vk
dXJlJiBwcm9jZWR1cmUpCiAgICAgbW92ZUNvbnN0YW50cyhwcm9jZWR1cmUpOwogICAgIGVsaW1p
bmF0ZURlYWRDb2RlKHByb2NlZHVyZSk7CiAKKyAgICBpZiAocHJvY2VkdXJlLm9wdExldmVsKCkg
Pj0gMikKKyAgICAgICAgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMocHJvY2VkdXJlKTsK
KwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcnVuIHB1cmVDU0UgaGVyZSB0byBjbGVhbiB1cCBz
b21lIHBsYXRmb3JtIHNwZWNpZmljIGNoYW5nZXMgZnJvbSB0aGUgcHJldmlvdXMgcGhhc2VzLgog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4NzMKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBkNWZjMzE2NDY1
OTY4ZWI3MzcxYjZmZjFjYzZmODMxN2ZlY2RlNTJlLi5lYmIwMzUyY2IzMDgwM2RiYzFmZTgxOGUz
OTkwYmEzNzQ1NzA2NjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcApAQCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgZmluaXNoQXBw
ZW5kaW5nSW5zdHJ1Y3Rpb25zKG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KLSAg
ICAgICAgCisKICAgICAgICAgbV9ibG9ja0luc2VydGlvblNldC5leGVjdXRlKCk7CiAKICAgICAg
ICAgQWlyOjpJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fY29kZSk7CkBAIC01NDYsNyArNTQ2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAg
IHJldHVybiBzY2FsZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZl
biBvcGVyYW5kIGludG8gYW4gYWRkcmVzcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5
cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KICAgICBBcmcgZWZmZWN0aXZlQWRk
cihWYWx1ZSogYWRkcmVzcywgSW50IG9mZnNldCwgV2lkdGggd2lkdGgpCkBAIC0yNTU5LDYgKzI1
NTksNDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUHJlLUluZGV4IENhbm9uaWNhbCBG
b3JtOgorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBhZGQoYmFzZSwgb2Zmc2V0KQorICAg
ICAgICAgICAgLy8gICAgIG1lbW9yeSA9IGxvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
Ly8gUG9zdC1JbmRleCBDYW5vbmljYWwgRm9ybToKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkg
PSBsb2FkKGJhc2UsIDApCisgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IGFkZChiYXNlLCBv
ZmZzZXQpCisgICAgICAgICAgICBhdXRvIHRyeUFwcGVuZEluY3JlbWVudEFkZHJlc3MgPSBbJl0g
KCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bj
b2RlRm9yVHlwZShNb3ZlV2l0aEluY3JlbWVudDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1v
cnktPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFy
Zzo6UHJlSW5kZXgsIEFyZzo6VG1wKSB8fCAhbV9pbmRleCkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gbV9ibG9jay0+
YXQobV9pbmRleCAtIDEpOworICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSAh
PSBBZGQgfHwgYWRkcmVzcy0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MtPmNoaWxkKDApICE9IG1l
bW9yeS0+bGFzdENoaWxkKCkgfHwgIWFkZHJlc3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGludHB0cl90
IG9mZnNldCA9IGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludFB0cigpOworICAgICAgICAgICAgICAg
IFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNl
dFR5cGU+KG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNl
dCB8fCAhQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShzbWFsbE9mZnNldCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIEFyZyBpbmNyZW1lbnRB
cmcgPSBBcmcoKTsKKyAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgPT0gbWVtb3J5LT5vZmZzZXQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudEFyZyA9IEFyZzo6cHJlSW5kZXgodG1wKGFk
ZHJlc3MpLCBzbWFsbE9mZnNldCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIGluY3JlbWVudEFyZyA9IEFyZzo6cG9zdEluZGV4KHRtcChhZGRyZXNzKSwgc21h
bGxPZmZzZXQpOworCisgICAgICAgICAgICAgICAgaWYgKGluY3JlbWVudEFyZykgeworICAgICAg
ICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGFkZHJlc3MtPnR5cGUoKSks
IHRtcChhZGRyZXNzLT5jaGlsZCgwKSksIHRtcChhZGRyZXNzKSk7CisgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZChvcGNvZGUsIGluY3JlbWVudEFyZywgdG1wKG1lbW9yeSkpOworICAgICAgICAg
ICAgICAgICAgICBtX2xvY2tlZC5hZGQoYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAodHJ5QXBwZW5kSW5jcmVtZW50
QWRkcmVzcygpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5k
KHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBraW5kLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAo
bV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlS2V5LmgKaW5kZXggYjMzNDk3YWEyZGNiNDg1ZmY1ZjExYTMwY2NkY2Uy
YmYxMGEyOGE2ZC4uNDZmNDQwYzUyZmQ0ZTBjZTlkZjA5NjU5OGNkNWNjMDZmMzk5NTFhMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oCkBAIC01Niw2ICs1Niw4IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgfQogCisgICAgVmFsdWVLZXkoVmFsdWUqIGNoaWxkLCBpbnQ2NF90IHZh
bHVlKTsKKwogICAgIFZhbHVlS2V5KEtpbmQsIFR5cGUsIFZhbHVlKiBjaGlsZCk7CiAKICAgICBW
YWx1ZUtleShLaW5kLCBUeXBlLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgKaW5kZXggMTQxNThkNTAxZjcz
ZmNiZjcwZDc1NzNmODAwZWIyMGI2MmZiOWFhZi4uZTE4NjYxOTQ5MjYyMTQwNjZmZTg5ZTVjNzFi
MmQwNzc4MDU0NzAxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWVLZXlJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJ
bmxpbmVzLmgKQEAgLTMzLDYgKzMzLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgewogCitpbmxpbmUgVmFsdWVLZXk6OlZhbHVlS2V5KFZhbHVlKiBjaGlsZCwgaW50NjRfdCB2
YWx1ZSkKK3sKKyAgICBtX2tpbmQgPSBPb3BzOworICAgIG1fdHlwZSA9IFZvaWQ7CisgICAgdS5p
bmRpY2VzWzBdID0gY2hpbGQtPmluZGV4KCk7CisgICAgdS52YWx1ZSA9IHZhbHVlOworfQorCiBp
bmxpbmUgVmFsdWVLZXk6OlZhbHVlS2V5KEtpbmQga2luZCwgVHlwZSB0eXBlLCBWYWx1ZSogY2hp
bGQpCiAgICAgOiBtX2tpbmQoa2luZCkKICAgICAsIG1fdHlwZSh0eXBlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCmluZGV4IDEwM2M2ZWNjYTNkMzE0YmI0ZWQ4YzAyYTRk
MmYwMDljYTY0MWQwMDEuLjc3ZWU4NDI1MTI0YjlkOGI4YzU4MmYzOWZmOTY5ZjYwZmQxNmNjMDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKQEAgLTEzMCw2ICsxMzAs
MTEgQEAgdW5zaWduZWQgQXJnOjpqc0hhc2goKSBjb25zdAogICAgICAgICByZXN1bHQgKz0gbV9i
YXNlLmludGVybmFsVmFsdWUoKTsKICAgICAgICAgcmVzdWx0ICs9IG1faW5kZXguaW50ZXJuYWxW
YWx1ZSgpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFByZUluZGV4OgorICAgIGNhc2UgUG9z
dEluZGV4OgorICAgICAgICByZXN1bHQgKz0gbV9vZmZzZXQ7CisgICAgICAgIHJlc3VsdCArPSBt
X2Jhc2UuaW50ZXJuYWxWYWx1ZSgpOworICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YWNrOgog
ICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2NhbGUpOwogICAgICAg
ICByZXN1bHQgKz0gc3RhY2tTbG90KCktPmluZGV4KCk7CkBAIC0xNjEsNyArMTY2LDcgQEAgdm9p
ZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50Zigi
JDB4JWxseCIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4obV9vZmZzZXQpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgWmVyb1JlZzoKLSAgICAgICAgb3V0LnByaW50KCIlJXh6
ciIpOworICAgICAgICBvdXQucHJpbnQoIiV4enIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgU2ltcGxlQWRkcjoKICAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOwpAQCAt
MTgwLDYgKzE4NSwxMiBAQCB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ICAgICAgICAgICAgb3V0LnByaW50KCIsIiwgc2NhbGUoKSk7CiAgICAgICAgIG91dC5wcmludCgi
KSIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgb3V0LnBy
aW50KCIoIiwgYmFzZSgpLCAiLFByZSgkIiwgb2Zmc2V0KCksICIpKSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwg
IixQb3N0KCQiLCBvZmZzZXQoKSwgIikpIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFN0
YWNrOgogICAgICAgICBpZiAob2Zmc2V0KCkpCiAgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0
KCkpOwpAQCAtMjYxLDYgKzI3MiwxMiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgQXJnOjpLaW5kIGtpbmQpCiAgICAgY2FzZSBBcmc6OkluZGV4OgogICAgICAgICBvdXQu
cHJpbnQoIkluZGV4Iik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6UHJlSW5kZXg6
CisgICAgICAgIG91dC5wcmludCgiUHJlSW5kZXgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQXJnOjpQb3N0SW5kZXg6CisgICAgICAgIG91dC5wcmludCgiUG9zdEluZGV4Iik7CisgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6UmVsQ29uZDoKICAgICAgICAgb3V0LnByaW50KCJS
ZWxDb25kIik7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5oCmluZGV4IGNlNWE0ZTczNzlhZDY0NDQ1ZjBjM2FiZDEyOWYzMjliOTQ3ZmU4MTIuLmUxZjY0
NjZmMDMyMmFiODI4MGJkNGViODhmNjFkOWZjOTQ3ZjdiY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuaApAQCAtNzcsNiArNzcsOCBAQCBwdWJsaWM6CiAgICAgICAgIFN0YWNr
LAogICAgICAgICBDYWxsQXJnLAogICAgICAgICBJbmRleCwKKyAgICAgICAgUHJlSW5kZXgsCisg
ICAgICAgIFBvc3RJbmRleCwKIAogICAgICAgICAvLyBJbW1lZGlhdGUgb3BlcmFuZHMgdGhhdCBj
dXN0b21pemUgdGhlIGJlaGF2aW9yIG9mIGFuIG9wZXJhdGlvbi4gWW91IGNhbiB0aGluayBvZiB0
aGVtIGFzCiAgICAgICAgIC8vIHNlY29uZGFyeSBvcGNvZGVzLiBUaGV5IGFyZSBhbHdheXMgIlVz
ZSInZC4KQEAgLTY0OSw2ICs2NTEsMzAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQXJnOjpp
bmRleChiYXNlLCBpbmRleCwgc2NhbGUsIDApOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEludCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgorICAgIHN0YXRp
YyBBcmcgcHJlSW5kZXgoQWlyOjpUbXAgYmFzZSwgSW50IGluZGV4KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzSW50OShpbmRleCkpOworICAg
ICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUHJlSW5kZXg7CisgICAg
ICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBpbmRl
eDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMg
QXJnIHBvc3RJbmRleChBaXI6OlRtcCBiYXNlLCBJbnQgaW5kZXgpCisgICAgeworICAgICAgICBB
U1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNJbnQ5KGluZGV4KSk7CisgICAg
ICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBQb3N0SW5kZXg7CisgICAg
ICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBpbmRl
eDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBzdGF0aWMgQXJnIHJlbENv
bmQoTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogICAgIHsK
ICAgICAgICAgQXJnIHJlc3VsdDsKQEAgLTc5OSw2ICs4MjUsMTYgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4ga2luZCgpID09IEluZGV4OwogICAgIH0KIAorICAgIGJvb2wgaXNQcmVJbmRleCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFByZUluZGV4OworICAgIH0K
KworICAgIGJvb2wgaXNQb3N0SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBQb3N0SW5kZXg7CisgICAgfQorCiAgICAgYm9vbCBpc01lbW9yeSgpIGNvbnN0CiAg
ICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewpAQCAtODA4LDYgKzg0NCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgY2FzZSBTdGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBj
YXNlIEluZGV4OgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRl
eDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtOTcyLDcgKzEwMTAsNyBAQCBwdWJsaWM6CiAKICAgICBBaXI6
OlRtcCBiYXNlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2ltcGxl
QWRkciB8fCBraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8
IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2ltcGxlQWRkciB8
fCBraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gRXh0ZW5kZWRPZmZzZXRBZGRyIHx8IGtpbmQo
KSA9PSBJbmRleCB8fCBraW5kKCkgPT0gUHJlSW5kZXggfHwga2luZCgpID09IFBvc3RJbmRleCk7
CiAgICAgICAgIHJldHVybiBtX2Jhc2U7CiAgICAgfQogCkBAIC05ODIsNyArMTAyMCw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChraW5kKCkgPT0gU3RhY2spCiAgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG1fc2NhbGUpOwotICAgICAgICBB
U1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBr
aW5kKCkgPT0gQ2FsbEFyZyB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IEFkZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0g
Q2FsbEFyZyB8fCBraW5kKCkgPT0gSW5kZXggfHwga2luZCgpID09IFByZUluZGV4IHx8IGtpbmQo
KSA9PSBQb3N0SW5kZXgpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNl
dFR5cGU+KG1fb2Zmc2V0KTsKICAgICB9CiAKQEAgLTEwNDQsNiArMTA4Miw4IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKICAg
ICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQ
b3N0SW5kZXg6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAg
ICAgICAgY2FzZSBSZWxDb25kOgpAQCAtMTA4MSw2ICsxMTIxLDggQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgogICAgICAgICBj
YXNlIEluZGV4OgorICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRl
eDoKICAgICAgICAgY2FzZSBTdGFjazoKICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICBj
YXNlIEJpZ0ltbTogLy8gWWVzLCB3ZSBhbGxvdyBCaWdJbW0gYXMgYSBkb3VibGUgaW1tZWRpYXRl
LiBXZSB1c2UgdGhpcyBmb3IgaW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KQEAgLTEyMzcsNiArMTI3
OSwyMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4K
KyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkUHJlSW5kZXhGb3JtKEludCBvZmZzZXQpCisgICAgewor
ICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRTaWduZWRJ
bW05KG9mZnNldCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAg
ICBzdGF0aWMgYm9vbCBpc1ZhbGlkUG9zdEluZGV4Rm9ybShJbnQgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkU2lnbmVkSW1t
OShvZmZzZXQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgLy8gSWYgeW91
IGRvbid0IHBhc3MgYSB3aWR0aCB0aGVuIHRoaXMgb3B0aW1pc3RpY2FsbHkgYXNzdW1lcyB0aGF0
IHlvdSdyZSB1c2luZyB0aGUgcmlnaHQgd2lkdGguIEJ1dAogICAgIC8vIHRoZSB3aWR0aCBpcyBy
ZWxldmFudCB0byB2YWxpZGl0eSwgc28gcGFzc2luZyBhIG51bGwgd2lkdGggaXMgb25seSB1c2Vm
dWwgZm9yIGFzc2VydGlvbnMuIERvbid0CiAgICAgLy8gcGFzcyBudWxsIHdpZHRocyB3aGVuIGNh
c2NhZGluZyB0aHJvdWdoIEFyZ3MgaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIQpAQCAtMTI2
NSw2ICsxMzIzLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkQWRkckZv
cm0ob2Zmc2V0KCksIHdpZHRoKTsKICAgICAgICAgY2FzZSBJbmRleDoKICAgICAgICAgICAgIHJl
dHVybiBpc1ZhbGlkSW5kZXhGb3JtKHNjYWxlKCksIG9mZnNldCgpLCB3aWR0aCk7CisgICAgICAg
IGNhc2UgUHJlSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFByZUluZGV4Rm9ybShv
ZmZzZXQoKSk7CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGlz
VmFsaWRQb3N0SW5kZXhGb3JtKG9mZnNldCgpKTsKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAg
ICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKQEAgLTEyODQsNiAr
MTM0Niw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBTaW1wbGVBZGRyOgogICAgICAgICBjYXNl
IEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgorICAgICAgICBjYXNlIFBy
ZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgICAgIGZ1bmN0b3IobV9i
YXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEluZGV4OgpAQCAtMTMyOCw2
ICsxMzkyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CiAg
ICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCwgYXJnUm9sZSA9PSBVc2VBZGRyID8g
YXJnV2lkdGggOiBwb2ludGVyV2lkdGgoKSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CisgICAgICAgICAgICBmdW5j
dG9yKG1fYmFzZSwgVXNlRGVmLCBHUCwgYXJnUm9sZSA9PSBVc2VBZGRyID8gYXJnV2lkdGggOiBw
b2ludGVyV2lkdGgoKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmRleDoK
ICAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQLCBhcmdSb2xlID09IFVzZUFkZHIg
PyBhcmdXaWR0aCA6IHBvaW50ZXJXaWR0aCgpKTsKICAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRl
eCwgVXNlLCBHUCwgYXJnUm9sZSA9PSBVc2VBZGRyID8gYXJnV2lkdGggOiBwb2ludGVyV2lkdGgo
KSk7CkBAIC0xMzgzLDYgKzE0NTEsMTggQEAgcHVibGljOgogICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG1fb2Zmc2V0KSwgbV9leHRlbmQpOwogICAgIH0KIAorICAg
IE1hY3JvQXNzZW1ibGVyOjpQcmVJbmRleEFkZHJlc3MgYXNQcmVJbmRleEFkZHJlc3MoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUHJlSW5kZXgoKSk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzKG1fYmFzZS5ncHIoKSwgb2Zmc2V0KCkpOwor
ICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5kZXhBZGRyZXNzIGFzUG9zdEluZGV4
QWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNQb3N0SW5kZXgoKSk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyhtX2Jhc2UuZ3By
KCksIG9mZnNldCgpKTsKKyAgICB9CisKICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENv
bmRpdGlvbiBhc1JlbGF0aW9uYWxDb25kaXRpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKGlzUmVsQ29uZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3Bjb2RlLm9wY29kZXMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzCmluZGV4IDY2MWVhZGQyMzczYzU0YTRiYmE5NDdhNTRiZGEyNTU3YmRiOGFl
NGEuLjQ5ZmVkMWFhYTE5YWY2ZGRjZDkyYzMzOWY3MGI1NzZkMGQzOTVkZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwpAQCAtNjYxLDYgKzY2
MSwxMiBAQCB4ODZfNjQ6IFN3YXA2NCBVRDpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKICAg
ICBUbXAsIEFkZHIKIAorYXJtNjQ6IE1vdmVXaXRoSW5jcmVtZW50NjQgVUQ6Rzo2NCwgRDpHOjY0
CisgICAgUHJlSW5kZXgsIFRtcCBhcyBsb2FkNjQKKyAgICBQb3N0SW5kZXgsIFRtcCBhcyBsb2Fk
NjQKKyAgICBUbXAsIFByZUluZGV4IGFzIHN0b3JlNjQKKyAgICBUbXAsIFBvc3RJbmRleCBhcyBz
dG9yZTY0CisKIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCBhcyB6ZXJvRXh0
ZW5kMzJUb1dvcmQKICAgICBBZGRyLCBUbXAgYXMgbG9hZDMyCkBAIC02NzEsNiArNjc3LDEyIEBA
IE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIKICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZTMyCiAg
ICAgeDg2OiBJbW0sIEluZGV4IGFzIHN0b3JlMzIKIAorYXJtNjQ6IE1vdmVXaXRoSW5jcmVtZW50
MzIgVUQ6RzozMiwgWkQ6RzozMgorICAgIFByZUluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgUG9z
dEluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgVG1wLCBQcmVJbmRleCBhcyBzdG9yZTMyCisgICAg
VG1wLCBQb3N0SW5kZXggYXMgc3RvcmUzMgorCiAjIFRoaXMgaXMgZm9yIG1vdmluZyBiZXR3ZWVu
IHNwaWxsIHNsb3RzLgogTW92ZTMyIFU6RzozMiwgWkQ6RzozMiwgUzpHOjMyCiAgICAgQWRkciwg
QWRkciwgVG1wCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29k
ZV9nZW5lcmF0b3IucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5l
cmF0b3IucmIKaW5kZXggMzc0MGVmZGJkZDE0NmEzN2Y2ZWRlOWRkYmMyM2RkYmEwM2IwNzY0Ni4u
ZjFiZjFhNDZjZmM4ODllYzE5MzQ2ZjJjMDZiN2NmNTBmOWUzZGUwZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgpAQCAtMjI5LDcgKzIy
OSw3IEBAIGRlZiBpc0dGKHRva2VuKQogZW5kCiAKIGRlZiBpc0tpbmQodG9rZW4pCi0gICAgdG9r
ZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KFplcm9S
ZWcpfChTaW1wbGVBZGRyKXwoQWRkcil8KEV4dGVuZGVkT2Zmc2V0QWRkcil8KEluZGV4KXwoUmVs
Q29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25kKXwoU3RhdHVzQ29uZCkpXFovCisgICAgdG9rZW4g
PX4gL1xBKChUbXApfChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KFplcm9SZWcp
fChTaW1wbGVBZGRyKXwoQWRkcil8KEV4dGVuZGVkT2Zmc2V0QWRkcil8KEluZGV4KXwoUHJlSW5k
ZXgpfChQb3N0SW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXND
b25kKSlcWi8KIGVuZAogCiBkZWYgaXNBcmNoKHRva2VuKQpAQCAtMzAzLDcgKzMwMyw3IEBAIGNs
YXNzIFBhcnNlcgogCiAgICAgZGVmIGNvbnN1bWVLaW5kCiAgICAgICAgIHJlc3VsdCA9IHRva2Vu
LnN0cmluZwotICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwg
Qml0SW1tLCBCaXRJbW02NCwgWmVyb1JlZywgVG1wLCBTaW1wbGVBZGRyLCBBZGRyLCBFeHRlbmRl
ZE9mZnNldEFkZHIsIEluZGV4LCBSZWxDb25kLCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBTdGF0
dXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAgICBwYXJzZUVycm9yKCJFeHBl
Y3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgWmVyb1JlZywgVG1wLCBT
aW1wbGVBZGRyLCBBZGRyLCBFeHRlbmRlZE9mZnNldEFkZHIsIEluZGV4LCBQcmVJbmRleCwgUG9z
dEluZGV4LCBSZWxDb25kLCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVu
bGVzcyBpc0tpbmQocmVzdWx0KQogICAgICAgICBhZHZhbmNlCiAgICAgICAgIHJlc3VsdAogICAg
IGVuZApAQCAtOTI5LDYgKzkyOSwxMiBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAg
ICAgICAgICAgICAgICB3aGVuICJJbmRleCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoIUFyZzo6aXNWYWxpZEluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5zY2FsZSgpLCBhcmdz
WyN7aW5kZXh9XS5vZmZzZXQoKSwgI3thcmcud2lkdGhDb2RlfSkpIgogICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIHdo
ZW4gIlByZUluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjpp
c1ZhbGlkUHJlSW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpKSkiCisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAg
ICAgd2hlbiAiUG9zdEluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgh
QXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSkpIgorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgogICAgICAg
ICAgICAgICAgIHdoZW4gIkJpZ0ltbSIKICAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgog
ICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCkBAIC0xMjM1LDYgKzEyNDEsMTAgQEAgd3Jp
dGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
ImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgogICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4
IgogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJ
bmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlByZUluZGV4IgorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1ByZUluZGV4QWRkcmVzcygpIgorICAg
ICAgICAgICAgICAgIHdoZW4gIlBvc3RJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
cmludCAiYXJnc1sje2luZGV4fV0uYXNQb3N0SW5kZXhBZGRyZXNzKCkiCiAgICAgICAgICAgICAg
ICAgd2hlbiAiUmVsQ29uZCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sj
e2luZGV4fV0uYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAi
UmVzQ29uZCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCBjNzAzMmVjMDg0ZGRmZGQ5
MzVlNTUyN2ZhYWU5MzU2ODE5ODQ4MTc5Li43MjFlYjNhZGQ2Mjc0OGUyZmIwMmRkZjQyNTU3Y2M1
OWQ1ZDg4MGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0xMTQwLDQgKzExNDAs
OSBAQCB2b2lkIGFkZENvcHlUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoKT4+PiYpOwogCiBib29sIHNob3VsZFJ1bihjb25zdCBjaGFyKiBmaWx0
ZXIsIGNvbnN0IGNoYXIqIHRlc3ROYW1lKTsKIAordm9pZCB0ZXN0TG9hZFByZUluZGV4MzIoKTsK
K3ZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCk7Cit2b2lkIHRlc3RMb2FkUG9zdEluZGV4MzIoKTsK
K3ZvaWQgdGVzdExvYWRQb3N0SW5kZXg2NCgpOworCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCmluZGV4IDRjNTJhZGE5Y2M0MDJkZGU1
Mzk4OGNjOGYyZjVlOWUwZGRlMmUxMWMuLmI4OWIwMTlmZDhiZjVmMDcxMmY0NjY4NjUwZjYxY2Rm
ODFkYTRjODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcApAQCAtMjgsNiAr
MjgsMzAwIEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisKK3ZvaWQgdGVzdExvYWRQcmVJbmRl
eDMyKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3
LCA4LCA5LCAxMCB9OworICAgIGludDMyX3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BC
b2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJs
b2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50MzIpOworICAg
IFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAgICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9u
KHIxLCBecjIpCisgICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAg
IFZhbHVlKiByMSA9IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQz
MiwgMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQs
IE9yaWdpbigpLCByLCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAg
IHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwg
cCwgcDEpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmln
aW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIExvb3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGko
KQorICAgIC8vIHIyID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBW
YWx1ZSogcjIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpH
ZXQsIE9yaWdpbigpLCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZh
cmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29u
ZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigp
LCByMiwgbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAx
MCkpOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBP
cmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9v
cEJvZHkpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2Nr
CisgICAgLy8gcDMgPSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gcjMg
PSByMiArIGxvYWQocDMpCisgICAgLy8gVXBzaWxvbihyMywgXnIyKQorICAgIC8vIGdvdG8gbG9v
cAorICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwg
T3JpZ2luKCksIHAyLCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIDQpKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2Ms
IEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwgcDMpKTsKKyAgICBs
b29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigp
LCByLCByMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1w
LCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiBy
MgorICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCByMik7CisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJv
Yyk7CisgICAgZml4U1NBKHByb2MpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNv
ZGUsICIjNF0hIik7CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50MzJfdCB7CisgICAg
ICAgIGludDMyX3QgciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICBy
ICs9ICorK3B0cjsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQzMl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgp
KTsKK30KKwordm9pZCB0ZXN0TG9hZFByZUluZGV4NjQoKQoreworICAgIGlmIChPcHRpb25zOjpk
ZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50NjRfdCBu
dW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50NjRfdCog
cHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3Qg
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
QmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0g
cHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlh
YmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jawor
ICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikKKyAgICAvLyBwMSA9IGFkZHIK
KyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50
Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDY0LCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1
ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFs
dWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRl
c3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisg
ICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8v
IGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmRO
ZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVl
KiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwg
T3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxv
Y2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8v
IFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMykKKyAgICAvLyBVcHNp
bG9uKHIzLCBecjIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHkt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBl
bmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCkpOworICAgIGxvb3BCb2R5LT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsK
KyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9y
aWdpbigpLCByMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwg
SW50NjQsIE9yaWdpbigpLCBwMykpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2so
bG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jawor
ICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsKKworICAgIHByb2MucmVzZXRSZWFj
aGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAg
ICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIiM4XSEiKTsKKworICAgIGF1dG8gdGVz
dCA9IFsmXSAoKSAtPiBpbnQ2NF90IHsKKyAgICAgICAgaW50NjRfdCByID0gMDsKKyAgICAgICAg
d2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAgIHIgKz0gKisrcHRyOworICAgICAgICByZXR1cm4g
cjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+KCpjb2RlLCBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCit2b2lkIHRlc3RMb2FkUG9zdElu
ZGV4MzIoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYs
IDcsIDgsIDksIDEwIH07CisgICAgaW50MzJfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVy
ZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9v
cEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRk
QmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQzMik7Cisg
ICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2ls
b24ocjEsIF5yMikKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisg
ICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIElu
dDMyLCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNl
dCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigp
LCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9y
aWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBo
aSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAg
IFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6
OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBj
b25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2lu
KCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gs
IE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhs
b29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxv
Y2sKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMikKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8v
IFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gZ290byBs
b29wCisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRk
LCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExv
YWQsIEludDMyLCBPcmlnaW4oKSwgcDIpKTsKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5l
dzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA0KSk7CisgICAgbG9vcEJvZHktPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAg
IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2lu
KCksIHAsIHAzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1
bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJu
IHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIHIyKTsKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShw
cm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgIl0sICM0Iik7CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50MzJfdCB7Cisg
ICAgICAgIGludDMyX3QgciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAg
ICByICs9ICpwdHIrKzsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VR
KGludm9rZTxpbnQzMl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVz
dCgpKTsKK30KKwordm9pZCB0ZXN0TG9hZFBvc3RJbmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9u
czo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDY0
X3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDY0
X3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOwor
ICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSog
ciA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRW
YXJpYWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxv
Y2sKKyAgICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpCisgICAgLy8gcDEgPSBh
ZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFwcGVu
ZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQ2NCwgMCk7CisgICAgcm9vdC0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAg
VmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxv
b3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9CbG9j
aworICAgIC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkKKyAg
ICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBW
YWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpH
ZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVuZE5l
dzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5hcHBl
bmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRl
ZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcjMgPSByMiArIGxvYWQo
cDIpCisgICAgLy8gcDMgPSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8g
VXBzaWxvbihwMywgXnAyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiByMyA9IGxvb3BC
b2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksIHAyKSk7
CisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBP
cmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmln
aW4oKSwgOCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywg
QjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlh
YmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgbG9vcEJvZHkt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJs
b2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmVfQmxv
Y2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7CisKKyAgICBwcm9jLnJlc2V0
UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NBKHByb2MpOwor
CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgaWYgKGlzQVJNNjQoKSkK
KyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJdLCAjOCIpOworCisgICAgYXV0
byB0ZXN0ID0gWyZdICgpIC0+IGludDY0X3QgeworICAgICAgICBpbnQ2NF90IHIgPSAwOworICAg
ICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqcHRyKys7CisgICAgICAgIHJl
dHVybiByOworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50NjRfdD4oKmNvZGUsIGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKKwogdm9pZCB0ZXN0SW5z
ZXJ0U2lnbmVkQml0ZmllbGRJblplcm8zMigpCiB7CiAgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVm
YXVsdEIzT3B0TGV2ZWwoKSA8IDIpCkBAIC0zNjk3LDYgKzM5OTEsMTEgQEAgdm9pZCBhZGRTaHJU
ZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+
PiYgdGFza3MpCiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMCkpOwogICAg
IFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDEpKTsKICAgICBSVU4odGVzdFpTaHJB
cmdJbW0zMigweGZmZmZmZmZmLCA2MykpOworCisgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXgzMigp
KTsKKyAgICBSVU4odGVzdExvYWRQcmVJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFBvc3RJ
bmRleDMyKCkpOworICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDY0KCkpOwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3IuY3BwCmluZGV4IDYzZTI2Njc4ODUyMDE4YTc2ODBjYTVmMDcxNDY5Njgx
MDU4ODRiM2IuLjY5YmI2YjJiZTgxODcwYjU5ODMzMzY3YWYyNjc1YjdmNGVmMDU2ZjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcApA
QCAtMjMzLDggKzIzMyw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gaml0V3JpdGVUaHVua0dlbmVyYXRvCiAgICAgaml0LnJldCgp
OwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMCA9IGppdC5sYWJlbCgpOwotICAg
IGppdC5sb2FkNjQoeDEsIFBvc3RJbmRleCg4KSwgeDYpOwotICAgIGppdC5zdG9yZTY0KHg2LCB4
MywgUG9zdEluZGV4KDgpKTsKKyAgICBqaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5k
ZXhBZGRyZXNzKHgxLCA4KSwgeDYpOworICAgIGppdC5zdG9yZTY0KHg2LCBNYWNyb0Fzc2VtYmxl
cjo6UG9zdEluZGV4QWRkcmVzcyh4MywgOCkpOwogICAgIHNtYWxsQ29weS5saW5rKCZqaXQpOwog
ICAgIGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBUcnVzdGVk
SW1tMzIoOCksIHgyKS5saW5rVG8obG9jYWwwLCAmaml0KTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBsb2NhbDIgPSBqaXQuYnJhbmNoQWRkNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVz
dGVkSW1tMzIoOCksIHgyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434656</attachid>
            <date>2021-07-30 12:56:30 -0700</date>
            <delta_ts>2021-08-07 05:48:14 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-228047-20210730145629.patch</filename>
            <type>text/plain</type>
            <size>61669</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
OWZmZWNhOTY5ZTk5MDhlZDhhZjU5OGUxZTc3YTU5MjIzZDViNGVkLi5hYTcwMzY2MDJkNThlOGMx
NmIwYWQ2NWE5MGY4ZjhiYTlkZGViOGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNzUgQEAKKzIwMjEtMDctMzAgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBQcmUvUG9zdC1JbmRleGVkIEFkZHJlc3MgTW9kZSB0byBBaXIg
Zm9yIEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjgwNDcKKworICAgICAgICBSZXZpZXdlZCBieSBQaGlsIFBpemxvLgorCisgICAgICAgIFBy
ZS1pbmRleGVkIGFkZHJlc3NpbmcgbWVhbnMgdGhhdCB0aGUgYWRkcmVzcyBpcyB0aGUgc3VtIG9m
IHRoZSB2YWx1ZSBpbiB0aGUgNjQtYml0IGJhc2UgcmVnaXN0ZXIgCisgICAgICAgIGFuZCBhbiBv
ZmZzZXQsIGFuZCB0aGUgYWRkcmVzcyBpcyB0aGVuIHdyaXR0ZW4gYmFjayB0byB0aGUgYmFzZSBy
ZWdpc3Rlci4gQW5kIHBvc3QtaW5kZXhlZCAKKyAgICAgICAgYWRkcmVzc2luZyBtZWFucyB0aGF0
IHRoZSBhZGRyZXNzIGlzIHRoZSB2YWx1ZSBpbiB0aGUgNjQtYml0IGJhc2UgcmVnaXN0ZXIsIGFu
ZCB0aGUgc3VtIG9mIHRoZSAKKyAgICAgICAgYWRkcmVzcyBhbmQgdGhlIG9mZnNldCBpcyB0aGVu
IHdyaXR0ZW4gYmFjayB0byB0aGUgYmFzZSByZWdpc3Rlci4gVGhleSBhcmUgcmVsYXRpdmVseSBj
b21tb24gZm9yIAorICAgICAgICBsb29wcyB0byBpdGVyYXRlIG92ZXIgYW4gYXJyYXkgYnkgaW5j
cmVhc2luZy9kZWNyZWFzaW5nIGEgcG9pbnRlciBpbnRvIHRoZSBhcnJheSBhdCBlYWNoIGl0ZXJh
dGlvbi4gCisgICAgICAgIFdpdGggc3VjaCBhbiBhZGRyZXNzaW5nIG1vZGUsIHRoZSBpbnN0cnVj
dGlvbiBzZWxlY3RvciBjYW4gbWVyZ2UgdGhlIGluY3JlbWVudCBhbmQgYWNjZXNzIHRoZSBhcnJh
eS4KKworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAg
ICAgICMjIFByZS1JbmRleCBBZGRyZXNzIE1vZGUgRm9yIExvYWQgIyMKKyAgICAgICAgIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgIExEUiBXdCwgW1huLCAj
aW1tXSEKKworICAgICAgICBJbiBCMyBSZWR1Y3Rpb24gU3RyZW5ndGgsIHNpbmNlIHdlIGhhdmUg
dGhpcyByZWR1Y3Rpb24gcnVsZToKKyAgICAgICAgICAgIFR1cm4gdGhpczogTG9hZChBZGQoYWRk
cmVzcywgb2Zmc2V0MSksIG9mZnNldCA9IG9mZnNldDIpCisgICAgICAgICAgICBJbnRvIHRoaXM6
IExvYWQoYWRkcmVzcywgb2Zmc2V0ID0gb2Zmc2V0MSArIG9mZnNldDIpCisKKyAgICAgICAgVGhl
biwgdGhlIGVxdWl2YWxlbnQgcGF0dGVybiBpczoKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQo
YmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBtZW1vcnkgPSBMb2Fk
KGJhc2UsIG9mZnNldCkKKworICAgICAgICBGaXJzdCwgd2UgY29udmVydCBpdCB0byB0aGUgY2Fu
b25pY2FsIGZvcm06CisgICAgICAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAg
ICAgICAgICAgIG5ld01lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KSAvLyBtb3ZlIHRoZSBtZW1v
cnkgdG8ganVzdCBhZnRlciB0aGUgYWRkcmVzcworICAgICAgICAgICAgLi4uCisgICAgICAgICAg
ICBtZW1vcnkgPSBJZGVudGl0eShuZXdNZW1vcnkpCisKKyAgICAgICAgTmV4dCwgbG93ZXIgdG8g
QWlyOgorICAgICAgICAgICAgTW92ZSAlYmFzZSwgJWFkZHJlc3MKKyAgICAgICAgICAgIE1vdmUg
KCVhZGRyZXNzLCBwcmVmaXgob2Zmc2V0KSksICVuZXdNZW1vcnkKKworICAgICAgICAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIyBQb3N0LUluZGV4IEFk
ZHJlc3MgTW9kZSBGb3IgTG9hZCAjIworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIworCisgICAgICAgIExEUiBXdCwgW1huXSwgI2ltbQorCisgICAgICAgIFRo
ZW4sIHRoZSBlcXVpdmFsZW50IHBhdHRlcm4gaXM6CisgICAgICAgICAgICBtZW1vcnkgPSBMb2Fk
KGJhc2UsIDApCisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFz
ZSwgb2Zmc2V0KQorCisgICAgICAgIEZpcnN0LCB3ZSBjb252ZXJ0IGl0IHRvIHRoZSBjYW5vbmlj
YWwgZm9ybToKKyAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50CisgICAgICAgICAgICBu
ZXdBZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIG1lbW9yeSA9IExvYWQo
YmFzZSwgMCkgLy8gbW92ZSB0aGUgb2Zmc2V0IGFuZCBhZGRyZXNzIHRvIGp1c3QgYmVmb3JlIHRo
ZSBtZW1vcnkKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgb2Zmc2V0ID0gSWRlbnRpdHko
bmV3T2Zmc2V0KQorICAgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCisK
KyAgICAgICAgTmV4dCwgbG93ZXIgdG8gQWlyOgorICAgICAgICAgICAgTW92ZSAlYmFzZSwgJW5l
d0FkZHJlc3MKKyAgICAgICAgICAgIE1vdmUgKCVuZXdBZGRyZXNzLCBwb3N0Zml4KG9mZnNldCkp
LCAlbWVtb3J5CisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAg
ICAgIyMgUGF0dGVybiBNYXRjaCBBbGdvcml0aG0gIyMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKKworICAgICAgICBUbyBkZXRlY3QgdGhlIHBhdHRlcm4gZm9yIHByZWZp
eC9wb3N0Zml4IGluY3JlbWVudCBhZGRyZXNzIGlzIHRyaWNreSBkdWUgdG8gdGhlIHN0cnVjdHVy
ZSBpbiBCMyBJUi4gVGhlIAorICAgICAgICBhbGdvcml0aG0gdXNlZCBpbiB0aGlzIHBhdGNoIGlz
IHRvIGNvbGxlY3QgdGhlIGZpcnN0IHZhbGlkIHZhbHVlcyAoYWRkL2xvYWQpLCB0aGVuIHNlYXJj
aCBmb3IgYW55IAorICAgICAgICBwYWlyZWQgdmFsdWUgKGxvYWQvYWRkKSB0byBtYXRjaCBhbGwg
b2YgdGhlbS4gSW4gd29yc3QgY2FzZSwgdGhlIHJ1bnRpbWUgY29tcGxleGl0eSBpcyBPKG5eMikg
CisgICAgICAgIHdoZW4gbiBpcyB0aGUgbnVtYmVyIG9mIGFsbCB2YWx1ZXMuCisKKyAgICAgICAg
QWZ0ZXIgY29sbGVjdGluZyB0d28gc2V0cyBvZiBjYW5kaWRhdGVzLCB3ZSBtYXRjaCB0aGUgcHJl
Zml4IGluY3JlbWVudGFsIGFkZHJlc3MgZmlyc3Qgc2luY2UgaXQgc2VlbXMgCisgICAgICAgIG1v
cmUgYmVuZWZpY2lhbCB0byB0aGUgY29tcGlsZXIgKHNob3duIGluIHRoZSBuZXh0IHNlY3Rpb24p
LiBBbmQgdGhlbiwgZ28gZm9yIHRoZSBwb3N0Zml4IG9uZS4KKworICAgICAgICAjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMjIFRlc3QgZm9y
IFByZS9Qb3N0LUluY3JlbWVudCBBZGRyZXNzIE1vZGUgIyMKKyAgICAgICAgIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgIEdpdmVuIExvb3Ag
d2l0aCBQcmUtSW5jcmVtZW50OgorICAgICAgICBpbnQ2NF90IGxkcl9wcmUoaW50NjRfdCAqcCkg
eworICAgICAgICAgICAgaW50NjRfdCByZXMgPSAwOworICAgICAgICAgICAgd2hpbGUgKHJlcyA8
IDEwKQorICAgICAgICAgICAgICAgIHJlcyArPSAqKytwOworICAgICAgICAgICAgcmV0dXJuIHJl
czsKKyAgICAgICAgfQorCisgICAgICAgIEIzIElSOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQkIjMDogOyBm
cmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICAgICAgSW50NjQgYkAwID0gQ29uc3Q2NCgwKQor
ICAgICAgICAgICAgSW50NjQgYkAyID0gQXJndW1lbnRSZWcoJXgwKQorICAgICAgICAgICAgVm9p
ZCBiQDIwID0gVXBzaWxvbigkMChiQDApLCBeMTgsIFdyaXRlc0xvY2FsU3RhdGUpCisgICAgICAg
ICAgICBWb2lkIGJAMjEgPSBVcHNpbG9uKGJAMiwgXjE5LCBXcml0ZXNMb2NhbFN0YXRlKQorICAg
ICAgICAgICAgVm9pZCBiQDQgPSBKdW1wKFRlcm1pbmFsKQorICAgICAgICBTdWNjZXNzb3JzOiAj
MQorICAgICAgICBCQiMxOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRlY2Vz
c29yczogIzAsICMyCisgICAgICAgICAgICBJbnQ2NCBiQDE4ID0gUGhpKFJlYWRzTG9jYWxTdGF0
ZSkKKyAgICAgICAgICAgIEludDY0IGJAMTkgPSBQaGkoUmVhZHNMb2NhbFN0YXRlKQorICAgICAg
ICAgICAgSW50NjQgYkA3ID0gQ29uc3Q2NCgxMCkKKyAgICAgICAgICAgIEludDMyIGJAOCA9IEFi
b3ZlRXF1YWwoYkAxOCwgJDEwKGJANykpCisgICAgICAgICAgICBWb2lkIGJAOSA9IEJyYW5jaChi
QDgsIFRlcm1pbmFsKQorICAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiMzLCBFbHNlOiMyCisgICAg
ICAgIEJCIzI6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNzb3JzOiAj
MQorICAgICAgICAgICAgSW50NjQgYkAxMCA9IENvbnN0NjQoOCkKKyAgICAgICAgICAgIEludDY0
IGJAMTEgPSBBZGQoYkAxOSwgJDgoYkAxMCkpCisgICAgICAgICAgICBJbnQ2NCBiQDEzID0gTG9h
ZChiQDExLCBDb250cm9sRGVwZW5kZW50fFJlYWRzOlRvcCkKKyAgICAgICAgICAgIEludDY0IGJA
MTQgPSBBZGQoYkAxOCwgYkAxMykKKyAgICAgICAgICAgIFZvaWQgYkAyMiA9IFVwc2lsb24oYkAx
NCwgXjE4LCBXcml0ZXNMb2NhbFN0YXRlKQorICAgICAgICAgICAgVm9pZCBiQDIzID0gVXBzaWxv
bihiQDExLCBeMTksIFdyaXRlc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBWb2lkIGJAMTYgPSBK
dW1wKFRlcm1pbmFsKQorICAgICAgICBTdWNjZXNzb3JzOiAjMQorICAgICAgICBCQiMzOiA7IGZy
ZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgIFByZWRlY2Vzc29yczogIzEKKyAgICAgICAgICAg
IFZvaWQgYkAxNyA9IFJldHVybihiQDE4LCBUZXJtaW5hbCkKKyAgICAgICAgVmFyaWFibGVzOgor
ICAgICAgICAgICAgSW50NjQgdmFyMAorICAgICAgICAgICAgSW50NjQgdmFyMQorICAgICAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgICAgICBXL08gUHJlLUluY3JlbWVudCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAu
Li4KKyAgICAgICAgQkIjMjogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNl
c3NvcnM6ICMxCisgICAgICAgICAgICBNb3ZlICQ4LCAleDMsICQ4KGJAMTIpCisgICAgICAgICAg
ICBBZGQ2NCAkOCwgJXgwLCAleDEsIGJAMTEKKyAgICAgICAgICAgIE1vdmUgKCV4MCwleDMpLCAl
eDAsIGJAMTMKKyAgICAgICAgICAgIEFkZDY0ICV4MCwgJXgyLCAleDIsIGJAMTQKKyAgICAgICAg
ICAgIE1vdmUgJXgxLCAleDAsIGJAMjMKKyAgICAgICAgICAgIEp1bXAgYkAxNgorICAgICAgICBT
dWNjZXNzb3JzOiAjMQorICAgICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVy8gUHJlLUluY3Jl
bWVudCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAuLi4KKyAgICAgICAgQkIjMjogOyBm
cmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNlc3NvcnM6ICMxCisgICAgICAgICAg
ICBNb3ZlV2l0aEluY3JlbWVudDY0ICgleDAsUHJlKCQ4KSksICV4MiwgYkAxMworICAgICAgICAg
ICAgQWRkNjQgJXgyLCAleDEsICV4MSwgYkAxNAorICAgICAgICAgICAgSnVtcCBiQDE2CisgICAg
ICAgIFN1Y2Nlc3NvcnM6ICMxCisgICAgICAgIC4uLgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBHaXZlbiBM
b29wIHdpdGggUG9zdC1JbmNyZW1lbnQ6CisgICAgICAgIGludDY0X3QgbGRyX3ByZShpbnQ2NF90
ICpwKSB7CisgICAgICAgICAgICBpbnQ2NF90IHJlcyA9IDA7CisgICAgICAgICAgICB3aGlsZSAo
cmVzIDwgMTApCisgICAgICAgICAgICAgICAgcmVzICs9ICpwKys7CisgICAgICAgICAgICByZXR1
cm4gcmVzOworICAgICAgICB9CisKKyAgICAgICAgQjMgSVI6CisgICAgICAgIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCQiMw
OiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgICAgICBJbnQ2NCBiQDAgPSBDb25zdDY0
KDApCisgICAgICAgICAgICBJbnQ2NCBiQDIgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgICAg
ICBWb2lkIGJAMjAgPSBVcHNpbG9uKCQwKGJAMCksIF4xOCwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAg
ICAgICAgICAgIFZvaWQgYkAyMSA9IFVwc2lsb24oYkAyLCBeMTksIFdyaXRlc0xvY2FsU3RhdGUp
CisgICAgICAgICAgICBWb2lkIGJANCA9IEp1bXAoVGVybWluYWwpCisgICAgICAgIFN1Y2Nlc3Nv
cnM6ICMxCisgICAgICAgIEJCIzE6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJl
ZGVjZXNzb3JzOiAjMCwgIzIKKyAgICAgICAgICAgIEludDY0IGJAMTggPSBQaGkoUmVhZHNMb2Nh
bFN0YXRlKQorICAgICAgICAgICAgSW50NjQgYkAxOSA9IFBoaShSZWFkc0xvY2FsU3RhdGUpCisg
ICAgICAgICAgICBJbnQ2NCBiQDcgPSBDb25zdDY0KDEwKQorICAgICAgICAgICAgSW50MzIgYkA4
ID0gQWJvdmVFcXVhbChiQDE4LCAkMTAoYkA3KSkKKyAgICAgICAgICAgIFZvaWQgYkA5ID0gQnJh
bmNoKGJAOCwgVGVybWluYWwpCisgICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46IzMsIEVsc2U6IzIK
KyAgICAgICAgQkIjMjogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNlc3Nv
cnM6ICMxCisgICAgICAgICAgICBJbnQ2NCBiQDEwID0gTG9hZChiQDE5LCBDb250cm9sRGVwZW5k
ZW50fFJlYWRzOlRvcCkKKyAgICAgICAgICAgIEludDY0IGJAMTEgPSBBZGQoYkAxOCwgYkAxMCkK
KyAgICAgICAgICAgIEludDY0IGJAMTIgPSBDb25zdDY0KDgpCisgICAgICAgICAgICBJbnQ2NCBi
QDEzID0gQWRkKGJAMTksICQ4KGJAMTIpKQorICAgICAgICAgICAgVm9pZCBiQDIyID0gVXBzaWxv
bihiQDExLCBeMTgsIFdyaXRlc0xvY2FsU3RhdGUpCisgICAgICAgICAgICBWb2lkIGJAMjMgPSBV
cHNpbG9uKGJAMTMsIF4xOSwgV3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAgICAgICAgIFZvaWQgYkAx
NiA9IEp1bXAoVGVybWluYWwpCisgICAgICAgIFN1Y2Nlc3NvcnM6ICMxCisgICAgICAgIEJCIzM6
IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgUHJlZGVjZXNzb3JzOiAjMQorICAgICAg
ICAgICAgVm9pZCBiQDE3ID0gUmV0dXJuKGJAMTgsIFRlcm1pbmFsKQorICAgICAgICBWYXJpYWJs
ZXM6CisgICAgICAgICAgICBJbnQ2NCB2YXIwCisgICAgICAgICAgICBJbnQ2NCB2YXIxCisgICAg
ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisgICAgICAgIFcvTyBQb3N0LUluY3JlbWVudCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
ICAgICAuLi4KKyAgICAgICAgQkIjMjogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICBQ
cmVkZWNlc3NvcnM6ICMxCisgICAgICAgICAgICBNb3ZlICgleDApLCAleDIsIGJAMTAKKyAgICAg
ICAgICAgIEFkZDY0ICV4MiwgJXgxLCAleDEsIGJAMTEKKyAgICAgICAgICAgIEFkZDY0ICQ4LCAl
eDAsICV4MCwgYkAxMworICAgICAgICAgICAgSnVtcCBiQDE2CisgICAgICAgIFN1Y2Nlc3NvcnM6
ICMxCisgICAgICAgIC4uLgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBXLyBQb3N0LUluY3JlbWVudCBBZGRy
ZXNzIE1vZGU6CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAuLi4KKyAgICAgICAgQkIjMjogOyBmcmVxdWVuY3kg
PSAxLjAwMDAwMAorICAgICAgICBQcmVkZWNlc3NvcnM6ICMxCisgICAgICAgICAgICBNb3ZlV2l0
aEluY3JlbWVudDY0ICgleDAsUG9zdCgkOCkpLCAleDIsIGJAMTAKKyAgICAgICAgICAgIEFkZDY0
ICV4MiwgJXgxLCAleDEsIGJAMTEKKyAgICAgICAgICAgIEp1bXAgYkAxNgorICAgICAgICBTdWNj
ZXNzb3JzOiAjMQorICAgICAgICAuLi4KKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAo
SlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQcmVJbmRleEFkZHJlc3M6OlByZUluZGV4QWRk
cmVzcyk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFk
ZHJlc3M6OlBvc3RJbmRleEFkZHJlc3MpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxvYWQ2NCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxvYWQzMik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN0b3JlNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlckFSTTY0OjpzdG9yZTMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20uY3Bw
OgorICAgICAgICAoSlNDOjp0ZXN0U3RvcmVQcmVQb3N0SW5kZXgzMik6CisgICAgICAgIChKU0M6
OnRlc3RTdG9yZVByZVBvc3RJbmRleDY0KToKKyAgICAgICAgKEpTQzo6dGVzdExvYWRQcmVQb3N0
SW5kZXgzMik6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJlUG9zdEluZGV4NjQpOgorICAgICAg
ICAqIGIzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OmNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKToKKyAgICAgICAgKiBi
My9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oLgorICAgICAgICAqIGIzL0IzR2Vu
ZXJhdGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6CisgICAgICAgICog
YjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM1ZhbHVlS2V5Lmg6CisgICAgICAg
ICogYjMvQjNWYWx1ZUtleUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlS2V5OjpW
YWx1ZUtleSk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6anNIYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpk
dW1wIGNvbnN0KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMv
YWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnByZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwb3N0SW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzUHJlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OmlzUG9zdEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc01lbW9y
eSBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YmFzZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjppc0dQIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQ
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkUHJlSW5kZXhGb3Jt
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZEZvcm0gY29uc3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1ByZUlu
ZGV4QWRkcmVzcyBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNQb3N0SW5k
ZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6Cisg
ICAgICAgICogYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmI6CisgICAgICAgICogYjMvdGVzdGIz
Lmg6CisgICAgICAgICogYjMvdGVzdGIzXzMuY3BwOgorICAgICAgICAodGVzdExvYWRQcmVJbmRl
eDMyKToKKyAgICAgICAgKHRlc3RMb2FkUHJlSW5kZXg2NCk6CisgICAgICAgICh0ZXN0TG9hZFBv
c3RJbmRleDMyKToKKyAgICAgICAgKHRlc3RMb2FkUG9zdEluZGV4NjQpOgorICAgICAgICAoYWRk
U2hyVGVzdHMpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6aml0V3JpdGVUaHVua0dlbmVyYXRvcik6CisKIDIwMjEtMDctMjkgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIGJ1aWxkaW5n
IFdlYkdQVSBhbmQgdGhlIFdITFNMIGNvbXBpbGVyIHRvIGRlY3JlYXNlIGJpbmFyeSBzaXplCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggNTVkY2ExZmYwNTNmNGNlOTg1ZDIxZmQ2ZGJj
M2RkM2IwZGU3Y2IwMC4uYTY0NzAyZGI2MDFjYzIxYWJiNGMyNjI5NDU3ZGQxYTc1OWMzMDIwZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMTEzLDYgKzExMyw3IEBAIGIzL0IzQmFz
aWNCbG9jay5jcHAKIGIzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCiBiMy9CM0JvdHRvbVR1cGxl
VmFsdWUuY3BwCiBiMy9CM0JyZWFrQ3JpdGljYWxFZGdlcy5jcHAKK2IzL0IzQ2Fub25pY2FsaXpl
UHJlUG9zdEluY3JlbWVudHMuY3BwCiBiMy9CM0NDYWxsVmFsdWUuY3BwCiBiMy9CM0Nhc2VDb2xs
ZWN0aW9uLmNwcAogYjMvQjNDaGVja1NwZWNpYWwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCmluZGV4IDNk
MTk0OWE0MDc4NWQ5OWNhNjE1OTVhYWIwNGJlNmYxZDBkOTZiYTMuLjIzNTRjNDUzNjhjN2MwZDVj
ZTkwMThhY2ZmMjg0YzRhMGEwNDMxYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCkBAIC0yNDUsNiArMjQ1
LDM0IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH07CiAKKyAgICAvLyBQcmVJbmRleEFkZHJl
c3M6CisgICAgLy8KKyAgICAvLyBEZXNjcmliZXMgYW4gYWRkcmVzcyB3aXRoIGJhc2UgYWRkcmVz
cyBhbmQgcHJlLWluY3JlbWVudC9kZWNyZW1lbnQgaW5kZXguCisgICAgc3RydWN0IFByZUluZGV4
QWRkcmVzcyB7CisgICAgICAgIFByZUluZGV4QWRkcmVzcyhSZWdpc3RlcklEIGJhc2UsIGludCBp
bmRleCkKKyAgICAgICAgICAgIDogYmFzZShiYXNlKQorICAgICAgICAgICAgLCBpbmRleChpbmRl
eCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBiYXNlOworICAg
ICAgICBpbnQgaW5kZXg7CisgICAgfTsKKworICAgIC8vIFBvc3RJbmRleEFkZHJlc3M6CisgICAg
Ly8KKyAgICAvLyBEZXNjcmliZXMgYW4gYWRkcmVzcyB3aXRoIGJhc2UgYWRkcmVzcyBhbmQgcG9z
dC1pbmNyZW1lbnQvZGVjcmVtZW50IGluZGV4LgorICAgIHN0cnVjdCBQb3N0SW5kZXhBZGRyZXNz
IHsKKyAgICAgICAgUG9zdEluZGV4QWRkcmVzcyhSZWdpc3RlcklEIGJhc2UsIGludCBpbmRleCkK
KyAgICAgICAgICAgIDogYmFzZShiYXNlKQorICAgICAgICAgICAgLCBpbmRleChpbmRleCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBiYXNlOworICAgICAgICBp
bnQgaW5kZXg7CisgICAgfTsKKwogICAgIC8vIEFic29sdXRlQWRkcmVzczoKICAgICAvLwogICAg
IC8vIERlc2NyaWJlcyBhbiBtZW1vcnkgb3BlcmFuZCBnaXZlbiBieSBhIHBvaW50ZXIuICBGb3Ig
cmVndWxhciBsb2FkICYgc3RvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggMjk2ZTg4ZjliNTQ2MmM0YWY3ZDFm
NDc0MGRjODJiYmFlYjU2ZjA0MC4uZTZiZmJlYzYwMDFjMTBjNjFlOWYyNjZlZmYyN2FkNmYxMGU4
OWY4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTTY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTTY0LmgKQEAgLTE0NDcsOSArMTQ0NywxNCBAQCBwdWJsaWM6CiAgICAgICAg
IGxvYWQ8NjQ+KGFkZHJlc3MsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgbG9hZDY0KFJlZ2lz
dGVySUQgc3JjLCBQb3N0SW5kZXggc2ltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgbG9h
ZDY0KFByZUluZGV4QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAg
IG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLCBzaW1tKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubGRyPDY0PihkZXN0LCBzcmMuYmFzZSwgUHJlSW5kZXgoc3JjLmluZGV4KSk7CisgICAgfQor
CisgICAgdm9pZCBsb2FkNjQoUG9zdEluZGV4QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLmJhc2UsIFBvc3RJ
bmRleChzcmMuaW5kZXgpKTsKICAgICB9CiAKICAgICBEYXRhTGFiZWwzMiBsb2FkNjRXaXRoQWRk
cmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQpAQCAtMTU0
OCw2ICsxNTUzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDwzMj4oYWRkcmVzcywgZGVzdCk7
CiAgICAgfQogCisgICAgdm9pZCBsb2FkMzIoUHJlSW5kZXhBZGRyZXNzIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihkZXN0LCBzcmMuYmFz
ZSwgUHJlSW5kZXgoc3JjLmluZGV4KSk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoUG9zdElu
ZGV4QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxkcjwzMj4oZGVzdCwgc3JjLmJhc2UsIFBvc3RJbmRleChzcmMuaW5kZXgpKTsKKyAgICB9
CisKICAgICBEYXRhTGFiZWwzMiBsb2FkMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3Mg
YWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgRGF0YUxhYmVsMzIgbGFi
ZWwodGhpcyk7CkBAIC0xNzQ3LDcgKzE3NjIsMTcgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGQ8NjQ+KG1lbW9yeVRlbXBSZWdpc3RlciwgbWVtb3J5VGVtcFJlZ2lzdGVyLCBhZGRy
ZXNzLmluZGV4LCBpbmRleEV4dGVuZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOwogICAg
ICAgICBtX2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgYWRkcmVzcy5iYXNlLCBtZW1vcnlUZW1wUmVn
aXN0ZXIpOwogICAgIH0KLSAgICAKKworICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywg
UHJlSW5kZXhBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8NjQ+
KHNyYywgZGVzdC5iYXNlLCBQcmVJbmRleChkZXN0LmluZGV4KSk7CisgICAgfQorCisgICAgdm9p
ZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBQb3N0SW5kZXhBZGRyZXNzIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgZGVzdC5iYXNlLCBQb3N0SW5kZXgoZGVz
dC5pbmRleCkpOworICAgIH0KKwogICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgY29u
c3Qgdm9pZCogYWRkcmVzcykKICAgICB7CiAgICAgICAgIHN0b3JlPDY0PihzcmMsIGFkZHJlc3Mp
OwpAQCAtMTc5MSwxMSArMTgxNiw2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmU2NChkYXRhVGVt
cFJlZ2lzdGVyLCBhZGRyZXNzKTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgUG9zdEluZGV4IHNpbW0pCi0gICAgewotICAgICAgICBt
X2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgZGVzdCwgc2ltbSk7Ci0gICAgfQotICAgIAogICAgIERh
dGFMYWJlbDMyIHN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBB
ZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsK
QEAgLTE4OTUsNiArMTkxNSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBS
ZWdpc3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQg
c3JjLCBQcmVJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0
cjwzMj4oc3JjLCBkZXN0LmJhc2UsIFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjwzMj4oc3JjLCBkZXN0LmJhc2UsIFBvc3RJbmRl
eChkZXN0LmluZGV4KSk7CisgICAgfQorCiAgICAgRGF0YUxhYmVsMzIgc3RvcmUzMldpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAg
ICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAppbmRleCBmNmQxNmNmZDk2MDZlMDY3YzBkOTUyNmVkOGQz
NmEyZjE3ZWE2MjRmLi4xY2E2OTgzZWI3MGQ5NjQwYmU0ZmIyZjExMGUyZjhlMDFmMzhmODM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtMjIx
Miw2ICsyMjEyLDE3NiBAQCB2b2lkIHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQo
KQogICAgICAgICB9CiAgICAgfQogfQorCit2b2lkIHRlc3RTdG9yZVByZVBvc3RJbmRleDMyKCkK
K3sKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAgIGludHB0cl90IGFkZHIg
PSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZudW1zWzFdKTsKKyAgICBpbnQzMl90IGluZGV4ID0g
c2l6ZW9mKGludDMyX3QpOworCisgICAgYXV0byB0ZXN0MSA9IFsmXSAoaW50MzJfdCBzcmMpIHsK
KyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgewor
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgLy8g
KisrcDEgPSA0OyByZXR1cm4gcDE7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjph
cmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rp
b25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUsIHNyYywgYWRkcik7CisgICAgfTsK
KworICAgIGludDMyX3QqIHAxID0gYml0d2lzZV9jYXN0PGludDMyX3QqPih0ZXN0MSg0KSk7Cisg
ICAgQ0hFQ0tfRVEoKnAxLCA0KTsKKyAgICBDSEVDS19FUSgqLS1wMSwgbnVtc1sxXSk7CisKKyAg
ICBhdXRvIHRlc3QyID0gWyZdIChpbnQzMl90IHNyYykgeworICAgICAgICBhdXRvIHN0b3JlID0g
Y29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAqcDIrKyA9IDU7IHJldHVybiBwMjsK
KyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgQ0NhbGxIZWxw
ZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgaW5kZXgpKTsKKyAg
ICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAg
ICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxp
bnRwdHJfdD4oc3RvcmUsIHNyYywgYWRkcik7CisgICAgfTsKKworICAgIGludDMyX3QqIHAyID0g
Yml0d2lzZV9jYXN0PGludDMyX3QqPih0ZXN0Mig1KSk7CisgICAgQ0hFQ0tfRVEoKnAyLCA0KTsK
KyAgICBDSEVDS19FUSgqLS1wMiwgNSk7Cit9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9zdEluZGV4
NjQoKQoreworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50cHRyX3Qg
YWRkciA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMyX3QgaW5k
ZXggPSBzaXplb2YoaW50NjRfdCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQ2NF90IHNy
YykgeworICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0
KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAg
ICAvLyAqKytwMSA9IDQ7IHJldHVybiBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6
YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRG
dW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0p
OworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAg
ICB9OworCisgICAgaW50NjRfdCogcDEgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHRlc3QxKDQp
KTsKKyAgICBDSEVDS19FUSgqcDEsIDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1zWzFdKTsK
KworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3Qgc3JjKSB7CisgICAgICAgIGF1dG8gc3Rv
cmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRG
dW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsgcmV0dXJu
IHAyOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2Fs
bEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkp
OworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7
CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52
b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50NjRfdCog
cDIgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19FUSgqcDIs
IDQpOworICAgIENIRUNLX0VRKCotLXAyLCA1KTsKK30KKwordm9pZCB0ZXN0TG9hZFByZVBvc3RJ
bmRleDMyKCkKK3sKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAgIGludDMy
X3QgaW5kZXggPSBzaXplb2YoaW50MzJfdCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQz
Ml90IHJlcGxhY2UpIHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxsSGVs
cGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisg
ICAgICAgICAgICAvLyByZXMgPSAqKytwMTsgKnAxID0gNDsgcmV0dXJuIHJlczsKKyAgICAgICAg
ICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwLCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBq
aXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihyZXBsYWNlKSwgQ0NhbGxIZWxw
ZXJzOjpJbXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAg
ICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAg
IGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4o
bG9hZCwgJm51bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0MSg0KSwgMyk7Cisg
ICAgQ0hFQ0tfRVEobnVtc1syXSwgNCk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQzMl90
IHJlcGxhY2UpIHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVy
cyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAg
ICAgICAgICAvLyByZXMgPSAqcDIrKzsgKnAyID0gNTsgcmV0dXJuIHJlczsKKyAgICAgICAgICAg
IGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgaml0
LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVwbGFjZSksIENDYWxsSGVscGVy
czo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICAgICAg
aml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBq
aXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KGxv
YWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVzdDIoNSksIDIpOworICAg
IENIRUNLX0VRKG51bXNbMl0sIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4NjQo
KQoreworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCBpbmRl
eCA9IHNpemVvZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0X3QgcmVw
bGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAg
ICAgIC8vIHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0
LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQ
UjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGppdC5zdG9y
ZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBlcnM6Oklt
cGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJl
dCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihsb2FkLCAm
bnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAgICBDSEVD
S19FUShudW1zWzJdLCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3QgcmVwbGFj
ZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAg
IC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAgaml0Lmxv
YWQ2NChDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQuc3RvcmU2
NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChyZXBsYWNlKSwgQ0NhbGxIZWxwZXJzOjpJbXBs
aWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBqaXQubW92
ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQo
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4obG9hZCwgJm51
bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAgQ0hFQ0tf
RVEobnVtc1syXSwgNSk7Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQp
IHx8IENQVShBUk02NCkKQEAgLTQ4MDUsNiArNDk3NSwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFy
KiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVz
dFhvck5vdFdpdGhMZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhSaWdodFNo
aWZ0NjQoKSk7CiAgICAgUlVOKHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7
CisKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9y
ZVByZVBvc3RJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDMyKCkpOwor
ICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUoQVJN
NjRFKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXpl
UHJlUG9zdEluY3JlbWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25p
Y2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyYzlhZjFkOWI4OWFkNTdm
Nzc3MzY5YzllMTdkZWU2NzZiOGIyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAKQEAgLTAsMCAr
MSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVt
ZW50cy5oIgorCisjaW5jbHVkZSAiQjNCYWNrd2FyZHNEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQmxvY2tJbnNlcnRpb25TZXQuaCIK
KyNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0luc2VydGlvblNldElubGlu
ZXMuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlu
bGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVL
ZXlJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSW5k
ZXhTZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBjYW5vbmljYWxp
emVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCit7CisgICAgaWYgKCFpc0FSTTY0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJv
YywgImNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzIik7CisgICAgdXNpbmcgQXJnID0gQWly
OjpBcmc7CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0IHsgcHJvYyB9OworICAgIEJs
b2NrSW5zZXJ0aW9uU2V0IGJsb2NrSW5zZXJ0aW9uU2V0IHsgcHJvYyB9OworICAgIEJhc2ljQmxv
Y2sqIGJsb2NrIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIGluZGV4IHsgMCB9OworCisgICAg
RG9taW5hdG9ycyYgZG9taW5hdG9ycyA9IHByb2MuZG9taW5hdG9ycygpOworICAgIEJhY2t3YXJk
c0RvbWluYXRvcnMmIGJhY2t3YXJkc0RvbWluYXRvcnMgPSBwcm9jLmJhY2t3YXJkc0RvbWluYXRv
cnMoKTsKKworICAgIEhhc2hNYXA8VmFsdWVLZXksIFZlY3RvcjxWYWx1ZSo+PiBiYXNlT2Zmc2V0
VG9BZGRyZXNzZXM7CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcHJlSW5kZXhD
YW5kaWRhdGVzOworICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFz
ZVRvTWVtb3JpZXM7CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4
Q2FuZGlkYXRlczsKKyAgICBIYXNoTWFwPFZhbHVlKiwgdW5zaWduZWQ+IHZhbHVlVG9JbmRleDsK
KyAgICBJbmRleFNldDxWYWx1ZSo+IGlnbm9yZWRWYWx1ZXM7CisKKyAgICAvLyBQcmUtSW5kZXgg
UGF0dGVybjoKKyAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgLy8g
ICAgIC4uLgorICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKKyAgICAvLyBQ
b3N0LUluZGV4IFBhdHRlcm46CisgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKKyAg
ICAvLyAgICAgLi4uCisgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAg
IGF1dG8gdHJ5UHJlUG9zdEluZGV4ID0gWyZdIChWYWx1ZSogdmFsdWUpIHsKKyAgICAgICAgc3dp
dGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBMb2FkOiB7CisgICAgICAgICAg
ICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworCisgICAg
ICAgICAgICBhdXRvIHRyeVByZVBvc3RJbmRleE1lbW9yeSA9IFsmXSAoKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1lbW9yeS0+dHlwZSgpICE9IEludDMyICYmIG1lbW9yeS0+dHlwZSgpICE9IElu
dDY0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKG1l
bW9yeS0+b2Zmc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzVmFsaWRQ
cmVJbmRleEZvcm0obWVtb3J5LT5vZmZzZXQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1
ZUtleShtZW1vcnktPmNoaWxkKDApLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihtZW1vcnktPm9mZnNl
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghYmFzZU9mZnNldFRvQWRkcmVzc2VzLmNv
bnRhaW5zKGJhc2VPZmZzZXRrZXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRyZXNzIDogYmFzZU9mZnNldFRvQWRk
cmVzc2VzLmdldChiYXNlT2Zmc2V0a2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZUlu
ZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgYmFzZVRvTWVtb3JpZXMuYWRkKG1lbW9yeS0+Y2hpbGQo
MCksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWVtb3J5
KTsKKyAgICAgICAgICAgICAgICB2YWx1ZVRvSW5kZXguYWRkKHZhbHVlLCBpbmRleCk7CisgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICB0cnlQcmVQb3N0SW5kZXhNZW1vcnkoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBZGQ6IHsKKyAgICAgICAg
ICAgIFZhbHVlKiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgVmFsdWUqIHJp
Z2h0ID0gdmFsdWUtPmNoaWxkKDEpOworCisgICAgICAgICAgICBhdXRvIHRyeVBvdGVudGlhbFBv
c3RJbmRleEFkZHJlc3MgPSBbJl0gKCkgeworICAgICAgICAgICAgICAgIGlmICghcmlnaHQtPmhh
c0ludFB0cigpIHx8IHZhbHVlLT50eXBlKCkgIT0gSW50NjQpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSByaWdodC0+YXNJbnRQ
dHIoKTsKKyAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0
YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOworICAgICAgICAgICAgICAgIGlm
IChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybShzbWFs
bE9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAv
LyBzbyBmYXIgdGhpcyBBZGQgdmFsdWUgaXMgYSB2YWxpZCBhZGRyZXNzIGNhbmRpZGF0ZSBmb3Ig
Ym90aCBwcmVmaXggYW5kIHBvc3RmaXggcGF0dGVybgorICAgICAgICAgICAgICAgIFZhbHVlS2V5
IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtleShsZWZ0LCBzdGF0aWNfY2FzdDxpbnQ2NF90PihzbWFs
bE9mZnNldCkpOworICAgICAgICAgICAgICAgIGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5hZGQoYmFz
ZU9mZnNldGtleSwgVmVjdG9yPFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh2YWx1
ZSk7CisgICAgICAgICAgICAgICAgdmFsdWVUb0luZGV4LmFkZCh2YWx1ZSwgaW5kZXgpOworICAg
ICAgICAgICAgICAgIGlmICghYmFzZVRvTWVtb3JpZXMuY29udGFpbnMobGVmdCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBt
ZW1vcnkgOiBiYXNlVG9NZW1vcmllcy5nZXQobGVmdCkpCisgICAgICAgICAgICAgICAgICAgIHBv
c3RJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOworICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgdHJ5UG90ZW50aWFsUG9zdEluZGV4QWRkcmVzcygpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrIDog
cHJvYy5ibG9ja3NJblByZU9yZGVyKCkpIHsKKyAgICAgICAgYmxvY2sgPSBiYXNpY0Jsb2NrOwor
ICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBiYXNpY0Jsb2NrLT5zaXplKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGJhc2ljQmxvY2stPmF0KGluZGV4KTsK
KyAgICAgICAgICAgIHRyeVByZVBvc3RJbmRleCh2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBhdXRvIGNvbnRyb2xFcXVpdmFsZW50ID0gWyZdIChWYWx1ZSogdjEsIFZhbHVlKiB2Mikg
LT4gYm9vbCB7CisgICAgICAgIHJldHVybiAoZG9taW5hdG9ycy5kb21pbmF0ZXModjEtPm93bmVy
LCB2Mi0+b3duZXIpICYmIGJhY2t3YXJkc0RvbWluYXRvcnMuZG9taW5hdGVzKHYyLT5vd25lciwg
djEtPm93bmVyKSkKKyAgICAgICAgICAgIHx8IChkb21pbmF0b3JzLmRvbWluYXRlcyh2Mi0+b3du
ZXIsIHYxLT5vd25lcikgJiYgYmFja3dhcmRzRG9taW5hdG9ycy5kb21pbmF0ZXModjEtPm93bmVy
LCB2Mi0+b3duZXIpKTsKKyAgICB9OworCisgICAgYXV0byBkZXRlY3QgPSBbJl0gKEhhc2hNYXA8
TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgZm9yIChhdXRvIGl0
ciA9IGNhbmRpZGF0ZXMuYmVnaW4oKTsgaXRyICE9IGNhbmRpZGF0ZXMuZW5kKCk7ICsraXRyKSB7
CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gaXRyLT5rZXk7CisgICAgICAgICAg
ICBWYWx1ZSogYWRkcmVzcyA9IGl0ci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoaWdub3JlZFZh
bHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykg
fHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzID09IHByZUluZGV4Q2FuZGlk
YXRlcykgeworICAgICAgICAgICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAg
ICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChiYXNlLCBvZmZz
ZXQpCisgICAgICAgICAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC4uLgorICAgICAgICAgICAgICAgIC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KSAgICAg
ICBtZW1vcnkgPSBJZGVudGl0eShuZXdNZW1vcnkpCisgICAgICAgICAgICAgICAgTWVtb3J5VmFs
dWUqIG5ld01lbW9yeSA9IGluc2VydGlvblNldC5pbnNlcnQ8TWVtb3J5VmFsdWU+KHZhbHVlVG9J
bmRleC5nZXQoYWRkcmVzcykgKyAxLCBMb2FkLCBtZW1vcnktPnR5cGUoKSwgYWRkcmVzcy0+b3Jp
Z2luKCksIG1lbW9yeS0+bGFzdENoaWxkKCkpOworICAgICAgICAgICAgICAgIG5ld01lbW9yeS0+
c2V0T2Zmc2V0KG1lbW9yeS0+b2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIG1lbW9yeS0+cmVw
bGFjZVdpdGhJZGVudGl0eShuZXdNZW1vcnkpOworICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5leGVjdXRlKGFkZHJlc3MtPm93bmVyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld09mZnNldCA9
IENvbnN0YW50CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgbmV3T2Zmc2V0KQorICAgICAgICAgICAgICAg
IC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2Us
IDApCisgICAgICAgICAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4g
IC4uLgorICAgICAgICAgICAgICAgIC8vIG9mZnNldCA9IENvbnN0YW50ICAgICAgICAgICAgICAg
ICBvZmZzZXQgPSBJZGVudGl0eShuZXdPZmZzZXQpCisgICAgICAgICAgICAgICAgLy8gYWRkcmVz
cyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgIGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNz
KQorICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1lbW9yeUluZGV4ID0gdmFsdWVUb0luZGV4Lmdl
dChtZW1vcnkpOworICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdPZmZzZXQgPSBpbnNlcnRpb25T
ZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4obWVtb3J5SW5kZXgsIG1lbW9yeS0+b3JpZ2luKCksIGFk
ZHJlc3MtPmNoaWxkKDEpLT5hc0ludCgpKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbmV3QWRk
cmVzcyA9IGluc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1lbW9yeUluZGV4LCBBZGQsIG1lbW9y
eS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDApLCBuZXdPZmZzZXQpOworICAgICAgICAgICAg
ICAgIGFkZHJlc3MtPmNoaWxkKDEpLT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld09mZnNldCk7Cisg
ICAgICAgICAgICAgICAgYWRkcmVzcy0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdBZGRyZXNzKTsK
KyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShtZW1vcnktPm93bmVyKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQoYWRkcmVzcyk7Cisg
ICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChtZW1vcnkpOworICAgICAgICB9CisgICAgfTsK
KworICAgIGRldGVjdChwcmVJbmRleENhbmRpZGF0ZXMpOworICAgIGRldGVjdChwb3N0SW5kZXhD
YW5kaWRhdGVzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTM5OWJjNjczZWU5NjcwYjgyMzI5MWI3MjZlNTU1OWE3ODUxZTNmZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJ
bmNyZW1lbnRzLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1
cmUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKaW5kZXggY2Q0NGEy
OTE1Nzc3NDBkMjM5OTMwOGMyNjJhNzkyNzU5NWZlN2I0My4uODM2ZmEzMTFjMzZiMzhmZDZkOTdj
ZmY3ZWI1MTU4MDI1N2JkMzA1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzR2VuZXJhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRl
LmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJB
aXJHZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkIzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMu
aCIKICNpbmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzRHVwbGljYXRlVGFpbHMuaCIK
ICNpbmNsdWRlICJCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmgiCkBAIC0xMTksNiAr
MTIwLDkgQEAgdm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQogICAgIG1v
dmVDb25zdGFudHMocHJvY2VkdXJlKTsKICAgICBlbGltaW5hdGVEZWFkQ29kZShwcm9jZWR1cmUp
OwogCisgICAgaWYgKHByb2NlZHVyZS5vcHRMZXZlbCgpID49IDIpCisgICAgICAgIGNhbm9uaWNh
bGl6ZVByZVBvc3RJbmNyZW1lbnRzKHByb2NlZHVyZSk7CisKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHJ1biBwdXJlQ1NFIGhlcmUgdG8gY2xlYW4gdXAgc29tZSBwbGF0Zm9ybSBzcGVjaWZpYyBj
aGFuZ2VzIGZyb20gdGhlIHByZXZpb3VzIHBoYXNlcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODczCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggZDVmYzMxNjQ2NTk2OGViNzM3MWI2ZmYxY2M2ZjgzMTdm
ZWNkZTUyZS4uZWJiMDM1MmNiMzA4MDNkYmMxZmU4MThlMzk5MGJhMzc0NTcwNjYzNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAgLTIwNyw3ICsyMDcsNyBA
QCBwdWJsaWM6CiAKICAgICAgICAgICAgIGZpbmlzaEFwcGVuZGluZ0luc3RydWN0aW9ucyhtX2Js
b2NrVG9CbG9ja1tibG9ja10pOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG1fYmxv
Y2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwogCiAgICAgICAgIEFpcjo6SW5zZXJ0aW9uU2V0IGlu
c2VydGlvblNldChtX2NvZGUpOwpAQCAtNTQ2LDcgKzU0Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gc2NhbGU7CiAgICAgfQot
ICAgIAorCiAgICAgLy8gVGhpcyB0dXJucyB0aGUgZ2l2ZW4gb3BlcmFuZCBpbnRvIGFuIGFkZHJl
c3MuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2Fs
T2Zmc2V0PEludD4+CiAgICAgQXJnIGVmZmVjdGl2ZUFkZHIoVmFsdWUqIGFkZHJlc3MsIEludCBv
ZmZzZXQsIFdpZHRoIHdpZHRoKQpAQCAtMjU1OSw2ICsyNTU5LDQ2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIFByZS1JbmRleCBDYW5vbmljYWwgRm9ybToKKyAgICAgICAgICAgIC8vICAg
ICBhZGRyZXNzID0gYWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkg
PSBsb2FkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC8vIFBvc3QtSW5kZXggQ2Fub25pY2Fs
IEZvcm06CisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gbG9hZChiYXNlLCAwKQorICAgICAg
ICAgICAgLy8gICAgIGFkZHJlc3MgPSBhZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgYXV0
byB0cnlBcHBlbmRJbmNyZW1lbnRBZGRyZXNzID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAg
ICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTW92ZVdpdGhJbmNy
ZW1lbnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50eXBlKCkpOworICAgICAgICAg
ICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlByZUluZGV4LCBBcmc6OlRtcCkg
fHwgIW1faW5kZXgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IG1fYmxvY2stPmF0KG1faW5kZXggLSAxKTsKKyAgICAg
ICAgICAgICAgICBpZiAoYWRkcmVzcy0+b3Bjb2RlKCkgIT0gQWRkIHx8IGFkZHJlc3MtPnR5cGUo
KSAhPSBJbnQ2NCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIGlmIChhZGRyZXNzLT5jaGlsZCgwKSAhPSBtZW1vcnktPmxhc3RDaGlsZCgpIHx8ICFh
ZGRyZXNzLT5jaGlsZCgxKS0+aGFzSW50UHRyKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBhZGRyZXNzLT5jaGls
ZCgxKS0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFs
bE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOworICAgICAg
ICAgICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNWYWxpZFBvc3RJ
bmRleEZvcm0oc21hbGxPZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgICAgICAgICBBcmcgaW5jcmVtZW50QXJnID0gQXJnKCk7CisgICAgICAgICAg
ICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNt
YWxsT2Zmc2V0ID09IG1lbW9yeS0+b2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBp
bmNyZW1lbnRBcmcgPSBBcmc6OnByZUluZGV4KHRtcChhZGRyZXNzKSwgc21hbGxPZmZzZXQpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRBcmcg
PSBBcmc6OnBvc3RJbmRleCh0bXAoYWRkcmVzcyksIHNtYWxsT2Zmc2V0KTsKKworICAgICAgICAg
ICAgICAgIGlmIChpbmNyZW1lbnRBcmcpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHJl
bGF4ZWRNb3ZlRm9yVHlwZShhZGRyZXNzLT50eXBlKCkpLCB0bXAoYWRkcmVzcy0+Y2hpbGQoMCkp
LCB0bXAoYWRkcmVzcykpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbmNy
ZW1lbnRBcmcsIHRtcChtZW1vcnkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9sb2NrZWQuYWRk
KGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgaWYgKHRyeUFwcGVuZEluY3JlbWVudEFkZHJlc3MoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKICAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwg
a2luZCwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlS2V5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oCmlu
ZGV4IGIzMzQ5N2FhMmRjYjQ4NWZmNWYxMWEzMGNjZGNlMmJmMTBhMjhhNmQuLjQ2ZjQ0MGM1MmZk
NGUwY2U5ZGYwOTY1OThjZDVjYzA2ZjM5OTUxYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWVLZXkuaApAQCAtNTYsNiArNTYsOCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAg
IFZhbHVlS2V5KFZhbHVlKiBjaGlsZCwgaW50NjRfdCB2YWx1ZSk7CisKICAgICBWYWx1ZUtleShL
aW5kLCBUeXBlLCBWYWx1ZSogY2hpbGQpOwogCiAgICAgVmFsdWVLZXkoS2luZCwgVHlwZSwgVmFs
dWUqIGxlZnQsIFZhbHVlKiByaWdodCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlS2V5SW5saW5lcy5oCmluZGV4IDE0MTU4ZDUwMWY3M2ZjYmY3MGQ3NTczZjgwMGViMjBiNjJm
YjlhYWYuLmUxODY2MTk0OTI2MjE0MDY2ZmU4OWU1YzcxYjJkMDc3ODA1NDcwMWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oCkBAIC0zMyw2ICszMywx
NCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAoraW5saW5lIFZhbHVlS2V5
OjpWYWx1ZUtleShWYWx1ZSogY2hpbGQsIGludDY0X3QgdmFsdWUpCit7CisgICAgbV9raW5kID0g
T29wczsKKyAgICBtX3R5cGUgPSBWb2lkOworICAgIHUuaW5kaWNlc1swXSA9IGNoaWxkLT5pbmRl
eCgpOworICAgIHUudmFsdWUgPSB2YWx1ZTsKK30KKwogaW5saW5lIFZhbHVlS2V5OjpWYWx1ZUtl
eShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgVmFsdWUqIGNoaWxkKQogICAgIDogbV9raW5kKGtpbmQp
CiAgICAgLCBtX3R5cGUodHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNw
cAppbmRleCAxMDNjNmVjY2EzZDMxNGJiNGVkOGMwMmE0ZDJmMDA5Y2E2NDFkMDAxLi43N2VlODQy
NTEyNGI5ZDhiOGM1ODJmMzlmZjk2OWY2MGZkMTZjYzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuY3BwCkBAIC0xMzAsNiArMTMwLDExIEBAIHVuc2lnbmVkIEFyZzo6anNI
YXNoKCkgY29uc3QKICAgICAgICAgcmVzdWx0ICs9IG1fYmFzZS5pbnRlcm5hbFZhbHVlKCk7CiAg
ICAgICAgIHJlc3VsdCArPSBtX2luZGV4LmludGVybmFsVmFsdWUoKTsKICAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQcmVJbmRleDoKKyAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgcmVzdWx0
ICs9IG1fb2Zmc2V0OworICAgICAgICByZXN1bHQgKz0gbV9iYXNlLmludGVybmFsVmFsdWUoKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdGFjazoKICAgICAgICAgcmVzdWx0ICs9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX3NjYWxlKTsKICAgICAgICAgcmVzdWx0ICs9IHN0YWNrU2xvdCgp
LT5pbmRleCgpOwpAQCAtMTYxLDcgKzE2Niw3IEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludGYoIiQweCVsbHgiLCBzdGF0aWNfY2FzdDxs
b25nIGxvbmcgdW5zaWduZWQ+KG1fb2Zmc2V0KSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IFplcm9SZWc6Ci0gICAgICAgIG91dC5wcmludCgiJSV4enIiKTsKKyAgICAgICAgb3V0LnByaW50
KCIleHpyIik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAg
IG91dC5wcmludCgiKCIsIGJhc2UoKSwgIikiKTsKQEAgLTE4MCw2ICsxODUsMTIgQEAgdm9pZCBB
cmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgICAgIG91dC5wcmludCgi
LCIsIHNjYWxlKCkpOwogICAgICAgICBvdXQucHJpbnQoIikiKTsKICAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIixQcmUo
JCIsIG9mZnNldCgpLCAiKSkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUG9zdEluZGV4
OgorICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIsUG9zdCgkIiwgb2Zmc2V0KCksICIp
KSIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTdGFjazoKICAgICAgICAgaWYgKG9mZnNl
dCgpKQogICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKQEAgLTI2MSw2ICsyNzIsMTIg
QEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6S2luZCBraW5kKQog
ICAgIGNhc2UgQXJnOjpJbmRleDoKICAgICAgICAgb3V0LnByaW50KCJJbmRleCIpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBcmc6OlByZUluZGV4OgorICAgICAgICBvdXQucHJpbnQoIlBy
ZUluZGV4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6UG9zdEluZGV4OgorICAg
ICAgICBvdXQucHJpbnQoIlBvc3RJbmRleCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBB
cmc6OlJlbENvbmQ6CiAgICAgICAgIG91dC5wcmludCgiUmVsQ29uZCIpOwogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAppbmRleCBjZTVhNGU3Mzc5YWQ2
NDQ0NWYwYzNhYmQxMjlmMzI5Yjk0N2ZlODEyLi5lMWY2NDY2ZjAzMjJhYjgyODBiZDRlYjg4ZjYx
ZDlmYzk0N2Y3YmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKQEAgLTc3
LDYgKzc3LDggQEAgcHVibGljOgogICAgICAgICBTdGFjaywKICAgICAgICAgQ2FsbEFyZywKICAg
ICAgICAgSW5kZXgsCisgICAgICAgIFByZUluZGV4LAorICAgICAgICBQb3N0SW5kZXgsCiAKICAg
ICAgICAgLy8gSW1tZWRpYXRlIG9wZXJhbmRzIHRoYXQgY3VzdG9taXplIHRoZSBiZWhhdmlvciBv
ZiBhbiBvcGVyYXRpb24uIFlvdSBjYW4gdGhpbmsgb2YgdGhlbSBhcwogICAgICAgICAvLyBzZWNv
bmRhcnkgb3Bjb2Rlcy4gVGhleSBhcmUgYWx3YXlzICJVc2UiJ2QuCkBAIC02NDksNiArNjUxLDMw
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEFyZzo6aW5kZXgoYmFzZSwgaW5kZXgsIHNjYWxl
LCAwKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFs
dWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBzdGF0aWMgQXJnIHByZUluZGV4KEFpcjo6VG1w
IGJhc2UsIEludCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7Cisg
ICAgICAgIEFTU0VSVChpc0ludDkoaW5kZXgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IFByZUluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFz
ZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVl
OjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIEFyZyBwb3N0SW5kZXgoQWlyOjpUbXAg
YmFzZSwgSW50IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAg
ICAgICAgQVNTRVJUKGlzSW50OShpbmRleCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV9raW5kID0gUG9zdEluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFz
ZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCiAgICAgc3RhdGljIEFyZyByZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIEFyZyByZXN1bHQ7CkBA
IC03OTksNiArODI1LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRl
eDsKICAgICB9CiAKKyAgICBib29sIGlzUHJlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGtpbmQoKSA9PSBQcmVJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUG9zdEluZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUG9zdEluZGV4OworICAg
IH0KKwogICAgIGJvb2wgaXNNZW1vcnkoKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoIChr
aW5kKCkpIHsKQEAgLTgwOCw2ICs4NDQsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU3RhY2s6
CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2Fz
ZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk3
Miw3ICsxMDEwLDcgQEAgcHVibGljOgogCiAgICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0CiAgICAg
ewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIg
fHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXgpOworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFNpbXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwga2lu
ZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBraW5kKCkgPT0gSW5kZXggfHwga2luZCgpID09
IFByZUluZGV4IHx8IGtpbmQoKSA9PSBQb3N0SW5kZXgpOwogICAgICAgICByZXR1cm4gbV9iYXNl
OwogICAgIH0KIApAQCAtOTgyLDcgKzEwMjAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBp
ZiAoa2luZCgpID09IFN0YWNrKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVl
OjpPZmZzZXRUeXBlPihtX3NjYWxlKTsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8
IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2lu
ZCgpID09IEluZGV4KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9
PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IElu
ZGV4IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8fCBraW5kKCkgPT0gUG9zdEluZGV4KTsKICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX29mZnNldCk7CiAgICAg
fQogCkBAIC0xMDQ0LDYgKzEwODIsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQWRkcjoKICAg
ICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAg
ICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNhc2UgUG9zdEluZGV4OgogICAgICAgICBjYXNl
IFN0YWNrOgogICAgICAgICBjYXNlIENhbGxBcmc6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKQEAg
LTEwODEsNiArMTEyMSw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBj
YXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKICAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2Fz
ZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgIGNhc2UgU3RhY2s6
CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAgICAgY2FzZSBCaWdJbW06IC8vIFllcywgd2Ug
YWxsb3cgQmlnSW1tIGFzIGEgZG91YmxlIGltbWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxl
bWVudGluZyBzdGFja21hcHMuCkBAIC0xMjM3LDYgKzEyNzksMjIgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBl
bmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxp
ZFByZUluZGV4Rm9ybShJbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkK
KyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkU2lnbmVkSW1tOShvZmZzZXQpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFt
ZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFBv
c3RJbmRleEZvcm0oSW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisg
ICAgICAgICAgICByZXR1cm4gaXNWYWxpZFNpZ25lZEltbTkob2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKwogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgd2lkdGggdGhl
biB0aGlzIG9wdGltaXN0aWNhbGx5IGFzc3VtZXMgdGhhdCB5b3UncmUgdXNpbmcgdGhlIHJpZ2h0
IHdpZHRoLiBCdXQKICAgICAvLyB0aGUgd2lkdGggaXMgcmVsZXZhbnQgdG8gdmFsaWRpdHksIHNv
IHBhc3NpbmcgYSBudWxsIHdpZHRoIGlzIG9ubHkgdXNlZnVsIGZvciBhc3NlcnRpb25zLiBEb24n
dAogICAgIC8vIHBhc3MgbnVsbCB3aWR0aHMgd2hlbiBjYXNjYWRpbmcgdGhyb3VnaCBBcmdzIGlu
IHRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciEKQEAgLTEyNjUsNiArMTMyMywxMCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEFkZHJGb3JtKG9mZnNldCgpLCB3aWR0aCk7CiAg
ICAgICAgIGNhc2UgSW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEluZGV4Rm9ybShz
Y2FsZSgpLCBvZmZzZXQoKSwgd2lkdGgpOworICAgICAgICBjYXNlIFByZUluZGV4OgorICAgICAg
ICAgICAgcmV0dXJuIGlzVmFsaWRQcmVJbmRleEZvcm0ob2Zmc2V0KCkpOworICAgICAgICBjYXNl
IFBvc3RJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkUG9zdEluZGV4Rm9ybShvZmZz
ZXQoKSk7CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAg
ICAgICBjYXNlIERvdWJsZUNvbmQ6CkBAIC0xMjg0LDYgKzEzNDYsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgU2ltcGxlQWRkcjoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4
dGVuZGVkT2Zmc2V0QWRkcjoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQ
b3N0SW5kZXg6CiAgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBJbmRleDoKQEAgLTEzMjgsNiArMTM5MiwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgogICAgICAgICAgICAgZnVuY3RvcihtX2Jh
c2UsIFVzZSwgR1AsIGFyZ1JvbGUgPT0gVXNlQWRkciA/IGFyZ1dpZHRoIDogcG9pbnRlcldpZHRo
KCkpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAg
IGNhc2UgUG9zdEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZURlZiwgR1As
IGFyZ1JvbGUgPT0gVXNlQWRkciA/IGFyZ1dpZHRoIDogcG9pbnRlcldpZHRoKCkpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5kZXg6CiAgICAgICAgICAgICBmdW5jdG9yKG1f
YmFzZSwgVXNlLCBHUCwgYXJnUm9sZSA9PSBVc2VBZGRyID8gYXJnV2lkdGggOiBwb2ludGVyV2lk
dGgoKSk7CiAgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgsIFVzZSwgR1AsIGFyZ1JvbGUgPT0g
VXNlQWRkciA/IGFyZ1dpZHRoIDogcG9pbnRlcldpZHRoKCkpOwpAQCAtMTM4Myw2ICsxNDUxLDE4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPiht
X29mZnNldCksIG1fZXh0ZW5kKTsKICAgICB9CiAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UHJlSW5k
ZXhBZGRyZXNzIGFzUHJlSW5kZXhBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc1ByZUluZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlByZUluZGV4
QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIG9mZnNldCgpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UG9zdEluZGV4QWRkcmVzcyBhc1Bvc3RJbmRleEFkZHJlc3MoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzUG9zdEluZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXI6OlBvc3RJbmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBvZmZzZXQoKSk7CisgICAgfQor
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFsQ29u
ZGl0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRleCA2NjFl
YWRkMjM3M2M1NGE0YmJhOTQ3YTU0YmRhMjU1N2JkYjhhZTRhLi40OWZlZDFhYWExOWFmNmRkY2Q5
MmMzMzlmNzBiNTc2ZDBkMzk1ZGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAgLTY2MSw2ICs2NjEsMTIgQEAgeDg2XzY0OiBTd2FwNjQg
VUQ6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCiAgICAgVG1wLCBBZGRyCiAKK2FybTY0OiBN
b3ZlV2l0aEluY3JlbWVudDY0IFVEOkc6NjQsIEQ6Rzo2NAorICAgIFByZUluZGV4LCBUbXAgYXMg
bG9hZDY0CisgICAgUG9zdEluZGV4LCBUbXAgYXMgbG9hZDY0CisgICAgVG1wLCBQcmVJbmRleCBh
cyBzdG9yZTY0CisgICAgVG1wLCBQb3N0SW5kZXggYXMgc3RvcmU2NAorCiBNb3ZlMzIgVTpHOjMy
LCBaRDpHOjMyCiAgICAgVG1wLCBUbXAgYXMgemVyb0V4dGVuZDMyVG9Xb3JkCiAgICAgQWRkciwg
VG1wIGFzIGxvYWQzMgpAQCAtNjcxLDYgKzY3NywxMiBAQCBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMy
CiAgICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmUzMgogICAgIHg4NjogSW1tLCBJbmRleCBhcyBz
dG9yZTMyCiAKK2FybTY0OiBNb3ZlV2l0aEluY3JlbWVudDMyIFVEOkc6MzIsIFpEOkc6MzIKKyAg
ICBQcmVJbmRleCwgVG1wIGFzIGxvYWQzMgorICAgIFBvc3RJbmRleCwgVG1wIGFzIGxvYWQzMgor
ICAgIFRtcCwgUHJlSW5kZXggYXMgc3RvcmUzMgorICAgIFRtcCwgUG9zdEluZGV4IGFzIHN0b3Jl
MzIKKwogIyBUaGlzIGlzIGZvciBtb3ZpbmcgYmV0d2VlbiBzcGlsbCBzbG90cy4KIE1vdmUzMiBV
Okc6MzIsIFpEOkc6MzIsIFM6RzozMgogICAgIEFkZHIsIEFkZHIsIFRtcApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCmluZGV4IDM3NDBlZmRi
ZGQxNDZhMzdmNmVkZTlkZGJjMjNkZGJhMDNiMDc2NDYuLmYxYmYxYTQ2Y2ZjODg5ZWMxOTM0NmYy
YzA2YjdjZjUwZjllM2RlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvb3Bjb2RlX2dlbmVyYXRvci5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L29wY29kZV9nZW5lcmF0b3IucmIKQEAgLTIyOSw3ICsyMjksNyBAQCBkZWYgaXNHRih0b2tlbikK
IGVuZAogCiBkZWYgaXNLaW5kKHRva2VuKQotICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwo
QmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQpfChaZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFkZHIp
fChFeHRlbmRlZE9mZnNldEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91Ymxl
Q29uZCl8KFN0YXR1c0NvbmQpKVxaLworICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmln
SW1tKXwoQml0SW1tKXwoQml0SW1tNjQpfChaZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFkZHIpfChF
eHRlbmRlZE9mZnNldEFkZHIpfChJbmRleCl8KFByZUluZGV4KXwoUG9zdEluZGV4KXwoUmVsQ29u
ZCl8KFJlc0NvbmQpfChEb3VibGVDb25kKXwoU3RhdHVzQ29uZCkpXFovCiBlbmQKIAogZGVmIGlz
QXJjaCh0b2tlbikKQEAgLTMwMyw3ICszMDMsNyBAQCBjbGFzcyBQYXJzZXIKIAogICAgIGRlZiBj
b25zdW1lS2luZAogICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKLSAgICAgICAgcGFyc2VF
cnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFplcm9S
ZWcsIFRtcCwgU2ltcGxlQWRkciwgQWRkciwgRXh0ZW5kZWRPZmZzZXRBZGRyLCBJbmRleCwgUmVs
Q29uZCwgUmVzQ29uZCwgRG91YmxlQ29uZCwgb3IgU3RhdHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5k
KHJlc3VsdCkKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0s
IEJpdEltbSwgQml0SW1tNjQsIFplcm9SZWcsIFRtcCwgU2ltcGxlQWRkciwgQWRkciwgRXh0ZW5k
ZWRPZmZzZXRBZGRyLCBJbmRleCwgUHJlSW5kZXgsIFBvc3RJbmRleCwgUmVsQ29uZCwgUmVzQ29u
ZCwgRG91YmxlQ29uZCwgb3IgU3RhdHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKICAg
ICAgICAgYWR2YW5jZQogICAgICAgICByZXN1bHQKICAgICBlbmQKQEAgLTkyOSw2ICs5MjksMTIg
QEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgd2hlbiAiSW5k
ZXgiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRJbmRl
eEZvcm0oYXJnc1sje2luZGV4fV0uc2NhbGUoKSwgYXJnc1sje2luZGV4fV0ub2Zmc2V0KCksICN7
YXJnLndpZHRoQ29kZX0pKSIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9S
RVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICB3aGVuICJQcmVJbmRleCIKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybShhcmdz
WyN7aW5kZXh9XS5vZmZzZXQoKSkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9Q
R0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIHdoZW4gIlBvc3RJbmRleCIKKyAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZFBvc3RJbmRleEZv
cm0oYXJnc1sje2luZGV4fV0ub2Zmc2V0KCkpKSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKICAgICAgICAgICAgICAgICB3aGVuICJCaWdJbW0i
CiAgICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29uZCIKICAgICAgICAgICAgICAgICB3aGVuICJS
ZXNDb25kIgpAQCAtMTIzNSw2ICsxMjQxLDEwIEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikg
ewogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0FkZHJl
c3MoKSIKICAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKICAgICAgICAgICAgICAgICAgICAg
b3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAgICAgICAgICAg
ICB3aGVuICJQcmVJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sj
e2luZGV4fV0uYXNQcmVJbmRleEFkZHJlc3MoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJQb3N0
SW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFz
UG9zdEluZGV4QWRkcmVzcygpIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCiAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENv
bmRpdGlvbigpIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmgKaW5kZXggYzcwMzJlYzA4NGRkZmRkOTM1ZTU1MjdmYWFlOTM1NjgxOTg0ODE3
OS4uNzIxZWIzYWRkNjI3NDhlMmZiMDJkZGY0MjU1N2NjNTlkNWQ4ODBlYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuaApAQCAtMTE0MCw0ICsxMTQwLDkgQEAgdm9pZCBhZGRDb3B5VGVzdHMo
Y29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mKTsK
IAogYm9vbCBzaG91bGRSdW4oY29uc3QgY2hhciogZmlsdGVyLCBjb25zdCBjaGFyKiB0ZXN0TmFt
ZSk7CiAKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCk7Cit2b2lkIHRlc3RMb2FkUHJlSW5kZXg2
NCgpOwordm9pZCB0ZXN0TG9hZFBvc3RJbmRleDMyKCk7Cit2b2lkIHRlc3RMb2FkUG9zdEluZGV4
NjQoKTsKKwogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiM18zLmNwcAppbmRleCA0YzUyYWRhOWNjNDAyZGRlNTM5ODhjYzhmMmY1ZTllMGRkZTJlMTFj
Li5iODliMDE5ZmQ4YmY1ZjA3MTJmNDY2ODY1MGY2MWNkZjgxZGE0YzgzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKQEAgLTI4LDYgKzI4LDMwMCBAQAogCiAjaWYgRU5BQkxF
KEIzX0pJVCkKIAorCit2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlv
bnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQz
Ml90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQz
Ml90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayog
cm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUq
IHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDMyKTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRk
VmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Js
b2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKQorICAgIC8vIHAxID0g
YWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBl
bmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50MzIsIDApOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAg
IFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFi
bGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290LT5hcHBl
bmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhs
b29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxv
Y2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisg
ICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAg
VmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6
R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50
ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHAzID0gcDIgKyAxCisg
ICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAgIC8vIHIzID0gcjIgKyBsb2FkKHAzKQorICAgIC8v
IFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcDMgPSBsb29w
Qm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHkt
PmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA0KSk7CisgICAgbG9vcEJv
ZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwg
cDMpOworICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFk
ZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBM
b2FkLCBJbnQzMiwgT3JpZ2luKCksIHAzKSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJp
YWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRC
bG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Js
b2NrCisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOworCisgICAgcHJvYy5yZXNl
dFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsK
KworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkp
CisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzRdISIpOworCisgICAgYXV0
byB0ZXN0ID0gWyZdICgpIC0+IGludDMyX3QgeworICAgICAgICBpbnQzMl90IHIgPSAwOworICAg
ICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqKytwdHI7CisgICAgICAgIHJl
dHVybiByOworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50MzJfdD4oKmNvZGUsIGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQ
cmVJbmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIp
CisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1
LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDY0X3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAg
IEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sq
IGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9j
LmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQp
OworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAgICAvLyByMSA9IDAKKyAgICAvLyBV
cHNpbG9uKHIxLCBecjIpCisgICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAy
KQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigp
LCBJbnQ2NCwgMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIz
OjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmln
aW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1w
LCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAgLy8gcDIg
PSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUK
KyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2Ms
IEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1
ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9y
aWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdp
bigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJh
bmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxv
Y2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5
X0Jsb2NrCisgICAgLy8gcDMgPSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAg
Ly8gcjMgPSByMiArIGxvYWQocDMpCisgICAgLy8gVXBzaWxvbihyMywgXnIyKQorICAgIC8vIGdv
dG8gbG9vcAorICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEFkZCwgT3JpZ2luKCksIHAyLCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDgpKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgVmFsdWUqIHIzID0gbG9vcEJv
ZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwgcDMpKTsK
KyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9y
aWdpbigpLCByLCByMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9j
LCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJl
dHVybiByMgorICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCByMik7CisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRh
dGUocHJvYyk7CisgICAgZml4U1NBKHByb2MpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rp
b24oKmNvZGUsICIjOF0hIik7CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50NjRfdCB7
CisgICAgICAgIGludDY0X3QgciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAg
ICAgICByICs9ICorK3B0cjsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNL
X0VRKGludm9rZTxpbnQ2NF90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwg
dGVzdCgpKTsKK30KKwordm9pZCB0ZXN0TG9hZFBvc3RJbmRleDMyKCkKK3sKKyAgICBpZiAoT3B0
aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGlu
dDMyX3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGlu
dDMyX3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJs
ZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50MzIpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5h
ZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3Rf
QmxvY2sKKyAgICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpCisgICAgLy8gcDEg
PSBhZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFw
cGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgMCk7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7Cisg
ICAgVmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJp
YWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2Nr
KGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9C
bG9jaworICAgIC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkK
KyAgICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAg
ICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIz
OjpHZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5h
cHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVl
bnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcjMgPSByMiArIGxv
YWQocDIpCisgICAgLy8gcDMgPSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAg
Ly8gVXBzaWxvbihwMywgXnAyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiByMyA9IGxv
b3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9k
eS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHAy
KSk7CisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRk
LCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgNCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJv
YywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZh
cmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgbG9vcEJv
ZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRl
ZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmVf
QmxvY2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUtPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7CisKKyAgICBwcm9jLnJl
c2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NBKHByb2Mp
OworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgaWYgKGlzQVJNNjQo
KSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJdLCAjNCIpOworCisgICAg
YXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDMyX3QgeworICAgICAgICBpbnQzMl90IHIgPSAwOwor
ICAgICAgICB3aGlsZSAociA8IDEwKQorICAgICAgICAgICAgciArPSAqcHRyKys7CisgICAgICAg
IHJldHVybiByOworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50MzJfdD4oKmNvZGUs
IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExv
YWRQb3N0SW5kZXg2NCgpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkg
PCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMywg
NCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQ2NF90KiBwdHIgPSBudW1zOworCisgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0g
cHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKElu
dDY0KTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAg
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAg
Ly8gVXBzaWxvbihyMSwgXnIyKQorICAgIC8vIHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24ocDEs
IF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmln
aW4oKSwgSW50NjQsIDApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9j
LCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwg
T3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
SnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAgIC8v
IHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290byBk
b25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihw
cm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAg
VmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFs
LCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRl
ZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3Bf
Qm9keV9CbG9jaworICAgIC8vIHIzID0gcjIgKyBsb2FkKHAyKQorICAgIC8vIHAzID0gcDIgKyAx
CisgICAgLy8gVXBzaWxvbihyMywgXnIyKQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAv
LyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
cHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLCBwMikpOworICAgIFZhbHVlKiBwMyA9IGxvb3BC
b2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBsb29wQm9keS0+
YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDgpKTsKKyAgICBsb29wQm9k
eS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCBy
Myk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0
LCBPcmlnaW4oKSwgcCwgcDMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
cHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAg
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAv
LyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgcjIpOworCisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZh
bGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3Ry
dWN0aW9uKCpjb2RlLCAiXSwgIzgiKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQ2
NF90IHsKKyAgICAgICAgaW50NjRfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAg
ICAgICAgICAgIHIgKz0gKnB0cisrOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAg
Q0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0
cikpLCB0ZXN0KCkpOworfQorCisKIHZvaWQgdGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJv
MzIoKQogewogICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQpA
QCAtMzY5Nyw2ICszOTkxLDExIEBAIHZvaWQgYWRkU2hyVGVzdHMoY29uc3QgY2hhciogZmlsdGVy
LCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJVTih0ZXN0
WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDApKTsKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigw
eGZmZmZmZmZmLCAxKSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgNjMp
KTsKKworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJl
SW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdExvYWRQb3N0SW5kZXgzMigpKTsKKyAgICBSVU4odGVz
dExvYWRQb3N0SW5kZXg2NCgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAppbmRl
eCA2M2UyNjY3ODg1MjAxOGE3NjgwY2E1ZjA3MTQ2OTY4MTA1ODg0YjNiLi42OWJiNmIyYmU4MTg3
MGI1OTgzMzM2N2FmMjY3NWI3ZjRlZjA1NmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKQEAgLTIzMyw4ICsyMzMsOCBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGpp
dFdyaXRlVGh1bmtHZW5lcmF0bwogICAgIGppdC5yZXQoKTsKIAogICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBsb2NhbDAgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQubG9hZDY0KHgxLCBQb3N0SW5k
ZXgoOCksIHg2KTsKLSAgICBqaXQuc3RvcmU2NCh4NiwgeDMsIFBvc3RJbmRleCg4KSk7CisgICAg
aml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyh4MSwgOCksIHg2KTsK
KyAgICBqaXQuc3RvcmU2NCh4NiwgTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MoeDMs
IDgpKTsKICAgICBzbWFsbENvcHkubGluaygmaml0KTsKICAgICBqaXQuYnJhbmNoU3ViNjQoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgVHJ1c3RlZEltbTMyKDgpLCB4MikubGlua1RvKGxv
Y2FsMCwgJmppdCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbG9jYWwyID0gaml0LmJyYW5j
aEFkZDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgVHJ1c3RlZEltbTMyKDgpLCB4Mik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>