<?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>162349</bug_id>
          
          <creation_ts>2016-09-21 11:12:01 -0700</creation_ts>
          <short_desc>B3 should have comprehensive support for atomic operations</short_desc>
          <delta_ts>2017-03-10 09:50:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>162343</dependson>
    
    <dependson>168833</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1232119</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-21 11:12:01 -0700</bug_when>
    <thetext>On ARM, we can mark loads and stores as having acquire or release semantics.  B3 should know about this.

I believe that this means that a load-acquire will have a write heap range.  This range must be non-empty.  This achieves both goals of acquire: it means that this load itself is not hoistable, and it means that other loads cannot be hoisted above this load, if they overlap with the write range.

I believe that this means that a store-release will have a read heap range.  This range must be non-empty.  The read range prevents other stores from being sunk below this one.  Also, the write range must be expanded to include anything that we don&apos;t want this store to be sunk to.

Maybe we can model acq/rel by just giving MemoryValue a second range?  That would be weird but it seems like it would work.  Alternatively, we would have a B3FencedMemoryValue, which includes the second range.  This second range would behave either as the read range or the write range depending on whether this was a load or a store.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232140</commentid>
    <comment_count>1</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-09-21 11:48:33 -0700</bug_when>
    <thetext>If load acquire has a range and the range is small then you can even reduce it to a consume dependency as you talk about in 162350.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246224</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-30 09:43:38 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; If load acquire has a range and the range is small then you can even reduce
&gt; it to a consume dependency as you talk about in 162350.

I don&apos;t think that the optimizer can do that.  Consider this program, where B3 only sees procedure bar().

foo()
{
    a = load
}

bar()
{
    b = load
    c = load acquire
}

foo()
bar()

In this program, it&apos;s not valid to transform bar() into:

bar()
{
    b = load
    c = load depend b
}

because this does not create a dependency to foo()&apos;s a = load.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246226</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-30 10:13:07 -0700</bug_when>
    <thetext>I think it&apos;s important to review the optimizations we want to be able to do.

On x86, we want to be able to optimize store-load fences by transforming this:

store
fenceRW
load

Into this:

atomic store
load

We also want to turn Depend into a load-load fence, which reduces to no-op later.

On ARM we want to be able to optimize fences also.  For example, we want to optimize load-load fences into load acquires:

load
fenceW
load

into:

load
load acquire

We want to be able to optimize store-load fences like this:

store
fenceRW
load

into:

store release
load acquire

Conversely, we want to be able to lower acq/rel flags.  I believe that we want both store and load to accept such flags.  That means that if we have a store acquire or load release, we want to be able to insert fences.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246227</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-30 10:26:50 -0700</bug_when>
    <thetext>I wonder if the right way to optimize this is with some kind of flow algorithm, or by just doing an on-demand analysis on a per-fence basis.  I bet that the latter is better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279772</commentid>
    <comment_count>5</comment_count>
      <attachid>302367</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-21 21:39:00 -0800</bug_when>
    <thetext>Created attachment 302367
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280421</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-23 12:10:39 -0800</bug_when>
    <thetext>Incredibly, we could represent acq/rel using just a phantomRange in MemoryValue.  If it&apos;s bottom, then we assume no acq/rel.  If it&apos;s not bottom, then we assume:

- acq for loads.
- rel for stores.
- acq/rel for atomics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280429</commentid>
    <comment_count>7</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-02-23 12:20:13 -0800</bug_when>
    <thetext>What would &quot;no acq/rel&quot; mean? seq_cst, or non-atomic?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280436</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-23 12:35:50 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; What would &quot;no acq/rel&quot; mean? seq_cst, or non-atomic?

Short story: it means that the load/store behaves like on ARM without acq/rel flags.

The longer story involves B3&apos;s effects-based memory model, which can be a bit weaker than ARM if you use abstract heaps in certain ways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280438</commentid>
    <comment_count>9</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-02-23 12:38:37 -0800</bug_when>
    <thetext>OK, and then we wouldn&apos;t have seq_cst? Fences would serve that purpose instead (where they&apos;re either acq, rel, or acq_rel)?

I think this works, but I&apos;d need to give it more thought to be sure. Sounds good for now though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280439</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-23 12:39:51 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; OK, and then we wouldn&apos;t have seq_cst? Fences would serve that purpose
&gt; instead (where they&apos;re either acq, rel, or acq_rel)?
&gt; 
&gt; I think this works, but I&apos;d need to give it more thought to be sure. Sounds
&gt; good for now though.

How would seq_cst differ from acq_rel in this context?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280461</commentid>
    <comment_count>11</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-02-23 13:19:54 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; OK, and then we wouldn&apos;t have seq_cst? Fences would serve that purpose
&gt; &gt; instead (where they&apos;re either acq, rel, or acq_rel)?
&gt; &gt; 
&gt; &gt; I think this works, but I&apos;d need to give it more thought to be sure. Sounds
&gt; &gt; good for now though.
&gt; 
&gt; How would seq_cst differ from acq_rel in this context?

Oh I was thinking about x86 seq_cst stores, but I guess you already have ortop for that? Doesn&apos;t seem useful to have seq_cst at all then :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280477</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-23 13:54:50 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; OK, and then we wouldn&apos;t have seq_cst? Fences would serve that purpose
&gt; &gt; &gt; instead (where they&apos;re either acq, rel, or acq_rel)?
&gt; &gt; &gt; 
&gt; &gt; &gt; I think this works, but I&apos;d need to give it more thought to be sure. Sounds
&gt; &gt; &gt; good for now though.
&gt; &gt; 
&gt; &gt; How would seq_cst differ from acq_rel in this context?
&gt; 
&gt; Oh I was thinking about x86 seq_cst stores, but I guess you already have
&gt; ortop for that? Doesn&apos;t seem useful to have seq_cst at all then :)

Relevant: if you&apos;re acq or rel, you will have the `fence` bit set in Effects. In other words, B3 treats acq/rel fences to be ordered with respect to each other.

This means that you can get seq_cst by using acq for your loads and rel for your stores.

This also matches what ARM does, although apparently there&apos;s some new alternate version of acq that doesn&apos;t set the CPU&apos;s equivalent of Effects::fence. That&apos;s OK, because I don&apos;t think we would have a use for that instruction yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280479</commentid>
    <comment_count>13</comment_count>
      <attachid>302571</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-23 13:56:53 -0800</bug_when>
    <thetext>Created attachment 302571
a bit more

Last version before I remove acq/rel flags and switch to relying exclusively on phantomRange.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280555</commentid>
    <comment_count>14</comment_count>
      <attachid>302599</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-23 16:01:23 -0800</bug_when>
    <thetext>Created attachment 302599
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280797</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-24 10:48:03 -0800</bug_when>
    <thetext>Looks like in order to do a really good job of this, we want to have a AtomicMemoryValue that has a Width arg.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280987</commentid>
    <comment_count>16</comment_count>
      <attachid>302731</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-24 20:53:49 -0800</bug_when>
    <thetext>Created attachment 302731
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281083</commentid>
    <comment_count>17</comment_count>
      <attachid>302760</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-25 11:28:16 -0800</bug_when>
    <thetext>Created attachment 302760
added the instructions to Air</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281085</commentid>
    <comment_count>18</comment_count>
      <attachid>302761</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-25 12:01:08 -0800</bug_when>
    <thetext>Created attachment 302761
added isel for fences</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281092</commentid>
    <comment_count>19</comment_count>
      <attachid>302763</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-25 14:20:45 -0800</bug_when>
    <thetext>Created attachment 302763
starting to work on isel for CAS

Turns out, to do it right on ARM, I need to allow the instruction selector to break basic blocks.  That seems super annoying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281142</commentid>
    <comment_count>20</comment_count>
      <attachid>302786</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-26 09:17:54 -0800</bug_when>
    <thetext>Created attachment 302786
built some tools I&apos;ll need for lowering CAS to LL/SC in isel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281148</commentid>
    <comment_count>21</comment_count>
      <attachid>302787</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-26 12:57:03 -0800</bug_when>
    <thetext>Created attachment 302787
wrote some more isel

So much isel. So much fun!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281189</commentid>
    <comment_count>22</comment_count>
      <attachid>302795</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-26 16:22:05 -0800</bug_when>
    <thetext>Created attachment 302795
more

finished CAS isel, I think</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281409</commentid>
    <comment_count>23</comment_count>
      <attachid>302845</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-27 09:53:46 -0800</bug_when>
    <thetext>Created attachment 302845
more

Making x86 CAS invertible</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281614</commentid>
    <comment_count>24</comment_count>
      <attachid>302892</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-27 16:49:45 -0800</bug_when>
    <thetext>Created attachment 302892
done with B3-&gt;Air isel for all atomics

so much isel, so much fun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281661</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-27 18:06:52 -0800</bug_when>
    <thetext>Attachment 302892 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3HeapRange.h:91:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/b3/B3Width.h:75:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Width.h:75:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:95:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirBlockInsertionSet.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 5 in 41 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281699</commentid>
    <comment_count>26</comment_count>
      <attachid>302917</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-27 20:17:25 -0800</bug_when>
    <thetext>Created attachment 302917
adding X86 instruction formatting for atomics</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281716</commentid>
    <comment_count>27</comment_count>
      <attachid>302922</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-27 21:46:41 -0800</bug_when>
    <thetext>Created attachment 302922
more x86 atomic instruction formatting

all that CAS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281782</commentid>
    <comment_count>28</comment_count>
      <attachid>302941</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-28 09:35:07 -0800</bug_when>
    <thetext>Created attachment 302941
so many x86 instructions

I think I finished the MacroAssembler for X86</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281802</commentid>
    <comment_count>29</comment_count>
      <attachid>302949</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-28 10:48:03 -0800</bug_when>
    <thetext>Created attachment 302949
just when I thought I was done with x86

So much x86</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281852</commentid>
    <comment_count>30</comment_count>
      <attachid>302960</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-28 11:47:27 -0800</bug_when>
    <thetext>Created attachment 302960
more x86

I love that you can express or64 with a 32-bit immediate on x86.

Maybe someone should do x86 instruction selection steganography. There are so many ways to waste bits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281857</commentid>
    <comment_count>31</comment_count>
      <attachid>302963</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-28 12:08:11 -0800</bug_when>
    <thetext>Created attachment 302963
it&apos;s starting to compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281871</commentid>
    <comment_count>32</comment_count>
      <attachid>302968</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-28 12:37:23 -0800</bug_when>
    <thetext>Created attachment 302968
more things compile

Filling in some gaps on x86</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281934</commentid>
    <comment_count>33</comment_count>
      <attachid>302981</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-28 13:52:03 -0800</bug_when>
    <thetext>Created attachment 302981
maybe the x86 part compiles now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282081</commentid>
    <comment_count>34</comment_count>
      <attachid>303015</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-28 17:28:54 -0800</bug_when>
    <thetext>Created attachment 303015
it just passed some WeakCAS tests!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282328</commentid>
    <comment_count>35</comment_count>
      <attachid>303078</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-01 10:33:46 -0800</bug_when>
    <thetext>Created attachment 303078
added tests for strong cas</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282422</commentid>
    <comment_count>36</comment_count>
      <attachid>303109</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-01 13:37:10 -0800</bug_when>
    <thetext>Created attachment 303109
added acq/rel tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282552</commentid>
    <comment_count>37</comment_count>
      <attachid>303150</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-01 17:40:44 -0800</bug_when>
    <thetext>Created attachment 303150
x86 looks solid

now I&apos;ll have to do the arms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282611</commentid>
    <comment_count>38</comment_count>
      <attachid>303170</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-01 20:52:47 -0800</bug_when>
    <thetext>Created attachment 303170
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282628</commentid>
    <comment_count>39</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-01 21:40:16 -0800</bug_when>
    <thetext>It looks like the ARM64 LL/SC instructions take an exotic kind of address which cannot be offset at all. That&apos;s cool. I&apos;ll just have to add a new notion of Addr to Air and the assemblers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282878</commentid>
    <comment_count>40</comment_count>
      <attachid>303237</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-02 14:06:53 -0800</bug_when>
    <thetext>Created attachment 303237
more ARM64</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283015</commentid>
    <comment_count>41</comment_count>
      <attachid>303277</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-02 18:03:34 -0800</bug_when>
    <thetext>Created attachment 303277
more

Boy, ARM64 isel for fancy loads/stores is tricky!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283198</commentid>
    <comment_count>42</comment_count>
      <attachid>303328</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-03 11:15:52 -0800</bug_when>
    <thetext>Created attachment 303328
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283316</commentid>
    <comment_count>43</comment_count>
      <attachid>303361</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-03 17:03:41 -0800</bug_when>
    <thetext>Created attachment 303361
almost done arm wrestling

Note, this patch temporarily includes msaboff&apos;s disassembler patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283342</commentid>
    <comment_count>44</comment_count>
      <attachid>303369</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-03 18:00:27 -0800</bug_when>
    <thetext>Created attachment 303369
passes all tests on arm

yay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283437</commentid>
    <comment_count>45</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-04 09:40:48 -0800</bug_when>
    <thetext>Ha!  Even the Depend opcode works right!

On ARM, we lower to eor, but obfuscate it in both B3 and Air so that none of our optimization phases could ever realize that it returns zero.

testDepend32()...
Initial B3:
BB#0: ; frequency = 1.000000
    Int64 @0 = ArgumentReg(%r0)
    Int32 @1 = Load(@0, ControlDependent|Reads:Top)
    Int32 @2 = Depend(@1)
    Int64 @3 = ZExt32(@2)
    Int64 @4 = Add(@0, @3)
    Int32 @5 = Load(@4, offset = 4, ControlDependent|Reads:Top)
    Int32 @6 = Add(@1, @5)
    Void @7 = Return(@6, Terminal)
B3 after moveConstants, before generation:
BB#0: ; frequency = 1.000000
    Void @8 = Nop()
    Int64 @0 = ArgumentReg(%r0)
    Int32 @1 = Load(@0, ControlDependent|Reads:Top)
    Int32 @2 = Depend(@1)
    Int64 @3 = ZExt32(@2)
    Int64 @4 = Add(@0, @3)
    Int32 @5 = Load(@4, offset = 4, ControlDependent|Reads:Top)
    Int32 @6 = Add(@1, @5)
    Void @7 = Return(@6, Terminal)
Has Quirks: True
Initial air:
BB#0: ; frequency = 1.000000
    Move %r0, %tmp4, @0
    Move32 (%tmp4), %tmp2, @1
    Depend32 %tmp2, %tmp6, @2
    Move32 %tmp6, %tmp5, @3
    Add64 %tmp4, %tmp5, %tmp1, @4
    Move32 4(%tmp1), %tmp3, @5
    Add32 %tmp2, %tmp3, %tmp0, @6
    Move %tmp0, %r0, @7
    Ret32 %r0, @7
Air after optimizeBlockOrder, before generation:
Entrypoints: #0
BB#0: ; frequency = 1.000000
    Move32 (%r0), %r1, @1
    Depend32 %r1, %r2, @2
    Add64 %r0, %r2, %r0, @4
    Move32 4(%r0), %r0, @5
    Add32 %r1, %r0, %r0, @6
    Ret32 %r0, @7
Generated JIT code for B3::Compilation:
    Code at [0x3071cc000, 0x3071cc040):
         0x3071cc000:    stp    fp, lr, [sp, #-16]!
         0x3071cc004:    mov    fp, sp
         0x3071cc008:    ldur   w1, [x0]
         0x3071cc00c:    eor    w2, w1, w1
         0x3071cc010:    add    x0, x0, x2
         0x3071cc014:    ldur   w0, [x0, #4]
         0x3071cc018:    add    w0, w1, w0
         0x3071cc01c:    ldp    fp, lr, [sp], #16
         0x3071cc020:    ret    lr

And on x86, we lower it to a LoadFence, because those are free on x86. This unlocks awesome instruction selection over the Depend while still ensuring that the compiler obeys the constraint.

testDepend32()...
Initial B3:
BB#0: ; frequency = 1.000000
    Int64 @0 = ArgumentReg(%rdi)
    Int32 @1 = Load(@0, ControlDependent|Reads:Top)
    Int32 @2 = Depend(@1)
    Int64 @3 = ZExt32(@2)
    Int64 @4 = Add(@0, @3)
    Int32 @5 = Load(@4, offset = 4, ControlDependent|Reads:Top)
    Int32 @6 = Add(@1, @5)
    Void @7 = Return(@6, Terminal)
B3 after moveConstants, before generation:
BB#0: ; frequency = 1.000000
    Void @4 = Nop()
    Int64 @0 = ArgumentReg(%rdi)
    Int32 @1 = Load(@0, ControlDependent|Reads:Top)
    Void @8 = Fence(Fence|Writes:Top)
    Int32 @5 = Load(@0, offset = 4, ControlDependent|Reads:Top)
    Int32 @6 = Add(@1, @5)
    Void @7 = Return(@6, Terminal)
Has Quirks: True
Initial air:
BB#0: ; frequency = 1.000000
    Move %rdi, %tmp1, @0
    Move32 (%tmp1), %tmp2, @1
    LoadFence @8
    Move %tmp2, %tmp0, @6
    Add32 4(%tmp1), %tmp0, @6
    Move %tmp0, %rax, @7
    Ret32 %rax, @7
Air after optimizeBlockOrder, before generation:
Entrypoints: #0
BB#0: ; frequency = 1.000000
    Move32 (%rdi), %rax, @1
    LoadFence @8
    Add32 4(%rdi), %rax, @6
    Ret32 %rax, @7
Generated JIT code for B3::Compilation:
    Code at [0x2b7136801000, 0x2b7136801020):
      0x2b7136801000: push %rbp
      0x2b7136801001: mov %rsp, %rbp
      0x2b7136801004: mov (%rdi), %eax
      0x2b7136801006: add 0x4(%rdi), %eax
      0x2b7136801009: pop %rbp
      0x2b713680100a: ret 
testDepend32(): OK!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283439</commentid>
    <comment_count>46</comment_count>
      <attachid>303396</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-04 10:13:15 -0800</bug_when>
    <thetext>Created attachment 303396
voila!

Hopefully it doesn&apos;t set the bots on fire.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283440</commentid>
    <comment_count>47</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-04 10:16:14 -0800</bug_when>
    <thetext>Attachment 303396 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3HeapRange.h:91:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3026:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3031:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3036:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3041:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3046:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3051:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3056:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3061:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3066:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3071:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3076:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3081:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3086:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3091:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3096:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3101:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3106:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3111:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3Width.h:75:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Width.h:75:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:99:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:102:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:105:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:105:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:317:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/B3AtomicValue.h:56:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3AtomicValue.h:58:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1438:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1443:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1448:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1453:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1458:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1463:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:509:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:509:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirBlockInsertionSet.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 37 in 63 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283442</commentid>
    <comment_count>48</comment_count>
      <attachid>303397</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-04 10:20:28 -0800</bug_when>
    <thetext>Created attachment 303397
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283444</commentid>
    <comment_count>49</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-04 10:23:36 -0800</bug_when>
    <thetext>Attachment 303397 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3HeapRange.h:91:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3026:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3031:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3036:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3041:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3046:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3051:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3056:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3061:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3066:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3071:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3076:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3081:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3086:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3091:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3096:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3101:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3106:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3111:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3Width.h:75:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Width.h:75:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:99:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:102:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:105:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:105:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:317:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/B3AtomicValue.h:56:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3AtomicValue.h:58:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1438:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1443:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1448:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1453:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1458:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1463:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:509:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:509:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirBlockInsertionSet.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 37 in 63 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283471</commentid>
    <comment_count>50</comment_count>
      <attachid>303405</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-04 13:29:46 -0800</bug_when>
    <thetext>Created attachment 303405
fix some builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283472</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-04 13:32:48 -0800</bug_when>
    <thetext>Attachment 303405 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3HeapRange.h:91:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3026:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3031:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3036:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3041:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3046:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3051:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3056:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3061:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3066:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3071:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3076:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3081:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3086:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3091:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3096:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3101:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3106:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3111:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3Width.h:76:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Width.h:76:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:99:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:102:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:105:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:105:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:317:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/B3AtomicValue.h:56:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3AtomicValue.h:58:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1438:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1443:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1448:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1453:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1458:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1463:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:509:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:509:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirBlockInsertionSet.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 37 in 63 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283531</commentid>
    <comment_count>52</comment_count>
      <attachid>303435</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-04 19:52:42 -0800</bug_when>
    <thetext>Created attachment 303435
more build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283533</commentid>
    <comment_count>53</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-04 19:55:40 -0800</bug_when>
    <thetext>Attachment 303435 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3HeapRange.h:91:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3026:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3031:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3036:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3041:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3046:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3051:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3056:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3061:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3066:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3071:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3076:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3081:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3086:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3091:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3096:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3101:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3106:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3111:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3Width.h:76:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Width.h:76:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:99:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:102:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:105:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:105:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:317:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/B3AtomicValue.h:56:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3AtomicValue.h:58:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1438:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1443:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1448:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1453:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1458:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1463:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:509:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:509:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirBlockInsertionSet.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 37 in 63 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283534</commentid>
    <comment_count>54</comment_count>
      <attachid>303437</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-04 20:28:50 -0800</bug_when>
    <thetext>Created attachment 303437
try again to fix gtk build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283535</commentid>
    <comment_count>55</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-04 20:32:26 -0800</bug_when>
    <thetext>Attachment 303437 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3HeapRange.h:91:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3026:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3031:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3036:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3041:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3046:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3051:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3056:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3061:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3066:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3071:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3076:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3081:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3086:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3091:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3096:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3101:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3106:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3111:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3Width.h:76:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Width.h:76:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:99:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:102:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:105:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:105:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:317:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/B3AtomicValue.h:56:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3AtomicValue.h:58:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1438:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1443:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1448:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1453:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1458:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1463:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:509:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:509:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirBlockInsertionSet.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 37 in 63 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283579</commentid>
    <comment_count>56</comment_count>
      <attachid>303437</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-05 03:46:57 -0800</bug_when>
    <thetext>Comment on attachment 303437
try again to fix gtk build

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

IIUC x86 cmpxchg never uses the flags that it sets, only its register? You can fold code such as this: old = cmpxchg(expected, desired) ; old ?= desired. The ZF flag is likely the most useful for == and !=, but others work too.



Otherwise, code looks good. I&apos;m not familiar with everything :)

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        - Atomic adds/sub/or/and/xor/xhg

&quot;add&quot;

&gt; Source/JavaScriptCore/ChangeLog:44
&gt; +        property in shared memory do not clobber non-atomics that ffect some other property in shared

&quot;affect&quot;

&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:3387
&gt; +        and32(TrustedImm32(0xff), dest);

I don&apos;t understand why the mask is necessary since the top bits are already zero (ditto below).

&gt; Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:322
&gt; +            m_assembler.incq_m(address.offset, address.base, address.index, address.scale);

I don&apos;t believe inc is faster than add because it only partially updates flags which can cause a stall. Agner concurs.

&gt; Source/JavaScriptCore/b3/B3Effects.cpp:86
&gt; +        || (fence &amp;&amp; other.fence);

A few functions above, I think fences interfere with sideway exits because they&apos;re kindof like a delayed write. IIUC you can have write+fence+sideexit, and moving the fence after the exit can cause the write to occur in an unexpected order w.r.t. write in the side exit. I&apos;m not sure their ordering ever matter?

Here, it looks like we never consider strictly equivalent effects? Say you have to actual fences (not fence effects, but actual barrier instructions), these don&apos;t interfere. I&apos;m guessing this is rare, and we&apos;d want to eliminate them separately?

&gt; Source/JavaScriptCore/b3/B3Effects.h:96
&gt; +        result.fence = true;

This isn&apos;t too conservative because we&apos;d need to prove a call were &quot;pure&quot; or to entirely un-aliased heaps for any optimizations to be possible?

&gt; Source/JavaScriptCore/b3/B3GenericBlockInsertionSet.h:69
&gt; +        return insert(before-&gt;index(), frequency == frequency ? frequency : before-&gt;frequency());

isnan? :p

&gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:82
&gt; +        // This indicates that we&apos;ve 

Unfinished.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:78
&gt; +// OOPS!!! (need a bug URL)

Oops.

&gt; Source/JavaScriptCore/b3/B3Opcode.h:220
&gt; +    // AtomicWeakCAS(@exp, @new, @ptr) == Equal(AtomicStrongCAS(@exp, @new, @ptr), @exp)

I find the reverse equivalence useful: a looping weak CAS is equivalent to a single strong CAS.

&gt; Source/JavaScriptCore/b3/B3Opcode.h:237
&gt; +    // FIXME: Maybe we should have AtomicXchgNeg and AtomicXchgNot.

At some point, someone in LLVM decided that these read-modify-write patterns mattered:
Nand 	*p = ~(old &amp; v)
Max 	*p = old &gt;signed v ? old : v
Min 	*p = old &lt;signed v ? old : v
UMax 	*p = old &gt;unsigned v ? old : v
UMin 	*p = old &lt;unsigned v ? old : v
I don&apos;t know that they do, but I assume there was some basis in reality.

&gt; Source/JavaScriptCore/b3/B3Opcode.h:264
&gt; +    // Except that the compiler never gets an opportunity to simplify out the BitXor.

Can dependencies be combined? I think that would be a possible future expansion of what you have here.

&gt; Source/JavaScriptCore/b3/B3Value.cpp:610
&gt; +            result.writes = memory-&gt;fenceRange();

I don&apos;t understand why loads write if they have a fence range. Same for stores below, and the read-modify-writes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283581</commentid>
    <comment_count>57</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-05 06:23:52 -0800</bug_when>
    <thetext>(In reply to comment #56)
&gt; Comment on attachment 303437 [details]
&gt; try again to fix gtk build
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=303437&amp;action=review
&gt; 
&gt; IIUC x86 cmpxchg never uses the flags that it sets, only its register? You
&gt; can fold code such as this: old = cmpxchg(expected, desired) ; old ?=
&gt; desired. The ZF flag is likely the most useful for == and !=, but others
&gt; work too.

I dont understand what you&apos;re saying. If you read the code you&apos;ll see that we use the ZF flag from cmpzchg when it&apos;s profitable. 

&gt; 
&gt; 
&gt; 
&gt; Otherwise, code looks good. I&apos;m not familiar with everything :)
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:11
&gt; &gt; +        - Atomic adds/sub/or/and/xor/xhg
&gt; 
&gt; &quot;add&quot;
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:44
&gt; &gt; +        property in shared memory do not clobber non-atomics that ffect some other property in shared
&gt; 
&gt; &quot;affect&quot;
&gt; 
&gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:3387
&gt; &gt; +        and32(TrustedImm32(0xff), dest);
&gt; 
&gt; I don&apos;t understand why the mask is necessary since the top bits are already
&gt; zero (ditto below).

Because load acq on arm64 sign extends. 

&gt; 
&gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:322
&gt; &gt; +            m_assembler.incq_m(address.offset, address.base, address.index, address.scale);
&gt; 
&gt; I don&apos;t believe inc is faster than add because it only partially updates
&gt; flags which can cause a stall. Agner concurs.

Inc is smaller. 

Dont listen to this kind of performance advice. It&apos;s brain damage. These people who say these things haven&apos;t run an experiment in their whole lives. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Effects.cpp:86
&gt; &gt; +        || (fence &amp;&amp; other.fence);
&gt; 
&gt; A few functions above, I think fences interfere with sideway exits because
&gt; they&apos;re kindof like a delayed write. IIUC you can have write+fence+sideexit,
&gt; and moving the fence after the exit can cause the write to occur in an
&gt; unexpected order w.r.t. write in the side exit. I&apos;m not sure their ordering
&gt; ever matter?
&gt; 
&gt; Here, it looks like we never consider strictly equivalent effects? Say you
&gt; have to actual fences (not fence effects, but actual barrier instructions),
&gt; these don&apos;t interfere. I&apos;m guessing this is rare, and we&apos;d want to eliminate
&gt; them separately?

I think you don&apos;t understand what &apos;fence&apos; does. It&apos;s just the serialization token for fences. It only has to interfere with itself. 

We indicate actual fencing behavior by using fence ranges. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Effects.h:96
&gt; &gt; +        result.fence = true;
&gt; 
&gt; This isn&apos;t too conservative because we&apos;d need to prove a call were &quot;pure&quot; or
&gt; to entirely un-aliased heaps for any optimizations to be possible?

It is too conservative because the fence serialization token is only for serializing fences with each other. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3GenericBlockInsertionSet.h:69
&gt; &gt; +        return insert(before-&gt;index(), frequency == frequency ? frequency : before-&gt;frequency());
&gt; 
&gt; isnan? :p

I&apos;m just moving code here. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:82
&gt; &gt; +        // This indicates that we&apos;ve 
&gt; 
&gt; Unfinished.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:78
&gt; &gt; +// OOPS!!! (need a bug URL)
&gt; 
&gt; Oops.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Opcode.h:220
&gt; &gt; +    // AtomicWeakCAS(@exp, @new, @ptr) == Equal(AtomicStrongCAS(@exp, @new, @ptr), @exp)
&gt; 
&gt; I find the reverse equivalence useful: a looping weak CAS is equivalent to a
&gt; single strong CAS.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Opcode.h:237
&gt; &gt; +    // FIXME: Maybe we should have AtomicXchgNeg and AtomicXchgNot.
&gt; 
&gt; At some point, someone in LLVM decided that these read-modify-write patterns
&gt; mattered:
&gt; Nand 	*p = ~(old &amp; v)
&gt; Max 	*p = old &gt;signed v ? old : v
&gt; Min 	*p = old &lt;signed v ? old : v
&gt; UMax 	*p = old &gt;unsigned v ? old : v
&gt; UMin 	*p = old &lt;unsigned v ? old : v
&gt; I don&apos;t know that they do, but I assume there was some basis in reality.

SAB doesn&apos;t use them and they have no basis in x86. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Opcode.h:264
&gt; &gt; +    // Except that the compiler never gets an opportunity to simplify out the BitXor.
&gt; 
&gt; Can dependencies be combined? 

Yes. 

&gt; I think that would be a possible future
&gt; expansion of what you have here.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Value.cpp:610
&gt; &gt; +            result.writes = memory-&gt;fenceRange();
&gt; 
&gt; I don&apos;t understand why loads write if they have a fence range. Same for
&gt; stores below, and the read-modify-writes.

Acquire is a phantom write and release is a phantom read. That&apos;s the B3 memory model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283594</commentid>
    <comment_count>58</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-05 10:16:09 -0800</bug_when>
    <thetext>(In reply to comment #57)
&gt; (In reply to comment #56)
&gt; &gt; Comment on attachment 303437 [details]
&gt; &gt; try again to fix gtk build
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=303437&amp;action=review
&gt; &gt; 
&gt; &gt; IIUC x86 cmpxchg never uses the flags that it sets, only its register? You
&gt; &gt; can fold code such as this: old = cmpxchg(expected, desired) ; old ?=
&gt; &gt; desired. The ZF flag is likely the most useful for == and !=, but others
&gt; &gt; work too.
&gt; 
&gt; I dont understand what you&apos;re saying. If you read the code you&apos;ll see that
&gt; we use the ZF flag from cmpzchg when it&apos;s profitable. 
&gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; Otherwise, code looks good. I&apos;m not familiar with everything :)
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:11
&gt; &gt; &gt; +        - Atomic adds/sub/or/and/xor/xhg
&gt; &gt; 
&gt; &gt; &quot;add&quot;
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:44
&gt; &gt; &gt; +        property in shared memory do not clobber non-atomics that ffect some other property in shared
&gt; &gt; 
&gt; &gt; &quot;affect&quot;
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:3387
&gt; &gt; &gt; +        and32(TrustedImm32(0xff), dest);
&gt; &gt; 
&gt; &gt; I don&apos;t understand why the mask is necessary since the top bits are already
&gt; &gt; zero (ditto below).
&gt; 
&gt; Because load acq on arm64 sign extends. 
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:322
&gt; &gt; &gt; +            m_assembler.incq_m(address.offset, address.base, address.index, address.scale);
&gt; &gt; 
&gt; &gt; I don&apos;t believe inc is faster than add because it only partially updates
&gt; &gt; flags which can cause a stall. Agner concurs.
&gt; 
&gt; Inc is smaller. 
&gt; 
&gt; Dont listen to this kind of performance advice. It&apos;s brain damage. These
&gt; people who say these things haven&apos;t run an experiment in their whole lives. 
We could very easily run this experiment inside JSC, too.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3Effects.cpp:86
&gt; &gt; &gt; +        || (fence &amp;&amp; other.fence);
&gt; &gt; 
&gt; &gt; A few functions above, I think fences interfere with sideway exits because
&gt; &gt; they&apos;re kindof like a delayed write. IIUC you can have write+fence+sideexit,
&gt; &gt; and moving the fence after the exit can cause the write to occur in an
&gt; &gt; unexpected order w.r.t. write in the side exit. I&apos;m not sure their ordering
&gt; &gt; ever matter?
&gt; &gt; 
&gt; &gt; Here, it looks like we never consider strictly equivalent effects? Say you
&gt; &gt; have to actual fences (not fence effects, but actual barrier instructions),
&gt; &gt; these don&apos;t interfere. I&apos;m guessing this is rare, and we&apos;d want to eliminate
&gt; &gt; them separately?
&gt; 
&gt; I think you don&apos;t understand what &apos;fence&apos; does. It&apos;s just the serialization
&gt; token for fences. It only has to interfere with itself. 
&gt; 
&gt; We indicate actual fencing behavior by using fence ranges. 
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3Effects.h:96
&gt; &gt; &gt; +        result.fence = true;
&gt; &gt; 
&gt; &gt; This isn&apos;t too conservative because we&apos;d need to prove a call were &quot;pure&quot; or
&gt; &gt; to entirely un-aliased heaps for any optimizations to be possible?
&gt; 
&gt; It is too conservative because the fence serialization token is only for
&gt; serializing fences with each other. 
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3GenericBlockInsertionSet.h:69
&gt; &gt; &gt; +        return insert(before-&gt;index(), frequency == frequency ? frequency : before-&gt;frequency());
&gt; &gt; 
&gt; &gt; isnan? :p
&gt; 
&gt; I&apos;m just moving code here. 
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:82
&gt; &gt; &gt; +        // This indicates that we&apos;ve 
&gt; &gt; 
&gt; &gt; Unfinished.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:78
&gt; &gt; &gt; +// OOPS!!! (need a bug URL)
&gt; &gt; 
&gt; &gt; Oops.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3Opcode.h:220
&gt; &gt; &gt; +    // AtomicWeakCAS(@exp, @new, @ptr) == Equal(AtomicStrongCAS(@exp, @new, @ptr), @exp)
&gt; &gt; 
&gt; &gt; I find the reverse equivalence useful: a looping weak CAS is equivalent to a
&gt; &gt; single strong CAS.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3Opcode.h:237
&gt; &gt; &gt; +    // FIXME: Maybe we should have AtomicXchgNeg and AtomicXchgNot.
&gt; &gt; 
&gt; &gt; At some point, someone in LLVM decided that these read-modify-write patterns
&gt; &gt; mattered:
&gt; &gt; Nand 	*p = ~(old &amp; v)
&gt; &gt; Max 	*p = old &gt;signed v ? old : v
&gt; &gt; Min 	*p = old &lt;signed v ? old : v
&gt; &gt; UMax 	*p = old &gt;unsigned v ? old : v
&gt; &gt; UMin 	*p = old &lt;unsigned v ? old : v
&gt; &gt; I don&apos;t know that they do, but I assume there was some basis in reality.
&gt; 
&gt; SAB doesn&apos;t use them and they have no basis in x86. 
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3Opcode.h:264
&gt; &gt; &gt; +    // Except that the compiler never gets an opportunity to simplify out the BitXor.
&gt; &gt; 
&gt; &gt; Can dependencies be combined? 
&gt; 
&gt; Yes. 
&gt; 
&gt; &gt; I think that would be a possible future
&gt; &gt; expansion of what you have here.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3Value.cpp:610
&gt; &gt; &gt; +            result.writes = memory-&gt;fenceRange();
&gt; &gt; 
&gt; &gt; I don&apos;t understand why loads write if they have a fence range. Same for
&gt; &gt; stores below, and the read-modify-writes.
&gt; 
&gt; Acquire is a phantom write and release is a phantom read. That&apos;s the B3
&gt; memory model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283609</commentid>
    <comment_count>59</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-05 11:44:00 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; (In reply to comment #57)
&gt; &gt; (In reply to comment #56)
&gt; &gt; &gt; Comment on attachment 303437 [details]
&gt; &gt; &gt; try again to fix gtk build
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:322
&gt; &gt; &gt; &gt; +            m_assembler.incq_m(address.offset, address.base, address.index, address.scale);
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t believe inc is faster than add because it only partially updates
&gt; &gt; &gt; flags which can cause a stall. Agner concurs.
&gt; &gt; 
&gt; &gt; Inc is smaller. 
&gt; &gt; 
&gt; &gt; Dont listen to this kind of performance advice. It&apos;s brain damage. These
&gt; &gt; people who say these things haven&apos;t run an experiment in their whole lives. 
&gt; We could very easily run this experiment inside JSC, too.

We did!

https://trac.webkit.org/changeset/154158

If it had been a regression, we would have detected it at the time. I remember this change well because we had this exact conversation. It turns out that this change was a progression in the CSS JIT and it had no effect on the JSC JITs.  I believe that the progression was thanks to code size.

It&apos;s an easy test to rerun.  I think that we would need a definite win on a macrobenchmark suite (Octane, JetStream, or something like that) in order to remove our use of inc, since for big sites we want to err on the side of smaller code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283619</commentid>
    <comment_count>60</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-05 13:43:41 -0800</bug_when>
    <thetext>(In reply to comment #59)
&gt; (In reply to comment #58)
&gt; &gt; (In reply to comment #57)
&gt; &gt; &gt; (In reply to comment #56)
&gt; &gt; &gt; &gt; Comment on attachment 303437 [details]
&gt; &gt; &gt; &gt; try again to fix gtk build
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:322
&gt; &gt; &gt; &gt; &gt; +            m_assembler.incq_m(address.offset, address.base, address.index, address.scale);
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I don&apos;t believe inc is faster than add because it only partially updates
&gt; &gt; &gt; &gt; flags which can cause a stall. Agner concurs.
&gt; &gt; &gt; 
&gt; &gt; &gt; Inc is smaller. 
&gt; &gt; &gt; 
&gt; &gt; &gt; Dont listen to this kind of performance advice. It&apos;s brain damage. These
&gt; &gt; &gt; people who say these things haven&apos;t run an experiment in their whole lives. 
&gt; &gt; We could very easily run this experiment inside JSC, too.
&gt; 
&gt; We did!
&gt; 
&gt; https://trac.webkit.org/changeset/154158
&gt; 
&gt; If it had been a regression, we would have detected it at the time. I
&gt; remember this change well because we had this exact conversation. It turns
&gt; out that this change was a progression in the CSS JIT and it had no effect
&gt; on the JSC JITs.  I believe that the progression was thanks to code size.
Cool. This does not surprise me.

My original comment was mostly in favor of your stance of determining perf wins through experimentation and real data. If I heard both hypotheses in isolation, I would say each sounds interesting. 1, emit less code. 2, don&apos;t introduce stalls. But I am in total agreement it&apos;s paramount to actually measure these hypotheses before determining which is superior.

&gt; It&apos;s an easy test to rerun.  I think that we would need a definite win on a
&gt; macrobenchmark suite (Octane, JetStream, or something like that) in order to
&gt; remove our use of inc, since for big sites we want to err on the side of
&gt; smaller code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283855</commentid>
    <comment_count>61</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-06 11:34:20 -0800</bug_when>
    <thetext>Cool, thanks for the answers! Besides the few comments I had, all looks good.

I&apos;m not confident I understand how the fence ranges work, but I generally like that capability and would like it in C++: wg21.link/p0153</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284150</commentid>
    <comment_count>62</comment_count>
      <attachid>303609</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-06 20:11:11 -0800</bug_when>
    <thetext>Created attachment 303609
the patch

Rebased. Added bug links to all of the FIXMEs. Fixed some semantic slop in subwidth CASes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284151</commentid>
    <comment_count>63</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-06 20:13:15 -0800</bug_when>
    <thetext>Attachment 303609 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3HeapRange.h:91:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3026:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3031:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3036:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3041:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3046:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3051:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3056:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3061:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3066:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3071:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3076:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3081:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3086:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3091:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3096:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3101:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3106:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3111:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3Width.h:81:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Width.h:81:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:101:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:104:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:107:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:107:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:317:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/B3AtomicValue.h:56:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3AtomicValue.h:58:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1438:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1443:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1448:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1453:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1458:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1463:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:512:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:512:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirBlockInsertionSet.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 37 in 64 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285354</commentid>
    <comment_count>64</comment_count>
      <attachid>303928</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-09 09:42:36 -0800</bug_when>
    <thetext>Created attachment 303928
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285356</commentid>
    <comment_count>65</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-09 09:44:28 -0800</bug_when>
    <thetext>Attachment 303928 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3HeapRange.h:91:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3026:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3031:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3036:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3041:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3046:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3051:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3056:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3061:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3066:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3071:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3076:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3081:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3086:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3091:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3096:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3101:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3106:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:3111:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3Width.h:81:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Width.h:81:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:101:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:104:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:107:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:107:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:317:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/B3AtomicValue.h:56:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3AtomicValue.h:58:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1438:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1443:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1448:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1453:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1458:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:1463:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:512:  The parameter name &quot;bank&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:512:  The parameter name &quot;width&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirBlockInsertionSet.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 37 in 64 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285715</commentid>
    <comment_count>66</comment_count>
      <attachid>303928</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-09 17:56:20 -0800</bug_when>
    <thetext>Comment on attachment 303928
the patch

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

r=me.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:4140
&gt; +    void atomicStrongCAS(StatusCondition cond, RegisterID expectedAndResult, RegisterID newValue, Address address, RegisterID result)

Side note: We should have a ClobberedRegisterID class so it&apos;s not possible to accidentally use a function that clobbers a register you don&apos;t expect.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:4142
&gt; +        signExtend&lt;datasize&gt;(expectedAndResult, expectedAndResult);

I&apos;m not sure I get this. why sign extend?

&gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:82
&gt; +        // This indicates that we&apos;ve 

Looks like this indicates you lost your train of thought :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285745</commentid>
    <comment_count>67</comment_count>
      <attachid>303928</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-09 20:10:13 -0800</bug_when>
    <thetext>Comment on attachment 303928
the patch

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

&gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:255
&gt; +                // bits in the operand. . So, either way, we need to throw a sign-extend on these

double period.

&gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:263
&gt; +                        m_value-&gt;child(0) = m_insertionSet.insert&lt;Value&gt;(
&gt; +                            m_index, Neg, m_origin, m_value-&gt;child(0));

What if child0 is INT_MIN?

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2235
&gt; +        storeBlock-&gt;append(storeCondOpcode(width, atomic-&gt;hasFence()), m_value, newValueTmp, address, successBoolResultTmp);

What does store conditional return when it successfully stores?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285759</commentid>
    <comment_count>68</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-09 21:11:06 -0800</bug_when>
    <thetext>(In reply to comment #67)
&gt; Comment on attachment 303928 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=303928&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:255
&gt; &gt; +                // bits in the operand. . So, either way, we need to throw a sign-extend on these
&gt; 
&gt; double period.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:263
&gt; &gt; +                        m_value-&gt;child(0) = m_insertionSet.insert&lt;Value&gt;(
&gt; &gt; +                            m_index, Neg, m_origin, m_value-&gt;child(0));
&gt; 
&gt; What if child0 is INT_MIN?

Then add and sub behave the same way!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2235
&gt; &gt; +        storeBlock-&gt;append(storeCondOpcode(width, atomic-&gt;hasFence()), m_value, newValueTmp, address, successBoolResultTmp);
&gt; 
&gt; What does store conditional return when it successfully stores?

The ARM StoreCond returns 0 on success. So that&apos;s what Air does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285830</commentid>
    <comment_count>69</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-10 09:50:11 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/213714</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302367</attachid>
            <date>2017-02-21 21:39:00 -0800</date>
            <delta_ts>2017-02-23 13:56:53 -0800</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>8757</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0tpbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNLaW5kLmgJKHJldmlzaW9uIDIxMjgwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0tpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDE5
ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI2ODgKICAgICBib29sIGhhc1RyYXBzKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHN3aXRjaCAobV9vcGNvZGUpIHsKLSAgICAgICAgY2FzZSBMb2FkOFo6Ci0gICAg
ICAgIGNhc2UgTG9hZDhTOgotICAgICAgICBjYXNlIExvYWQxNlo6Ci0gICAgICAgIGNhc2UgTG9h
ZDE2UzoKLSAgICAgICAgY2FzZSBMb2FkOgotICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAg
Y2FzZSBTdG9yZTE2OgotICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGlzTG9hZFN0b3JlKG1fb3Bjb2RlKTsKICAgICB9CiAgICAgYm9v
bCB0cmFwcygpIGNvbnN0CiAgICAgewpAQCAtMTQxLDYgKzEyOSw2MCBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fdHJhcHMgPSB0cmFwczsKICAgICB9CiAgICAgCisgICAgLy8gQWNxdWlyZSBiaXQuIEl0
IGluZGljYXRlcyB0aGF0IHRoZSBvcGVyYXRpb24gaGFzIHBoYW50b20gd3JpdGUgZWZmZWN0cy4g
WW91IGNhbiBhc2sgdGhlCisgICAgLy8gQXRvbWljTWVtb3J5VmFsdWUgZm9yIHRoZSBwaGFudG9t
IGVmZmVjdHMgaGVhcCBhbmQgdGhlIGhlYXAgYmVpbmcgYWNjZXNzZWQuIEZvciBhY3F1aXJlLCB0
aGUKKyAgICAvLyBwaGFudG9tIGVmZmVjdHMgaGVhcCB3aWxsIHNob3cgdXAgYXMgYSB3cml0ZSBl
ZmZlY3QgaW4gVmFsdWU6OmVmZmVjdHMoKS4gQnV0IHRoaXMgaXMgYSBwcm9taXNlCisgICAgLy8g
dGhhdCB0aGlzIHBoYW50b20gZWZmZWN0IHdvbid0IHdyaXRlIHRvIHRoaW5ncyB0aGF0IHRoaXMg
dGhyZWFkIHByZXZpb3VzbHkgd3JvdGUgdG8sIGFuZCBpZiBpdAorICAgIC8vIGRvZXMsIHRoZW4g
aXQgZG9lc24ndCBtYXR0ZXIgd2hvIHdpbnMuIFRoZXJlZm9yZSwgaWYgd2UgaGF2ZToKKyAgICAv
LworICAgIC8vICAgICBTdG9yZSguLi4pCisgICAgLy8gICAgIEZvbzxBY3F1aXJlPiguLi4pCisg
ICAgLy8KKyAgICAvLyBUaGVuIHdlIGNhbiBtb3ZlIHRoZSBTdG9yZSBiZWxvdyB0aGUgRm9vLiBI
b3dldmVyLCB3ZSBjYW5ub3QgZG8gdGhlIG9wcG9zaXRlIG9mIHRoaXMuIElmIGEgU3RvcmUKKyAg
ICAvLyBpcyBiZWxvdyBGb28sIHdlIGNhbid0IG1vdmUgaXQgYWJvdmUgdGhlIEZvby4gVGhhdCdz
IGJlY2F1c2UgdGhlIG5vcm1hbCB3cml0ZSBpbnRlcmZlcmVuY2UgcnVsZQorICAgIC8vIGFwcGxp
ZXM6IHlvdSBjYW5ub3QgcmVvcmRlciBzdG9yZXMgdGhhdCBtYXkgYWxpYXMuIFdlIG9ubHkgZ2V0
IHRoZSBBY3F1aXJlIGV4ZW1wdGlvbiBmb3IgU3RvcmVzCisgICAgLy8gdGhhdCBhcHBlYXIgYmVm
b3JlIHRoZSBBY3F1aXJlLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGlmIHdlIGhhdmUgYm90
aCBBY3F1aXJlIGFuZCBSZWxlYXNlLCB0aGVuIHRoZSBwaGFudG9tIGVmZmVjdHMgaGVhcCBoYXMg
bm8gZXhlbXB0aW9ucy4KKyAgICAvLyBJdCdzIGp1c3QgYSBub3JtYWwgY2xvYmJlci4KKyAgICBi
b29sIGhhc0FjcXVpcmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzQXRvbWljKG1f
b3Bjb2RlKSB8fCBpc0xvYWQobV9vcGNvZGUpOworICAgIH0KKyAgICBib29sIGFjcXVpcmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYWNxdWlyZTsKKyAgICB9CisgICAgdm9pZCBz
ZXRBY3F1aXJlKGJvb2wgYWNxdWlyZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBY3F1aXJl
KCkpOworICAgICAgICBtX2FjcXVpcmUgPSBhY3F1aXJlOworICAgIH0KKyAgICAKKyAgICAvLyBS
ZWxlYXNlIGJpdC4gSXQgaW5kaWNhdGVzIHRoYXQgdGhlIG9wZXJhdGlvbiBoYXMgcGhhbnRvbSBy
ZWFkIGVmZmVjdHMuIEZvciByZWxlYXNlLCB0aGUgcGhhbnRvbQorICAgIC8vIGVmZmVjdHMgaGVh
cCB3aWxsIHNob3cgdXAgYXMgYSByZWFkIGVmZmVjdCBpbiBWYWx1ZTo6ZWZmZWN0cygpLiBCdXQg
dGhpcyBpcyBhIHByb21pc2UgdGhhdCB0aGlzCisgICAgLy8gcGhhbnRvbSBlZmZlY3Qgd29uJ3Qg
cmVhZCBmcm9tIHRoaW5ncyB0aGF0IHRoaXMgdGhyZWFkIHdpbGwgd3JpdGUgdG8gaW4gdGhlIGZ1
dHVyZSwgYW5kIGlmIGl0CisgICAgLy8gZG9lcywgdGhlbiBpdCBkb2Vzbid0IG1hdHRlciB3aGV0
aGVyIGl0IHNlZXMgdGhvc2Ugd3JpdGVzIG9yIG5vdC4gVGhlcmVmb3JlLCBpZiB3ZSBoYXZlOgor
ICAgIC8vCisgICAgLy8gICAgIEZvbzxSZWxlYXNlPiguLi4pCisgICAgLy8gICAgIFN0b3JlKC4u
LikKKyAgICAvLworICAgIC8vIFRoZW4gd2UgY291bGQgbW92ZSB0aGUgc3RvcmUgdXAgYWJvdmUg
dGhlIEZvby4gQnV0IGl0J3MgYSBvbmUtd2F5IHN0cmVldCAtIHRoZSBvcHBvc2l0ZSB3b3VsZCBu
b3QKKyAgICAvLyB3b3JrLgorICAgIGJvb2wgaGFzUmVsZWFzZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaXNBdG9taWMobV9vcGNvZGUpIHx8IGlzU3RvcmUobV9vcGNvZGUpOworICAg
IH0KKyAgICBib29sIHJlbGVhc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVs
ZWFzZTsKKyAgICB9CisgICAgdm9pZCBzZXRSZWxlYXNlKGJvb2wgcmVsZWFzZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChoYXNSZWxlYXNlKCkpOworICAgICAgICBtX3JlbGVhc2UgPSByZWxlYXNl
OworICAgIH0KKyAgICAKICAgICAvLyBSdWxlcyBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzOgog
ICAgIC8vIC0gUHV0IHRoZSBhY2Nlc3NvcnMgaGVyZS4KICAgICAvLyAtIGhhc0JsYWgoKSBzaG91
bGQgY2hlY2sgaWYgdGhlIG9wY29kZSBhbGxvd3MgZm9yIHlvdXIgcHJvcGVydHkuCkBAIC0xNTMs
NyArMTk1LDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fb3Bjb2RlID09IG90
aGVyLm1fb3Bjb2RlCiAgICAgICAgICAgICAmJiBtX2lzQ2hpbGwgPT0gb3RoZXIubV9pc0NoaWxs
Ci0gICAgICAgICAgICAmJiBtX3RyYXBzID09IG90aGVyLm1fdHJhcHM7CisgICAgICAgICAgICAm
JiBtX3RyYXBzID09IG90aGVyLm1fdHJhcHMKKyAgICAgICAgICAgICYmIG1fYWNxdWlyZSA9PSBv
dGhlci5tX2FjcXVpcmUKKyAgICAgICAgICAgICYmIG1fcmVsZWFzZSA9PSBvdGhlci5tX3JlbGVh
c2U7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLaW5kJiBvdGhlcikg
Y29uc3QKQEAgLTE2NywxMyArMjExLDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIC8vIEl0
J3MgYWxtb3N0IGNlcnRhaW5seSBtb3JlIGltcG9ydGFudCB0aGF0IHRoaXMgaGFzaCBmdW5jdGlv
biBpcyBjaGVhcCB0byBjb21wdXRlIHRoYW4KICAgICAgICAgLy8gYW55dGhpbmcgZWxzZS4gV2Ug
Y2FuIGxpdmUgd2l0aCBzb21lIGtpbmQgaGFzaCBjb2xsaXNpb25zLgotICAgICAgICByZXR1cm4g
bV9vcGNvZGUgKyAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1faXNDaGlsbCkgPDwgMTYpICsgKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtX3RyYXBzKSA8PCA3KTsKKyAgICAgICAgcmV0dXJuIG1fb3Bj
b2RlICsgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2lzQ2hpbGwpIDw8IDE2KSArIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV90cmFwcykgPDwgNykgKyAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
YWNxdWlyZSkgPDwgMTEpICsgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3JlbGVhc2UpIDw8IDMp
OwogICAgIH0KICAgICAKICAgICBLaW5kKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkK
ICAgICAgICAgOiBtX29wY29kZShPb3BzKQogICAgICAgICAsIG1faXNDaGlsbCh0cnVlKQogICAg
ICAgICAsIG1fdHJhcHMoZmFsc2UpCisgICAgICAgICwgbV9hY3F1aXJlKGZhbHNlKQorICAgICAg
ICAsIG1fcmVsZWFzZShmYWxzZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtMTg2LDYgKzIzMiw4
IEBAIHByaXZhdGU6CiAgICAgT3Bjb2RlIG1fb3Bjb2RlOwogICAgIGJvb2wgbV9pc0NoaWxsIDog
MTsKICAgICBib29sIG1fdHJhcHMgOiAxOworICAgIGJvb2wgbV9hY3F1aXJlIDogMTsKKyAgICBi
b29sIG1fcmVsZWFzZSA6IDE7CiB9OwogCiAvLyBGb3IgZXZlcnkgZmxhZyAnZm9vJyB5b3UgYWRk
LCBpdCdzIGN1c3RvbWFyeSB0byBjcmVhdGUgYSBLaW5kIEIzOjpmb28oS2luZCkgZnVuY3Rpb24g
dGhhdCBtYWtlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5o
CShyZXZpc2lvbiAyMTI4MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxOSArMzksNyBAQCBjbGFzcyBKU19FWFBPUlRf
UFJJVkFURSBNZW1vcnlWYWx1ZSA6IHB1CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgYWNjZXB0
cyhLaW5kIGtpbmQpCiAgICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAg
ICAgICAgY2FzZSBMb2FkOFo6Ci0gICAgICAgIGNhc2UgTG9hZDhTOgotICAgICAgICBjYXNlIExv
YWQxNlo6Ci0gICAgICAgIGNhc2UgTG9hZDE2UzoKLSAgICAgICAgY2FzZSBMb2FkOgotICAgICAg
ICBjYXNlIFN0b3JlODoKLSAgICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICBjYXNlIFN0b3Jl
OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGlzTG9hZFN0b3JlKGtp
bmQub3Bjb2RlKTsKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBpc1N0b3JlKEtpbmQga2luZCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAyMTI4MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTYyLDYgKzE2Miw1NSBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIFN0b3JlMTYsCiAg
ICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGljIHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIEZsb2F0
LCBhbmQgRG91YmxlLgogICAgIFN0b3JlLAorICAgIAorICAgIC8vIEF0b21pYyBjb21wYXJlIGFu
ZCBzd2FwIHRoYXQgcmV0dXJucyBhIGJvb2xlYW4uIE1heSBjaG9vc2UgdG8gZG8gbm90aGluZyBh
bmQgcmV0dXJuIGZhbHNlLiBZb3UgY2FuCisgICAgLy8gdXN1YWxseSBhc3N1bWUgdGhhdCB0aGlz
IGlzIGZhc3RlciBhbmQgcmVzdWx0cyBpbiBsZXNzIGNvZGUgdGhhbiBBdG9taWNTdHJvbmdDQVMs
IHRob3VnaCB0aGF0J3MKKyAgICAvLyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSBvbiBJbnRlbCwgaWYg
aW5zdHJ1Y3Rpb24gc2VsZWN0aW9uIGRvZXMgaXRzIGpvYi4gSW1hZ2luZSB0aGF0IHRoaXMgb3Bj
b2RlIGlzCisgICAgLy8gYXMgaWYgeW91IGRpZCB0aGlzIGF0b21pY2FsbHk6CisgICAgLy8KKyAg
ICAvLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIC8vIGJvb2wgQXRvbWljV2Vha0NBUyhUKiBw
dHIsIFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSkKKyAgICAvLyB7CisgICAgLy8gICAgIGlm
ICghcmFuZCgpKQorICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBSZWFsIHdvcmxkIGV4
YW1wbGUgb2YgdGhpczogY29udGV4dCBzd2l0Y2ggb24gQVJNIHdoaWxlIGRvaW5nIENBUy4KKyAg
ICAvLyAgICAgaWYgKCpwdHIgIT0gZXhwZWN0ZWRWYWx1ZSkKKyAgICAvLyAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAvLyAgICAgKnB0ciA9IG5ld1ZhbHVlOworICAgIC8vICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAvLyB9CisgICAgQXRvbWljV2Vha0NBUywKKyAgICAKKyAgICAvLyBBdG9taWMg
Y29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgdGhlIG9sZCB2YWx1ZS4gRG9lcyBub3QgaGF2
ZSB0aGUgbm9uZGV0ZXJtaW5pc20gb2YgV2Vha0NBUy4KKyAgICAvLyBUaGlzIGlzIGEgYml0IG1v
cmUgY29kZSBhbmQgYSBiaXQgc2xvd2VyIGluIHNvbWUgY2FzZXMsIHRob3VnaCBub3QgYnkgYSBs
b3QuIEltYWdpbmUgdGhhdCB0aGlzCisgICAgLy8gb3Bjb2RlIGlzIGFzIGlmIHlvdSBkaWQgdGhp
cyBhdG9taWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAv
LyBUIEF0b21pY1N0cm9uZ0NBUyhUKiBwdHIsIFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSkK
KyAgICAvLyB7CisgICAgLy8gICAgIFQgb2xkVmFsdWUgPSAqcHRyOworICAgIC8vICAgICBpZiAo
b2xkVmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZSkKKyAgICAvLyAgICAgICAgICpwdHIgPSBuZXdWYWx1
ZTsKKyAgICAvLyAgICAgcmV0dXJuIG9sZFZhbHVlCisgICAgLy8gfQorICAgIC8vCisgICAgLy8g
Tm90ZSB0aGF0IEF0b21pY1dlYWtDQVMgYW5kIEF0b21pY1N0cm9uZ0NBUyBoYXZlIHRoaXMga2lu
ZCBvZiBlcXVpdmFsZW5jZToKKyAgICAvLworICAgIC8vIEF0b21pY1dlYWtDQVMoQHB0ciwgQGV4
cCwgQG5ldykgPT0gRXF1YWwoQXRvbWljU3Ryb25nQ0FTKEBwdHIsIEBleHAsIEBuZXcpLCBAZXhw
KQorICAgIEF0b21pY1N0cm9uZ0NBUywKKyAgICAKKyAgICAvLyBBdG9taWNhbGx5IF9fXyBhIG1l
bW9yeSBsb2NhdGlvbiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuIFN5bnRheDoKKyAgICAvLwor
ICAgIC8vIEBvbGRWYWx1ZSA9IEF0b21pY1hjaGdfX18oQHB0ciwgQG9wZXJhbmQpCisgICAgQXRv
bWljWGNoZ0FkZCwKKyAgICBBdG9taWNYY2hnQW5kLAorICAgIEF0b21pY1hjaGdPciwKKyAgICBB
dG9taWNYY2hnU3ViLAorICAgIEF0b21pY1hjaGdYb3IsCisgICAgCisgICAgLy8gQXRvbWljYWxs
eSBleGNoYW5nZSBhIHZhbHVlIHdpdGggYSBtZW1vcnkgbG9jYXRpb24uIFN5bnRheDoKKyAgICAv
LworICAgIC8vIEBvbGRWYWx1ZSA9IEF0b21pY1hjaGcoQHB0ciwgQG5ld1ZhbHVlKQorICAgIEF0
b21pY1hjaHIsCiAKICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsIGFk
ZHJlc3Mgb2YgYSBXYXNtIG1lbW9yeSBvcGVyYXRpb24uIEl0IHRha2VzIGFuIEludFB0cgogICAg
IC8vIGFuZCBhIHBpbm5lZCByZWdpc3RlciB0aGVuIGNvbXB1dGVzIHRoZSBhcHByb3ByaWF0ZSBJ
bnRQdHIgYWRkcmVzcy4gRm9yIHRoZSB1c2UtY2FzZSBvZgpAQCAtMzAxLDYgKzM1MCw2NiBAQCBp
bmxpbmUgYm9vbCBpc0RlZmluaXRlbHlUZXJtaW5hbChPcGNvZGUgCiAgICAgfQogfQogCitpbmxp
bmUgYm9vbCBpc0xvYWQoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgewor
ICAgIGNhc2UgTG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2WjoKKyAg
ICBjYXNlIExvYWQxNlM6CisgICAgY2FzZSBMb2FkOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9v
bCBpc1N0b3JlKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBj
YXNlIFN0b3JlODoKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworaW5saW5lIGJvb2wgaXNMb2FkU3RvcmUoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0
Y2ggKG9wY29kZSkgeworICAgIGNhc2UgTG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNh
c2UgTG9hZDE2WjoKKyAgICBjYXNlIExvYWQxNlM6CisgICAgY2FzZSBMb2FkOgorICAgIGNhc2Ug
U3RvcmU4OgorICAgIGNhc2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
CitpbmxpbmUgYm9vbCBpc0F0b21pYyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bj
b2RlKSB7CisgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FT
OgorICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAg
Y2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRv
bWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaHI6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMwogCiBuYW1lc3BhY2UgV1RGIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302571</attachid>
            <date>2017-02-23 13:56:53 -0800</date>
            <delta_ts>2017-02-23 16:01:23 -0800</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18506</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCShyZXZpc2lvbiAyMTI4
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODIsNyArODIsOCBAQCBib29sIEVmZmVjdHM6OmludGVyZmVyZXMoY29uc3QgRWZm
ZWN0cyYgCiAgICAgICAgIHx8IGludGVyZmVyZXNXaXRoV3JpdGVzUGlubmVkKG90aGVyLCAqdGhp
cykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKICAgICAgICAgfHwg
d3JpdGVzLm92ZXJsYXBzKG90aGVyLnJlYWRzKQotICAgICAgICB8fCByZWFkcy5vdmVybGFwcyhv
dGhlci53cml0ZXMpOworICAgICAgICB8fCByZWFkcy5vdmVybGFwcyhvdGhlci53cml0ZXMpCisg
ICAgICAgIHx8IChmZW5jZSAmJiBvdGhlci5mZW5jZSk7CiB9CiAKIGJvb2wgRWZmZWN0czo6b3Bl
cmF0b3I9PShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAgLTk1LDcgKzk2LDggQEAgYm9v
bCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0IEVmZmVjdHMmIAogICAgICAgICAmJiB3cml0ZXNQ
aW5uZWQgPT0gb3RoZXIud3JpdGVzUGlubmVkCiAgICAgICAgICYmIHJlYWRzUGlubmVkID09IG90
aGVyLnJlYWRzUGlubmVkCiAgICAgICAgICYmIHdyaXRlcyA9PSBvdGhlci53cml0ZXMKLSAgICAg
ICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHM7CisgICAgICAgICYmIHJlYWRzID09IG90aGVyLnJl
YWRzCisgICAgICAgICYmIGZlbmNlID09IG90aGVyLmZlbmNlOwogfQogCiBib29sIEVmZmVjdHM6
Om9wZXJhdG9yIT0oY29uc3QgRWZmZWN0cyYgb3RoZXIpIGNvbnN0CkBAIC0xMjAsNiArMTIyLDgg
QEAgdm9pZCBFZmZlY3RzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbgogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJXcml0ZXNQaW5uZWQiKTsKICAgICBpZiAocmVhZHNQaW5uZWQpCiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgIlJlYWRzUGlubmVkIik7CisgICAgaWYgKGZlbmNlKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJGZW5jZSIpOwogICAgIGlmICh3cml0ZXMpCiAgICAgICAg
IG91dC5wcmludChjb21tYSwgIldyaXRlczoiLCB3cml0ZXMpOwogICAgIGlmIChyZWFkcykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHJldmlzaW9uIDIxMjgwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNiArNzEsMTAgQEAgc3RydWN0IEVmZmVjdHMgewogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMxNzMKICAgICBib29sIHJlYWRzUGlubmVkIHsgZmFs
c2UgfTsKICAgICBib29sIHdyaXRlc1Bpbm5lZCB7IGZhbHNlIH07CisgICAgCisgICAgLy8gTWVt
b3J5IGZlbmNlcyBjYW5ub3QgYmUgcmVvcmRlcmVkIGFyb3VuZCBlYWNoIG90aGVyIHJlZ2FyZGxl
c3Mgb2YgdGhlaXIgZWZmZWN0cy4gVGhpcyBpcyBmbGFnZ2VkCisgICAgLy8gaWYgdGhlIG9wZXJh
dGlvbiBpcyBhIG1lbW9yeSBmZW5jZS4KKyAgICBib29sIGZlbmNlIHsgZmFsc2UgfTsKIAogICAg
IEhlYXBSYW5nZSB3cml0ZXM7CiAgICAgSGVhcFJhbmdlIHJlYWRzOwpAQCAtODksNiArOTMsNyBA
QCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IEhlYXBSYW5nZTo6dG9w
KCk7CiAgICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgIHJlc3VsdC53
cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMTAzLDcgKzEwOCw3IEBAIHN0cnVjdCBFZmZl
Y3RzIHsKIAogICAgIGJvb2wgbXVzdEV4ZWN1dGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIHRlcm1pbmFsIHx8IGV4aXRzU2lkZXdheXMgfHwgd3JpdGVzTG9jYWxTdGF0ZSB8fCB3cml0
ZXMgfHwgd3JpdGVzUGlubmVkOworICAgICAgICByZXR1cm4gdGVybWluYWwgfHwgZXhpdHNTaWRl
d2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQaW5uZWQgfHwgZmVu
Y2U7CiAgICAgfQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHJlb3JkZXJpbmcgaW5zdHJ1Y3Rp
b25zIHdpdGggdGhlc2UgcmVzcGVjdGl2ZSBlZmZlY3RzIHdvdWxkIGNoYW5nZSBwcm9ncmFtCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNLaW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzS2luZC5oCShyZXZpc2lvbiAyMTI4MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNywxOSAr
MTE3LDcgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYyNjg4CiAgICAgYm9vbCBoYXNUcmFwcygpIGNvbnN0CiAgICAgewot
ICAgICAgICBzd2l0Y2ggKG1fb3Bjb2RlKSB7Ci0gICAgICAgIGNhc2UgTG9hZDhaOgotICAgICAg
ICBjYXNlIExvYWQ4UzoKLSAgICAgICAgY2FzZSBMb2FkMTZaOgotICAgICAgICBjYXNlIExvYWQx
NlM6Ci0gICAgICAgIGNhc2UgTG9hZDoKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNh
c2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
CisgICAgICAgIHJldHVybiBpc0xvYWRTdG9yZShtX29wY29kZSk7CiAgICAgfQogICAgIGJvb2wg
dHJhcHMoKSBjb25zdAogICAgIHsKQEAgLTE0MSw2ICsxMjksNzMgQEAgcHVibGljOgogICAgICAg
ICBtX3RyYXBzID0gdHJhcHM7CiAgICAgfQogICAgIAorICAgIC8vIEFjcXVpcmUgYml0LiBJdCBp
bmRpY2F0ZXMgdGhhdCB0aGUgb3BlcmF0aW9uIGhhcyBwaGFudG9tIHdyaXRlIGVmZmVjdHMuIFlv
dSBjYW4gYXNrIHRoZQorICAgIC8vIEF0b21pY01lbW9yeVZhbHVlIGZvciB0aGUgcGhhbnRvbSBl
ZmZlY3RzIGhlYXAgYW5kIHRoZSBoZWFwIGJlaW5nIGFjY2Vzc2VkLiBGb3IgYWNxdWlyZSwgdGhl
CisgICAgLy8gcGhhbnRvbSBlZmZlY3RzIGhlYXAgd2lsbCBzaG93IHVwIGFzIGEgd3JpdGUgZWZm
ZWN0IGluIFZhbHVlOjplZmZlY3RzKCkuIEJ1dCB0aGlzIGlzIGEgcHJvbWlzZQorICAgIC8vIHRo
YXQgdGhpcyBwaGFudG9tIGVmZmVjdCB3b24ndCB3cml0ZSB0byB0aGluZ3MgdGhhdCB0aGlzIHRo
cmVhZCBwcmV2aW91c2x5IHdyb3RlIHRvLCBhbmQgaWYgaXQKKyAgICAvLyBkb2VzLCB0aGVuIGl0
IGRvZXNuJ3QgbWF0dGVyIHdobyB3aW5zLiBUaGVyZWZvcmUsIGlmIHdlIGhhdmU6CisgICAgLy8K
KyAgICAvLyAgICAgU3RvcmUoLi4uKQorICAgIC8vICAgICBGb288QWNxdWlyZT4oLi4uKQorICAg
IC8vCisgICAgLy8gVGhlbiB3ZSBjYW4gbW92ZSB0aGUgU3RvcmUgYmVsb3cgdGhlIEZvby4gSG93
ZXZlciwgd2UgY2Fubm90IGRvIHRoZSBvcHBvc2l0ZSBvZiB0aGlzLiBJZiBhIFN0b3JlCisgICAg
Ly8gaXMgYmVsb3cgRm9vLCB3ZSBjYW4ndCBtb3ZlIGl0IGFib3ZlIHRoZSBGb28uIFRoYXQncyBi
ZWNhdXNlIHRoZSBub3JtYWwgd3JpdGUgaW50ZXJmZXJlbmNlIHJ1bGUKKyAgICAvLyBhcHBsaWVz
OiB5b3UgY2Fubm90IHJlb3JkZXIgc3RvcmVzIHRoYXQgbWF5IGFsaWFzLiBXZSBvbmx5IGdldCB0
aGUgQWNxdWlyZSBleGVtcHRpb24gZm9yIFN0b3JlcworICAgIC8vIHRoYXQgYXBwZWFyIGJlZm9y
ZSB0aGUgQWNxdWlyZS4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBpZiB3ZSBoYXZlIGJvdGgg
QWNxdWlyZSBhbmQgUmVsZWFzZSwgdGhlbiB0aGUgcGhhbnRvbSBlZmZlY3RzIGhlYXAgaGFzIG5v
IGV4ZW1wdGlvbnMuCisgICAgLy8gSXQncyBqdXN0IGEgbm9ybWFsIGNsb2JiZXIuCisgICAgLy8K
KyAgICAvLyBBZGRpdGlvbmFsbHksIG9wZXJhdGlvbnMgd2l0aCBlaXRoZXIgdGhlIGFjcXVpcmUg
b3IgcmVsZWFzZSBiaXQgc2V0IGNhbm5vdCBiZSByZW9yZGVyZWQgYXJvdW5kCisgICAgLy8gZWFj
aCBvdGhlci4KKyAgICAvLworICAgIC8vIE9uIFg4NiwgbG9hZCBhY3F1aXJlIGNhbiBiZSBjb2Rl
Z2VuZXJhdGVkIGFzIGEgbm9ybWFsIGxvYWQsIHNvIGxvbmcgYXMgZXZlcnl0aGluZyBlbHNlIGdl
dHMKKyAgICAvLyBjb2RlZ2VuZXJhdGVkIGFzIHNvbWV0aGluZyB0aGF0IGhhcyBhdCBsZWFzdCBh
biBvcnRvcCBmZW5jZS4KKyAgICAvLworICAgIC8vIE9uIEFSTSwgdGhpcyBpcyBhIG5hdGl2ZSBp
bnN0cnVjdGlvbi4KKyAgICBib29sIGhhc0FjcXVpcmUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzQXRvbWljKG1fb3Bjb2RlKSB8fCBpc0xvYWQobV9vcGNvZGUpOworICAgIH0KKyAg
ICBib29sIGFjcXVpcmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYWNxdWlyZTsK
KyAgICB9CisgICAgdm9pZCBzZXRBY3F1aXJlKGJvb2wgYWNxdWlyZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChoYXNBY3F1aXJlKCkpOworICAgICAgICBtX2FjcXVpcmUgPSBhY3F1aXJlOworICAg
IH0KKyAgICAKKyAgICAvLyBSZWxlYXNlIGJpdC4gSXQgaW5kaWNhdGVzIHRoYXQgdGhlIG9wZXJh
dGlvbiBoYXMgcGhhbnRvbSByZWFkIGVmZmVjdHMuIEZvciByZWxlYXNlLCB0aGUgcGhhbnRvbQor
ICAgIC8vIGVmZmVjdHMgaGVhcCB3aWxsIHNob3cgdXAgYXMgYSByZWFkIGVmZmVjdCBpbiBWYWx1
ZTo6ZWZmZWN0cygpLiBCdXQgdGhpcyBpcyBhIHByb21pc2UgdGhhdCB0aGlzCisgICAgLy8gcGhh
bnRvbSBlZmZlY3Qgd29uJ3QgcmVhZCBmcm9tIHRoaW5ncyB0aGF0IHRoaXMgdGhyZWFkIHdpbGwg
d3JpdGUgdG8gaW4gdGhlIGZ1dHVyZSwgYW5kIGlmIGl0CisgICAgLy8gZG9lcywgdGhlbiBpdCBk
b2Vzbid0IG1hdHRlciB3aGV0aGVyIGl0IHNlZXMgdGhvc2Ugd3JpdGVzIG9yIG5vdC4gVGhlcmVm
b3JlLCBpZiB3ZSBoYXZlOgorICAgIC8vCisgICAgLy8gICAgIEZvbzxSZWxlYXNlPiguLi4pCisg
ICAgLy8gICAgIFN0b3JlKC4uLikKKyAgICAvLworICAgIC8vIFRoZW4gd2UgY291bGQgbW92ZSB0
aGUgc3RvcmUgdXAgYWJvdmUgdGhlIEZvby4gQnV0IGl0J3MgYSBvbmUtd2F5IHN0cmVldCAtIHRo
ZSBvcHBvc2l0ZSB3b3VsZCBub3QKKyAgICAvLyB3b3JrLgorICAgIC8vCisgICAgLy8gT24gWDg2
LCBzdG9yZSByZWxlYXNlIG5lZWRzIHRvIGJlIGNvZGVnZW5lcmF0ZWQgYXMgYW4gYXRvbWljIG9w
LCBsaWtlIHhjaGcsIHRvIGVuc3VyZSB0aGF0IGl0IGRvZXMKKyAgICAvLyBub3QgZ2V0IHJlb3Jk
ZXJlZCBhcm91bmQgbG9hZCBhY3F1aXJlcy4KKyAgICAvLworICAgIC8vIE9uIEFSTSwgdGhpcyBp
cyBhIG5hdGl2ZSBpbnN0cnVjdGlvbi4KKyAgICBib29sIGhhc1JlbGVhc2UoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzQXRvbWljKG1fb3Bjb2RlKSB8fCBpc1N0b3JlKG1fb3Bjb2Rl
KTsKKyAgICB9CisgICAgYm9vbCByZWxlYXNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3JlbGVhc2U7CisgICAgfQorICAgIHZvaWQgc2V0UmVsZWFzZShib29sIHJlbGVhc2UpCisg
ICAgeworICAgICAgICBBU1NFUlQoaGFzUmVsZWFzZSgpKTsKKyAgICAgICAgbV9yZWxlYXNlID0g
cmVsZWFzZTsKKyAgICB9CisgICAgCiAgICAgLy8gUnVsZXMgZm9yIGFkZGluZyBuZXcgcHJvcGVy
dGllczoKICAgICAvLyAtIFB1dCB0aGUgYWNjZXNzb3JzIGhlcmUuCiAgICAgLy8gLSBoYXNCbGFo
KCkgc2hvdWxkIGNoZWNrIGlmIHRoZSBvcGNvZGUgYWxsb3dzIGZvciB5b3VyIHByb3BlcnR5LgpA
QCAtMTUzLDcgKzIwOCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX29wY29k
ZSA9PSBvdGhlci5tX29wY29kZQogICAgICAgICAgICAgJiYgbV9pc0NoaWxsID09IG90aGVyLm1f
aXNDaGlsbAotICAgICAgICAgICAgJiYgbV90cmFwcyA9PSBvdGhlci5tX3RyYXBzOworICAgICAg
ICAgICAgJiYgbV90cmFwcyA9PSBvdGhlci5tX3RyYXBzCisgICAgICAgICAgICAmJiBtX2FjcXVp
cmUgPT0gb3RoZXIubV9hY3F1aXJlCisgICAgICAgICAgICAmJiBtX3JlbGVhc2UgPT0gb3RoZXIu
bV9yZWxlYXNlOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgS2luZCYg
b3RoZXIpIGNvbnN0CkBAIC0xNjcsMTMgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICAvLyBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgbW9yZSBpbXBvcnRhbnQgdGhhdCB0aGlzIGhhc2gg
ZnVuY3Rpb24gaXMgY2hlYXAgdG8gY29tcHV0ZSB0aGFuCiAgICAgICAgIC8vIGFueXRoaW5nIGVs
c2UuIFdlIGNhbiBsaXZlIHdpdGggc29tZSBraW5kIGhhc2ggY29sbGlzaW9ucy4KLSAgICAgICAg
cmV0dXJuIG1fb3Bjb2RlICsgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2lzQ2hpbGwpIDw8IDE2
KSArIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90cmFwcykgPDwgNyk7CisgICAgICAgIHJldHVy
biBtX29wY29kZSArIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9pc0NoaWxsKSA8PCAxNikgKyAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJhcHMpIDw8IDcpICsgKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX2FjcXVpcmUpIDw8IDExKSArIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9yZWxlYXNl
KSA8PCAzKTsKICAgICB9CiAgICAgCiAgICAgS2luZChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCiAgICAgICAgIDogbV9vcGNvZGUoT29wcykKICAgICAgICAgLCBtX2lzQ2hpbGwodHJ1
ZSkKICAgICAgICAgLCBtX3RyYXBzKGZhbHNlKQorICAgICAgICAsIG1fYWNxdWlyZShmYWxzZSkK
KyAgICAgICAgLCBtX3JlbGVhc2UoZmFsc2UpCiAgICAgewogICAgIH0KICAgICAKQEAgLTE4Niw2
ICsyNDUsOCBAQCBwcml2YXRlOgogICAgIE9wY29kZSBtX29wY29kZTsKICAgICBib29sIG1faXND
aGlsbCA6IDE7CiAgICAgYm9vbCBtX3RyYXBzIDogMTsKKyAgICBib29sIG1fYWNxdWlyZSA6IDE7
CisgICAgYm9vbCBtX3JlbGVhc2UgOiAxOwogfTsKIAogLy8gRm9yIGV2ZXJ5IGZsYWcgJ2Zvbycg
eW91IGFkZCwgaXQncyBjdXN0b21hcnkgdG8gY3JlYXRlIGEgS2luZCBCMzo6Zm9vKEtpbmQpIGZ1
bmN0aW9uIHRoYXQgbWFrZXMKQEAgLTIwOCw2ICsyNjksMTggQEAgaW5saW5lIEtpbmQgdHJhcHBp
bmcoS2luZCBraW5kKQogICAgIHJldHVybiBraW5kOwogfQogCitpbmxpbmUgS2luZCBhY3F1aXJl
KEtpbmQga2luZCkKK3sKKyAgICBraW5kLnNldEFjcXVpcmUodHJ1ZSk7CisgICAgcmV0dXJuIGtp
bmQ7Cit9CisKK2lubGluZSBLaW5kIHJlbGVhc2UoS2luZCBraW5kKQoreworICAgIGtpbmQuc2V0
UmVsZWFzZSh0cnVlKTsKKyAgICByZXR1cm4ga2luZDsKK30KKwogc3RydWN0IEtpbmRIYXNoIHsK
ICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBLaW5kJiBrZXkpIHsgcmV0dXJuIGtleS5o
YXNoKCk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBLaW5kJiBhLCBjb25zdCBLaW5k
JiBiKSB7IHJldHVybiBhID09IGI7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMjEyODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDM2ICszOSw3IEBAIGNs
YXNzIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeVZhbHVlIDogcHUKIHB1YmxpYzoKICAgICBzdGF0
aWMgYm9vbCBhY2NlcHRzKEtpbmQga2luZCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZC5v
cGNvZGUoKSkgewotICAgICAgICBjYXNlIExvYWQ4WjoKLSAgICAgICAgY2FzZSBMb2FkOFM6Ci0g
ICAgICAgIGNhc2UgTG9hZDE2WjoKLSAgICAgICAgY2FzZSBMb2FkMTZTOgotICAgICAgICBjYXNl
IExvYWQ6Ci0gICAgICAgIGNhc2UgU3RvcmU4OgotICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAg
ICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0
YXRpYyBib29sIGlzU3RvcmUoS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5k
Lm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgU3RvcmU4OgotICAgICAgICBjYXNlIFN0b3JlMTY6
Ci0gICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHN0YXRpYyBib29sIGlzTG9hZChLaW5kIGtpbmQpCi0gICAgewotICAgICAgICByZXR1cm4g
YWNjZXB0cyhraW5kKSAmJiAhaXNTdG9yZShraW5kKTsKKyAgICAgICAgcmV0dXJuIGlzTWVtb3J5
QWNjZXNzKGtpbmQub3Bjb2RlKTsKICAgICB9CiAKICAgICB+TWVtb3J5VmFsdWUoKTsKQEAgLTc5
LDggKzUwLDggQEAgcHVibGljOgogICAgIGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UoKSBjb25zdCB7
IHJldHVybiBtX3JhbmdlOyB9CiAgICAgdm9pZCBzZXRSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJh
bmdlKSB7IG1fcmFuZ2UgPSByYW5nZTsgfQogCi0gICAgYm9vbCBpc1N0b3JlKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZSgpID09IFZvaWQ7IH0KLSAgICBib29sIGlzTG9hZCgpIGNvbnN0IHsgcmV0dXJu
IHR5cGUoKSAhPSBWb2lkOyB9CisgICAgYm9vbCBpc1N0b3JlKCkgY29uc3QgeyByZXR1cm4gaXNT
dG9yZShvcGNvZGUoKSk7IH0KKyAgICBib29sIGlzTG9hZCgpIGNvbnN0IHsgcmV0dXJuIGlzTG9h
ZChvcGNvZGUoKSk7IH0KIAogICAgIHNpemVfdCBhY2Nlc3NCeXRlU2l6ZSgpIGNvbnN0OwogCkBA
IC05MSwxMyArNjIsMTkgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBQcm9jZWR1cmU7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIEtpbmQga2luZCwgVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luLCBpbnQzMl90IG9mZnNldCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAg
ICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50
cy4uLi4pCisgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CiAKICAgICAv
LyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkg
b2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CiAgICAgLy8gZGVzY3JpYmVzIHRo
ZSByZXR1cm5lZCB0eXBlKS4KICAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIFR5cGUgdHlwZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKICAgICAg
ICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCiAg
ICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAsIG1fcmFuZ2UoSGVhcFJhbmdlOjp0
b3AoKSkKICAgICB7CiAgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CiAgICAgICAgICAg
ICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKQEAgLTEyNCwxMyArMTAxLDIzIEBAIHByaXZhdGU6
CiAgICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRl
ciwgaW50MzJfdCBvZmZzZXQgPSAwKQogICAgICAgICA6IE1lbW9yeVZhbHVlKGtpbmQsIEludDMy
LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCkKICAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJ
U0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBj
YXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gVXNl
IHRoaXMgZm9ybSBmb3Igc3RvcmVzLgogICAgIE1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAw
KQogICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIFZvaWQsIG9yaWdpbiwgdmFs
dWUsIHBvaW50ZXIpCiAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAsIG1fcmFu
Z2UoSGVhcFJhbmdlOjp0b3AoKSkKICAgICB7CiAgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVE
KSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKQEAgLTE0Niw3ICsxMzMs
OCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIGludDMyX3QgbV9vZmZzZXQgeyAwIH07Ci0gICAg
SGVhcFJhbmdlIG1fcmFuZ2U7CisgICAgSGVhcFJhbmdlIG1fcmFuZ2UgeyBIZWFwUmFuZ2U6OnRv
cCgpIH07CisgICAgSGVhcFJhbmdlIG1fcGhhbnRvbVJhbmdlIHsgSGVhcFJhbmdlKCkgfTsKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3Bjb2RlLmgJKHJldmlzaW9uIDIxMjgwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw2IEBAIGVudW0gT3Bjb2RlIDog
aW50MTZfdCB7CiAgICAgTW9kLCAvLyBBbGwgYmV0cyBhcmUgb2ZmIGFzIHRvIHdoYXQgd2lsbCBo
YXBwZW4gd2hlbiB5b3UgZXhlY3V0ZSB0aGlzIGZvciAtMl4zMSUtMSBhbmQgeCUwLgogICAgIFVN
b2QsCiAKLQogICAgIC8vIFBvbHltb3JwaGljIG5lZ2F0aW9uLiBOb3RlIHRoYXQgd2Ugb25seSBu
ZWVkIHRoaXMgZm9yIGZsb2F0aW5nIHBvaW50LCBzaW5jZSBpbnRlZ2VyIG5lZ2F0aW9uCiAgICAg
Ly8gaXMgZXhhY3RseSBsaWtlIFN1YigwLCB4KS4gQnV0IHRoYXQncyBub3QgdHJ1ZSBmb3IgZmxv
YXRpbmcgcG9pbnQuIFN1YigwLCAwKSBpcyAwLCB3aGlsZQogICAgIC8vIE5lZygwKSBpcyAtMC4g
QWxzbywgd2UgY2Fub25pY2FsaXplIFN1YigwLCB4KSBpbnRvIE5lZyh4KSBpbiBjYXNlIG9mIGlu
dGVnZXJzLgpAQCAtMTYyLDYgKzE2MSw5NCBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAg
IFN0b3JlMTYsCiAgICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGljIHN0b3JlIGZvciBJbnQzMiwg
SW50NjQsIEZsb2F0LCBhbmQgRG91YmxlLgogICAgIFN0b3JlLAorICAgIAorICAgIC8vIEF0b21p
YyBjb21wYXJlIGFuZCBzd2FwIHRoYXQgcmV0dXJucyBhIGJvb2xlYW4uIE1heSBjaG9vc2UgdG8g
ZG8gbm90aGluZyBhbmQgcmV0dXJuIGZhbHNlLiBZb3UgY2FuCisgICAgLy8gdXN1YWxseSBhc3N1
bWUgdGhhdCB0aGlzIGlzIGZhc3RlciBhbmQgcmVzdWx0cyBpbiBsZXNzIGNvZGUgdGhhbiBBdG9t
aWNTdHJvbmdDQVMsIHRob3VnaCB0aGF0J3MKKyAgICAvLyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSBv
biBJbnRlbCwgaWYgaW5zdHJ1Y3Rpb24gc2VsZWN0aW9uIGRvZXMgaXRzIGpvYi4gSW1hZ2luZSB0
aGF0IHRoaXMgb3Bjb2RlIGlzCisgICAgLy8gYXMgaWYgeW91IGRpZCB0aGlzIGF0b21pY2FsbHk6
CisgICAgLy8KKyAgICAvLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIC8vIGJvb2wgQXRvbWlj
V2Vha0NBUyhUKiBwdHIsIFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSkKKyAgICAvLyB7Cisg
ICAgLy8gICAgIGlmICghcmFuZCgpKQorICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBS
ZWFsIHdvcmxkIGV4YW1wbGUgb2YgdGhpczogY29udGV4dCBzd2l0Y2ggb24gQVJNIHdoaWxlIGRv
aW5nIENBUy4KKyAgICAvLyAgICAgaWYgKCpwdHIgIT0gZXhwZWN0ZWRWYWx1ZSkKKyAgICAvLyAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyAgICAgKnB0ciA9IG5ld1ZhbHVlOworICAgIC8v
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgd2Vh
ayBDQVMgaGFzIG5vIGZlbmNpbmcgZ3VhcmFudGVlcyB3aGVuIGl0IGZhaWxzLiBUaGlzIG1lYW5z
IHRoYXQgdGhlIGZvbGxvd2luZworICAgIC8vIHRyYW5zZm9ybWF0aW9uIGlzIGFsd2F5cyB2YWxp
ZDoKKyAgICAvLworICAgIC8vIEJlZm9yZToKKyAgICAvLworICAgIC8vICAgICAgICAgQnJhbmNo
KEF0b21pY1dlYWtDQVMocHRyLCBleHBlY3RlZCwgbmV3KSkKKyAgICAvLyAgICAgICBTdWNjZXNz
b3JzOiBUaGVuOiNzdWNjZXNzLCBFbHNlOiNmYWlsCisgICAgLy8KKyAgICAvLyBBZnRlcjoKKyAg
ICAvLworICAgIC8vICAgICAgICAgQnJhbmNoKEVxdWFsKExvYWQocHRyKSwgZXhwZWN0ZWQpKQor
ICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I2F0dGVtcHQsIEVsc2U6I2ZhaWwKKyAgICAv
LyAgICAgQkIjYXR0ZW1wdDoKKyAgICAvLyAgICAgICAgIEJyYW5jaChBdG9taWNXZWFrQ0FTKHB0
ciwgZXhwZWN0ZWQsIG5ldykpCisgICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhlbjojc3VjY2Vz
cywgRWxzZTojZmFpbAorICAgIEF0b21pY1dlYWtDQVMsCisgICAgCisgICAgLy8gQXRvbWljIGNv
bXBhcmUgYW5kIHN3YXAgdGhhdCByZXR1cm5zIHRoZSBvbGQgdmFsdWUuIERvZXMgbm90IGhhdmUg
dGhlIG5vbmRldGVybWluaXNtIG9mIFdlYWtDQVMuCisgICAgLy8gVGhpcyBpcyBhIGJpdCBtb3Jl
IGNvZGUgYW5kIGEgYml0IHNsb3dlciBpbiBzb21lIGNhc2VzLCB0aG91Z2ggbm90IGJ5IGEgbG90
LiBJbWFnaW5lIHRoYXQgdGhpcworICAgIC8vIG9wY29kZSBpcyBhcyBpZiB5b3UgZGlkIHRoaXMg
YXRvbWljYWxseToKKyAgICAvLworICAgIC8vIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgLy8g
VCBBdG9taWNTdHJvbmdDQVMoVCogcHRyLCBUIGV4cGVjdGVkVmFsdWUsIFQgbmV3VmFsdWUpCisg
ICAgLy8geworICAgIC8vICAgICBUIG9sZFZhbHVlID0gKnB0cjsKKyAgICAvLyAgICAgaWYgKG9s
ZFZhbHVlID09IGV4cGVjdGVkVmFsdWUpCisgICAgLy8gICAgICAgICAqcHRyID0gbmV3VmFsdWU7
CisgICAgLy8gICAgIHJldHVybiBvbGRWYWx1ZQorICAgIC8vIH0KKyAgICAvLworICAgIC8vIE5v
dGUgdGhhdCBBdG9taWNXZWFrQ0FTIGFuZCBBdG9taWNTdHJvbmdDQVMgaGF2ZSB0aGlzIGtpbmQg
b2YgZXF1aXZhbGVuY2U6CisgICAgLy8KKyAgICAvLyBBdG9taWNXZWFrQ0FTKEBwdHIsIEBleHAs
IEBuZXcpID09IEVxdWFsKEF0b21pY1N0cm9uZ0NBUyhAcHRyLCBAZXhwLCBAbmV3KSwgQGV4cCkK
KyAgICBBdG9taWNTdHJvbmdDQVMsCisgICAgCisgICAgLy8gQXRvbWljYWxseSBfX18gYSBtZW1v
cnkgbG9jYXRpb24gYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiBTeW50YXg6CisgICAgLy8KKyAg
ICAvLyBAb2xkVmFsdWUgPSBBdG9taWNYY2hnX19fKEBwdHIsIEBvcGVyYW5kKQorICAgIEF0b21p
Y1hjaGdBZGQsCisgICAgQXRvbWljWGNoZ0FuZCwKKyAgICBBdG9taWNYY2hnT3IsCisgICAgQXRv
bWljWGNoZ1N1YiwKKyAgICBBdG9taWNYY2hnWG9yLAorICAgIAorICAgIC8vIEF0b21pY2FsbHkg
ZXhjaGFuZ2UgYSB2YWx1ZSB3aXRoIGEgbWVtb3J5IGxvY2F0aW9uLiBTeW50YXg6CisgICAgLy8K
KyAgICAvLyBAb2xkVmFsdWUgPSBBdG9taWNYY2hnKEBwdHIsIEBuZXdWYWx1ZSkKKyAgICBBdG9t
aWNYY2hyLAorICAgIAorICAgIC8vIEludHJvZHVjZSBhbiBpbnZpc2libGUgZGVwZW5kZW5jeSBm
b3IgYmxvY2tpbmcgbW90aW9uIG9mIGxvYWRzIHdpdGggcmVzcGVjdCB0byBlYWNoIG90aGVyLiBT
eW50YXg6CisgICAgLy8KKyAgICAvLyBAcmVzdWx0ID0gRGVwZW5kKEBwaGFudG9tKQorICAgIC8v
CisgICAgLy8gVGhpcyBpcyBldmVudHVhbGx5IGNvZGVnZW5lcmF0ZWQgdG8gaGF2ZSBsb2NhbCBz
ZW1hbnRpY3MgYXMgaWYgd2UgZGlkOgorICAgIC8vCisgICAgLy8gQHJlc3VsdCA9ICQwCisgICAg
Ly8KKyAgICAvLyBCdXQgaXQgZW5zdXJlcyB0aGF0IHRoZSB1c2VycyBvZiBAcmVzdWx0IGNhbm5v
dCBleGVjdXRlIHVudGlsIEBwaGFudG9tIGlzIGNvbXB1dGVkLgorICAgIC8vCisgICAgLy8gVGhl
IGNvbXBpbGVyIGlzIG5vdCBhbGxvd2VkIHRvIHJlYXNvbiBhYm91dCB0aGUgZmFjdCB0aGF0IERl
cGVuZCBjb2RlZ2VuZXJhdGVzIHRoaXMgd2F5LiBBbnkga2luZAorICAgIC8vIG9mIHRyYW5zZm9y
bWF0aW9uIG9yIGFuYWx5c2lzIHRoYXQgcmVsaWVzIG9uIHRoZSBpbnNpZ2h0IHRoYXQgRGVwZW5k
IGlzIHJlYWxseSB6ZXJvIGlzIHVuc291bmQsCisgICAgLy8gYmVjYXVzZSBpdCB1bmxvY2tzIHJl
b3JkZXJpbmcgb2YgdXNlcnMgb2YgQHJlc3VsdCBhbmQgQHBoYW50b20uCisgICAgLy8KKyAgICAv
LyBPbiBYODYsIHRoaXMgaXMgbG93ZXJlZCB0byBhIGxvYWQtbG9hZCBmZW5jZSBhbmQgQHJlc3Vs
dCB1c2VzIEBwaGFudG9tIGRpcmVjdGx5LgorICAgIC8vCisgICAgLy8gT24gQVJNLCB0aGlzIGlz
IGxvd2VyZWQgYXMgaWYgbGlrZToKKyAgICAvLworICAgIC8vIEByZXN1bHQgPSBCaXRYb3IoQHBo
YW50b20sIEBwaGFudG9tKQorICAgIC8vCisgICAgLy8gRXhjZXB0IHRoYXQgdGhlIGNvbXBpbGVy
IG5ldmVyIGdldHMgYW4gb3Bwb3J0dW5pdHkgdG8gc2ltcGxpZnkgb3V0IHRoZSBCaXRYb3IuCisg
ICAgRGVwZW5kLAogCiAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIGFjdHVhbCBh
ZGRyZXNzIG9mIGEgV2FzbSBtZW1vcnkgb3BlcmF0aW9uLiBJdCB0YWtlcyBhbiBJbnRQdHIKICAg
ICAvLyBhbmQgYSBwaW5uZWQgcmVnaXN0ZXIgdGhlbiBjb21wdXRlcyB0aGUgYXBwcm9wcmlhdGUg
SW50UHRyIGFkZHJlc3MuIEZvciB0aGUgdXNlLWNhc2Ugb2YKQEAgLTMwMSw2ICszODgsNzEgQEAg
aW5saW5lIGJvb2wgaXNEZWZpbml0ZWx5VGVybWluYWwoT3Bjb2RlIAogICAgIH0KIH0KIAoraW5s
aW5lIGJvb2wgaXNMb2FkKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsK
KyAgICBjYXNlIExvYWQ4WjoKKyAgICBjYXNlIExvYWQ4UzoKKyAgICBjYXNlIExvYWQxNlo6Cisg
ICAgY2FzZSBMb2FkMTZTOgorICAgIGNhc2UgTG9hZDoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJv
b2wgaXNTdG9yZShPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAg
Y2FzZSBTdG9yZTg6CisgICAgY2FzZSBTdG9yZTE2OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2lubGluZSBib29sIGlzTG9hZFN0b3JlKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dp
dGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICBjYXNlIExvYWQ4UzoKKyAgICBj
YXNlIExvYWQxNlo6CisgICAgY2FzZSBMb2FkMTZTOgorICAgIGNhc2UgTG9hZDoKKyAgICBjYXNl
IFN0b3JlODoKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworaW5saW5lIGJvb2wgaXNBdG9taWMoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9w
Y29kZSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NB
UzoKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAg
IGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0
b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hyOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUg
Ym9vbCBpc01lbW9yeUFjY2VzcyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHJldHVybiBpc0F0b21p
YyhvcGNvZGUpIHx8IGlzTG9hZFN0b3JlKG9wY29kZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZS5jcHAJKHJldmlzaW9uIDIxMjgwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE3LDE4ICs2MTcsNyBAQCBFZmZlY3RzIFZh
bHVlOjplZmZlY3RzKCkgY29uc3QKICAgICAgICAgY29uc3QgRmVuY2VWYWx1ZSogZmVuY2UgPSBh
czxGZW5jZVZhbHVlPigpOwogICAgICAgICByZXN1bHQucmVhZHMgPSBmZW5jZS0+cmVhZDsKICAg
ICAgICAgcmVzdWx0LndyaXRlcyA9IGZlbmNlLT53cml0ZTsKLSAgICAgICAgCi0gICAgICAgIC8v
IFByZXZlbnQga2lsbGluZyBvZiBmZW5jZXMgdGhhdCBjbGFpbSBub3QgdG8gd3JpdGUgYW55dGhp
bmcuIEl0J3MgYSBiaXQgd2VpcmQgdGhhdCB3ZSB1c2UKLSAgICAgICAgLy8gbG9jYWwgc3RhdGUg
YXMgdGhlIHdheSB0byBkbyB0aGlzLCBidXQgaXQgaGFwcGVucyB0byB3b3JrOiB3ZSBtdXN0IGFz
c3VtZSB0aGF0IHdlIGNhbm5vdAotICAgICAgICAvLyBraWxsIHdyaXRlc0xvY2FsU3RhdGUgdW5s
ZXNzIHdlIHVuZGVyc3RhbmRzIGV4YWN0bHkgd2hhdCB0aGUgaW5zdHJ1Y3Rpb24gaXMgZG9pbmcg
KGxpa2UKLSAgICAgICAgLy8gdGhlIHdheSB0aGF0IGZpeFNTQSB1bmRlcnN0YW5kcyBTZXQvR2V0
IGFuZCB0aGUgd2F5IHRoYXQgcmVkdWNlU3RyZW5ndGggYW5kIG90aGVycwotICAgICAgICAvLyB1
bmRlcnN0YW5kIFVwc2lsb24pLiBUaGlzIHdvdWxkIG9ubHkgYmVjb21lIGEgcHJvYmxlbSBpZiB3
ZSBoYWQgc29tZSBhbmFseXNpcyB0aGF0IHdhcwotICAgICAgICAvLyBsb29raW5nIHRvIHVzZSB0
aGUgd3JpdGVzTG9jYWxTdGF0ZSBiaXQgdG8gaW52YWxpZGF0ZSBhIENTRSBvdmVyIGxvY2FsIHN0
YXRlIG9wZXJhdGlvbnMuCi0gICAgICAgIC8vIFRoZW4gYSBGZW5jZSB3b3VsZCBsb29rIGJsb2Nr
LCBzYXksIHRoZSBlbGltaW5hdGlvbiBvZiBhIHJlZHVuZGFudCBHZXQuIEJ1dCBpdCBsaWtlCi0g
ICAgICAgIC8vIHRoYXQncyBub3QgYXQgYWxsIGhvdyBvdXIgb3B0aW1pemF0aW9ucyBmb3IgU2V0
L0dldC9VcHNpbG9uL1BoaSB3b3JrIC0gdGhleSBncm9rIHRoZWlyCi0gICAgICAgIC8vIG9wZXJh
dGlvbnMgZGVlcGx5IGVub3VnaCB0aGF0IHRoZXkgaGF2ZSBubyBuZWVkIHRvIGNoZWNrIHRoaXMg
Yml0IC0gc28gdGhpcyBjaGVhdCBpcwotICAgICAgICAvLyBmaW5lLgotICAgICAgICByZXN1bHQu
d3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CisgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENDYWxsOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302599</attachid>
            <date>2017-02-23 16:01:23 -0800</date>
            <delta_ts>2017-02-24 20:53:49 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30608</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCShyZXZpc2lvbiAyMTI4
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODIsNyArODIsOCBAQCBib29sIEVmZmVjdHM6OmludGVyZmVyZXMoY29uc3QgRWZm
ZWN0cyYgCiAgICAgICAgIHx8IGludGVyZmVyZXNXaXRoV3JpdGVzUGlubmVkKG90aGVyLCAqdGhp
cykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKICAgICAgICAgfHwg
d3JpdGVzLm92ZXJsYXBzKG90aGVyLnJlYWRzKQotICAgICAgICB8fCByZWFkcy5vdmVybGFwcyhv
dGhlci53cml0ZXMpOworICAgICAgICB8fCByZWFkcy5vdmVybGFwcyhvdGhlci53cml0ZXMpCisg
ICAgICAgIHx8IChmZW5jZSAmJiBvdGhlci5mZW5jZSk7CiB9CiAKIGJvb2wgRWZmZWN0czo6b3Bl
cmF0b3I9PShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAgLTk1LDcgKzk2LDggQEAgYm9v
bCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0IEVmZmVjdHMmIAogICAgICAgICAmJiB3cml0ZXNQ
aW5uZWQgPT0gb3RoZXIud3JpdGVzUGlubmVkCiAgICAgICAgICYmIHJlYWRzUGlubmVkID09IG90
aGVyLnJlYWRzUGlubmVkCiAgICAgICAgICYmIHdyaXRlcyA9PSBvdGhlci53cml0ZXMKLSAgICAg
ICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHM7CisgICAgICAgICYmIHJlYWRzID09IG90aGVyLnJl
YWRzCisgICAgICAgICYmIGZlbmNlID09IG90aGVyLmZlbmNlOwogfQogCiBib29sIEVmZmVjdHM6
Om9wZXJhdG9yIT0oY29uc3QgRWZmZWN0cyYgb3RoZXIpIGNvbnN0CkBAIC0xMjAsNiArMTIyLDgg
QEAgdm9pZCBFZmZlY3RzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbgogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJXcml0ZXNQaW5uZWQiKTsKICAgICBpZiAocmVhZHNQaW5uZWQpCiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgIlJlYWRzUGlubmVkIik7CisgICAgaWYgKGZlbmNlKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJGZW5jZSIpOwogICAgIGlmICh3cml0ZXMpCiAgICAgICAg
IG91dC5wcmludChjb21tYSwgIldyaXRlczoiLCB3cml0ZXMpOwogICAgIGlmIChyZWFkcykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHJldmlzaW9uIDIxMjgwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNiArNzEsMTAgQEAgc3RydWN0IEVmZmVjdHMgewogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMxNzMKICAgICBib29sIHJlYWRzUGlubmVkIHsgZmFs
c2UgfTsKICAgICBib29sIHdyaXRlc1Bpbm5lZCB7IGZhbHNlIH07CisgICAgCisgICAgLy8gTWVt
b3J5IGZlbmNlcyBjYW5ub3QgYmUgcmVvcmRlcmVkIGFyb3VuZCBlYWNoIG90aGVyIHJlZ2FyZGxl
c3Mgb2YgdGhlaXIgZWZmZWN0cy4gVGhpcyBpcyBmbGFnZ2VkCisgICAgLy8gaWYgdGhlIG9wZXJh
dGlvbiBpcyBhIG1lbW9yeSBmZW5jZS4KKyAgICBib29sIGZlbmNlIHsgZmFsc2UgfTsKIAogICAg
IEhlYXBSYW5nZSB3cml0ZXM7CiAgICAgSGVhcFJhbmdlIHJlYWRzOwpAQCAtODksNiArOTMsNyBA
QCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IEhlYXBSYW5nZTo6dG9w
KCk7CiAgICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgIHJlc3VsdC53
cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMTAzLDcgKzEwOCw3IEBAIHN0cnVjdCBFZmZl
Y3RzIHsKIAogICAgIGJvb2wgbXVzdEV4ZWN1dGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIHRlcm1pbmFsIHx8IGV4aXRzU2lkZXdheXMgfHwgd3JpdGVzTG9jYWxTdGF0ZSB8fCB3cml0
ZXMgfHwgd3JpdGVzUGlubmVkOworICAgICAgICByZXR1cm4gdGVybWluYWwgfHwgZXhpdHNTaWRl
d2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQaW5uZWQgfHwgZmVu
Y2U7CiAgICAgfQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHJlb3JkZXJpbmcgaW5zdHJ1Y3Rp
b25zIHdpdGggdGhlc2UgcmVzcGVjdGl2ZSBlZmZlY3RzIHdvdWxkIGNoYW5nZSBwcm9ncmFtCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkocmV2aXNpb24gMjEyODAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg4LDYgKzg4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOwogICAgIH0KICAgICAKKyAgICBIZWFwUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IEhlYXBS
YW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSGVhcFJhbmdlKAorICAg
ICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwgb3RoZXIubV9iZWdpbiksCisgICAgICAgICAgICBz
dGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQpKTsKKyAgICB9CisgICAgCiAgICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW4gIT0gbV9lbmQ7IH0KIAogICAg
IHVuc2lnbmVkIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbjsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMjEyODAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTg1LDYgKzE4NSwyMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIERlcGVuZDogeworICAgICAgICAgICAgICAg
IGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGxvYWQtbG9h
ZCBmZW5jZS4gVGhpcyBjb2RlZ2VucyB0byBub3RoaW5nIG9uIFg4Ni4gV2UgdXNlIGl0IHRvIHRl
bGwgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBpbGVyIG5vdCB0byBibG9jayBsb2Fk
IG1vdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgRmVuY2VWYWx1ZSogZmVuY2UgPSBtX2luc2Vy
dGlvblNldC5pbnNlcnQ8RmVuY2VWYWx1ZT4obV9pbmRleCwgbV9vcmlnaW4pOworICAgICAgICAg
ICAgICAgICAgICBmZW5jZS0+cmVhZCA9IEhlYXBSYW5nZSgpOworICAgICAgICAgICAgICAgICAg
ICBmZW5jZS0+d3JpdGUgPSBIZWFwUmFuZ2U6OnRvcCgpOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgLy8gS2lsbCB0aGUgRGVwZW5kLCB3aGljaCBzaG91bGQgdW5s
b2NrIGEgYnVuY2ggb2YgY29kZSBzaW1wbGlmaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAg
bV9ub2RlLT5yZXBsYWNlV2l0aEJvdHRvbShtX2luc2VydGlvblNldCwgbV9pbmRleCk7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAyMTI4MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU2MiwxMSArNTYyLDE2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQXJnUHJvbWlz
ZSBsb2FkUHJvbWlzZUFueU9wY29kZShWYWx1ZSogbG9hZFZhbHVlKQogICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobG9hZFZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSk7CiAgICAgICAgIGlm
ICghY2FuQmVJbnRlcm5hbChsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwog
ICAgICAgICBpZiAoY3Jvc3Nlc0ludGVyZmVyZW5jZShsb2FkVmFsdWUpKQogICAgICAgICAgICAg
cmV0dXJuIEFyZygpOwotICAgICAgICBBcmdQcm9taXNlIHJlc3VsdChhZGRyKGxvYWRWYWx1ZSks
IGxvYWRWYWx1ZSk7CisgICAgICAgIGlmIChsb2FkVmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5o
YXNGZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBBcmcgbG9hZEFk
ZHIgPSBhZGRyKGxvYWRWYWx1ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvYWRBZGRyKTsK
KyAgICAgICAgQXJnUHJvbWlzZSByZXN1bHQobG9hZEFkZHIsIGxvYWRWYWx1ZSk7CiAgICAgICAg
IGlmIChsb2FkVmFsdWUtPnRyYXBzKCkpCiAgICAgICAgICAgICByZXN1bHQuc2V0VHJhcHModHJ1
ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC05MzEsMTAgKzkzNiwxNSBAQCBwcml2YXRl
OgogICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUzMiwgQWlyOjpPcGNvZGUgb3Bjb2RlNjQsIENv
bW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgogICAgIGJvb2wgdHJ5
QXBwZW5kU3RvcmVCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQogICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpOworICAgICAgICAK
ICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShvcGNvZGUzMiwg
b3Bjb2RlNjQsIGxlZnQtPnR5cGUoKSk7CiAgICAgICAgIGlmIChvcGNvZGUgPT0gQWlyOjpPb3Bz
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFs
dWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAKICAgICAgICAgQXJnIHN0b3JlQWRkciA9IGFkZHIobV92YWx1ZSk7CiAg
ICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOwogCkBAIC0yMTcwLDYgKzIxODAsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBEZXBlbmQ6IHsKKyAgICAgICAgICAgIGFwcGVuZEJpbk9wPFhvcjMyLCBYb3I2NCwgQWly
OjpPb3BzLCBBaXI6Ok9vcHMsIENvbW11dGF0aXZlPigKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBTaGw6IHsKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgxKS0+aXNJbnQzMigxKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMjEyODAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsMTMg
QEAgTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgpCiB7CiB9CiAKK1R5cGUgTWVtb3J5VmFsdWU6
OmFjY2Vzc1R5cGUoKSBjb25zdAoreworICAgIGlmIChpc0xvYWQob3Bjb2RlKCkpKQorICAgICAg
ICByZXR1cm4gdHlwZSgpOworICAgIHJldHVybiBjaGlsZCgwKS0+dHlwZSgpOworfQorCiBzaXpl
X3QgTWVtb3J5VmFsdWU6OmFjY2Vzc0J5dGVTaXplKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG9w
Y29kZSgpKSB7CkBAIC00OCw2ICs1NSwxNCBAQCBzaXplX3QgTWVtb3J5VmFsdWU6OmFjY2Vzc0J5
dGVTaXplKCkgY29uCiAgICAgY2FzZSBMb2FkOgogICAgICAgICByZXR1cm4gc2l6ZW9mVHlwZSh0
eXBlKCkpOwogICAgIGNhc2UgU3RvcmU6CisgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgIGNh
c2UgQXRvbWljU3Ryb25nQ0FTOgorICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0
b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hn
U3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6CiAgICAg
ICAgIHJldHVybiBzaXplb2ZUeXBlKGNoaWxkKDApLT50eXBlKCkpOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC02Miw2ICs3Nyw4IEBAIHZv
aWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYKICAgICBpZiAoKGlzTG9hZCgp
ICYmIGVmZmVjdHMoKS5yZWFkcyAhPSByYW5nZSgpKQogICAgICAgICB8fCAoaXNTdG9yZSgpICYm
IGVmZmVjdHMoKS53cml0ZXMgIT0gcmFuZ2UoKSkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
InJhbmdlID0gIiwgcmFuZ2UoKSk7CisgICAgaWYgKHBoYW50b21SYW5nZSgpKQorICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJwaGFudG9tUmFuZ2UgPSAiLCBwaGFudG9tUmFuZ2UoKSk7CiB9CiAK
IFZhbHVlKiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKQEAgLTY5LDYgKzg2LDk0IEBA
IFZhbHVlKiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKICAgICByZXR1cm4gbmV3IE1l
bW9yeVZhbHVlKCp0aGlzKTsKIH0KIAorLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5v
dCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXgg
dGhhdAorLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KK01lbW9yeVZhbHVlOjpNZW1v
cnlWYWx1ZShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50
ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQs
IHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAgICBp
ZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsK
KyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9h
ZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAg
ICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3RvcmUx
NjoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9y
bSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCitNZW1vcnlWYWx1
ZTo6TWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwg
aW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDogTWVtb3J5VmFsdWUoa2luZCwgSW50MzIsIG9yaWdp
biwgcG9pbnRlciwgb2Zmc2V0KQoreworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAg
ICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAg
ICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2Fk
MTZTOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMg
Zm9ybSBmb3Igc3RvcmVzIGFuZCBBdG9taWNYY2hnX19fLiBOb3RlIHRoYXQgYnkgZGVmYXVsdCwg
YXRvbWljcyBoYXZlIFRPUCBmb3IgdGhlaXIKKy8vIHBoYW50b20gaGVhcC4KK01lbW9yeVZhbHVl
OjpNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFs
dWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNv
ZGUsIGtpbmQsIGlzU3RvcmUoa2luZC5vcGNvZGUpID8gVm9pZCA6IHZhbHVlLT50eXBlKCksIG9y
aWdpbiwgdmFsdWUsIHBvaW50ZXIpCisgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgLCBtX3Bo
YW50b21SYW5nZShpc1N0b3JlKGtpbmQub3Bjb2RlKSA/IEhlYXBSYW5nZSgpIDogSGVhcFJhbmdl
Ojp0b3AoKSkKK3sKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICBzd2l0Y2gg
KGtpbmQub3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3Rv
cmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgY2FzZSBBdG9taWNYY2hnQWRkOgor
ICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgIGNhc2UgQXRvbWljWGNoZ09yOgor
ICAgICAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoK
KyAgICAgICAgY2FzZSBBdG9taWNYY2hnOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfQorICAgIAorLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ0FT
LgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBuZXdWYWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMy
X3Qgb2Zmc2V0ID0gMCkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIGtpbmQub3Bj
b2RlID09IEF0b21pY1dlYWtDQVMgPyBJbnQzMiA6IGV4cGVjdGVkVmFsdWUtPnR1cGUoKSwgb3Jp
Z2luLCBleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9m
ZnNldCkKKyAgICAsIG1fcGhhbnRvbVJhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCit7CisgICAgaWYg
KCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Cisg
ICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24g
MjEyODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMyLDQzICszMiwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKIAotLy8gRklYTUU6IFdlIHdhbnQgdG8gYWxsb3cgZmVuY2VkIG1lbW9yeSBhY2Nl
c3NlcyBvbiBBUk0uCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYyMzQ5Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeVZhbHVlIDogcHVibGljIFZh
bHVlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKEtpbmQga2luZCkKICAgICB7
Ci0gICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICBjYXNlIExvYWQ4WjoK
LSAgICAgICAgY2FzZSBMb2FkOFM6Ci0gICAgICAgIGNhc2UgTG9hZDE2WjoKLSAgICAgICAgY2Fz
ZSBMb2FkMTZTOgotICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAgIGNhc2UgU3RvcmU4OgotICAg
ICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzU3RvcmUoS2luZCBraW5kKQotICAg
IHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgU3RvcmU4
OgotICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzTG9hZChLaW5kIGtpbmQp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWNjZXB0cyhraW5kKSAmJiAhaXNTdG9yZShraW5kKTsK
KyAgICAgICAgcmV0dXJuIGlzTWVtb3J5QWNjZXNzKGtpbmQub3Bjb2RlKTsKICAgICB9CiAKICAg
ICB+TWVtb3J5VmFsdWUoKTsKQEAgLTc4LDExICs0NiwxNiBAQCBwdWJsaWM6CiAKICAgICBjb25z
dCBIZWFwUmFuZ2UmIHJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZTsgfQogICAgIHZvaWQg
c2V0UmFuZ2UoY29uc3QgSGVhcFJhbmdlJiByYW5nZSkgeyBtX3JhbmdlID0gcmFuZ2U7IH0KKyAg
ICAKKyAgICBjb25zdCBIZWFwUmFuZ2UmIHBoYW50b21SYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGhhbnRvbVJhbmdlOyB9CisgICAgdm9pZCBzZXRQaGFudG9tUmFuZ2UoY29uc3QgSGVhcFJhbmdl
JiByYW5nZSkgeyBtX3JhbmdlID0gcmFuZ2U7IH0KIAotICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0
IHsgcmV0dXJuIHR5cGUoKSA9PSBWb2lkOyB9Ci0gICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7IHJl
dHVybiB0eXBlKCkgIT0gVm9pZDsgfQorICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJu
IGlzU3RvcmUob3Bjb2RlKCkpOyB9CisgICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7IHJldHVybiBp
c0xvYWQob3Bjb2RlKCkpOyB9CiAKKyAgICBUeXBlIGFjY2Vzc1R5cGUoKSBjb25zdDsKICAgICBz
aXplX3QgYWNjZXNzQnl0ZVNpemUoKSBjb25zdDsKKyAgICBib29sIGhhc0ZlbmNlKCkgY29uc3Qg
eyByZXR1cm4gISFwaGFudG9tUmFuZ2UoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkdW1w
TWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpA
QCAtOTEsNjIgKzY0LDI0IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOwotCisgICAgCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0
IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZm
aXggdGhhdAogICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCi0gICAgTWVtb3J5
VmFsdWUoS2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVy
LCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2lu
ZCwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAg
ICAgICAgLCBtX3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCi0gICAgewotICAgICAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIExvYWQ4WjoKLSAgICAgICAgICAgIGNhc2UgTG9hZDhTOgotICAgICAgICAgICAgY2Fz
ZSBMb2FkMTZaOgotICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgotICAgICAgICAgICAgICAgIEFT
U0VSVCh0eXBlID09IEludDMyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgU3RvcmU4OgotICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICAgICAgY2Fz
ZSBTdG9yZToKLSAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBWb2lkKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAg
TWVtb3J5VmFsdWUoS2luZCwgVHlwZSwgT3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBv
ZmZzZXQgPSAwKTsKIAogICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSBy
ZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgotICAgIE1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAgOiBN
ZW1vcnlWYWx1ZShraW5kLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpCi0gICAgewot
ICAgIH0KKyAgICBNZW1vcnlWYWx1ZShLaW5kLCBPcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQz
Ml90IG9mZnNldCA9IDApOwogCi0gICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVzLgotICAg
IE1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1
ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAgICA6IFZhbHVlKENoZWNrZWRP
cGNvZGUsIGtpbmQsIFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIpCi0gICAgICAgICwgbV9v
ZmZzZXQob2Zmc2V0KQotICAgICAgICAsIG1fcmFuZ2UoSGVhcFJhbmdlOjp0b3AoKSkKLSAgICB7
Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGtp
bmQub3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgU3RvcmU4OgotICAgICAgICAgICAgY2Fz
ZSBTdG9yZTE2OgotICAgICAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVzIGFuZCBBdG9taWNYY2hnX19f
LiBOb3RlIHRoYXQgYnkgZGVmYXVsdCwgYXRvbWljcyBoYXZlIFRPUCBmb3IgdGhlaXIKKyAgICAv
LyBwaGFudG9tIGhlYXAuCisgICAgTWVtb3J5VmFsdWUoS2luZCwgT3JpZ2luLCBWYWx1ZSogdmFs
dWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAgIAorICAgIC8vIFVz
ZSB0aGlzIGZvcm0gZm9yIENBUy4KKyAgICBNZW1vcnlWYWx1ZShLaW5kLCBPcmlnaW4sIFZhbHVl
KiBleHBlY3RlZFZhbHVlLCBWYWx1ZSogbmV3VmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90
IG9mZnNldCA9IDApOwogCiAgICAgaW50MzJfdCBtX29mZnNldCB7IDAgfTsKLSAgICBIZWFwUmFu
Z2UgbV9yYW5nZTsKKyAgICBIZWFwUmFuZ2UgbV9yYW5nZSB7IEhlYXBSYW5nZTo6dG9wKCkgfTsK
KyAgICBIZWFwUmFuZ2UgbV9waGFudG9tUmFuZ2UgeyBIZWFwUmFuZ2UoKSB9OwogfTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUu
aAkocmV2aXNpb24gMjEyODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDYgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90
IHsKICAgICBNb2QsIC8vIEFsbCBiZXRzIGFyZSBvZmYgYXMgdG8gd2hhdCB3aWxsIGhhcHBlbiB3
aGVuIHlvdSBleGVjdXRlIHRoaXMgZm9yIC0yXjMxJS0xIGFuZCB4JTAuCiAgICAgVU1vZCwKIAot
CiAgICAgLy8gUG9seW1vcnBoaWMgbmVnYXRpb24uIE5vdGUgdGhhdCB3ZSBvbmx5IG5lZWQgdGhp
cyBmb3IgZmxvYXRpbmcgcG9pbnQsIHNpbmNlIGludGVnZXIgbmVnYXRpb24KICAgICAvLyBpcyBl
eGFjdGx5IGxpa2UgU3ViKDAsIHgpLiBCdXQgdGhhdCdzIG5vdCB0cnVlIGZvciBmbG9hdGluZyBw
b2ludC4gU3ViKDAsIDApIGlzIDAsIHdoaWxlCiAgICAgLy8gTmVnKDApIGlzIC0wLiBBbHNvLCB3
ZSBjYW5vbmljYWxpemUgU3ViKDAsIHgpIGludG8gTmVnKHgpIGluIGNhc2Ugb2YgaW50ZWdlcnMu
CkBAIC0xNjIsNiArMTYxLDk5IEBAIGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgU3RvcmUx
NiwKICAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMgc3RvcmUgZm9yIEludDMyLCBJbnQ2NCwg
RmxvYXQsIGFuZCBEb3VibGUuCiAgICAgU3RvcmUsCisgICAgCisgICAgLy8gQXRvbWljIGNvbXBh
cmUgYW5kIHN3YXAgdGhhdCByZXR1cm5zIGEgYm9vbGVhbi4gTWF5IGNob29zZSB0byBkbyBub3Ro
aW5nIGFuZCByZXR1cm4gZmFsc2UuIFlvdSBjYW4KKyAgICAvLyB1c3VhbGx5IGFzc3VtZSB0aGF0
IHRoaXMgaXMgZmFzdGVyIGFuZCByZXN1bHRzIGluIGxlc3MgY29kZSB0aGFuIEF0b21pY1N0cm9u
Z0NBUywgdGhvdWdoIHRoYXQncworICAgIC8vIG5vdCBuZWNlc3NhcmlseSB0cnVlIG9uIEludGVs
LCBpZiBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gZG9lcyBpdHMgam9iLiBJbWFnaW5lIHRoYXQgdGhp
cyBvcGNvZGUgaXMKKyAgICAvLyBhcyBpZiB5b3UgZGlkIHRoaXMgYXRvbWljYWxseToKKyAgICAv
LworICAgIC8vIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgLy8gYm9vbCBBdG9taWNXZWFrQ0FT
KFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSwgVCogcHRyKQorICAgIC8vIHsKKyAgICAvLyAg
ICAgaWYgKCFyYW5kKCkpCisgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFJlYWwgd29y
bGQgZXhhbXBsZSBvZiB0aGlzOiBjb250ZXh0IHN3aXRjaCBvbiBBUk0gd2hpbGUgZG9pbmcgQ0FT
LgorICAgIC8vICAgICBpZiAoKnB0ciAhPSBleHBlY3RlZFZhbHVlKQorICAgIC8vICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIC8vICAgICAqcHRyID0gbmV3VmFsdWU7CisgICAgLy8gICAgIHJl
dHVybiB0cnVlOworICAgIC8vIH0KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBhbGwgYXRvbWlj
cyBwdXQgdGhlIHBvaW50ZXIgbGFzdCB0byBiZSBjb25zaXN0ZW50IHdpdGggaG93IGxvYWRzIGFu
ZCBzdG9yZXMgd29yay4gVGhpcworICAgIC8vIGlzIGEgZ29vZnkgdHJhZGl0aW9uLCBidXQgaXQn
cyBoYXJtbGVzcywgYW5kIGJldHRlciB0aGFuIGJlaW5nIGluY29uc2lzdGVudC4KKyAgICAvLwor
ICAgIC8vIE5vdGUgdGhhdCB3ZWFrIENBUyBoYXMgbm8gZmVuY2luZyBndWFyYW50ZWVzIHdoZW4g
aXQgZmFpbHMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nCisgICAgLy8gdHJhbnNmb3Jt
YXRpb24gaXMgYWx3YXlzIHZhbGlkOgorICAgIC8vCisgICAgLy8gQmVmb3JlOgorICAgIC8vCisg
ICAgLy8gICAgICAgICBCcmFuY2goQXRvbWljV2Vha0NBUyhleHBlY3RlZCwgbmV3LCBwdHIpKQor
ICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I3N1Y2Nlc3MsIEVsc2U6I2ZhaWwKKyAgICAv
LworICAgIC8vIEFmdGVyOgorICAgIC8vCisgICAgLy8gICAgICAgICBCcmFuY2goRXF1YWwoTG9h
ZChwdHIpLCBleHBlY3RlZCkpCisgICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhlbjojYXR0ZW1w
dCwgRWxzZTojZmFpbAorICAgIC8vICAgICBCQiNhdHRlbXB0OgorICAgIC8vICAgICAgICAgQnJh
bmNoKEF0b21pY1dlYWtDQVMoZXhwZWN0ZWQsIG5ldywgcHRyKSkKKyAgICAvLyAgICAgICBTdWNj
ZXNzb3JzOiBUaGVuOiNzdWNjZXNzLCBFbHNlOiNmYWlsCisgICAgQXRvbWljV2Vha0NBUywKKyAg
ICAKKyAgICAvLyBBdG9taWMgY29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgdGhlIG9sZCB2
YWx1ZS4gRG9lcyBub3QgaGF2ZSB0aGUgbm9uZGV0ZXJtaW5pc20gb2YgV2Vha0NBUy4KKyAgICAv
LyBUaGlzIGlzIGEgYml0IG1vcmUgY29kZSBhbmQgYSBiaXQgc2xvd2VyIGluIHNvbWUgY2FzZXMs
IHRob3VnaCBub3QgYnkgYSBsb3QuIEltYWdpbmUgdGhhdCB0aGlzCisgICAgLy8gb3Bjb2RlIGlz
IGFzIGlmIHlvdSBkaWQgdGhpcyBhdG9taWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICAvLyBUIEF0b21pY1N0cm9uZ0NBUyhUIGV4cGVjdGVkVmFsdWUsIFQg
bmV3VmFsdWUsIFQqIHB0cikKKyAgICAvLyB7CisgICAgLy8gICAgIFQgb2xkVmFsdWUgPSAqcHRy
OworICAgIC8vICAgICBpZiAob2xkVmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZSkKKyAgICAvLyAgICAg
ICAgICpwdHIgPSBuZXdWYWx1ZTsKKyAgICAvLyAgICAgcmV0dXJuIG9sZFZhbHVlCisgICAgLy8g
fQorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IEF0b21pY1dlYWtDQVMgYW5kIEF0b21pY1N0cm9u
Z0NBUyBzb3J0IG9mIGhhdmUgdGhpcyBraW5kIG9mIGVxdWl2YWxlbmNlOgorICAgIC8vCisgICAg
Ly8gQXRvbWljV2Vha0NBUyhAZXhwLCBAbmV3LCBAcHRyKSA9PSBFcXVhbChBdG9taWNTdHJvbmdD
QVMoQGV4cCwgQG5ldywgQHB0ciksIEBleHApCisgICAgLy8KKyAgICAvLyBBc3N1bWluZyB0aGF0
IHRoZSBXZWFrQ0FTIGRvZXMgbm90IHNwdXJpb3VzbHkgZmFpbCwgb2YgY291cnNlLgorICAgIEF0
b21pY1N0cm9uZ0NBUywKKyAgICAKKyAgICAvLyBBdG9taWNhbGx5IF9fXyBhIG1lbW9yeSBsb2Nh
dGlvbiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuIFN5bnRheDoKKyAgICAvLworICAgIC8vIEBv
bGRWYWx1ZSA9IEF0b21pY1hjaGdfX18oQG9wZXJhbmQsIEBwdHIpCisgICAgQXRvbWljWGNoZ0Fk
ZCwKKyAgICBBdG9taWNYY2hnQW5kLAorICAgIEF0b21pY1hjaGdPciwKKyAgICBBdG9taWNYY2hn
U3ViLAorICAgIEF0b21pY1hjaGdYb3IsCisgICAgCisgICAgLy8gQXRvbWljYWxseSBleGNoYW5n
ZSBhIHZhbHVlIHdpdGggYSBtZW1vcnkgbG9jYXRpb24uIFN5bnRheDoKKyAgICAvLworICAgIC8v
IEBvbGRWYWx1ZSA9IEF0b21pY1hjaGcoQG5ld1ZhbHVlLCBAcHRyKQorICAgIEF0b21pY1hjaGcs
CisgICAgCisgICAgLy8gSW50cm9kdWNlIGFuIGludmlzaWJsZSBkZXBlbmRlbmN5IGZvciBibG9j
a2luZyBtb3Rpb24gb2YgbG9hZHMgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3RoZXIuIFN5bnRheDoK
KyAgICAvLworICAgIC8vIEByZXN1bHQgPSBEZXBlbmQoQHBoYW50b20pCisgICAgLy8KKyAgICAv
LyBUaGlzIGlzIGV2ZW50dWFsbHkgY29kZWdlbmVyYXRlZCB0byBoYXZlIGxvY2FsIHNlbWFudGlj
cyBhcyBpZiB3ZSBkaWQ6CisgICAgLy8KKyAgICAvLyBAcmVzdWx0ID0gJDAKKyAgICAvLworICAg
IC8vIEJ1dCBpdCBlbnN1cmVzIHRoYXQgdGhlIHVzZXJzIG9mIEByZXN1bHQgY2Fubm90IGV4ZWN1
dGUgdW50aWwgQHBoYW50b20gaXMgY29tcHV0ZWQuCisgICAgLy8KKyAgICAvLyBUaGUgY29tcGls
ZXIgaXMgbm90IGFsbG93ZWQgdG8gcmVhc29uIGFib3V0IHRoZSBmYWN0IHRoYXQgRGVwZW5kIGNv
ZGVnZW5lcmF0ZXMgdGhpcyB3YXkuIEFueSBraW5kCisgICAgLy8gb2YgdHJhbnNmb3JtYXRpb24g
b3IgYW5hbHlzaXMgdGhhdCByZWxpZXMgb24gdGhlIGluc2lnaHQgdGhhdCBEZXBlbmQgaXMgcmVh
bGx5IHplcm8gaXMgdW5zb3VuZCwKKyAgICAvLyBiZWNhdXNlIGl0IHVubG9ja3MgcmVvcmRlcmlu
ZyBvZiB1c2VycyBvZiBAcmVzdWx0IGFuZCBAcGhhbnRvbS4KKyAgICAvLworICAgIC8vIE9uIFg4
NiwgdGhpcyBpcyBsb3dlcmVkIHRvIGEgbG9hZC1sb2FkIGZlbmNlIGFuZCBAcmVzdWx0IHVzZXMg
QHBoYW50b20gZGlyZWN0bHkuCisgICAgLy8KKyAgICAvLyBPbiBBUk0sIHRoaXMgaXMgbG93ZXJl
ZCBhcyBpZiBsaWtlOgorICAgIC8vCisgICAgLy8gQHJlc3VsdCA9IEJpdFhvcihAcGhhbnRvbSwg
QHBoYW50b20pCisgICAgLy8KKyAgICAvLyBFeGNlcHQgdGhhdCB0aGUgY29tcGlsZXIgbmV2ZXIg
Z2V0cyBhbiBvcHBvcnR1bml0eSB0byBzaW1wbGlmeSBvdXQgdGhlIEJpdFhvci4KKyAgICBEZXBl
bmQsCiAKICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsIGFkZHJlc3Mg
b2YgYSBXYXNtIG1lbW9yeSBvcGVyYXRpb24uIEl0IHRha2VzIGFuIEludFB0cgogICAgIC8vIGFu
ZCBhIHBpbm5lZCByZWdpc3RlciB0aGVuIGNvbXB1dGVzIHRoZSBhcHByb3ByaWF0ZSBJbnRQdHIg
YWRkcmVzcy4gRm9yIHRoZSB1c2UtY2FzZSBvZgpAQCAtMzAxLDYgKzM5Myw3MSBAQCBpbmxpbmUg
Ym9vbCBpc0RlZmluaXRlbHlUZXJtaW5hbChPcGNvZGUgCiAgICAgfQogfQogCitpbmxpbmUgYm9v
bCBpc0xvYWQoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNh
c2UgTG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2WjoKKyAgICBjYXNl
IExvYWQxNlM6CisgICAgY2FzZSBMb2FkOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc1N0
b3JlKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIFN0
b3JlODoKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
aW5saW5lIGJvb2wgaXNMb2FkU3RvcmUoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9w
Y29kZSkgeworICAgIGNhc2UgTG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9h
ZDE2WjoKKyAgICBjYXNlIExvYWQxNlM6CisgICAgY2FzZSBMb2FkOgorICAgIGNhc2UgU3RvcmU4
OgorICAgIGNhc2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxp
bmUgYm9vbCBpc0F0b21pYyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7
CisgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAg
IGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBB
dG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNo
Z1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlz
TWVtb3J5QWNjZXNzKE9wY29kZSBvcGNvZGUpCit7CisgICAgcmV0dXJuIGlzQXRvbWljKG9wY29k
ZSkgfHwgaXNMb2FkU3RvcmUob3Bjb2RlKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlLmgJKHJldmlzaW9uIDIxMjgwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDcgQEAgcHVibGljOgogICAg
IFZhbHVlKiBhZGRJbnRDb25zdGFudChPcmlnaW4sIFR5cGUsIGludDY0X3QgdmFsdWUpOwogICAg
IFZhbHVlKiBhZGRJbnRDb25zdGFudChWYWx1ZSosIGludDY0X3QgdmFsdWUpOwogCisgICAgLy8g
WW91J3JlIGd1YXJhbnRlZWQgdGhhdCBib3R0b20gaXMgemVyby4KICAgICBWYWx1ZSogYWRkQm90
dG9tKE9yaWdpbiwgVHlwZSk7CiAgICAgVmFsdWUqIGFkZEJvdHRvbShWYWx1ZSopOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMTI4MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3MSw2ICszNzEsNDMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAg
ICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSgh
dmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBl
KCkgPT0gdmFsdWUtPmNoaWxkKDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPmNoaWxkKDApLT50eXBlKCkpLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgyKS0+dHlw
ZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
dmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSgh
dmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgw
KS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBl
KCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2
YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0Fu
ZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgICAgICAgICAgY2FzZSBBdG9t
aWNYY2hnU3ViOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICAgICAg
Y2FzZSBBdG9taWNYY2hnOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgp
LmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDApLT50eXBlKCksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPnR5
cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUt
PmNoaWxkKDEpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRGVwZW5kOgorICAgICAgICAgICAgICAgIFZBTElE
QVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1
ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURShpc0ludCh2YWx1ZS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgV2FzbUFkZHJlc3M6CiAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZh
bHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0g
MSwgKCJBdCAiLCAqdmFsdWUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5j
cHAJKHJldmlzaW9uIDIxMjgwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg5LDYgKzU4OSw3IEBAIEVmZmVjdHMgVmFsdWU6OmVm
ZmVjdHMoKSBjb25zdAogICAgIGNhc2UgQmVsb3dFcXVhbDoKICAgICBjYXNlIEVxdWFsT3JVbm9y
ZGVyZWQ6CiAgICAgY2FzZSBTZWxlY3Q6CisgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRGl2OgogICAgIGNhc2UgVURpdjoKQEAgLTYwMCwxNiArNjAxLDQ0IEBAIEVm
ZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgIGNhc2UgTG9hZDhTOgogICAgIGNhc2Ug
TG9hZDE2WjoKICAgICBjYXNlIExvYWQxNlM6Ci0gICAgY2FzZSBMb2FkOgotICAgICAgICByZXN1
bHQucmVhZHMgPSBhczxNZW1vcnlWYWx1ZT4oKS0+cmFuZ2UoKTsKKyAgICBjYXNlIExvYWQ6IHsK
KyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOworICAgICAg
ICByZXN1bHQucmVhZHMgPSBtZW1vcnktPnJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPnBo
YW50b21SYW5nZSgpKSB7CisgICAgICAgICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5waGFu
dG9tUmFuZ2UoKTsKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CisgICAgICAgIH0K
ICAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICBicmVhazsK
KyAgICB9CiAgICAgY2FzZSBTdG9yZTg6CiAgICAgY2FzZSBTdG9yZTE2OgotICAgIGNhc2UgU3Rv
cmU6Ci0gICAgICAgIHJlc3VsdC53cml0ZXMgPSBhczxNZW1vcnlWYWx1ZT4oKS0+cmFuZ2UoKTsK
KyAgICBjYXNlIFN0b3JlOiB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBhczxNZW1v
cnlWYWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LndyaXRlcyA9IG1lbW9yeS0+cmFuZ2UoKTsKKyAg
ICAgICAgaWYgKG1lbW9yeS0+cGhhbnRvbVJhbmdlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5y
ZWFkcyA9IG1lbW9yeS0+cGhhbnRvbVJhbmdlKCk7CisgICAgICAgICAgICByZXN1bHQuZmVuY2Ug
PSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50ID0gdHJ1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBj
YXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBB
dG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNo
Z1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hnOiB7Cisg
ICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBhczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAg
cmVzdWx0LnJlYWRzID0gbWVtb3J5LT5yYW5nZSgpIHwgbWVtb3J5LT5waGFudG9tUmFuZ2UoKTsK
KyAgICAgICAgcmVzdWx0LndyaXRlcyA9IG1lbW9yeS0+cmFuZ2UoKSB8IG1lbW9ydHktPnBoYW50
b21SYW5nZSgpOworICAgICAgICBpZiAobWVtb3J5LT5waGFudG9tUmFuZ2UoKSkKKyAgICAgICAg
ICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50
ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgV2FzbUFkZHJlc3M6CiAg
ICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwpAQCAtNjE3
LDE4ICs2NDYsNyBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICAgICAgY29u
c3QgRmVuY2VWYWx1ZSogZmVuY2UgPSBhczxGZW5jZVZhbHVlPigpOwogICAgICAgICByZXN1bHQu
cmVhZHMgPSBmZW5jZS0+cmVhZDsKICAgICAgICAgcmVzdWx0LndyaXRlcyA9IGZlbmNlLT53cml0
ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIFByZXZlbnQga2lsbGluZyBvZiBmZW5jZXMgdGhhdCBj
bGFpbSBub3QgdG8gd3JpdGUgYW55dGhpbmcuIEl0J3MgYSBiaXQgd2VpcmQgdGhhdCB3ZSB1c2UK
LSAgICAgICAgLy8gbG9jYWwgc3RhdGUgYXMgdGhlIHdheSB0byBkbyB0aGlzLCBidXQgaXQgaGFw
cGVucyB0byB3b3JrOiB3ZSBtdXN0IGFzc3VtZSB0aGF0IHdlIGNhbm5vdAotICAgICAgICAvLyBr
aWxsIHdyaXRlc0xvY2FsU3RhdGUgdW5sZXNzIHdlIHVuZGVyc3RhbmRzIGV4YWN0bHkgd2hhdCB0
aGUgaW5zdHJ1Y3Rpb24gaXMgZG9pbmcgKGxpa2UKLSAgICAgICAgLy8gdGhlIHdheSB0aGF0IGZp
eFNTQSB1bmRlcnN0YW5kcyBTZXQvR2V0IGFuZCB0aGUgd2F5IHRoYXQgcmVkdWNlU3RyZW5ndGgg
YW5kIG90aGVycwotICAgICAgICAvLyB1bmRlcnN0YW5kIFVwc2lsb24pLiBUaGlzIHdvdWxkIG9u
bHkgYmVjb21lIGEgcHJvYmxlbSBpZiB3ZSBoYWQgc29tZSBhbmFseXNpcyB0aGF0IHdhcwotICAg
ICAgICAvLyBsb29raW5nIHRvIHVzZSB0aGUgd3JpdGVzTG9jYWxTdGF0ZSBiaXQgdG8gaW52YWxp
ZGF0ZSBhIENTRSBvdmVyIGxvY2FsIHN0YXRlIG9wZXJhdGlvbnMuCi0gICAgICAgIC8vIFRoZW4g
YSBGZW5jZSB3b3VsZCBsb29rIGJsb2NrLCBzYXksIHRoZSBlbGltaW5hdGlvbiBvZiBhIHJlZHVu
ZGFudCBHZXQuIEJ1dCBpdCBsaWtlCi0gICAgICAgIC8vIHRoYXQncyBub3QgYXQgYWxsIGhvdyBv
dXIgb3B0aW1pemF0aW9ucyBmb3IgU2V0L0dldC9VcHNpbG9uL1BoaSB3b3JrIC0gdGhleSBncm9r
IHRoZWlyCi0gICAgICAgIC8vIG9wZXJhdGlvbnMgZGVlcGx5IGVub3VnaCB0aGF0IHRoZXkgaGF2
ZSBubyBuZWVkIHRvIGNoZWNrIHRoaXMgYml0IC0gc28gdGhpcyBjaGVhdCBpcwotICAgICAgICAv
LyBmaW5lLgotICAgICAgICByZXN1bHQud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CisgICAgICAg
IHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEND
YWxsOgpAQCAtNjk0LDYgKzcxMiw3IEBAIFZhbHVlS2V5IFZhbHVlOjprZXkoKSBjb25zdAogICAg
IGNhc2UgQ2hlY2s6CiAgICAgY2FzZSBCaXR3aXNlQ2FzdDoKICAgICBjYXNlIE5lZzoKKyAgICBj
YXNlIERlcGVuZDoKICAgICAgICAgcmV0dXJuIFZhbHVlS2V5KGtpbmQoKSwgdHlwZSgpLCBjaGls
ZCgwKSk7CiAgICAgY2FzZSBBZGQ6CiAgICAgY2FzZSBTdWI6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDIxMjgwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsOCBAQCBwdWJsaWM6
CiAgICAgLy8gdmFsdWVzIHdpdGggSWRlbnRpdGllcyBvbiBib3R0b20gY29uc3RhbnRzLiBGb3Ig
dGhpcyByZWFzb24sIHRoaXMgdGFrZXMgYSBjYWxsYmFjayB0aGF0IGlzCiAgICAgLy8gcmVzcG9u
c2libGUgZm9yIGNyZWF0aW5nIGJvdHRvbXMuIFRoZXJlJ3MgYSB1dGlsaXR5IGZvciB0aGlzLCBz
ZWUgQjNCb3R0b21Qcm92aWRlci5oLiBZb3UKICAgICAvLyBjYW4gYWxzbyBhY2Nlc3MgdGhhdCB1
dGlsaXR5IHVzaW5nIHJlcGxhY2VXaXRoQm90dG9tKEluc2VydGlvblNldCYsIHNpemVfdCkuCisg
ICAgLy8KKyAgICAvLyBZb3UncmUgZ3VhcmFudGVlZCB0aGF0IGJvdHRvbSBpcyB6ZXJvLgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEJvdHRvbVByb3ZpZGVyPgogICAgIHZvaWQgcmVwbGFjZVdpdGhC
b3R0b20oY29uc3QgQm90dG9tUHJvdmlkZXImKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMjEyODAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTY2OCwyOCArNjY4LDc2IEBAIExvYWQ4IFU6Rzo4LCBaRDpHOjMyCiAgICAgQWRkciwgVG1w
CiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxOCBVOkc6OCwgWkQ6RzozMgorICAgIEFkZHIsIFRt
cAorICAgIEluZGV4LCBUbXAKKwogU3RvcmU4IFU6Rzo4LCBEOkc6OAogICAgIFRtcCwgSW5kZXgK
ICAgICBUbXAsIEFkZHIKICAgICB4ODY6IEltbSwgSW5kZXgKICAgICB4ODY6IEltbSwgQWRkcgog
CitTdG9yZVJlbDggVTpHOjgsIEQ6Rzo4CisgICAgVG1wLCBJbmRleAorICAgIFRtcCwgQWRkcgor
ICAgIHg4NjogSW1tLCBJbmRleAorICAgIHg4NjogSW1tLCBBZGRyCisKIExvYWQ4U2lnbmVkRXh0
ZW5kVG8zMiBVOkc6OCwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAor
TG9hZEFjcThTaWduZWRFeHRlbmRUbzMyIFU6Rzo4LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisg
ICAgSW5kZXgsIFRtcAorCiBMb2FkMTYgVTpHOjE2LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAg
ICAgSW5kZXgsIFRtcAogCitMb2FkQWNxMTYgVTpHOjE2LCBaRDpHOjMyCisgICAgQWRkciwgVG1w
CisgICAgSW5kZXgsIFRtcAorCiBMb2FkMTZTaWduZWRFeHRlbmRUbzMyIFU6RzoxNiwgWkQ6Rzoz
MgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9hZEFjcTE2U2lnbmVkRXh0ZW5k
VG8zMiBVOkc6MTYsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIFN0
b3JlMTYgVTpHOjE2LCBEOkc6MTYKICAgICBUbXAsIEluZGV4CiAgICAgVG1wLCBBZGRyCiAKK1N0
b3JlQWNxMTYgVTpHOjE2LCBEOkc6MTYKKyAgICBUbXAsIEluZGV4CisgICAgVG1wLCBBZGRyCisK
K0xvYWRBY3EzMiBVOkc6MzIgWkQ6RzozMgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisg
ICAgSW5kZXgsIFRtcAorCitTdG9yZVJlbDMyIFU6RzozMiBaRDpHOjMyCisgICAgVG1wLCBBZGRy
CisgICAgVG1wLCBJbmRleAorICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4
CisKKzY0OiBMb2FkQWNxNjQgVTpHOjY0IFpEOkc6NjQKKyAgICBUbXAsIFRtcAorICAgIEFkZHIs
IFRtcAorICAgIEluZGV4LCBUbXAKKworNjQ6IFN0b3JlUmVsNjQgVTpHOjY0IFpEOkc6NjQKKyAg
ICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6
IEltbSwgSW5kZXgKKwogQ29tcGFyZTMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIK
ICAgICBSZWxDb25kLCBUbXAsIFRtcCwgVG1wCiAgICAgUmVsQ29uZCwgVG1wLCBJbW0sIFRtcAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302731</attachid>
            <date>2017-02-24 20:53:49 -0800</date>
            <delta_ts>2017-02-25 11:28:16 -0800</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37595</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBdG9t
aWNWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK0F0b21pY1ZhbHVlOjp+QXRvbWljVmFsdWUoKQoreworfQorCitXaWR0aCBB
dG9taWNWYWx1ZTo6YWNjZXNzV2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3dpZHRoOwor
fQorCit2b2lkIEF0b21pY1ZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChjb21tYSwgIndpZHRoID0gIiwg
bV93aWR0aCk7CisgICAgCisgICAgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKGNvbW1hLCBvdXQpOwor
fQorCitWYWx1ZSogQXRvbWljVmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG5ldyBBdG9taWNWYWx1ZSgqdGhpcyk7Cit9CisKK0F0b21pY1ZhbHVlOjpBdG9taWNWYWx1ZShL
aW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwg
aW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDogTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2lu
ZCwgb3BlcmFuZC0+dHlwZSgpLCBvcmlnaW4sIG9mZnNldCwgb3BlcmFuZCwgcG9pbnRlcikKK3sK
KyAgICBzZXRGZW5jZVJhbmdlKEhlYXBSYW5nZTo6dG9wKCkpOworICAgIAorICAgIHN3aXRjaCAo
a2luZC5vcGNvZGUoKSkgeworICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21p
Y1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3Vi
OgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKworQXRvbWljVmFsdWU6OkF0b21pY1ZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdp
biwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBuZXdWYWx1ZSwgVmFsdWUqIHBvaW50ZXIs
IGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGUsIGtp
bmQsIGtpbmQub3Bjb2RlKCkgPT0gQXRvbWljV2Vha0NBUyA/IEludDMyIDogZXhwZWN0ZWRWYWx1
ZS0+dHlwZSgpLCBvcmlnaW4sIG9mZnNldCwgZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUsIHBvaW50
ZXIpCit7CisgICAgc2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBz
d2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2Fz
ZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzV2lkdGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEF0b21pY1ZhbHVlIDogcHVibGljIE1lbW9yeVZhbHVl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKEtpbmQga2luZCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0F0b21pYyhraW5kLm9wY29kZSgpKTsKKyAgICB9CisgICAgCisgICAg
fkF0b21pY1ZhbHVlKCk7CisgICAgCisgICAgV2lkdGggYWNjZXNzV2lkdGgoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYs
IFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgVmFsdWUqIGNsb25lSW1w
bCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJv
Y2VkdXJlOworICAgIAorICAgIEF0b21pY1ZhbHVlKEtpbmQsIE9yaWdpbiwgVmFsdWUqIG9wZXJh
bmQsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAgIAorICAgIEF0b21p
Y1ZhbHVlKEtpbmQsIE9yaWdpbiwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBuZXdWYWx1
ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CisgICAgCisgICAgV2lkdGgg
bV93aWR0aDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw4IEBAIGJvb2wgRWZmZWN0czo6aW50ZXJm
ZXJlcyhjb25zdCBFZmZlY3RzJiAKICAgICAgICAgfHwgaW50ZXJmZXJlc1dpdGhXcml0ZXNQaW5u
ZWQob3RoZXIsICp0aGlzKQogICAgICAgICB8fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIud3JpdGVz
KQogICAgICAgICB8fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIucmVhZHMpCi0gICAgICAgIHx8IHJl
YWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcyk7CisgICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90
aGVyLndyaXRlcykKKyAgICAgICAgfHwgKGZlbmNlICYmIG90aGVyLmZlbmNlKTsKIH0KIAogYm9v
bCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0IEVmZmVjdHMmIG90aGVyKSBjb25zdApAQCAtOTUs
NyArOTYsOCBAQCBib29sIEVmZmVjdHM6Om9wZXJhdG9yPT0oY29uc3QgRWZmZWN0cyYgCiAgICAg
ICAgICYmIHdyaXRlc1Bpbm5lZCA9PSBvdGhlci53cml0ZXNQaW5uZWQKICAgICAgICAgJiYgcmVh
ZHNQaW5uZWQgPT0gb3RoZXIucmVhZHNQaW5uZWQKICAgICAgICAgJiYgd3JpdGVzID09IG90aGVy
LndyaXRlcwotICAgICAgICAmJiByZWFkcyA9PSBvdGhlci5yZWFkczsKKyAgICAgICAgJiYgcmVh
ZHMgPT0gb3RoZXIucmVhZHMKKyAgICAgICAgJiYgZmVuY2UgPT0gb3RoZXIuZmVuY2U7CiB9CiAK
IGJvb2wgRWZmZWN0czo6b3BlcmF0b3IhPShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAg
LTEyMCw2ICsxMjIsOCBAQCB2b2lkIEVmZmVjdHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlc1Bpbm5lZCIpOwogICAgIGlmIChyZWFk
c1Bpbm5lZCkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiUmVhZHNQaW5uZWQiKTsKKyAgICBp
ZiAoZmVuY2UpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIkZlbmNlIik7CiAgICAgaWYgKHdy
aXRlcykKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiV3JpdGVzOiIsIHdyaXRlcyk7CiAgICAg
aWYgKHJlYWRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkocmV2aXNp
b24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBAQCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzE3MwogICAgIGJvb2wgcmVh
ZHNQaW5uZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgd3JpdGVzUGlubmVkIHsgZmFsc2UgfTsKKyAg
ICAKKyAgICAvLyBNZW1vcnkgZmVuY2VzIGNhbm5vdCBiZSByZW9yZGVyZWQgYXJvdW5kIGVhY2gg
b3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVpciBlZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQKKyAgICAv
LyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEgbWVtb3J5IGZlbmNlLgorICAgIGJvb2wgZmVuY2UgeyBm
YWxzZSB9OwogCiAgICAgSGVhcFJhbmdlIHdyaXRlczsKICAgICBIZWFwUmFuZ2UgcmVhZHM7CkBA
IC04OSw2ICs5Myw3IEBAIHN0cnVjdCBFZmZlY3RzIHsKICAgICAgICAgcmVzdWx0LnJlYWRzID0g
SGVhcFJhbmdlOjp0b3AoKTsKICAgICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAg
ICAgICAgcmVzdWx0LndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIHJlc3VsdC5mZW5jZSA9
IHRydWU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0xMDMsNyArMTA4LDcg
QEAgc3RydWN0IEVmZmVjdHMgewogCiAgICAgYm9vbCBtdXN0RXhlY3V0ZSgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gdGVybWluYWwgfHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2Nh
bFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQaW5uZWQ7CisgICAgICAgIHJldHVybiB0ZXJtaW5h
bCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRlc0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8IHdyaXRl
c1Bpbm5lZCB8fCBmZW5jZTsKICAgICB9CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcmVvcmRl
cmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0aGVzZSByZXNwZWN0aXZlIGVmZmVjdHMgd291bGQgY2hh
bmdlIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNv
bW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIxMjk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDIsNiArMTQyLDcgQEAgc3RydWN0IEltcHVyZUJs
b2NrRGF0YSB7CiAKICAgICBSYW5nZVNldDxIZWFwUmFuZ2U+IHJlYWRzOyAvLyBUaGlzIG9ubHkg
Z2V0cyB1c2VkIGZvciBmb3J3YXJkIHN0b3JlIGVsaW1pbmF0aW9uLgogICAgIFJhbmdlU2V0PEhl
YXBSYW5nZT4gd3JpdGVzOyAvLyBUaGlzIGdldHMgdXNlZCBmb3IgYm90aCBsb2FkIGFuZCBzdG9y
ZSBlbGltaW5hdGlvbi4KKyAgICBib29sIGZlbmNlOwogCiAgICAgTWVtb3J5VmFsdWVNYXAgc3Rv
cmVzQXRIZWFkOwogICAgIE1lbW9yeVZhbHVlTWFwIG1lbW9yeVZhbHVlc0F0VGFpbDsKQEAgLTE3
NCwxMiArMTc1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAobWVtb3J5ICYmIG1lbW9yeS0+aXNTdG9yZSgpCiAgICAgICAgICAgICAgICAgICAgICYm
ICFkYXRhLnJlYWRzLm92ZXJsYXBzKG1lbW9yeS0+cmFuZ2UoKSkKLSAgICAgICAgICAgICAgICAg
ICAgJiYgIWRhdGEud3JpdGVzLm92ZXJsYXBzKG1lbW9yeS0+cmFuZ2UoKSkpCisgICAgICAgICAg
ICAgICAgICAgICYmICFkYXRhLndyaXRlcy5vdmVybGFwcyhtZW1vcnktPnJhbmdlKCkpCisgICAg
ICAgICAgICAgICAgICAgICYmICghZGF0YS5mZW5jZSB8fCAhbWVtb3J5LT5oYXNGZW5jZSgpKSkK
ICAgICAgICAgICAgICAgICAgICAgZGF0YS5zdG9yZXNBdEhlYWQuYWRkKG1lbW9yeSk7CiAgICAg
ICAgICAgICAgICAgZGF0YS5yZWFkcy5hZGQoZWZmZWN0cy5yZWFkcyk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9IGVmZmVjdHMud3JpdGVzKQogICAgICAgICAgICAg
ICAgICAgICBjbG9iYmVyKGRhdGEsIHdyaXRlcyk7CisgICAgICAgICAgICAgICAgZGF0YS5mZW5j
ZSB8PSBlZmZlY3RzLmZlbmNlOwogCiAgICAgICAgICAgICAgICAgaWYgKG1lbW9yeSkKICAgICAg
ICAgICAgICAgICAgICAgZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuYWRkKG1lbW9yeSk7CkBAIC00
NzgsNiArNDgxLDkgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CiAg
ICAgYm9vbCBmaW5kU3RvcmVBZnRlckNsb2JiZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdl
LCBjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxN
ZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBlbGltaW5hdGUgYSBzdG9yZSBpZiBldmVyeSBmb3J3
YXJkIHBhdGggaGl0cyBhIHN0b3JlIHRvIHRoZSBzYW1lIGxvY2F0aW9uIGJlZm9yZQogICAgICAg
ICAvLyBoaXR0aW5nIGFueSBvcGVyYXRpb24gdGhhdCBvYnNlcnZlcyB0aGUgc3RvcmUuIFRoaXMg
c2VhcmNoIHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSwgYnV0
IGluIHRoZSBvdmVyd2hlbG1pbmcgbWFqb3JpdHkgb2YgY2FzZXMgaXQgd2lsbCBhbG1vc3QgaW1t
ZWRpYXRlbHkgaGl0IGFuIApAQCAtNjE0LDYgKzYyMCwxMiBAQCBwcml2YXRlOgogICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcgYmFj
a3dhcmQgZm9yICIsICpwdHIsICIuLi5cbiIpOwogICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFs
dWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpKSB7CisgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgR2l2aW5nIHVwIGJlY2F1c2UgZmVu
Y2VzLlxuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSogbWF0Y2ggPSBtX2RhdGEubWVtb3J5VmFsdWVzQXRU
YWlsLmZpbmQocHRyLCBmaWx0ZXIpKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgRm91bmQgIiwgKm1hdGNoLCAiIGxvY2FsbHkuXG4iKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZpc2lvbiAyMTI5
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtODgsNiArODgsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CiAgICAgfQogICAgIAorICAgIEhlYXBSYW5nZSBvcGVyYXRvcnwoY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBIZWFwUmFuZ2UoCisg
ICAgICAgICAgICBzdGQ6Om1pbihtX2JlZ2luLCBvdGhlci5tX2JlZ2luKSwKKyAgICAgICAgICAg
IHN0ZDo6bWF4KG1fZW5kLCBvdGhlci5tX2VuZCkpOworICAgIH0KKyAgICAKICAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsgfQogCiAg
ICAgdW5zaWduZWQgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xODUsNiArMTg1LDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbG9hZC1s
b2FkIGZlbmNlLiBUaGlzIGNvZGVnZW5zIHRvIG5vdGhpbmcgb24gWDg2LiBXZSB1c2UgaXQgdG8g
dGVsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcGlsZXIgbm90IHRvIGJsb2NrIGxv
YWQgbW90aW9uLgorICAgICAgICAgICAgICAgICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxGZW5jZVZhbHVlPihtX2luZGV4LCBtX29yaWdpbik7CisgICAgICAg
ICAgICAgICAgICAgIGZlbmNlLT5yZWFkID0gSGVhcFJhbmdlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGZlbmNlLT53cml0ZSA9IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAvLyBLaWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNob3VsZCB1
bmxvY2sgYSBidW5jaCBvZiBjb2RlIHNpbXBsaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAg
ICBtX25vZGUtPnJlcGxhY2VXaXRoQm90dG9tKG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4KTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIxMjk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NjIsMTEgKzU2MiwxNiBAQCBwcml2YXRlOgogICAgIAogICAgIEFyZ1Byb21p
c2UgbG9hZFByb21pc2VBbnlPcGNvZGUoVmFsdWUqIGxvYWRWYWx1ZSkKICAgICB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGxvYWRWYWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpOwogICAgICAgICBp
ZiAoIWNhbkJlSW50ZXJuYWwobG9hZFZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsK
ICAgICAgICAgaWYgKGNyb3NzZXNJbnRlcmZlcmVuY2UobG9hZFZhbHVlKSkKICAgICAgICAgICAg
IHJldHVybiBBcmcoKTsKLSAgICAgICAgQXJnUHJvbWlzZSByZXN1bHQoYWRkcihsb2FkVmFsdWUp
LCBsb2FkVmFsdWUpOworICAgICAgICBpZiAobG9hZFZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+
aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgQXJnIGxvYWRB
ZGRyID0gYWRkcihsb2FkVmFsdWUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2FkQWRkcik7
CisgICAgICAgIEFyZ1Byb21pc2UgcmVzdWx0KGxvYWRBZGRyLCBsb2FkVmFsdWUpOwogICAgICAg
ICBpZiAobG9hZFZhbHVlLT50cmFwcygpKQogICAgICAgICAgICAgcmVzdWx0LnNldFRyYXBzKHRy
dWUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtOTMxLDEwICs5MzYsMTUgQEAgcHJpdmF0
ZToKICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlMzIsIEFpcjo6T3Bjb2RlIG9wY29kZTY0LCBD
b21tdXRhdGl2aXR5IGNvbW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KICAgICBib29sIHRy
eUFwcGVuZFN0b3JlQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKICAgICB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpKTsKKyAgICAgICAg
CiAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUob3Bjb2RlMzIs
IG9wY29kZTY0LCBsZWZ0LT50eXBlKCkpOwogICAgICAgICBpZiAob3Bjb2RlID09IEFpcjo6T29w
cykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCisgICAgICAgIGlmIChtX3Zh
bHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCiAgICAgICAgIEFyZyBzdG9yZUFkZHIgPSBhZGRyKG1fdmFsdWUpOwog
ICAgICAgICBBU1NFUlQoc3RvcmVBZGRyKTsKIApAQCAtMjE2Niw2ICsyMTc2LDEyIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICBhcHBlbmRCaW5PcDxYb3IzMiwgWG9yNjQsIEFp
cjo6T29wcywgQWlyOjpPb3BzLCBDb21tdXRhdGl2ZT4oCisgICAgICAgICAgICAgICAgbV92YWx1
ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogCiAgICAgICAgIGNhc2UgU2hsOiB7CiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMSktPmlzSW50MzIoMSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01lbW9yeVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMzIgKzM0LDQw
IEBAIE1lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQogewogfQogCitUeXBlIE1lbW9yeVZhbHVl
OjphY2Nlc3NUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAoaXNMb2FkKG9wY29kZSgpKSkKKyAgICAg
ICAgcmV0dXJuIHR5cGUoKTsKKyAgICAvLyBUaGlzIGhhcHBlbnMgdG8gd29yayBmb3IgYXRvbWlj
cywgdG9vLiBUaGF0J3Mgd2h5IEF0b21pY1ZhbHVlIGRvZXMgbm90IG5lZWQgdG8gb3ZlcnJpZGUg
dGhpcy4KKyAgICByZXR1cm4gY2hpbGQoMCktPnR5cGUoKTsKK30KKwogc2l6ZV90IE1lbW9yeVZh
bHVlOjphY2Nlc3NCeXRlU2l6ZSgpIGNvbnN0CiB7CisgICAgcmV0dXJuIGJ5dGVzKGFjY2Vzc1dp
ZHRoKCkpOworfQorCitXaWR0aCBNZW1vcnlWYWx1ZTo6YWNjZXNzV2lkdGgoKSBjb25zdAorewog
ICAgIHN3aXRjaCAob3Bjb2RlKCkpIHsKICAgICBjYXNlIExvYWQ4WjoKICAgICBjYXNlIExvYWQ4
UzoKICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiBX
aWR0aDg7CiAgICAgY2FzZSBMb2FkMTZaOgogICAgIGNhc2UgTG9hZDE2UzoKICAgICBjYXNlIFN0
b3JlMTY6Ci0gICAgICAgIHJldHVybiAyOworICAgICAgICByZXR1cm4gV2lkdGgxNjsKICAgICBj
YXNlIExvYWQ6Ci0gICAgICAgIHJldHVybiBzaXplb2ZUeXBlKHR5cGUoKSk7CisgICAgICAgIHJl
dHVybiB3aWR0aEZvclR5cGUodHlwZSgpKTsKICAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXR1
cm4gc2l6ZW9mVHlwZShjaGlsZCgwKS0+dHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9y
VHlwZShjaGlsZCgwKS0+dHlwZSgpKTsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIFdp
ZHRoODsKICAgICB9CiB9CiAKLVdpZHRoIE1lbW9yeVZhbHVlOjphY2Nlc3NXaWR0aCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHdpZHRoRm9yQnl0ZXMoYWNjZXNzQnl0ZVNpemUoKSk7Ci19Ci0KIHZv
aWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CiB7CiAgICAgaWYgKG1fb2Zmc2V0KQpAQCAtNjcsNiArNzUsOCBAQCB2b2lk
IE1lbW9yeVZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImCiAgICAgaWYgKChpc0xvYWQoKSAm
JiBlZmZlY3RzKCkucmVhZHMgIT0gcmFuZ2UoKSkKICAgICAgICAgfHwgKGlzU3RvcmUoKSAmJiBl
ZmZlY3RzKCkud3JpdGVzICE9IHJhbmdlKCkpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJy
YW5nZSA9ICIsIHJhbmdlKCkpOworICAgIGlmIChwaGFudG9tUmFuZ2UoKSkKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAicGhhbnRvbVJhbmdlID0gIiwgcGhhbnRvbVJhbmdlKCkpOwogfQogCiBW
YWx1ZSogTWVtb3J5VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CkBAIC03NCw2ICs4NCw1OCBAQCBW
YWx1ZSogTWVtb3J5VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CiAgICAgcmV0dXJuIG5ldyBNZW1v
cnlWYWx1ZSgqdGhpcyk7CiB9CiAKKy8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3Qg
TG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRo
YXQKKy8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCitNZW1vcnlWYWx1ZTo6TWVtb3J5
VmFsdWUoS2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVy
LCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0
eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgLCBtX29mZnNldChvZmZzZXQpCit7CisgICAgaWYg
KCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Cisg
ICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWQ4
WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAg
Y2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6
CisgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBWb2lkKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIFVzZSB0aGlzIGZvcm0g
Zm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorTWVtb3J5VmFsdWU6
Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGlu
dDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKGtpbmQsIEludDMyLCBvcmlnaW4s
IHBvaW50ZXIsIG9mZnNldCkKK3sKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAg
ICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAg
IGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2
UzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIFVzZSB0aGlzIGZv
cm0gZm9yIHN0b3Jlcy4KK01lbW9yeVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0g
MCkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIFZvaWQsIG9yaWdpbiwgdmFsdWUs
IHBvaW50ZXIpCisgICAgLCBtX29mZnNldChvZmZzZXQpCit7CisgICAgQVNTRVJUKGlzU3RvcmUo
a2luZC5vcGNvZGUoKSkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1v
cnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9y
eVZhbHVlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDQzICszMiwxMSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotLy8gRklYTUU6IFdlIHdhbnQgdG8gYWxsb3cg
ZmVuY2VkIG1lbW9yeSBhY2Nlc3NlcyBvbiBBUk0uCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyMzQ5Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9y
eVZhbHVlIDogcHVibGljIFZhbHVlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBhY2NlcHRz
KEtpbmQga2luZCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAg
ICAgICBjYXNlIExvYWQ4WjoKLSAgICAgICAgY2FzZSBMb2FkOFM6Ci0gICAgICAgIGNhc2UgTG9h
ZDE2WjoKLSAgICAgICAgY2FzZSBMb2FkMTZTOgotICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAg
IGNhc2UgU3RvcmU4OgotICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIGNhc2UgU3RvcmU6
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzU3Rv
cmUoS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0g
ICAgICAgIGNhc2UgU3RvcmU4OgotICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIGNhc2Ug
U3RvcmU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29s
IGlzTG9hZChLaW5kIGtpbmQpCi0gICAgewotICAgICAgICByZXR1cm4gYWNjZXB0cyhraW5kKSAm
JiAhaXNTdG9yZShraW5kKTsKKyAgICAgICAgcmV0dXJuIGlzTWVtb3J5KGtpbmQub3Bjb2RlKCkp
OwogICAgIH0KIAogICAgIH5NZW1vcnlWYWx1ZSgpOwpAQCAtNzgsNzYgKzQ2LDUyIEBAIHB1Ymxp
YzoKIAogICAgIGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3Jhbmdl
OyB9CiAgICAgdm9pZCBzZXRSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKSB7IG1fcmFuZ2Ug
PSByYW5nZTsgfQorICAgIAorICAgIC8vIFRoaXMgaXMgYW4gYWxpYXMgZm9yIHJhbmdlLgorICAg
IGNvbnN0IEhlYXBSYW5nZSYgYWNjZXNzUmFuZ2UoKSBjb25zdCB7IHJldHVybiByYW5nZSgpOyB9
CisgICAgdm9pZCBzZXRBY2Nlc3NSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKSB7IHNldFJh
bmdlKHJhbmdlKTsgfQorICAgIAorICAgIGNvbnN0IEhlYXBSYW5nZSYgZmVuY2VSYW5nZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmVuY2VSYW5nZTsgfQorICAgIHZvaWQgc2V0RmVuY2VSYW5nZShjb25z
dCBIZWFwUmFuZ2UmIHJhbmdlKSB7IG1fZmVuY2VSYW5nZSA9IHJhbmdlOyB9CisKKyAgICBib29s
IGlzU3RvcmUoKSBjb25zdCB7IHJldHVybiBpc1N0b3JlKG9wY29kZSgpKTsgfQorICAgIGJvb2wg
aXNMb2FkKCkgY29uc3QgeyByZXR1cm4gaXNMb2FkKG9wY29kZSgpKTsgfQogCi0gICAgYm9vbCBp
c1N0b3JlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFZvaWQ7IH0KLSAgICBib29sIGlzTG9h
ZCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSAhPSBWb2lkOyB9CisgICAgYm9vbCBoYXNGZW5jZSgp
IGNvbnN0IHsgcmV0dXJuICEhZmVuY2VSYW5nZSgpOyB9CiAKKyAgICBUeXBlIGFjY2Vzc1R5cGUo
KSBjb25zdDsKICAgICBzaXplX3QgYWNjZXNzQnl0ZVNpemUoKSBjb25zdDsKLSAgICBXaWR0aCBh
Y2Nlc3NXaWR0aCgpIGNvbnN0OworCisgICAgdmlydHVhbCBXaWR0aCBhY2Nlc3NXaWR0aCgpIGNv
bnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1h
LCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQ
cmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFZhbHVlKiBjbG9u
ZUltcGwoKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJv
Y2VkdXJlOwotCi0gICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFos
IExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAotICAg
IC8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBr
aW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9m
ZnNldCA9IDApCi0gICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgdHlwZSwgb3Jp
Z2luLCBwb2ludGVyKQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBNZW1vcnlWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBLaW5kIGtpbmQsIFR5cGUgdHlwZSwg
T3JpZ2luIG9yaWdpbiwgaW50MzJfdCBvZmZzZXQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisg
ICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgdHlwZSwgb3JpZ2luLCBhcmd1bWVu
dHMuLi4pCiAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAsIG1fcmFuZ2UoSGVh
cFJhbmdlOjp0b3AoKSkKICAgICB7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgTG9h
ZDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTG9hZDhaOgotICAg
ICAgICAgICAgY2FzZSBMb2FkOFM6Ci0gICAgICAgICAgICBjYXNlIExvYWQxNlo6Ci0gICAgICAg
ICAgICBjYXNlIExvYWQxNlM6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAg
ICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAg
ICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICAvLyBVc2UgdGhpcyBm
b3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRz
IHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0
eXBlKS4KKyAgICBNZW1vcnlWYWx1ZShLaW5kLCBUeXBlLCBPcmlnaW4sIFZhbHVlKiBwb2ludGVy
LCBpbnQzMl90IG9mZnNldCA9IDApOwogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMg
d2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBr
aW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQot
ICAgICAgICA6IE1lbW9yeVZhbHVlKGtpbmQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNl
dCkKLSAgICB7Ci0gICAgfQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFsdWUqIHBv
aW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBz
dG9yZXMuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
dmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDogVmFs
dWUoQ2hlY2tlZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKLSAg
ICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6OnRv
cCgpKQotICAgIHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAg
IHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAg
ICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFsdWUq
IHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKTsKKyAgICAKICAgICBp
bnQzMl90IG1fb2Zmc2V0IHsgMCB9OwotICAgIEhlYXBSYW5nZSBtX3JhbmdlOworICAgIEhlYXBS
YW5nZSBtX3JhbmdlIHsgSGVhcFJhbmdlOjp0b3AoKSB9OworICAgIEhlYXBSYW5nZSBtX2ZlbmNl
UmFuZ2UgeyBIZWFwUmFuZ2UoKSB9OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMjEyOTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgy
LDcgKzgyLDYgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKICAgICBNb2QsIC8vIEFsbCBiZXRz
IGFyZSBvZmYgYXMgdG8gd2hhdCB3aWxsIGhhcHBlbiB3aGVuIHlvdSBleGVjdXRlIHRoaXMgZm9y
IC0yXjMxJS0xIGFuZCB4JTAuCiAgICAgVU1vZCwKIAotCiAgICAgLy8gUG9seW1vcnBoaWMgbmVn
YXRpb24uIE5vdGUgdGhhdCB3ZSBvbmx5IG5lZWQgdGhpcyBmb3IgZmxvYXRpbmcgcG9pbnQsIHNp
bmNlIGludGVnZXIgbmVnYXRpb24KICAgICAvLyBpcyBleGFjdGx5IGxpa2UgU3ViKDAsIHgpLiBC
dXQgdGhhdCdzIG5vdCB0cnVlIGZvciBmbG9hdGluZyBwb2ludC4gU3ViKDAsIDApIGlzIDAsIHdo
aWxlCiAgICAgLy8gTmVnKDApIGlzIC0wLiBBbHNvLCB3ZSBjYW5vbmljYWxpemUgU3ViKDAsIHgp
IGludG8gTmVnKHgpIGluIGNhc2Ugb2YgaW50ZWdlcnMuCkBAIC0xNjIsNiArMTYxLDk5IEBAIGVu
dW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgU3RvcmUxNiwKICAgICAvLyBUaGlzIGlzIGEgcG9s
eW1vcnBoaWMgc3RvcmUgZm9yIEludDMyLCBJbnQ2NCwgRmxvYXQsIGFuZCBEb3VibGUuCiAgICAg
U3RvcmUsCisgICAgCisgICAgLy8gQXRvbWljIGNvbXBhcmUgYW5kIHN3YXAgdGhhdCByZXR1cm5z
IGEgYm9vbGVhbi4gTWF5IGNob29zZSB0byBkbyBub3RoaW5nIGFuZCByZXR1cm4gZmFsc2UuIFlv
dSBjYW4KKyAgICAvLyB1c3VhbGx5IGFzc3VtZSB0aGF0IHRoaXMgaXMgZmFzdGVyIGFuZCByZXN1
bHRzIGluIGxlc3MgY29kZSB0aGFuIEF0b21pY1N0cm9uZ0NBUywgdGhvdWdoIHRoYXQncworICAg
IC8vIG5vdCBuZWNlc3NhcmlseSB0cnVlIG9uIEludGVsLCBpZiBpbnN0cnVjdGlvbiBzZWxlY3Rp
b24gZG9lcyBpdHMgam9iLiBJbWFnaW5lIHRoYXQgdGhpcyBvcGNvZGUgaXMKKyAgICAvLyBhcyBp
ZiB5b3UgZGlkIHRoaXMgYXRvbWljYWxseToKKyAgICAvLworICAgIC8vIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgLy8gYm9vbCBBdG9taWNXZWFrQ0FTKFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdW
YWx1ZSwgVCogcHRyKQorICAgIC8vIHsKKyAgICAvLyAgICAgaWYgKCFyYW5kKCkpCisgICAgLy8g
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFJlYWwgd29ybGQgZXhhbXBsZSBvZiB0aGlzOiBjb250
ZXh0IHN3aXRjaCBvbiBBUk0gd2hpbGUgZG9pbmcgQ0FTLgorICAgIC8vICAgICBpZiAoKnB0ciAh
PSBleHBlY3RlZFZhbHVlKQorICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vICAg
ICAqcHRyID0gbmV3VmFsdWU7CisgICAgLy8gICAgIHJldHVybiB0cnVlOworICAgIC8vIH0KKyAg
ICAvLworICAgIC8vIE5vdGUgdGhhdCBhbGwgYXRvbWljcyBwdXQgdGhlIHBvaW50ZXIgbGFzdCB0
byBiZSBjb25zaXN0ZW50IHdpdGggaG93IGxvYWRzIGFuZCBzdG9yZXMgd29yay4gVGhpcworICAg
IC8vIGlzIGEgZ29vZnkgdHJhZGl0aW9uLCBidXQgaXQncyBoYXJtbGVzcywgYW5kIGJldHRlciB0
aGFuIGJlaW5nIGluY29uc2lzdGVudC4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB3ZWFrIENB
UyBoYXMgbm8gZmVuY2luZyBndWFyYW50ZWVzIHdoZW4gaXQgZmFpbHMuIFRoaXMgbWVhbnMgdGhh
dCB0aGUgZm9sbG93aW5nCisgICAgLy8gdHJhbnNmb3JtYXRpb24gaXMgYWx3YXlzIHZhbGlkOgor
ICAgIC8vCisgICAgLy8gQmVmb3JlOgorICAgIC8vCisgICAgLy8gICAgICAgICBCcmFuY2goQXRv
bWljV2Vha0NBUyhleHBlY3RlZCwgbmV3LCBwdHIpKQorICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6
IFRoZW46I3N1Y2Nlc3MsIEVsc2U6I2ZhaWwKKyAgICAvLworICAgIC8vIEFmdGVyOgorICAgIC8v
CisgICAgLy8gICAgICAgICBCcmFuY2goRXF1YWwoTG9hZChwdHIpLCBleHBlY3RlZCkpCisgICAg
Ly8gICAgICAgU3VjY2Vzc29yczogVGhlbjojYXR0ZW1wdCwgRWxzZTojZmFpbAorICAgIC8vICAg
ICBCQiNhdHRlbXB0OgorICAgIC8vICAgICAgICAgQnJhbmNoKEF0b21pY1dlYWtDQVMoZXhwZWN0
ZWQsIG5ldywgcHRyKSkKKyAgICAvLyAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiNzdWNjZXNzLCBF
bHNlOiNmYWlsCisgICAgQXRvbWljV2Vha0NBUywKKyAgICAKKyAgICAvLyBBdG9taWMgY29tcGFy
ZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgdGhlIG9sZCB2YWx1ZS4gRG9lcyBub3QgaGF2ZSB0aGUg
bm9uZGV0ZXJtaW5pc20gb2YgV2Vha0NBUy4KKyAgICAvLyBUaGlzIGlzIGEgYml0IG1vcmUgY29k
ZSBhbmQgYSBiaXQgc2xvd2VyIGluIHNvbWUgY2FzZXMsIHRob3VnaCBub3QgYnkgYSBsb3QuIElt
YWdpbmUgdGhhdCB0aGlzCisgICAgLy8gb3Bjb2RlIGlzIGFzIGlmIHlvdSBkaWQgdGhpcyBhdG9t
aWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAvLyBUIEF0
b21pY1N0cm9uZ0NBUyhUIGV4cGVjdGVkVmFsdWUsIFQgbmV3VmFsdWUsIFQqIHB0cikKKyAgICAv
LyB7CisgICAgLy8gICAgIFQgb2xkVmFsdWUgPSAqcHRyOworICAgIC8vICAgICBpZiAob2xkVmFs
dWUgPT0gZXhwZWN0ZWRWYWx1ZSkKKyAgICAvLyAgICAgICAgICpwdHIgPSBuZXdWYWx1ZTsKKyAg
ICAvLyAgICAgcmV0dXJuIG9sZFZhbHVlCisgICAgLy8gfQorICAgIC8vCisgICAgLy8gTm90ZSB0
aGF0IEF0b21pY1dlYWtDQVMgYW5kIEF0b21pY1N0cm9uZ0NBUyBzb3J0IG9mIGhhdmUgdGhpcyBr
aW5kIG9mIGVxdWl2YWxlbmNlOgorICAgIC8vCisgICAgLy8gQXRvbWljV2Vha0NBUyhAZXhwLCBA
bmV3LCBAcHRyKSA9PSBFcXVhbChBdG9taWNTdHJvbmdDQVMoQGV4cCwgQG5ldywgQHB0ciksIEBl
eHApCisgICAgLy8KKyAgICAvLyBBc3N1bWluZyB0aGF0IHRoZSBXZWFrQ0FTIGRvZXMgbm90IHNw
dXJpb3VzbHkgZmFpbCwgb2YgY291cnNlLgorICAgIEF0b21pY1N0cm9uZ0NBUywKKyAgICAKKyAg
ICAvLyBBdG9taWNhbGx5IF9fXyBhIG1lbW9yeSBsb2NhdGlvbiBhbmQgcmV0dXJuIHRoZSBvbGQg
dmFsdWUuIFN5bnRheDoKKyAgICAvLworICAgIC8vIEBvbGRWYWx1ZSA9IEF0b21pY1hjaGdfX18o
QG9wZXJhbmQsIEBwdHIpCisgICAgQXRvbWljWGNoZ0FkZCwKKyAgICBBdG9taWNYY2hnQW5kLAor
ICAgIEF0b21pY1hjaGdPciwKKyAgICBBdG9taWNYY2hnU3ViLAorICAgIEF0b21pY1hjaGdYb3Is
CisgICAgCisgICAgLy8gQXRvbWljYWxseSBleGNoYW5nZSBhIHZhbHVlIHdpdGggYSBtZW1vcnkg
bG9jYXRpb24uIFN5bnRheDoKKyAgICAvLworICAgIC8vIEBvbGRWYWx1ZSA9IEF0b21pY1hjaGco
QG5ld1ZhbHVlLCBAcHRyKQorICAgIEF0b21pY1hjaGcsCisgICAgCisgICAgLy8gSW50cm9kdWNl
IGFuIGludmlzaWJsZSBkZXBlbmRlbmN5IGZvciBibG9ja2luZyBtb3Rpb24gb2YgbG9hZHMgd2l0
aCByZXNwZWN0IHRvIGVhY2ggb3RoZXIuIFN5bnRheDoKKyAgICAvLworICAgIC8vIEByZXN1bHQg
PSBEZXBlbmQoQHBoYW50b20pCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIGV2ZW50dWFsbHkgY29k
ZWdlbmVyYXRlZCB0byBoYXZlIGxvY2FsIHNlbWFudGljcyBhcyBpZiB3ZSBkaWQ6CisgICAgLy8K
KyAgICAvLyBAcmVzdWx0ID0gJDAKKyAgICAvLworICAgIC8vIEJ1dCBpdCBlbnN1cmVzIHRoYXQg
dGhlIHVzZXJzIG9mIEByZXN1bHQgY2Fubm90IGV4ZWN1dGUgdW50aWwgQHBoYW50b20gaXMgY29t
cHV0ZWQuCisgICAgLy8KKyAgICAvLyBUaGUgY29tcGlsZXIgaXMgbm90IGFsbG93ZWQgdG8gcmVh
c29uIGFib3V0IHRoZSBmYWN0IHRoYXQgRGVwZW5kIGNvZGVnZW5lcmF0ZXMgdGhpcyB3YXkuIEFu
eSBraW5kCisgICAgLy8gb2YgdHJhbnNmb3JtYXRpb24gb3IgYW5hbHlzaXMgdGhhdCByZWxpZXMg
b24gdGhlIGluc2lnaHQgdGhhdCBEZXBlbmQgaXMgcmVhbGx5IHplcm8gaXMgdW5zb3VuZCwKKyAg
ICAvLyBiZWNhdXNlIGl0IHVubG9ja3MgcmVvcmRlcmluZyBvZiB1c2VycyBvZiBAcmVzdWx0IGFu
ZCBAcGhhbnRvbS4KKyAgICAvLworICAgIC8vIE9uIFg4NiwgdGhpcyBpcyBsb3dlcmVkIHRvIGEg
bG9hZC1sb2FkIGZlbmNlIGFuZCBAcmVzdWx0IHVzZXMgQHBoYW50b20gZGlyZWN0bHkuCisgICAg
Ly8KKyAgICAvLyBPbiBBUk0sIHRoaXMgaXMgbG93ZXJlZCBhcyBpZiBsaWtlOgorICAgIC8vCisg
ICAgLy8gQHJlc3VsdCA9IEJpdFhvcihAcGhhbnRvbSwgQHBoYW50b20pCisgICAgLy8KKyAgICAv
LyBFeGNlcHQgdGhhdCB0aGUgY29tcGlsZXIgbmV2ZXIgZ2V0cyBhbiBvcHBvcnR1bml0eSB0byBz
aW1wbGlmeSBvdXQgdGhlIEJpdFhvci4KKyAgICBEZXBlbmQsCiAKICAgICAvLyBUaGlzIGlzIHVz
ZWQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsIGFkZHJlc3Mgb2YgYSBXYXNtIG1lbW9yeSBvcGVyYXRp
b24uIEl0IHRha2VzIGFuIEludFB0cgogICAgIC8vIGFuZCBhIHBpbm5lZCByZWdpc3RlciB0aGVu
IGNvbXB1dGVzIHRoZSBhcHByb3ByaWF0ZSBJbnRQdHIgYWRkcmVzcy4gRm9yIHRoZSB1c2UtY2Fz
ZSBvZgpAQCAtMzAxLDYgKzM5Myw3MSBAQCBpbmxpbmUgYm9vbCBpc0RlZmluaXRlbHlUZXJtaW5h
bChPcGNvZGUgCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBpc0xvYWQoT3Bjb2RlIG9wY29kZSkK
K3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgTG9hZDhaOgorICAgIGNhc2UgTG9h
ZDhTOgorICAgIGNhc2UgTG9hZDE2WjoKKyAgICBjYXNlIExvYWQxNlM6CisgICAgY2FzZSBMb2Fk
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc1N0b3JlKE9wY29kZSBvcGNvZGUpCit7Cisg
ICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIFN0b3JlODoKKyAgICBjYXNlIFN0b3JlMTY6
CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNMb2FkU3RvcmUo
T3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgTG9hZDha
OgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2WjoKKyAgICBjYXNlIExvYWQxNlM6
CisgICAgY2FzZSBMb2FkOgorICAgIGNhc2UgU3RvcmU4OgorICAgIGNhc2UgU3RvcmUxNjoKKyAg
ICBjYXNlIFN0b3JlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0F0b21pYyhPcGNvZGUg
b3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBBdG9taWNXZWFrQ0FT
OgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAg
ICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBB
dG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hj
aGc6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzTWVtb3J5QWNjZXNzKE9wY29kZSBvcGNv
ZGUpCit7CisgICAgcmV0dXJuIGlzQXRvbWljKG9wY29kZSkgfHwgaXNMb2FkU3RvcmUob3Bjb2Rl
KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDIxMjk5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcsNiArMTE3LDcgQEAgcHVibGljOgogICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChP
cmlnaW4sIFR5cGUsIGludDY0X3QgdmFsdWUpOwogICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChW
YWx1ZSosIGludDY0X3QgdmFsdWUpOwogCisgICAgLy8gWW91J3JlIGd1YXJhbnRlZWQgdGhhdCBi
b3R0b20gaXMgemVyby4KICAgICBWYWx1ZSogYWRkQm90dG9tKE9yaWdpbiwgVHlwZSk7CiAgICAg
VmFsdWUqIGFkZEJvdHRvbShWYWx1ZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MSw2ICszNzEsNDMgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwg
KCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZh
bHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXRvbWljV2Vh
a0NBUzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCks
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNo
aWxkcmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDEpLT50
eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQo
dmFsdWUtPmNoaWxkKDApLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgyKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1N0cm9u
Z0NBUzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCks
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNo
aWxkcmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNo
aWxkKDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURB
VEUoaXNJbnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVl
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0Fk
ZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAgICAgICAgIGNhc2UgQXRv
bWljWGNoZ09yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgICAgICAgICAg
Y2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnOgorICAgICAg
ICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAy
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBl
KCkgPT0gdmFsdWUtPmNoaWxkKDApLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkgPT0gcG9p
bnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0
YWNrQWNjZXNzKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgRGVwZW5kOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4
dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+dHlw
ZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgV2FzbUFkZHJlc3M6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5r
aW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTg5LDYgKzU4OSw3IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgIGNhc2Ug
QmVsb3dFcXVhbDoKICAgICBjYXNlIEVxdWFsT3JVbm9yZGVyZWQ6CiAgICAgY2FzZSBTZWxlY3Q6
CisgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRGl2OgogICAgIGNh
c2UgVURpdjoKQEAgLTYwMCwxNiArNjAxLDQ0IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBj
b25zdAogICAgIGNhc2UgTG9hZDhTOgogICAgIGNhc2UgTG9hZDE2WjoKICAgICBjYXNlIExvYWQx
NlM6Ci0gICAgY2FzZSBMb2FkOgotICAgICAgICByZXN1bHQucmVhZHMgPSBhczxNZW1vcnlWYWx1
ZT4oKS0+cmFuZ2UoKTsKKyAgICBjYXNlIExvYWQ6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1l
bW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICByZXN1bHQucmVhZHMgPSBtZW1vcnkt
PnJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPnBoYW50b21SYW5nZSgpKSB7CisgICAgICAg
ICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5waGFudG9tUmFuZ2UoKTsKKyAgICAgICAgICAg
IHJlc3VsdC5mZW5jZSA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgcmVzdWx0LmNvbnRyb2xE
ZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBTdG9yZTg6
CiAgICAgY2FzZSBTdG9yZTE2OgotICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgIHJlc3VsdC53cml0
ZXMgPSBhczxNZW1vcnlWYWx1ZT4oKS0+cmFuZ2UoKTsKKyAgICBjYXNlIFN0b3JlOiB7CisgICAg
ICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBhczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmVz
dWx0LndyaXRlcyA9IG1lbW9yeS0+cmFuZ2UoKTsKKyAgICAgICAgaWYgKG1lbW9yeS0+cGhhbnRv
bVJhbmdlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+cGhhbnRvbVJh
bmdlKCk7CisgICAgICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAg
ICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2Ug
QXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hj
aGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hnOiB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1v
cnkgPSBhczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5LT5y
YW5nZSgpIHwgbWVtb3J5LT5waGFudG9tUmFuZ2UoKTsKKyAgICAgICAgcmVzdWx0LndyaXRlcyA9
IG1lbW9yeS0+cmFuZ2UoKSB8IG1lbW9ydHktPnBoYW50b21SYW5nZSgpOworICAgICAgICBpZiAo
bWVtb3J5LT5waGFudG9tUmFuZ2UoKSkKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7
CiAgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7
CisgICAgfQogICAgIGNhc2UgV2FzbUFkZHJlc3M6CiAgICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5l
ZCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwpAQCAtNjE3LDE4ICs2NDYsNyBAQCBFZmZlY3RzIFZh
bHVlOjplZmZlY3RzKCkgY29uc3QKICAgICAgICAgY29uc3QgRmVuY2VWYWx1ZSogZmVuY2UgPSBh
czxGZW5jZVZhbHVlPigpOwogICAgICAgICByZXN1bHQucmVhZHMgPSBmZW5jZS0+cmVhZDsKICAg
ICAgICAgcmVzdWx0LndyaXRlcyA9IGZlbmNlLT53cml0ZTsKLSAgICAgICAgCi0gICAgICAgIC8v
IFByZXZlbnQga2lsbGluZyBvZiBmZW5jZXMgdGhhdCBjbGFpbSBub3QgdG8gd3JpdGUgYW55dGhp
bmcuIEl0J3MgYSBiaXQgd2VpcmQgdGhhdCB3ZSB1c2UKLSAgICAgICAgLy8gbG9jYWwgc3RhdGUg
YXMgdGhlIHdheSB0byBkbyB0aGlzLCBidXQgaXQgaGFwcGVucyB0byB3b3JrOiB3ZSBtdXN0IGFz
c3VtZSB0aGF0IHdlIGNhbm5vdAotICAgICAgICAvLyBraWxsIHdyaXRlc0xvY2FsU3RhdGUgdW5s
ZXNzIHdlIHVuZGVyc3RhbmRzIGV4YWN0bHkgd2hhdCB0aGUgaW5zdHJ1Y3Rpb24gaXMgZG9pbmcg
KGxpa2UKLSAgICAgICAgLy8gdGhlIHdheSB0aGF0IGZpeFNTQSB1bmRlcnN0YW5kcyBTZXQvR2V0
IGFuZCB0aGUgd2F5IHRoYXQgcmVkdWNlU3RyZW5ndGggYW5kIG90aGVycwotICAgICAgICAvLyB1
bmRlcnN0YW5kIFVwc2lsb24pLiBUaGlzIHdvdWxkIG9ubHkgYmVjb21lIGEgcHJvYmxlbSBpZiB3
ZSBoYWQgc29tZSBhbmFseXNpcyB0aGF0IHdhcwotICAgICAgICAvLyBsb29raW5nIHRvIHVzZSB0
aGUgd3JpdGVzTG9jYWxTdGF0ZSBiaXQgdG8gaW52YWxpZGF0ZSBhIENTRSBvdmVyIGxvY2FsIHN0
YXRlIG9wZXJhdGlvbnMuCi0gICAgICAgIC8vIFRoZW4gYSBGZW5jZSB3b3VsZCBsb29rIGJsb2Nr
LCBzYXksIHRoZSBlbGltaW5hdGlvbiBvZiBhIHJlZHVuZGFudCBHZXQuIEJ1dCBpdCBsaWtlCi0g
ICAgICAgIC8vIHRoYXQncyBub3QgYXQgYWxsIGhvdyBvdXIgb3B0aW1pemF0aW9ucyBmb3IgU2V0
L0dldC9VcHNpbG9uL1BoaSB3b3JrIC0gdGhleSBncm9rIHRoZWlyCi0gICAgICAgIC8vIG9wZXJh
dGlvbnMgZGVlcGx5IGVub3VnaCB0aGF0IHRoZXkgaGF2ZSBubyBuZWVkIHRvIGNoZWNrIHRoaXMg
Yml0IC0gc28gdGhpcyBjaGVhdCBpcwotICAgICAgICAvLyBmaW5lLgotICAgICAgICByZXN1bHQu
d3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CisgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENDYWxsOgpAQCAtNjk0LDYgKzcxMiw3IEBA
IFZhbHVlS2V5IFZhbHVlOjprZXkoKSBjb25zdAogICAgIGNhc2UgQ2hlY2s6CiAgICAgY2FzZSBC
aXR3aXNlQ2FzdDoKICAgICBjYXNlIE5lZzoKKyAgICBjYXNlIERlcGVuZDoKICAgICAgICAgcmV0
dXJuIFZhbHVlS2V5KGtpbmQoKSwgdHlwZSgpLCBjaGlsZCgwKSk7CiAgICAgY2FzZSBBZGQ6CiAg
ICAgY2FzZSBTdWI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNyw2ICsxMDcsOCBAQCBwdWJsaWM6CiAgICAgLy8gdmFsdWVzIHdpdGggSWRl
bnRpdGllcyBvbiBib3R0b20gY29uc3RhbnRzLiBGb3IgdGhpcyByZWFzb24sIHRoaXMgdGFrZXMg
YSBjYWxsYmFjayB0aGF0IGlzCiAgICAgLy8gcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGJvdHRv
bXMuIFRoZXJlJ3MgYSB1dGlsaXR5IGZvciB0aGlzLCBzZWUgQjNCb3R0b21Qcm92aWRlci5oLiBZ
b3UKICAgICAvLyBjYW4gYWxzbyBhY2Nlc3MgdGhhdCB1dGlsaXR5IHVzaW5nIHJlcGxhY2VXaXRo
Qm90dG9tKEluc2VydGlvblNldCYsIHNpemVfdCkuCisgICAgLy8KKyAgICAvLyBZb3UncmUgZ3Vh
cmFudGVlZCB0aGF0IGJvdHRvbSBpcyB6ZXJvLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJvdHRv
bVByb3ZpZGVyPgogICAgIHZvaWQgcmVwbGFjZVdpdGhCb3R0b20oY29uc3QgQm90dG9tUHJvdmlk
ZXImKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJP
cGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAK
LSMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2OCwyOCArNjY4LDc2IEBAIExv
YWQ4IFU6Rzo4LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2Fk
QWNxOCBVOkc6OCwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogU3Rv
cmU4IFU6Rzo4LCBEOkc6OAogICAgIFRtcCwgSW5kZXgKICAgICBUbXAsIEFkZHIKICAgICB4ODY6
IEltbSwgSW5kZXgKICAgICB4ODY6IEltbSwgQWRkcgogCitTdG9yZVJlbDggVTpHOjgsIEQ6Rzo4
CisgICAgVG1wLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorICAg
IHg4NjogSW1tLCBBZGRyCisKIExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiBVOkc6OCwgWkQ6RzozMgog
ICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9hZEFjcThTaWduZWRFeHRlbmRUbzMy
IFU6Rzo4LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBMb2FkMTYg
VTpHOjE2LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNx
MTYgVTpHOjE2LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBMb2Fk
MTZTaWduZWRFeHRlbmRUbzMyIFU6RzoxNiwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIElu
ZGV4LCBUbXAKIAorTG9hZEFjcTE2U2lnbmVkRXh0ZW5kVG8zMiBVOkc6MTYsIFpEOkc6MzIKKyAg
ICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIFN0b3JlMTYgVTpHOjE2LCBEOkc6MTYKICAg
ICBUbXAsIEluZGV4CiAgICAgVG1wLCBBZGRyCiAKK1N0b3JlQWNxMTYgVTpHOjE2LCBEOkc6MTYK
KyAgICBUbXAsIEluZGV4CisgICAgVG1wLCBBZGRyCisKK0xvYWRBY3EzMiBVOkc6MzIgWkQ6Rzoz
MgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCitTdG9yZVJl
bDMyIFU6RzozMiBaRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorICAgIHg4
NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisKKzY0OiBMb2FkQWNxNjQgVTpHOjY0
IFpEOkc6NjQKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwor
NjQ6IFN0b3JlUmVsNjQgVTpHOjY0IFpEOkc6NjQKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIElu
ZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKwogQ29tcGFyZTMy
IFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKICAgICBSZWxDb25kLCBUbXAsIFRtcCwg
VG1wCiAgICAgUmVsQ29uZCwgVG1wLCBJbW0sIFRtcAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302760</attachid>
            <date>2017-02-25 11:28:16 -0800</date>
            <delta_ts>2017-02-25 12:01:08 -0800</delta_ts>
            <desc>added the instructions to Air</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>45008</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBdG9t
aWNWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK0F0b21pY1ZhbHVlOjp+QXRvbWljVmFsdWUoKQoreworfQorCitXaWR0aCBB
dG9taWNWYWx1ZTo6YWNjZXNzV2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3dpZHRoOwor
fQorCit2b2lkIEF0b21pY1ZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChjb21tYSwgIndpZHRoID0gIiwg
bV93aWR0aCk7CisgICAgCisgICAgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKGNvbW1hLCBvdXQpOwor
fQorCitWYWx1ZSogQXRvbWljVmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG5ldyBBdG9taWNWYWx1ZSgqdGhpcyk7Cit9CisKK0F0b21pY1ZhbHVlOjpBdG9taWNWYWx1ZShL
aW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFdpZHRoIHdpZHRoLCBWYWx1ZSogb3BlcmFuZCwgVmFs
dWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNr
ZWRPcGNvZGUsIGtpbmQsIG9wZXJhbmQtPnR5cGUoKSwgb3JpZ2luLCBvZmZzZXQsIG9wZXJhbmQs
IHBvaW50ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIHNldEZlbmNlUmFuZ2UoSGVh
cFJhbmdlOjp0b3AoKSk7CisgICAgCisgICAgQVNTRVJUKGJlc3RUeXBlKG9wZXJhdGlvbldpZHRo
KCkpID09IG9wZXJhdGlvblR5cGUoKSk7CisgICAgCisgICAgc3dpdGNoIChraW5kLm9wY29kZSgp
KSB7CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAg
ICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBB
dG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitBdG9t
aWNWYWx1ZTo6QXRvbWljVmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBXaWR0aCB3aWR0
aCwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBuZXdWYWx1ZSwgVmFsdWUqIHBvaW50ZXIs
IGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGUsIGtp
bmQsIGtpbmQub3Bjb2RlKCkgPT0gQXRvbWljV2Vha0NBUyA/IEludDMyIDogZXhwZWN0ZWRWYWx1
ZS0+dHlwZSgpLCBvcmlnaW4sIG9mZnNldCwgZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUsIHBvaW50
ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIHNldEZlbmNlUmFuZ2UoSGVhcFJhbmdl
Ojp0b3AoKSk7CisgICAgCisgICAgQVNTRVJUKGJlc3RUeXBlKG9wZXJhdGlvbldpZHRoKCkpID09
IG9wZXJhdGlvblR5cGUoKSk7CisKKyAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICBj
YXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIzV2lkdGguaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEF0b21p
Y1ZhbHVlIDogcHVibGljIE1lbW9yeVZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBh
Y2NlcHRzKEtpbmQga2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0F0b21pYyhraW5kLm9w
Y29kZSgpKTsKKyAgICB9CisgICAgCisgICAgfkF0b21pY1ZhbHVlKCk7CisgICAgCisgICAgVHlw
ZSBvcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gY2hpbGQoMCktPnR5cGUoKTsgfQorICAg
IAorICAgIFdpZHRoIG9wZXJhdGlvbldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQor
ICAgIAorICAgIC8vIFN5bm9ueW0gZm9yIHdpZHRoKCksIGlmIHlvdSdyZSBhY2Nlc3Npbmcgdmlh
IE1lbW9yeVZhbHVlLgorICAgIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIFZhbHVlKiBjbG9uZUltcGwoKSBjb25z
dCBvdmVycmlkZTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
KyAgICAKKyAgICBBdG9taWNWYWx1ZShLaW5kLCBPcmlnaW4sIFdpZHRoLCBWYWx1ZSogb3BlcmFu
ZCwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CisgICAgCisgICAgQXRvbWlj
VmFsdWUoS2luZCwgT3JpZ2luLCBXaWR0aCwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBu
ZXdWYWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CisgICAgCisgICAg
V2lkdGggbV93aWR0aDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZm
ZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0
cy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vm
ZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw4IEBAIGJvb2wgRWZmZWN0czo6
aW50ZXJmZXJlcyhjb25zdCBFZmZlY3RzJiAKICAgICAgICAgfHwgaW50ZXJmZXJlc1dpdGhXcml0
ZXNQaW5uZWQob3RoZXIsICp0aGlzKQogICAgICAgICB8fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIu
d3JpdGVzKQogICAgICAgICB8fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIucmVhZHMpCi0gICAgICAg
IHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcyk7CisgICAgICAgIHx8IHJlYWRzLm92ZXJs
YXBzKG90aGVyLndyaXRlcykKKyAgICAgICAgfHwgKGZlbmNlICYmIG90aGVyLmZlbmNlKTsKIH0K
IAogYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0IEVmZmVjdHMmIG90aGVyKSBjb25zdApA
QCAtOTUsNyArOTYsOCBAQCBib29sIEVmZmVjdHM6Om9wZXJhdG9yPT0oY29uc3QgRWZmZWN0cyYg
CiAgICAgICAgICYmIHdyaXRlc1Bpbm5lZCA9PSBvdGhlci53cml0ZXNQaW5uZWQKICAgICAgICAg
JiYgcmVhZHNQaW5uZWQgPT0gb3RoZXIucmVhZHNQaW5uZWQKICAgICAgICAgJiYgd3JpdGVzID09
IG90aGVyLndyaXRlcwotICAgICAgICAmJiByZWFkcyA9PSBvdGhlci5yZWFkczsKKyAgICAgICAg
JiYgcmVhZHMgPT0gb3RoZXIucmVhZHMKKyAgICAgICAgJiYgZmVuY2UgPT0gb3RoZXIuZmVuY2U7
CiB9CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3IhPShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29u
c3QKQEAgLTEyMCw2ICsxMjIsOCBAQCB2b2lkIEVmZmVjdHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlc1Bpbm5lZCIpOwogICAgIGlm
IChyZWFkc1Bpbm5lZCkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiUmVhZHNQaW5uZWQiKTsK
KyAgICBpZiAoZmVuY2UpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIkZlbmNlIik7CiAgICAg
aWYgKHdyaXRlcykKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiV3JpdGVzOiIsIHdyaXRlcyk7
CiAgICAgaWYgKHJlYWRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBAQCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzE3MwogICAgIGJv
b2wgcmVhZHNQaW5uZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgd3JpdGVzUGlubmVkIHsgZmFsc2Ug
fTsKKyAgICAKKyAgICAvLyBNZW1vcnkgZmVuY2VzIGNhbm5vdCBiZSByZW9yZGVyZWQgYXJvdW5k
IGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVpciBlZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQK
KyAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEgbWVtb3J5IGZlbmNlLgorICAgIGJvb2wgZmVu
Y2UgeyBmYWxzZSB9OwogCiAgICAgSGVhcFJhbmdlIHdyaXRlczsKICAgICBIZWFwUmFuZ2UgcmVh
ZHM7CkBAIC04OSw2ICs5Myw3IEBAIHN0cnVjdCBFZmZlY3RzIHsKICAgICAgICAgcmVzdWx0LnJl
YWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKICAgICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1
ZTsKICAgICAgICAgcmVzdWx0LndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIHJlc3VsdC5m
ZW5jZSA9IHRydWU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0xMDMsNyAr
MTA4LDcgQEAgc3RydWN0IEVmZmVjdHMgewogCiAgICAgYm9vbCBtdXN0RXhlY3V0ZSgpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gdGVybWluYWwgfHwgZXhpdHNTaWRld2F5cyB8fCB3cml0
ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQaW5uZWQ7CisgICAgICAgIHJldHVybiB0
ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRlc0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8
IHdyaXRlc1Bpbm5lZCB8fCBmZW5jZTsKICAgICB9CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
cmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0aGVzZSByZXNwZWN0aXZlIGVmZmVjdHMgd291
bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1p
bmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1
YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDIsNiArMTQyLDcgQEAgc3RydWN0IElt
cHVyZUJsb2NrRGF0YSB7CiAKICAgICBSYW5nZVNldDxIZWFwUmFuZ2U+IHJlYWRzOyAvLyBUaGlz
IG9ubHkgZ2V0cyB1c2VkIGZvciBmb3J3YXJkIHN0b3JlIGVsaW1pbmF0aW9uLgogICAgIFJhbmdl
U2V0PEhlYXBSYW5nZT4gd3JpdGVzOyAvLyBUaGlzIGdldHMgdXNlZCBmb3IgYm90aCBsb2FkIGFu
ZCBzdG9yZSBlbGltaW5hdGlvbi4KKyAgICBib29sIGZlbmNlOwogCiAgICAgTWVtb3J5VmFsdWVN
YXAgc3RvcmVzQXRIZWFkOwogICAgIE1lbW9yeVZhbHVlTWFwIG1lbW9yeVZhbHVlc0F0VGFpbDsK
QEAgLTE3NCwxMiArMTc1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAobWVtb3J5ICYmIG1lbW9yeS0+aXNTdG9yZSgpCiAgICAgICAgICAgICAgICAg
ICAgICYmICFkYXRhLnJlYWRzLm92ZXJsYXBzKG1lbW9yeS0+cmFuZ2UoKSkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgIWRhdGEud3JpdGVzLm92ZXJsYXBzKG1lbW9yeS0+cmFuZ2UoKSkpCisgICAg
ICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRlcy5vdmVybGFwcyhtZW1vcnktPnJhbmdlKCkp
CisgICAgICAgICAgICAgICAgICAgICYmICghZGF0YS5mZW5jZSB8fCAhbWVtb3J5LT5oYXNGZW5j
ZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5zdG9yZXNBdEhlYWQuYWRkKG1lbW9yeSk7
CiAgICAgICAgICAgICAgICAgZGF0YS5yZWFkcy5hZGQoZWZmZWN0cy5yZWFkcyk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9IGVmZmVjdHMud3JpdGVzKQogICAgICAg
ICAgICAgICAgICAgICBjbG9iYmVyKGRhdGEsIHdyaXRlcyk7CisgICAgICAgICAgICAgICAgZGF0
YS5mZW5jZSB8PSBlZmZlY3RzLmZlbmNlOwogCiAgICAgICAgICAgICAgICAgaWYgKG1lbW9yeSkK
ICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuYWRkKG1lbW9yeSk7
CkBAIC00NzgsNiArNDgxLDkgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0
ZXI+CiAgICAgYm9vbCBmaW5kU3RvcmVBZnRlckNsb2JiZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdl
IHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICB7CisgICAgICAgIGlmIChtX3ZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBlbGltaW5hdGUgYSBzdG9yZSBpZiBldmVy
eSBmb3J3YXJkIHBhdGggaGl0cyBhIHN0b3JlIHRvIHRoZSBzYW1lIGxvY2F0aW9uIGJlZm9yZQog
ICAgICAgICAvLyBoaXR0aW5nIGFueSBvcGVyYXRpb24gdGhhdCBvYnNlcnZlcyB0aGUgc3RvcmUu
IFRoaXMgc2VhcmNoIHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlCiAgICAgICAgIC8vIGV4cGVuc2l2
ZSwgYnV0IGluIHRoZSBvdmVyd2hlbG1pbmcgbWFqb3JpdHkgb2YgY2FzZXMgaXQgd2lsbCBhbG1v
c3QgaW1tZWRpYXRlbHkgaGl0IGFuIApAQCAtNjE0LDYgKzYyMCwxMiBAQCBwcml2YXRlOgogICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coKm1fdmFsdWUsICI6IGxvb2tp
bmcgYmFja3dhcmQgZm9yICIsICpwdHIsICIuLi5cbiIpOwogICAgICAgICAKKyAgICAgICAgaWYg
KG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpKSB7CisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgR2l2aW5nIHVwIGJlY2F1
c2UgZmVuY2VzLlxuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSogbWF0Y2ggPSBtX2RhdGEubWVtb3J5VmFs
dWVzQXRUYWlsLmZpbmQocHRyLCBmaWx0ZXIpKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRm91bmQgIiwgKm1hdGNoLCAiIGxvY2FsbHku
XG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZpc2lv
biAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtODgsNiArODgsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CiAgICAgfQogICAgIAorICAgIEhlYXBSYW5nZSBvcGVyYXRvcnwoY29u
c3QgSGVhcFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBIZWFwUmFu
Z2UoCisgICAgICAgICAgICBzdGQ6Om1pbihtX2JlZ2luLCBvdGhlci5tX2JlZ2luKSwKKyAgICAg
ICAgICAgIHN0ZDo6bWF4KG1fZW5kLCBvdGhlci5tX2VuZCkpOworICAgIH0KKyAgICAKICAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsg
fQogCiAgICAgdW5zaWduZWQgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAy
MTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xODUsNiArMTg1LDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAg
ICAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEg
bG9hZC1sb2FkIGZlbmNlLiBUaGlzIGNvZGVnZW5zIHRvIG5vdGhpbmcgb24gWDg2LiBXZSB1c2Ug
aXQgdG8gdGVsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcGlsZXIgbm90IHRvIGJs
b2NrIGxvYWQgbW90aW9uLgorICAgICAgICAgICAgICAgICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxGZW5jZVZhbHVlPihtX2luZGV4LCBtX29yaWdpbik7Cisg
ICAgICAgICAgICAgICAgICAgIGZlbmNlLT5yZWFkID0gSGVhcFJhbmdlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGZlbmNlLT53cml0ZSA9IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBLaWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNo
b3VsZCB1bmxvY2sgYSBidW5jaCBvZiBjb2RlIHNpbXBsaWZpY2F0aW9uLgorICAgICAgICAgICAg
ICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoQm90dG9tKG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MzgsNyArNTM4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybiBBcmcoKTsKIAogICAgICAgICBpbnQzMl90IG9mZnNldCA9IHZhbHVlLT5vZmZzZXQoKTsK
LSAgICAgICAgV2lkdGggd2lkdGggPSB2YWx1ZS0+YWNjZXNzV2lkdGgoKTsKKyAgICAgICAgV2lk
dGggd2lkdGggPSB2YWx1ZS0+bG9hZFN0b3JlV2lkdGgoKTsKIAogICAgICAgICBBcmcgcmVzdWx0
ID0gZWZmZWN0aXZlQWRkcih2YWx1ZS0+bGFzdENoaWxkKCksIG9mZnNldCwgd2lkdGgpOwogICAg
ICAgICBBU1NFUlQocmVzdWx0LmlzVmFsaWRGb3JtKHdpZHRoKSk7CkBAIC01NjIsMTEgKzU2Miwx
NiBAQCBwcml2YXRlOgogICAgIAogICAgIEFyZ1Byb21pc2UgbG9hZFByb21pc2VBbnlPcGNvZGUo
VmFsdWUqIGxvYWRWYWx1ZSkKICAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvYWRWYWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCkpOwogICAgICAgICBpZiAoIWNhbkJlSW50ZXJuYWwobG9hZFZh
bHVlKSkKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKICAgICAgICAgaWYgKGNyb3NzZXNJbnRl
cmZlcmVuY2UobG9hZFZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKLSAgICAgICAg
QXJnUHJvbWlzZSByZXN1bHQoYWRkcihsb2FkVmFsdWUpLCBsb2FkVmFsdWUpOworICAgICAgICBp
ZiAobG9hZFZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAg
IHJldHVybiBBcmcoKTsKKyAgICAgICAgQXJnIGxvYWRBZGRyID0gYWRkcihsb2FkVmFsdWUpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2FkQWRkcik7CisgICAgICAgIEFyZ1Byb21pc2UgcmVz
dWx0KGxvYWRBZGRyLCBsb2FkVmFsdWUpOwogICAgICAgICBpZiAobG9hZFZhbHVlLT50cmFwcygp
KQogICAgICAgICAgICAgcmVzdWx0LnNldFRyYXBzKHRydWUpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwpAQCAtOTMxLDEwICs5MzYsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgQWlyOjpPcGNvZGUg
b3Bjb2RlMzIsIEFpcjo6T3Bjb2RlIG9wY29kZTY0LCBDb21tdXRhdGl2aXR5IGNvbW11dGF0aXZp
dHkgPSBOb3RDb21tdXRhdGl2ZT4KICAgICBib29sIHRyeUFwcGVuZFN0b3JlQmluT3AoVmFsdWUq
IGxlZnQsIFZhbHVlKiByaWdodCkKICAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdmFs
dWUtPmFzPE1lbW9yeVZhbHVlPigpKTsKKyAgICAgICAgCiAgICAgICAgIEFpcjo6T3Bjb2RlIG9w
Y29kZSA9IHRyeU9wY29kZUZvclR5cGUob3Bjb2RlMzIsIG9wY29kZTY0LCBsZWZ0LT50eXBlKCkp
OwogICAgICAgICBpZiAob3Bjb2RlID09IEFpcjo6T29wcykKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+
aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAg
IEFyZyBzdG9yZUFkZHIgPSBhZGRyKG1fdmFsdWUpOwogICAgICAgICBBU1NFUlQoc3RvcmVBZGRy
KTsKIApAQCAtMjE2Niw2ICsyMTc2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV92
YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAg
ICAgICBhcHBlbmRCaW5PcDxYb3IzMiwgWG9yNjQsIEFpcjo6T29wcywgQWlyOjpPb3BzLCBDb21t
dXRhdGl2ZT4oCisgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNo
aWxkKDApKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
U2hsOiB7CiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMSkpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlz
aW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsMzAgKzM0LDQzIEBAIE1lbW9yeVZhbHVlOjp+TWVtb3J5
VmFsdWUoKQogewogfQogCitUeXBlIE1lbW9yeVZhbHVlOjphY2Nlc3NUeXBlKCkgY29uc3QKK3sK
KyAgICBpZiAoaXNMb2FkKG9wY29kZSgpKSkKKyAgICAgICAgcmV0dXJuIHR5cGUoKTsKKyAgICAv
LyBUaGlzIGhhcHBlbnMgdG8gd29yayBmb3IgYXRvbWljcywgdG9vLiBUaGF0J3Mgd2h5IEF0b21p
Y1ZhbHVlIGRvZXMgbm90IG5lZWQgdG8gb3ZlcnJpZGUgdGhpcy4KKyAgICByZXR1cm4gY2hpbGQo
MCktPnR5cGUoKTsKK30KKwogc2l6ZV90IE1lbW9yeVZhbHVlOjphY2Nlc3NCeXRlU2l6ZSgpIGNv
bnN0CiB7CisgICAgcmV0dXJuIGJ5dGVzKGFjY2Vzc1dpZHRoKCkpOworfQorCitXaWR0aCBNZW1v
cnlWYWx1ZTo6bG9hZFN0b3JlV2lkdGgoKSBjb25zdAorewogICAgIHN3aXRjaCAob3Bjb2RlKCkp
IHsKICAgICBjYXNlIExvYWQ4WjoKICAgICBjYXNlIExvYWQ4UzoKICAgICBjYXNlIFN0b3JlODoK
LSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiBXaWR0aDg7CiAgICAgY2FzZSBMb2Fk
MTZaOgogICAgIGNhc2UgTG9hZDE2UzoKICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIHJldHVy
biAyOworICAgICAgICByZXR1cm4gV2lkdGgxNjsKICAgICBjYXNlIExvYWQ6Ci0gICAgICAgIHJl
dHVybiBzaXplb2ZUeXBlKHR5cGUoKSk7CisgICAgICAgIHJldHVybiB3aWR0aEZvclR5cGUodHlw
ZSgpKTsKICAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXR1cm4gc2l6ZW9mVHlwZShjaGlsZCgw
KS0+dHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlwZShjaGlsZCgwKS0+dHlwZSgp
KTsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIFdpZHRoODsKICAgICB9CiB9CiAKIFdp
ZHRoIE1lbW9yeVZhbHVlOjphY2Nlc3NXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHdpZHRo
Rm9yQnl0ZXMoYWNjZXNzQnl0ZVNpemUoKSk7CisgICAgcmV0dXJuIGxvYWRTdG9yZVdpZHRoKCk7
CiB9CiAKIHZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC02Nyw2ICs4MCw4IEBAIHZvaWQgTWVtb3J5VmFsdWU6
OmR1bXBNZXRhKENvbW1hUHJpbnRlciYKICAgICBpZiAoKGlzTG9hZCgpICYmIGVmZmVjdHMoKS5y
ZWFkcyAhPSByYW5nZSgpKQogICAgICAgICB8fCAoaXNTdG9yZSgpICYmIGVmZmVjdHMoKS53cml0
ZXMgIT0gcmFuZ2UoKSkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgInJhbmdlID0gIiwgcmFu
Z2UoKSk7CisgICAgaWYgKHBoYW50b21SYW5nZSgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJwaGFudG9tUmFuZ2UgPSAiLCBwaGFudG9tUmFuZ2UoKSk7CiB9CiAKIFZhbHVlKiBNZW1vcnlW
YWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKQEAgLTc0LDYgKzg5LDU4IEBAIFZhbHVlKiBNZW1vcnlW
YWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKICAgICByZXR1cm4gbmV3IE1lbW9yeVZhbHVlKCp0aGlz
KTsKIH0KIAorLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4
Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorLy8gZGVzY3Jp
YmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KK01lbW9yeVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtp
bmQsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zm
c2V0ID0gMCkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUsIG9yaWdpbiwg
cG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkgeworICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBM
b2FkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBj
YXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6
CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgY2Fz
ZSBTdG9yZToKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hl
cmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCitNZW1vcnlWYWx1ZTo6TWVtb3J5VmFsdWUo
S2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQg
PSAwKQorICAgIDogTWVtb3J5VmFsdWUoa2luZCwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zm
c2V0KQoreworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIHN3aXRjaCAoa2lu
ZC5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6
CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVz
LgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDogVmFs
dWUoQ2hlY2tlZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKKyAg
ICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAgICBBU1NFUlQoaXNTdG9yZShraW5kLm9wY29kZSgp
KSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiAjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNDMgKzMyLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgewogCi0vLyBGSVhNRTogV2Ugd2FudCB0byBhbGxvdyBmZW5jZWQgbWVtb3J5
IGFjY2Vzc2VzIG9uIEFSTS4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjIzNDkKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5VmFsdWUgOiBwdWJs
aWMgVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQog
ICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9h
ZDhaOgotICAgICAgICBjYXNlIExvYWQ4UzoKLSAgICAgICAgY2FzZSBMb2FkMTZaOgotICAgICAg
ICBjYXNlIExvYWQxNlM6Ci0gICAgICAgIGNhc2UgTG9hZDoKLSAgICAgICAgY2FzZSBTdG9yZTg6
Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaXNTdG9yZShLaW5kIGtpbmQp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgY2FzZSBT
dG9yZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZToKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaXNMb2FkKEtpbmQg
a2luZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhY2NlcHRzKGtpbmQpICYmICFpc1N0b3JlKGtp
bmQpOworICAgICAgICByZXR1cm4gaXNNZW1vcnkoa2luZC5vcGNvZGUoKSk7CiAgICAgfQogCiAg
ICAgfk1lbW9yeVZhbHVlKCk7CkBAIC03OCw3NiArNDYsNTUgQEAgcHVibGljOgogCiAgICAgY29u
c3QgSGVhcFJhbmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KICAgICB2b2lk
IHNldFJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9yYW5nZSA9IHJhbmdlOyB9Cisg
ICAgCisgICAgLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgcmFuZ2UuCisgICAgY29uc3QgSGVhcFJh
bmdlJiBhY2Nlc3NSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHJhbmdlKCk7IH0KKyAgICB2b2lkIHNl
dEFjY2Vzc1JhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgc2V0UmFuZ2UocmFuZ2UpOyB9
CisgICAgCisgICAgY29uc3QgSGVhcFJhbmdlJiBmZW5jZVJhbmdlKCkgY29uc3QgeyByZXR1cm4g
bV9mZW5jZVJhbmdlOyB9CisgICAgdm9pZCBzZXRGZW5jZVJhbmdlKGNvbnN0IEhlYXBSYW5nZSYg
cmFuZ2UpIHsgbV9mZW5jZVJhbmdlID0gcmFuZ2U7IH0KKworICAgIGJvb2wgaXNTdG9yZSgpIGNv
bnN0IHsgcmV0dXJuIGlzU3RvcmUob3Bjb2RlKCkpOyB9CisgICAgYm9vbCBpc0xvYWQoKSBjb25z
dCB7IHJldHVybiBpc0xvYWQob3Bjb2RlKCkpOyB9CiAKLSAgICBib29sIGlzU3RvcmUoKSBjb25z
dCB7IHJldHVybiB0eXBlKCkgPT0gVm9pZDsgfQotICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZSgpICE9IFZvaWQ7IH0KKyAgICBib29sIGhhc0ZlbmNlKCkgY29uc3QgeyByZXR1
cm4gISFmZW5jZVJhbmdlKCk7IH0KIAorICAgIFR5cGUgYWNjZXNzVHlwZSgpIGNvbnN0OwogICAg
IHNpemVfdCBhY2Nlc3NCeXRlU2l6ZSgpIGNvbnN0OwotICAgIFdpZHRoIGFjY2Vzc1dpZHRoKCkg
Y29uc3Q7CisgICAgCisgICAgLy8gU2xpZ2h0bHkgZmFzdGVyIHZlcnNpb24gb2YgYWNjZXNzV2lk
dGgsIGlmIHlvdSBrbm93IHRoYXQgeW91J3JlIHdvcmtpbmcgd2l0aCBhIGxvYWQgb3Igc3RvcmUu
CisgICAgV2lkdGggbG9hZFN0b3JlV2lkdGgoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIFdp
ZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGR1bXBNZXRh
KENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7Ci0KLSAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBM
b2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2
ZSBhIHN1ZmZpeCB0aGF0Ci0gICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KLSAg
ICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUq
IHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bj
b2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIEtp
bmQga2luZCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IG9mZnNldCwgQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0
eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0g
ICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6OnRvcCgpKQogICAgIHsKLSAgICAgICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewot
ICAgICAgICAgICAgY2FzZSBMb2FkOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBMb2FkOFo6Ci0gICAgICAgICAgICBjYXNlIExvYWQ4UzoKLSAgICAgICAgICAgIGNh
c2UgTG9hZDE2WjoKLSAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKLSAgICAgICAgICAgICAgICBB
U1NFUlQodHlwZSA9PSBJbnQzMik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFN0b3JlODoKLSAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgICAgIGNh
c2UgU3RvcmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVm9pZCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgfQorICAg
IAorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMs
IG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNj
cmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgorICAgIE1lbW9yeVZhbHVlKEtpbmQsIFR5cGUsIE9y
aWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CiAKICAgICAvLyBVc2Ug
dGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KLSAg
ICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBp
bnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDogTWVtb3J5VmFsdWUoa2luZCwgSW50MzIsIG9y
aWdpbiwgcG9pbnRlciwgb2Zmc2V0KQotICAgIHsKLSAgICB9CisgICAgTWVtb3J5VmFsdWUoS2lu
ZCwgT3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKTsKIAogICAgIC8v
IFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0
ID0gMCkKLSAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCBWb2lkLCBvcmlnaW4s
IHZhbHVlLCBwb2ludGVyKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgLCBt
X3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCi0gICAgewotICAgICAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkgewotICAgICAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgICAg
ICBjYXNlIFN0b3JlODoKLSAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgICAgIGNh
c2UgU3RvcmU6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCisgICAgTWVtb3J5VmFsdWUo
S2luZCwgT3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNl
dCA9IDApOworICAgIAogICAgIGludDMyX3QgbV9vZmZzZXQgeyAwIH07Ci0gICAgSGVhcFJhbmdl
IG1fcmFuZ2U7CisgICAgSGVhcFJhbmdlIG1fcmFuZ2UgeyBIZWFwUmFuZ2U6OnRvcCgpIH07Cisg
ICAgSGVhcFJhbmdlIG1fZmVuY2VSYW5nZSB7IEhlYXBSYW5nZSgpIH07CiB9OwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNiBAQCBlbnVtIE9wY29kZSA6IGludDE2X3Qgewog
ICAgIE1vZCwgLy8gQWxsIGJldHMgYXJlIG9mZiBhcyB0byB3aGF0IHdpbGwgaGFwcGVuIHdoZW4g
eW91IGV4ZWN1dGUgdGhpcyBmb3IgLTJeMzElLTEgYW5kIHglMC4KICAgICBVTW9kLAogCi0KICAg
ICAvLyBQb2x5bW9ycGhpYyBuZWdhdGlvbi4gTm90ZSB0aGF0IHdlIG9ubHkgbmVlZCB0aGlzIGZv
ciBmbG9hdGluZyBwb2ludCwgc2luY2UgaW50ZWdlciBuZWdhdGlvbgogICAgIC8vIGlzIGV4YWN0
bHkgbGlrZSBTdWIoMCwgeCkuIEJ1dCB0aGF0J3Mgbm90IHRydWUgZm9yIGZsb2F0aW5nIHBvaW50
LiBTdWIoMCwgMCkgaXMgMCwgd2hpbGUKICAgICAvLyBOZWcoMCkgaXMgLTAuIEFsc28sIHdlIGNh
bm9uaWNhbGl6ZSBTdWIoMCwgeCkgaW50byBOZWcoeCkgaW4gY2FzZSBvZiBpbnRlZ2Vycy4KQEAg
LTE2Miw2ICsxNjEsOTkgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKICAgICBTdG9yZTE2LAog
ICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9yZSBmb3IgSW50MzIsIEludDY0LCBGbG9h
dCwgYW5kIERvdWJsZS4KICAgICBTdG9yZSwKKyAgICAKKyAgICAvLyBBdG9taWMgY29tcGFyZSBh
bmQgc3dhcCB0aGF0IHJldHVybnMgYSBib29sZWFuLiBNYXkgY2hvb3NlIHRvIGRvIG5vdGhpbmcg
YW5kIHJldHVybiBmYWxzZS4gWW91IGNhbgorICAgIC8vIHVzdWFsbHkgYXNzdW1lIHRoYXQgdGhp
cyBpcyBmYXN0ZXIgYW5kIHJlc3VsdHMgaW4gbGVzcyBjb2RlIHRoYW4gQXRvbWljU3Ryb25nQ0FT
LCB0aG91Z2ggdGhhdCdzCisgICAgLy8gbm90IG5lY2Vzc2FyaWx5IHRydWUgb24gSW50ZWwsIGlm
IGluc3RydWN0aW9uIHNlbGVjdGlvbiBkb2VzIGl0cyBqb2IuIEltYWdpbmUgdGhhdCB0aGlzIG9w
Y29kZSBpcworICAgIC8vIGFzIGlmIHlvdSBkaWQgdGhpcyBhdG9taWNhbGx5OgorICAgIC8vCisg
ICAgLy8gdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAvLyBib29sIEF0b21pY1dlYWtDQVMoVCBl
eHBlY3RlZFZhbHVlLCBUIG5ld1ZhbHVlLCBUKiBwdHIpCisgICAgLy8geworICAgIC8vICAgICBp
ZiAoIXJhbmQoKSkKKyAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gUmVhbCB3b3JsZCBl
eGFtcGxlIG9mIHRoaXM6IGNvbnRleHQgc3dpdGNoIG9uIEFSTSB3aGlsZSBkb2luZyBDQVMuCisg
ICAgLy8gICAgIGlmICgqcHRyICE9IGV4cGVjdGVkVmFsdWUpCisgICAgLy8gICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgLy8gICAgICpwdHIgPSBuZXdWYWx1ZTsKKyAgICAvLyAgICAgcmV0dXJu
IHRydWU7CisgICAgLy8gfQorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGFsbCBhdG9taWNzIHB1
dCB0aGUgcG9pbnRlciBsYXN0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cgbG9hZHMgYW5kIHN0
b3JlcyB3b3JrLiBUaGlzCisgICAgLy8gaXMgYSBnb29meSB0cmFkaXRpb24sIGJ1dCBpdCdzIGhh
cm1sZXNzLCBhbmQgYmV0dGVyIHRoYW4gYmVpbmcgaW5jb25zaXN0ZW50LgorICAgIC8vCisgICAg
Ly8gTm90ZSB0aGF0IHdlYWsgQ0FTIGhhcyBubyBmZW5jaW5nIGd1YXJhbnRlZXMgd2hlbiBpdCBm
YWlscy4gVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcKKyAgICAvLyB0cmFuc2Zvcm1hdGlv
biBpcyBhbHdheXMgdmFsaWQ6CisgICAgLy8KKyAgICAvLyBCZWZvcmU6CisgICAgLy8KKyAgICAv
LyAgICAgICAgIEJyYW5jaChBdG9taWNXZWFrQ0FTKGV4cGVjdGVkLCBuZXcsIHB0cikpCisgICAg
Ly8gICAgICAgU3VjY2Vzc29yczogVGhlbjojc3VjY2VzcywgRWxzZTojZmFpbAorICAgIC8vCisg
ICAgLy8gQWZ0ZXI6CisgICAgLy8KKyAgICAvLyAgICAgICAgIEJyYW5jaChFcXVhbChMb2FkKHB0
ciksIGV4cGVjdGVkKSkKKyAgICAvLyAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiNhdHRlbXB0LCBF
bHNlOiNmYWlsCisgICAgLy8gICAgIEJCI2F0dGVtcHQ6CisgICAgLy8gICAgICAgICBCcmFuY2go
QXRvbWljV2Vha0NBUyhleHBlY3RlZCwgbmV3LCBwdHIpKQorICAgIC8vICAgICAgIFN1Y2Nlc3Nv
cnM6IFRoZW46I3N1Y2Nlc3MsIEVsc2U6I2ZhaWwKKyAgICBBdG9taWNXZWFrQ0FTLAorICAgIAor
ICAgIC8vIEF0b21pYyBjb21wYXJlIGFuZCBzd2FwIHRoYXQgcmV0dXJucyB0aGUgb2xkIHZhbHVl
LiBEb2VzIG5vdCBoYXZlIHRoZSBub25kZXRlcm1pbmlzbSBvZiBXZWFrQ0FTLgorICAgIC8vIFRo
aXMgaXMgYSBiaXQgbW9yZSBjb2RlIGFuZCBhIGJpdCBzbG93ZXIgaW4gc29tZSBjYXNlcywgdGhv
dWdoIG5vdCBieSBhIGxvdC4gSW1hZ2luZSB0aGF0IHRoaXMKKyAgICAvLyBvcGNvZGUgaXMgYXMg
aWYgeW91IGRpZCB0aGlzIGF0b21pY2FsbHk6CisgICAgLy8KKyAgICAvLyB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIC8vIFQgQXRvbWljU3Ryb25nQ0FTKFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdW
YWx1ZSwgVCogcHRyKQorICAgIC8vIHsKKyAgICAvLyAgICAgVCBvbGRWYWx1ZSA9ICpwdHI7Cisg
ICAgLy8gICAgIGlmIChvbGRWYWx1ZSA9PSBleHBlY3RlZFZhbHVlKQorICAgIC8vICAgICAgICAg
KnB0ciA9IG5ld1ZhbHVlOworICAgIC8vICAgICByZXR1cm4gb2xkVmFsdWUKKyAgICAvLyB9Cisg
ICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgQXRvbWljV2Vha0NBUyBhbmQgQXRvbWljU3Ryb25nQ0FT
IHNvcnQgb2YgaGF2ZSB0aGlzIGtpbmQgb2YgZXF1aXZhbGVuY2U6CisgICAgLy8KKyAgICAvLyBB
dG9taWNXZWFrQ0FTKEBleHAsIEBuZXcsIEBwdHIpID09IEVxdWFsKEF0b21pY1N0cm9uZ0NBUyhA
ZXhwLCBAbmV3LCBAcHRyKSwgQGV4cCkKKyAgICAvLworICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhl
IFdlYWtDQVMgZG9lcyBub3Qgc3B1cmlvdXNseSBmYWlsLCBvZiBjb3Vyc2UuCisgICAgQXRvbWlj
U3Ryb25nQ0FTLAorICAgIAorICAgIC8vIEF0b21pY2FsbHkgX19fIGEgbWVtb3J5IGxvY2F0aW9u
IGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQG9sZFZh
bHVlID0gQXRvbWljWGNoZ19fXyhAb3BlcmFuZCwgQHB0cikKKyAgICBBdG9taWNYY2hnQWRkLAor
ICAgIEF0b21pY1hjaGdBbmQsCisgICAgQXRvbWljWGNoZ09yLAorICAgIEF0b21pY1hjaGdTdWIs
CisgICAgQXRvbWljWGNoZ1hvciwKKyAgICAKKyAgICAvLyBBdG9taWNhbGx5IGV4Y2hhbmdlIGEg
dmFsdWUgd2l0aCBhIG1lbW9yeSBsb2NhdGlvbi4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQG9s
ZFZhbHVlID0gQXRvbWljWGNoZyhAbmV3VmFsdWUsIEBwdHIpCisgICAgQXRvbWljWGNoZywKKyAg
ICAKKyAgICAvLyBJbnRyb2R1Y2UgYW4gaW52aXNpYmxlIGRlcGVuZGVuY3kgZm9yIGJsb2NraW5n
IG1vdGlvbiBvZiBsb2FkcyB3aXRoIHJlc3BlY3QgdG8gZWFjaCBvdGhlci4gU3ludGF4OgorICAg
IC8vCisgICAgLy8gQHJlc3VsdCA9IERlcGVuZChAcGhhbnRvbSkKKyAgICAvLworICAgIC8vIFRo
aXMgaXMgZXZlbnR1YWxseSBjb2RlZ2VuZXJhdGVkIHRvIGhhdmUgbG9jYWwgc2VtYW50aWNzIGFz
IGlmIHdlIGRpZDoKKyAgICAvLworICAgIC8vIEByZXN1bHQgPSAkMAorICAgIC8vCisgICAgLy8g
QnV0IGl0IGVuc3VyZXMgdGhhdCB0aGUgdXNlcnMgb2YgQHJlc3VsdCBjYW5ub3QgZXhlY3V0ZSB1
bnRpbCBAcGhhbnRvbSBpcyBjb21wdXRlZC4KKyAgICAvLworICAgIC8vIFRoZSBjb21waWxlciBp
cyBub3QgYWxsb3dlZCB0byByZWFzb24gYWJvdXQgdGhlIGZhY3QgdGhhdCBEZXBlbmQgY29kZWdl
bmVyYXRlcyB0aGlzIHdheS4gQW55IGtpbmQKKyAgICAvLyBvZiB0cmFuc2Zvcm1hdGlvbiBvciBh
bmFseXNpcyB0aGF0IHJlbGllcyBvbiB0aGUgaW5zaWdodCB0aGF0IERlcGVuZCBpcyByZWFsbHkg
emVybyBpcyB1bnNvdW5kLAorICAgIC8vIGJlY2F1c2UgaXQgdW5sb2NrcyByZW9yZGVyaW5nIG9m
IHVzZXJzIG9mIEByZXN1bHQgYW5kIEBwaGFudG9tLgorICAgIC8vCisgICAgLy8gT24gWDg2LCB0
aGlzIGlzIGxvd2VyZWQgdG8gYSBsb2FkLWxvYWQgZmVuY2UgYW5kIEByZXN1bHQgdXNlcyBAcGhh
bnRvbSBkaXJlY3RseS4KKyAgICAvLworICAgIC8vIE9uIEFSTSwgdGhpcyBpcyBsb3dlcmVkIGFz
IGlmIGxpa2U6CisgICAgLy8KKyAgICAvLyBAcmVzdWx0ID0gQml0WG9yKEBwaGFudG9tLCBAcGhh
bnRvbSkKKyAgICAvLworICAgIC8vIEV4Y2VwdCB0aGF0IHRoZSBjb21waWxlciBuZXZlciBnZXRz
IGFuIG9wcG9ydHVuaXR5IHRvIHNpbXBsaWZ5IG91dCB0aGUgQml0WG9yLgorICAgIERlcGVuZCwK
IAogICAgIC8vIFRoaXMgaXMgdXNlZCB0byBjb21wdXRlIHRoZSBhY3R1YWwgYWRkcmVzcyBvZiBh
IFdhc20gbWVtb3J5IG9wZXJhdGlvbi4gSXQgdGFrZXMgYW4gSW50UHRyCiAgICAgLy8gYW5kIGEg
cGlubmVkIHJlZ2lzdGVyIHRoZW4gY29tcHV0ZXMgdGhlIGFwcHJvcHJpYXRlIEludFB0ciBhZGRy
ZXNzLiBGb3IgdGhlIHVzZS1jYXNlIG9mCkBAIC0zMDEsNiArMzkzLDcxIEBAIGlubGluZSBib29s
IGlzRGVmaW5pdGVseVRlcm1pbmFsKE9wY29kZSAKICAgICB9CiB9CiAKK2lubGluZSBib29sIGlz
TG9hZChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBM
b2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgorICAgIGNhc2UgTG9h
ZDE2UzoKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzU3RvcmUo
T3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgU3RvcmU4
OgorICAgIGNhc2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxp
bmUgYm9vbCBpc0xvYWRTdG9yZShPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2Rl
KSB7CisgICAgY2FzZSBMb2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZa
OgorICAgIGNhc2UgTG9hZDE2UzoKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBTdG9yZTg6Cisg
ICAgY2FzZSBTdG9yZTE2OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBi
b29sIGlzQXRvbWljKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgY2Fz
ZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21p
Y1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9y
OgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNNZW1v
cnlBY2Nlc3MoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICByZXR1cm4gaXNBdG9taWMob3Bjb2RlKSB8
fCBpc0xvYWRTdG9yZShvcGNvZGUpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAog
bmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
aAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgVmFs
dWUqIGFkZEludENvbnN0YW50KE9yaWdpbiwgVHlwZSwgaW50NjRfdCB2YWx1ZSk7CiAgICAgVmFs
dWUqIGFkZEludENvbnN0YW50KFZhbHVlKiwgaW50NjRfdCB2YWx1ZSk7CiAKKyAgICAvLyBZb3Un
cmUgZ3VhcmFudGVlZCB0aGF0IGJvdHRvbSBpcyB6ZXJvLgogICAgIFZhbHVlKiBhZGRCb3R0b20o
T3JpZ2luLCBUeXBlKTsKICAgICBWYWx1ZSogYWRkQm90dG9tKFZhbHVlKik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzcxLDYgKzM3MSw0NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIHZh
bGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1
ZS0+a2luZCgpLmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAzLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9
PSB2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkg
PT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxp
ZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2
YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1N0
cm9uZ0NBUzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxs
KCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51
bUNoaWxkcmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2
YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUt
PmNoaWxkKDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFM
SURBVEUoaXNJbnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7
CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgICAgICAg
ICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAg
ICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNo
Z1hvcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5j
aGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOwor
ICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEZXBlbmQ6CisgICAgICAgICAgICAgICAgVkFM
SURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZh
bHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtQWRkcmVzczoKICAgICAgICAg
ICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAq
dmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9
PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwpAQCAtNTM3LDYgKzU3NywxMyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0
ZUF0b21pYyhWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWlj
ID0gdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAKKyAgICAgICAgVkFMSURBVEUo
YmVzdFR5cGUoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSA9PSBhdG9taWMtPm9wZXJhdGlvblR5
cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICB9CiAKICAgICB2b2lkIHZhbGlkYXRlU3RhY2tB
Y2Nlc3MoVmFsdWUqIHZhbHVlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg5LDYgKzU4OSw3IEBAIEVmZmVjdHMgVmFs
dWU6OmVmZmVjdHMoKSBjb25zdAogICAgIGNhc2UgQmVsb3dFcXVhbDoKICAgICBjYXNlIEVxdWFs
T3JVbm9yZGVyZWQ6CiAgICAgY2FzZSBTZWxlY3Q6CisgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgRGl2OgogICAgIGNhc2UgVURpdjoKQEAgLTYwMCwxNiArNjAxLDQ0
IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgIGNhc2UgTG9hZDhTOgogICAg
IGNhc2UgTG9hZDE2WjoKICAgICBjYXNlIExvYWQxNlM6Ci0gICAgY2FzZSBMb2FkOgotICAgICAg
ICByZXN1bHQucmVhZHMgPSBhczxNZW1vcnlWYWx1ZT4oKS0+cmFuZ2UoKTsKKyAgICBjYXNlIExv
YWQ6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOwor
ICAgICAgICByZXN1bHQucmVhZHMgPSBtZW1vcnktPnJhbmdlKCk7CisgICAgICAgIGlmIChtZW1v
cnktPnBoYW50b21SYW5nZSgpKSB7CisgICAgICAgICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5
LT5waGFudG9tUmFuZ2UoKTsKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CisgICAg
ICAgIH0KICAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICBi
cmVhazsKKyAgICB9CiAgICAgY2FzZSBTdG9yZTg6CiAgICAgY2FzZSBTdG9yZTE2OgotICAgIGNh
c2UgU3RvcmU6Ci0gICAgICAgIHJlc3VsdC53cml0ZXMgPSBhczxNZW1vcnlWYWx1ZT4oKS0+cmFu
Z2UoKTsKKyAgICBjYXNlIFN0b3JlOiB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBh
czxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LndyaXRlcyA9IG1lbW9yeS0+cmFuZ2Uo
KTsKKyAgICAgICAgaWYgKG1lbW9yeS0+cGhhbnRvbVJhbmdlKCkpIHsKKyAgICAgICAgICAgIHJl
c3VsdC5yZWFkcyA9IG1lbW9yeS0+cGhhbnRvbVJhbmdlKCk7CisgICAgICAgICAgICByZXN1bHQu
ZmVuY2UgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50
ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXRvbWljV2Vha0NBUzoK
KyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAg
Y2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRv
bWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hn
OiB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBhczxNZW1vcnlWYWx1ZT4oKTsKKyAg
ICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5LT5yYW5nZSgpIHwgbWVtb3J5LT5waGFudG9tUmFu
Z2UoKTsKKyAgICAgICAgcmVzdWx0LndyaXRlcyA9IG1lbW9yeS0+cmFuZ2UoKSB8IG1lbW9ydHkt
PnBoYW50b21SYW5nZSgpOworICAgICAgICBpZiAobWVtb3J5LT5waGFudG9tUmFuZ2UoKSkKKyAg
ICAgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIHJlc3VsdC5jb250cm9sRGVw
ZW5kZW50ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgV2FzbUFkZHJl
c3M6CiAgICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwpA
QCAtNjE3LDE4ICs2NDYsNyBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICAg
ICAgY29uc3QgRmVuY2VWYWx1ZSogZmVuY2UgPSBhczxGZW5jZVZhbHVlPigpOwogICAgICAgICBy
ZXN1bHQucmVhZHMgPSBmZW5jZS0+cmVhZDsKICAgICAgICAgcmVzdWx0LndyaXRlcyA9IGZlbmNl
LT53cml0ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIFByZXZlbnQga2lsbGluZyBvZiBmZW5jZXMg
dGhhdCBjbGFpbSBub3QgdG8gd3JpdGUgYW55dGhpbmcuIEl0J3MgYSBiaXQgd2VpcmQgdGhhdCB3
ZSB1c2UKLSAgICAgICAgLy8gbG9jYWwgc3RhdGUgYXMgdGhlIHdheSB0byBkbyB0aGlzLCBidXQg
aXQgaGFwcGVucyB0byB3b3JrOiB3ZSBtdXN0IGFzc3VtZSB0aGF0IHdlIGNhbm5vdAotICAgICAg
ICAvLyBraWxsIHdyaXRlc0xvY2FsU3RhdGUgdW5sZXNzIHdlIHVuZGVyc3RhbmRzIGV4YWN0bHkg
d2hhdCB0aGUgaW5zdHJ1Y3Rpb24gaXMgZG9pbmcgKGxpa2UKLSAgICAgICAgLy8gdGhlIHdheSB0
aGF0IGZpeFNTQSB1bmRlcnN0YW5kcyBTZXQvR2V0IGFuZCB0aGUgd2F5IHRoYXQgcmVkdWNlU3Ry
ZW5ndGggYW5kIG90aGVycwotICAgICAgICAvLyB1bmRlcnN0YW5kIFVwc2lsb24pLiBUaGlzIHdv
dWxkIG9ubHkgYmVjb21lIGEgcHJvYmxlbSBpZiB3ZSBoYWQgc29tZSBhbmFseXNpcyB0aGF0IHdh
cwotICAgICAgICAvLyBsb29raW5nIHRvIHVzZSB0aGUgd3JpdGVzTG9jYWxTdGF0ZSBiaXQgdG8g
aW52YWxpZGF0ZSBhIENTRSBvdmVyIGxvY2FsIHN0YXRlIG9wZXJhdGlvbnMuCi0gICAgICAgIC8v
IFRoZW4gYSBGZW5jZSB3b3VsZCBsb29rIGJsb2NrLCBzYXksIHRoZSBlbGltaW5hdGlvbiBvZiBh
IHJlZHVuZGFudCBHZXQuIEJ1dCBpdCBsaWtlCi0gICAgICAgIC8vIHRoYXQncyBub3QgYXQgYWxs
IGhvdyBvdXIgb3B0aW1pemF0aW9ucyBmb3IgU2V0L0dldC9VcHNpbG9uL1BoaSB3b3JrIC0gdGhl
eSBncm9rIHRoZWlyCi0gICAgICAgIC8vIG9wZXJhdGlvbnMgZGVlcGx5IGVub3VnaCB0aGF0IHRo
ZXkgaGF2ZSBubyBuZWVkIHRvIGNoZWNrIHRoaXMgYml0IC0gc28gdGhpcyBjaGVhdCBpcwotICAg
ICAgICAvLyBmaW5lLgotICAgICAgICByZXN1bHQud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7Cisg
ICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIENDYWxsOgpAQCAtNjk0LDYgKzcxMiw3IEBAIFZhbHVlS2V5IFZhbHVlOjprZXkoKSBjb25z
dAogICAgIGNhc2UgQ2hlY2s6CiAgICAgY2FzZSBCaXR3aXNlQ2FzdDoKICAgICBjYXNlIE5lZzoK
KyAgICBjYXNlIERlcGVuZDoKICAgICAgICAgcmV0dXJuIFZhbHVlS2V5KGtpbmQoKSwgdHlwZSgp
LCBjaGlsZCgwKSk7CiAgICAgY2FzZSBBZGQ6CiAgICAgY2FzZSBTdWI6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsOCBAQCBw
dWJsaWM6CiAgICAgLy8gdmFsdWVzIHdpdGggSWRlbnRpdGllcyBvbiBib3R0b20gY29uc3RhbnRz
LiBGb3IgdGhpcyByZWFzb24sIHRoaXMgdGFrZXMgYSBjYWxsYmFjayB0aGF0IGlzCiAgICAgLy8g
cmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGJvdHRvbXMuIFRoZXJlJ3MgYSB1dGlsaXR5IGZvciB0
aGlzLCBzZWUgQjNCb3R0b21Qcm92aWRlci5oLiBZb3UKICAgICAvLyBjYW4gYWxzbyBhY2Nlc3Mg
dGhhdCB1dGlsaXR5IHVzaW5nIHJlcGxhY2VXaXRoQm90dG9tKEluc2VydGlvblNldCYsIHNpemVf
dCkuCisgICAgLy8KKyAgICAvLyBZb3UncmUgZ3VhcmFudGVlZCB0aGF0IGJvdHRvbSBpcyB6ZXJv
LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJvdHRvbVByb3ZpZGVyPgogICAgIHZvaWQgcmVwbGFj
ZVdpdGhCb3R0b20oY29uc3QgQm90dG9tUHJvdmlkZXImKTsKICAgICAKQEAgLTMyMSw2ICszMjMs
NyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElUb0Y6CiAgICAgICAgIGNhc2UgQml0d2lzZUNh
c3Q6CiAgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIERlcGVuZDoKICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShudW1BcmdzICE9IDEpKQogICAgICAgICAgICAgICAgIGJhZEtpbmQo
a2luZCwgbnVtQXJncyk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1dpZHRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNXaWR0aC5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1dpZHRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMzggQEAKIAog
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworVHlwZSBiZXN0VHlwZShCYW5rIGJhbmssIFdpZHRoIHdpZHRoKQoreworICAgIHN3
aXRjaCAod2lkdGgpIHsKKyAgICBjYXNlIFdpZHRoODoKKyAgICBjYXNlIFdpZHRoMTY6CisgICAg
Y2FzZSBXaWR0aDMyOgorICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgY2FzZSBHUDoK
KyAgICAgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAg
IHJldHVybiBGbG9hdDsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gVm9pZDsKKyAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAg
IHN3aXRjaCAoYmFuaykgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIElu
dDY0OworICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICAg
ICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gVm9pZDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gVm9pZDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKIG5hbWVzcGFjZSBX
VEYgewogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpCMzo6V2lk
dGggd2lkdGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDYgKzYyLDggQEAgaW5saW5lIFdpZHRoIHdpZHRoRm9yVHlwZShUeXBlIHR5cGUp
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK1R5cGUgYmVzdFR5cGUoQmFuayBiYW5r
LCBXaWR0aCB3aWR0aCk7CisKIGlubGluZSBXaWR0aCBjb25zZXJ2YXRpdmVXaWR0aChCYW5rIGJh
bmspCiB7CiAgICAgcmV0dXJuIGJhbmsgPT0gR1AgPyBwb2ludGVyV2lkdGgoKSA6IFdpZHRoNjQ7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29k
ZXMJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NjgsMjggKzY2OCwzNDEgQEAgTG9hZDggVTpHOjgs
IFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3E4IFU6Rzo4
LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBTdG9yZTggVTpHOjgs
IEQ6Rzo4CiAgICAgVG1wLCBJbmRleAogICAgIFRtcCwgQWRkcgogICAgIHg4NjogSW1tLCBJbmRl
eAogICAgIHg4NjogSW1tLCBBZGRyCiAKK1N0b3JlUmVsOCBVOkc6OCwgRDpHOjgKKyAgICBUbXAs
IEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisgICAgeDg2OiBJbW0s
IEFkZHIKKwogTG9hZDhTaWduZWRFeHRlbmRUbzMyIFU6Rzo4LCBaRDpHOjMyCiAgICAgQWRkciwg
VG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIgVTpHOjgsIFpE
Okc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIExvYWQxNiBVOkc6MTYsIFpE
Okc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3ExNiBVOkc6MTYs
IFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIExvYWQxNlNpZ25lZEV4
dGVuZFRvMzIgVTpHOjE2LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAog
CitMb2FkQWNxMTZTaWduZWRFeHRlbmRUbzMyIFU6RzoxNiwgWkQ6RzozMgorICAgIEFkZHIsIFRt
cAorICAgIEluZGV4LCBUbXAKKwogU3RvcmUxNiBVOkc6MTYsIEQ6RzoxNgogICAgIFRtcCwgSW5k
ZXgKICAgICBUbXAsIEFkZHIKIAorU3RvcmVBY3ExNiBVOkc6MTYsIEQ6RzoxNgorICAgIFRtcCwg
SW5kZXgKKyAgICBUbXAsIEFkZHIKKworTG9hZEFjcTMyIFU6RzozMiBaRDpHOjMyCisgICAgVG1w
LCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK1N0b3JlUmVsMzIgVTpHOjMy
IFpEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisgICAgeDg2OiBJbW0sIEFk
ZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKworNjQ6IExvYWRBY3E2NCBVOkc6NjQgWkQ6Rzo2NAor
ICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCis2NDogU3RvcmVS
ZWw2NCBVOkc6NjQgWkQ6Rzo2NAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKyAgICB4
ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorCisjIFRoZSBmaXJzdCBvcGVyYW5k
IGlzIHJheC4KK3g4NjogTG9ja0NtcFhjaGc4IFVEOkc6OCBVRDpHOjggVTpHOjgKKyAgICBUbXAq
LCBBZGRyLCBUbXAKKyAgICBUbXAqLCBJbmRleCwgVG1wCisKK3g4NjogTG9ja0NtcFhjaGcxNiBV
RDpHOjE2IFVEOkc6MTYgVTpHOjMyCisgICAgVG1wKiwgQWRkciwgVG1wCisgICAgVG1wKiwgSW5k
ZXgsIFRtcAorCit4ODY6IExvY2tDbXBYY2hnMzIgVUQ6RzozMiBVRDpHOjMyIFU6RzozMgorICAg
IFRtcCosIEFkZHIsIFRtcAorICAgIFRtcCosIEluZGV4LCBUbXAKKworeDg2XzY0OiBMb2NrQ21w
WGNoZzY0IFVEOkc6NjQgVUQ6Rzo2NCBVOkc6NjQKKyAgICBUbXAqLCBBZGRyLCBUbXAKKyAgICBU
bXAqLCBJbmRleCwgVG1wCisKK3g4NjogTG9ja0FkZDggVTpHOjggVUQ6Rzo4CisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
OiBMb2NrQWRkMTYgVTpHOjE2IFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tBZGQzMiBVOkc6MzIg
VUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9ja0FkZDY0IFU6Rzo2NCBVRDpHOjY0CisgICAgSW1t
LCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKwor
eDg2OiBMb2NrU3ViOCBVOkc6OCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tTdWIxNiBVOkc6MTYg
VUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1N1YjMyIFU6RzozMiBVRDpHOjMyCisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
XzY0OiBMb2NrU3ViNjQgVTpHOjY0IFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIElu
ZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tBbmQ4IFU6Rzo4
IFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4NjogTG9ja0FuZDE2IFU6RzoxNiBVRDpHOjE2CisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
OiBMb2NrQW5kMzIgVTpHOjMyIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IExvY2tBbmQ2NCBVOkc6
NjQgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIK
KyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja09yOCBVOkc6OCBVRDpHOjgKKyAgICBJbW0sIEFk
ZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6
IExvY2tPcjE2IFU6RzoxNiBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAor
ICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrT3IzMiBVOkc6MzIgVUQ6
RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBU
bXAsIEluZGV4CisKK3g4Nl82NDogTG9ja09yNjQgVTpHOjY0IFVEOkc6NjQKKyAgICBJbW0sIEFk
ZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6
IExvY2tYb3I4IFU6Rzo4IFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAg
ICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hvcjE2IFU6RzoxNiBVRDpH
OjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRt
cCwgSW5kZXgKKworeDg2OiBMb2NrWG9yMzIgVTpHOjMyIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIK
KyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6
IExvY2tYb3I2NCBVOkc6NjQgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgK
KyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja05lZzggVUQ6Rzo4Cisg
ICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogTG9ja05lZzE2IFVEOkc6MTYKKyAgICBBZGRyCisg
ICAgSW5kZXgKKworeDg2OiBMb2NrTmVnMzIgVUQ6RzozMgorICAgIEFkZHIKKyAgICBJbmRleAor
Cit4ODZfNjQ6IExvY2tOZWc2NCBVRDpHOjY0CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4Njog
TG9ja05vdDggVUQ6Rzo4CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogTG9ja05vdDE2IFVE
Okc6MTYKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBMb2NrTm90MzIgVUQ6RzozMgorICAg
IEFkZHIKKyAgICBJbmRleAorCit4ODZfNjQ6IExvY2tOb3Q2NCBVRDpHOjY0CisgICAgQWRkcgor
ICAgIEluZGV4CisKK3g4NjogTG9ja1hBZGQ4IFVEOkc6OCBVRDpHOjgKKyAgICBUbXAsIEFkZHIK
KyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hBZGQxNiBVRDpHOjE2IFVEOkc6MTYKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hBZGQzMiBVRDpHOjMyIFVEOkc6
MzIKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9ja1hBZGQ2NCBV
RDpHOjY0IFVEOkc6NjQKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9j
a1hjaGc4IFVEOkc6OCBVRDpHOjgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4
NjogTG9ja1hjaGcxNiBVRDpHOjE2IFVEOkc6MTYKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIElu
ZGV4CisKK3g4NjogTG9ja1hjaGczMiBVRDpHOjMyIFVEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9ja1hjaGc2NCBVRDpHOjY0IFVEOkc6NjQKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK2FybTY0OiBMb2FkTGluazggVTpHOjggWkQ6Rzo4
CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmtBY3E4IFU6
Rzo4IFpEOkc6OAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3Jl
Q29uZDggVTpHOjggRDpHOjggWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIElu
ZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDggVTpHOjggRDpHOjggWkQ6Rzo4CisgICAg
VG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rMTYg
VTpHOjE2IFpEOkc6MTYKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBM
b2FkTGlua0FjcTE2IFU6RzoxNiBaRDpHOjE2CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRt
cAorCithcm02NDogU3RvcmVDb25kMTYgVTpHOjE2IEQ6RzoxNiBaRDpHOjgKKyAgICBUbXAsIEFk
ZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kUmVsMTYgVTpH
OjE2IEQ6RzoxNiBaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRt
cAorCithcm02NDogTG9hZExpbmszMiBVOkc6MzIgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAg
IEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rQWNxMzIgVTpHOjMyIFpEOkc6MzIKKyAgICBB
ZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQzMiBVOkc6MzIgRDpH
OjMyIFpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2Fy
bTY0OiBTdG9yZUNvbmRSZWwzMiBVOkc6MzIgRDpHOjMyIFpEOkc6OAorICAgIFRtcCwgQWRkciwg
VG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGluazY0IFU6Rzo2NCBaRDpH
OjY0CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmtBY3E2
NCBVOkc6NjQgWkQ6Rzo2NAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6
IFN0b3JlQ29uZDY0IFU6Rzo2NCBEOkc6NjQgWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAg
ICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDY0IFU6Rzo2NCBEOkc6NjQg
WkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKwogQ29tcGFy
ZTMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKICAgICBSZWxDb25kLCBUbXAsIFRt
cCwgVG1wCiAgICAgUmVsQ29uZCwgVG1wLCBJbW0sIFRtcAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302761</attachid>
            <date>2017-02-25 12:01:08 -0800</date>
            <delta_ts>2017-02-25 14:20:45 -0800</delta_ts>
            <desc>added isel for fences</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>52314</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBdG9t
aWNWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK0F0b21pY1ZhbHVlOjp+QXRvbWljVmFsdWUoKQoreworfQorCitXaWR0aCBB
dG9taWNWYWx1ZTo6YWNjZXNzV2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3dpZHRoOwor
fQorCit2b2lkIEF0b21pY1ZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChjb21tYSwgIndpZHRoID0gIiwg
bV93aWR0aCk7CisgICAgCisgICAgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKGNvbW1hLCBvdXQpOwor
fQorCitWYWx1ZSogQXRvbWljVmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG5ldyBBdG9taWNWYWx1ZSgqdGhpcyk7Cit9CisKK0F0b21pY1ZhbHVlOjpBdG9taWNWYWx1ZShL
aW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFdpZHRoIHdpZHRoLCBWYWx1ZSogb3BlcmFuZCwgVmFs
dWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNr
ZWRPcGNvZGUsIGtpbmQsIG9wZXJhbmQtPnR5cGUoKSwgb3JpZ2luLCBvZmZzZXQsIG9wZXJhbmQs
IHBvaW50ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIHNldEZlbmNlUmFuZ2UoSGVh
cFJhbmdlOjp0b3AoKSk7CisgICAgCisgICAgQVNTRVJUKGJlc3RUeXBlKG9wZXJhdGlvbldpZHRo
KCkpID09IG9wZXJhdGlvblR5cGUoKSk7CisgICAgCisgICAgc3dpdGNoIChraW5kLm9wY29kZSgp
KSB7CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAg
ICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBB
dG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitBdG9t
aWNWYWx1ZTo6QXRvbWljVmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBXaWR0aCB3aWR0
aCwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBuZXdWYWx1ZSwgVmFsdWUqIHBvaW50ZXIs
IGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGUsIGtp
bmQsIGtpbmQub3Bjb2RlKCkgPT0gQXRvbWljV2Vha0NBUyA/IEludDMyIDogZXhwZWN0ZWRWYWx1
ZS0+dHlwZSgpLCBvcmlnaW4sIG9mZnNldCwgZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUsIHBvaW50
ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIHNldEZlbmNlUmFuZ2UoSGVhcFJhbmdl
Ojp0b3AoKSk7CisgICAgCisgICAgQVNTRVJUKGJlc3RUeXBlKG9wZXJhdGlvbldpZHRoKCkpID09
IG9wZXJhdGlvblR5cGUoKSk7CisKKyAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICBj
YXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIzV2lkdGguaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEF0b21p
Y1ZhbHVlIDogcHVibGljIE1lbW9yeVZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBh
Y2NlcHRzKEtpbmQga2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0F0b21pYyhraW5kLm9w
Y29kZSgpKTsKKyAgICB9CisgICAgCisgICAgfkF0b21pY1ZhbHVlKCk7CisgICAgCisgICAgVHlw
ZSBvcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gY2hpbGQoMCktPnR5cGUoKTsgfQorICAg
IAorICAgIFdpZHRoIG9wZXJhdGlvbldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQor
ICAgIAorICAgIC8vIFN5bm9ueW0gZm9yIHdpZHRoKCksIGlmIHlvdSdyZSBhY2Nlc3Npbmcgdmlh
IE1lbW9yeVZhbHVlLgorICAgIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIFZhbHVlKiBjbG9uZUltcGwoKSBjb25z
dCBvdmVycmlkZTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
KyAgICAKKyAgICBBdG9taWNWYWx1ZShLaW5kLCBPcmlnaW4sIFdpZHRoLCBWYWx1ZSogb3BlcmFu
ZCwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CisgICAgCisgICAgQXRvbWlj
VmFsdWUoS2luZCwgT3JpZ2luLCBXaWR0aCwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBu
ZXdWYWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CisgICAgCisgICAg
V2lkdGggbV93aWR0aDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZm
ZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0
cy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vm
ZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw4IEBAIGJvb2wgRWZmZWN0czo6
aW50ZXJmZXJlcyhjb25zdCBFZmZlY3RzJiAKICAgICAgICAgfHwgaW50ZXJmZXJlc1dpdGhXcml0
ZXNQaW5uZWQob3RoZXIsICp0aGlzKQogICAgICAgICB8fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIu
d3JpdGVzKQogICAgICAgICB8fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIucmVhZHMpCi0gICAgICAg
IHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcyk7CisgICAgICAgIHx8IHJlYWRzLm92ZXJs
YXBzKG90aGVyLndyaXRlcykKKyAgICAgICAgfHwgKGZlbmNlICYmIG90aGVyLmZlbmNlKTsKIH0K
IAogYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0IEVmZmVjdHMmIG90aGVyKSBjb25zdApA
QCAtOTUsNyArOTYsOCBAQCBib29sIEVmZmVjdHM6Om9wZXJhdG9yPT0oY29uc3QgRWZmZWN0cyYg
CiAgICAgICAgICYmIHdyaXRlc1Bpbm5lZCA9PSBvdGhlci53cml0ZXNQaW5uZWQKICAgICAgICAg
JiYgcmVhZHNQaW5uZWQgPT0gb3RoZXIucmVhZHNQaW5uZWQKICAgICAgICAgJiYgd3JpdGVzID09
IG90aGVyLndyaXRlcwotICAgICAgICAmJiByZWFkcyA9PSBvdGhlci5yZWFkczsKKyAgICAgICAg
JiYgcmVhZHMgPT0gb3RoZXIucmVhZHMKKyAgICAgICAgJiYgZmVuY2UgPT0gb3RoZXIuZmVuY2U7
CiB9CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3IhPShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29u
c3QKQEAgLTEyMCw2ICsxMjIsOCBAQCB2b2lkIEVmZmVjdHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlc1Bpbm5lZCIpOwogICAgIGlm
IChyZWFkc1Bpbm5lZCkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiUmVhZHNQaW5uZWQiKTsK
KyAgICBpZiAoZmVuY2UpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIkZlbmNlIik7CiAgICAg
aWYgKHdyaXRlcykKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiV3JpdGVzOiIsIHdyaXRlcyk7
CiAgICAgaWYgKHJlYWRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBAQCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzE3MwogICAgIGJv
b2wgcmVhZHNQaW5uZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgd3JpdGVzUGlubmVkIHsgZmFsc2Ug
fTsKKyAgICAKKyAgICAvLyBNZW1vcnkgZmVuY2VzIGNhbm5vdCBiZSByZW9yZGVyZWQgYXJvdW5k
IGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVpciBlZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQK
KyAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEgbWVtb3J5IGZlbmNlLgorICAgIGJvb2wgZmVu
Y2UgeyBmYWxzZSB9OwogCiAgICAgSGVhcFJhbmdlIHdyaXRlczsKICAgICBIZWFwUmFuZ2UgcmVh
ZHM7CkBAIC04OSw2ICs5Myw3IEBAIHN0cnVjdCBFZmZlY3RzIHsKICAgICAgICAgcmVzdWx0LnJl
YWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKICAgICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1
ZTsKICAgICAgICAgcmVzdWx0LndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIHJlc3VsdC5m
ZW5jZSA9IHRydWU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0xMDMsNyAr
MTA4LDcgQEAgc3RydWN0IEVmZmVjdHMgewogCiAgICAgYm9vbCBtdXN0RXhlY3V0ZSgpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gdGVybWluYWwgfHwgZXhpdHNTaWRld2F5cyB8fCB3cml0
ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQaW5uZWQ7CisgICAgICAgIHJldHVybiB0
ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRlc0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8
IHdyaXRlc1Bpbm5lZCB8fCBmZW5jZTsKICAgICB9CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
cmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0aGVzZSByZXNwZWN0aXZlIGVmZmVjdHMgd291
bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1p
bmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1
YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDIsNiArMTQyLDcgQEAgc3RydWN0IElt
cHVyZUJsb2NrRGF0YSB7CiAKICAgICBSYW5nZVNldDxIZWFwUmFuZ2U+IHJlYWRzOyAvLyBUaGlz
IG9ubHkgZ2V0cyB1c2VkIGZvciBmb3J3YXJkIHN0b3JlIGVsaW1pbmF0aW9uLgogICAgIFJhbmdl
U2V0PEhlYXBSYW5nZT4gd3JpdGVzOyAvLyBUaGlzIGdldHMgdXNlZCBmb3IgYm90aCBsb2FkIGFu
ZCBzdG9yZSBlbGltaW5hdGlvbi4KKyAgICBib29sIGZlbmNlOwogCiAgICAgTWVtb3J5VmFsdWVN
YXAgc3RvcmVzQXRIZWFkOwogICAgIE1lbW9yeVZhbHVlTWFwIG1lbW9yeVZhbHVlc0F0VGFpbDsK
QEAgLTE3NCwxMiArMTc1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAobWVtb3J5ICYmIG1lbW9yeS0+aXNTdG9yZSgpCiAgICAgICAgICAgICAgICAg
ICAgICYmICFkYXRhLnJlYWRzLm92ZXJsYXBzKG1lbW9yeS0+cmFuZ2UoKSkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgIWRhdGEud3JpdGVzLm92ZXJsYXBzKG1lbW9yeS0+cmFuZ2UoKSkpCisgICAg
ICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRlcy5vdmVybGFwcyhtZW1vcnktPnJhbmdlKCkp
CisgICAgICAgICAgICAgICAgICAgICYmICghZGF0YS5mZW5jZSB8fCAhbWVtb3J5LT5oYXNGZW5j
ZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5zdG9yZXNBdEhlYWQuYWRkKG1lbW9yeSk7
CiAgICAgICAgICAgICAgICAgZGF0YS5yZWFkcy5hZGQoZWZmZWN0cy5yZWFkcyk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9IGVmZmVjdHMud3JpdGVzKQogICAgICAg
ICAgICAgICAgICAgICBjbG9iYmVyKGRhdGEsIHdyaXRlcyk7CisgICAgICAgICAgICAgICAgZGF0
YS5mZW5jZSB8PSBlZmZlY3RzLmZlbmNlOwogCiAgICAgICAgICAgICAgICAgaWYgKG1lbW9yeSkK
ICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuYWRkKG1lbW9yeSk7
CkBAIC00NzgsNiArNDgxLDkgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0
ZXI+CiAgICAgYm9vbCBmaW5kU3RvcmVBZnRlckNsb2JiZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdl
IHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICB7CisgICAgICAgIGlmIChtX3ZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBlbGltaW5hdGUgYSBzdG9yZSBpZiBldmVy
eSBmb3J3YXJkIHBhdGggaGl0cyBhIHN0b3JlIHRvIHRoZSBzYW1lIGxvY2F0aW9uIGJlZm9yZQog
ICAgICAgICAvLyBoaXR0aW5nIGFueSBvcGVyYXRpb24gdGhhdCBvYnNlcnZlcyB0aGUgc3RvcmUu
IFRoaXMgc2VhcmNoIHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlCiAgICAgICAgIC8vIGV4cGVuc2l2
ZSwgYnV0IGluIHRoZSBvdmVyd2hlbG1pbmcgbWFqb3JpdHkgb2YgY2FzZXMgaXQgd2lsbCBhbG1v
c3QgaW1tZWRpYXRlbHkgaGl0IGFuIApAQCAtNjE0LDYgKzYyMCwxMiBAQCBwcml2YXRlOgogICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coKm1fdmFsdWUsICI6IGxvb2tp
bmcgYmFja3dhcmQgZm9yICIsICpwdHIsICIuLi5cbiIpOwogICAgICAgICAKKyAgICAgICAgaWYg
KG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpKSB7CisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgR2l2aW5nIHVwIGJlY2F1
c2UgZmVuY2VzLlxuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSogbWF0Y2ggPSBtX2RhdGEubWVtb3J5VmFs
dWVzQXRUYWlsLmZpbmQocHRyLCBmaWx0ZXIpKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRm91bmQgIiwgKm1hdGNoLCAiIGxvY2FsbHku
XG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZpc2lv
biAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtODgsNiArODgsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CiAgICAgfQogICAgIAorICAgIEhlYXBSYW5nZSBvcGVyYXRvcnwoY29u
c3QgSGVhcFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBIZWFwUmFu
Z2UoCisgICAgICAgICAgICBzdGQ6Om1pbihtX2JlZ2luLCBvdGhlci5tX2JlZ2luKSwKKyAgICAg
ICAgICAgIHN0ZDo6bWF4KG1fZW5kLCBvdGhlci5tX2VuZCkpOworICAgIH0KKyAgICAKICAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsg
fQogCiAgICAgdW5zaWduZWQgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAy
MTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xODUsNiArMTg1LDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAg
ICAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEg
bG9hZC1sb2FkIGZlbmNlLiBUaGlzIGNvZGVnZW5zIHRvIG5vdGhpbmcgb24gWDg2LiBXZSB1c2Ug
aXQgdG8gdGVsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcGlsZXIgbm90IHRvIGJs
b2NrIGxvYWQgbW90aW9uLgorICAgICAgICAgICAgICAgICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxGZW5jZVZhbHVlPihtX2luZGV4LCBtX29yaWdpbik7Cisg
ICAgICAgICAgICAgICAgICAgIGZlbmNlLT5yZWFkID0gSGVhcFJhbmdlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGZlbmNlLT53cml0ZSA9IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBLaWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNo
b3VsZCB1bmxvY2sgYSBidW5jaCBvZiBjb2RlIHNpbXBsaWZpY2F0aW9uLgorICAgICAgICAgICAg
ICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoQm90dG9tKG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MzgsNyArNTM4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybiBBcmcoKTsKIAogICAgICAgICBpbnQzMl90IG9mZnNldCA9IHZhbHVlLT5vZmZzZXQoKTsK
LSAgICAgICAgV2lkdGggd2lkdGggPSB2YWx1ZS0+YWNjZXNzV2lkdGgoKTsKKyAgICAgICAgV2lk
dGggd2lkdGggPSB2YWx1ZS0+bG9hZFN0b3JlV2lkdGgoKTsKIAogICAgICAgICBBcmcgcmVzdWx0
ID0gZWZmZWN0aXZlQWRkcih2YWx1ZS0+bGFzdENoaWxkKCksIG9mZnNldCwgd2lkdGgpOwogICAg
ICAgICBBU1NFUlQocmVzdWx0LmlzVmFsaWRGb3JtKHdpZHRoKSk7CkBAIC01NjIsMTEgKzU2Miwx
NiBAQCBwcml2YXRlOgogICAgIAogICAgIEFyZ1Byb21pc2UgbG9hZFByb21pc2VBbnlPcGNvZGUo
VmFsdWUqIGxvYWRWYWx1ZSkKICAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvYWRWYWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCkpOwogICAgICAgICBpZiAoIWNhbkJlSW50ZXJuYWwobG9hZFZh
bHVlKSkKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKICAgICAgICAgaWYgKGNyb3NzZXNJbnRl
cmZlcmVuY2UobG9hZFZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKLSAgICAgICAg
QXJnUHJvbWlzZSByZXN1bHQoYWRkcihsb2FkVmFsdWUpLCBsb2FkVmFsdWUpOworICAgICAgICBp
ZiAobG9hZFZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAg
IHJldHVybiBBcmcoKTsKKyAgICAgICAgQXJnIGxvYWRBZGRyID0gYWRkcihsb2FkVmFsdWUpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2FkQWRkcik7CisgICAgICAgIEFyZ1Byb21pc2UgcmVz
dWx0KGxvYWRBZGRyLCBsb2FkVmFsdWUpOwogICAgICAgICBpZiAobG9hZFZhbHVlLT50cmFwcygp
KQogICAgICAgICAgICAgcmVzdWx0LnNldFRyYXBzKHRydWUpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwpAQCAtOTMxLDEwICs5MzYsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgQWlyOjpPcGNvZGUg
b3Bjb2RlMzIsIEFpcjo6T3Bjb2RlIG9wY29kZTY0LCBDb21tdXRhdGl2aXR5IGNvbW11dGF0aXZp
dHkgPSBOb3RDb21tdXRhdGl2ZT4KICAgICBib29sIHRyeUFwcGVuZFN0b3JlQmluT3AoVmFsdWUq
IGxlZnQsIFZhbHVlKiByaWdodCkKICAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdmFs
dWUtPmFzPE1lbW9yeVZhbHVlPigpKTsKKyAgICAgICAgCiAgICAgICAgIEFpcjo6T3Bjb2RlIG9w
Y29kZSA9IHRyeU9wY29kZUZvclR5cGUob3Bjb2RlMzIsIG9wY29kZTY0LCBsZWZ0LT50eXBlKCkp
OwogICAgICAgICBpZiAob3Bjb2RlID09IEFpcjo6T29wcykKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+
aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAg
IEFyZyBzdG9yZUFkZHIgPSBhZGRyKG1fdmFsdWUpOwogICAgICAgICBBU1NFUlQoc3RvcmVBZGRy
KTsKIApAQCAtOTk0LDEwICsxMDA0LDQ4IEBAIHByaXZhdGU6CiAKICAgICAgICAgcmV0dXJuIElu
c3QobW92ZSwgbV92YWx1ZSwgdG1wKHZhbHVlKSwgZGVzdCk7CiAgICAgfQorICAgIAorICAgIEFp
cjo6T3Bjb2RlIHN0b3JlT3Bjb2RlKFdpZHRoIHdpZHRoLCBCYW5rIGJhbmssIGJvb2wgcmVsZWFz
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBXaWR0aDg6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChiYW5rID09IEdQKTsKKyAgICAgICAgICAgIHJl
dHVybiByZWxlYXNlID8gU3RvcmVSZWw4IDogU3RvcmU4OworICAgICAgICBjYXNlIFdpZHRoMTY6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChiYW5rID09IEdQKTsKKyAgICAgICAgICAgIHJl
dHVybiByZWxlYXNlID8gU3RvcmVSZWwxNiA6IFN0b3JlMTY7CisgICAgICAgIGNhc2UgV2lkdGgz
MjoKKyAgICAgICAgICAgIHN3aXRjaCAoYmFuaykgeworICAgICAgICAgICAgY2FzZSBHUDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVsMzIgOiBNb3ZlMzI7CisgICAg
ICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWxlYXNl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW92ZUZsb2F0OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGlzNjRCaXQoKSk7CisgICAgICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAg
ICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBTdG9yZVJl
bDY0IDogTW92ZTsKKyAgICAgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIXJlbGVhc2UpOworICAgICAgICAgICAgICAgIHJldHVybiBNb3ZlRG91YmxlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgQWlyOjpPcGNvZGUg
c3RvcmVPcGNvZGUoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1l
bW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmV0dXJuIHN0b3JlT3Bj
b2RlKG1lbW9yeS0+bG9hZFN0b3JlV2lkdGgoKSwgbWVtb3J5LT5hY2Nlc3NCYW5rKCksIG1lbW9y
eS0+aGFzRmVuY2UoKSk7CisgICAgfQogCiAgICAgSW5zdCBjcmVhdGVTdG9yZShWYWx1ZSogdmFs
dWUsIGNvbnN0IEFyZyYgZGVzdCkKICAgICB7Ci0gICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVPcGNv
ZGUgPSBtb3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgQWlyOjpPcGNvZGUgbW92
ZU9wY29kZSA9IHN0b3JlT3Bjb2RlKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZVN0b3Jl
KG1vdmVPcGNvZGUsIHZhbHVlLCBkZXN0KTsKICAgICB9CiAKQEAgLTEwMDYsNyArMTA1NCw3IEBA
IHByaXZhdGU6CiAgICAgewogICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIGNy
ZWF0ZVN0b3JlKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpKTsKICAgICB9Ci0KKyAgICAK
ICAgICBBaXI6Ok9wY29kZSBtb3ZlRm9yVHlwZShUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKQEAgLTExMjMsNyArMTE3MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50Ogog
ICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6Y2FsbEFyZyh2YWx1ZS5yZXAoKS5vZmZzZXRGcm9t
U1AoKSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kU3RvcmUodmFsdWUudmFsdWUoKSwgYXJnKTsK
KyAgICAgICAgICAgICAgICBhcHBlbmRTdG9yZShtb3ZlRm9yVHlwZSh2YWx1ZS52YWx1ZSgpKSwg
YXJnKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE5NzEsMzAgKzIw
MTksNTAgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
TG9hZDogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBtb3ZlRm9y
VHlwZShtX3ZhbHVlLT50eXBlKCkpLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1
ZSkpKTsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBtX3ZhbHVlLT5hczxNZW1v
cnlWYWx1ZT4oKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IEFpcjo6T29wczsK
KyAgICAgICAgICAgIGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpIHsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKG1lbW9yeS0+dHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAg
ICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gTG9hZEFjcTMyOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgICAgICAg
ICBvcGNvZGUgPSBMb2FkQWNxNjQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG9wY29kZSA9IG1vdmVGb3JU
eXBlKG1lbW9yeS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92
YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
TG9hZDhTOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQ4
U2lnbmVkRXh0ZW5kVG8zMiwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7
CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1
ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3E4U2lnbmVkRXh0ZW5kVG8zMiA6IExvYWQ4U2lnbmVk
RXh0ZW5kVG8zMjsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bj
b2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDhaOiB7Ci0gICAgICAgICAg
ICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQ4LCBtX3ZhbHVlLCBhZGRyKG1fdmFs
dWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG1f
dmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpID8gTG9hZEFjcTggOiBMb2FkODsK
KyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVl
LCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDE2UzogewotICAgICAgICAgICAgYXBwZW5kKHRy
YXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkMTZTaWduZWRFeHRlbmRUbzMyLCBtX3ZhbHVlLCBhZGRy
KG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29k
ZSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpID8gTG9hZEFjcTE2U2ln
bmVkRXh0ZW5kVG8zMiA6IExvYWQxNlNpZ25lZEV4dGVuZFRvMzI7CisgICAgICAgICAgICBhcHBl
bmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwg
dG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIExvYWQxNlo6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1
ZSwgTG9hZDE2LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAg
ICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5o
YXNGZW5jZSgpID8gTG9hZEFjcTE2IDogTG9hZDE2OworICAgICAgICAgICAgYXBwZW5kKHRyYXBw
aW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3Zh
bHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KKyAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFkZDogewogICAgICAgICAgICAgaWYgKHRyeUFwcGVuZExlYSgpKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTIxNjYsNiArMjIzNCwxMSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERl
cGVuZDogeworICAgICAgICAgICAgYXBwZW5kVW5PcDxEZXBlbmQzMiwgRGVwZW5kNjQ+KG1fdmFs
dWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAg
IGNhc2UgU2hsOiB7CiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIo
MSkpIHsKQEAgLTIyNjYsNyArMjMzOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhcHBlbmRTdG9yZSh2YWx1ZVRvU3RvcmUsIGFk
ZHIobV92YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kU3RvcmUobV92YWx1ZSwgYWRkcihtX3Zh
bHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjI4Nyw3ICsyMzYw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZFN0b3JlKEFpcjo6U3RvcmU4
LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kU3RvcmUo
bV92YWx1ZSwgdmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCkBAIC0yMzA4LDcgKzIzODEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYXBwZW5kU3RvcmUoQWlyOjpTdG9yZTE2LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92
YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kU3RvcmUobV92YWx1ZSwgdmFsdWVUb1N0b3JlLCBh
ZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yNzg0
LDYgKzI4NTcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFwcGVuZChBaXI6OkVudHJ5U3dp
dGNoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQXRvbWljV2Vha0NBUzogeworICAgICAgICAgICAgLy8gRklYTUUKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBi
cmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMzAgKzM0LDQ4IEBAIE1lbW9yeVZhbHVlOjp+
TWVtb3J5VmFsdWUoKQogewogfQogCitUeXBlIE1lbW9yeVZhbHVlOjphY2Nlc3NUeXBlKCkgY29u
c3QKK3sKKyAgICBpZiAoaXNMb2FkKG9wY29kZSgpKSkKKyAgICAgICAgcmV0dXJuIHR5cGUoKTsK
KyAgICAvLyBUaGlzIGhhcHBlbnMgdG8gd29yayBmb3IgYXRvbWljcywgdG9vLiBUaGF0J3Mgd2h5
IEF0b21pY1ZhbHVlIGRvZXMgbm90IG5lZWQgdG8gb3ZlcnJpZGUgdGhpcy4KKyAgICByZXR1cm4g
Y2hpbGQoMCktPnR5cGUoKTsKK30KKworQmFuayBNZW1vcnlWYWx1ZTo6YWNjZXNzQmFuaygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGJhbmtGb3JUeXBlKGFjY2Vzc1R5cGUoKSk7Cit9CisKIHNpemVf
dCBNZW1vcnlWYWx1ZTo6YWNjZXNzQnl0ZVNpemUoKSBjb25zdAogeworICAgIHJldHVybiBieXRl
cyhhY2Nlc3NXaWR0aCgpKTsKK30KKworV2lkdGggTWVtb3J5VmFsdWU6OmxvYWRTdG9yZVdpZHRo
KCkgY29uc3QKK3sKICAgICBzd2l0Y2ggKG9wY29kZSgpKSB7CiAgICAgY2FzZSBMb2FkOFo6CiAg
ICAgY2FzZSBMb2FkOFM6CiAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIHJldHVybiAxOworICAg
ICAgICByZXR1cm4gV2lkdGg4OwogICAgIGNhc2UgTG9hZDE2WjoKICAgICBjYXNlIExvYWQxNlM6
CiAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgcmV0dXJuIFdp
ZHRoMTY7CiAgICAgY2FzZSBMb2FkOgotICAgICAgICByZXR1cm4gc2l6ZW9mVHlwZSh0eXBlKCkp
OworICAgICAgICByZXR1cm4gd2lkdGhGb3JUeXBlKHR5cGUoKSk7CiAgICAgY2FzZSBTdG9yZToK
LSAgICAgICAgcmV0dXJuIHNpemVvZlR5cGUoY2hpbGQoMCktPnR5cGUoKSk7CisgICAgICAgIHJl
dHVybiB3aWR0aEZvclR5cGUoY2hpbGQoMCktPnR5cGUoKSk7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBXaWR0aDg7CiAgICAgfQogfQogCiBXaWR0aCBNZW1vcnlWYWx1ZTo6YWNjZXNz
V2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiB3aWR0aEZvckJ5dGVzKGFjY2Vzc0J5dGVTaXpl
KCkpOworICAgIHJldHVybiBsb2FkU3RvcmVXaWR0aCgpOwogfQogCiB2b2lkIE1lbW9yeVZhbHVl
OjpkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdApA
QCAtNjcsNiArODUsOCBAQCB2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXIm
CiAgICAgaWYgKChpc0xvYWQoKSAmJiBlZmZlY3RzKCkucmVhZHMgIT0gcmFuZ2UoKSkKICAgICAg
ICAgfHwgKGlzU3RvcmUoKSAmJiBlZmZlY3RzKCkud3JpdGVzICE9IHJhbmdlKCkpKQogICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJyYW5nZSA9ICIsIHJhbmdlKCkpOworICAgIGlmIChwaGFudG9t
UmFuZ2UoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAicGhhbnRvbVJhbmdlID0gIiwgcGhh
bnRvbVJhbmdlKCkpOwogfQogCiBWYWx1ZSogTWVtb3J5VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0
CkBAIC03NCw2ICs5NCw1OCBAQCBWYWx1ZSogTWVtb3J5VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0
CiAgICAgcmV0dXJuIG5ldyBNZW1vcnlWYWx1ZSgqdGhpcyk7CiB9CiAKKy8vIFVzZSB0aGlzIGZv
cm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMg
dGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKy8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSku
CitNZW1vcnlWYWx1ZTo6TWVtb3J5VmFsdWUoS2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBv
cmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgOiBWYWx1ZShD
aGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgLCBtX29mZnNl
dChvZmZzZXQpCit7CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgc3dpdGNo
IChraW5kLm9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNh
c2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgQVNTRVJUKHR5
cGUgPT0gSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RvcmU4Ogor
ICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICBB
U1NFUlQodHlwZSA9PSBWb2lkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKKy8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBp
bXBsaWVkLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdp
biwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVl
KGtpbmQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCkKK3sKKyAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkgeworICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICAgICAg
Y2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExvYWQxNlo6
CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKKy8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KK01lbW9yeVZhbHVlOjpNZW1vcnlW
YWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50
ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQs
IFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIpCisgICAgLCBtX29mZnNldChvZmZzZXQpCit7
CisgICAgQVNTRVJUKGlzU3RvcmUoa2luZC5vcGNvZGUoKSkpOworfQorCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDQ4ICsyNywxNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzQmFuay5o
IgogI2luY2x1ZGUgIkIzSGVhcFJhbmdlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZS5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotLy8gRklYTUU6IFdlIHdhbnQgdG8gYWxsb3cg
ZmVuY2VkIG1lbW9yeSBhY2Nlc3NlcyBvbiBBUk0uCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyMzQ5Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9y
eVZhbHVlIDogcHVibGljIFZhbHVlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBhY2NlcHRz
KEtpbmQga2luZCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAg
ICAgICBjYXNlIExvYWQ4WjoKLSAgICAgICAgY2FzZSBMb2FkOFM6Ci0gICAgICAgIGNhc2UgTG9h
ZDE2WjoKLSAgICAgICAgY2FzZSBMb2FkMTZTOgotICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAg
IGNhc2UgU3RvcmU4OgotICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIGNhc2UgU3RvcmU6
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzU3Rv
cmUoS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0g
ICAgICAgIGNhc2UgU3RvcmU4OgotICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIGNhc2Ug
U3RvcmU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29s
IGlzTG9hZChLaW5kIGtpbmQpCi0gICAgewotICAgICAgICByZXR1cm4gYWNjZXB0cyhraW5kKSAm
JiAhaXNTdG9yZShraW5kKTsKKyAgICAgICAgcmV0dXJuIGlzTWVtb3J5KGtpbmQub3Bjb2RlKCkp
OwogICAgIH0KIAogICAgIH5NZW1vcnlWYWx1ZSgpOwpAQCAtNzgsNzYgKzQ3LDU2IEBAIHB1Ymxp
YzoKIAogICAgIGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3Jhbmdl
OyB9CiAgICAgdm9pZCBzZXRSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKSB7IG1fcmFuZ2Ug
PSByYW5nZTsgfQorICAgIAorICAgIC8vIFRoaXMgaXMgYW4gYWxpYXMgZm9yIHJhbmdlLgorICAg
IGNvbnN0IEhlYXBSYW5nZSYgYWNjZXNzUmFuZ2UoKSBjb25zdCB7IHJldHVybiByYW5nZSgpOyB9
CisgICAgdm9pZCBzZXRBY2Nlc3NSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKSB7IHNldFJh
bmdlKHJhbmdlKTsgfQorICAgIAorICAgIGNvbnN0IEhlYXBSYW5nZSYgZmVuY2VSYW5nZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmVuY2VSYW5nZTsgfQorICAgIHZvaWQgc2V0RmVuY2VSYW5nZShjb25z
dCBIZWFwUmFuZ2UmIHJhbmdlKSB7IG1fZmVuY2VSYW5nZSA9IHJhbmdlOyB9CisKKyAgICBib29s
IGlzU3RvcmUoKSBjb25zdCB7IHJldHVybiBpc1N0b3JlKG9wY29kZSgpKTsgfQorICAgIGJvb2wg
aXNMb2FkKCkgY29uc3QgeyByZXR1cm4gaXNMb2FkKG9wY29kZSgpKTsgfQogCi0gICAgYm9vbCBp
c1N0b3JlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFZvaWQ7IH0KLSAgICBib29sIGlzTG9h
ZCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSAhPSBWb2lkOyB9CisgICAgYm9vbCBoYXNGZW5jZSgp
IGNvbnN0IHsgcmV0dXJuICEhZmVuY2VSYW5nZSgpOyB9CiAKKyAgICBUeXBlIGFjY2Vzc1R5cGUo
KSBjb25zdDsKKyAgICBCYW5rIGFjY2Vzc0JhbmsoKSBjb25zdDsKICAgICBzaXplX3QgYWNjZXNz
Qnl0ZVNpemUoKSBjb25zdDsKLSAgICBXaWR0aCBhY2Nlc3NXaWR0aCgpIGNvbnN0OworICAgIAor
ICAgIC8vIFNsaWdodGx5IGZhc3RlciB2ZXJzaW9uIG9mIGFjY2Vzc1dpZHRoLCBpZiB5b3Uga25v
dyB0aGF0IHlvdSdyZSB3b3JraW5nIHdpdGggYSBsb2FkIG9yIHN0b3JlLgorICAgIFdpZHRoIGxv
YWRTdG9yZVdpZHRoKCkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCBXaWR0aCBhY2Nlc3NXaWR0
aCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXIm
IGNvbW1hLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZHVtcE1ldGEo
Q29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFZhbHVl
KiBjbG9uZUltcGwoKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOwotCi0gICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBM
b2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhh
dAotICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCi0gICAgTWVtb3J5VmFsdWUo
S2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQz
Ml90IG9mZnNldCA9IDApCi0gICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgdHlw
ZSwgb3JpZ2luLCBwb2ludGVyKQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICBNZW1vcnlWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBLaW5kIGtpbmQsIFR5cGUg
dHlwZSwgT3JpZ2luIG9yaWdpbiwgaW50MzJfdCBvZmZzZXQsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgdHlwZSwgb3JpZ2luLCBh
cmd1bWVudHMuLi4pCiAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAsIG1fcmFu
Z2UoSGVhcFJhbmdlOjp0b3AoKSkKICAgICB7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVE
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgTG9hZDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTG9hZDha
OgotICAgICAgICAgICAgY2FzZSBMb2FkOFM6Ci0gICAgICAgICAgICBjYXNlIExvYWQxNlo6Ci0g
ICAgICAgICAgICBjYXNlIExvYWQxNlM6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0g
SW50MzIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdG9yZTg6
Ci0gICAgICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOgotICAg
ICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICAvLyBVc2Ug
dGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhl
IExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1
cm5lZCB0eXBlKS4KKyAgICBNZW1vcnlWYWx1ZShLaW5kLCBUeXBlLCBPcmlnaW4sIFZhbHVlKiBw
b2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOwogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
bG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCi0gICAgTWVtb3J5VmFsdWUo
S2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQg
PSAwKQotICAgICAgICA6IE1lbW9yeVZhbHVlKGtpbmQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIs
IG9mZnNldCkKLSAgICB7Ci0gICAgfQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFs
dWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CiAKICAgICAvLyBVc2UgdGhpcyBmb3Jt
IGZvciBzdG9yZXMuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAg
IDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRl
cikKLSAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5nZShIZWFwUmFu
Z2U6OnRvcCgpKQotICAgIHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBTdG9yZTg6
Ci0gICAgICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOgotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwg
VmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKTsKKyAgICAK
ICAgICBpbnQzMl90IG1fb2Zmc2V0IHsgMCB9OwotICAgIEhlYXBSYW5nZSBtX3JhbmdlOworICAg
IEhlYXBSYW5nZSBtX3JhbmdlIHsgSGVhcFJhbmdlOjp0b3AoKSB9OworICAgIEhlYXBSYW5nZSBt
X2ZlbmNlUmFuZ2UgeyBIZWFwUmFuZ2UoKSB9OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDcgKzgyLDYgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKICAgICBNb2QsIC8vIEFs
bCBiZXRzIGFyZSBvZmYgYXMgdG8gd2hhdCB3aWxsIGhhcHBlbiB3aGVuIHlvdSBleGVjdXRlIHRo
aXMgZm9yIC0yXjMxJS0xIGFuZCB4JTAuCiAgICAgVU1vZCwKIAotCiAgICAgLy8gUG9seW1vcnBo
aWMgbmVnYXRpb24uIE5vdGUgdGhhdCB3ZSBvbmx5IG5lZWQgdGhpcyBmb3IgZmxvYXRpbmcgcG9p
bnQsIHNpbmNlIGludGVnZXIgbmVnYXRpb24KICAgICAvLyBpcyBleGFjdGx5IGxpa2UgU3ViKDAs
IHgpLiBCdXQgdGhhdCdzIG5vdCB0cnVlIGZvciBmbG9hdGluZyBwb2ludC4gU3ViKDAsIDApIGlz
IDAsIHdoaWxlCiAgICAgLy8gTmVnKDApIGlzIC0wLiBBbHNvLCB3ZSBjYW5vbmljYWxpemUgU3Vi
KDAsIHgpIGludG8gTmVnKHgpIGluIGNhc2Ugb2YgaW50ZWdlcnMuCkBAIC0xNjIsNiArMTYxLDk5
IEBAIGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgU3RvcmUxNiwKICAgICAvLyBUaGlzIGlz
IGEgcG9seW1vcnBoaWMgc3RvcmUgZm9yIEludDMyLCBJbnQ2NCwgRmxvYXQsIGFuZCBEb3VibGUu
CiAgICAgU3RvcmUsCisgICAgCisgICAgLy8gQXRvbWljIGNvbXBhcmUgYW5kIHN3YXAgdGhhdCBy
ZXR1cm5zIGEgYm9vbGVhbi4gTWF5IGNob29zZSB0byBkbyBub3RoaW5nIGFuZCByZXR1cm4gZmFs
c2UuIFlvdSBjYW4KKyAgICAvLyB1c3VhbGx5IGFzc3VtZSB0aGF0IHRoaXMgaXMgZmFzdGVyIGFu
ZCByZXN1bHRzIGluIGxlc3MgY29kZSB0aGFuIEF0b21pY1N0cm9uZ0NBUywgdGhvdWdoIHRoYXQn
cworICAgIC8vIG5vdCBuZWNlc3NhcmlseSB0cnVlIG9uIEludGVsLCBpZiBpbnN0cnVjdGlvbiBz
ZWxlY3Rpb24gZG9lcyBpdHMgam9iLiBJbWFnaW5lIHRoYXQgdGhpcyBvcGNvZGUgaXMKKyAgICAv
LyBhcyBpZiB5b3UgZGlkIHRoaXMgYXRvbWljYWxseToKKyAgICAvLworICAgIC8vIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgLy8gYm9vbCBBdG9taWNXZWFrQ0FTKFQgZXhwZWN0ZWRWYWx1ZSwg
VCBuZXdWYWx1ZSwgVCogcHRyKQorICAgIC8vIHsKKyAgICAvLyAgICAgaWYgKCFyYW5kKCkpCisg
ICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFJlYWwgd29ybGQgZXhhbXBsZSBvZiB0aGlz
OiBjb250ZXh0IHN3aXRjaCBvbiBBUk0gd2hpbGUgZG9pbmcgQ0FTLgorICAgIC8vICAgICBpZiAo
KnB0ciAhPSBleHBlY3RlZFZhbHVlKQorICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IC8vICAgICAqcHRyID0gbmV3VmFsdWU7CisgICAgLy8gICAgIHJldHVybiB0cnVlOworICAgIC8v
IH0KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBhbGwgYXRvbWljcyBwdXQgdGhlIHBvaW50ZXIg
bGFzdCB0byBiZSBjb25zaXN0ZW50IHdpdGggaG93IGxvYWRzIGFuZCBzdG9yZXMgd29yay4gVGhp
cworICAgIC8vIGlzIGEgZ29vZnkgdHJhZGl0aW9uLCBidXQgaXQncyBoYXJtbGVzcywgYW5kIGJl
dHRlciB0aGFuIGJlaW5nIGluY29uc2lzdGVudC4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB3
ZWFrIENBUyBoYXMgbm8gZmVuY2luZyBndWFyYW50ZWVzIHdoZW4gaXQgZmFpbHMuIFRoaXMgbWVh
bnMgdGhhdCB0aGUgZm9sbG93aW5nCisgICAgLy8gdHJhbnNmb3JtYXRpb24gaXMgYWx3YXlzIHZh
bGlkOgorICAgIC8vCisgICAgLy8gQmVmb3JlOgorICAgIC8vCisgICAgLy8gICAgICAgICBCcmFu
Y2goQXRvbWljV2Vha0NBUyhleHBlY3RlZCwgbmV3LCBwdHIpKQorICAgIC8vICAgICAgIFN1Y2Nl
c3NvcnM6IFRoZW46I3N1Y2Nlc3MsIEVsc2U6I2ZhaWwKKyAgICAvLworICAgIC8vIEFmdGVyOgor
ICAgIC8vCisgICAgLy8gICAgICAgICBCcmFuY2goRXF1YWwoTG9hZChwdHIpLCBleHBlY3RlZCkp
CisgICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhlbjojYXR0ZW1wdCwgRWxzZTojZmFpbAorICAg
IC8vICAgICBCQiNhdHRlbXB0OgorICAgIC8vICAgICAgICAgQnJhbmNoKEF0b21pY1dlYWtDQVMo
ZXhwZWN0ZWQsIG5ldywgcHRyKSkKKyAgICAvLyAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiNzdWNj
ZXNzLCBFbHNlOiNmYWlsCisgICAgQXRvbWljV2Vha0NBUywKKyAgICAKKyAgICAvLyBBdG9taWMg
Y29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgdGhlIG9sZCB2YWx1ZS4gRG9lcyBub3QgaGF2
ZSB0aGUgbm9uZGV0ZXJtaW5pc20gb2YgV2Vha0NBUy4KKyAgICAvLyBUaGlzIGlzIGEgYml0IG1v
cmUgY29kZSBhbmQgYSBiaXQgc2xvd2VyIGluIHNvbWUgY2FzZXMsIHRob3VnaCBub3QgYnkgYSBs
b3QuIEltYWdpbmUgdGhhdCB0aGlzCisgICAgLy8gb3Bjb2RlIGlzIGFzIGlmIHlvdSBkaWQgdGhp
cyBhdG9taWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAv
LyBUIEF0b21pY1N0cm9uZ0NBUyhUIGV4cGVjdGVkVmFsdWUsIFQgbmV3VmFsdWUsIFQqIHB0cikK
KyAgICAvLyB7CisgICAgLy8gICAgIFQgb2xkVmFsdWUgPSAqcHRyOworICAgIC8vICAgICBpZiAo
b2xkVmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZSkKKyAgICAvLyAgICAgICAgICpwdHIgPSBuZXdWYWx1
ZTsKKyAgICAvLyAgICAgcmV0dXJuIG9sZFZhbHVlCisgICAgLy8gfQorICAgIC8vCisgICAgLy8g
Tm90ZSB0aGF0IEF0b21pY1dlYWtDQVMgYW5kIEF0b21pY1N0cm9uZ0NBUyBzb3J0IG9mIGhhdmUg
dGhpcyBraW5kIG9mIGVxdWl2YWxlbmNlOgorICAgIC8vCisgICAgLy8gQXRvbWljV2Vha0NBUyhA
ZXhwLCBAbmV3LCBAcHRyKSA9PSBFcXVhbChBdG9taWNTdHJvbmdDQVMoQGV4cCwgQG5ldywgQHB0
ciksIEBleHApCisgICAgLy8KKyAgICAvLyBBc3N1bWluZyB0aGF0IHRoZSBXZWFrQ0FTIGRvZXMg
bm90IHNwdXJpb3VzbHkgZmFpbCwgb2YgY291cnNlLgorICAgIEF0b21pY1N0cm9uZ0NBUywKKyAg
ICAKKyAgICAvLyBBdG9taWNhbGx5IF9fXyBhIG1lbW9yeSBsb2NhdGlvbiBhbmQgcmV0dXJuIHRo
ZSBvbGQgdmFsdWUuIFN5bnRheDoKKyAgICAvLworICAgIC8vIEBvbGRWYWx1ZSA9IEF0b21pY1hj
aGdfX18oQG9wZXJhbmQsIEBwdHIpCisgICAgQXRvbWljWGNoZ0FkZCwKKyAgICBBdG9taWNYY2hn
QW5kLAorICAgIEF0b21pY1hjaGdPciwKKyAgICBBdG9taWNYY2hnU3ViLAorICAgIEF0b21pY1hj
aGdYb3IsCisgICAgCisgICAgLy8gQXRvbWljYWxseSBleGNoYW5nZSBhIHZhbHVlIHdpdGggYSBt
ZW1vcnkgbG9jYXRpb24uIFN5bnRheDoKKyAgICAvLworICAgIC8vIEBvbGRWYWx1ZSA9IEF0b21p
Y1hjaGcoQG5ld1ZhbHVlLCBAcHRyKQorICAgIEF0b21pY1hjaGcsCisgICAgCisgICAgLy8gSW50
cm9kdWNlIGFuIGludmlzaWJsZSBkZXBlbmRlbmN5IGZvciBibG9ja2luZyBtb3Rpb24gb2YgbG9h
ZHMgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3RoZXIuIFN5bnRheDoKKyAgICAvLworICAgIC8vIEBy
ZXN1bHQgPSBEZXBlbmQoQHBoYW50b20pCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIGV2ZW50dWFs
bHkgY29kZWdlbmVyYXRlZCB0byBoYXZlIGxvY2FsIHNlbWFudGljcyBhcyBpZiB3ZSBkaWQ6Cisg
ICAgLy8KKyAgICAvLyBAcmVzdWx0ID0gJDAKKyAgICAvLworICAgIC8vIEJ1dCBpdCBlbnN1cmVz
IHRoYXQgdGhlIHVzZXJzIG9mIEByZXN1bHQgY2Fubm90IGV4ZWN1dGUgdW50aWwgQHBoYW50b20g
aXMgY29tcHV0ZWQuCisgICAgLy8KKyAgICAvLyBUaGUgY29tcGlsZXIgaXMgbm90IGFsbG93ZWQg
dG8gcmVhc29uIGFib3V0IHRoZSBmYWN0IHRoYXQgRGVwZW5kIGNvZGVnZW5lcmF0ZXMgdGhpcyB3
YXkuIEFueSBraW5kCisgICAgLy8gb2YgdHJhbnNmb3JtYXRpb24gb3IgYW5hbHlzaXMgdGhhdCBy
ZWxpZXMgb24gdGhlIGluc2lnaHQgdGhhdCBEZXBlbmQgaXMgcmVhbGx5IHplcm8gaXMgdW5zb3Vu
ZCwKKyAgICAvLyBiZWNhdXNlIGl0IHVubG9ja3MgcmVvcmRlcmluZyBvZiB1c2VycyBvZiBAcmVz
dWx0IGFuZCBAcGhhbnRvbS4KKyAgICAvLworICAgIC8vIE9uIFg4NiwgdGhpcyBpcyBsb3dlcmVk
IHRvIGEgbG9hZC1sb2FkIGZlbmNlIGFuZCBAcmVzdWx0IHVzZXMgQHBoYW50b20gZGlyZWN0bHku
CisgICAgLy8KKyAgICAvLyBPbiBBUk0sIHRoaXMgaXMgbG93ZXJlZCBhcyBpZiBsaWtlOgorICAg
IC8vCisgICAgLy8gQHJlc3VsdCA9IEJpdFhvcihAcGhhbnRvbSwgQHBoYW50b20pCisgICAgLy8K
KyAgICAvLyBFeGNlcHQgdGhhdCB0aGUgY29tcGlsZXIgbmV2ZXIgZ2V0cyBhbiBvcHBvcnR1bml0
eSB0byBzaW1wbGlmeSBvdXQgdGhlIEJpdFhvci4KKyAgICBEZXBlbmQsCiAKICAgICAvLyBUaGlz
IGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsIGFkZHJlc3Mgb2YgYSBXYXNtIG1lbW9yeSBv
cGVyYXRpb24uIEl0IHRha2VzIGFuIEludFB0cgogICAgIC8vIGFuZCBhIHBpbm5lZCByZWdpc3Rl
ciB0aGVuIGNvbXB1dGVzIHRoZSBhcHByb3ByaWF0ZSBJbnRQdHIgYWRkcmVzcy4gRm9yIHRoZSB1
c2UtY2FzZSBvZgpAQCAtMzAxLDYgKzM5Myw3MSBAQCBpbmxpbmUgYm9vbCBpc0RlZmluaXRlbHlU
ZXJtaW5hbChPcGNvZGUgCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBpc0xvYWQoT3Bjb2RlIG9w
Y29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgTG9hZDhaOgorICAgIGNh
c2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2WjoKKyAgICBjYXNlIExvYWQxNlM6CisgICAgY2Fz
ZSBMb2FkOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc1N0b3JlKE9wY29kZSBvcGNvZGUp
Cit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIFN0b3JlODoKKyAgICBjYXNlIFN0
b3JlMTY6CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNMb2Fk
U3RvcmUoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2Ug
TG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2WjoKKyAgICBjYXNlIExv
YWQxNlM6CisgICAgY2FzZSBMb2FkOgorICAgIGNhc2UgU3RvcmU4OgorICAgIGNhc2UgU3RvcmUx
NjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0F0b21pYyhP
cGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBBdG9taWNX
ZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgIGNhc2UgQXRvbWljWGNoZ0Fk
ZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAg
Y2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0
b21pY1hjaGc6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzTWVtb3J5QWNjZXNzKE9wY29k
ZSBvcGNvZGUpCit7CisgICAgcmV0dXJuIGlzQXRvbWljKG9wY29kZSkgfHwgaXNMb2FkU3RvcmUo
b3Bjb2RlKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVzcGFjZSBXVEYg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTcsNiArMTE3LDcgQEAgcHVibGljOgogICAgIFZhbHVlKiBhZGRJbnRDb25z
dGFudChPcmlnaW4sIFR5cGUsIGludDY0X3QgdmFsdWUpOwogICAgIFZhbHVlKiBhZGRJbnRDb25z
dGFudChWYWx1ZSosIGludDY0X3QgdmFsdWUpOwogCisgICAgLy8gWW91J3JlIGd1YXJhbnRlZWQg
dGhhdCBib3R0b20gaXMgemVyby4KICAgICBWYWx1ZSogYWRkQm90dG9tKE9yaWdpbiwgVHlwZSk7
CiAgICAgVmFsdWUqIGFkZEJvdHRvbShWYWx1ZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw2ICszNDYs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVu
KCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwog
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIExvYWQ6CkBAIC0zNTMsNiArMzU0LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQg
IiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50
eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgdmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRh
dGVTdGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIFN0b3JlODoKQEAgLTM2Miw2ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZh
bHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkg
PT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgdmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFj
a0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IFN0b3JlOgpAQCAtMzY5LDggKzM3Miw0OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlw
ZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50
eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0
ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVl
KTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXRvbWljV2Vha0NB
UzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxk
cmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDEpLT50eXBl
KCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFs
dWUtPmNoaWxkKDApLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT5jaGlsZCgyKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOworICAg
ICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDMsICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2
YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpLCAoIkF0
ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT50eXBl
KCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5j
aGlsZCgyKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlk
YXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnQW5kOgor
ICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hj
aGdTdWI6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgICAgICAgICBjYXNl
IEF0b21pY1hjaGc6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaXND
aGlsbCgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVl
LT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+dHlwZSgp
KSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hp
bGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIHZhbGlkYXRlQXRvbWljKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0
ZVN0YWNrQWNjZXNzKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgRGVwZW5kOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmhh
c0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+
dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgV2FzbUFkZHJlc3M6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVl
LT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsK
QEAgLTUzNyw2ICs1ODEsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGVGZW5jZShWYWx1ZSogdmFsdWUpCisg
ICAgeworICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVl
PigpOworICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKQorICAgICAgICAgICAgVkFMSURB
VEUobWVtb3J0eS0+YWNjZXNzQmFuaygpID09IEdQLCAoIkZlbmNlIGF0ICIsICptZW1vcnkpKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZUF0b21pYyhWYWx1ZSogdmFsdWUpCisgICAg
eworICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigp
OworICAgICAgICAKKyAgICAgICAgVkFMSURBVEUoYmVzdFR5cGUoYXRvbWljLT5vcGVyYXRpb25X
aWR0aCgpKSA9PSBhdG9taWMtPm9wZXJhdGlvblR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICB9CiAKICAgICB2b2lkIHZhbGlkYXRlU3RhY2tBY2Nlc3MoVmFsdWUqIHZhbHVlKQogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTg5LDYgKzU4OSw3IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgIGNh
c2UgQmVsb3dFcXVhbDoKICAgICBjYXNlIEVxdWFsT3JVbm9yZGVyZWQ6CiAgICAgY2FzZSBTZWxl
Y3Q6CisgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRGl2OgogICAg
IGNhc2UgVURpdjoKQEAgLTYwMCwxNiArNjAxLDQ0IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMo
KSBjb25zdAogICAgIGNhc2UgTG9hZDhTOgogICAgIGNhc2UgTG9hZDE2WjoKICAgICBjYXNlIExv
YWQxNlM6Ci0gICAgY2FzZSBMb2FkOgotICAgICAgICByZXN1bHQucmVhZHMgPSBhczxNZW1vcnlW
YWx1ZT4oKS0+cmFuZ2UoKTsKKyAgICBjYXNlIExvYWQ6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUq
IG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICByZXN1bHQucmVhZHMgPSBtZW1v
cnktPnJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPnBoYW50b21SYW5nZSgpKSB7CisgICAg
ICAgICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5waGFudG9tUmFuZ2UoKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgcmVzdWx0LmNvbnRy
b2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBTdG9y
ZTg6CiAgICAgY2FzZSBTdG9yZTE2OgotICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgIHJlc3VsdC53
cml0ZXMgPSBhczxNZW1vcnlWYWx1ZT4oKS0+cmFuZ2UoKTsKKyAgICBjYXNlIFN0b3JlOiB7Cisg
ICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBhczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAg
cmVzdWx0LndyaXRlcyA9IG1lbW9yeS0+cmFuZ2UoKTsKKyAgICAgICAgaWYgKG1lbW9yeS0+cGhh
bnRvbVJhbmdlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+cGhhbnRv
bVJhbmdlKCk7CisgICAgICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoK
KyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNh
c2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21p
Y1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hnOiB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSBhczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5
LT5yYW5nZSgpIHwgbWVtb3J5LT5waGFudG9tUmFuZ2UoKTsKKyAgICAgICAgcmVzdWx0LndyaXRl
cyA9IG1lbW9yeS0+cmFuZ2UoKSB8IG1lbW9ydHktPnBoYW50b21SYW5nZSgpOworICAgICAgICBp
ZiAobWVtb3J5LT5waGFudG9tUmFuZ2UoKSkKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRy
dWU7CiAgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CisgICAgfQogICAgIGNhc2UgV2FzbUFkZHJlc3M6CiAgICAgICAgIHJlc3VsdC5yZWFkc1Bp
bm5lZCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwpAQCAtNjE3LDE4ICs2NDYsNyBAQCBFZmZlY3Rz
IFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICAgICAgY29uc3QgRmVuY2VWYWx1ZSogZmVuY2Ug
PSBhczxGZW5jZVZhbHVlPigpOwogICAgICAgICByZXN1bHQucmVhZHMgPSBmZW5jZS0+cmVhZDsK
ICAgICAgICAgcmVzdWx0LndyaXRlcyA9IGZlbmNlLT53cml0ZTsKLSAgICAgICAgCi0gICAgICAg
IC8vIFByZXZlbnQga2lsbGluZyBvZiBmZW5jZXMgdGhhdCBjbGFpbSBub3QgdG8gd3JpdGUgYW55
dGhpbmcuIEl0J3MgYSBiaXQgd2VpcmQgdGhhdCB3ZSB1c2UKLSAgICAgICAgLy8gbG9jYWwgc3Rh
dGUgYXMgdGhlIHdheSB0byBkbyB0aGlzLCBidXQgaXQgaGFwcGVucyB0byB3b3JrOiB3ZSBtdXN0
IGFzc3VtZSB0aGF0IHdlIGNhbm5vdAotICAgICAgICAvLyBraWxsIHdyaXRlc0xvY2FsU3RhdGUg
dW5sZXNzIHdlIHVuZGVyc3RhbmRzIGV4YWN0bHkgd2hhdCB0aGUgaW5zdHJ1Y3Rpb24gaXMgZG9p
bmcgKGxpa2UKLSAgICAgICAgLy8gdGhlIHdheSB0aGF0IGZpeFNTQSB1bmRlcnN0YW5kcyBTZXQv
R2V0IGFuZCB0aGUgd2F5IHRoYXQgcmVkdWNlU3RyZW5ndGggYW5kIG90aGVycwotICAgICAgICAv
LyB1bmRlcnN0YW5kIFVwc2lsb24pLiBUaGlzIHdvdWxkIG9ubHkgYmVjb21lIGEgcHJvYmxlbSBp
ZiB3ZSBoYWQgc29tZSBhbmFseXNpcyB0aGF0IHdhcwotICAgICAgICAvLyBsb29raW5nIHRvIHVz
ZSB0aGUgd3JpdGVzTG9jYWxTdGF0ZSBiaXQgdG8gaW52YWxpZGF0ZSBhIENTRSBvdmVyIGxvY2Fs
IHN0YXRlIG9wZXJhdGlvbnMuCi0gICAgICAgIC8vIFRoZW4gYSBGZW5jZSB3b3VsZCBsb29rIGJs
b2NrLCBzYXksIHRoZSBlbGltaW5hdGlvbiBvZiBhIHJlZHVuZGFudCBHZXQuIEJ1dCBpdCBsaWtl
Ci0gICAgICAgIC8vIHRoYXQncyBub3QgYXQgYWxsIGhvdyBvdXIgb3B0aW1pemF0aW9ucyBmb3Ig
U2V0L0dldC9VcHNpbG9uL1BoaSB3b3JrIC0gdGhleSBncm9rIHRoZWlyCi0gICAgICAgIC8vIG9w
ZXJhdGlvbnMgZGVlcGx5IGVub3VnaCB0aGF0IHRoZXkgaGF2ZSBubyBuZWVkIHRvIGNoZWNrIHRo
aXMgYml0IC0gc28gdGhpcyBjaGVhdCBpcwotICAgICAgICAvLyBmaW5lLgotICAgICAgICByZXN1
bHQud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CisgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENDYWxsOgpAQCAtNjk0LDYgKzcxMiw3
IEBAIFZhbHVlS2V5IFZhbHVlOjprZXkoKSBjb25zdAogICAgIGNhc2UgQ2hlY2s6CiAgICAgY2Fz
ZSBCaXR3aXNlQ2FzdDoKICAgICBjYXNlIE5lZzoKKyAgICBjYXNlIERlcGVuZDoKICAgICAgICAg
cmV0dXJuIFZhbHVlS2V5KGtpbmQoKSwgdHlwZSgpLCBjaGlsZCgwKSk7CiAgICAgY2FzZSBBZGQ6
CiAgICAgY2FzZSBTdWI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlz
aW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNyw2ICsxMDcsOCBAQCBwdWJsaWM6CiAgICAgLy8gdmFsdWVzIHdpdGgg
SWRlbnRpdGllcyBvbiBib3R0b20gY29uc3RhbnRzLiBGb3IgdGhpcyByZWFzb24sIHRoaXMgdGFr
ZXMgYSBjYWxsYmFjayB0aGF0IGlzCiAgICAgLy8gcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGJv
dHRvbXMuIFRoZXJlJ3MgYSB1dGlsaXR5IGZvciB0aGlzLCBzZWUgQjNCb3R0b21Qcm92aWRlci5o
LiBZb3UKICAgICAvLyBjYW4gYWxzbyBhY2Nlc3MgdGhhdCB1dGlsaXR5IHVzaW5nIHJlcGxhY2VX
aXRoQm90dG9tKEluc2VydGlvblNldCYsIHNpemVfdCkuCisgICAgLy8KKyAgICAvLyBZb3UncmUg
Z3VhcmFudGVlZCB0aGF0IGJvdHRvbSBpcyB6ZXJvLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJv
dHRvbVByb3ZpZGVyPgogICAgIHZvaWQgcmVwbGFjZVdpdGhCb3R0b20oY29uc3QgQm90dG9tUHJv
dmlkZXImKTsKICAgICAKQEAgLTMyMSw2ICszMjMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IElUb0Y6CiAgICAgICAgIGNhc2UgQml0d2lzZUNhc3Q6CiAgICAgICAgIGNhc2UgQnJhbmNoOgor
ICAgICAgICBjYXNlIERlcGVuZDoKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShudW1BcmdzICE9
IDEpKQogICAgICAgICAgICAgICAgIGJhZEtpbmQoa2luZCwgbnVtQXJncyk7CiAgICAgICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5jcHAJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsMzggQEAKIAogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgogCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVHlwZSBiZXN0VHlwZShCYW5r
IGJhbmssIFdpZHRoIHdpZHRoKQoreworICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICBjYXNlIFdp
ZHRoODoKKyAgICBjYXNlIFdpZHRoMTY6CisgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICBzd2l0
Y2ggKGJhbmspIHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBJbnQzMjsK
KyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBGbG9hdDsKKyAgICAgICAgfQor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVm9p
ZDsKKyAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgIHN3aXRjaCAoYmFuaykgeworICAgICAgICBj
YXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIEludDY0OworICAgICAgICBjYXNlIEZQOgorICAg
ICAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVm9pZDsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVm9pZDsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKIG5hbWVzcGFjZSBXVEYgewogCiB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgSlNDOjpCMzo6V2lkdGggd2lkdGgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1dpZHRoLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1dpZHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDggQEAgaW5saW5l
IFdpZHRoIHdpZHRoRm9yVHlwZShUeXBlIHR5cGUpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKK1R5cGUgYmVzdFR5cGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0aCk7CisKIGlubGluZSBX
aWR0aCBjb25zZXJ2YXRpdmVXaWR0aChCYW5rIGJhbmspCiB7CiAgICAgcmV0dXJuIGJhbmsgPT0g
R1AgPyBwb2ludGVyV2lkdGgoKSA6IFdpZHRoNjQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
NjgsMjggKzY2OCwzNDcgQEAgTG9hZDggVTpHOjgsIFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAg
ICBJbmRleCwgVG1wCiAKK0xvYWRBY3E4IFU6Rzo4LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisg
ICAgSW5kZXgsIFRtcAorCiBTdG9yZTggVTpHOjgsIEQ6Rzo4CiAgICAgVG1wLCBJbmRleAogICAg
IFRtcCwgQWRkcgogICAgIHg4NjogSW1tLCBJbmRleAogICAgIHg4NjogSW1tLCBBZGRyCiAKK1N0
b3JlUmVsOCBVOkc6OCwgRDpHOjgKKyAgICBUbXAsIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAg
eDg2OiBJbW0sIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKwogTG9hZDhTaWduZWRFeHRlbmRU
bzMyIFU6Rzo4LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2Fk
QWNxOFNpZ25lZEV4dGVuZFRvMzIgVTpHOjgsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJ
bmRleCwgVG1wCisKIExvYWQxNiBVOkc6MTYsIFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJ
bmRleCwgVG1wCiAKK0xvYWRBY3ExNiBVOkc6MTYsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAg
ICBJbmRleCwgVG1wCisKIExvYWQxNlNpZ25lZEV4dGVuZFRvMzIgVTpHOjE2LCBaRDpHOjMyCiAg
ICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxMTZTaWduZWRFeHRlbmRUbzMy
IFU6RzoxNiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogU3RvcmUx
NiBVOkc6MTYsIEQ6RzoxNgogICAgIFRtcCwgSW5kZXgKICAgICBUbXAsIEFkZHIKIAorU3RvcmVB
Y3ExNiBVOkc6MTYsIEQ6RzoxNgorICAgIFRtcCwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKworTG9h
ZEFjcTMyIFU6RzozMiBaRDpHOjMyCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBJ
bmRleCwgVG1wCisKK1N0b3JlUmVsMzIgVTpHOjMyIFpEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKwor
NjQ6IExvYWRBY3E2NCBVOkc6NjQgWkQ6Rzo2NAorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1w
CisgICAgSW5kZXgsIFRtcAorCis2NDogU3RvcmVSZWw2NCBVOkc6NjQgWkQ6Rzo2NAorICAgIFRt
cCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKyAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1t
LCBJbmRleAorCisjIFRoZSBmaXJzdCBvcGVyYW5kIGlzIHJheC4KK3g4NjogTG9ja0NtcFhjaGc4
IFVEOkc6OCBVRDpHOjggVTpHOjgKKyAgICBUbXAqLCBBZGRyLCBUbXAKKyAgICBUbXAqLCBJbmRl
eCwgVG1wCisKK3g4NjogTG9ja0NtcFhjaGcxNiBVRDpHOjE2IFVEOkc6MTYgVTpHOjMyCisgICAg
VG1wKiwgQWRkciwgVG1wCisgICAgVG1wKiwgSW5kZXgsIFRtcAorCit4ODY6IExvY2tDbXBYY2hn
MzIgVUQ6RzozMiBVRDpHOjMyIFU6RzozMgorICAgIFRtcCosIEFkZHIsIFRtcAorICAgIFRtcCos
IEluZGV4LCBUbXAKKworeDg2XzY0OiBMb2NrQ21wWGNoZzY0IFVEOkc6NjQgVUQ6Rzo2NCBVOkc6
NjQKKyAgICBUbXAqLCBBZGRyLCBUbXAKKyAgICBUbXAqLCBJbmRleCwgVG1wCisKK3g4NjogTG9j
a0FkZDggVTpHOjggVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRt
cCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrQWRkMTYgVTpHOjE2IFVEOkc6MTYK
KyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJ
bmRleAorCit4ODY6IExvY2tBZGQzMiBVOkc6MzIgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAg
IEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9j
a0FkZDY0IFU6Rzo2NCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAg
IFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrU3ViOCBVOkc6OCBVRDpHOjgK
KyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJ
bmRleAorCit4ODY6IExvY2tTdWIxNiBVOkc6MTYgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAg
IEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1N1
YjMyIFU6RzozMiBVRDpHOjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRt
cCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBMb2NrU3ViNjQgVTpHOjY0IFVEOkc6
NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1w
LCBJbmRleAorCit4ODY6IExvY2tBbmQ4IFU6Rzo4IFVEOkc6OAorICAgIEltbSwgQWRkcgorICAg
IEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja0Fu
ZDE2IFU6RzoxNiBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRt
cCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrQW5kMzIgVTpHOjMyIFVEOkc6MzIK
KyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJ
bmRleAorCit4ODZfNjQ6IExvY2tBbmQ2NCBVOkc6NjQgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgor
ICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9j
a09yOCBVOkc6OCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1w
LCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tPcjE2IFU6RzoxNiBVRDpHOjE2Cisg
ICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5k
ZXgKKworeDg2OiBMb2NrT3IzMiBVOkc6MzIgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIElt
bSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9ja09y
NjQgVTpHOjY0IFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1w
LCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tYb3I4IFU6Rzo4IFVEOkc6OAorICAg
IEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4
CisKK3g4NjogTG9ja1hvcjE2IFU6RzoxNiBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1t
LCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrWG9yMzIg
VTpHOjMyIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IExvY2tYb3I2NCBVOkc6NjQgVUQ6Rzo2NAor
ICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIElu
ZGV4CisKK3g4NjogTG9ja05lZzggVUQ6Rzo4CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4Njog
TG9ja05lZzE2IFVEOkc6MTYKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBMb2NrTmVnMzIg
VUQ6RzozMgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODZfNjQ6IExvY2tOZWc2NCBVRDpHOjY0
CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogTG9ja05vdDggVUQ6Rzo4CisgICAgQWRkcgor
ICAgIEluZGV4CisKK3g4NjogTG9ja05vdDE2IFVEOkc6MTYKKyAgICBBZGRyCisgICAgSW5kZXgK
KworeDg2OiBMb2NrTm90MzIgVUQ6RzozMgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODZfNjQ6
IExvY2tOb3Q2NCBVRDpHOjY0CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogTG9ja1hBZGQ4
IFVEOkc6OCBVRDpHOjgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9j
a1hBZGQxNiBVRDpHOjE2IFVEOkc6MTYKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisK
K3g4NjogTG9ja1hBZGQzMiBVRDpHOjMyIFVEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAs
IEluZGV4CisKK3g4Nl82NDogTG9ja1hBZGQ2NCBVRDpHOjY0IFVEOkc6NjQKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hjaGc4IFVEOkc6OCBVRDpHOjgKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hjaGcxNiBVRDpHOjE2IFVEOkc6
MTYKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hjaGczMiBVRDpH
OjMyIFVEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9j
a1hjaGc2NCBVRDpHOjY0IFVEOkc6NjQKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisK
K2FybTY0OiBMb2FkTGluazggVTpHOjggWkQ6Rzo4CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgs
IFRtcAorCithcm02NDogTG9hZExpbmtBY3E4IFU6Rzo4IFpEOkc6OAorICAgIEFkZHIsIFRtcAor
ICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZDggVTpHOjggRDpHOjggWkQ6Rzo4Cisg
ICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29u
ZFJlbDggVTpHOjggRDpHOjggWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIElu
ZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rMTYgVTpHOjE2IFpEOkc6MTYKKyAgICBBZGRyLCBU
bXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTE2IFU6RzoxNiBaRDpHOjE2
CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kMTYgVTpH
OjE2IEQ6RzoxNiBaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRt
cAorCithcm02NDogU3RvcmVDb25kUmVsMTYgVTpHOjE2IEQ6RzoxNiBaRDpHOjgKKyAgICBUbXAs
IEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmszMiBVOkc6
MzIgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRM
aW5rQWNxMzIgVTpHOjMyIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisK
K2FybTY0OiBTdG9yZUNvbmQzMiBVOkc6MzIgRDpHOjMyIFpEOkc6OAorICAgIFRtcCwgQWRkciwg
VG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmRSZWwzMiBVOkc6MzIg
RDpHOjMyIFpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisK
K2FybTY0OiBMb2FkTGluazY0IFU6Rzo2NCBaRDpHOjY0CisgICAgQWRkciwgVG1wCisgICAgSW5k
ZXgsIFRtcAorCithcm02NDogTG9hZExpbmtBY3E2NCBVOkc6NjQgWkQ6Rzo2NAorICAgIEFkZHIs
IFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZDY0IFU6Rzo2NCBEOkc6NjQg
WkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6
IFN0b3JlQ29uZFJlbDY0IFU6Rzo2NCBEOkc6NjQgWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAK
KyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IERlcGVuZDMyIFU6RzozMiBEOkc6MzIKKyAg
ICBUbXAsIFRtcAorCithcm02NDogRGVwZW5kNjQgVTpHOjY0IEQ6Rzo2NAorICAgIFRtcCwgVG1w
CisKIENvbXBhcmUzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCiAgICAgUmVsQ29u
ZCwgVG1wLCBUbXAsIFRtcAogICAgIFJlbENvbmQsIFRtcCwgSW1tLCBUbXAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302763</attachid>
            <date>2017-02-25 14:20:45 -0800</date>
            <delta_ts>2017-02-26 09:17:54 -0800</delta_ts>
            <desc>starting to work on isel for CAS</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>53984</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBdG9t
aWNWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK0F0b21pY1ZhbHVlOjp+QXRvbWljVmFsdWUoKQoreworfQorCitXaWR0aCBB
dG9taWNWYWx1ZTo6YWNjZXNzV2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3dpZHRoOwor
fQorCit2b2lkIEF0b21pY1ZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChjb21tYSwgIndpZHRoID0gIiwg
bV93aWR0aCk7CisgICAgCisgICAgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKGNvbW1hLCBvdXQpOwor
fQorCitWYWx1ZSogQXRvbWljVmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG5ldyBBdG9taWNWYWx1ZSgqdGhpcyk7Cit9CisKK0F0b21pY1ZhbHVlOjpBdG9taWNWYWx1ZShL
aW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFdpZHRoIHdpZHRoLCBWYWx1ZSogb3BlcmFuZCwgVmFs
dWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNr
ZWRPcGNvZGUsIGtpbmQsIG9wZXJhbmQtPnR5cGUoKSwgb3JpZ2luLCBvZmZzZXQsIG9wZXJhbmQs
IHBvaW50ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIHNldEZlbmNlUmFuZ2UoSGVh
cFJhbmdlOjp0b3AoKSk7CisgICAgCisgICAgQVNTRVJUKGJlc3RUeXBlKG9wZXJhdGlvbldpZHRo
KCkpID09IG9wZXJhdGlvblR5cGUoKSk7CisgICAgCisgICAgc3dpdGNoIChraW5kLm9wY29kZSgp
KSB7CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAg
ICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBB
dG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitBdG9t
aWNWYWx1ZTo6QXRvbWljVmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBXaWR0aCB3aWR0
aCwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBuZXdWYWx1ZSwgVmFsdWUqIHBvaW50ZXIs
IGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGUsIGtp
bmQsIGtpbmQub3Bjb2RlKCkgPT0gQXRvbWljV2Vha0NBUyA/IEludDMyIDogZXhwZWN0ZWRWYWx1
ZS0+dHlwZSgpLCBvcmlnaW4sIG9mZnNldCwgZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUsIHBvaW50
ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIHNldEZlbmNlUmFuZ2UoSGVhcFJhbmdl
Ojp0b3AoKSk7CisgICAgCisgICAgQVNTRVJUKGJlc3RUeXBlKG9wZXJhdGlvbldpZHRoKCkpID09
IG9wZXJhdGlvblR5cGUoKSk7CisKKyAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICBj
YXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIzV2lkdGguaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEF0b21p
Y1ZhbHVlIDogcHVibGljIE1lbW9yeVZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBh
Y2NlcHRzKEtpbmQga2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0F0b21pYyhraW5kLm9w
Y29kZSgpKTsKKyAgICB9CisgICAgCisgICAgfkF0b21pY1ZhbHVlKCk7CisgICAgCisgICAgVHlw
ZSBvcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gY2hpbGQoMCktPnR5cGUoKTsgfQorICAg
IAorICAgIFdpZHRoIG9wZXJhdGlvbldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQor
ICAgIAorICAgIC8vIFN5bm9ueW0gZm9yIHdpZHRoKCksIGlmIHlvdSdyZSBhY2Nlc3Npbmcgdmlh
IE1lbW9yeVZhbHVlLgorICAgIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIFZhbHVlKiBjbG9uZUltcGwoKSBjb25z
dCBvdmVycmlkZTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
KyAgICAKKyAgICBBdG9taWNWYWx1ZShLaW5kLCBPcmlnaW4sIFdpZHRoLCBWYWx1ZSogb3BlcmFu
ZCwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CisgICAgCisgICAgQXRvbWlj
VmFsdWUoS2luZCwgT3JpZ2luLCBXaWR0aCwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBu
ZXdWYWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CisgICAgCisgICAg
V2lkdGggbV93aWR0aDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZm
ZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0
cy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vm
ZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw4IEBAIGJvb2wgRWZmZWN0czo6
aW50ZXJmZXJlcyhjb25zdCBFZmZlY3RzJiAKICAgICAgICAgfHwgaW50ZXJmZXJlc1dpdGhXcml0
ZXNQaW5uZWQob3RoZXIsICp0aGlzKQogICAgICAgICB8fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIu
d3JpdGVzKQogICAgICAgICB8fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIucmVhZHMpCi0gICAgICAg
IHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcyk7CisgICAgICAgIHx8IHJlYWRzLm92ZXJs
YXBzKG90aGVyLndyaXRlcykKKyAgICAgICAgfHwgKGZlbmNlICYmIG90aGVyLmZlbmNlKTsKIH0K
IAogYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0IEVmZmVjdHMmIG90aGVyKSBjb25zdApA
QCAtOTUsNyArOTYsOCBAQCBib29sIEVmZmVjdHM6Om9wZXJhdG9yPT0oY29uc3QgRWZmZWN0cyYg
CiAgICAgICAgICYmIHdyaXRlc1Bpbm5lZCA9PSBvdGhlci53cml0ZXNQaW5uZWQKICAgICAgICAg
JiYgcmVhZHNQaW5uZWQgPT0gb3RoZXIucmVhZHNQaW5uZWQKICAgICAgICAgJiYgd3JpdGVzID09
IG90aGVyLndyaXRlcwotICAgICAgICAmJiByZWFkcyA9PSBvdGhlci5yZWFkczsKKyAgICAgICAg
JiYgcmVhZHMgPT0gb3RoZXIucmVhZHMKKyAgICAgICAgJiYgZmVuY2UgPT0gb3RoZXIuZmVuY2U7
CiB9CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3IhPShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29u
c3QKQEAgLTEyMCw2ICsxMjIsOCBAQCB2b2lkIEVmZmVjdHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlc1Bpbm5lZCIpOwogICAgIGlm
IChyZWFkc1Bpbm5lZCkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiUmVhZHNQaW5uZWQiKTsK
KyAgICBpZiAoZmVuY2UpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIkZlbmNlIik7CiAgICAg
aWYgKHdyaXRlcykKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiV3JpdGVzOiIsIHdyaXRlcyk7
CiAgICAgaWYgKHJlYWRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBAQCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzE3MwogICAgIGJv
b2wgcmVhZHNQaW5uZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgd3JpdGVzUGlubmVkIHsgZmFsc2Ug
fTsKKyAgICAKKyAgICAvLyBNZW1vcnkgZmVuY2VzIGNhbm5vdCBiZSByZW9yZGVyZWQgYXJvdW5k
IGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVpciBlZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQK
KyAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEgbWVtb3J5IGZlbmNlLgorICAgIGJvb2wgZmVu
Y2UgeyBmYWxzZSB9OwogCiAgICAgSGVhcFJhbmdlIHdyaXRlczsKICAgICBIZWFwUmFuZ2UgcmVh
ZHM7CkBAIC04OSw2ICs5Myw3IEBAIHN0cnVjdCBFZmZlY3RzIHsKICAgICAgICAgcmVzdWx0LnJl
YWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKICAgICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1
ZTsKICAgICAgICAgcmVzdWx0LndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIHJlc3VsdC5m
ZW5jZSA9IHRydWU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0xMDMsNyAr
MTA4LDcgQEAgc3RydWN0IEVmZmVjdHMgewogCiAgICAgYm9vbCBtdXN0RXhlY3V0ZSgpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gdGVybWluYWwgfHwgZXhpdHNTaWRld2F5cyB8fCB3cml0
ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQaW5uZWQ7CisgICAgICAgIHJldHVybiB0
ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRlc0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8
IHdyaXRlc1Bpbm5lZCB8fCBmZW5jZTsKICAgICB9CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
cmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0aGVzZSByZXNwZWN0aXZlIGVmZmVjdHMgd291
bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1p
bmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1
YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDIsNiArMTQyLDcgQEAgc3RydWN0IElt
cHVyZUJsb2NrRGF0YSB7CiAKICAgICBSYW5nZVNldDxIZWFwUmFuZ2U+IHJlYWRzOyAvLyBUaGlz
IG9ubHkgZ2V0cyB1c2VkIGZvciBmb3J3YXJkIHN0b3JlIGVsaW1pbmF0aW9uLgogICAgIFJhbmdl
U2V0PEhlYXBSYW5nZT4gd3JpdGVzOyAvLyBUaGlzIGdldHMgdXNlZCBmb3IgYm90aCBsb2FkIGFu
ZCBzdG9yZSBlbGltaW5hdGlvbi4KKyAgICBib29sIGZlbmNlOwogCiAgICAgTWVtb3J5VmFsdWVN
YXAgc3RvcmVzQXRIZWFkOwogICAgIE1lbW9yeVZhbHVlTWFwIG1lbW9yeVZhbHVlc0F0VGFpbDsK
QEAgLTE3NCwxMiArMTc1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAobWVtb3J5ICYmIG1lbW9yeS0+aXNTdG9yZSgpCiAgICAgICAgICAgICAgICAg
ICAgICYmICFkYXRhLnJlYWRzLm92ZXJsYXBzKG1lbW9yeS0+cmFuZ2UoKSkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgIWRhdGEud3JpdGVzLm92ZXJsYXBzKG1lbW9yeS0+cmFuZ2UoKSkpCisgICAg
ICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRlcy5vdmVybGFwcyhtZW1vcnktPnJhbmdlKCkp
CisgICAgICAgICAgICAgICAgICAgICYmICghZGF0YS5mZW5jZSB8fCAhbWVtb3J5LT5oYXNGZW5j
ZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5zdG9yZXNBdEhlYWQuYWRkKG1lbW9yeSk7
CiAgICAgICAgICAgICAgICAgZGF0YS5yZWFkcy5hZGQoZWZmZWN0cy5yZWFkcyk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9IGVmZmVjdHMud3JpdGVzKQogICAgICAg
ICAgICAgICAgICAgICBjbG9iYmVyKGRhdGEsIHdyaXRlcyk7CisgICAgICAgICAgICAgICAgZGF0
YS5mZW5jZSB8PSBlZmZlY3RzLmZlbmNlOwogCiAgICAgICAgICAgICAgICAgaWYgKG1lbW9yeSkK
ICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuYWRkKG1lbW9yeSk7
CkBAIC00NzgsNiArNDgxLDkgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0
ZXI+CiAgICAgYm9vbCBmaW5kU3RvcmVBZnRlckNsb2JiZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdl
IHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICB7CisgICAgICAgIGlmIChtX3ZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBlbGltaW5hdGUgYSBzdG9yZSBpZiBldmVy
eSBmb3J3YXJkIHBhdGggaGl0cyBhIHN0b3JlIHRvIHRoZSBzYW1lIGxvY2F0aW9uIGJlZm9yZQog
ICAgICAgICAvLyBoaXR0aW5nIGFueSBvcGVyYXRpb24gdGhhdCBvYnNlcnZlcyB0aGUgc3RvcmUu
IFRoaXMgc2VhcmNoIHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlCiAgICAgICAgIC8vIGV4cGVuc2l2
ZSwgYnV0IGluIHRoZSBvdmVyd2hlbG1pbmcgbWFqb3JpdHkgb2YgY2FzZXMgaXQgd2lsbCBhbG1v
c3QgaW1tZWRpYXRlbHkgaGl0IGFuIApAQCAtNjE0LDYgKzYyMCwxMiBAQCBwcml2YXRlOgogICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coKm1fdmFsdWUsICI6IGxvb2tp
bmcgYmFja3dhcmQgZm9yICIsICpwdHIsICIuLi5cbiIpOwogICAgICAgICAKKyAgICAgICAgaWYg
KG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpKSB7CisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgR2l2aW5nIHVwIGJlY2F1
c2UgZmVuY2VzLlxuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSogbWF0Y2ggPSBtX2RhdGEubWVtb3J5VmFs
dWVzQXRUYWlsLmZpbmQocHRyLCBmaWx0ZXIpKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRm91bmQgIiwgKm1hdGNoLCAiIGxvY2FsbHku
XG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZpc2lv
biAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtODgsNiArODgsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CiAgICAgfQogICAgIAorICAgIEhlYXBSYW5nZSBvcGVyYXRvcnwoY29u
c3QgSGVhcFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBIZWFwUmFu
Z2UoCisgICAgICAgICAgICBzdGQ6Om1pbihtX2JlZ2luLCBvdGhlci5tX2JlZ2luKSwKKyAgICAg
ICAgICAgIHN0ZDo6bWF4KG1fZW5kLCBvdGhlci5tX2VuZCkpOworICAgIH0KKyAgICAKICAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsg
fQogCiAgICAgdW5zaWduZWQgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAy
MTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xODUsNiArMTg1LDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAg
ICAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEg
bG9hZC1sb2FkIGZlbmNlLiBUaGlzIGNvZGVnZW5zIHRvIG5vdGhpbmcgb24gWDg2LiBXZSB1c2Ug
aXQgdG8gdGVsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcGlsZXIgbm90IHRvIGJs
b2NrIGxvYWQgbW90aW9uLgorICAgICAgICAgICAgICAgICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxGZW5jZVZhbHVlPihtX2luZGV4LCBtX29yaWdpbik7Cisg
ICAgICAgICAgICAgICAgICAgIGZlbmNlLT5yZWFkID0gSGVhcFJhbmdlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGZlbmNlLT53cml0ZSA9IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBLaWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNo
b3VsZCB1bmxvY2sgYSBidW5jaCBvZiBjb2RlIHNpbXBsaWZpY2F0aW9uLgorICAgICAgICAgICAg
ICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoQm90dG9tKG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxNCBAQCBuYW1lc3BhY2UgewogCiBjb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKIAorLy8gRklYTUU6IFdlIHdvdWxkbid0IG5lZWQgdGhpcyBpZiBB
aXIgc3VwcG9ydGVkIFdpZHRoIG1vZGlmaWVycyBpbiBBaXI6OktpbmQuCisvLyBPT1BTISEhIChu
ZWVkIGEgYnVnIFVSTCkKKyNkZWZpbmUgT1BDT0RFX0ZPUl9XSURUSChvcGNvZGUsIHdpZHRoKSAo
IFwKKyAgICAod2lkdGgpID09IFdpZHRoOCA/IG9wY29kZSAjIyA4IDogXAorICAgICh3aWR0aCkg
PT0gV2lkdGgxNiA/IG9wY29kZSAjIyAxNiA6IFwKKyAgICAod2lkdGgpID09IFdpZHRoMzIgPyBv
cGNvZGUgIyMgMzIgOiBcCisgICAgb3Bjb2RlICMjIDY0KQorCiBjbGFzcyBMb3dlclRvQWlyIHsK
IHB1YmxpYzoKICAgICBMb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQpAQCAtNTM4LDcg
KzU0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7CiAKICAgICAgICAg
aW50MzJfdCBvZmZzZXQgPSB2YWx1ZS0+b2Zmc2V0KCk7Ci0gICAgICAgIFdpZHRoIHdpZHRoID0g
dmFsdWUtPmFjY2Vzc1dpZHRoKCk7CisgICAgICAgIFdpZHRoIHdpZHRoID0gdmFsdWUtPmxvYWRT
dG9yZVdpZHRoKCk7CiAKICAgICAgICAgQXJnIHJlc3VsdCA9IGVmZmVjdGl2ZUFkZHIodmFsdWUt
Pmxhc3RDaGlsZCgpLCBvZmZzZXQsIHdpZHRoKTsKICAgICAgICAgQVNTRVJUKHJlc3VsdC5pc1Zh
bGlkRm9ybSh3aWR0aCkpOwpAQCAtNTYyLDExICs1NzAsMTYgQEAgcHJpdmF0ZToKICAgICAKICAg
ICBBcmdQcm9taXNlIGxvYWRQcm9taXNlQW55T3Bjb2RlKFZhbHVlKiBsb2FkVmFsdWUpCiAgICAg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2FkVmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpKTsK
ICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKGxvYWRWYWx1ZSkpCiAgICAgICAgICAgICByZXR1
cm4gQXJnKCk7CiAgICAgICAgIGlmIChjcm9zc2VzSW50ZXJmZXJlbmNlKGxvYWRWYWx1ZSkpCiAg
ICAgICAgICAgICByZXR1cm4gQXJnKCk7Ci0gICAgICAgIEFyZ1Byb21pc2UgcmVzdWx0KGFkZHIo
bG9hZFZhbHVlKSwgbG9hZFZhbHVlKTsKKyAgICAgICAgaWYgKGxvYWRWYWx1ZS0+YXM8TWVtb3J5
VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgICAg
IEFyZyBsb2FkQWRkciA9IGFkZHIobG9hZFZhbHVlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bG9hZEFkZHIpOworICAgICAgICBBcmdQcm9taXNlIHJlc3VsdChsb2FkQWRkciwgbG9hZFZhbHVl
KTsKICAgICAgICAgaWYgKGxvYWRWYWx1ZS0+dHJhcHMoKSkKICAgICAgICAgICAgIHJlc3VsdC5z
ZXRUcmFwcyh0cnVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTkzMSwxMCArOTQ0LDE1
IEBAIHByaXZhdGU6CiAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZTMyLCBBaXI6Ok9wY29kZSBv
cGNvZGU2NCwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU+CiAg
ICAgYm9vbCB0cnlBcHBlbmRTdG9yZUJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCiAg
ICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSk7
CisgICAgICAgIAogICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNvZGVGb3JUeXBl
KG9wY29kZTMyLCBvcGNvZGU2NCwgbGVmdC0+dHlwZSgpKTsKICAgICAgICAgaWYgKG9wY29kZSA9
PSBBaXI6Ok9vcHMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAorICAgICAg
ICBpZiAobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAogICAgICAgICBBcmcgc3RvcmVBZGRyID0gYWRkciht
X3ZhbHVlKTsKICAgICAgICAgQVNTRVJUKHN0b3JlQWRkcik7CiAKQEAgLTk5NCwxMCArMTAxMiw0
OCBAQCBwcml2YXRlOgogCiAgICAgICAgIHJldHVybiBJbnN0KG1vdmUsIG1fdmFsdWUsIHRtcCh2
YWx1ZSksIGRlc3QpOwogICAgIH0KKyAgICAKKyAgICBBaXI6Ok9wY29kZSBzdG9yZU9wY29kZShX
aWR0aCB3aWR0aCwgQmFuayBiYW5rLCBib29sIHJlbGVhc2UpCisgICAgeworICAgICAgICBzd2l0
Y2ggKHdpZHRoKSB7CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoYmFuayA9PSBHUCk7CisgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVs
OCA6IFN0b3JlODsKKyAgICAgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoYmFuayA9PSBHUCk7CisgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVs
MTYgOiBTdG9yZTE2OworICAgICAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgICAgICBzd2l0Y2gg
KGJhbmspIHsKKyAgICAgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
bGVhc2UgPyBTdG9yZVJlbDMyIDogTW92ZTMyOworICAgICAgICAgICAgY2FzZSBGUDoKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVsZWFzZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIE1vdmVGbG9hdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpczY0Qml0KCkpOwor
ICAgICAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgICAgICBjYXNlIEdQOgorICAgICAg
ICAgICAgICAgIHJldHVybiByZWxlYXNlID8gU3RvcmVSZWw2NCA6IE1vdmU7CisgICAgICAgICAg
ICBjYXNlIEZQOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWxlYXNlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTW92ZURvdWJsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlKFZhbHVlKiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5
VmFsdWU+KCk7CisgICAgICAgIHJldHVybiBzdG9yZU9wY29kZShtZW1vcnktPmxvYWRTdG9yZVdp
ZHRoKCksIG1lbW9yeS0+YWNjZXNzQmFuaygpLCBtZW1vcnktPmhhc0ZlbmNlKCkpOworICAgIH0K
IAogICAgIEluc3QgY3JlYXRlU3RvcmUoVmFsdWUqIHZhbHVlLCBjb25zdCBBcmcmIGRlc3QpCiAg
ICAgewotICAgICAgICBBaXI6Ok9wY29kZSBtb3ZlT3Bjb2RlID0gbW92ZUZvclR5cGUodmFsdWUt
PnR5cGUoKSk7CisgICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVPcGNvZGUgPSBzdG9yZU9wY29kZSh2
YWx1ZSk7CiAgICAgICAgIHJldHVybiBjcmVhdGVTdG9yZShtb3ZlT3Bjb2RlLCB2YWx1ZSwgZGVz
dCk7CiAgICAgfQogCkBAIC0xMDA2LDcgKzEwNjIsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAg
ICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBjcmVhdGVTdG9yZShzdGQ6OmZvcndhcmQ8
QXJncz4oYXJncykuLi4pKSk7CiAgICAgfQotCisgICAgCiAgICAgQWlyOjpPcGNvZGUgbW92ZUZv
clR5cGUoVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xMTIz
LDcgKzExNzksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKICAgICAgICAgICAgICAgICBhcmcgPSBB
cmc6OmNhbGxBcmcodmFsdWUucmVwKCkub2Zmc2V0RnJvbVNQKCkpOwotICAgICAgICAgICAgICAg
IGFwcGVuZFN0b3JlKHZhbHVlLnZhbHVlKCksIGFyZyk7CisgICAgICAgICAgICAgICAgYXBwZW5k
U3RvcmUobW92ZUZvclR5cGUodmFsdWUudmFsdWUoKSksIGFyZyk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xOTcxLDMwICsyMDI3LDUwIEBAIHByaXZhdGU6CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExvYWQ6IHsKLSAgICAgICAgICAgIGFw
cGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgbW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwg
bV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBNZW1v
cnlWYWx1ZSogbWVtb3J5ID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgICAg
ICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBBaXI6Ok9vcHM7CisgICAgICAgICAgICBpZiAobWVtb3J5
LT5oYXNGZW5jZSgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtZW1vcnktPnR5cGUoKSkg
eworICAgICAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgICAgIG9wY29k
ZSA9IExvYWRBY3EzMjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gTG9hZEFjcTY0Owor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBvcGNvZGUgPSBtb3ZlRm9yVHlwZShtZW1vcnktPnR5cGUoKSk7Cisg
ICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwg
YWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExvYWQ4UzogewotICAgICAgICAgICAg
YXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIG1fdmFs
dWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNv
ZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2Fk
QWNxOFNpZ25lZEV4dGVuZFRvMzIgOiBMb2FkOFNpZ25lZEV4dGVuZFRvMzI7CisgICAgICAgICAg
ICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3Zh
bHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIExvYWQ4WjogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdCht
X3ZhbHVlLCBMb2FkOCwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7Cisg
ICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4o
KS0+aGFzRmVuY2UoKSA/IExvYWRBY3E4IDogTG9hZDg7CisgICAgICAgICAgICBhcHBlbmQodHJh
cHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1f
dmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IExvYWQxNlM6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9h
ZDE2U2lnbmVkRXh0ZW5kVG8zMiwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUp
KSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlW
YWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIgOiBMb2FkMTZT
aWduZWRFeHRlbmRUbzMyOworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVl
LCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBMb2FkMTZaOiB7Ci0gICAg
ICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQxNiwgbV92YWx1ZSwgYWRk
cihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNv
ZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3ExNiA6
IExvYWQxNjsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2Rl
LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotCisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBZGQ6IHsKICAg
ICAgICAgICAgIGlmICh0cnlBcHBlbmRMZWEoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkBA
IC0yMTY2LDYgKzIyNDIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5j
aGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEZXBlbmQ6IHsKKyAgICAgICAgICAgIGFw
cGVuZFVuT3A8RGVwZW5kMzIsIERlcGVuZDY0PihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICBjYXNlIFNobDogewogICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7CkBAIC0yMjY2LDcgKzIzNDcs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgYXBwZW5kU3RvcmUodmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAgICAgICAg
ICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUsIGFkZHIobV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKQEAgLTIyODcsNyArMjM2OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBhcHBlbmRTdG9yZShBaXI6OlN0b3JlOCwgdmFsdWVUb1N0b3JlLCBhZGRyKG1f
dmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUsIHZhbHVlVG9TdG9yZSwg
YWRkcihtX3ZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjMw
OCw3ICsyMzg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZFN0b3JlKEFp
cjo6U3RvcmUxNiwgdmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFw
cGVuZFN0b3JlKG1fdmFsdWUsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjc4NCw2ICsyODY1LDIwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBhcHBlbmQoQWlyOjpFbnRyeVN3aXRjaCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1dlYWtDQVM6
IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiB2YWx1ZSA9IG1fdmFsdWUtPmFzPEF0b21pY1Zh
bHVlPigpOworI2lmIENQVShYODZfNjQpCisgICAgICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJl
Z2lzdGVyczo6ZWF4KTsKKyAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUodmFs
dWUtPm9wZXJhdGlvblR5cGUoKSksIGltbU9yVG1wKHZhbHVlLT5jaGlsZCgwKSksIGVheCk7Cisg
ICAgICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChMb2NrQ21wWGNoZywgdmFsdWUtPm9w
ZXJhdGlvbldpZHRoKCkpLCBlYXgsIHRtcCh2YWx1ZS0+Y2hpbGQoMSkpLCBhZGRyKHZhbHVlKSwg
dG1wKHZhbHVlKSk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgICAgICAgICAvLyBGSVhNRTogTmVl
ZCB0byBiZSBhYmxlIHRvIGJyZWFrIHRoZSBiYXNpYyBibG9jaworI2Vsc2UKKyNlcnJvciAiQmFk
IGFyY2hpdGVjdHVyZSIKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCwzMCArMzQsNDggQEAgTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgpCiB7CiB9CiAKK1R5
cGUgTWVtb3J5VmFsdWU6OmFjY2Vzc1R5cGUoKSBjb25zdAoreworICAgIGlmIChpc0xvYWQob3Bj
b2RlKCkpKQorICAgICAgICByZXR1cm4gdHlwZSgpOworICAgIC8vIFRoaXMgaGFwcGVucyB0byB3
b3JrIGZvciBhdG9taWNzLCB0b28uIFRoYXQncyB3aHkgQXRvbWljVmFsdWUgZG9lcyBub3QgbmVl
ZCB0byBvdmVycmlkZSB0aGlzLgorICAgIHJldHVybiBjaGlsZCgwKS0+dHlwZSgpOworfQorCitC
YW5rIE1lbW9yeVZhbHVlOjphY2Nlc3NCYW5rKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYmFua0Zv
clR5cGUoYWNjZXNzVHlwZSgpKTsKK30KKwogc2l6ZV90IE1lbW9yeVZhbHVlOjphY2Nlc3NCeXRl
U2l6ZSgpIGNvbnN0CiB7CisgICAgcmV0dXJuIGJ5dGVzKGFjY2Vzc1dpZHRoKCkpOworfQorCitX
aWR0aCBNZW1vcnlWYWx1ZTo6bG9hZFN0b3JlV2lkdGgoKSBjb25zdAorewogICAgIHN3aXRjaCAo
b3Bjb2RlKCkpIHsKICAgICBjYXNlIExvYWQ4WjoKICAgICBjYXNlIExvYWQ4UzoKICAgICBjYXNl
IFN0b3JlODoKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiBXaWR0aDg7CiAgICAg
Y2FzZSBMb2FkMTZaOgogICAgIGNhc2UgTG9hZDE2UzoKICAgICBjYXNlIFN0b3JlMTY6Ci0gICAg
ICAgIHJldHVybiAyOworICAgICAgICByZXR1cm4gV2lkdGgxNjsKICAgICBjYXNlIExvYWQ6Ci0g
ICAgICAgIHJldHVybiBzaXplb2ZUeXBlKHR5cGUoKSk7CisgICAgICAgIHJldHVybiB3aWR0aEZv
clR5cGUodHlwZSgpKTsKICAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXR1cm4gc2l6ZW9mVHlw
ZShjaGlsZCgwKS0+dHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlwZShjaGlsZCgw
KS0+dHlwZSgpKTsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIFdpZHRoODsKICAgICB9
CiB9CiAKIFdpZHRoIE1lbW9yeVZhbHVlOjphY2Nlc3NXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHdpZHRoRm9yQnl0ZXMoYWNjZXNzQnl0ZVNpemUoKSk7CisgICAgcmV0dXJuIGxvYWRTdG9y
ZVdpZHRoKCk7CiB9CiAKIHZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYg
Y29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC02Nyw2ICs4NSw4IEBAIHZvaWQgTWVt
b3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYKICAgICBpZiAoKGlzTG9hZCgpICYmIGVm
ZmVjdHMoKS5yZWFkcyAhPSByYW5nZSgpKQogICAgICAgICB8fCAoaXNTdG9yZSgpICYmIGVmZmVj
dHMoKS53cml0ZXMgIT0gcmFuZ2UoKSkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgInJhbmdl
ID0gIiwgcmFuZ2UoKSk7CisgICAgaWYgKHBoYW50b21SYW5nZSgpKQorICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJwaGFudG9tUmFuZ2UgPSAiLCBwaGFudG9tUmFuZ2UoKSk7CiB9CiAKIFZhbHVl
KiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKQEAgLTc0LDYgKzk0LDU4IEBAIFZhbHVl
KiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKICAgICByZXR1cm4gbmV3IE1lbW9yeVZh
bHVlKCp0aGlzKTsKIH0KIAorLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2Fk
OFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAor
Ly8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KK01lbW9yeVZhbHVlOjpNZW1vcnlWYWx1
ZShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGlu
dDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUs
IG9yaWdpbiwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkgeworICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICAg
ICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZDhaOgor
ICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBjYXNl
IExvYWQxNlM6CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAg
ICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
bG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCitNZW1vcnlWYWx1ZTo6TWVt
b3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIDogTWVtb3J5VmFsdWUoa2luZCwgSW50MzIsIG9yaWdpbiwgcG9p
bnRlciwgb2Zmc2V0KQoreworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIHN3
aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2Fz
ZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9ybSBm
b3Igc3RvcmVzLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQor
ICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9p
bnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAgICBBU1NFUlQoaXNTdG9yZShraW5k
Lm9wY29kZSgpKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiAjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFs
dWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVt
b3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNDggKzI3LDE3IEBACiAKICNpZiBFTkFC
TEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNCYW5rLmgiCiAjaW5jbHVkZSAiQjNIZWFwUmFuZ2Uu
aCIKICNpbmNsdWRlICJCM1ZhbHVlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
ewogCi0vLyBGSVhNRTogV2Ugd2FudCB0byBhbGxvdyBmZW5jZWQgbWVtb3J5IGFjY2Vzc2VzIG9u
IEFSTS4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzNDkK
LQogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgewog
cHVibGljOgogICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQogICAgIHsKLSAgICAg
ICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9hZDhaOgotICAgICAg
ICBjYXNlIExvYWQ4UzoKLSAgICAgICAgY2FzZSBMb2FkMTZaOgotICAgICAgICBjYXNlIExvYWQx
NlM6Ci0gICAgICAgIGNhc2UgTG9hZDoKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNh
c2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaXNTdG9yZShLaW5kIGtpbmQpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAg
ICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaXNMb2FkKEtpbmQga2luZCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhY2NlcHRzKGtpbmQpICYmICFpc1N0b3JlKGtpbmQpOworICAgICAg
ICByZXR1cm4gaXNNZW1vcnkoa2luZC5vcGNvZGUoKSk7CiAgICAgfQogCiAgICAgfk1lbW9yeVZh
bHVlKCk7CkBAIC03OCw3NiArNDcsNTYgQEAgcHVibGljOgogCiAgICAgY29uc3QgSGVhcFJhbmdl
JiByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KICAgICB2b2lkIHNldFJhbmdlKGNv
bnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9yYW5nZSA9IHJhbmdlOyB9CisgICAgCisgICAgLy8g
VGhpcyBpcyBhbiBhbGlhcyBmb3IgcmFuZ2UuCisgICAgY29uc3QgSGVhcFJhbmdlJiBhY2Nlc3NS
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIHJhbmdlKCk7IH0KKyAgICB2b2lkIHNldEFjY2Vzc1Jhbmdl
KGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgc2V0UmFuZ2UocmFuZ2UpOyB9CisgICAgCisgICAg
Y29uc3QgSGVhcFJhbmdlJiBmZW5jZVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9mZW5jZVJhbmdl
OyB9CisgICAgdm9pZCBzZXRGZW5jZVJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9m
ZW5jZVJhbmdlID0gcmFuZ2U7IH0KKworICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJu
IGlzU3RvcmUob3Bjb2RlKCkpOyB9CisgICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7IHJldHVybiBp
c0xvYWQob3Bjb2RlKCkpOyB9CiAKLSAgICBib29sIGlzU3RvcmUoKSBjb25zdCB7IHJldHVybiB0
eXBlKCkgPT0gVm9pZDsgfQotICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyByZXR1cm4gdHlwZSgp
ICE9IFZvaWQ7IH0KKyAgICBib29sIGhhc0ZlbmNlKCkgY29uc3QgeyByZXR1cm4gISFmZW5jZVJh
bmdlKCk7IH0KIAorICAgIFR5cGUgYWNjZXNzVHlwZSgpIGNvbnN0OworICAgIEJhbmsgYWNjZXNz
QmFuaygpIGNvbnN0OwogICAgIHNpemVfdCBhY2Nlc3NCeXRlU2l6ZSgpIGNvbnN0OwotICAgIFdp
ZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2xpZ2h0bHkgZmFzdGVyIHZl
cnNpb24gb2YgYWNjZXNzV2lkdGgsIGlmIHlvdSBrbm93IHRoYXQgeW91J3JlIHdvcmtpbmcgd2l0
aCBhIGxvYWQgb3Igc3RvcmUuCisgICAgV2lkdGggbG9hZFN0b3JlV2lkdGgoKSBjb25zdDsKKyAg
ICAKKyAgICB2aXJ0dWFsIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoK
LSAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJy
aWRlOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7Ci0KLSAgICAvLyBV
c2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2Yg
dGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0Ci0gICAgLy8gZGVzY3JpYmVzIHRoZSBy
ZXR1cm5lZCB0eXBlKS4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAg
OiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIE1lbW9yeVZhbHVlKENo
ZWNrZWRPcGNvZGVUYWcsIEtpbmQga2luZCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBpbnQz
Ml90IG9mZnNldCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVj
a2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAgICAgICAgLCBt
X29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6OnRvcCgpKQogICAg
IHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAo
a2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBMb2FkOgotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMb2FkOFo6Ci0gICAgICAgICAgICBjYXNlIExvYWQ4
UzoKLSAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKLSAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoK
LSAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgICAgIGNhc2UgU3RvcmUx
NjoKLSAgICAgICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUg
PT0gVm9pZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9CiAgICAgfQorICAgIAorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBu
b3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4
IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgorICAgIE1lbW9yeVZh
bHVlKEtpbmQsIFR5cGUsIE9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0g
MCk7CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5
cGUgaXMgaW1wbGllZC4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDogTWVtb3J5VmFs
dWUoa2luZCwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KQotICAgIHsKLSAgICB9Cisg
ICAgTWVtb3J5VmFsdWUoS2luZCwgT3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZz
ZXQgPSAwKTsKIAogICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KLSAgICBNZW1vcnlW
YWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50
ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBr
aW5kLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQotICAgICAgICAsIG1fb2Zmc2V0KG9m
ZnNldCkKLSAgICAgICAgLCBtX3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCi0gICAgewotICAgICAg
ICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgc3dpdGNoIChraW5kLm9wY29k
ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgICAgIGNhc2UgU3RvcmUx
NjoKLSAgICAgICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
CisgICAgTWVtb3J5VmFsdWUoS2luZCwgT3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2lu
dGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAgIAogICAgIGludDMyX3QgbV9vZmZzZXQgeyAw
IH07Ci0gICAgSGVhcFJhbmdlIG1fcmFuZ2U7CisgICAgSGVhcFJhbmdlIG1fcmFuZ2UgeyBIZWFw
UmFuZ2U6OnRvcCgpIH07CisgICAgSGVhcFJhbmdlIG1fZmVuY2VSYW5nZSB7IEhlYXBSYW5nZSgp
IH07CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNiBAQCBlbnVtIE9w
Y29kZSA6IGludDE2X3QgewogICAgIE1vZCwgLy8gQWxsIGJldHMgYXJlIG9mZiBhcyB0byB3aGF0
IHdpbGwgaGFwcGVuIHdoZW4geW91IGV4ZWN1dGUgdGhpcyBmb3IgLTJeMzElLTEgYW5kIHglMC4K
ICAgICBVTW9kLAogCi0KICAgICAvLyBQb2x5bW9ycGhpYyBuZWdhdGlvbi4gTm90ZSB0aGF0IHdl
IG9ubHkgbmVlZCB0aGlzIGZvciBmbG9hdGluZyBwb2ludCwgc2luY2UgaW50ZWdlciBuZWdhdGlv
bgogICAgIC8vIGlzIGV4YWN0bHkgbGlrZSBTdWIoMCwgeCkuIEJ1dCB0aGF0J3Mgbm90IHRydWUg
Zm9yIGZsb2F0aW5nIHBvaW50LiBTdWIoMCwgMCkgaXMgMCwgd2hpbGUKICAgICAvLyBOZWcoMCkg
aXMgLTAuIEFsc28sIHdlIGNhbm9uaWNhbGl6ZSBTdWIoMCwgeCkgaW50byBOZWcoeCkgaW4gY2Fz
ZSBvZiBpbnRlZ2Vycy4KQEAgLTE2Miw2ICsxNjEsOTkgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90
IHsKICAgICBTdG9yZTE2LAogICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9yZSBmb3Ig
SW50MzIsIEludDY0LCBGbG9hdCwgYW5kIERvdWJsZS4KICAgICBTdG9yZSwKKyAgICAKKyAgICAv
LyBBdG9taWMgY29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgYSBib29sZWFuLiBNYXkgY2hv
b3NlIHRvIGRvIG5vdGhpbmcgYW5kIHJldHVybiBmYWxzZS4gWW91IGNhbgorICAgIC8vIHVzdWFs
bHkgYXNzdW1lIHRoYXQgdGhpcyBpcyBmYXN0ZXIgYW5kIHJlc3VsdHMgaW4gbGVzcyBjb2RlIHRo
YW4gQXRvbWljU3Ryb25nQ0FTLCB0aG91Z2ggdGhhdCdzCisgICAgLy8gbm90IG5lY2Vzc2FyaWx5
IHRydWUgb24gSW50ZWwsIGlmIGluc3RydWN0aW9uIHNlbGVjdGlvbiBkb2VzIGl0cyBqb2IuIElt
YWdpbmUgdGhhdCB0aGlzIG9wY29kZSBpcworICAgIC8vIGFzIGlmIHlvdSBkaWQgdGhpcyBhdG9t
aWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAvLyBib29s
IEF0b21pY1dlYWtDQVMoVCBleHBlY3RlZFZhbHVlLCBUIG5ld1ZhbHVlLCBUKiBwdHIpCisgICAg
Ly8geworICAgIC8vICAgICBpZiAoIXJhbmQoKSkKKyAgICAvLyAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gUmVhbCB3b3JsZCBleGFtcGxlIG9mIHRoaXM6IGNvbnRleHQgc3dpdGNoIG9uIEFSTSB3
aGlsZSBkb2luZyBDQVMuCisgICAgLy8gICAgIGlmICgqcHRyICE9IGV4cGVjdGVkVmFsdWUpCisg
ICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gICAgICpwdHIgPSBuZXdWYWx1ZTsK
KyAgICAvLyAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gfQorICAgIC8vCisgICAgLy8gTm90ZSB0
aGF0IGFsbCBhdG9taWNzIHB1dCB0aGUgcG9pbnRlciBsYXN0IHRvIGJlIGNvbnNpc3RlbnQgd2l0
aCBob3cgbG9hZHMgYW5kIHN0b3JlcyB3b3JrLiBUaGlzCisgICAgLy8gaXMgYSBnb29meSB0cmFk
aXRpb24sIGJ1dCBpdCdzIGhhcm1sZXNzLCBhbmQgYmV0dGVyIHRoYW4gYmVpbmcgaW5jb25zaXN0
ZW50LgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHdlYWsgQ0FTIGhhcyBubyBmZW5jaW5nIGd1
YXJhbnRlZXMgd2hlbiBpdCBmYWlscy4gVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcKKyAg
ICAvLyB0cmFuc2Zvcm1hdGlvbiBpcyBhbHdheXMgdmFsaWQ6CisgICAgLy8KKyAgICAvLyBCZWZv
cmU6CisgICAgLy8KKyAgICAvLyAgICAgICAgIEJyYW5jaChBdG9taWNXZWFrQ0FTKGV4cGVjdGVk
LCBuZXcsIHB0cikpCisgICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhlbjojc3VjY2VzcywgRWxz
ZTojZmFpbAorICAgIC8vCisgICAgLy8gQWZ0ZXI6CisgICAgLy8KKyAgICAvLyAgICAgICAgIEJy
YW5jaChFcXVhbChMb2FkKHB0ciksIGV4cGVjdGVkKSkKKyAgICAvLyAgICAgICBTdWNjZXNzb3Jz
OiBUaGVuOiNhdHRlbXB0LCBFbHNlOiNmYWlsCisgICAgLy8gICAgIEJCI2F0dGVtcHQ6CisgICAg
Ly8gICAgICAgICBCcmFuY2goQXRvbWljV2Vha0NBUyhleHBlY3RlZCwgbmV3LCBwdHIpKQorICAg
IC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I3N1Y2Nlc3MsIEVsc2U6I2ZhaWwKKyAgICBBdG9t
aWNXZWFrQ0FTLAorICAgIAorICAgIC8vIEF0b21pYyBjb21wYXJlIGFuZCBzd2FwIHRoYXQgcmV0
dXJucyB0aGUgb2xkIHZhbHVlLiBEb2VzIG5vdCBoYXZlIHRoZSBub25kZXRlcm1pbmlzbSBvZiBX
ZWFrQ0FTLgorICAgIC8vIFRoaXMgaXMgYSBiaXQgbW9yZSBjb2RlIGFuZCBhIGJpdCBzbG93ZXIg
aW4gc29tZSBjYXNlcywgdGhvdWdoIG5vdCBieSBhIGxvdC4gSW1hZ2luZSB0aGF0IHRoaXMKKyAg
ICAvLyBvcGNvZGUgaXMgYXMgaWYgeW91IGRpZCB0aGlzIGF0b21pY2FsbHk6CisgICAgLy8KKyAg
ICAvLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIC8vIFQgQXRvbWljU3Ryb25nQ0FTKFQgZXhw
ZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSwgVCogcHRyKQorICAgIC8vIHsKKyAgICAvLyAgICAgVCBv
bGRWYWx1ZSA9ICpwdHI7CisgICAgLy8gICAgIGlmIChvbGRWYWx1ZSA9PSBleHBlY3RlZFZhbHVl
KQorICAgIC8vICAgICAgICAgKnB0ciA9IG5ld1ZhbHVlOworICAgIC8vICAgICByZXR1cm4gb2xk
VmFsdWUKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgQXRvbWljV2Vha0NBUyBh
bmQgQXRvbWljU3Ryb25nQ0FTIHNvcnQgb2YgaGF2ZSB0aGlzIGtpbmQgb2YgZXF1aXZhbGVuY2U6
CisgICAgLy8KKyAgICAvLyBBdG9taWNXZWFrQ0FTKEBleHAsIEBuZXcsIEBwdHIpID09IEVxdWFs
KEF0b21pY1N0cm9uZ0NBUyhAZXhwLCBAbmV3LCBAcHRyKSwgQGV4cCkKKyAgICAvLworICAgIC8v
IEFzc3VtaW5nIHRoYXQgdGhlIFdlYWtDQVMgZG9lcyBub3Qgc3B1cmlvdXNseSBmYWlsLCBvZiBj
b3Vyc2UuCisgICAgQXRvbWljU3Ryb25nQ0FTLAorICAgIAorICAgIC8vIEF0b21pY2FsbHkgX19f
IGEgbWVtb3J5IGxvY2F0aW9uIGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gU3ludGF4OgorICAg
IC8vCisgICAgLy8gQG9sZFZhbHVlID0gQXRvbWljWGNoZ19fXyhAb3BlcmFuZCwgQHB0cikKKyAg
ICBBdG9taWNYY2hnQWRkLAorICAgIEF0b21pY1hjaGdBbmQsCisgICAgQXRvbWljWGNoZ09yLAor
ICAgIEF0b21pY1hjaGdTdWIsCisgICAgQXRvbWljWGNoZ1hvciwKKyAgICAKKyAgICAvLyBBdG9t
aWNhbGx5IGV4Y2hhbmdlIGEgdmFsdWUgd2l0aCBhIG1lbW9yeSBsb2NhdGlvbi4gU3ludGF4Ogor
ICAgIC8vCisgICAgLy8gQG9sZFZhbHVlID0gQXRvbWljWGNoZyhAbmV3VmFsdWUsIEBwdHIpCisg
ICAgQXRvbWljWGNoZywKKyAgICAKKyAgICAvLyBJbnRyb2R1Y2UgYW4gaW52aXNpYmxlIGRlcGVu
ZGVuY3kgZm9yIGJsb2NraW5nIG1vdGlvbiBvZiBsb2FkcyB3aXRoIHJlc3BlY3QgdG8gZWFjaCBv
dGhlci4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQHJlc3VsdCA9IERlcGVuZChAcGhhbnRvbSkK
KyAgICAvLworICAgIC8vIFRoaXMgaXMgZXZlbnR1YWxseSBjb2RlZ2VuZXJhdGVkIHRvIGhhdmUg
bG9jYWwgc2VtYW50aWNzIGFzIGlmIHdlIGRpZDoKKyAgICAvLworICAgIC8vIEByZXN1bHQgPSAk
MAorICAgIC8vCisgICAgLy8gQnV0IGl0IGVuc3VyZXMgdGhhdCB0aGUgdXNlcnMgb2YgQHJlc3Vs
dCBjYW5ub3QgZXhlY3V0ZSB1bnRpbCBAcGhhbnRvbSBpcyBjb21wdXRlZC4KKyAgICAvLworICAg
IC8vIFRoZSBjb21waWxlciBpcyBub3QgYWxsb3dlZCB0byByZWFzb24gYWJvdXQgdGhlIGZhY3Qg
dGhhdCBEZXBlbmQgY29kZWdlbmVyYXRlcyB0aGlzIHdheS4gQW55IGtpbmQKKyAgICAvLyBvZiB0
cmFuc2Zvcm1hdGlvbiBvciBhbmFseXNpcyB0aGF0IHJlbGllcyBvbiB0aGUgaW5zaWdodCB0aGF0
IERlcGVuZCBpcyByZWFsbHkgemVybyBpcyB1bnNvdW5kLAorICAgIC8vIGJlY2F1c2UgaXQgdW5s
b2NrcyByZW9yZGVyaW5nIG9mIHVzZXJzIG9mIEByZXN1bHQgYW5kIEBwaGFudG9tLgorICAgIC8v
CisgICAgLy8gT24gWDg2LCB0aGlzIGlzIGxvd2VyZWQgdG8gYSBsb2FkLWxvYWQgZmVuY2UgYW5k
IEByZXN1bHQgdXNlcyBAcGhhbnRvbSBkaXJlY3RseS4KKyAgICAvLworICAgIC8vIE9uIEFSTSwg
dGhpcyBpcyBsb3dlcmVkIGFzIGlmIGxpa2U6CisgICAgLy8KKyAgICAvLyBAcmVzdWx0ID0gQml0
WG9yKEBwaGFudG9tLCBAcGhhbnRvbSkKKyAgICAvLworICAgIC8vIEV4Y2VwdCB0aGF0IHRoZSBj
b21waWxlciBuZXZlciBnZXRzIGFuIG9wcG9ydHVuaXR5IHRvIHNpbXBsaWZ5IG91dCB0aGUgQml0
WG9yLgorICAgIERlcGVuZCwKIAogICAgIC8vIFRoaXMgaXMgdXNlZCB0byBjb21wdXRlIHRoZSBh
Y3R1YWwgYWRkcmVzcyBvZiBhIFdhc20gbWVtb3J5IG9wZXJhdGlvbi4gSXQgdGFrZXMgYW4gSW50
UHRyCiAgICAgLy8gYW5kIGEgcGlubmVkIHJlZ2lzdGVyIHRoZW4gY29tcHV0ZXMgdGhlIGFwcHJv
cHJpYXRlIEludFB0ciBhZGRyZXNzLiBGb3IgdGhlIHVzZS1jYXNlIG9mCkBAIC0zMDEsNiArMzkz
LDcxIEBAIGlubGluZSBib29sIGlzRGVmaW5pdGVseVRlcm1pbmFsKE9wY29kZSAKICAgICB9CiB9
CiAKK2lubGluZSBib29sIGlzTG9hZChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bj
b2RlKSB7CisgICAgY2FzZSBMb2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2Fk
MTZaOgorICAgIGNhc2UgTG9hZDE2UzoKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lu
bGluZSBib29sIGlzU3RvcmUoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkg
eworICAgIGNhc2UgU3RvcmU4OgorICAgIGNhc2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0xvYWRTdG9yZShPcGNvZGUgb3Bjb2RlKQorewor
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBMb2FkOFo6CisgICAgY2FzZSBMb2FkOFM6
CisgICAgY2FzZSBMb2FkMTZaOgorICAgIGNhc2UgTG9hZDE2UzoKKyAgICBjYXNlIExvYWQ6Cisg
ICAgY2FzZSBTdG9yZTg6CisgICAgY2FzZSBTdG9yZTE2OgorICAgIGNhc2UgU3RvcmU6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK2lubGluZSBib29sIGlzQXRvbWljKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dp
dGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNT
dHJvbmdDQVM6CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0Fu
ZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAg
Y2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
aW5saW5lIGJvb2wgaXNNZW1vcnlBY2Nlc3MoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICByZXR1cm4g
aXNBdG9taWMob3Bjb2RlKSB8fCBpc0xvYWRTdG9yZShvcGNvZGUpOworfQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNyBA
QCBwdWJsaWM6CiAgICAgVmFsdWUqIGFkZEludENvbnN0YW50KE9yaWdpbiwgVHlwZSwgaW50NjRf
dCB2YWx1ZSk7CiAgICAgVmFsdWUqIGFkZEludENvbnN0YW50KFZhbHVlKiwgaW50NjRfdCB2YWx1
ZSk7CiAKKyAgICAvLyBZb3UncmUgZ3VhcmFudGVlZCB0aGF0IGJvdHRvbSBpcyB6ZXJvLgogICAg
IFZhbHVlKiBhZGRCb3R0b20oT3JpZ2luLCBUeXBlKTsKICAgICBWYWx1ZSogYWRkQm90dG9tKFZh
bHVlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDYgKzM0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHBv
aW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNj
ZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTG9h
ZDoKQEAgLTM1Myw2ICszNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAo
IkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkg
IT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNl
KHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU3RvcmU4OgpAQCAtMzYyLDYg
KzM2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQo
MCktPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIs
ICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9p
ZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVl
KTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU3RvcmU6CkBAIC0zNjksOCArMzcyLDQ5
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4o
KSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVl
LT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2
YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAg
ICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgICAgIFZBTElE
QVRFKCF2YWx1ZS0+a2luZCgpLmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAzLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCkt
PnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIp
LT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFj
a0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQo
KS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkg
PT0gdmFsdWUtPmNoaWxkKDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRl
clR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21p
Yyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6Cisg
ICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hj
aGdPcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAgICAgICAgIGNhc2Ug
QXRvbWljWGNoZ1hvcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09
IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJU
eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWMo
dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEZXBlbmQ6CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0g
MSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlw
ZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtQWRkcmVzczoK
ICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwg
KCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hp
bGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwpAQCAtNTM3LDYgKzU4MSwyMCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgdm9p
ZCB2YWxpZGF0ZUZlbmNlKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVl
KiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmIChtZW1vcnkt
Pmhhc0ZlbmNlKCkpCisgICAgICAgICAgICBWQUxJREFURShtZW1vcnR5LT5hY2Nlc3NCYW5rKCkg
PT0gR1AsICgiRmVuY2UgYXQgIiwgKm1lbW9yeSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZh
bGlkYXRlQXRvbWljKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEF0b21pY1ZhbHVlKiBh
dG9taWMgPSB2YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgIAorICAgICAgICBWQUxJ
REFURShiZXN0VHlwZShhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpID09IGF0b21pYy0+b3BlcmF0
aW9uVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgIH0KIAogICAgIHZvaWQgdmFsaWRhdGVT
dGFja0FjY2VzcyhWYWx1ZSogdmFsdWUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTAsNiArNTEwLDcgQEAgYm9vbCBW
YWx1ZTo6cmV0dXJuc0Jvb2woKSBjb25zdAogICAgIGNhc2UgQWJvdmVFcXVhbDoKICAgICBjYXNl
IEJlbG93RXF1YWw6CiAgICAgY2FzZSBFcXVhbE9yVW5vcmRlcmVkOgorICAgIGNhc2UgQXRvbWlj
V2Vha0NBUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBQaGk6CiAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHN0b3J5IGhlcmUuCkBAIC01ODksNiArNTkwLDcgQEAg
RWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgY2FzZSBCZWxvd0VxdWFsOgogICAg
IGNhc2UgRXF1YWxPclVub3JkZXJlZDoKICAgICBjYXNlIFNlbGVjdDoKKyAgICBjYXNlIERlcGVu
ZDoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBEaXY6CiAgICAgY2FzZSBVRGl2OgpAQCAtNjAw
LDE2ICs2MDIsNDQgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgY2FzZSBM
b2FkOFM6CiAgICAgY2FzZSBMb2FkMTZaOgogICAgIGNhc2UgTG9hZDE2UzoKLSAgICBjYXNlIExv
YWQ6Ci0gICAgICAgIHJlc3VsdC5yZWFkcyA9IGFzPE1lbW9yeVZhbHVlPigpLT5yYW5nZSgpOwor
ICAgIGNhc2UgTG9hZDogeworICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gYXM8TWVtb3J5
VmFsdWU+KCk7CisgICAgICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+cmFuZ2UoKTsKKyAgICAg
ICAgaWYgKG1lbW9yeS0+cGhhbnRvbVJhbmdlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC53cml0
ZXMgPSBtZW1vcnktPnBoYW50b21SYW5nZSgpOworICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0g
dHJ1ZTsKKyAgICAgICAgfQogICAgICAgICByZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7
CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIFN0b3JlODoKICAgICBjYXNlIFN0b3Jl
MTY6Ci0gICAgY2FzZSBTdG9yZToKLSAgICAgICAgcmVzdWx0LndyaXRlcyA9IGFzPE1lbW9yeVZh
bHVlPigpLT5yYW5nZSgpOworICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUq
IG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICByZXN1bHQud3JpdGVzID0gbWVt
b3J5LT5yYW5nZSgpOworICAgICAgICBpZiAobWVtb3J5LT5waGFudG9tUmFuZ2UoKSkgeworICAg
ICAgICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5LT5waGFudG9tUmFuZ2UoKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmNvbnRy
b2xEZXBlbmRlbnQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBdG9t
aWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgIGNhc2UgQXRvbWljWGNo
Z0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6Cisg
ICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNl
IEF0b21pY1hjaGc6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZh
bHVlPigpOworICAgICAgICByZXN1bHQucmVhZHMgPSBtZW1vcnktPnJhbmdlKCkgfCBtZW1vcnkt
PnBoYW50b21SYW5nZSgpOworICAgICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5yYW5nZSgp
IHwgbWVtb3J0eS0+cGhhbnRvbVJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPnBoYW50b21S
YW5nZSgpKQorICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0
LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2Fz
ZSBXYXNtQWRkcmVzczoKICAgICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAg
ICAgYnJlYWs7CkBAIC02MTcsMTggKzY0Nyw3IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBj
b25zdAogICAgICAgICBjb25zdCBGZW5jZVZhbHVlKiBmZW5jZSA9IGFzPEZlbmNlVmFsdWU+KCk7
CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IGZlbmNlLT5yZWFkOwogICAgICAgICByZXN1bHQud3Jp
dGVzID0gZmVuY2UtPndyaXRlOwotICAgICAgICAKLSAgICAgICAgLy8gUHJldmVudCBraWxsaW5n
IG9mIGZlbmNlcyB0aGF0IGNsYWltIG5vdCB0byB3cml0ZSBhbnl0aGluZy4gSXQncyBhIGJpdCB3
ZWlyZCB0aGF0IHdlIHVzZQotICAgICAgICAvLyBsb2NhbCBzdGF0ZSBhcyB0aGUgd2F5IHRvIGRv
IHRoaXMsIGJ1dCBpdCBoYXBwZW5zIHRvIHdvcms6IHdlIG11c3QgYXNzdW1lIHRoYXQgd2UgY2Fu
bm90Ci0gICAgICAgIC8vIGtpbGwgd3JpdGVzTG9jYWxTdGF0ZSB1bmxlc3Mgd2UgdW5kZXJzdGFu
ZHMgZXhhY3RseSB3aGF0IHRoZSBpbnN0cnVjdGlvbiBpcyBkb2luZyAobGlrZQotICAgICAgICAv
LyB0aGUgd2F5IHRoYXQgZml4U1NBIHVuZGVyc3RhbmRzIFNldC9HZXQgYW5kIHRoZSB3YXkgdGhh
dCByZWR1Y2VTdHJlbmd0aCBhbmQgb3RoZXJzCi0gICAgICAgIC8vIHVuZGVyc3RhbmQgVXBzaWxv
bikuIFRoaXMgd291bGQgb25seSBiZWNvbWUgYSBwcm9ibGVtIGlmIHdlIGhhZCBzb21lIGFuYWx5
c2lzIHRoYXQgd2FzCi0gICAgICAgIC8vIGxvb2tpbmcgdG8gdXNlIHRoZSB3cml0ZXNMb2NhbFN0
YXRlIGJpdCB0byBpbnZhbGlkYXRlIGEgQ1NFIG92ZXIgbG9jYWwgc3RhdGUgb3BlcmF0aW9ucy4K
LSAgICAgICAgLy8gVGhlbiBhIEZlbmNlIHdvdWxkIGxvb2sgYmxvY2ssIHNheSwgdGhlIGVsaW1p
bmF0aW9uIG9mIGEgcmVkdW5kYW50IEdldC4gQnV0IGl0IGxpa2UKLSAgICAgICAgLy8gdGhhdCdz
IG5vdCBhdCBhbGwgaG93IG91ciBvcHRpbWl6YXRpb25zIGZvciBTZXQvR2V0L1Vwc2lsb24vUGhp
IHdvcmsgLSB0aGV5IGdyb2sgdGhlaXIKLSAgICAgICAgLy8gb3BlcmF0aW9ucyBkZWVwbHkgZW5v
dWdoIHRoYXQgdGhleSBoYXZlIG5vIG5lZWQgdG8gY2hlY2sgdGhpcyBiaXQgLSBzbyB0aGlzIGNo
ZWF0IGlzCi0gICAgICAgIC8vIGZpbmUuCi0gICAgICAgIHJlc3VsdC53cml0ZXNMb2NhbFN0YXRl
ID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgQ0NhbGw6CkBAIC02OTQsNiArNzEzLDcgQEAgVmFsdWVLZXkgVmFsdWU6
OmtleSgpIGNvbnN0CiAgICAgY2FzZSBDaGVjazoKICAgICBjYXNlIEJpdHdpc2VDYXN0OgogICAg
IGNhc2UgTmVnOgorICAgIGNhc2UgRGVwZW5kOgogICAgICAgICByZXR1cm4gVmFsdWVLZXkoa2lu
ZCgpLCB0eXBlKCksIGNoaWxkKDApKTsKICAgICBjYXNlIEFkZDoKICAgICBjYXNlIFN1YjoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYg
KzEwNyw4IEBAIHB1YmxpYzoKICAgICAvLyB2YWx1ZXMgd2l0aCBJZGVudGl0aWVzIG9uIGJvdHRv
bSBjb25zdGFudHMuIEZvciB0aGlzIHJlYXNvbiwgdGhpcyB0YWtlcyBhIGNhbGxiYWNrIHRoYXQg
aXMKICAgICAvLyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYm90dG9tcy4gVGhlcmUncyBhIHV0
aWxpdHkgZm9yIHRoaXMsIHNlZSBCM0JvdHRvbVByb3ZpZGVyLmguIFlvdQogICAgIC8vIGNhbiBh
bHNvIGFjY2VzcyB0aGF0IHV0aWxpdHkgdXNpbmcgcmVwbGFjZVdpdGhCb3R0b20oSW5zZXJ0aW9u
U2V0Jiwgc2l6ZV90KS4KKyAgICAvLworICAgIC8vIFlvdSdyZSBndWFyYW50ZWVkIHRoYXQgYm90
dG9tIGlzIHplcm8uCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQm90dG9tUHJvdmlkZXI+CiAgICAg
dm9pZCByZXBsYWNlV2l0aEJvdHRvbShjb25zdCBCb3R0b21Qcm92aWRlciYpOwogICAgIApAQCAt
MzIxLDYgKzMyMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSVRvRjoKICAgICAgICAgY2Fz
ZSBCaXR3aXNlQ2FzdDoKICAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2UgRGVwZW5k
OgogICAgICAgICAgICAgaWYgKFVOTElLRUxZKG51bUFyZ3MgIT0gMSkpCiAgICAgICAgICAgICAg
ICAgYmFkS2luZChraW5kLCBudW1BcmdzKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCwzOCBAQAogCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitUeXBlIGJlc3RUeXBlKEJhbmsgYmFuaywgV2lkdGggd2lkdGgp
Cit7CisgICAgc3dpdGNoICh3aWR0aCkgeworICAgIGNhc2UgV2lkdGg4OgorICAgIGNhc2UgV2lk
dGgxNjoKKyAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgIHN3aXRjaCAoYmFuaykgeworICAgICAg
ICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIEludDMyOworICAgICAgICBjYXNlIEZQOgor
ICAgICAgICAgICAgcmV0dXJuIEZsb2F0OworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWb2lkOworICAgIGNhc2UgV2lkdGg2
NDoKKyAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAg
ICByZXR1cm4gSW50NjQ7CisgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICByZXR1cm4gRG91
YmxlOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBWb2lkOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBWb2lkOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwog
bmFtZXNwYWNlIFdURiB7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBK
U0M6OkIzOjpXaWR0aCB3aWR0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dp
ZHRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguaAko
d29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOCBAQCBpbmxpbmUgV2lkdGggd2lkdGhGb3JUeXBl
KFR5cGUgdHlwZSkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorVHlwZSBiZXN0VHlw
ZShCYW5rIGJhbmssIFdpZHRoIHdpZHRoKTsKKwogaW5saW5lIFdpZHRoIGNvbnNlcnZhdGl2ZVdp
ZHRoKEJhbmsgYmFuaykKIHsKICAgICByZXR1cm4gYmFuayA9PSBHUCA/IHBvaW50ZXJXaWR0aCgp
IDogV2lkdGg2NDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJP
cGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAK
LSMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2OCwyOCArNjY4LDM2MyBAQCBM
b2FkOCBVOkc6OCwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9h
ZEFjcTggVTpHOjgsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIFN0
b3JlOCBVOkc6OCwgRDpHOjgKICAgICBUbXAsIEluZGV4CiAgICAgVG1wLCBBZGRyCiAgICAgeDg2
OiBJbW0sIEluZGV4CiAgICAgeDg2OiBJbW0sIEFkZHIKIAorU3RvcmVSZWw4IFU6Rzo4LCBEOkc6
OAorICAgIFRtcCwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKyAg
ICB4ODY6IEltbSwgQWRkcgorCiBMb2FkOFNpZ25lZEV4dGVuZFRvMzIgVTpHOjgsIFpEOkc6MzIK
ICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3E4U2lnbmVkRXh0ZW5kVG8z
MiBVOkc6OCwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogTG9hZDE2
IFU6RzoxNiwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9hZEFj
cTE2IFU6RzoxNiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogTG9h
ZDE2U2lnbmVkRXh0ZW5kVG8zMiBVOkc6MTYsIFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJ
bmRleCwgVG1wCiAKK0xvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIgVTpHOjE2LCBaRDpHOjMyCisg
ICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBTdG9yZTE2IFU6RzoxNiwgRDpHOjE2CiAg
ICAgVG1wLCBJbmRleAogICAgIFRtcCwgQWRkcgogCitTdG9yZUFjcTE2IFU6RzoxNiwgRDpHOjE2
CisgICAgVG1wLCBJbmRleAorICAgIFRtcCwgQWRkcgorCitMb2FkQWNxMzIgVTpHOjMyIFpEOkc6
MzIKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworU3RvcmVS
ZWwzMiBVOkc6MzIgWkQ6RzozMgorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKyAgICB4
ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorCis2NDogTG9hZEFjcTY0IFU6Rzo2
NCBaRDpHOjY0CisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisK
KzY0OiBTdG9yZVJlbDY0IFU6Rzo2NCBaRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJ
bmRleAorICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisKKyMgVGhlIGZp
cnN0IG9wZXJhbmQgaXMgcmF4LgoreDg2OiBMb2NrQ21wWGNoZzggVUQ6Rzo4LCBVOkc6OCwgVUQ6
Rzo4LCBaRDpHOjgKKyAgICBUbXAqLCBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCosIFRtcCwgSW5k
ZXgsIFRtcAorCit4ODY6IExvY2tDbXBYY2hnMTYgVUQ6RzoxNiwgVTpHOjMyLCBVRDpHOjE2LCBa
RDpHOjgKKyAgICBUbXAqLCBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCosIFRtcCwgSW5kZXgsIFRt
cAorCit4ODY6IExvY2tDbXBYY2hnMzIgVUQ6RzozMiwgVTpHOjMyLCBVRDpHOjMyLCBaRDpHOjgK
KyAgICBUbXAqLCBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCosIFRtcCwgSW5kZXgsIFRtcAorCit4
ODZfNjQ6IExvY2tDbXBYY2hnNjQgVUQ6Rzo2NCwgVTpHOjY0LCBVRDpHOjY0LCBaRDpHOjgKKyAg
ICBUbXAqLCBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCosIFRtcCwgSW5kZXgsIFRtcAorCit4ODY6
IEJyYW5jaExvY2tDbXBYY2hnOCBVRDpHOjgsIFU6Rzo4LCBVRDpHOjggL2JyYW5jaAorICAgIFRt
cCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBCcmFuY2hMb2NrQ21w
WGNoZzE2IFVEOkc6MTYsIFU6RzozMiwgVUQ6RzoxNiAvYnJhbmNoCisgICAgVG1wKiwgVG1wLCBB
ZGRyCisgICAgVG1wKiwgVG1wLCBJbmRleAorCit4ODY6IEJyYW5jaExvY2tDbXBYY2hnMzIgVUQ6
RzozMiwgVTpHOjMyLCBVRDpHOjMyIC9icmFuY2gKKyAgICBUbXAqLCBUbXAsIEFkZHIKKyAgICBU
bXAqLCBUbXAsIEluZGV4CisKK3g4Nl82NDogQnJhbmNoTG9ja0NtcFhjaGc2NCBVRDpHOjY0LCBV
Okc6NjQsIFVEOkc6NjQgL2JyYW5jaAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRt
cCwgSW5kZXgKKworeDg2OiBMb2NrQWRkOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisg
ICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2Nr
QWRkMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAg
IFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrQWRkMzIgVTpHOjMyLCBVRDpH
OjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRt
cCwgSW5kZXgKKworeDg2XzY0OiBMb2NrQWRkNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
OiBMb2NrU3ViOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAor
ICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrU3ViMTYgVTpHOjE2LCBV
RDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAg
IFRtcCwgSW5kZXgKKworeDg2OiBMb2NrU3ViMzIgVTpHOjMyLCBVRDpHOjMyCisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
XzY0OiBMb2NrU3ViNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJ
bmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrQW5kOCBVOkc6
OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgor
ICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrQW5kMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1t
LCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKwor
eDg2OiBMb2NrQW5kMzIgVTpHOjMyLCBVRDpHOjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJ
bmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBMb2NrQW5kNjQg
VTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwg
QWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrT3I4IFU6Rzo4LCBVRDpHOjgKKyAgICBJ
bW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAor
Cit4ODY6IExvY2tPcjE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwg
SW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja09yMzIgVTpH
OjMyLCBVRDpHOjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRk
cgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBMb2NrT3I2NCBVOkc6NjQsIFVEOkc6NjQKKyAg
ICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCit4ODY6IExvY2tYb3I4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0s
IEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tYb3IxNiBV
Okc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tYb3IzMiBVOkc6MzIsIFVEOkc6MzIKKyAg
ICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCit4ODZfNjQ6IExvY2tYb3I2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAg
ICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tO
ZWc4IFVEOkc6OAorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IExvY2tOZWcxNiBVRDpHOjE2
CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogTG9ja05lZzMyIFVEOkc6MzIKKyAgICBBZGRy
CisgICAgSW5kZXgKKworeDg2XzY0OiBMb2NrTmVnNjQgVUQ6Rzo2NAorICAgIEFkZHIKKyAgICBJ
bmRleAorCit4ODY6IExvY2tOb3Q4IFVEOkc6OAorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6
IExvY2tOb3QxNiBVRDpHOjE2CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogTG9ja05vdDMy
IFVEOkc6MzIKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2XzY0OiBMb2NrTm90NjQgVUQ6Rzo2
NAorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IExvY2tYQWRkOCBVRDpHOjgsIFVEOkc6OAor
ICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrWEFkZDE2IFVEOkc6MTYs
IFVEOkc6MTYKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hBZGQz
MiBVRDpHOjMyLCBVRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZf
NjQ6IExvY2tYQWRkNjQgVUQ6Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwg
SW5kZXgKKworeDg2OiBMb2NrWGNoZzggVUQ6Rzo4LCBVRDpHOjgKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hjaGcxNiBVRDpHOjE2LCBVRDpHOjE2CisgICAgVG1w
LCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tYY2hnMzIgVUQ6RzozMiwgVUQ6Rzoz
MgorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBMb2NrWGNoZzY0IFVE
Okc6NjQsIFVEOkc6NjQKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK2FybTY0OiBM
b2FkTGluazggVTpHOjgsIFpEOkc6OAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwor
YXJtNjQ6IExvYWRMaW5rQWNxOCBVOkc6OCwgWkQ6Rzo4CisgICAgQWRkciwgVG1wCisgICAgSW5k
ZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kOCBVOkc6OCwgRDpHOjgsIFpEOkc6OAorICAgIFRt
cCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmRSZWw4
IFU6Rzo4LCBEOkc6OCwgWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4
LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rMTYgVTpHOjE2LCBaRDpHOjE2CisgICAgQWRkciwgVG1w
CisgICAgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmtBY3ExNiBVOkc6MTYsIFpEOkc6MTYK
KyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQxNiBVOkc6
MTYsIEQ6RzoxNiwgWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBU
bXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDE2IFU6RzoxNiwgRDpHOjE2LCBaRDpHOjgKKyAgICBU
bXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmszMiBV
Okc6MzIsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBM
b2FkTGlua0FjcTMyIFU6RzozMiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBU
bXAKKworYXJtNjQ6IFN0b3JlQ29uZDMyIFU6RzozMiwgRDpHOjMyLCBaRDpHOjgKKyAgICBUbXAs
IEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kUmVsMzIg
VTpHOjMyLCBEOkc6MzIsIFpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRl
eCwgVG1wCisKK2FybTY0OiBMb2FkTGluazY0IFU6Rzo2NCwgWkQ6Rzo2NAorICAgIEFkZHIsIFRt
cAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rQWNxNjQgVTpHOjY0LCBaRDpHOjY0
CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kNjQgVTpH
OjY0LCBEOkc6NjQsIFpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwg
VG1wCisKK2FybTY0OiBTdG9yZUNvbmRSZWw2NCBVOkc6NjQsIEQ6Rzo2NCwgWkQ6Rzo4CisgICAg
VG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IERlcGVuZDMyIFU6
RzozMiwgRDpHOjMyCisgICAgVG1wLCBUbXAKKworYXJtNjQ6IERlcGVuZDY0IFU6Rzo2NCwgRDpH
OjY0CisgICAgVG1wLCBUbXAKKwogQ29tcGFyZTMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpE
Okc6MzIKICAgICBSZWxDb25kLCBUbXAsIFRtcCwgVG1wCiAgICAgUmVsQ29uZCwgVG1wLCBJbW0s
IFRtcAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302786</attachid>
            <date>2017-02-26 09:17:54 -0800</date>
            <delta_ts>2017-02-26 12:57:03 -0800</delta_ts>
            <desc>built some tools I&apos;ll need for lowering CAS to LL/SC in isel</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79312</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMSBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OwogCQkwRjJENERERDE5ODMyRDM0MDA3RDRC
MTkgLyogRGVidWdnZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJENEREQjE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5j
cHAgKi87IH07CiAJCTBGMkQ0RERFMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJENEREQzE5
ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkQ0REU4MTk4MzJEQUMwMDdENEIxOSAvKiBU
b1RoaXNTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyRDRERTUxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5jcHAgKi87IH07
CkBAIC0yNzY0LDYgKzI3NjksMTEgQEAKIAkJMEYyQzYzQUMxRTYwQUUzQzAwQzEzODM5IC8qIEIz
QmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhbmsuaDsgcGF0aCA9
IGIzL0IzQmFuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNjNBRDFFNjBB
RTNDMDBDMTM4MzkgLyogQjNXaWR0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM1dpZHRoLmNwcDsgcGF0aCA9IGIzL0IzV2lkdGguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjJDNjNBRTFFNjBBRTNEMDBDMTM4MzkgLyogQjNXaWR0aC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dpZHRoLmg7IHBhdGggPSBiMy9CM1dp
ZHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0IzMUU2MzQzRTgwMEMx
MzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzQXRvbWljVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBdG9taWNWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBC
M0F0b21pY1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQXRvbWlj
VmFsdWUuaDsgcGF0aCA9IGIzL0IzQXRvbWljVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0
aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCOTFFNjM0NDA4MDBDMTM4MzkgLyog
QWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0FpckJsb2NrSW5z
ZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQkExRTYz
NDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWly
QmxvY2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDRE
REIxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVidWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkQ0RERDMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQ
cm9maWxlckxvZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTI5Miw2ICs1MzAyLDggQEAKIAkJCQkwRkVD
ODRCMzFCREFDRDg4MDA4MEZGNzQgLyogYWlyICovLAogCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovLAogCQkJCTBGRUM4NEI1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCAqLywKKwkJCQkwRjJDNjNCMzFFNjM0M0U4
MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5jcHAgKi8sCisJCQkJMEYyQzYzQjQxRTYzNDNFODAw
QzEzODM5IC8qIEIzQXRvbWljVmFsdWUuaCAqLywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4
MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJCQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNC
YW5rLmggKi8sCiAJCQkJMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5j
cHAgKi8sCkBAIC01MzU0LDYgKzUzNjYsNyBAQAogCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4NENFMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyog
QjNHZW5lcmF0ZS5oICovLAorCQkJCTBGMkM2M0I1MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0dlbmVy
aWNCbG9ja0luc2VydGlvblNldC5oICovLAogCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCAqLywKIAkJCQkwRkVDODVCRjFCRTE2N0EwMDA4
MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3BwICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3
NCAvKiBCM0hlYXBSYW5nZS5oICovLApAQCAtNTQ2OSw2ICs1NDgyLDggQEAKIAkJCQkwRjY0RUFG
MjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFD
REM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgw
MEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYz
NDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIx
QkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYx
ODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC03
OTU2LDYgKzc5NzEsNyBAQAogCQkJCTBGRUM4NTgwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU4MTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5z
dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREY2N0Q3MUQ5REM0NDIwMDFCOTgyNSAv
KiBBaXJLaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJDNjNCQzFFNjM0NDBDMDBDMTM4Mzkg
LyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2ODRENDM4MUMw
MDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMzRD
MUExQzRCMzlBRTAwMDNBNTEyIC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjE4MzJGMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxs
b2MuaCBpbiBIZWFkZXJzICovLApAQCAtODA0Nyw2ICs4MDYzLDcgQEAKIAkJCQk0MzQyMkE2MzFD
MTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NUIzMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMzM4REY2MUJFOTNENTUwMDEzQzg4RiAvKiBCM0NvbnN0cmFpbmVkVmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVy
aWNCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhFMEUxQkYwMjc2
QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzNGQ0ZD
MUMxNjI1QkUwMDMyM0Y2NyAvKiBCM0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NkI4QUQ5MUM0RUREQTIwMDk2OTA1MiAvKiBCM0R1cGxpY2F0ZVRhaWxzLmggaW4gSGVhZGVycyAq
LywKQEAgLTgzNjYsNiArODM4Myw3IEBACiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8q
IERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1
NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFu
dG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYw
MEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3
RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjQ4LDYg
KzEwMjY2LDcgQEAKIAkJCQk5RTcyOTQwNzE5MEYwMUE1MDAxQTkxQjUgLyogSW5pdGlhbGl6ZVRo
cmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1QUQg
LyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxNEIyQzIxODVBNjg0
NDAwRjNDN0NCIC8qIEluamVjdGVkU2NyaXB0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjJDNjNCNjFFNjM0M0VBMDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNThFMzU5MTE4NjBERUNGMDAxRjI0RkUgLyogSW5qZWN0ZWRTY3JpcHRIb3N0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUNBMTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4NDBFMjAxODdCN0I4NjAw
ODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAy
NjYsNiArMTAyODUsNyBAQAogCQkJCUUzNUUwMzVGMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzOEIx
ODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNTBFNEI2MTE4ODA5REQ1MDA2OEE0NkQgLyogSW5zcGVjdG9yUnVudGltZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBB
aXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTUxNjVEMjFCREYw
Qjk4MDAzQjc1QzEgLyogSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNTkzQ0Y4MjE4NDAzNzcxMDBCRkNFMjcgLyogSW5zcGVjdG9yVmFsdWVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNGMTA3RUMzNzYwMDQyN0E0OCAvKiBJbnRlcm5h
bEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQXRvbWljVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQXRvbWljVmFsdWU6On5B
dG9taWNWYWx1ZSgpCit7Cit9CisKK1dpZHRoIEF0b21pY1ZhbHVlOjphY2Nlc3NXaWR0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fd2lkdGg7Cit9CisKK3ZvaWQgQXRvbWljVmFsdWU6OmR1bXBN
ZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KGNvbW1hLCAid2lkdGggPSAiLCBtX3dpZHRoKTsKKyAgICAKKyAgICBNZW1vcnlW
YWx1ZTo6ZHVtcE1ldGEoY29tbWEsIG91dCk7Cit9CisKK1ZhbHVlKiBBdG9taWNWYWx1ZTo6Y2xv
bmVJbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IEF0b21pY1ZhbHVlKCp0aGlzKTsKK30K
KworQXRvbWljVmFsdWU6OkF0b21pY1ZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgV2lk
dGggd2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQg
PSAwKQorICAgIDogTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgb3BlcmFuZC0+dHlw
ZSgpLCBvcmlnaW4sIG9mZnNldCwgb3BlcmFuZCwgcG9pbnRlcikKKyAgICAsIG1fd2lkdGgod2lk
dGgpCit7CisgICAgc2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBB
U1NFUlQoYmVzdFR5cGUob3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKyAg
ICAKKyAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6
CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNh
c2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9t
aWNYY2hnOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK0F0b21pY1ZhbHVlOjpBdG9taWNWYWx1ZShLaW5kIGtp
bmQsIE9yaWdpbiBvcmlnaW4sIFdpZHRoIHdpZHRoLCBWYWx1ZSogZXhwZWN0ZWRWYWx1ZSwgVmFs
dWUqIG5ld1ZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDog
TWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwga2luZC5vcGNvZGUoKSA9PSBBdG9taWNX
ZWFrQ0FTID8gSW50MzIgOiBleHBlY3RlZFZhbHVlLT50eXBlKCksIG9yaWdpbiwgb2Zmc2V0LCBl
eHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSwgcG9pbnRlcikKKyAgICAsIG1fd2lkdGgod2lkdGgpCit7
CisgICAgc2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBBU1NFUlQo
YmVzdFR5cGUob3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKworICAgIHN3
aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNl
IEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQXRvbWljVmFsdWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisj
aW5jbHVkZSAiQjNXaWR0aC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQXRvbWljVmFsdWUgOiBwdWJsaWMgTWVtb3J5VmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzQXRvbWljKGtpbmQub3Bjb2RlKCkpOworICAgIH0KKyAgICAKKyAgICB+
QXRvbWljVmFsdWUoKTsKKyAgICAKKyAgICBUeXBlIG9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJl
dHVybiBjaGlsZCgwKS0+dHlwZSgpOyB9CisgICAgCisgICAgV2lkdGggb3BlcmF0aW9uV2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgCisgICAgLy8gU3lub255bSBmb3Igd2lk
dGgoKSwgaWYgeW91J3JlIGFjY2Vzc2luZyB2aWEgTWVtb3J5VmFsdWUuCisgICAgV2lkdGggYWNj
ZXNzV2lkdGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1
bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
CisgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIEF0b21pY1ZhbHVlKEtpbmQs
IE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBv
ZmZzZXQgPSAwKTsKKyAgICAKKyAgICBBdG9taWNWYWx1ZShLaW5kLCBPcmlnaW4sIFdpZHRoLCBW
YWx1ZSogZXhwZWN0ZWRWYWx1ZSwgVmFsdWUqIG5ld1ZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50
MzJfdCBvZmZzZXQgPSAwKTsKKyAgICAKKyAgICBXaWR0aCBtX3dpZHRoOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2Vy
dGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMzUgKzM2LDEzIEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKIAogQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0
KFByb2NlZHVyZSAmcHJvYykKLSAgICA6IG1fcHJvYyhwcm9jKQorICAgIDogR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0KHByb2MubV9ibG9ja3MpCisgICAgLCBtX3Byb2MocHJvYykKIHsKIH0KIAog
QmxvY2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsgfQogCi12b2lkIEJsb2Nr
SW5zZXJ0aW9uU2V0OjppbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCi17Ci0gICAg
bV9pbnNlcnRpb25zLmFwcGVuZChXVEZNb3ZlKGluc2VydGlvbikpOwotfQotCi1CYXNpY0Jsb2Nr
KiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVl
bmN5KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNC
bG9jayhVSU5UX01BWCwgZnJlcXVlbmN5KSk7Ci0gICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxv
Y2suZ2V0KCk7Ci0gICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2Nr
KSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9u
U2V0OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5KQot
ewotICAgIHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVl
bmN5ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVuY3koKSk7Ci19Ci0KLUJhc2ljQmxvY2sq
IEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91Ymxl
IGZyZXF1ZW5jeSkKLXsKLSAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJl
cXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7Ci19
Ci0KIEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjpzcGxpdEZvcndhcmQoCiAgICAgQmFz
aWNCbG9jayogYmxvY2ssIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqIGluc2Vy
dGlvblNldCwgZG91YmxlIGZyZXF1ZW5jeSkKIHsKQEAgLTEwMiwzMiArODAsNiBAQCBCYXNpY0Js
b2NrKiBCbG9ja0luc2VydGlvblNldDo6c3BsaXRGb3J3CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgpCi17Ci0gICAgaWYgKG1faW5zZXJ0
aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBXZSBh
bGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5l
ZWQgdG8gc29ydCB0aGVtIGJlZm9yZQotICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0
aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8g
YmUKLSAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCi0gICAgYnViYmxlU29ydCht
X2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKLQotICAgIGV4ZWN1dGVJ
bnNlcnRpb25zKG1fcHJvYy5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKLSAgICAKLSAgICAvLyBQ
cnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0
IGl0J3MKLSAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5n
LgotICAgIG1fcHJvYy5tX2Jsb2Nrcy5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgWyZdIChz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4mIGJsb2NrUHRyKSAtPiBib29sIHsKLSAgICAgICAg
ICAgIHJldHVybiAhYmxvY2tQdHI7Ci0gICAgICAgIH0pOwotICAgIAotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9wcm9jLm1fYmxvY2tzLnNpemUoKTsgKytpKQotICAgICAgICBtX3By
b2MubV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQot
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5z
ZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCIKICNp
bmNsdWRlICJCM1Byb2NlZHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zNSwyNiArMzYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEluc2VydGlvblNldDsKIAotdHlwZWRlZiBXVEY6Okluc2Vy
dGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOwordHlwZWRl
ZiBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz46OkJsb2NrSW5zZXJ0aW9uIEJs
b2NrSW5zZXJ0aW9uOwogCi1jbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitjbGFzcyBCbG9ja0lu
c2VydGlvblNldCA6IHB1YmxpYyBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz4g
ewogcHVibGljOgogICAgIEJsb2NrSW5zZXJ0aW9uU2V0KFByb2NlZHVyZSYpOwogICAgIH5CbG9j
a0luc2VydGlvblNldCgpOwogICAgIAotICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYp
OwotCi0gICAgLy8gSW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCi0gICAgQmFz
aWNCbG9jayogaW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7
Ci0KLSAgICAvLyBJbnNlcnRzIGEgbmV3IGJsb2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVz
dWFsbHkgeW91IHdpbGwgbm90IHBhc3MgdGhlIGZyZXF1ZW5jeQotICAgIC8vIGFyZ3VtZW50LiBQ
YXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRvIGp1c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdi
ZWZvcmUnIGJsb2NrLiBUaGF0J3MKLSAgICAvLyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCi0gICAg
QmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1
ZW5jeSA9IFBOYU4pOwotCi0gICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2
ZW4gYmxvY2suCi0gICAgQmFzaWNCbG9jayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIs
IGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLQogICAgIC8vIEEgaGVscGVyIHRvIHNwbGl0IGEg
YmxvY2sgd2hlbiBmb3J3YXJkIGl0ZXJhdGluZyBvdmVyIGl0LiBJdCBjcmVhdGVzIGEgbmV3IGJs
b2NrIHRvIGhvbGQKICAgICAvLyBldmVyeXRoaW5nIGJlZm9yZSB0aGUgaW5zdHJ1Y3Rpb24gYXQg
dmFsdWVJbmRleC4gVGhlIGN1cnJlbnQgYmxvY2sgaXMgbGVmdCB3aXRoCiAgICAgLy8gZXZlcnl0
aGluZyBhdCBhbmQgYWZ0ZXIgdmFsdWVJbmRleC4gSWYgdGhlIG9wdGlvbmFsIEluc2VydGlvblNl
dCBpcyBwcm92aWRlZCwgaXQgd2lsbCBnZXQKQEAgLTgwLDEyICs2OCw5IEBAIHB1YmxpYzoKICAg
ICBCYXNpY0Jsb2NrKiBzcGxpdEZvcndhcmQoCiAgICAgICAgIEJhc2ljQmxvY2sqLCB1bnNpZ25l
ZCYgdmFsdWVJbmRleCwgSW5zZXJ0aW9uU2V0KiA9IG51bGxwdHIsCiAgICAgICAgIGRvdWJsZSBm
cmVxdWVuY3kgPSBQTmFOKTsKLSAgICAKLSAgICBib29sIGV4ZWN1dGUoKTsKIAogcHJpdmF0ZToK
ICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKLSAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1f
aW5zZXJ0aW9uczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3
ICs4Miw4IEBAIGJvb2wgRWZmZWN0czo6aW50ZXJmZXJlcyhjb25zdCBFZmZlY3RzJiAKICAgICAg
ICAgfHwgaW50ZXJmZXJlc1dpdGhXcml0ZXNQaW5uZWQob3RoZXIsICp0aGlzKQogICAgICAgICB8
fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIud3JpdGVzKQogICAgICAgICB8fCB3cml0ZXMub3Zlcmxh
cHMob3RoZXIucmVhZHMpCi0gICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcyk7
CisgICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKKyAgICAgICAgfHwgKGZl
bmNlICYmIG90aGVyLmZlbmNlKTsKIH0KIAogYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0
IEVmZmVjdHMmIG90aGVyKSBjb25zdApAQCAtOTUsNyArOTYsOCBAQCBib29sIEVmZmVjdHM6Om9w
ZXJhdG9yPT0oY29uc3QgRWZmZWN0cyYgCiAgICAgICAgICYmIHdyaXRlc1Bpbm5lZCA9PSBvdGhl
ci53cml0ZXNQaW5uZWQKICAgICAgICAgJiYgcmVhZHNQaW5uZWQgPT0gb3RoZXIucmVhZHNQaW5u
ZWQKICAgICAgICAgJiYgd3JpdGVzID09IG90aGVyLndyaXRlcwotICAgICAgICAmJiByZWFkcyA9
PSBvdGhlci5yZWFkczsKKyAgICAgICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHMKKyAgICAgICAg
JiYgZmVuY2UgPT0gb3RoZXIuZmVuY2U7CiB9CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3IhPShj
b25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAgLTEyMCw2ICsxMjIsOCBAQCB2b2lkIEVmZmVj
dHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
IldyaXRlc1Bpbm5lZCIpOwogICAgIGlmIChyZWFkc1Bpbm5lZCkKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiUmVhZHNQaW5uZWQiKTsKKyAgICBpZiAoZmVuY2UpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIkZlbmNlIik7CiAgICAgaWYgKHdyaXRlcykKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiV3JpdGVzOiIsIHdyaXRlcyk7CiAgICAgaWYgKHJlYWRzKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBA
QCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MzE3MwogICAgIGJvb2wgcmVhZHNQaW5uZWQgeyBmYWxzZSB9OwogICAgIGJv
b2wgd3JpdGVzUGlubmVkIHsgZmFsc2UgfTsKKyAgICAKKyAgICAvLyBNZW1vcnkgZmVuY2VzIGNh
bm5vdCBiZSByZW9yZGVyZWQgYXJvdW5kIGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVpciBl
ZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQKKyAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEgbWVt
b3J5IGZlbmNlLgorICAgIGJvb2wgZmVuY2UgeyBmYWxzZSB9OwogCiAgICAgSGVhcFJhbmdlIHdy
aXRlczsKICAgICBIZWFwUmFuZ2UgcmVhZHM7CkBAIC04OSw2ICs5Myw3IEBAIHN0cnVjdCBFZmZl
Y3RzIHsKICAgICAgICAgcmVzdWx0LnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKICAgICAgICAg
cmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LndyaXRlc1Bpbm5lZCA9
IHRydWU7CisgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCkBAIC0xMDMsNyArMTA4LDcgQEAgc3RydWN0IEVmZmVjdHMgewogCiAgICAg
Ym9vbCBtdXN0RXhlY3V0ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gdGVybWluYWwg
fHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQ
aW5uZWQ7CisgICAgICAgIHJldHVybiB0ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRl
c0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8IHdyaXRlc1Bpbm5lZCB8fCBmZW5jZTsKICAgICB9CiAK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0aGVz
ZSByZXNwZWN0aXZlIGVmZmVjdHMgd291bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NDIsNiArMTQyLDcgQEAgc3RydWN0IEltcHVyZUJsb2NrRGF0YSB7CiAKICAgICBSYW5nZVNldDxI
ZWFwUmFuZ2U+IHJlYWRzOyAvLyBUaGlzIG9ubHkgZ2V0cyB1c2VkIGZvciBmb3J3YXJkIHN0b3Jl
IGVsaW1pbmF0aW9uLgogICAgIFJhbmdlU2V0PEhlYXBSYW5nZT4gd3JpdGVzOyAvLyBUaGlzIGdl
dHMgdXNlZCBmb3IgYm90aCBsb2FkIGFuZCBzdG9yZSBlbGltaW5hdGlvbi4KKyAgICBib29sIGZl
bmNlOwogCiAgICAgTWVtb3J5VmFsdWVNYXAgc3RvcmVzQXRIZWFkOwogICAgIE1lbW9yeVZhbHVl
TWFwIG1lbW9yeVZhbHVlc0F0VGFpbDsKQEAgLTE3NCwxMiArMTc1LDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobWVtb3J5ICYmIG1lbW9yeS0+aXNT
dG9yZSgpCiAgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLnJlYWRzLm92ZXJsYXBzKG1lbW9y
eS0+cmFuZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIWRhdGEud3JpdGVzLm92ZXJsYXBz
KG1lbW9yeS0+cmFuZ2UoKSkpCisgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRlcy5v
dmVybGFwcyhtZW1vcnktPnJhbmdlKCkpCisgICAgICAgICAgICAgICAgICAgICYmICghZGF0YS5m
ZW5jZSB8fCAhbWVtb3J5LT5oYXNGZW5jZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5z
dG9yZXNBdEhlYWQuYWRkKG1lbW9yeSk7CiAgICAgICAgICAgICAgICAgZGF0YS5yZWFkcy5hZGQo
ZWZmZWN0cy5yZWFkcyk7CiAKICAgICAgICAgICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9
IGVmZmVjdHMud3JpdGVzKQogICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGRhdGEsIHdyaXRl
cyk7CisgICAgICAgICAgICAgICAgZGF0YS5mZW5jZSB8PSBlZmZlY3RzLmZlbmNlOwogCiAgICAg
ICAgICAgICAgICAgaWYgKG1lbW9yeSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZW1vcnlW
YWx1ZXNBdFRhaWwuYWRkKG1lbW9yeSk7CkBAIC00NzgsNiArNDgxLDkgQEAgcHJpdmF0ZToKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CiAgICAgYm9vbCBmaW5kU3RvcmVBZnRlckNsb2Ji
ZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKICAg
ICB7CisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBl
bGltaW5hdGUgYSBzdG9yZSBpZiBldmVyeSBmb3J3YXJkIHBhdGggaGl0cyBhIHN0b3JlIHRvIHRo
ZSBzYW1lIGxvY2F0aW9uIGJlZm9yZQogICAgICAgICAvLyBoaXR0aW5nIGFueSBvcGVyYXRpb24g
dGhhdCBvYnNlcnZlcyB0aGUgc3RvcmUuIFRoaXMgc2VhcmNoIHNlZW1zIGxpa2UgaXQgc2hvdWxk
IGJlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSwgYnV0IGluIHRoZSBvdmVyd2hlbG1pbmcgbWFqb3Jp
dHkgb2YgY2FzZXMgaXQgd2lsbCBhbG1vc3QgaW1tZWRpYXRlbHkgaGl0IGFuIApAQCAtNjE0LDYg
KzYyMCwxMiBAQCBwcml2YXRlOgogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRh
dGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcgYmFja3dhcmQgZm9yICIsICpwdHIsICIuLi5cbiIp
OwogICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNG
ZW5jZSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgR2l2aW5nIHVwIGJlY2F1c2UgZmVuY2VzLlxuIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSog
bWF0Y2ggPSBtX2RhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmZpbmQocHRyLCBmaWx0ZXIpKSB7CiAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRm91
bmQgIiwgKm1hdGNoLCAiIGxvY2FsbHkuXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBJbnNlcnRpb25T
ZXQ7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CitjbGFzcyBHZW5lcmljQmxvY2tJ
bnNlcnRpb25TZXQgeworcHVibGljOgorICAgIHR5cGVkZWYgV1RGOjpJbnNlcnRpb248c3RkOjp1
bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBCbG9ja0luc2VydGlvbjsKKyAgICAKKyAgICBCbG9ja0lu
c2VydGlvblNldChWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiYgYmxvY2tzKQor
ICAgICAgICA6IG1fYmxvY2tzKGJsb2NrcykKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQg
aW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYgaW5zZXJ0aW9uKQorICAgIHsKKyAgICAgICAgbV9pbnNl
cnRpb25zLmFwcGVuZChXVEZNb3ZlKGluc2VydGlvbikpOworICAgIH0KKworICAgIC8vIEluc2Vy
dCBhIG5ldyBibG9jayBhdCBhIGdpdmVuIGluZGV4LgorICAgIEJhc2ljQmxvY2sqIGluc2VydCh1
bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pCisgICAgeworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgs
IGZyZXF1ZW5jeSkpOworICAgICAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsK
KyAgICAgICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2NrKSkpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIEluc2VydHMgYSBuZXcgYmxv
Y2sgYmVmb3JlIHRoZSBnaXZlbiBibG9jay4gVXN1YWxseSB5b3Ugd2lsbCBub3QgcGFzcyB0aGUg
ZnJlcXVlbmN5CisgICAgLy8gYXJndW1lbnQuIFBhc3NpbmcgUE5hTiBjYXVzZXMgdXMgdG8ganVz
dCB1c2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgJ2JlZm9yZScgYmxvY2suIFRoYXQncworICAgIC8v
IHVzdWFsbHkgd2hhdCB5b3Ugd2FudC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFz
aWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTikKKyAgICB7CisgICAgICAg
IHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8g
ZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVuY3koKSk7CisgICAgfQorCisgICAgLy8gSW5zZXJ0
cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2ZW4gYmxvY2suCisgICAgQmFzaWNCbG9jayogaW5z
ZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGluc2VydChhZnRlci0+aW5kZXgoKSArIDEsIGZyZXF1ZW5jeSA9
PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBhZnRlci0+ZnJlcXVlbmN5KCkpOworICAgIH0KKwor
ICAgIGJvb2wgZXhlY3V0ZSgpCisgICAgeworICAgICAgICBpZiAobV9pbnNlcnRpb25zLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdl
IGFsbG93IGluc2VydGlvbnMgdG8gYmUgZ2l2ZW4gdG8gdXMgaW4gYW55IG9yZGVyLiBTbywgd2Ug
bmVlZCB0byBzb3J0IHRoZW0gYmVmb3JlCisgICAgICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRl
SW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQg
aXQgdG8gYmUKKyAgICAgICAgLy8gZmFzdCwgc28gd2UgdXNlIGJ1YmJsZSBzb3J0LgorICAgICAg
ICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOwor
ICAgICAgICAKKyAgICAgICAgZXhlY3V0ZUluc2VydGlvbnMobV9ibG9ja3MsIG1faW5zZXJ0aW9u
cyk7CisgICAgICAgIAorICAgICAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBp
c24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0J3MKKyAgICAgICAgLy8gaGVhbHRoeSB0byBr
ZWVwIHRoZSBibG9jayBsaXN0IGZyb20gZ3Jvd2luZy4KKyAgICAgICAgbV9ibG9ja3MucmVtb3Zl
QWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2Nr
PiYgYmxvY2tQdHIpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRo
ZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9ibG9ja3NbaV0t
Pm1faW5kZXggPSBpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitw
cml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBtX2Jsb2Nr
czsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtODgsNiArODgsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CiAgICAgfQogICAgIAorICAgIEhlYXBSYW5nZSBvcGVyYXRvcnwoY29uc3QgSGVhcFJhbmdl
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBIZWFwUmFuZ2UoCisgICAgICAg
ICAgICBzdGQ6Om1pbihtX2JlZ2luLCBvdGhlci5tX2JlZ2luKSwKKyAgICAgICAgICAgIHN0ZDo6
bWF4KG1fZW5kLCBvdGhlci5tX2VuZCkpOworICAgIH0KKyAgICAKICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsgfQogCiAgICAgdW5z
aWduZWQgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xODUsNiArMTg1LDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICAgICAgaWYg
KGlzWDg2KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbG9hZC1sb2FkIGZl
bmNlLiBUaGlzIGNvZGVnZW5zIHRvIG5vdGhpbmcgb24gWDg2LiBXZSB1c2UgaXQgdG8gdGVsbCB0
aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcGlsZXIgbm90IHRvIGJsb2NrIGxvYWQgbW90
aW9uLgorICAgICAgICAgICAgICAgICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydDxGZW5jZVZhbHVlPihtX2luZGV4LCBtX29yaWdpbik7CisgICAgICAgICAgICAg
ICAgICAgIGZlbmNlLT5yZWFkID0gSGVhcFJhbmdlKCk7CisgICAgICAgICAgICAgICAgICAgIGZl
bmNlLT53cml0ZSA9IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAvLyBLaWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNob3VsZCB1bmxvY2sg
YSBidW5jaCBvZiBjb2RlIHNpbXBsaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICBtX25v
ZGUtPnJlcGxhY2VXaXRoQm90dG9tKG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Miw2ICs3MiwxNCBAQCBuYW1lc3BhY2UgewogCiBjb25zdCBib29sIHZlcmJvc2UgPSBm
YWxzZTsKIAorLy8gRklYTUU6IFdlIHdvdWxkbid0IG5lZWQgdGhpcyBpZiBBaXIgc3VwcG9ydGVk
IFdpZHRoIG1vZGlmaWVycyBpbiBBaXI6OktpbmQuCisvLyBPT1BTISEhIChuZWVkIGEgYnVnIFVS
TCkKKyNkZWZpbmUgT1BDT0RFX0ZPUl9XSURUSChvcGNvZGUsIHdpZHRoKSAoIFwKKyAgICAod2lk
dGgpID09IFdpZHRoOCA/IG9wY29kZSAjIyA4IDogXAorICAgICh3aWR0aCkgPT0gV2lkdGgxNiA/
IG9wY29kZSAjIyAxNiA6IFwKKyAgICAod2lkdGgpID09IFdpZHRoMzIgPyBvcGNvZGUgIyMgMzIg
OiBcCisgICAgb3Bjb2RlICMjIDY0KQorCiBjbGFzcyBMb3dlclRvQWlyIHsKIHB1YmxpYzoKICAg
ICBMb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQpAQCAtMTMyLDYgKzE0MCwxMiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJMb3dlcmluZyBCbG9jayAiLCAqYmxvY2ssICI6XG4iKTsKICAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1cCBjb3JyZWN0
bHkuCisgICAgICAgICAgICBmb3IgKEIzOjpGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yIDogYmxv
Y2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Jsb2NrW2Jsb2Nr
XS0+c3VjY2Vzc29ycygpLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgQWlyOjpGcmVxdWVu
dGVkQmxvY2sobV9ibG9ja1RvQmxvY2tbc3VjY2Vzc29yLmJsb2NrKCldLCBzdWNjZXNzb3IuZnJl
cXVlbmN5KCkpKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gUHJvY2VzcyBibG9j
a3MgaW4gcmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4gVGhhdCdzIHdo
YXQgYWxsb3dzIHVzCiAgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBlZmZlY3RpdmVs
eS4KICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsK
QEAgLTE0OSwxOCArMTYzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBtX2lu
c3RzIGNvbnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcwotICAgICAg
ICAgICAgLy8gaXQgaW4gcmV2ZXJzZS4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
aW5zdHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDog
bV9pbnN0c1tpXSkKLSAgICAgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5h
cHBlbmRJbnN0KFdURk1vdmUoaW5zdCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KLSAg
ICAgICAgICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3Vj
Y2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNj
ZXNzb3JzKCkuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9j
ayhtX2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3ko
KSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rp
b25zKG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KIAogICAgICAgICBBaXI6Oklu
c2VydGlvblNldCBpbnNlcnRpb25TZXQobV9jb2RlKTsKQEAgLTUzOCw3ICs1NDEsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwogCiAgICAgICAgIGludDMyX3Qgb2Zmc2V0
ID0gdmFsdWUtPm9mZnNldCgpOwotICAgICAgICBXaWR0aCB3aWR0aCA9IHZhbHVlLT5hY2Nlc3NX
aWR0aCgpOworICAgICAgICBXaWR0aCB3aWR0aCA9IHZhbHVlLT5sb2FkU3RvcmVXaWR0aCgpOwog
CiAgICAgICAgIEFyZyByZXN1bHQgPSBlZmZlY3RpdmVBZGRyKHZhbHVlLT5sYXN0Q2hpbGQoKSwg
b2Zmc2V0LCB3aWR0aCk7CiAgICAgICAgIEFTU0VSVChyZXN1bHQuaXNWYWxpZEZvcm0od2lkdGgp
KTsKQEAgLTU2MiwxMSArNTY1LDE2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQXJnUHJvbWlzZSBs
b2FkUHJvbWlzZUFueU9wY29kZShWYWx1ZSogbG9hZFZhbHVlKQogICAgIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQobG9hZFZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSk7CiAgICAgICAgIGlmICgh
Y2FuQmVJbnRlcm5hbChsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwogICAg
ICAgICBpZiAoY3Jvc3Nlc0ludGVyZmVyZW5jZShsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0
dXJuIEFyZygpOwotICAgICAgICBBcmdQcm9taXNlIHJlc3VsdChhZGRyKGxvYWRWYWx1ZSksIGxv
YWRWYWx1ZSk7CisgICAgICAgIGlmIChsb2FkVmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNG
ZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBBcmcgbG9hZEFkZHIg
PSBhZGRyKGxvYWRWYWx1ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvYWRBZGRyKTsKKyAg
ICAgICAgQXJnUHJvbWlzZSByZXN1bHQobG9hZEFkZHIsIGxvYWRWYWx1ZSk7CiAgICAgICAgIGlm
IChsb2FkVmFsdWUtPnRyYXBzKCkpCiAgICAgICAgICAgICByZXN1bHQuc2V0VHJhcHModHJ1ZSk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC05MzEsMTAgKzkzOSwxNSBAQCBwcml2YXRlOgog
ICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUzMiwgQWlyOjpPcGNvZGUgb3Bjb2RlNjQsIENvbW11
dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgogICAgIGJvb2wgdHJ5QXBw
ZW5kU3RvcmVCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQogICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpOworICAgICAgICAKICAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShvcGNvZGUzMiwgb3Bj
b2RlNjQsIGxlZnQtPnR5cGUoKSk7CiAgICAgICAgIGlmIChvcGNvZGUgPT0gQWlyOjpPb3BzKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUt
PmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKICAgICAgICAgQXJnIHN0b3JlQWRkciA9IGFkZHIobV92YWx1ZSk7CiAgICAg
ICAgIEFTU0VSVChzdG9yZUFkZHIpOwogCkBAIC05OTQsMTAgKzEwMDcsNDggQEAgcHJpdmF0ZToK
IAogICAgICAgICByZXR1cm4gSW5zdChtb3ZlLCBtX3ZhbHVlLCB0bXAodmFsdWUpLCBkZXN0KTsK
ICAgICB9CisgICAgCisgICAgQWlyOjpPcGNvZGUgc3RvcmVPcGNvZGUoV2lkdGggd2lkdGgsIEJh
bmsgYmFuaywgYm9vbCByZWxlYXNlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh3aWR0aCkgewor
ICAgICAgICBjYXNlIFdpZHRoODoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhbmsgPT0g
R1ApOworICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBTdG9yZVJlbDggOiBTdG9yZTg7Cisg
ICAgICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhbmsgPT0g
R1ApOworICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBTdG9yZVJlbDE2IDogU3RvcmUxNjsK
KyAgICAgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAg
ICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlID8gU3RvcmVS
ZWwzMiA6IE1vdmUzMjsKKyAgICAgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIXJlbGVhc2UpOworICAgICAgICAgICAgICAgIHJldHVybiBNb3ZlRmxvYXQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXaWR0aDY0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXM2NEJpdCgpKTsKKyAgICAgICAgICAgIHN3
aXRjaCAoYmFuaykgeworICAgICAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVsZWFzZSA/IFN0b3JlUmVsNjQgOiBNb3ZlOworICAgICAgICAgICAgY2FzZSBGUDoKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVsZWFzZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIE1vdmVEb3VibGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAg
ICAKKyAgICBBaXI6Ok9wY29kZSBzdG9yZU9wY29kZShWYWx1ZSogdmFsdWUpCisgICAgeworICAg
ICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAg
ICAgICByZXR1cm4gc3RvcmVPcGNvZGUobWVtb3J5LT5sb2FkU3RvcmVXaWR0aCgpLCBtZW1vcnkt
PmFjY2Vzc0JhbmsoKSwgbWVtb3J5LT5oYXNGZW5jZSgpKTsKKyAgICB9CiAKICAgICBJbnN0IGNy
ZWF0ZVN0b3JlKFZhbHVlKiB2YWx1ZSwgY29uc3QgQXJnJiBkZXN0KQogICAgIHsKLSAgICAgICAg
QWlyOjpPcGNvZGUgbW92ZU9wY29kZSA9IG1vdmVGb3JUeXBlKHZhbHVlLT50eXBlKCkpOworICAg
ICAgICBBaXI6Ok9wY29kZSBtb3ZlT3Bjb2RlID0gc3RvcmVPcGNvZGUodmFsdWUpOwogICAgICAg
ICByZXR1cm4gY3JlYXRlU3RvcmUobW92ZU9wY29kZSwgdmFsdWUsIGRlc3QpOwogICAgIH0KIApA
QCAtMTAwNiw3ICsxMDU3LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGFwcGVuZCh0cmFw
cGluZ0luc3QobV92YWx1ZSwgY3JlYXRlU3RvcmUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KSkpOwogICAgIH0KLQorICAgIAogICAgIEFpcjo6T3Bjb2RlIG1vdmVGb3JUeXBlKFR5cGUgdHlw
ZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMTA3Myw2ICsxMTI0LDIxIEBA
IHByaXZhdGU6CiAgICAgewogICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoaW5zdCk7CiAg
ICAgfQorICAgIAorICAgIHZvaWQgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKEFpcjo6QmFz
aWNCbG9jayogdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1
Y3Rpb25zLiBtX2luc3RzIGNvbnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJv
Y2VzcworICAgICAgICAvLyBpdCBpbiByZXZlcnNlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2luc3RzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDog
bV9pbnN0c1tpXSkKKyAgICAgICAgICAgICAgICB0YXJnZXQtPmFwcGVuZEluc3QoV1RGTW92ZShp
bnN0KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBzcGxpdEJsb2NrKEJhc2lj
QmxvY2sqJiBwcmV2aW91c0Jsb2NrLCBCYXNpY0Jsb2NrKiYgbmV4dEJsb2NrKQorICAgIHsKKyAg
ICAgICAgCisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgogICAgIFQqIGVuc3VyZVNwZWNpYWwoVComIGZpZWxkLCBBcmd1bWVudHMmJi4uLiBh
cmd1bWVudHMpCkBAIC0xMTIzLDcgKzExODksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKICAgICAg
ICAgICAgICAgICBhcmcgPSBBcmc6OmNhbGxBcmcodmFsdWUucmVwKCkub2Zmc2V0RnJvbVNQKCkp
OwotICAgICAgICAgICAgICAgIGFwcGVuZFN0b3JlKHZhbHVlLnZhbHVlKCksIGFyZyk7CisgICAg
ICAgICAgICAgICAgYXBwZW5kU3RvcmUobW92ZUZvclR5cGUodmFsdWUudmFsdWUoKSksIGFyZyk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xOTcxLDMwICsyMDM3LDUw
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExvYWQ6
IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgbW92ZUZvclR5cGUo
bV92YWx1ZS0+dHlwZSgpKSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7
CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFs
dWU+KCk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBBaXI6Ok9vcHM7CisgICAg
ICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChtZW1vcnktPnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAg
ICAgICAgICAgICAgIG9wY29kZSA9IExvYWRBY3EzMjsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICAgICAgb3Bj
b2RlID0gTG9hZEFjcTY0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBvcGNvZGUgPSBtb3ZlRm9yVHlwZSht
ZW1vcnktPnR5cGUoKSk7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUs
IG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExvYWQ4
UzogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkOFNpZ25l
ZEV4dGVuZFRvMzIsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAg
ICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkt
Pmhhc0ZlbmNlKCkgPyBMb2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIgOiBMb2FkOFNpZ25lZEV4dGVu
ZFRvMzI7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwg
bV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIExvYWQ4WjogewotICAgICAgICAgICAgYXBw
ZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkOCwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwg
dG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3E4IDogTG9hZDg7CisgICAg
ICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRk
cihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIExvYWQxNlM6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGlu
Z0luc3QobV92YWx1ZSwgTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMiwgbV92YWx1ZSwgYWRkcihtX3Zh
bHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBt
X3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3ExNlNpZ25lZEV4
dGVuZFRvMzIgOiBMb2FkMTZTaWduZWRFeHRlbmRUbzMyOworICAgICAgICAgICAgYXBwZW5kKHRy
YXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcCht
X3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBMb2FkMTZaOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExv
YWQxNiwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAg
ICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVu
Y2UoKSA/IExvYWRBY3ExNiA6IExvYWQxNjsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0lu
c3QobV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotCisgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBZGQ6IHsKICAgICAgICAgICAgIGlmICh0cnlBcHBlbmRMZWEoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CkBAIC0yMTY2LDYgKzIyNTIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEZXBlbmQ6
IHsKKyAgICAgICAgICAgIGFwcGVuZFVuT3A8RGVwZW5kMzIsIERlcGVuZDY0PihtX3ZhbHVlLT5j
aGlsZCgwKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICBjYXNl
IFNobDogewogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7
CkBAIC0yMjY2LDcgKzIzNTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgYXBwZW5kU3RvcmUodmFsdWVUb1N0b3JlLCBhZGRyKG1f
dmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUsIGFkZHIobV92YWx1ZSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIyODcsNyArMjM3OCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBlbmRTdG9yZShBaXI6OlN0b3JlOCwgdmFs
dWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1fdmFs
dWUsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIApAQCAtMjMwOCw3ICsyMzk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGFwcGVuZFN0b3JlKEFpcjo6U3RvcmUxNiwgdmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUp
KTsKKyAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUsIHZhbHVlVG9TdG9yZSwgYWRkciht
X3ZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjc4NCw2ICsy
ODc1LDM4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhcHBlbmQoQWlyOjpFbnRyeVN3aXRjaCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEF0b21pY1dlYWtDQVM6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworI2lmIENQVShYODZfNjQpCisgICAgICAgICAgICBU
bXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgICAgIGFwcGVuZChyZWxh
eGVkTW92ZUZvclR5cGUodmFsdWUtPm9wZXJhdGlvblR5cGUoKSksIGltbU9yVG1wKHZhbHVlLT5j
aGlsZCgwKSksIGVheCk7CisgICAgICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChMb2Nr
Q21wWGNoZywgdmFsdWUtPm9wZXJhdGlvbldpZHRoKCkpLCBlYXgsIHRtcCh2YWx1ZS0+Y2hpbGQo
MSkpLCBhZGRyKHZhbHVlKSwgdG1wKHZhbHVlKSk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgICAg
ICAgICAvLyBGSVhNRTogTmVlZCB0byBiZSBhYmxlIHRvIGJyZWFrIHRoZSBiYXNpYyBibG9jay4g
SSB0aGluayB0aGF0IG1lYW5zIGZvcmNpbmcgdGhlIHByb2Nlc3NpbmcKKyAgICAgICAgICAgIC8v
IG9mIGFsbCBjdXJyZW50IG1faW5zdHMgaW50byBzb21lIGJsb2NrLCBnaXZpbmcgaXQgdG8gdXMg
YXMgdGhlIGNvbnRpbnVhdGlvbiwgYW5kIHRoZW4KKyAgICAgICAgICAgIC8vIGxldHRpbmcgdXMg
Ym90aCBjcmVhdGUgbmV3IGJsb2NrcyBhbmQgYXBwZW5kIGluc3RydWN0aW9ucyB0byB0aGUgbmV3
IGJsb2NrIGJlaW5nIHVzZWQgZm9yCisgICAgICAgICAgICAvLyB0aGUgaXNlbCBjdXJzb3IuIFRo
aXMgbWVhbnMgdGhhdCB3ZSBtdXN0IGFsc28gYmUgYWJsZSB0byBvdmVycmlkZSB0aGUgc3VjY2Vz
c29ycyB0byBiZQorICAgICAgICAgICAgLy8gdXNlZCB3aGVuZXZlciB0aGUgaXNlbCBjYXBzIG9m
ZiB0aGUgaXNlbCBjdXJzb3IgKGN1cnJlbnRseSBpdCB1c2VzIHRoZSBCMyBibG9jaydzCisgICAg
ICAgICAgICAvLyBzdWNjZXNzb3JzKS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBO
b3RlIHRoYXQgdGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gcHV0
IGFueSBvZiB0aGUgSW5zdHMgaW50byB0aGUgYmxvY2sKKyAgICAgICAgICAgIC8vIHVudGlsIHdo
ZW4gd2UgY2FwIG9mZi4gU28sIHdlIGRvbid0IGhhdmUgdG8ga25vdyB3aGV0aGVyIHRoZSBjb2Rl
IGlzIGdvaW5nIGludG8gdGhlCisgICAgICAgICAgICAvLyBibG9ja1RvQmxvY2sobV9ibG9jaykg
b3Igc29tZXdoZXJlIGVsc2UuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSSB0aGlu
ayB0aGF0IHRoZSBjYXAtb2ZmLWFuZC1zcGxpdCBzdGVwIHNob3VsZCBtb3ZlIHRoZSBzdWNjZXNz
b3JzIGZyb20gdGhlCisgICAgICAgICAgICAvLyBibG9ja1RvQmxvY2sobV9ibG9jaykgaW50byB0
aGUgbmV3bHkgY3JlYXRlZCBibG9jaywgYW5kIHRoZW4gc2V0IHRoZQorICAgICAgICAgICAgLy8g
YmxvY2tUb0Jsb2NrKG1fYmxvY2spJ3Mgc3VjY2Vzc29yIGxpc3QgdG8gYmUgZW1wdHkuIFRoZSBj
bGllbnQgb2YgdGhlIHNwbGl0IGlzIHRoZW4gZnJlZQorICAgICAgICAgICAgLy8gdG8gbXV0YXRl
IGJsb2NrVG9CbG9jayhtX2Jsb2NrKSdzIHN1Y2Nlc3NvciBsaXN0LiBUaGUgb2RkYmFsbCBvdXRj
b21lIGlzIHRoYXQgdGhlIGJsb2NrcworICAgICAgICAgICAgLy8gd2UgY3JlYXRlIGFmdGVyIHNw
bGl0dGluZyBjb3VsZCBiZSBhd2t3YXJkbHkgb3JkZXJlZC4gQnV0IG1heWJlIHdlIGNhbiBoYW5k
bGUgdGhpcyBieQorICAgICAgICAgICAgLy8gdXNpbmcgYSBBaXI6OkJsb2NrSW5zZXJ0aW9uU2V0
LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIERheXVtIHRoYXQncyBhIGxvdCBvZiB3
b3JrLgorI2Vsc2UKKyNlcnJvciAiQmFkIGFyY2hpdGVjdHVyZSIKKyNlbmRpZgorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJy
ZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwzMCArMzQsNDggQEAgTWVtb3J5VmFsdWU6On5N
ZW1vcnlWYWx1ZSgpCiB7CiB9CiAKK1R5cGUgTWVtb3J5VmFsdWU6OmFjY2Vzc1R5cGUoKSBjb25z
dAoreworICAgIGlmIChpc0xvYWQob3Bjb2RlKCkpKQorICAgICAgICByZXR1cm4gdHlwZSgpOwor
ICAgIC8vIFRoaXMgaGFwcGVucyB0byB3b3JrIGZvciBhdG9taWNzLCB0b28uIFRoYXQncyB3aHkg
QXRvbWljVmFsdWUgZG9lcyBub3QgbmVlZCB0byBvdmVycmlkZSB0aGlzLgorICAgIHJldHVybiBj
aGlsZCgwKS0+dHlwZSgpOworfQorCitCYW5rIE1lbW9yeVZhbHVlOjphY2Nlc3NCYW5rKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gYmFua0ZvclR5cGUoYWNjZXNzVHlwZSgpKTsKK30KKwogc2l6ZV90
IE1lbW9yeVZhbHVlOjphY2Nlc3NCeXRlU2l6ZSgpIGNvbnN0CiB7CisgICAgcmV0dXJuIGJ5dGVz
KGFjY2Vzc1dpZHRoKCkpOworfQorCitXaWR0aCBNZW1vcnlWYWx1ZTo6bG9hZFN0b3JlV2lkdGgo
KSBjb25zdAorewogICAgIHN3aXRjaCAob3Bjb2RlKCkpIHsKICAgICBjYXNlIExvYWQ4WjoKICAg
ICBjYXNlIExvYWQ4UzoKICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIHJldHVybiBXaWR0aDg7CiAgICAgY2FzZSBMb2FkMTZaOgogICAgIGNhc2UgTG9hZDE2UzoK
ICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIHJldHVybiAyOworICAgICAgICByZXR1cm4gV2lk
dGgxNjsKICAgICBjYXNlIExvYWQ6Ci0gICAgICAgIHJldHVybiBzaXplb2ZUeXBlKHR5cGUoKSk7
CisgICAgICAgIHJldHVybiB3aWR0aEZvclR5cGUodHlwZSgpKTsKICAgICBjYXNlIFN0b3JlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mVHlwZShjaGlsZCgwKS0+dHlwZSgpKTsKKyAgICAgICAgcmV0
dXJuIHdpZHRoRm9yVHlwZShjaGlsZCgwKS0+dHlwZSgpKTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIFdpZHRoODsKICAgICB9CiB9CiAKIFdpZHRoIE1lbW9yeVZhbHVlOjphY2Nlc3NX
aWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHdpZHRoRm9yQnl0ZXMoYWNjZXNzQnl0ZVNpemUo
KSk7CisgICAgcmV0dXJuIGxvYWRTdG9yZVdpZHRoKCk7CiB9CiAKIHZvaWQgTWVtb3J5VmFsdWU6
OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBA
IC02Nyw2ICs4NSw4IEBAIHZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYK
ICAgICBpZiAoKGlzTG9hZCgpICYmIGVmZmVjdHMoKS5yZWFkcyAhPSByYW5nZSgpKQogICAgICAg
ICB8fCAoaXNTdG9yZSgpICYmIGVmZmVjdHMoKS53cml0ZXMgIT0gcmFuZ2UoKSkpCiAgICAgICAg
IG91dC5wcmludChjb21tYSwgInJhbmdlID0gIiwgcmFuZ2UoKSk7CisgICAgaWYgKHBoYW50b21S
YW5nZSgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJwaGFudG9tUmFuZ2UgPSAiLCBwaGFu
dG9tUmFuZ2UoKSk7CiB9CiAKIFZhbHVlKiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QK
QEAgLTc0LDYgKzk0LDU4IEBAIFZhbHVlKiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QK
ICAgICByZXR1cm4gbmV3IE1lbW9yeVZhbHVlKCp0aGlzKTsKIH0KIAorLy8gVXNlIHRoaXMgZm9y
bSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0
aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4K
K01lbW9yeVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IFZhbHVlKENo
ZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0
KG9mZnNldCkKK3sKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICBzd2l0Y2gg
KGtpbmQub3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2Fz
ZSBMb2FkMTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICBBU1NFUlQodHlw
ZSA9PSBJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG9yZTg6Cisg
ICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIEFT
U0VSVCh0eXBlID09IFZvaWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30K
KworLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGlt
cGxpZWQuCitNZW1vcnlWYWx1ZTo6TWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2lu
LCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDogTWVtb3J5VmFsdWUo
a2luZCwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KQoreworICAgIGlmICghQVNTRVJU
X0RJU0FCTEVEKSB7CisgICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgICAgICBj
YXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoK
KyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVzLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZh
bHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRl
ciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwg
Vm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sK
KyAgICBBU1NFUlQoaXNTdG9yZShraW5kLm9wY29kZSgpKSk7Cit9CisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMwogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NDggKzI3LDE3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNCYW5rLmgi
CiAjaW5jbHVkZSAiQjNIZWFwUmFuZ2UuaCIKICNpbmNsdWRlICJCM1ZhbHVlLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi0vLyBGSVhNRTogV2Ugd2FudCB0byBhbGxvdyBm
ZW5jZWQgbWVtb3J5IGFjY2Vzc2VzIG9uIEFSTS4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjIzNDkKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5
VmFsdWUgOiBwdWJsaWMgVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
S2luZCBraW5kKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAg
ICAgIGNhc2UgTG9hZDhaOgotICAgICAgICBjYXNlIExvYWQ4UzoKLSAgICAgICAgY2FzZSBMb2Fk
MTZaOgotICAgICAgICBjYXNlIExvYWQxNlM6Ci0gICAgICAgIGNhc2UgTG9hZDoKLSAgICAgICAg
Y2FzZSBTdG9yZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZToK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaXNTdG9y
ZShLaW5kIGtpbmQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAg
ICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBT
dG9yZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wg
aXNMb2FkKEtpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhY2NlcHRzKGtpbmQpICYm
ICFpc1N0b3JlKGtpbmQpOworICAgICAgICByZXR1cm4gaXNNZW1vcnkoa2luZC5vcGNvZGUoKSk7
CiAgICAgfQogCiAgICAgfk1lbW9yeVZhbHVlKCk7CkBAIC03OCw3NiArNDcsNTYgQEAgcHVibGlj
OgogCiAgICAgY29uc3QgSGVhcFJhbmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7
IH0KICAgICB2b2lkIHNldFJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9yYW5nZSA9
IHJhbmdlOyB9CisgICAgCisgICAgLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgcmFuZ2UuCisgICAg
Y29uc3QgSGVhcFJhbmdlJiBhY2Nlc3NSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHJhbmdlKCk7IH0K
KyAgICB2b2lkIHNldEFjY2Vzc1JhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgc2V0UmFu
Z2UocmFuZ2UpOyB9CisgICAgCisgICAgY29uc3QgSGVhcFJhbmdlJiBmZW5jZVJhbmdlKCkgY29u
c3QgeyByZXR1cm4gbV9mZW5jZVJhbmdlOyB9CisgICAgdm9pZCBzZXRGZW5jZVJhbmdlKGNvbnN0
IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9mZW5jZVJhbmdlID0gcmFuZ2U7IH0KKworICAgIGJvb2wg
aXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIGlzU3RvcmUob3Bjb2RlKCkpOyB9CisgICAgYm9vbCBp
c0xvYWQoKSBjb25zdCB7IHJldHVybiBpc0xvYWQob3Bjb2RlKCkpOyB9CiAKLSAgICBib29sIGlz
U3RvcmUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVm9pZDsgfQotICAgIGJvb2wgaXNMb2Fk
KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpICE9IFZvaWQ7IH0KKyAgICBib29sIGhhc0ZlbmNlKCkg
Y29uc3QgeyByZXR1cm4gISFmZW5jZVJhbmdlKCk7IH0KIAorICAgIFR5cGUgYWNjZXNzVHlwZSgp
IGNvbnN0OworICAgIEJhbmsgYWNjZXNzQmFuaygpIGNvbnN0OwogICAgIHNpemVfdCBhY2Nlc3NC
eXRlU2l6ZSgpIGNvbnN0OwotICAgIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CisgICAgCisg
ICAgLy8gU2xpZ2h0bHkgZmFzdGVyIHZlcnNpb24gb2YgYWNjZXNzV2lkdGgsIGlmIHlvdSBrbm93
IHRoYXQgeW91J3JlIHdvcmtpbmcgd2l0aCBhIGxvYWQgb3Igc3RvcmUuCisgICAgV2lkdGggbG9h
ZFN0b3JlV2lkdGgoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIFdpZHRoIGFjY2Vzc1dpZHRo
KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYg
Y29tbWEsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkdW1wTWV0YShD
b21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVmFsdWUq
IGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBQcm9jZWR1cmU7Ci0KLSAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExv
YWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0
Ci0gICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KLSAgICBNZW1vcnlWYWx1ZShL
aW5kIGtpbmQsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMy
X3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBl
LCBvcmlnaW4sIHBvaW50ZXIpCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorICAgIE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIEtpbmQga2luZCwgVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IG9mZnNldCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIGFy
Z3VtZW50cy4uLikKICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5n
ZShIZWFwUmFuZ2U6OnRvcCgpKQogICAgIHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQp
IHsKLSAgICAgICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2Fz
ZSBMb2FkOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMb2FkOFo6
Ci0gICAgICAgICAgICBjYXNlIExvYWQ4UzoKLSAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKLSAg
ICAgICAgICAgIGNhc2UgTG9hZDE2UzoKLSAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJ
bnQzMik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0b3JlODoK
LSAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgICAgIGNhc2UgU3RvcmU6Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVm9pZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgfQorICAgIAorICAgIC8vIFVzZSB0
aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUg
TG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVy
bmVkIHR5cGUpLgorICAgIE1lbW9yeVZhbHVlKEtpbmQsIFR5cGUsIE9yaWdpbiwgVmFsdWUqIHBv
aW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBs
b2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KLSAgICBNZW1vcnlWYWx1ZShL
aW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9
IDApCi0gICAgICAgIDogTWVtb3J5VmFsdWUoa2luZCwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwg
b2Zmc2V0KQotICAgIHsKLSAgICB9CisgICAgTWVtb3J5VmFsdWUoS2luZCwgT3JpZ2luLCBWYWx1
ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKTsKIAogICAgIC8vIFVzZSB0aGlzIGZvcm0g
Zm9yIHN0b3Jlcy4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAg
OiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVy
KQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgLCBtX3JhbmdlKEhlYXBSYW5n
ZTo6dG9wKCkpCi0gICAgewotICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAg
ICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFN0b3JlODoK
LSAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgICAgIGNhc2UgU3RvcmU6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCisgICAgTWVtb3J5VmFsdWUoS2luZCwgT3JpZ2luLCBW
YWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAgIAog
ICAgIGludDMyX3QgbV9vZmZzZXQgeyAwIH07Ci0gICAgSGVhcFJhbmdlIG1fcmFuZ2U7CisgICAg
SGVhcFJhbmdlIG1fcmFuZ2UgeyBIZWFwUmFuZ2U6OnRvcCgpIH07CisgICAgSGVhcFJhbmdlIG1f
ZmVuY2VSYW5nZSB7IEhlYXBSYW5nZSgpIH07CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtODIsNyArODIsNiBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIE1vZCwgLy8gQWxs
IGJldHMgYXJlIG9mZiBhcyB0byB3aGF0IHdpbGwgaGFwcGVuIHdoZW4geW91IGV4ZWN1dGUgdGhp
cyBmb3IgLTJeMzElLTEgYW5kIHglMC4KICAgICBVTW9kLAogCi0KICAgICAvLyBQb2x5bW9ycGhp
YyBuZWdhdGlvbi4gTm90ZSB0aGF0IHdlIG9ubHkgbmVlZCB0aGlzIGZvciBmbG9hdGluZyBwb2lu
dCwgc2luY2UgaW50ZWdlciBuZWdhdGlvbgogICAgIC8vIGlzIGV4YWN0bHkgbGlrZSBTdWIoMCwg
eCkuIEJ1dCB0aGF0J3Mgbm90IHRydWUgZm9yIGZsb2F0aW5nIHBvaW50LiBTdWIoMCwgMCkgaXMg
MCwgd2hpbGUKICAgICAvLyBOZWcoMCkgaXMgLTAuIEFsc28sIHdlIGNhbm9uaWNhbGl6ZSBTdWIo
MCwgeCkgaW50byBOZWcoeCkgaW4gY2FzZSBvZiBpbnRlZ2Vycy4KQEAgLTE2Miw2ICsxNjEsOTkg
QEAgZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKICAgICBTdG9yZTE2LAogICAgIC8vIFRoaXMgaXMg
YSBwb2x5bW9ycGhpYyBzdG9yZSBmb3IgSW50MzIsIEludDY0LCBGbG9hdCwgYW5kIERvdWJsZS4K
ICAgICBTdG9yZSwKKyAgICAKKyAgICAvLyBBdG9taWMgY29tcGFyZSBhbmQgc3dhcCB0aGF0IHJl
dHVybnMgYSBib29sZWFuLiBNYXkgY2hvb3NlIHRvIGRvIG5vdGhpbmcgYW5kIHJldHVybiBmYWxz
ZS4gWW91IGNhbgorICAgIC8vIHVzdWFsbHkgYXNzdW1lIHRoYXQgdGhpcyBpcyBmYXN0ZXIgYW5k
IHJlc3VsdHMgaW4gbGVzcyBjb2RlIHRoYW4gQXRvbWljU3Ryb25nQ0FTLCB0aG91Z2ggdGhhdCdz
CisgICAgLy8gbm90IG5lY2Vzc2FyaWx5IHRydWUgb24gSW50ZWwsIGlmIGluc3RydWN0aW9uIHNl
bGVjdGlvbiBkb2VzIGl0cyBqb2IuIEltYWdpbmUgdGhhdCB0aGlzIG9wY29kZSBpcworICAgIC8v
IGFzIGlmIHlvdSBkaWQgdGhpcyBhdG9taWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICAvLyBib29sIEF0b21pY1dlYWtDQVMoVCBleHBlY3RlZFZhbHVlLCBU
IG5ld1ZhbHVlLCBUKiBwdHIpCisgICAgLy8geworICAgIC8vICAgICBpZiAoIXJhbmQoKSkKKyAg
ICAvLyAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gUmVhbCB3b3JsZCBleGFtcGxlIG9mIHRoaXM6
IGNvbnRleHQgc3dpdGNoIG9uIEFSTSB3aGlsZSBkb2luZyBDQVMuCisgICAgLy8gICAgIGlmICgq
cHRyICE9IGV4cGVjdGVkVmFsdWUpCisgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Ly8gICAgICpwdHIgPSBuZXdWYWx1ZTsKKyAgICAvLyAgICAgcmV0dXJuIHRydWU7CisgICAgLy8g
fQorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGFsbCBhdG9taWNzIHB1dCB0aGUgcG9pbnRlciBs
YXN0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cgbG9hZHMgYW5kIHN0b3JlcyB3b3JrLiBUaGlz
CisgICAgLy8gaXMgYSBnb29meSB0cmFkaXRpb24sIGJ1dCBpdCdzIGhhcm1sZXNzLCBhbmQgYmV0
dGVyIHRoYW4gYmVpbmcgaW5jb25zaXN0ZW50LgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHdl
YWsgQ0FTIGhhcyBubyBmZW5jaW5nIGd1YXJhbnRlZXMgd2hlbiBpdCBmYWlscy4gVGhpcyBtZWFu
cyB0aGF0IHRoZSBmb2xsb3dpbmcKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbiBpcyBhbHdheXMgdmFs
aWQ6CisgICAgLy8KKyAgICAvLyBCZWZvcmU6CisgICAgLy8KKyAgICAvLyAgICAgICAgIEJyYW5j
aChBdG9taWNXZWFrQ0FTKGV4cGVjdGVkLCBuZXcsIHB0cikpCisgICAgLy8gICAgICAgU3VjY2Vz
c29yczogVGhlbjojc3VjY2VzcywgRWxzZTojZmFpbAorICAgIC8vCisgICAgLy8gQWZ0ZXI6Cisg
ICAgLy8KKyAgICAvLyAgICAgICAgIEJyYW5jaChFcXVhbChMb2FkKHB0ciksIGV4cGVjdGVkKSkK
KyAgICAvLyAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiNhdHRlbXB0LCBFbHNlOiNmYWlsCisgICAg
Ly8gICAgIEJCI2F0dGVtcHQ6CisgICAgLy8gICAgICAgICBCcmFuY2goQXRvbWljV2Vha0NBUyhl
eHBlY3RlZCwgbmV3LCBwdHIpKQorICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I3N1Y2Nl
c3MsIEVsc2U6I2ZhaWwKKyAgICBBdG9taWNXZWFrQ0FTLAorICAgIAorICAgIC8vIEF0b21pYyBj
b21wYXJlIGFuZCBzd2FwIHRoYXQgcmV0dXJucyB0aGUgb2xkIHZhbHVlLiBEb2VzIG5vdCBoYXZl
IHRoZSBub25kZXRlcm1pbmlzbSBvZiBXZWFrQ0FTLgorICAgIC8vIFRoaXMgaXMgYSBiaXQgbW9y
ZSBjb2RlIGFuZCBhIGJpdCBzbG93ZXIgaW4gc29tZSBjYXNlcywgdGhvdWdoIG5vdCBieSBhIGxv
dC4gSW1hZ2luZSB0aGF0IHRoaXMKKyAgICAvLyBvcGNvZGUgaXMgYXMgaWYgeW91IGRpZCB0aGlz
IGF0b21pY2FsbHk6CisgICAgLy8KKyAgICAvLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIC8v
IFQgQXRvbWljU3Ryb25nQ0FTKFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSwgVCogcHRyKQor
ICAgIC8vIHsKKyAgICAvLyAgICAgVCBvbGRWYWx1ZSA9ICpwdHI7CisgICAgLy8gICAgIGlmIChv
bGRWYWx1ZSA9PSBleHBlY3RlZFZhbHVlKQorICAgIC8vICAgICAgICAgKnB0ciA9IG5ld1ZhbHVl
OworICAgIC8vICAgICByZXR1cm4gb2xkVmFsdWUKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBO
b3RlIHRoYXQgQXRvbWljV2Vha0NBUyBhbmQgQXRvbWljU3Ryb25nQ0FTIHNvcnQgb2YgaGF2ZSB0
aGlzIGtpbmQgb2YgZXF1aXZhbGVuY2U6CisgICAgLy8KKyAgICAvLyBBdG9taWNXZWFrQ0FTKEBl
eHAsIEBuZXcsIEBwdHIpID09IEVxdWFsKEF0b21pY1N0cm9uZ0NBUyhAZXhwLCBAbmV3LCBAcHRy
KSwgQGV4cCkKKyAgICAvLworICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhlIFdlYWtDQVMgZG9lcyBu
b3Qgc3B1cmlvdXNseSBmYWlsLCBvZiBjb3Vyc2UuCisgICAgQXRvbWljU3Ryb25nQ0FTLAorICAg
IAorICAgIC8vIEF0b21pY2FsbHkgX19fIGEgbWVtb3J5IGxvY2F0aW9uIGFuZCByZXR1cm4gdGhl
IG9sZCB2YWx1ZS4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQG9sZFZhbHVlID0gQXRvbWljWGNo
Z19fXyhAb3BlcmFuZCwgQHB0cikKKyAgICBBdG9taWNYY2hnQWRkLAorICAgIEF0b21pY1hjaGdB
bmQsCisgICAgQXRvbWljWGNoZ09yLAorICAgIEF0b21pY1hjaGdTdWIsCisgICAgQXRvbWljWGNo
Z1hvciwKKyAgICAKKyAgICAvLyBBdG9taWNhbGx5IGV4Y2hhbmdlIGEgdmFsdWUgd2l0aCBhIG1l
bW9yeSBsb2NhdGlvbi4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQG9sZFZhbHVlID0gQXRvbWlj
WGNoZyhAbmV3VmFsdWUsIEBwdHIpCisgICAgQXRvbWljWGNoZywKKyAgICAKKyAgICAvLyBJbnRy
b2R1Y2UgYW4gaW52aXNpYmxlIGRlcGVuZGVuY3kgZm9yIGJsb2NraW5nIG1vdGlvbiBvZiBsb2Fk
cyB3aXRoIHJlc3BlY3QgdG8gZWFjaCBvdGhlci4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQHJl
c3VsdCA9IERlcGVuZChAcGhhbnRvbSkKKyAgICAvLworICAgIC8vIFRoaXMgaXMgZXZlbnR1YWxs
eSBjb2RlZ2VuZXJhdGVkIHRvIGhhdmUgbG9jYWwgc2VtYW50aWNzIGFzIGlmIHdlIGRpZDoKKyAg
ICAvLworICAgIC8vIEByZXN1bHQgPSAkMAorICAgIC8vCisgICAgLy8gQnV0IGl0IGVuc3VyZXMg
dGhhdCB0aGUgdXNlcnMgb2YgQHJlc3VsdCBjYW5ub3QgZXhlY3V0ZSB1bnRpbCBAcGhhbnRvbSBp
cyBjb21wdXRlZC4KKyAgICAvLworICAgIC8vIFRoZSBjb21waWxlciBpcyBub3QgYWxsb3dlZCB0
byByZWFzb24gYWJvdXQgdGhlIGZhY3QgdGhhdCBEZXBlbmQgY29kZWdlbmVyYXRlcyB0aGlzIHdh
eS4gQW55IGtpbmQKKyAgICAvLyBvZiB0cmFuc2Zvcm1hdGlvbiBvciBhbmFseXNpcyB0aGF0IHJl
bGllcyBvbiB0aGUgaW5zaWdodCB0aGF0IERlcGVuZCBpcyByZWFsbHkgemVybyBpcyB1bnNvdW5k
LAorICAgIC8vIGJlY2F1c2UgaXQgdW5sb2NrcyByZW9yZGVyaW5nIG9mIHVzZXJzIG9mIEByZXN1
bHQgYW5kIEBwaGFudG9tLgorICAgIC8vCisgICAgLy8gT24gWDg2LCB0aGlzIGlzIGxvd2VyZWQg
dG8gYSBsb2FkLWxvYWQgZmVuY2UgYW5kIEByZXN1bHQgdXNlcyBAcGhhbnRvbSBkaXJlY3RseS4K
KyAgICAvLworICAgIC8vIE9uIEFSTSwgdGhpcyBpcyBsb3dlcmVkIGFzIGlmIGxpa2U6CisgICAg
Ly8KKyAgICAvLyBAcmVzdWx0ID0gQml0WG9yKEBwaGFudG9tLCBAcGhhbnRvbSkKKyAgICAvLwor
ICAgIC8vIEV4Y2VwdCB0aGF0IHRoZSBjb21waWxlciBuZXZlciBnZXRzIGFuIG9wcG9ydHVuaXR5
IHRvIHNpbXBsaWZ5IG91dCB0aGUgQml0WG9yLgorICAgIERlcGVuZCwKIAogICAgIC8vIFRoaXMg
aXMgdXNlZCB0byBjb21wdXRlIHRoZSBhY3R1YWwgYWRkcmVzcyBvZiBhIFdhc20gbWVtb3J5IG9w
ZXJhdGlvbi4gSXQgdGFrZXMgYW4gSW50UHRyCiAgICAgLy8gYW5kIGEgcGlubmVkIHJlZ2lzdGVy
IHRoZW4gY29tcHV0ZXMgdGhlIGFwcHJvcHJpYXRlIEludFB0ciBhZGRyZXNzLiBGb3IgdGhlIHVz
ZS1jYXNlIG9mCkBAIC0zMDEsNiArMzkzLDcxIEBAIGlubGluZSBib29sIGlzRGVmaW5pdGVseVRl
cm1pbmFsKE9wY29kZSAKICAgICB9CiB9CiAKK2lubGluZSBib29sIGlzTG9hZChPcGNvZGUgb3Bj
b2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBMb2FkOFo6CisgICAgY2Fz
ZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgorICAgIGNhc2UgTG9hZDE2UzoKKyAgICBjYXNl
IExvYWQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzU3RvcmUoT3Bjb2RlIG9wY29kZSkK
K3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgU3RvcmU4OgorICAgIGNhc2UgU3Rv
cmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0xvYWRT
dG9yZShPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBM
b2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgorICAgIGNhc2UgTG9h
ZDE2UzoKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBTdG9yZTg6CisgICAgY2FzZSBTdG9yZTE2
OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzQXRvbWljKE9w
Y29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIEF0b21pY1dl
YWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgY2FzZSBBdG9taWNYY2hnQWRk
OgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBj
YXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRv
bWljWGNoZzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNNZW1vcnlBY2Nlc3MoT3Bjb2Rl
IG9wY29kZSkKK3sKKyAgICByZXR1cm4gaXNBdG9taWMob3Bjb2RlKSB8fCBpc0xvYWRTdG9yZShv
cGNvZGUpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogbmFtZXNwYWNlIFdURiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMjEy
OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExNyw2ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGFkZEludENvbnN0
YW50KE9yaWdpbiwgVHlwZSwgaW50NjRfdCB2YWx1ZSk7CiAgICAgVmFsdWUqIGFkZEludENvbnN0
YW50KFZhbHVlKiwgaW50NjRfdCB2YWx1ZSk7CiAKKyAgICAvLyBZb3UncmUgZ3VhcmFudGVlZCB0
aGF0IGJvdHRvbSBpcyB6ZXJvLgogICAgIFZhbHVlKiBhZGRCb3R0b20oT3JpZ2luLCBUeXBlKTsK
ICAgICBWYWx1ZSogYWRkQm90dG9tKFZhbHVlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDYgKzM0Niw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4o
KSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVl
LT5jaGlsZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAq
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAg
ICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgTG9hZDoKQEAgLTM1Myw2ICszNTQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAi
LCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5
cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT50eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0
ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgU3RvcmU4OgpAQCAtMzYyLDYgKzM2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFs
dWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9
PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNr
QWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
U3RvcmU6CkBAIC0zNjksOCArMzcyLDQ5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBl
KCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5
cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRl
RmVuY2UodmFsdWUpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUp
OwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdG9taWNXZWFrQ0FT
OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmlzQ2hpbGwoKSwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRy
ZW4oKSA9PSAzLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSktPnR5cGUo
KSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1
ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMywgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZh
bHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDEpLT50eXBlKCksICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPnR5cGUo
KSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNo
aWxkKDIpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRh
dGVTdGFja0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6Cisg
ICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNo
Z1N1YjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICAgICAgICAgIGNhc2Ug
QXRvbWljWGNoZzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0No
aWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUt
Pm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT50eXBlKCkp
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGls
ZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkYXRl
U3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBEZXBlbmQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaGFz
RXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT50
eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBXYXNtQWRkcmVzczoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUt
PmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwpA
QCAtNTM3LDYgKzU4MSwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZUZlbmNlKFZhbHVlKiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+
KCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICBWQUxJREFU
RShtZW1vcnR5LT5hY2Nlc3NCYW5rKCkgPT0gR1AsICgiRmVuY2UgYXQgIiwgKm1lbW9yeSkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlQXRvbWljKFZhbHVlKiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSB2YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7
CisgICAgICAgIAorICAgICAgICBWQUxJREFURShiZXN0VHlwZShhdG9taWMtPm9wZXJhdGlvbldp
ZHRoKCkpID09IGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
IH0KIAogICAgIHZvaWQgdmFsaWRhdGVTdGFja0FjY2VzcyhWYWx1ZSogdmFsdWUpCiAgICAgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMjEyOTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MTAsNiArNTEwLDcgQEAgYm9vbCBWYWx1ZTo6cmV0dXJuc0Jvb2woKSBjb25zdAogICAgIGNh
c2UgQWJvdmVFcXVhbDoKICAgICBjYXNlIEJlbG93RXF1YWw6CiAgICAgY2FzZSBFcXVhbE9yVW5v
cmRlcmVkOgorICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgY2FzZSBQaGk6CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHN0b3J5IGhl
cmUuCkBAIC01ODksNiArNTkwLDcgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAg
ICAgY2FzZSBCZWxvd0VxdWFsOgogICAgIGNhc2UgRXF1YWxPclVub3JkZXJlZDoKICAgICBjYXNl
IFNlbGVjdDoKKyAgICBjYXNlIERlcGVuZDoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBEaXY6
CiAgICAgY2FzZSBVRGl2OgpAQCAtNjAwLDE2ICs2MDIsNDQgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZm
ZWN0cygpIGNvbnN0CiAgICAgY2FzZSBMb2FkOFM6CiAgICAgY2FzZSBMb2FkMTZaOgogICAgIGNh
c2UgTG9hZDE2UzoKLSAgICBjYXNlIExvYWQ6Ci0gICAgICAgIHJlc3VsdC5yZWFkcyA9IGFzPE1l
bW9yeVZhbHVlPigpLT5yYW5nZSgpOworICAgIGNhc2UgTG9hZDogeworICAgICAgICBNZW1vcnlW
YWx1ZSogbWVtb3J5ID0gYXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIHJlc3VsdC5yZWFkcyA9
IG1lbW9yeS0+cmFuZ2UoKTsKKyAgICAgICAgaWYgKG1lbW9yeS0+cGhhbnRvbVJhbmdlKCkpIHsK
KyAgICAgICAgICAgIHJlc3VsdC53cml0ZXMgPSBtZW1vcnktPnBoYW50b21SYW5nZSgpOworICAg
ICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICByZXN1bHQu
Y29udHJvbERlcGVuZGVudCA9IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNl
IFN0b3JlODoKICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgY2FzZSBTdG9yZToKLSAgICAgICAgcmVz
dWx0LndyaXRlcyA9IGFzPE1lbW9yeVZhbHVlPigpLT5yYW5nZSgpOworICAgIGNhc2UgU3RvcmU6
IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOworICAg
ICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5yYW5nZSgpOworICAgICAgICBpZiAobWVtb3J5
LT5waGFudG9tUmFuZ2UoKSkgeworICAgICAgICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5LT5w
aGFudG9tUmFuZ2UoKTsKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25n
Q0FTOgorICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6Cisg
ICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2Ug
QXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6IHsKKyAgICAgICAgTWVtb3J5VmFs
dWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICByZXN1bHQucmVhZHMgPSBt
ZW1vcnktPnJhbmdlKCkgfCBtZW1vcnktPnBoYW50b21SYW5nZSgpOworICAgICAgICByZXN1bHQu
d3JpdGVzID0gbWVtb3J5LT5yYW5nZSgpIHwgbWVtb3J0eS0+cGhhbnRvbVJhbmdlKCk7CisgICAg
ICAgIGlmIChtZW1vcnktPnBoYW50b21SYW5nZSgpKQorICAgICAgICAgICAgcmVzdWx0LmZlbmNl
ID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAg
ICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBXYXNtQWRkcmVzczoKICAgICAgICAgcmVzdWx0LnJl
YWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CkBAIC02MTcsMTggKzY0Nyw3IEBAIEVm
ZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgICAgICBjb25zdCBGZW5jZVZhbHVlKiBm
ZW5jZSA9IGFzPEZlbmNlVmFsdWU+KCk7CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IGZlbmNlLT5y
ZWFkOwogICAgICAgICByZXN1bHQud3JpdGVzID0gZmVuY2UtPndyaXRlOwotICAgICAgICAKLSAg
ICAgICAgLy8gUHJldmVudCBraWxsaW5nIG9mIGZlbmNlcyB0aGF0IGNsYWltIG5vdCB0byB3cml0
ZSBhbnl0aGluZy4gSXQncyBhIGJpdCB3ZWlyZCB0aGF0IHdlIHVzZQotICAgICAgICAvLyBsb2Nh
bCBzdGF0ZSBhcyB0aGUgd2F5IHRvIGRvIHRoaXMsIGJ1dCBpdCBoYXBwZW5zIHRvIHdvcms6IHdl
IG11c3QgYXNzdW1lIHRoYXQgd2UgY2Fubm90Ci0gICAgICAgIC8vIGtpbGwgd3JpdGVzTG9jYWxT
dGF0ZSB1bmxlc3Mgd2UgdW5kZXJzdGFuZHMgZXhhY3RseSB3aGF0IHRoZSBpbnN0cnVjdGlvbiBp
cyBkb2luZyAobGlrZQotICAgICAgICAvLyB0aGUgd2F5IHRoYXQgZml4U1NBIHVuZGVyc3RhbmRz
IFNldC9HZXQgYW5kIHRoZSB3YXkgdGhhdCByZWR1Y2VTdHJlbmd0aCBhbmQgb3RoZXJzCi0gICAg
ICAgIC8vIHVuZGVyc3RhbmQgVXBzaWxvbikuIFRoaXMgd291bGQgb25seSBiZWNvbWUgYSBwcm9i
bGVtIGlmIHdlIGhhZCBzb21lIGFuYWx5c2lzIHRoYXQgd2FzCi0gICAgICAgIC8vIGxvb2tpbmcg
dG8gdXNlIHRoZSB3cml0ZXNMb2NhbFN0YXRlIGJpdCB0byBpbnZhbGlkYXRlIGEgQ1NFIG92ZXIg
bG9jYWwgc3RhdGUgb3BlcmF0aW9ucy4KLSAgICAgICAgLy8gVGhlbiBhIEZlbmNlIHdvdWxkIGxv
b2sgYmxvY2ssIHNheSwgdGhlIGVsaW1pbmF0aW9uIG9mIGEgcmVkdW5kYW50IEdldC4gQnV0IGl0
IGxpa2UKLSAgICAgICAgLy8gdGhhdCdzIG5vdCBhdCBhbGwgaG93IG91ciBvcHRpbWl6YXRpb25z
IGZvciBTZXQvR2V0L1Vwc2lsb24vUGhpIHdvcmsgLSB0aGV5IGdyb2sgdGhlaXIKLSAgICAgICAg
Ly8gb3BlcmF0aW9ucyBkZWVwbHkgZW5vdWdoIHRoYXQgdGhleSBoYXZlIG5vIG5lZWQgdG8gY2hl
Y2sgdGhpcyBiaXQgLSBzbyB0aGlzIGNoZWF0IGlzCi0gICAgICAgIC8vIGZpbmUuCi0gICAgICAg
IHJlc3VsdC53cml0ZXNMb2NhbFN0YXRlID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LmZlbmNlID0g
dHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ0NhbGw6CkBAIC02OTQsNiAr
NzEzLDcgQEAgVmFsdWVLZXkgVmFsdWU6OmtleSgpIGNvbnN0CiAgICAgY2FzZSBDaGVjazoKICAg
ICBjYXNlIEJpdHdpc2VDYXN0OgogICAgIGNhc2UgTmVnOgorICAgIGNhc2UgRGVwZW5kOgogICAg
ICAgICByZXR1cm4gVmFsdWVLZXkoa2luZCgpLCB0eXBlKCksIGNoaWxkKDApKTsKICAgICBjYXNl
IEFkZDoKICAgICBjYXNlIFN1YjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBAIHB1YmxpYzoKICAgICAvLyB2YWx1ZXMg
d2l0aCBJZGVudGl0aWVzIG9uIGJvdHRvbSBjb25zdGFudHMuIEZvciB0aGlzIHJlYXNvbiwgdGhp
cyB0YWtlcyBhIGNhbGxiYWNrIHRoYXQgaXMKICAgICAvLyByZXNwb25zaWJsZSBmb3IgY3JlYXRp
bmcgYm90dG9tcy4gVGhlcmUncyBhIHV0aWxpdHkgZm9yIHRoaXMsIHNlZSBCM0JvdHRvbVByb3Zp
ZGVyLmguIFlvdQogICAgIC8vIGNhbiBhbHNvIGFjY2VzcyB0aGF0IHV0aWxpdHkgdXNpbmcgcmVw
bGFjZVdpdGhCb3R0b20oSW5zZXJ0aW9uU2V0Jiwgc2l6ZV90KS4KKyAgICAvLworICAgIC8vIFlv
dSdyZSBndWFyYW50ZWVkIHRoYXQgYm90dG9tIGlzIHplcm8uCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQm90dG9tUHJvdmlkZXI+CiAgICAgdm9pZCByZXBsYWNlV2l0aEJvdHRvbShjb25zdCBCb3R0
b21Qcm92aWRlciYpOwogICAgIApAQCAtMzIxLDYgKzMyMyw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgSVRvRjoKICAgICAgICAgY2FzZSBCaXR3aXNlQ2FzdDoKICAgICAgICAgY2FzZSBCcmFu
Y2g6CisgICAgICAgIGNhc2UgRGVwZW5kOgogICAgICAgICAgICAgaWYgKFVOTElLRUxZKG51bUFy
Z3MgIT0gMSkpCiAgICAgICAgICAgICAgICAgYmFkS2luZChraW5kLCBudW1BcmdzKTsKICAgICAg
ICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmNwcAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCwzOCBAQAogCiAjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CiAKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitUeXBlIGJlc3RUeXBl
KEJhbmsgYmFuaywgV2lkdGggd2lkdGgpCit7CisgICAgc3dpdGNoICh3aWR0aCkgeworICAgIGNh
c2UgV2lkdGg4OgorICAgIGNhc2UgV2lkdGgxNjoKKyAgICBjYXNlIFdpZHRoMzI6CisgICAgICAg
IHN3aXRjaCAoYmFuaykgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIElu
dDMyOworICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIEZsb2F0OworICAgICAg
ICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBWb2lkOworICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAg
ICAgIGNhc2UgR1A6CisgICAgICAgICAgICByZXR1cm4gSW50NjQ7CisgICAgICAgIGNhc2UgRlA6
CisgICAgICAgICAgICByZXR1cm4gRG91YmxlOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWb2lkOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBWb2lkOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwogbmFtZXNwYWNlIFdURiB7CiAKIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OkIzOjpXaWR0aCB3aWR0aCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzV2lkdGguaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzV2lkdGguaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOCBAQCBp
bmxpbmUgV2lkdGggd2lkdGhGb3JUeXBlKFR5cGUgdHlwZSkKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAorVHlwZSBiZXN0VHlwZShCYW5rIGJhbmssIFdpZHRoIHdpZHRoKTsKKwogaW5s
aW5lIFdpZHRoIGNvbnNlcnZhdGl2ZVdpZHRoKEJhbmsgYmFuaykKIHsKICAgICByZXR1cm4gYmFu
ayA9PSBHUCA/IHBvaW50ZXJXaWR0aCgpIDogV2lkdGg2NDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRp
b25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRl
IDx3dGYvQnViYmxlU29ydC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChDb2Rl
ICZjb2RlKQorICAgIDogR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0KGNvZGUubV9ibG9ja3MpCit7
Cit9CisKK0Jsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQoKQoreworfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9u
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9j
a0luc2VydGlvblNldC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJpY0Jsb2Nr
SXNuZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9JbnNl
cnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgSW5zZXJ0aW9uU2V0OworCit0eXBl
ZGVmIEdlbmVyaWNCbG9ja0luc2VydGlvblNldDxCYXNpY0Jsb2NrPjo6QmxvY2tJbnNlcnRpb24g
QmxvY2tJbnNlcnRpb247CisKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0IDogcHVibGljIEdlbmVy
aWNCbG9ja0luc2VydGlvblNldDxCYXNpY0Jsb2NrPiB7CitwdWJsaWM6CisgICAgQmxvY2tJbnNl
cnRpb25TZXQoQ29kZSYpOworICAgIH5CbG9ja0luc2VydGlvblNldCgpOworICAgIAorICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgZXZlbnR1YWxseSBpbXBsZW1lbnQgQjM6OkJsb2NrSW5zZXJ0aW9u
U2V0J3Mgc3BsaXRGb3J3YXJkKCkuCit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjY4LDI4ICs2NjgsMzYzIEBAIExvYWQ4IFU6Rzo4LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAg
ICAgSW5kZXgsIFRtcAogCitMb2FkQWNxOCBVOkc6OCwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAor
ICAgIEluZGV4LCBUbXAKKwogU3RvcmU4IFU6Rzo4LCBEOkc6OAogICAgIFRtcCwgSW5kZXgKICAg
ICBUbXAsIEFkZHIKICAgICB4ODY6IEltbSwgSW5kZXgKICAgICB4ODY6IEltbSwgQWRkcgogCitT
dG9yZVJlbDggVTpHOjgsIEQ6Rzo4CisgICAgVG1wLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAg
IHg4NjogSW1tLCBJbmRleAorICAgIHg4NjogSW1tLCBBZGRyCisKIExvYWQ4U2lnbmVkRXh0ZW5k
VG8zMiBVOkc6OCwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9h
ZEFjcThTaWduZWRFeHRlbmRUbzMyIFU6Rzo4LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAg
SW5kZXgsIFRtcAorCiBMb2FkMTYgVTpHOjE2LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAg
SW5kZXgsIFRtcAogCitMb2FkQWNxMTYgVTpHOjE2LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisg
ICAgSW5kZXgsIFRtcAorCiBMb2FkMTZTaWduZWRFeHRlbmRUbzMyIFU6RzoxNiwgWkQ6RzozMgog
ICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9hZEFjcTE2U2lnbmVkRXh0ZW5kVG8z
MiBVOkc6MTYsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIFN0b3Jl
MTYgVTpHOjE2LCBEOkc6MTYKICAgICBUbXAsIEluZGV4CiAgICAgVG1wLCBBZGRyCiAKK1N0b3Jl
QWNxMTYgVTpHOjE2LCBEOkc6MTYKKyAgICBUbXAsIEluZGV4CisgICAgVG1wLCBBZGRyCisKK0xv
YWRBY3EzMiBVOkc6MzIgWkQ6RzozMgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisgICAg
SW5kZXgsIFRtcAorCitTdG9yZVJlbDMyIFU6RzozMiBaRDpHOjMyCisgICAgVG1wLCBBZGRyCisg
ICAgVG1wLCBJbmRleAorICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisK
KzY0OiBMb2FkQWNxNjQgVTpHOjY0IFpEOkc6NjQKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRt
cAorICAgIEluZGV4LCBUbXAKKworNjQ6IFN0b3JlUmVsNjQgVTpHOjY0IFpEOkc6NjQKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IElt
bSwgSW5kZXgKKworIyBUaGUgZmlyc3Qgb3BlcmFuZCBpcyByYXguCit4ODY6IExvY2tDbXBYY2hn
OCBVRDpHOjgsIFU6Rzo4LCBVRDpHOjgsIFpEOkc6OAorICAgIFRtcCosIFRtcCwgQWRkciwgVG1w
CisgICAgVG1wKiwgVG1wLCBJbmRleCwgVG1wCisKK3g4NjogTG9ja0NtcFhjaGcxNiBVRDpHOjE2
LCBVOkc6MzIsIFVEOkc6MTYsIFpEOkc6OAorICAgIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAg
VG1wKiwgVG1wLCBJbmRleCwgVG1wCisKK3g4NjogTG9ja0NtcFhjaGczMiBVRDpHOjMyLCBVOkc6
MzIsIFVEOkc6MzIsIFpEOkc6OAorICAgIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAgVG1wKiwg
VG1wLCBJbmRleCwgVG1wCisKK3g4Nl82NDogTG9ja0NtcFhjaGc2NCBVRDpHOjY0LCBVOkc6NjQs
IFVEOkc6NjQsIFpEOkc6OAorICAgIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAgVG1wKiwgVG1w
LCBJbmRleCwgVG1wCisKK3g4NjogQnJhbmNoTG9ja0NtcFhjaGc4IFVEOkc6OCwgVTpHOjgsIFVE
Okc6OCAvYnJhbmNoCisgICAgVG1wKiwgVG1wLCBBZGRyCisgICAgVG1wKiwgVG1wLCBJbmRleAor
Cit4ODY6IEJyYW5jaExvY2tDbXBYY2hnMTYgVUQ6RzoxNiwgVTpHOjMyLCBVRDpHOjE2IC9icmFu
Y2gKKyAgICBUbXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJh
bmNoTG9ja0NtcFhjaGczMiBVRDpHOjMyLCBVOkc6MzIsIFVEOkc6MzIgL2JyYW5jaAorICAgIFRt
cCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgKKworeDg2XzY0OiBCcmFuY2hMb2Nr
Q21wWGNoZzY0IFVEOkc6NjQsIFU6Rzo2NCwgVUQ6Rzo2NCAvYnJhbmNoCisgICAgVG1wKiwgVG1w
LCBBZGRyCisgICAgVG1wKiwgVG1wLCBJbmRleAorCit4ODY6IExvY2tBZGQ4IFU6Rzo4LCBVRDpH
OjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1w
LCBJbmRleAorCit4ODY6IExvY2tBZGQxNiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIK
KyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExv
Y2tBZGQzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4Cisg
ICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IExvY2tBZGQ2NCBVOkc6NjQs
IFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisg
ICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tTdWI4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFk
ZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6
IExvY2tTdWIxNiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tTdWIzMiBVOkc6MzIs
IFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisg
ICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IExvY2tTdWI2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJ
bW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAor
Cit4ODY6IExvY2tBbmQ4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIElu
ZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tBbmQxNiBVOkc6
MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRy
CisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tBbmQzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJ
bW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAor
Cit4ODZfNjQ6IExvY2tBbmQ2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJ
bW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tPcjgg
VTpHOjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja09yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAg
SW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgK
KworeDg2OiBMb2NrT3IzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0s
IEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IExvY2tPcjY0
IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAs
IEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hvcjggVTpHOjgsIFVEOkc6OAorICAg
IEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4
CisKK3g4NjogTG9ja1hvcjE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIElt
bSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hvcjMy
IFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAs
IEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9ja1hvcjY0IFU6Rzo2NCwgVUQ6Rzo2
NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAs
IEluZGV4CisKK3g4NjogTG9ja05lZzggVUQ6Rzo4CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4
NjogTG9ja05lZzE2IFVEOkc6MTYKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBMb2NrTmVn
MzIgVUQ6RzozMgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODZfNjQ6IExvY2tOZWc2NCBVRDpH
OjY0CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogTG9ja05vdDggVUQ6Rzo4CisgICAgQWRk
cgorICAgIEluZGV4CisKK3g4NjogTG9ja05vdDE2IFVEOkc6MTYKKyAgICBBZGRyCisgICAgSW5k
ZXgKKworeDg2OiBMb2NrTm90MzIgVUQ6RzozMgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODZf
NjQ6IExvY2tOb3Q2NCBVRDpHOjY0CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogTG9ja1hB
ZGQ4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6
IExvY2tYQWRkMTYgVUQ6RzoxNiwgVUQ6RzoxNgorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5k
ZXgKKworeDg2OiBMb2NrWEFkZDMyIFVEOkc6MzIsIFVEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9ja1hBZGQ2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tYY2hnOCBVRDpHOjgsIFVEOkc6
OAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrWGNoZzE2IFVEOkc6
MTYsIFVEOkc6MTYKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hj
aGczMiBVRDpHOjMyLCBVRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4
ODZfNjQ6IExvY2tYY2hnNjQgVUQ6Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCwgQWRkcgorICAgIFRt
cCwgSW5kZXgKKworYXJtNjQ6IExvYWRMaW5rOCBVOkc6OCwgWkQ6Rzo4CisgICAgQWRkciwgVG1w
CisgICAgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmtBY3E4IFU6Rzo4LCBaRDpHOjgKKyAg
ICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQ4IFU6Rzo4LCBE
Okc6OCwgWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKwor
YXJtNjQ6IFN0b3JlQ29uZFJlbDggVTpHOjgsIEQ6Rzo4LCBaRDpHOjgKKyAgICBUbXAsIEFkZHIs
IFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmsxNiBVOkc6MTYsIFpE
Okc6MTYKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0Fj
cTE2IFU6RzoxNiwgWkQ6RzoxNgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJt
NjQ6IFN0b3JlQ29uZDE2IFU6RzoxNiwgRDpHOjE2LCBaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRt
cAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kUmVsMTYgVTpHOjE2LCBE
Okc6MTYsIFpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisK
K2FybTY0OiBMb2FkTGluazMyIFU6RzozMiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIElu
ZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rQWNxMzIgVTpHOjMyLCBaRDpHOjMyCisgICAgQWRk
ciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kMzIgVTpHOjMyLCBEOkc6
MzIsIFpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2Fy
bTY0OiBTdG9yZUNvbmRSZWwzMiBVOkc6MzIsIEQ6RzozMiwgWkQ6Rzo4CisgICAgVG1wLCBBZGRy
LCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rNjQgVTpHOjY0LCBa
RDpHOjY0CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmtB
Y3E2NCBVOkc6NjQsIFpEOkc6NjQKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2Fy
bTY0OiBTdG9yZUNvbmQ2NCBVOkc6NjQsIEQ6Rzo2NCwgWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBU
bXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDY0IFU6Rzo2NCwg
RDpHOjY0LCBaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAor
Cithcm02NDogRGVwZW5kMzIgVTpHOjMyLCBEOkc6MzIKKyAgICBUbXAsIFRtcAorCithcm02NDog
RGVwZW5kNjQgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcAorCiBDb21wYXJlMzIgVTpHOjMy
LCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogICAgIFJlbENvbmQsIFRtcCwgVG1wLCBUbXAKICAg
ICBSZWxDb25kLCBUbXAsIEltbSwgVG1wCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302787</attachid>
            <date>2017-02-26 12:57:03 -0800</date>
            <delta_ts>2017-02-26 16:22:05 -0800</delta_ts>
            <desc>wrote some more isel</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>104135</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMSBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OwogCQkwRjJENERERDE5ODMyRDM0MDA3RDRC
MTkgLyogRGVidWdnZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJENEREQjE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5j
cHAgKi87IH07CiAJCTBGMkQ0RERFMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJENEREQzE5
ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkQ0REU4MTk4MzJEQUMwMDdENEIxOSAvKiBU
b1RoaXNTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyRDRERTUxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5jcHAgKi87IH07
CkBAIC0yNzY0LDYgKzI3NjksMTEgQEAKIAkJMEYyQzYzQUMxRTYwQUUzQzAwQzEzODM5IC8qIEIz
QmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhbmsuaDsgcGF0aCA9
IGIzL0IzQmFuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNjNBRDFFNjBB
RTNDMDBDMTM4MzkgLyogQjNXaWR0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM1dpZHRoLmNwcDsgcGF0aCA9IGIzL0IzV2lkdGguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjJDNjNBRTFFNjBBRTNEMDBDMTM4MzkgLyogQjNXaWR0aC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dpZHRoLmg7IHBhdGggPSBiMy9CM1dp
ZHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0IzMUU2MzQzRTgwMEMx
MzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzQXRvbWljVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBdG9taWNWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBC
M0F0b21pY1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQXRvbWlj
VmFsdWUuaDsgcGF0aCA9IGIzL0IzQXRvbWljVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0
aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCOTFFNjM0NDA4MDBDMTM4MzkgLyog
QWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0FpckJsb2NrSW5z
ZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQkExRTYz
NDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWly
QmxvY2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDRE
REIxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVidWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkQ0RERDMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQ
cm9maWxlckxvZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTI5Miw2ICs1MzAyLDggQEAKIAkJCQkwRkVD
ODRCMzFCREFDRDg4MDA4MEZGNzQgLyogYWlyICovLAogCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovLAogCQkJCTBGRUM4NEI1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCAqLywKKwkJCQkwRjJDNjNCMzFFNjM0M0U4
MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5jcHAgKi8sCisJCQkJMEYyQzYzQjQxRTYzNDNFODAw
QzEzODM5IC8qIEIzQXRvbWljVmFsdWUuaCAqLywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4
MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJCQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNC
YW5rLmggKi8sCiAJCQkJMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5j
cHAgKi8sCkBAIC01MzU0LDYgKzUzNjYsNyBAQAogCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4NENFMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyog
QjNHZW5lcmF0ZS5oICovLAorCQkJCTBGMkM2M0I1MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0dlbmVy
aWNCbG9ja0luc2VydGlvblNldC5oICovLAogCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCAqLywKIAkJCQkwRkVDODVCRjFCRTE2N0EwMDA4
MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3BwICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3
NCAvKiBCM0hlYXBSYW5nZS5oICovLApAQCAtNTQ2OSw2ICs1NDgyLDggQEAKIAkJCQkwRjY0RUFG
MjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFD
REM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgw
MEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYz
NDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIx
QkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYx
ODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC03
OTU2LDYgKzc5NzEsNyBAQAogCQkJCTBGRUM4NTgwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU4MTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5z
dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREY2N0Q3MUQ5REM0NDIwMDFCOTgyNSAv
KiBBaXJLaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJDNjNCQzFFNjM0NDBDMDBDMTM4Mzkg
LyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2ODRENDM4MUMw
MDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMzRD
MUExQzRCMzlBRTAwMDNBNTEyIC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjE4MzJGMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxs
b2MuaCBpbiBIZWFkZXJzICovLApAQCAtODA0Nyw2ICs4MDYzLDcgQEAKIAkJCQk0MzQyMkE2MzFD
MTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NUIzMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMzM4REY2MUJFOTNENTUwMDEzQzg4RiAvKiBCM0NvbnN0cmFpbmVkVmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVy
aWNCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhFMEUxQkYwMjc2
QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzNGQ0ZD
MUMxNjI1QkUwMDMyM0Y2NyAvKiBCM0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NkI4QUQ5MUM0RUREQTIwMDk2OTA1MiAvKiBCM0R1cGxpY2F0ZVRhaWxzLmggaW4gSGVhZGVycyAq
LywKQEAgLTgzNjYsNiArODM4Myw3IEBACiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8q
IERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1
NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFu
dG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYw
MEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3
RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjQ4LDYg
KzEwMjY2LDcgQEAKIAkJCQk5RTcyOTQwNzE5MEYwMUE1MDAxQTkxQjUgLyogSW5pdGlhbGl6ZVRo
cmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1QUQg
LyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxNEIyQzIxODVBNjg0
NDAwRjNDN0NCIC8qIEluamVjdGVkU2NyaXB0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjJDNjNCNjFFNjM0M0VBMDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNThFMzU5MTE4NjBERUNGMDAxRjI0RkUgLyogSW5qZWN0ZWRTY3JpcHRIb3N0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUNBMTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4NDBFMjAxODdCN0I4NjAw
ODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAy
NjYsNiArMTAyODUsNyBAQAogCQkJCUUzNUUwMzVGMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzOEIx
ODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNTBFNEI2MTE4ODA5REQ1MDA2OEE0NkQgLyogSW5zcGVjdG9yUnVudGltZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBB
aXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTUxNjVEMjFCREYw
Qjk4MDAzQjc1QzEgLyogSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNTkzQ0Y4MjE4NDAzNzcxMDBCRkNFMjcgLyogSW5zcGVjdG9yVmFsdWVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNGMTA3RUMzNzYwMDQyN0E0OCAvKiBJbnRlcm5h
bEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQXRvbWljVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQXRvbWljVmFsdWU6On5B
dG9taWNWYWx1ZSgpCit7Cit9CisKK1dpZHRoIEF0b21pY1ZhbHVlOjphY2Nlc3NXaWR0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fd2lkdGg7Cit9CisKK3ZvaWQgQXRvbWljVmFsdWU6OmR1bXBN
ZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KGNvbW1hLCAid2lkdGggPSAiLCBtX3dpZHRoKTsKKyAgICAKKyAgICBNZW1vcnlW
YWx1ZTo6ZHVtcE1ldGEoY29tbWEsIG91dCk7Cit9CisKK1ZhbHVlKiBBdG9taWNWYWx1ZTo6Y2xv
bmVJbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IEF0b21pY1ZhbHVlKCp0aGlzKTsKK30K
KworQXRvbWljVmFsdWU6OkF0b21pY1ZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgV2lk
dGggd2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQg
PSAwKQorICAgIDogTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgb3BlcmFuZC0+dHlw
ZSgpLCBvcmlnaW4sIG9mZnNldCwgb3BlcmFuZCwgcG9pbnRlcikKKyAgICAsIG1fd2lkdGgod2lk
dGgpCit7CisgICAgc2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBB
U1NFUlQoYmVzdFR5cGUob3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKyAg
ICAKKyAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6
CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNh
c2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9t
aWNYY2hnOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK0F0b21pY1ZhbHVlOjpBdG9taWNWYWx1ZShLaW5kIGtp
bmQsIE9yaWdpbiBvcmlnaW4sIFdpZHRoIHdpZHRoLCBWYWx1ZSogZXhwZWN0ZWRWYWx1ZSwgVmFs
dWUqIG5ld1ZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDog
TWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwga2luZC5vcGNvZGUoKSA9PSBBdG9taWNX
ZWFrQ0FTID8gSW50MzIgOiBleHBlY3RlZFZhbHVlLT50eXBlKCksIG9yaWdpbiwgb2Zmc2V0LCBl
eHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSwgcG9pbnRlcikKKyAgICAsIG1fd2lkdGgod2lkdGgpCit7
CisgICAgc2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBBU1NFUlQo
YmVzdFR5cGUob3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKworICAgIHN3
aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNl
IEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQXRvbWljVmFsdWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisj
aW5jbHVkZSAiQjNXaWR0aC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQXRvbWljVmFsdWUgOiBwdWJsaWMgTWVtb3J5VmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzQXRvbWljKGtpbmQub3Bjb2RlKCkpOworICAgIH0KKyAgICAKKyAgICB+
QXRvbWljVmFsdWUoKTsKKyAgICAKKyAgICBUeXBlIG9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJl
dHVybiBjaGlsZCgwKS0+dHlwZSgpOyB9CisgICAgCisgICAgV2lkdGggb3BlcmF0aW9uV2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgCisgICAgLy8gU3lub255bSBmb3Igd2lk
dGgoKSwgaWYgeW91J3JlIGFjY2Vzc2luZyB2aWEgTWVtb3J5VmFsdWUuCisgICAgV2lkdGggYWNj
ZXNzV2lkdGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1
bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
CisgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIEF0b21pY1ZhbHVlKEtpbmQs
IE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBv
ZmZzZXQgPSAwKTsKKyAgICAKKyAgICBBdG9taWNWYWx1ZShLaW5kLCBPcmlnaW4sIFdpZHRoLCBW
YWx1ZSogZXhwZWN0ZWRWYWx1ZSwgVmFsdWUqIG5ld1ZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50
MzJfdCBvZmZzZXQgPSAwKTsKKyAgICAKKyAgICBXaWR0aCBtX3dpZHRoOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2Vy
dGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMzUgKzM2LDEzIEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKIAogQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0
KFByb2NlZHVyZSAmcHJvYykKLSAgICA6IG1fcHJvYyhwcm9jKQorICAgIDogR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0KHByb2MubV9ibG9ja3MpCisgICAgLCBtX3Byb2MocHJvYykKIHsKIH0KIAog
QmxvY2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsgfQogCi12b2lkIEJsb2Nr
SW5zZXJ0aW9uU2V0OjppbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCi17Ci0gICAg
bV9pbnNlcnRpb25zLmFwcGVuZChXVEZNb3ZlKGluc2VydGlvbikpOwotfQotCi1CYXNpY0Jsb2Nr
KiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVl
bmN5KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNC
bG9jayhVSU5UX01BWCwgZnJlcXVlbmN5KSk7Ci0gICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxv
Y2suZ2V0KCk7Ci0gICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2Nr
KSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9u
U2V0OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5KQot
ewotICAgIHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVl
bmN5ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVuY3koKSk7Ci19Ci0KLUJhc2ljQmxvY2sq
IEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91Ymxl
IGZyZXF1ZW5jeSkKLXsKLSAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJl
cXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7Ci19
Ci0KIEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjpzcGxpdEZvcndhcmQoCiAgICAgQmFz
aWNCbG9jayogYmxvY2ssIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqIGluc2Vy
dGlvblNldCwgZG91YmxlIGZyZXF1ZW5jeSkKIHsKQEAgLTEwMiwzMiArODAsNiBAQCBCYXNpY0Js
b2NrKiBCbG9ja0luc2VydGlvblNldDo6c3BsaXRGb3J3CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgpCi17Ci0gICAgaWYgKG1faW5zZXJ0
aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBXZSBh
bGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5l
ZWQgdG8gc29ydCB0aGVtIGJlZm9yZQotICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0
aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8g
YmUKLSAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCi0gICAgYnViYmxlU29ydCht
X2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKLQotICAgIGV4ZWN1dGVJ
bnNlcnRpb25zKG1fcHJvYy5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKLSAgICAKLSAgICAvLyBQ
cnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0
IGl0J3MKLSAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5n
LgotICAgIG1fcHJvYy5tX2Jsb2Nrcy5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgWyZdIChz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4mIGJsb2NrUHRyKSAtPiBib29sIHsKLSAgICAgICAg
ICAgIHJldHVybiAhYmxvY2tQdHI7Ci0gICAgICAgIH0pOwotICAgIAotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9wcm9jLm1fYmxvY2tzLnNpemUoKTsgKytpKQotICAgICAgICBtX3By
b2MubV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQot
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5z
ZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCIKICNp
bmNsdWRlICJCM1Byb2NlZHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zNSwyNiArMzYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEluc2VydGlvblNldDsKIAotdHlwZWRlZiBXVEY6Okluc2Vy
dGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOwordHlwZWRl
ZiBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz46OkJsb2NrSW5zZXJ0aW9uIEJs
b2NrSW5zZXJ0aW9uOwogCi1jbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitjbGFzcyBCbG9ja0lu
c2VydGlvblNldCA6IHB1YmxpYyBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz4g
ewogcHVibGljOgogICAgIEJsb2NrSW5zZXJ0aW9uU2V0KFByb2NlZHVyZSYpOwogICAgIH5CbG9j
a0luc2VydGlvblNldCgpOwogICAgIAotICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYp
OwotCi0gICAgLy8gSW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCi0gICAgQmFz
aWNCbG9jayogaW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7
Ci0KLSAgICAvLyBJbnNlcnRzIGEgbmV3IGJsb2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVz
dWFsbHkgeW91IHdpbGwgbm90IHBhc3MgdGhlIGZyZXF1ZW5jeQotICAgIC8vIGFyZ3VtZW50LiBQ
YXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRvIGp1c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdi
ZWZvcmUnIGJsb2NrLiBUaGF0J3MKLSAgICAvLyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCi0gICAg
QmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1
ZW5jeSA9IFBOYU4pOwotCi0gICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2
ZW4gYmxvY2suCi0gICAgQmFzaWNCbG9jayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIs
IGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLQogICAgIC8vIEEgaGVscGVyIHRvIHNwbGl0IGEg
YmxvY2sgd2hlbiBmb3J3YXJkIGl0ZXJhdGluZyBvdmVyIGl0LiBJdCBjcmVhdGVzIGEgbmV3IGJs
b2NrIHRvIGhvbGQKICAgICAvLyBldmVyeXRoaW5nIGJlZm9yZSB0aGUgaW5zdHJ1Y3Rpb24gYXQg
dmFsdWVJbmRleC4gVGhlIGN1cnJlbnQgYmxvY2sgaXMgbGVmdCB3aXRoCiAgICAgLy8gZXZlcnl0
aGluZyBhdCBhbmQgYWZ0ZXIgdmFsdWVJbmRleC4gSWYgdGhlIG9wdGlvbmFsIEluc2VydGlvblNl
dCBpcyBwcm92aWRlZCwgaXQgd2lsbCBnZXQKQEAgLTgwLDEyICs2OCw5IEBAIHB1YmxpYzoKICAg
ICBCYXNpY0Jsb2NrKiBzcGxpdEZvcndhcmQoCiAgICAgICAgIEJhc2ljQmxvY2sqLCB1bnNpZ25l
ZCYgdmFsdWVJbmRleCwgSW5zZXJ0aW9uU2V0KiA9IG51bGxwdHIsCiAgICAgICAgIGRvdWJsZSBm
cmVxdWVuY3kgPSBQTmFOKTsKLSAgICAKLSAgICBib29sIGV4ZWN1dGUoKTsKIAogcHJpdmF0ZToK
ICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKLSAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1f
aW5zZXJ0aW9uczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3
ICs4Miw4IEBAIGJvb2wgRWZmZWN0czo6aW50ZXJmZXJlcyhjb25zdCBFZmZlY3RzJiAKICAgICAg
ICAgfHwgaW50ZXJmZXJlc1dpdGhXcml0ZXNQaW5uZWQob3RoZXIsICp0aGlzKQogICAgICAgICB8
fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIud3JpdGVzKQogICAgICAgICB8fCB3cml0ZXMub3Zlcmxh
cHMob3RoZXIucmVhZHMpCi0gICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcyk7
CisgICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKKyAgICAgICAgfHwgKGZl
bmNlICYmIG90aGVyLmZlbmNlKTsKIH0KIAogYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0
IEVmZmVjdHMmIG90aGVyKSBjb25zdApAQCAtOTUsNyArOTYsOCBAQCBib29sIEVmZmVjdHM6Om9w
ZXJhdG9yPT0oY29uc3QgRWZmZWN0cyYgCiAgICAgICAgICYmIHdyaXRlc1Bpbm5lZCA9PSBvdGhl
ci53cml0ZXNQaW5uZWQKICAgICAgICAgJiYgcmVhZHNQaW5uZWQgPT0gb3RoZXIucmVhZHNQaW5u
ZWQKICAgICAgICAgJiYgd3JpdGVzID09IG90aGVyLndyaXRlcwotICAgICAgICAmJiByZWFkcyA9
PSBvdGhlci5yZWFkczsKKyAgICAgICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHMKKyAgICAgICAg
JiYgZmVuY2UgPT0gb3RoZXIuZmVuY2U7CiB9CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3IhPShj
b25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAgLTEyMCw2ICsxMjIsOCBAQCB2b2lkIEVmZmVj
dHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
IldyaXRlc1Bpbm5lZCIpOwogICAgIGlmIChyZWFkc1Bpbm5lZCkKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiUmVhZHNQaW5uZWQiKTsKKyAgICBpZiAoZmVuY2UpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIkZlbmNlIik7CiAgICAgaWYgKHdyaXRlcykKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiV3JpdGVzOiIsIHdyaXRlcyk7CiAgICAgaWYgKHJlYWRzKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBA
QCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MzE3MwogICAgIGJvb2wgcmVhZHNQaW5uZWQgeyBmYWxzZSB9OwogICAgIGJv
b2wgd3JpdGVzUGlubmVkIHsgZmFsc2UgfTsKKyAgICAKKyAgICAvLyBNZW1vcnkgZmVuY2VzIGNh
bm5vdCBiZSByZW9yZGVyZWQgYXJvdW5kIGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVpciBl
ZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQKKyAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEgbWVt
b3J5IGZlbmNlLgorICAgIGJvb2wgZmVuY2UgeyBmYWxzZSB9OwogCiAgICAgSGVhcFJhbmdlIHdy
aXRlczsKICAgICBIZWFwUmFuZ2UgcmVhZHM7CkBAIC04OSw2ICs5Myw3IEBAIHN0cnVjdCBFZmZl
Y3RzIHsKICAgICAgICAgcmVzdWx0LnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKICAgICAgICAg
cmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LndyaXRlc1Bpbm5lZCA9
IHRydWU7CisgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCkBAIC0xMDMsNyArMTA4LDcgQEAgc3RydWN0IEVmZmVjdHMgewogCiAgICAg
Ym9vbCBtdXN0RXhlY3V0ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gdGVybWluYWwg
fHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQ
aW5uZWQ7CisgICAgICAgIHJldHVybiB0ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRl
c0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8IHdyaXRlc1Bpbm5lZCB8fCBmZW5jZTsKICAgICB9CiAK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0aGVz
ZSByZXNwZWN0aXZlIGVmZmVjdHMgd291bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NDIsNiArMTQyLDcgQEAgc3RydWN0IEltcHVyZUJsb2NrRGF0YSB7CiAKICAgICBSYW5nZVNldDxI
ZWFwUmFuZ2U+IHJlYWRzOyAvLyBUaGlzIG9ubHkgZ2V0cyB1c2VkIGZvciBmb3J3YXJkIHN0b3Jl
IGVsaW1pbmF0aW9uLgogICAgIFJhbmdlU2V0PEhlYXBSYW5nZT4gd3JpdGVzOyAvLyBUaGlzIGdl
dHMgdXNlZCBmb3IgYm90aCBsb2FkIGFuZCBzdG9yZSBlbGltaW5hdGlvbi4KKyAgICBib29sIGZl
bmNlOwogCiAgICAgTWVtb3J5VmFsdWVNYXAgc3RvcmVzQXRIZWFkOwogICAgIE1lbW9yeVZhbHVl
TWFwIG1lbW9yeVZhbHVlc0F0VGFpbDsKQEAgLTE3NCwxMiArMTc1LDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobWVtb3J5ICYmIG1lbW9yeS0+aXNT
dG9yZSgpCiAgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLnJlYWRzLm92ZXJsYXBzKG1lbW9y
eS0+cmFuZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIWRhdGEud3JpdGVzLm92ZXJsYXBz
KG1lbW9yeS0+cmFuZ2UoKSkpCisgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRlcy5v
dmVybGFwcyhtZW1vcnktPnJhbmdlKCkpCisgICAgICAgICAgICAgICAgICAgICYmICghZGF0YS5m
ZW5jZSB8fCAhbWVtb3J5LT5oYXNGZW5jZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5z
dG9yZXNBdEhlYWQuYWRkKG1lbW9yeSk7CiAgICAgICAgICAgICAgICAgZGF0YS5yZWFkcy5hZGQo
ZWZmZWN0cy5yZWFkcyk7CiAKICAgICAgICAgICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9
IGVmZmVjdHMud3JpdGVzKQogICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGRhdGEsIHdyaXRl
cyk7CisgICAgICAgICAgICAgICAgZGF0YS5mZW5jZSB8PSBlZmZlY3RzLmZlbmNlOwogCiAgICAg
ICAgICAgICAgICAgaWYgKG1lbW9yeSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZW1vcnlW
YWx1ZXNBdFRhaWwuYWRkKG1lbW9yeSk7CkBAIC00NzgsNiArNDgxLDkgQEAgcHJpdmF0ZToKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CiAgICAgYm9vbCBmaW5kU3RvcmVBZnRlckNsb2Ji
ZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKICAg
ICB7CisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBl
bGltaW5hdGUgYSBzdG9yZSBpZiBldmVyeSBmb3J3YXJkIHBhdGggaGl0cyBhIHN0b3JlIHRvIHRo
ZSBzYW1lIGxvY2F0aW9uIGJlZm9yZQogICAgICAgICAvLyBoaXR0aW5nIGFueSBvcGVyYXRpb24g
dGhhdCBvYnNlcnZlcyB0aGUgc3RvcmUuIFRoaXMgc2VhcmNoIHNlZW1zIGxpa2UgaXQgc2hvdWxk
IGJlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSwgYnV0IGluIHRoZSBvdmVyd2hlbG1pbmcgbWFqb3Jp
dHkgb2YgY2FzZXMgaXQgd2lsbCBhbG1vc3QgaW1tZWRpYXRlbHkgaGl0IGFuIApAQCAtNjE0LDYg
KzYyMCwxMiBAQCBwcml2YXRlOgogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRh
dGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcgYmFja3dhcmQgZm9yICIsICpwdHIsICIuLi5cbiIp
OwogICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNG
ZW5jZSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgR2l2aW5nIHVwIGJlY2F1c2UgZmVuY2VzLlxuIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSog
bWF0Y2ggPSBtX2RhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmZpbmQocHRyLCBmaWx0ZXIpKSB7CiAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRm91
bmQgIiwgKm1hdGNoLCAiIGxvY2FsbHkuXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNyBAQCB2
b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MDcKICAgICB9CiAKKyAgICAv
LyBUaGlzIHB1dHMgdGhlIElSIGluIHF1aXJrcyBtb2RlLgogICAgIGxvd2VyTWFjcm9zKHByb2Nl
ZHVyZSk7CiAKICAgICBpZiAob3B0TGV2ZWwgPj0gMSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0
aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEluc2Vy
dGlvblNldDsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2NsYXNzIEdlbmVyaWNC
bG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBXVEY6Okluc2VydGlvbjxz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOworICAgIAorICAgIEJs
b2NrSW5zZXJ0aW9uU2V0KFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9j
a3MpCisgICAgICAgIDogbV9ibG9ja3MoYmxvY2tzKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dm9pZCBpbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCisgICAgeworICAgICAgICBt
X2luc2VydGlvbnMuYXBwZW5kKFdURk1vdmUoaW5zZXJ0aW9uKSk7CisgICAgfQorCisgICAgLy8g
SW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCisgICAgQmFzaWNCbG9jayogaW5z
ZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTikKKyAgICB7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhVSU5U
X01BWCwgZnJlcXVlbmN5KSk7CisgICAgICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdl
dCgpOworICAgICAgICBpbnNlcnQoQmxvY2tJbnNlcnRpb24oaW5kZXgsIFdURk1vdmUoYmxvY2sp
KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gSW5zZXJ0cyBhIG5l
dyBibG9jayBiZWZvcmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNz
IHRoZSBmcmVxdWVuY3kKKyAgICAvLyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0
byBqdXN0IHVzZSB0aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCisg
ICAgLy8gdXN1YWxseSB3aGF0IHlvdSB3YW50LgorICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9y
ZShCYXNpY0Jsb2NrKiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGluc2VydChiZWZvcmUtPmluZGV4KCksIGZyZXF1ZW5jeSA9PSBmcmVxdWVu
Y3kgPyBmcmVxdWVuY3kgOiBiZWZvcmUtPmZyZXF1ZW5jeSgpKTsKKyAgICB9CisKKyAgICAvLyBJ
bnNlcnRzIGEgbmV3IGJsb2NrIGFmdGVyIHRoZSBnaXZlbiBibG9jay4KKyAgICBCYXNpY0Jsb2Nr
KiBpbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4p
CisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJlcXVl
bmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7CisgICAg
fQorCisgICAgYm9vbCBleGVjdXRlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2luc2VydGlvbnMu
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAg
Ly8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNv
LCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBiZWZvcmUKKyAgICAgICAgLy8gcnVubmluZyBXVEY6OmV4
ZWN1dGVJbnNlcnRpb25zLiBXZSBzdHJvbmdseSBwcmVmZXIgYSBzdGFibGUgc29ydCBhbmQgd2Ug
d2FudCBpdCB0byBiZQorICAgICAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCisg
ICAgICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQo
KSk7CisgICAgICAgIAorICAgICAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX2Jsb2NrcywgbV9pbnNl
cnRpb25zKTsKKyAgICAgICAgCisgICAgICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRyaWVzLiBU
aGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgICAgICAvLyBoZWFsdGh5
IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgICAgICBtX2Jsb2Nrcy5y
ZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEJhc2lj
QmxvY2s+JiBibG9ja1B0cikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFibG9j
a1B0cjsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGhlIGJsb2NrcyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2Jsb2Nr
c1tpXS0+bV9pbmRleCA9IGk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4mIG1f
YmxvY2tzOworICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHJldmlzaW9uIDIxMjk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04OCw2ICs4OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKICAgICB9CiAgICAgCisgICAgSGVhcFJhbmdlIG9wZXJhdG9yfChjb25zdCBIZWFw
UmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgKKyAg
ICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAgICAgICAgICAg
c3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAogICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9CiAKICAg
ICB1bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU4LDYgKzU4LDExIEBAIFZhbHVlKiBJbnNlcnRpb25TZXQ6Omluc2VydEJv
dHRvbShzaXplX3QKICAgICByZXR1cm4gaW5zZXJ0Qm90dG9tKGluZGV4LCBsaWtlVmFsdWUtPm9y
aWdpbigpLCBsaWtlVmFsdWUtPnR5cGUoKSk7CiB9CiAKK1ZhbHVlKiBJbnNlcnRpb25TZXQ6Omlu
c2VydENsb25lKHNpemVfdCBpbmRleCwgVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBpbnNl
cnRWYWx1ZShpbmRleCwgbV9wcm9jZWR1cmUuY2xvbmUodmFsdWUpKTsKK30KKwogdm9pZCBJbnNl
cnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgYnViYmxlU29ydCht
X2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzEsNiArNzEsOCBAQCBwdWJsaWM6CiAKICAgICBWYWx1ZSogaW5zZXJ0Qm90dG9tKHNpemVf
dCBpbmRleCwgT3JpZ2luLCBUeXBlKTsKICAgICBWYWx1ZSogaW5zZXJ0Qm90dG9tKHNpemVfdCBp
bmRleCwgVmFsdWUqKTsKKyAgICAKKyAgICBWYWx1ZSogaW5zZXJ0Q2xvbmUoc2l6ZV90IGluZGV4
LCBWYWx1ZSopOwogCiAgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIHJ1bigpCiAgICAg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wcm9jLmhhc1F1aXJrcygpKTsKKyAgICAgICAg
CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAg
IG1fYmxvY2sgPSBibG9jazsKICAgICAgICAgICAgIHByb2Nlc3NDdXJyZW50QmxvY2soKTsKQEAg
LTcyLDYgKzc0LDkgQEAgcHVibGljOgogICAgICAgICAgICAgbV9wcm9jLnJlc2V0UmVhY2hhYmls
aXR5KCk7CiAgICAgICAgICAgICBtX3Byb2MuaW52YWxpZGF0ZUNGRygpOwogICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBtX3Byb2Muc2V0SGFzUXVpcmtzKHRydWUpOworICAgICAgICAKICAg
ICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgICB9CiAgICAgCkBAIC0xODUsNyArMTkwLDczIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbG9hZC1sb2FkIGZlbmNlLiBUaGlzIGNvZGVnZW5zIHRv
IG5vdGhpbmcgb24gWDg2LiBXZSB1c2UgaXQgdG8gdGVsbCB0aGUKKyAgICAgICAgICAgICAgICAg
ICAgLy8gY29tcGlsZXIgbm90IHRvIGJsb2NrIGxvYWQgbW90aW9uLgorICAgICAgICAgICAgICAg
ICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxGZW5jZVZhbHVl
PihtX2luZGV4LCBtX29yaWdpbik7CisgICAgICAgICAgICAgICAgICAgIGZlbmNlLT5yZWFkID0g
SGVhcFJhbmdlKCk7CisgICAgICAgICAgICAgICAgICAgIGZlbmNlLT53cml0ZSA9IEhlYXBSYW5n
ZTo6dG9wKCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBL
aWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNob3VsZCB1bmxvY2sgYSBidW5jaCBvZiBjb2RlIHNpbXBs
aWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoQm90dG9t
KG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICBjYXNlIEF0b21p
Y1dlYWtDQVM6CisgICAgICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzogeworICAgICAgICAg
ICAgICAgIGlmIChpc1g4NigpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+
YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICAgICAgV2lkdGggd2lkdGggPSBhdG9taWMt
Pm9wZXJhdGlvbldpZHRoKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KGlzQ2Fub25pY2FsV2lkdGgod2lkdGgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYWx1ZSogZXhwZWN0ZWRWYWx1ZSA9IGF0
b21pYy0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gT24g
QVJNLCB0aGUgbG9hZCBwYXJ0IG9mIHRoZSBDQVMgZG9lcyBhIGxvYWQgd2l0aCB6ZXJvIGV4dGVu
c2lvbi4gVGhlcmVmb3JlLCB3ZSBuZWVkCisgICAgICAgICAgICAgICAgLy8gdG8gemVyby1leHRl
bmQgdGhlIGlucHV0LgorICAgICAgICAgICAgICAgIFZhbHVlKiBtYXNrZWRFeHBlY3RlZFZhbHVl
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgbV9p
bmRleCwgQml0QW5kLCBtX29yaWdpbiwgZXhwZWN0ZWRWYWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0SW50Q29uc3RhbnQobV9pbmRleCwgZXhwZWN0ZWRWYWx1
ZSwgbWFzayh3aWR0aCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdG9t
aWMtPmNoaWxkKDApID0gbWFza2VkRXhwZWN0ZWRWYWx1ZTsKKyAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgICAgICAg
ICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnT3I6Cisg
ICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hj
aGdYb3I6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGc6IHsKKyAgICAgICAgICAgICAgICAv
LyBPbiBYODYsIHRoZXNlIGFjdHVhbGx5IHJldHVybiBnYXJiYWdlIGluIHRoZSBoaWdoIGJpdHMu
IE9uIEFSTTY0LCB0aGVzZSBzb3J0YQorICAgICAgICAgICAgICAgIC8vIHplcm8tZXh0ZW5kIHRo
ZWlyIGhpZ2ggYml0cywgZXhjZXB0IHRoYXQgdGhlIGhpZ2ggYml0cyBtaWdodCBnZXQgcG9sbHV0
ZWQgYnkgaGlnaAorICAgICAgICAgICAgICAgIC8vIGJpdHMgaW4gdGhlIG9wZXJhbmQuIC4gU28s
IGVpdGhleSB3YXksIHdlIG5lZWQgdG8gdGhyb3cgYSBzaWduLWV4dGVuZCBvbiB0aGVzZQorICAg
ICAgICAgICAgICAgIC8vIHRoaW5ncy4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAg
ICAgICAgICAgICAgV2lkdGggd2lkdGggPSBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzQ2Fub25pY2FsV2lkdGgod2lkdGgp
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBWYWx1ZSogbmV3VmFsdWUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAor
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBzaWduRXh0ZW5kT3Bjb2RlKHdpZHRoKSwgbV9v
cmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENsb25lKG1f
aW5kZXgsIG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
TWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHAJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zQWZ0ZXJP
cHRpbWl6YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDE1ICsxNTYsMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGNhc2UgUm90TDogewogICAgICAgICAgICAgICAgIC8vIEFSTTY0
IGRvZXNuJ3QgaGF2ZSBhIHJvdGF0ZSBsZWZ0LgogICAgICAgICAgICAgICAgIGlmIChpc0FSTTY0
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgVmFsdWUqIG5ld1NoaWZ0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PihtX2luZGV4LCBOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogcm90YXRlID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPihtX2luZGV4LCBSb3RSLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hp
bGQoMCksIG5ld1NoaWZ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxh
Y2VXaXRoSWRlbnRpdHkocm90YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTaGlm
dCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgTmVnLCBtX3ZhbHVlLT5v
cmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSog
cm90YXRlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBSb3RSLCBtX3Zh
bHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG5ld1NoaWZ0KTsKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyb3RhdGUpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Miw2ICs3MiwxNCBAQCBuYW1lc3BhY2UgewogCiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKIAorLy8gRklYTUU6IFdlIHdvdWxkbid0IG5lZWQgdGhpcyBpZiBBaXIgc3VwcG9ydGVkIFdp
ZHRoIG1vZGlmaWVycyBpbiBBaXI6OktpbmQuCisvLyBPT1BTISEhIChuZWVkIGEgYnVnIFVSTCkK
KyNkZWZpbmUgT1BDT0RFX0ZPUl9XSURUSChvcGNvZGUsIHdpZHRoKSAoIFwKKyAgICAod2lkdGgp
ID09IFdpZHRoOCA/IG9wY29kZSAjIyA4IDogXAorICAgICh3aWR0aCkgPT0gV2lkdGgxNiA/IG9w
Y29kZSAjIyAxNiA6IFwKKyAgICAod2lkdGgpID09IFdpZHRoMzIgPyBvcGNvZGUgIyMgMzIgOiBc
CisgICAgb3Bjb2RlICMjIDY0KQorCiBjbGFzcyBMb3dlclRvQWlyIHsKIHB1YmxpYzoKICAgICBM
b3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQpAQCAtODMsNiArOTEsNyBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9kb21pbmF0b3JzKHByb2NlZHVyZS5kb21pbmF0b3JzKCkpCiAgICAgICAg
ICwgbV9wcm9jZWR1cmUocHJvY2VkdXJlKQogICAgICAgICAsIG1fY29kZShwcm9jZWR1cmUuY29k
ZSgpKQorICAgICAgICAsIG1fYmxvY2tJbnNlcnRpb25TZXQobV9jb2RlKQogICAgIHsKICAgICB9
CiAKQEAgLTEyNCwxNCArMTMzLDE4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gaG9pc3RlZCBhZGRy
ZXNzIGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxvb3Au
CiAgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUuYmxvY2tz
SW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7Ci0gICAgICAgICAg
ICAvLyBSZXNldCBzb21lIHN0YXRlLgotICAgICAgICAgICAgbV9pbnN0cy5yZXNpemUoMCk7CiAK
ICAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9jayk7CiAKICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvd2VyaW5n
IEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KKyAgICAg
ICAgICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNz
b3JzKCkuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayht
X2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3koKSkp
OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2NrcyBpbiByZXZl
cnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hhdCBhbGxvd3Mg
dXMKICAgICAgICAgICAgIC8vIHRvIG1hdGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5LgogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgewpAQCAtMTQ5LDE5
ICsxNjIsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBtX2luc3RzIGNvbnRh
aW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcwotICAgICAgICAgICAgLy8g
aXQgaW4gcmV2ZXJzZS4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5zdHMuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9pbnN0c1tp
XSkKLSAgICAgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5hcHBlbmRJbnN0
KFdURk1vdmUoaW5zdCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBNYWtlIHN1
cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KLSAgICAgICAgICAg
IGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygp
KSB7Ci0gICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNzb3JzKCku
YXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayhtX2Jsb2Nr
VG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3koKSkpOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKG1fYmxv
Y2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fYmxvY2tJ
bnNlcnRpb25TZXQuZXhlY3V0ZSgpOwogCiAgICAgICAgIEFpcjo6SW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChtX2NvZGUpOwogICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBtX3Byb2xvZ3VlKQpA
QCAtNTM4LDcgKzU0Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7CiAK
ICAgICAgICAgaW50MzJfdCBvZmZzZXQgPSB2YWx1ZS0+b2Zmc2V0KCk7Ci0gICAgICAgIFdpZHRo
IHdpZHRoID0gdmFsdWUtPmFjY2Vzc1dpZHRoKCk7CisgICAgICAgIFdpZHRoIHdpZHRoID0gdmFs
dWUtPmxvYWRTdG9yZVdpZHRoKCk7CiAKICAgICAgICAgQXJnIHJlc3VsdCA9IGVmZmVjdGl2ZUFk
ZHIodmFsdWUtPmxhc3RDaGlsZCgpLCBvZmZzZXQsIHdpZHRoKTsKICAgICAgICAgQVNTRVJUKHJl
c3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpOwpAQCAtNTYyLDExICs1NjYsMTYgQEAgcHJpdmF0ZToK
ICAgICAKICAgICBBcmdQcm9taXNlIGxvYWRQcm9taXNlQW55T3Bjb2RlKFZhbHVlKiBsb2FkVmFs
dWUpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2FkVmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpKTsKICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKGxvYWRWYWx1ZSkpCiAgICAgICAg
ICAgICByZXR1cm4gQXJnKCk7CiAgICAgICAgIGlmIChjcm9zc2VzSW50ZXJmZXJlbmNlKGxvYWRW
YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7Ci0gICAgICAgIEFyZ1Byb21pc2UgcmVz
dWx0KGFkZHIobG9hZFZhbHVlKSwgbG9hZFZhbHVlKTsKKyAgICAgICAgaWYgKGxvYWRWYWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7
CisgICAgICAgIEFyZyBsb2FkQWRkciA9IGFkZHIobG9hZFZhbHVlKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQobG9hZEFkZHIpOworICAgICAgICBBcmdQcm9taXNlIHJlc3VsdChsb2FkQWRkciwg
bG9hZFZhbHVlKTsKICAgICAgICAgaWYgKGxvYWRWYWx1ZS0+dHJhcHMoKSkKICAgICAgICAgICAg
IHJlc3VsdC5zZXRUcmFwcyh0cnVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTkzMSwx
MCArOTQwLDE1IEBAIHByaXZhdGU6CiAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZTMyLCBBaXI6
Ok9wY29kZSBvcGNvZGU2NCwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0
YXRpdmU+CiAgICAgYm9vbCB0cnlBcHBlbmRTdG9yZUJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlLT5hczxNZW1vcnlW
YWx1ZT4oKSk7CisgICAgICAgIAogICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNv
ZGVGb3JUeXBlKG9wY29kZTMyLCBvcGNvZGU2NCwgbGVmdC0+dHlwZSgpKTsKICAgICAgICAgaWYg
KG9wY29kZSA9PSBBaXI6Ok9vcHMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IAorICAgICAgICBpZiAobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAogICAgICAgICBBcmcgc3RvcmVBZGRy
ID0gYWRkcihtX3ZhbHVlKTsKICAgICAgICAgQVNTRVJUKHN0b3JlQWRkcik7CiAKQEAgLTk5NCwx
MCArMTAwOCw0OCBAQCBwcml2YXRlOgogCiAgICAgICAgIHJldHVybiBJbnN0KG1vdmUsIG1fdmFs
dWUsIHRtcCh2YWx1ZSksIGRlc3QpOwogICAgIH0KKyAgICAKKyAgICBBaXI6Ok9wY29kZSBzdG9y
ZU9wY29kZShXaWR0aCB3aWR0aCwgQmFuayBiYW5rLCBib29sIHJlbGVhc2UpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYmFuayA9PSBHUCk7CisgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/
IFN0b3JlUmVsOCA6IFN0b3JlODsKKyAgICAgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYmFuayA9PSBHUCk7CisgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/
IFN0b3JlUmVsMTYgOiBTdG9yZTE2OworICAgICAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgICAg
ICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlbGVhc2UgPyBTdG9yZVJlbDMyIDogTW92ZTMyOworICAgICAgICAgICAgY2FzZSBG
UDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVsZWFzZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE1vdmVGbG9hdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpczY0
Qml0KCkpOworICAgICAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgICAgICBjYXNlIEdQ
OgorICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlID8gU3RvcmVSZWw2NCA6IE1vdmU7Cisg
ICAgICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWxl
YXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW92ZURvdWJsZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlKFZh
bHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIHJldHVybiBzdG9yZU9wY29kZShtZW1vcnktPmxv
YWRTdG9yZVdpZHRoKCksIG1lbW9yeS0+YWNjZXNzQmFuaygpLCBtZW1vcnktPmhhc0ZlbmNlKCkp
OworICAgIH0KIAogICAgIEluc3QgY3JlYXRlU3RvcmUoVmFsdWUqIHZhbHVlLCBjb25zdCBBcmcm
IGRlc3QpCiAgICAgewotICAgICAgICBBaXI6Ok9wY29kZSBtb3ZlT3Bjb2RlID0gbW92ZUZvclR5
cGUodmFsdWUtPnR5cGUoKSk7CisgICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVPcGNvZGUgPSBzdG9y
ZU9wY29kZSh2YWx1ZSk7CiAgICAgICAgIHJldHVybiBjcmVhdGVTdG9yZShtb3ZlT3Bjb2RlLCB2
YWx1ZSwgZGVzdCk7CiAgICAgfQogCkBAIC0xMDA2LDcgKzEwNTgsNyBAQCBwcml2YXRlOgogICAg
IHsKICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBjcmVhdGVTdG9yZShzdGQ6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKSk7CiAgICAgfQotCisgICAgCiAgICAgQWlyOjpPcGNv
ZGUgbW92ZUZvclR5cGUoVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7
CkBAIC0xMDczLDcgKzExMjUsNDEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1faW5zdHMu
bGFzdCgpLmFwcGVuZChpbnN0KTsKICAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2hBcHBlbmRp
bmdJbnN0cnVjdGlvbnMoQWlyOjpCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgeworICAgICAgICAv
LyBOb3cgYXBwZW5kIHRoZSBpbnN0cnVjdGlvbnMuIG1faW5zdHMgY29udGFpbnMgdGhlbSBpbiBy
ZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCisgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5zdHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICBmb3IgKEluc3QmIGluc3QgOiBtX2luc3RzW2ldKQorICAgICAgICAgICAgICAgIHRhcmdl
dC0+YXBwZW5kSW5zdChXVEZNb3ZlKGluc3QpKTsKKyAgICAgICAgfQorICAgICAgICBtX2luc3Rz
LnJlc2l6ZSgwKTsKKyAgICB9CisgICAgCisgICAgQWlyOjpCYXNpY0Jsb2NrKiBuZXdCbG9jaygp
CisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRBZnRlciht
X2Jsb2NrVG9CbG9ja1ttX2Jsb2NrXSk7CisgICAgfQogCisgICAgLy8gTk9URTogVGhpcyB3aWxs
IGNyZWF0ZSBhIGNvbnRpbnVhdGlvbiBibG9jayAoYG5leHRCbG9ja2ApICphZnRlciogYW55IGJs
b2NrcyB5b3UndmUgY3JlYXRlZCB1c2luZworICAgIC8vIG5ld0Jsb2NrKCkuIFNvLCBpdCdzIHBy
ZWZlcmFibGUgdG8gY3JlYXRlIGFsbCBvZiB5b3VyIGJsb2NrcyB1cGZyb250IHVzaW5nIG5ld0Js
b2NrKCkuIEFsc28gbm90ZQorICAgIC8vIHRoYXQgYW55IGNvZGUgeW91IGVtaXQgYmVmb3JlIHRo
aXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIGNvbnRpbnVhdGlvbiwgYW5kIGFueSBjb2RlIHlv
dSBlbWl0CisgICAgLy8gYWZ0ZXIgdGhpcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBwcmV2aW91
cyBibG9jay4KKyAgICB2b2lkIHNwbGl0QmxvY2soQWlyOjpCYXNpY0Jsb2NrKiYgcHJldmlvdXNC
bG9jaywgQWlyOjpCYXNpY0Jsb2NrKiYgbmV4dEJsb2NrKQorICAgIHsKKyAgICAgICAgQWlyOjpC
YXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tUb0Jsb2NrW21fYmxvY2tdOworICAgICAgICAKKyAg
ICAgICAgcHJldmlvdXNCbG9jayA9IGJsb2NrOworICAgICAgICBuZXh0QmxvY2sgPSBtX2Jsb2Nr
SW5zZXJ0aW9uU2V0Lmluc2VydEFmdGVyKGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZpbmlz
aEFwcGVuZGluZ0luc3RydWN0aW9ucyhuZXh0QmxvY2spOworICAgICAgICBuZXh0QmxvY2stPnN1
Y2Nlc3NvcnMoKSA9IGJsb2NrLT5zdWNjZXNzb3JzKCk7CisgICAgICAgIGJsb2NrLT5zdWNjZXNz
b3JzKCkuY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIG1faW5zdHMuYXBwZW5kKFZlY3RvcjxJ
bnN0PigpKTsKKyAgICB9CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUu
Li4gQXJndW1lbnRzPgogICAgIFQqIGVuc3VyZVNwZWNpYWwoVComIGZpZWxkLCBBcmd1bWVudHMm
Ji4uLiBhcmd1bWVudHMpCiAgICAgewpAQCAtMTEyMyw3ICsxMjA5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJn
dW1lbnQ6CiAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjpjYWxsQXJnKHZhbHVlLnJlcCgpLm9m
ZnNldEZyb21TUCgpKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRTdG9yZSh2YWx1ZS52YWx1ZSgp
LCBhcmcpOworICAgICAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1vdmVGb3JUeXBlKHZhbHVlLnZh
bHVlKCkpLCBhcmcpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTk2
MSw2ICsyMDQ3LDEyNCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
KyAgICB2b2lkIGFwcGVuZFg4NkRpdihCMzo6T3Bjb2RlIG9wKQorICAgIHsKKyNpZiBDUFUoWDg2
KSB8fCBDUFUoWDg2XzY0KQorICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4
KTsKKyAgICAgICAgVG1wIGVkeCA9IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7CisKKyAgICAgICAg
QWlyOjpPcGNvZGUgY29udmVydFRvRG91YmxlV29yZDsKKyAgICAgICAgQWlyOjpPcGNvZGUgZGl2
OworICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEludDMy
OgorICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb0RvdWJsZVdv
cmQzMjsKKyAgICAgICAgICAgIGRpdiA9IFg4NkRpdjMyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2
Q29udmVydFRvUXVhZFdvcmQ2NDsKKyAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKG9wID09IERpdiB8fCBvcCA9PSBNb2QpOworICAgICAgICBYODZSZWdpc3RlcnM6
OlJlZ2lzdGVySUQgcmVzdWx0ID0gb3AgPT0gRGl2ID8gWDg2UmVnaXN0ZXJzOjplYXggOiBYODZS
ZWdpc3RlcnM6OmVkeDsKKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxk
KDApKSwgZWF4KTsKKyAgICAgICAgYXBwZW5kKGNvbnZlcnRUb0RvdWJsZVdvcmQsIGVheCwgZWR4
KTsKKyAgICAgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkp
OworICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKHJlc3VsdCksIHRtcChtX3ZhbHVlKSk7CisKKyNl
bHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShvcCk7CisgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBhcHBlbmRYODZVRGl2KEIzOjpP
cGNvZGUgb3ApCisgICAgeworI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgICAgIFRt
cCBlYXggPSBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBUbXAgZWR4ID0gVG1wKFg4
NlJlZ2lzdGVyczo6ZWR4KTsKKworICAgICAgICBBaXI6Ok9wY29kZSBkaXYgPSBtX3ZhbHVlLT50
eXBlKCkgPT0gSW50MzIgPyBYODZVRGl2MzIgOiBYODZVRGl2NjQ7CisKKyAgICAgICAgQVNTRVJU
KG9wID09IFVEaXYgfHwgb3AgPT0gVU1vZCk7CisgICAgICAgIFg4NlJlZ2lzdGVyczo6UmVnaXN0
ZXJJRCByZXN1bHQgPSBvcCA9PSBVRGl2ID8gWDg2UmVnaXN0ZXJzOjplYXggOiBYODZSZWdpc3Rl
cnM6OmVkeDsKKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwg
ZWF4KTsKKyAgICAgICAgYXBwZW5kKFhvcjY0LCBlZHgsIGVkeCk7CisgICAgICAgIGFwcGVuZChk
aXYsIGVheCwgZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgYXBwZW5kKE1v
dmUsIFRtcChyZXN1bHQpLCB0bXAobV92YWx1ZSkpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BB
UkFNKG9wKTsKKyAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisjZW5kaWYKKyAg
ICB9CisgICAgCisgICAgQWlyOjpPcGNvZGUgbG9hZExpbmtPcGNvZGUoV2lkdGggd2lkdGgsIGJv
b2wgZmVuY2UpCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2UgPyBPUENPREVfRk9SX1dJRFRI
KExvYWRMaW5rQWNxLCB3aWR0aCkgOiBPUENPREVfRk9SX1dJRFRIKExvYWRMaW5rLCB3aWR0aCk7
CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlQ29uZE9wY29kZShXaWR0aCB3aWR0
aCwgYm9vbCBmZW5jZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmZW5jZSA/IE9QQ09ERV9GT1Jf
V0lEVEgoU3RvcmVDb25kUmVsLCB3aWR0aCkgOiBPUENPREVfRk9SX1dJRFRIKFN0b3JlQ29uZCwg
d2lkdGgpOworICAgIH0KKyAgICAKKyNpZiBDUFUoQVJNNjQpCisgICAgdm9pZCBhcHBlbmRBUk02
NFdlYWtDQVMoVmFsdWUqIGF0b21pY1ZhbHVlLCBib29sIGludmVydCkKKyAgICB7CisgICAgICAg
IC8vIFdlIHdpc2ggdG8gZW1pdDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIExvYWRMaW5r
CisgICAgICAgIC8vICAgICBCcmFuY2ggTm90RXF1YWwKKyAgICAgICAgLy8gICBTdWNjZXNzb3Jz
OiBUaGVuOiNmYWlsLCBFbHNlOiAjc3RvcmUKKyAgICAgICAgLy8gQmxvY2sgI3N0b3JlOgorICAg
ICAgICAvLyAgICAgU3RvcmVDb25kCisgICAgICAgIC8vICAgICBYb3IgJDEsICVyZXN1bHQgICAg
PC0tLSBvbmx5IGlmICFpbnZlcnQKKyAgICAgICAgLy8gICAgIEp1bXAKKyAgICAgICAgLy8gICBT
dWNjZXNzb3JzOiAjZG9uZQorICAgICAgICAvLyBCbG9jayAjZmFpbDoKKyAgICAgICAgLy8gICAg
IE1vdmUgJGludmVydCwgJXJlc3VsdAorICAgICAgICAvLyAgICAgSnVtcAorICAgICAgICAvLyAg
IFN1Y2Nlc3NvcnM6ICNkb25lCisgICAgICAgIC8vIEJsb2NrICNkb25lOgorICAgICAgICAKKyAg
ICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IGF0b21pY1ZhbHVlLT5hczxBdG9taWNWYWx1ZT4o
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXRvbWljKTsKKyAgICAgICAgCisgICAgICAgIFdp
ZHRoIHdpZHRoID0gYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpOworICAgICAgICAKKyAgICAgICAg
QXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisgICAgICAgIFRtcCB0bXAgPSBtX2NvZGUubmV3
VG1wKEdQKTsKKyAgICAgICAgVG1wIGV4cGVjdGVkVmFsdWVUbXAgPSB0bXAoYXRvbWljLT5jaGls
ZCgwKSk7CisgICAgICAgIFRtcCBuZXdWYWx1ZVRtcCA9IHRtcChhdG9taWMtPmNoaWxkKDEpKTsK
KyAgICAgICAgVG1wIHJlc3VsdFRtcCA9IHRtcChtX3ZhbHVlKTsKKyAgICAgICAgCisgICAgICAg
IEFpcjo6QmFzaWNCbG9jayogc3RvcmVCbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6
QmFzaWNCbG9jayogZmFpbEJsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Js
b2NrKiBiZWdpbkJsb2NrOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGRvbmVCbG9jazsKKyAg
ICAgICAgc3BsaXRCbG9jayhiZWdpbkJsb2NrLCBkb25lQmxvY2spOworICAgICAgICAKKyAgICAg
ICAgYXBwZW5kKGxvYWRMaW5rT3Bjb2RlKHdpZHRoLCBhdG9taWMtPmhhc0ZlbmNlKCkpLCBtX3Zh
bHVlLCB0bXAsIGFkZHJlc3MpOworICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChCcmFu
Y2gsIGNhbm9uaWNhbFdpZHRoKHdpZHRoKSksIG1fdmFsdWUsIEFyZzo6cmVsQ29uZChNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwpIHRtcCwgZXhwZWN0ZWRWYWx1ZVRtcCk7CisgICAgICAgIGJlZ2lu
QmxvY2stPnNldFN1Y2Nlc3NvcnMoZmFpbEJsb2NrLCBzdG9yZUJsb2NrKTsKKyAgICAgICAgCisg
ICAgICAgIHN0b3JlQmxvY2stPmFwcGVuZChzdG9yZUNvbmRPcGNvZGUod2lkdGgsIGF0b21pYy0+
aGFzRmVuY2UoKSksIG1fdmFsdWUsIG5ld1ZhbHVlVG1wLCBhZGRyZXNzLCByZXN1bHRUbXApOwor
ICAgICAgICBpZiAoIWludmVydCkKKyAgICAgICAgICAgIHN0b3JlQmxvY2stPmFwcGVuZChYb3Iz
MiwgbV92YWx1ZSwgQXJnOjpiaXRJbW0oMSksIHJlc3VsdFRtcCwgcmVzdWx0VG1wKTsKKyAgICAg
ICAgc3RvcmVCbG9jay0+YXBwZW5kKEp1bXAsIG1fdmFsdWUpOworICAgICAgICBzdG9yZUJsb2Nr
LT5zZXRTdWNjZXNzb3JzKGRvbmVCbG9jayk7CisgICAgICAgIAorICAgICAgICBmYWlsQmxvY2st
PmFwcGVuZChNb3ZlLCBBcmc6OmltbShpbnZlcnQpLCByZXN1bHQpOworICAgICAgICBmYWlsQmxv
Y2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrKTsKKyAgICB9CisjZW5kaWYgLy8gQ1BVKEFSTTY0
KQorICAgIAogICAgIHZvaWQgbG93ZXIoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX3ZhbHVl
LT5vcGNvZGUoKSkgewpAQCAtMTk3MSwzMCArMjE3NSw1MCBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBMb2FkOiB7Ci0gICAgICAgICAgICBhcHBlbmQo
dHJhcHBpbmdJbnN0KG1fdmFsdWUsIG1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksIG1fdmFs
dWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgTWVtb3J5VmFs
dWUqIG1lbW9yeSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICAgICAgQWly
OjpPcGNvZGUgb3Bjb2RlID0gQWlyOjpPb3BzOworICAgICAgICAgICAgaWYgKG1lbW9yeS0+aGFz
RmVuY2UoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobWVtb3J5LT50eXBlKCkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBM
b2FkQWNxMzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgSW50NjQ6CisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IExvYWRBY3E2NDsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgb3Bjb2RlID0gbW92ZUZvclR5cGUobWVtb3J5LT50eXBlKCkpOworICAgICAg
ICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIo
bV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBMb2FkOFM6IHsKLSAgICAgICAgICAgIGFwcGVu
ZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBtX3ZhbHVlLCBh
ZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9w
Y29kZSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpID8gTG9hZEFjcThT
aWduZWRFeHRlbmRUbzMyIDogTG9hZDhTaWduZWRFeHRlbmRUbzMyOworICAgICAgICAgICAgYXBw
ZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSks
IHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBMb2FkOFo6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1
ZSwgTG9hZDgsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhh
c0ZlbmNlKCkgPyBMb2FkQWNxOCA6IExvYWQ4OworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5n
SW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVl
KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBMb2Fk
MTZTOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQxNlNp
Z25lZEV4dGVuZFRvMzIsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwor
ICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+
KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxMTZTaWduZWRFeHRlbmRUbzMyIDogTG9hZDE2U2lnbmVk
RXh0ZW5kVG8zMjsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bj
b2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDE2WjogewotICAgICAgICAg
ICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkMTYsIG1fdmFsdWUsIGFkZHIobV92
YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0g
bV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxMTYgOiBMb2Fk
MTY7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92
YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQWRkOiB7CiAgICAgICAg
ICAgICBpZiAodHJ5QXBwZW5kTGVhKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjA5
Miw3ICsyMzE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0NoaWxs
KCkpCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsKICAgICAgICAg
ICAgIGlmIChpc0ludChtX3ZhbHVlLT50eXBlKCkpICYmIGlzWDg2KCkpIHsKLSAgICAgICAgICAg
ICAgICBsb3dlclg4NkRpdihEaXYpOworICAgICAgICAgICAgICAgIGFwcGVuZFg4NkRpdihEaXYp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFT
U0VSVCghaXNYODYoKSB8fCBpc0Zsb2F0KG1fdmFsdWUtPnR5cGUoKSkpOwpAQCAtMjEwMyw3ICsy
MzI3LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNlIFVEaXY6IHsKICAgICAgICAgICAgIGlm
IChpc0ludChtX3ZhbHVlLT50eXBlKCkpICYmIGlzWDg2KCkpIHsKLSAgICAgICAgICAgICAgICBs
b3dlclg4NlVEaXYoVURpdik7CisgICAgICAgICAgICAgICAgYXBwZW5kWDg2VURpdihVRGl2KTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAgLTIxMTcsMTMgKzIz
NDEsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBNb2Q6IHsKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGlzWDg2KCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdmFsdWUt
PmlzQ2hpbGwoKSk7Ci0gICAgICAgICAgICBsb3dlclg4NkRpdihNb2QpOworICAgICAgICAgICAg
YXBwZW5kWDg2RGl2KE1vZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIFVNb2Q6IHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOwot
ICAgICAgICAgICAgbG93ZXJYODZVRGl2KFVNb2QpOworICAgICAgICAgICAgYXBwZW5kWDg2VURp
dihVTW9kKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMTY2LDYgKzIz
OTAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92
YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBEZXBlbmQ6IHsKKyAgICAgICAgICAgIGFwcGVuZFVuT3A8RGVw
ZW5kMzIsIERlcGVuZDY0PihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KIAogICAgICAgICBjYXNlIFNobDogewogICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7CkBAIC0yMjY2LDcgKzI0OTUsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYXBwZW5k
U3RvcmUodmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZFN0
b3JlKG1fdmFsdWUsIGFkZHIobV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKQEAgLTIyODcsNyArMjUxNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBh
cHBlbmRTdG9yZShBaXI6OlN0b3JlOCwgdmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAg
ICAgICAgICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVl
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjMwOCw3ICsyNTM3LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZFN0b3JlKEFpcjo6U3RvcmUxNiwg
dmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1f
dmFsdWUsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMjc4NCw2ICszMDEzLDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBhcHBlbmQoQWlyOjpFbnRyeVN3aXRjaCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1dlYWtDQVM6IHsKKyAgICAgICAg
ICAgIEF0b21pY1ZhbHVlKiB2YWx1ZSA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworI2lm
IENQVShYODZfNjQpCisgICAgICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4
KTsKKyAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUodmFsdWUtPm9wZXJhdGlv
blR5cGUoKSksIGltbU9yVG1wKHZhbHVlLT5jaGlsZCgwKSksIGVheCk7CisgICAgICAgICAgICBh
cHBlbmQoT1BDT0RFX0ZPUl9XSURUSChMb2NrQ21wWGNoZywgdmFsdWUtPm9wZXJhdGlvbldpZHRo
KCkpLCBlYXgsIHRtcCh2YWx1ZS0+Y2hpbGQoMSkpLCBhZGRyKHZhbHVlKSwgdG1wKHZhbHVlKSk7
CisjZWxpZiBDUFUoQVJNNjQpCisgICAgICAgICAgICBhcHBlbmRBUk02NFdlYWtDQVModmFsdWUs
IGZhbHNlKTsKKyNlbHNlCisjZXJyb3IgIkJhZCBhcmNoaXRlY3R1cmUiCisjZW5kaWYKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTI3OTMsNjMgKzMwMzYsNiBAQCBwcml2YXRlOgogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHZvaWQgbG93ZXJYODZEaXYoQjM6
Ok9wY29kZSBvcCkKLSAgICB7Ci0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKLSAgICAgICAg
VG1wIGVheCA9IFRtcChYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgICAgIFRtcCBlZHggPSBUbXAo
WDg2UmVnaXN0ZXJzOjplZHgpOwotCi0gICAgICAgIEFpcjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJs
ZVdvcmQ7Ci0gICAgICAgIEFpcjo6T3Bjb2RlIGRpdjsKLSAgICAgICAgc3dpdGNoIChtX3ZhbHVl
LT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIGNvbnZlcnRUb0Rv
dWJsZVdvcmQgPSBYODZDb252ZXJ0VG9Eb3VibGVXb3JkMzI7Ci0gICAgICAgICAgICBkaXYgPSBY
ODZEaXYzMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAg
ICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb1F1YWRXb3JkNjQ7Ci0gICAg
ICAgICAgICBkaXYgPSBYODZEaXY2NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChvcCA9PSBEaXYgfHwgb3Ag
PT0gTW9kKTsKLSAgICAgICAgWDg2UmVnaXN0ZXJzOjpSZWdpc3RlcklEIHJlc3VsdCA9IG9wID09
IERpdiA/IFg4NlJlZ2lzdGVyczo6ZWF4IDogWDg2UmVnaXN0ZXJzOjplZHg7Ci0KLSAgICAgICAg
YXBwZW5kKE1vdmUsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIGVheCk7Ci0gICAgICAgIGFwcGVu
ZChjb252ZXJ0VG9Eb3VibGVXb3JkLCBlYXgsIGVkeCk7Ci0gICAgICAgIGFwcGVuZChkaXYsIGVh
eCwgZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIFRt
cChyZXN1bHQpLCB0bXAobV92YWx1ZSkpOwotCi0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0o
b3ApOwotICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSNlbmRpZgotICAgIH0K
LQotICAgIHZvaWQgbG93ZXJYODZVRGl2KEIzOjpPcGNvZGUgb3ApCi0gICAgewotI2lmIENQVShY
ODYpIHx8IENQVShYODZfNjQpCi0gICAgICAgIFRtcCBlYXggPSBUbXAoWDg2UmVnaXN0ZXJzOjpl
YXgpOwotICAgICAgICBUbXAgZWR4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWR4KTsKLQotICAgICAg
ICBBaXI6Ok9wY29kZSBkaXYgPSBtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyBYODZVRGl2MzIg
OiBYODZVRGl2NjQ7Ci0KLSAgICAgICAgQVNTRVJUKG9wID09IFVEaXYgfHwgb3AgPT0gVU1vZCk7
Ci0gICAgICAgIFg4NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCByZXN1bHQgPSBvcCA9PSBVRGl2ID8g
WDg2UmVnaXN0ZXJzOjplYXggOiBYODZSZWdpc3RlcnM6OmVkeDsKLQotICAgICAgICBhcHBlbmQo
TW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgZWF4KTsKLSAgICAgICAgYXBwZW5kKFhvcjY0
LCBlZHgsIGVkeCk7Ci0gICAgICAgIGFwcGVuZChkaXYsIGVheCwgZWR4LCB0bXAobV92YWx1ZS0+
Y2hpbGQoMSkpKTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChyZXN1bHQpLCB0bXAobV92YWx1
ZSkpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgVU5SRUFDSEFC
TEVfRk9SX1BMQVRGT1JNKCk7Ci0jZW5kaWYKLSAgICB9Ci0KICAgICBJbmRleFNldDxWYWx1ZT4g
bV9sb2NrZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFp
ci4KICAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBtX3ZhbHVlVG9UbXA7IC8vIFRoZXNlIGFyZSB2
YWx1ZXMgdGhhdCBtdXN0IGhhdmUgYSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBhIFZhbHVlKiB3
aXRoIGEgbm9uLW51bGwgVG1wIGlzICJwaW5uZWQiLgogICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+
IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBUbXAuCkBAIC0yODY0LDcgKzMw
NTAsNyBAQCBwcml2YXRlOgogCiAgICAgVmVjdG9yPFZlY3RvcjxJbnN0LCA0Pj4gbV9pbnN0czsK
ICAgICBWZWN0b3I8SW5zdD4gbV9wcm9sb2d1ZTsKLQorICAgIAogICAgIEIzOjpCYXNpY0Jsb2Nr
KiBtX2Jsb2NrOwogICAgIGJvb2wgbV9pc1JhcmU7CiAgICAgdW5zaWduZWQgbV9pbmRleDsKQEAg
LTI4NzUsNiArMzA2MSw4IEBAIHByaXZhdGU6CiAKICAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJl
OwogICAgIENvZGUmIG1fY29kZTsKKworICAgIEFpcjo6QmxvY2tJbnNlcnRpb25TZXQgbV9ibG9j
a0luc2VydGlvblNldDsKIH07CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCwzMCArMzQsNDggQEAgTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgpCiB7
CiB9CiAKK1R5cGUgTWVtb3J5VmFsdWU6OmFjY2Vzc1R5cGUoKSBjb25zdAoreworICAgIGlmIChp
c0xvYWQob3Bjb2RlKCkpKQorICAgICAgICByZXR1cm4gdHlwZSgpOworICAgIC8vIFRoaXMgaGFw
cGVucyB0byB3b3JrIGZvciBhdG9taWNzLCB0b28uIFRoYXQncyB3aHkgQXRvbWljVmFsdWUgZG9l
cyBub3QgbmVlZCB0byBvdmVycmlkZSB0aGlzLgorICAgIHJldHVybiBjaGlsZCgwKS0+dHlwZSgp
OworfQorCitCYW5rIE1lbW9yeVZhbHVlOjphY2Nlc3NCYW5rKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gYmFua0ZvclR5cGUoYWNjZXNzVHlwZSgpKTsKK30KKwogc2l6ZV90IE1lbW9yeVZhbHVlOjph
Y2Nlc3NCeXRlU2l6ZSgpIGNvbnN0CiB7CisgICAgcmV0dXJuIGJ5dGVzKGFjY2Vzc1dpZHRoKCkp
OworfQorCitXaWR0aCBNZW1vcnlWYWx1ZTo6bG9hZFN0b3JlV2lkdGgoKSBjb25zdAorewogICAg
IHN3aXRjaCAob3Bjb2RlKCkpIHsKICAgICBjYXNlIExvYWQ4WjoKICAgICBjYXNlIExvYWQ4UzoK
ICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiBXaWR0
aDg7CiAgICAgY2FzZSBMb2FkMTZaOgogICAgIGNhc2UgTG9hZDE2UzoKICAgICBjYXNlIFN0b3Jl
MTY6Ci0gICAgICAgIHJldHVybiAyOworICAgICAgICByZXR1cm4gV2lkdGgxNjsKICAgICBjYXNl
IExvYWQ6Ci0gICAgICAgIHJldHVybiBzaXplb2ZUeXBlKHR5cGUoKSk7CisgICAgICAgIHJldHVy
biB3aWR0aEZvclR5cGUodHlwZSgpKTsKICAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXR1cm4g
c2l6ZW9mVHlwZShjaGlsZCgwKS0+dHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlw
ZShjaGlsZCgwKS0+dHlwZSgpKTsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIFdpZHRo
ODsKICAgICB9CiB9CiAKIFdpZHRoIE1lbW9yeVZhbHVlOjphY2Nlc3NXaWR0aCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHdpZHRoRm9yQnl0ZXMoYWNjZXNzQnl0ZVNpemUoKSk7CisgICAgcmV0dXJu
IGxvYWRTdG9yZVdpZHRoKCk7CiB9CiAKIHZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1h
UHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC02Nyw2ICs4NSw4IEBA
IHZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYKICAgICBpZiAoKGlzTG9h
ZCgpICYmIGVmZmVjdHMoKS5yZWFkcyAhPSByYW5nZSgpKQogICAgICAgICB8fCAoaXNTdG9yZSgp
ICYmIGVmZmVjdHMoKS53cml0ZXMgIT0gcmFuZ2UoKSkpCiAgICAgICAgIG91dC5wcmludChjb21t
YSwgInJhbmdlID0gIiwgcmFuZ2UoKSk7CisgICAgaWYgKHBoYW50b21SYW5nZSgpKQorICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJwaGFudG9tUmFuZ2UgPSAiLCBwaGFudG9tUmFuZ2UoKSk7CiB9
CiAKIFZhbHVlKiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKQEAgLTc0LDYgKzk0LDU4
IEBAIFZhbHVlKiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKICAgICByZXR1cm4gbmV3
IE1lbW9yeVZhbHVlKCp0aGlzKTsKIH0KIAorLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0
IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZm
aXggdGhhdAorLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KK01lbW9yeVZhbHVlOjpN
ZW1vcnlWYWx1ZShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBv
aW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtp
bmQsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAg
ICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkp
IHsKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAg
ICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3Rv
cmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZv
aWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMg
Zm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCitNZW1vcnlW
YWx1ZTo6TWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRl
ciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDogTWVtb3J5VmFsdWUoa2luZCwgSW50MzIsIG9y
aWdpbiwgcG9pbnRlciwgb2Zmc2V0KQoreworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Cisg
ICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAg
ICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBM
b2FkMTZTOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRo
aXMgZm9ybSBmb3Igc3RvcmVzLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZz
ZXQgPSAwKQorICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2
YWx1ZSwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAgICBBU1NFUlQoaXNT
dG9yZShraW5kLm9wY29kZSgpKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiAj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNDggKzI3LDE3IEBACiAK
ICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNCYW5rLmgiCiAjaW5jbHVkZSAiQjNI
ZWFwUmFuZ2UuaCIKICNpbmNsdWRlICJCM1ZhbHVlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewogCi0vLyBGSVhNRTogV2Ugd2FudCB0byBhbGxvdyBmZW5jZWQgbWVtb3J5IGFj
Y2Vzc2VzIG9uIEFSTS4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjIzNDkKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5VmFsdWUgOiBwdWJsaWMg
VmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQogICAg
IHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9hZDha
OgotICAgICAgICBjYXNlIExvYWQ4UzoKLSAgICAgICAgY2FzZSBMb2FkMTZaOgotICAgICAgICBj
YXNlIExvYWQxNlM6Ci0gICAgICAgIGNhc2UgTG9hZDoKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0g
ICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaXNTdG9yZShLaW5kIGtpbmQpCi0g
ICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgY2FzZSBTdG9y
ZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaXNMb2FkKEtpbmQga2lu
ZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhY2NlcHRzKGtpbmQpICYmICFpc1N0b3JlKGtpbmQp
OworICAgICAgICByZXR1cm4gaXNNZW1vcnkoa2luZC5vcGNvZGUoKSk7CiAgICAgfQogCiAgICAg
fk1lbW9yeVZhbHVlKCk7CkBAIC03OCw3NiArNDcsNTYgQEAgcHVibGljOgogCiAgICAgY29uc3Qg
SGVhcFJhbmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KICAgICB2b2lkIHNl
dFJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9yYW5nZSA9IHJhbmdlOyB9CisgICAg
CisgICAgLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgcmFuZ2UuCisgICAgY29uc3QgSGVhcFJhbmdl
JiBhY2Nlc3NSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHJhbmdlKCk7IH0KKyAgICB2b2lkIHNldEFj
Y2Vzc1JhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgc2V0UmFuZ2UocmFuZ2UpOyB9Cisg
ICAgCisgICAgY29uc3QgSGVhcFJhbmdlJiBmZW5jZVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9m
ZW5jZVJhbmdlOyB9CisgICAgdm9pZCBzZXRGZW5jZVJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFu
Z2UpIHsgbV9mZW5jZVJhbmdlID0gcmFuZ2U7IH0KKworICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0
IHsgcmV0dXJuIGlzU3RvcmUob3Bjb2RlKCkpOyB9CisgICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7
IHJldHVybiBpc0xvYWQob3Bjb2RlKCkpOyB9CiAKLSAgICBib29sIGlzU3RvcmUoKSBjb25zdCB7
IHJldHVybiB0eXBlKCkgPT0gVm9pZDsgfQotICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyByZXR1
cm4gdHlwZSgpICE9IFZvaWQ7IH0KKyAgICBib29sIGhhc0ZlbmNlKCkgY29uc3QgeyByZXR1cm4g
ISFmZW5jZVJhbmdlKCk7IH0KIAorICAgIFR5cGUgYWNjZXNzVHlwZSgpIGNvbnN0OworICAgIEJh
bmsgYWNjZXNzQmFuaygpIGNvbnN0OwogICAgIHNpemVfdCBhY2Nlc3NCeXRlU2l6ZSgpIGNvbnN0
OwotICAgIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2xpZ2h0bHkg
ZmFzdGVyIHZlcnNpb24gb2YgYWNjZXNzV2lkdGgsIGlmIHlvdSBrbm93IHRoYXQgeW91J3JlIHdv
cmtpbmcgd2l0aCBhIGxvYWQgb3Igc3RvcmUuCisgICAgV2lkdGggbG9hZFN0b3JlV2lkdGgoKSBj
b25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CiAKIHBy
b3RlY3RlZDoKLSAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3Ry
ZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNv
bnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7Ci0K
LSAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBv
ciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0Ci0gICAgLy8gZGVzY3Jp
YmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIFR5cGUg
dHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkK
LSAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIHBvaW50
ZXIpCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIE1lbW9y
eVZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIEtpbmQga2luZCwgVHlwZSB0eXBlLCBPcmlnaW4gb3Jp
Z2luLCBpbnQzMl90IG9mZnNldCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBW
YWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAg
ICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6OnRv
cCgpKQogICAgIHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAg
IHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBMb2FkOgotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMb2FkOFo6Ci0gICAgICAgICAgICBj
YXNlIExvYWQ4UzoKLSAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKLSAgICAgICAgICAgIGNhc2Ug
TG9hZDE2UzoKLSAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgICAgIGNh
c2UgU3RvcmUxNjoKLSAgICAgICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHR5cGUgPT0gVm9pZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9CiAgICAgfQorICAgIAorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExv
YWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZl
IGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgorICAg
IE1lbW9yeVZhbHVlKEtpbmQsIFR5cGUsIE9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qg
b2Zmc2V0ID0gMCk7CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUg
cmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDog
TWVtb3J5VmFsdWUoa2luZCwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KQotICAgIHsK
LSAgICB9CisgICAgTWVtb3J5VmFsdWUoS2luZCwgT3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50
MzJfdCBvZmZzZXQgPSAwKTsKIAogICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KLSAg
ICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFs
dWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAgOiBWYWx1ZShDaGVja2Vk
T3Bjb2RlLCBraW5kLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQotICAgICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKLSAgICAgICAgLCBtX3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCi0gICAg
ewotICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgc3dpdGNoIChr
aW5kLm9wY29kZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgICAgIGNh
c2UgU3RvcmUxNjoKLSAgICAgICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCisgICAgTWVtb3J5VmFsdWUoS2luZCwgT3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZh
bHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAgIAogICAgIGludDMyX3QgbV9v
ZmZzZXQgeyAwIH07Ci0gICAgSGVhcFJhbmdlIG1fcmFuZ2U7CisgICAgSGVhcFJhbmdlIG1fcmFu
Z2UgeyBIZWFwUmFuZ2U6OnRvcCgpIH07CisgICAgSGVhcFJhbmdlIG1fZmVuY2VSYW5nZSB7IEhl
YXBSYW5nZSgpIH07CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcg
QEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSAi
QjNXaWR0aC5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KIApAQCAtODIsNyArODMsNiBAQCBlbnVtIE9wY29kZSA6IGludDE2X3Qgewog
ICAgIE1vZCwgLy8gQWxsIGJldHMgYXJlIG9mZiBhcyB0byB3aGF0IHdpbGwgaGFwcGVuIHdoZW4g
eW91IGV4ZWN1dGUgdGhpcyBmb3IgLTJeMzElLTEgYW5kIHglMC4KICAgICBVTW9kLAogCi0KICAg
ICAvLyBQb2x5bW9ycGhpYyBuZWdhdGlvbi4gTm90ZSB0aGF0IHdlIG9ubHkgbmVlZCB0aGlzIGZv
ciBmbG9hdGluZyBwb2ludCwgc2luY2UgaW50ZWdlciBuZWdhdGlvbgogICAgIC8vIGlzIGV4YWN0
bHkgbGlrZSBTdWIoMCwgeCkuIEJ1dCB0aGF0J3Mgbm90IHRydWUgZm9yIGZsb2F0aW5nIHBvaW50
LiBTdWIoMCwgMCkgaXMgMCwgd2hpbGUKICAgICAvLyBOZWcoMCkgaXMgLTAuIEFsc28sIHdlIGNh
bm9uaWNhbGl6ZSBTdWIoMCwgeCkgaW50byBOZWcoeCkgaW4gY2FzZSBvZiBpbnRlZ2Vycy4KQEAg
LTE2Miw2ICsxNjIsMTA1IEBAIGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgU3RvcmUxNiwK
ICAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMgc3RvcmUgZm9yIEludDMyLCBJbnQ2NCwgRmxv
YXQsIGFuZCBEb3VibGUuCiAgICAgU3RvcmUsCisgICAgCisgICAgLy8gQXRvbWljIGNvbXBhcmUg
YW5kIHN3YXAgdGhhdCByZXR1cm5zIGEgYm9vbGVhbi4gTWF5IGNob29zZSB0byBkbyBub3RoaW5n
IGFuZCByZXR1cm4gZmFsc2UuIFlvdSBjYW4KKyAgICAvLyB1c3VhbGx5IGFzc3VtZSB0aGF0IHRo
aXMgaXMgZmFzdGVyIGFuZCByZXN1bHRzIGluIGxlc3MgY29kZSB0aGFuIEF0b21pY1N0cm9uZ0NB
UywgdGhvdWdoIHRoYXQncworICAgIC8vIG5vdCBuZWNlc3NhcmlseSB0cnVlIG9uIEludGVsLCBp
ZiBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gZG9lcyBpdHMgam9iLiBJbWFnaW5lIHRoYXQgdGhpcyBv
cGNvZGUgaXMKKyAgICAvLyBhcyBpZiB5b3UgZGlkIHRoaXMgYXRvbWljYWxseToKKyAgICAvLwor
ICAgIC8vIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgLy8gYm9vbCBBdG9taWNXZWFrQ0FTKFQg
ZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSwgVCogcHRyKQorICAgIC8vIHsKKyAgICAvLyAgICAg
aWYgKCFyYW5kKCkpCisgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFJlYWwgd29ybGQg
ZXhhbXBsZSBvZiB0aGlzOiBjb250ZXh0IHN3aXRjaCBvbiBBUk0gd2hpbGUgZG9pbmcgQ0FTLgor
ICAgIC8vICAgICBpZiAoKnB0ciAhPSBleHBlY3RlZFZhbHVlKQorICAgIC8vICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIC8vICAgICAqcHRyID0gbmV3VmFsdWU7CisgICAgLy8gICAgIHJldHVy
biB0cnVlOworICAgIC8vIH0KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBhbGwgYXRvbWljcyBw
dXQgdGhlIHBvaW50ZXIgbGFzdCB0byBiZSBjb25zaXN0ZW50IHdpdGggaG93IGxvYWRzIGFuZCBz
dG9yZXMgd29yay4gVGhpcworICAgIC8vIGlzIGEgZ29vZnkgdHJhZGl0aW9uLCBidXQgaXQncyBo
YXJtbGVzcywgYW5kIGJldHRlciB0aGFuIGJlaW5nIGluY29uc2lzdGVudC4KKyAgICAvLworICAg
IC8vIE5vdGUgdGhhdCB3ZWFrIENBUyBoYXMgbm8gZmVuY2luZyBndWFyYW50ZWVzIHdoZW4gaXQg
ZmFpbHMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nCisgICAgLy8gdHJhbnNmb3JtYXRp
b24gaXMgYWx3YXlzIHZhbGlkOgorICAgIC8vCisgICAgLy8gQmVmb3JlOgorICAgIC8vCisgICAg
Ly8gICAgICAgICBCcmFuY2goQXRvbWljV2Vha0NBUyhleHBlY3RlZCwgbmV3LCBwdHIpKQorICAg
IC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I3N1Y2Nlc3MsIEVsc2U6I2ZhaWwKKyAgICAvLwor
ICAgIC8vIEFmdGVyOgorICAgIC8vCisgICAgLy8gICAgICAgICBCcmFuY2goRXF1YWwoTG9hZChw
dHIpLCBleHBlY3RlZCkpCisgICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhlbjojYXR0ZW1wdCwg
RWxzZTojZmFpbAorICAgIC8vICAgICBCQiNhdHRlbXB0OgorICAgIC8vICAgICAgICAgQnJhbmNo
KEF0b21pY1dlYWtDQVMoZXhwZWN0ZWQsIG5ldywgcHRyKSkKKyAgICAvLyAgICAgICBTdWNjZXNz
b3JzOiBUaGVuOiNzdWNjZXNzLCBFbHNlOiNmYWlsCisgICAgLy8KKyAgICAvLyBCb3RoIGtpbmRz
IG9mIENBUyBmb3Igbm9uLWNhbm9uaWNhbCB3aWR0aHMgKFdpZHRoOCBhbmQgV2lkdGgxNikgaWdu
b3JlIHRoZSBpcnJlbGV2YW50IGJpdHMgb2YgdGhlCisgICAgLy8gaW5wdXQuCisgICAgQXRvbWlj
V2Vha0NBUywKKyAgICAKKyAgICAvLyBBdG9taWMgY29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVy
bnMgdGhlIG9sZCB2YWx1ZS4gRG9lcyBub3QgaGF2ZSB0aGUgbm9uZGV0ZXJtaW5pc20gb2YgV2Vh
a0NBUy4KKyAgICAvLyBUaGlzIGlzIGEgYml0IG1vcmUgY29kZSBhbmQgYSBiaXQgc2xvd2VyIGlu
IHNvbWUgY2FzZXMsIHRob3VnaCBub3QgYnkgYSBsb3QuIEltYWdpbmUgdGhhdCB0aGlzCisgICAg
Ly8gb3Bjb2RlIGlzIGFzIGlmIHlvdSBkaWQgdGhpcyBhdG9taWNhbGx5OgorICAgIC8vCisgICAg
Ly8gdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAvLyBUIEF0b21pY1N0cm9uZ0NBUyhUIGV4cGVj
dGVkVmFsdWUsIFQgbmV3VmFsdWUsIFQqIHB0cikKKyAgICAvLyB7CisgICAgLy8gICAgIFQgb2xk
VmFsdWUgPSAqcHRyOworICAgIC8vICAgICBpZiAob2xkVmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZSkK
KyAgICAvLyAgICAgICAgICpwdHIgPSBuZXdWYWx1ZTsKKyAgICAvLyAgICAgcmV0dXJuIG9sZFZh
bHVlCisgICAgLy8gfQorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IEF0b21pY1dlYWtDQVMgYW5k
IEF0b21pY1N0cm9uZ0NBUyBzb3J0IG9mIGhhdmUgdGhpcyBraW5kIG9mIGVxdWl2YWxlbmNlOgor
ICAgIC8vCisgICAgLy8gQXRvbWljV2Vha0NBUyhAZXhwLCBAbmV3LCBAcHRyKSA9PSBFcXVhbChB
dG9taWNTdHJvbmdDQVMoQGV4cCwgQG5ldywgQHB0ciksIEBleHApCisgICAgLy8KKyAgICAvLyBB
c3N1bWluZyB0aGF0IHRoZSBXZWFrQ0FTIGRvZXMgbm90IHNwdXJpb3VzbHkgZmFpbCwgb2YgY291
cnNlLgorICAgIEF0b21pY1N0cm9uZ0NBUywKKyAgICAKKyAgICAvLyBBdG9taWNhbGx5IF9fXyBh
IG1lbW9yeSBsb2NhdGlvbiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuIFN5bnRheDoKKyAgICAv
LworICAgIC8vIEBvbGRWYWx1ZSA9IEF0b21pY1hjaGdfX18oQG9wZXJhbmQsIEBwdHIpCisgICAg
Ly8KKyAgICAvLyBGb3Igbm9uLWNhbm9uaWNhbCB3aWR0aHMgKFdpZHRoOCBhbmQgV2lkdGgxNiks
IHRoZXNlIHJldHVybiBzaWduLWV4dGVuZGVkIHJlc3VsdHMgYW5kIGlnbm9yZSB0aGUKKyAgICAv
LyBpcnJlbGV2YW50IGJpdHMgb2YgdGhlaXIgaW5wdXRzLgorICAgIEF0b21pY1hjaGdBZGQsCisg
ICAgQXRvbWljWGNoZ0FuZCwKKyAgICBBdG9taWNYY2hnT3IsCisgICAgQXRvbWljWGNoZ1N1YiwK
KyAgICBBdG9taWNYY2hnWG9yLAorICAgIAorICAgIC8vIEF0b21pY2FsbHkgZXhjaGFuZ2UgYSB2
YWx1ZSB3aXRoIGEgbWVtb3J5IGxvY2F0aW9uLiBTeW50YXg6CisgICAgLy8KKyAgICAvLyBAb2xk
VmFsdWUgPSBBdG9taWNYY2hnKEBuZXdWYWx1ZSwgQHB0cikKKyAgICBBdG9taWNYY2hnLAorICAg
IAorICAgIC8vIEludHJvZHVjZSBhbiBpbnZpc2libGUgZGVwZW5kZW5jeSBmb3IgYmxvY2tpbmcg
bW90aW9uIG9mIGxvYWRzIHdpdGggcmVzcGVjdCB0byBlYWNoIG90aGVyLiBTeW50YXg6CisgICAg
Ly8KKyAgICAvLyBAcmVzdWx0ID0gRGVwZW5kKEBwaGFudG9tKQorICAgIC8vCisgICAgLy8gVGhp
cyBpcyBldmVudHVhbGx5IGNvZGVnZW5lcmF0ZWQgdG8gaGF2ZSBsb2NhbCBzZW1hbnRpY3MgYXMg
aWYgd2UgZGlkOgorICAgIC8vCisgICAgLy8gQHJlc3VsdCA9ICQwCisgICAgLy8KKyAgICAvLyBC
dXQgaXQgZW5zdXJlcyB0aGF0IHRoZSB1c2VycyBvZiBAcmVzdWx0IGNhbm5vdCBleGVjdXRlIHVu
dGlsIEBwaGFudG9tIGlzIGNvbXB1dGVkLgorICAgIC8vCisgICAgLy8gVGhlIGNvbXBpbGVyIGlz
IG5vdCBhbGxvd2VkIHRvIHJlYXNvbiBhYm91dCB0aGUgZmFjdCB0aGF0IERlcGVuZCBjb2RlZ2Vu
ZXJhdGVzIHRoaXMgd2F5LiBBbnkga2luZAorICAgIC8vIG9mIHRyYW5zZm9ybWF0aW9uIG9yIGFu
YWx5c2lzIHRoYXQgcmVsaWVzIG9uIHRoZSBpbnNpZ2h0IHRoYXQgRGVwZW5kIGlzIHJlYWxseSB6
ZXJvIGlzIHVuc291bmQsCisgICAgLy8gYmVjYXVzZSBpdCB1bmxvY2tzIHJlb3JkZXJpbmcgb2Yg
dXNlcnMgb2YgQHJlc3VsdCBhbmQgQHBoYW50b20uCisgICAgLy8KKyAgICAvLyBPbiBYODYsIHRo
aXMgaXMgbG93ZXJlZCB0byBhIGxvYWQtbG9hZCBmZW5jZSBhbmQgQHJlc3VsdCB1c2VzIEBwaGFu
dG9tIGRpcmVjdGx5LgorICAgIC8vCisgICAgLy8gT24gQVJNLCB0aGlzIGlzIGxvd2VyZWQgYXMg
aWYgbGlrZToKKyAgICAvLworICAgIC8vIEByZXN1bHQgPSBCaXRYb3IoQHBoYW50b20sIEBwaGFu
dG9tKQorICAgIC8vCisgICAgLy8gRXhjZXB0IHRoYXQgdGhlIGNvbXBpbGVyIG5ldmVyIGdldHMg
YW4gb3Bwb3J0dW5pdHkgdG8gc2ltcGxpZnkgb3V0IHRoZSBCaXRYb3IuCisgICAgRGVwZW5kLAog
CiAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIGFjdHVhbCBhZGRyZXNzIG9mIGEg
V2FzbSBtZW1vcnkgb3BlcmF0aW9uLiBJdCB0YWtlcyBhbiBJbnRQdHIKICAgICAvLyBhbmQgYSBw
aW5uZWQgcmVnaXN0ZXIgdGhlbiBjb21wdXRlcyB0aGUgYXBwcm9wcmlhdGUgSW50UHRyIGFkZHJl
c3MuIEZvciB0aGUgdXNlLWNhc2Ugb2YKQEAgLTMwMSw2ICs0MDAsMTEwIEBAIGlubGluZSBib29s
IGlzRGVmaW5pdGVseVRlcm1pbmFsKE9wY29kZSAKICAgICB9CiB9CiAKK2lubGluZSBib29sIGlz
TG9hZChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBM
b2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgorICAgIGNhc2UgTG9h
ZDE2UzoKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzU3RvcmUo
T3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgU3RvcmU4
OgorICAgIGNhc2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxp
bmUgYm9vbCBpc0xvYWRTdG9yZShPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2Rl
KSB7CisgICAgY2FzZSBMb2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZa
OgorICAgIGNhc2UgTG9hZDE2UzoKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBTdG9yZTg6Cisg
ICAgY2FzZSBTdG9yZTE2OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBi
b29sIGlzQXRvbWljKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgY2Fz
ZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21p
Y1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9y
OgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNBdG9t
aWNDQVMoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2Ug
QXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
aW5saW5lIGJvb2wgaXNBdG9taWNYY2hnKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBBdG9taWNYY2hnQW5k
OgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICBj
YXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hnOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitp
bmxpbmUgYm9vbCBpc01lbW9yeUFjY2VzcyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHJldHVybiBp
c0F0b21pYyhvcGNvZGUpIHx8IGlzTG9hZFN0b3JlKG9wY29kZSk7Cit9CisKK2lubGluZSBPcGNv
ZGUgc2lnbkV4dGVuZE9wY29kZShXaWR0aCB3aWR0aCkKK3sKKyAgICBzd2l0Y2ggKHdpZHRoKSB7
CisgICAgY2FzZSBXaWR0aDg6CisgICAgICAgIHJldHVybiBTRXh0ODsKKyAgICBjYXNlIFdpZHRo
MTY6CisgICAgICAgIHJldHVybiBTRXh0MTY7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9vcHM7CisgICAgfQorfQor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwMiw2ICsyMDIsOCBAQCB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjCiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygiICAgICIsIGRlZXBEdW1wKCp0aGlzLCB2
YWx1ZSksICJcbiIpOwogICAgIH0KKyAgICBpZiAoaGFzUXVpcmtzKCkpCisgICAgICAgIG91dC5w
cmludCgiSGFzIFF1aXJrczogVHJ1ZVxuIik7CiAgICAgaWYgKHZhcmlhYmxlcygpLnNpemUoKSkg
ewogICAgICAgICBvdXQucHJpbnQoIlZhcmlhYmxlczpcbiIpOwogICAgICAgICBmb3IgKFZhcmlh
YmxlKiB2YXJpYWJsZSA6IHZhcmlhYmxlcygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDcgQEAgcHVi
bGljOgogICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChPcmlnaW4sIFR5cGUsIGludDY0X3QgdmFs
dWUpOwogICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChWYWx1ZSosIGludDY0X3QgdmFsdWUpOwog
CisgICAgLy8gWW91J3JlIGd1YXJhbnRlZWQgdGhhdCBib3R0b20gaXMgemVyby4KICAgICBWYWx1
ZSogYWRkQm90dG9tKE9yaWdpbiwgVHlwZSk7CiAgICAgVmFsdWUqIGFkZEJvdHRvbShWYWx1ZSop
OwogCkBAIC0xOTUsNiArMTk2LDEyIEBAIHB1YmxpYzoKICAgICAvLyBhbGl2ZS4gR3JlYXQgZm9y
IGNvbXBpbGVyLWdlbmVyYXRlZCBkYXRhIHNlY3Rpb25zLCBsaWtlIHN3aXRjaCBqdW1wIHRhYmxl
cyBhbmQgY29uc3RhbnQgcG9vbHMuCiAgICAgLy8gVGhpcyByZXR1cm5zIG1lbW9yeSB0aGF0IGhh
cyBiZWVuIHplcm8taW5pdGlhbGl6ZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWRk
RGF0YVNlY3Rpb24oc2l6ZV90KTsKKyAgICAKKyAgICAvLyBTb21lIG9wZXJhdGlvbnMgYXJlIHNw
ZWNpZmllZCBpbiBCMyBJUiB0byBiZWhhdmUgb25lIHdheSBidXQgb24gdGhpcyBnaXZlbiBDUFUg
dGhleSBiZWhhdmUgYQorICAgIC8vIGRpZmZlcmVudCB3YXkuIFdoZW4gdHJ1ZSwgdGhvc2UgQjMg
SVIgb3BzIHN3aXRjaCB0byBiZWhhdmluZyB0aGUgQ1BVIHdheSwgYW5kIHRoZSBvcHRpbWl6ZXIg
bWF5CisgICAgLy8gc3RhcnQgdGFraW5nIGFkdmFudGFnZSBvZiBpdC4KKyAgICBib29sIGhhc1F1
aXJrcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUXVpcmtzOyB9CisgICAgdm9pZCBzZXRIYXNRdWly
a3MoYm9vbCB2YWx1ZSkgeyBtX2hhc1F1aXJrcyA9IHZhbHVlOyB9CiAKICAgICBPcGFxdWVCeXBy
b2R1Y3RzJiBieXByb2R1Y3RzKCkgeyByZXR1cm4gKm1fYnlwcm9kdWN0czsgfQogCkBAIC0yNTIs
NiArMjU5LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFByaW50U3Ry
ZWFtJiwgT3JpZ2luKT4+IG1fb3JpZ2luUHJpbnRlcjsKICAgICBjb25zdCB2b2lkKiBtX2Zyb250
ZW5kRGF0YTsKICAgICBQQ1RvT3JpZ2luTWFwIG1fcGNUb09yaWdpbk1hcDsKKyAgICBib29sIG1f
aGFzUXVpcmtzIHsgZmFsc2UgfTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5n
dGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjk1LDYgKzEyOTUsMTYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fcHJvYy5oYXNRdWlya3MoKSkgewor
ICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDgoQXRvbWljWGNoZ19fXykKKyAgICAg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEF0b21pY1hjaGdfX18KKyAgICAgICAgICAgICAgICBp
ZiAoaXNBdG9taWNYY2hnKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVlPigpLT5vcGVyYXRp
b25XaWR0aCgpID09IFdpZHRoOCkgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElk
ZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgY2FzZSBTRXh0MTY6CkBAIC0xMzQzLDYgKzEzNTMsMTYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIW1fcHJvYy5oYXNRdWlya3MoKSkgeworICAgICAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogU0V4dDE2KEF0b21pY1hjaGdfX18pCisgICAgICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBBdG9taWNYY2hnX19fCisgICAgICAgICAgICAgICAgaWYgKGlzQXRvbWljWGNo
ZyhtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICYmIG1f
dmFsdWUtPmNoaWxkKDApLT5hczxBdG9taWNWYWx1ZT4oKS0+b3BlcmF0aW9uV2lkdGgoKSA9PSBX
aWR0aDE2KSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1
ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNF
eHQzMjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlz
aW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQ2LDYgKzM0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwog
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHBvaW50
ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2
YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNz
KHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTG9hZDoK
QEAgLTM1Myw2ICszNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0
ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgIT0g
Vm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZh
bHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU3RvcmU4OgpAQCAtMzYyLDYgKzM2
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCkt
PnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2
YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsK
ICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU3RvcmU6CkBAIC0zNjksOCArMzcyLDQ5IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9
PSAyLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5j
aGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAg
ICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgICAgIFZBTElEQVRF
KCF2YWx1ZS0+a2luZCgpLmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAzLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5
cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50
eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0Fj
Y2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0
b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5p
c0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPm51bUNoaWxkcmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0
ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0g
dmFsdWUtPmNoaWxkKDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRlclR5
cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21pYyh2
YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAg
ICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdP
cjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAgICAgICAgIGNhc2UgQXRv
bWljWGNoZ1hvcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZh
bHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBl
KCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFs
dWUpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEZXBlbmQ6CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVl
KSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgp
ID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtQWRkcmVzczoKICAg
ICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJB
dCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRy
ZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwpAQCAtNTM3LDYgKzU4MSwyMCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgdm9pZCB2
YWxpZGF0ZUZlbmNlKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmIChtZW1vcnktPmhh
c0ZlbmNlKCkpCisgICAgICAgICAgICBWQUxJREFURShtZW1vcnR5LT5hY2Nlc3NCYW5rKCkgPT0g
R1AsICgiRmVuY2UgYXQgIiwgKm1lbW9yeSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlk
YXRlQXRvbWljKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9t
aWMgPSB2YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgIAorICAgICAgICBWQUxJREFU
RShiZXN0VHlwZShhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpID09IGF0b21pYy0+b3BlcmF0aW9u
VHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgIH0KIAogICAgIHZvaWQgdmFsaWRhdGVTdGFj
a0FjY2VzcyhWYWx1ZSogdmFsdWUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTAsNiArNTEwLDcgQEAgYm9vbCBWYWx1
ZTo6cmV0dXJuc0Jvb2woKSBjb25zdAogICAgIGNhc2UgQWJvdmVFcXVhbDoKICAgICBjYXNlIEJl
bG93RXF1YWw6CiAgICAgY2FzZSBFcXVhbE9yVW5vcmRlcmVkOgorICAgIGNhc2UgQXRvbWljV2Vh
a0NBUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBQaGk6CiAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgaGF2ZSBhIHN0b3J5IGhlcmUuCkBAIC01ODksNiArNTkwLDcgQEAgRWZm
ZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgY2FzZSBCZWxvd0VxdWFsOgogICAgIGNh
c2UgRXF1YWxPclVub3JkZXJlZDoKICAgICBjYXNlIFNlbGVjdDoKKyAgICBjYXNlIERlcGVuZDoK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBEaXY6CiAgICAgY2FzZSBVRGl2OgpAQCAtNjAwLDE2
ICs2MDIsNDQgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgY2FzZSBMb2Fk
OFM6CiAgICAgY2FzZSBMb2FkMTZaOgogICAgIGNhc2UgTG9hZDE2UzoKLSAgICBjYXNlIExvYWQ6
Ci0gICAgICAgIHJlc3VsdC5yZWFkcyA9IGFzPE1lbW9yeVZhbHVlPigpLT5yYW5nZSgpOworICAg
IGNhc2UgTG9hZDogeworICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gYXM8TWVtb3J5VmFs
dWU+KCk7CisgICAgICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+cmFuZ2UoKTsKKyAgICAgICAg
aWYgKG1lbW9yeS0+cGhhbnRvbVJhbmdlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC53cml0ZXMg
PSBtZW1vcnktPnBoYW50b21SYW5nZSgpOworICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1
ZTsKKyAgICAgICAgfQogICAgICAgICByZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIFN0b3JlODoKICAgICBjYXNlIFN0b3JlMTY6
Ci0gICAgY2FzZSBTdG9yZToKLSAgICAgICAgcmVzdWx0LndyaXRlcyA9IGFzPE1lbW9yeVZhbHVl
PigpLT5yYW5nZSgpOworICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1l
bW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5
LT5yYW5nZSgpOworICAgICAgICBpZiAobWVtb3J5LT5waGFudG9tUmFuZ2UoKSkgeworICAgICAg
ICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5LT5waGFudG9tUmFuZ2UoKTsKKyAgICAgICAgICAg
IHJlc3VsdC5mZW5jZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmNvbnRyb2xE
ZXBlbmRlbnQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBdG9taWNX
ZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgIGNhc2UgQXRvbWljWGNoZ0Fk
ZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAg
Y2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0
b21pY1hjaGc6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVl
PigpOworICAgICAgICByZXN1bHQucmVhZHMgPSBtZW1vcnktPnJhbmdlKCkgfCBtZW1vcnktPnBo
YW50b21SYW5nZSgpOworICAgICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5yYW5nZSgpIHwg
bWVtb3J0eS0+cGhhbnRvbVJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPnBoYW50b21SYW5n
ZSgpKQorICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LmNv
bnRyb2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBX
YXNtQWRkcmVzczoKICAgICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAg
YnJlYWs7CkBAIC02MTcsMTggKzY0Nyw3IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25z
dAogICAgICAgICBjb25zdCBGZW5jZVZhbHVlKiBmZW5jZSA9IGFzPEZlbmNlVmFsdWU+KCk7CiAg
ICAgICAgIHJlc3VsdC5yZWFkcyA9IGZlbmNlLT5yZWFkOwogICAgICAgICByZXN1bHQud3JpdGVz
ID0gZmVuY2UtPndyaXRlOwotICAgICAgICAKLSAgICAgICAgLy8gUHJldmVudCBraWxsaW5nIG9m
IGZlbmNlcyB0aGF0IGNsYWltIG5vdCB0byB3cml0ZSBhbnl0aGluZy4gSXQncyBhIGJpdCB3ZWly
ZCB0aGF0IHdlIHVzZQotICAgICAgICAvLyBsb2NhbCBzdGF0ZSBhcyB0aGUgd2F5IHRvIGRvIHRo
aXMsIGJ1dCBpdCBoYXBwZW5zIHRvIHdvcms6IHdlIG11c3QgYXNzdW1lIHRoYXQgd2UgY2Fubm90
Ci0gICAgICAgIC8vIGtpbGwgd3JpdGVzTG9jYWxTdGF0ZSB1bmxlc3Mgd2UgdW5kZXJzdGFuZHMg
ZXhhY3RseSB3aGF0IHRoZSBpbnN0cnVjdGlvbiBpcyBkb2luZyAobGlrZQotICAgICAgICAvLyB0
aGUgd2F5IHRoYXQgZml4U1NBIHVuZGVyc3RhbmRzIFNldC9HZXQgYW5kIHRoZSB3YXkgdGhhdCBy
ZWR1Y2VTdHJlbmd0aCBhbmQgb3RoZXJzCi0gICAgICAgIC8vIHVuZGVyc3RhbmQgVXBzaWxvbiku
IFRoaXMgd291bGQgb25seSBiZWNvbWUgYSBwcm9ibGVtIGlmIHdlIGhhZCBzb21lIGFuYWx5c2lz
IHRoYXQgd2FzCi0gICAgICAgIC8vIGxvb2tpbmcgdG8gdXNlIHRoZSB3cml0ZXNMb2NhbFN0YXRl
IGJpdCB0byBpbnZhbGlkYXRlIGEgQ1NFIG92ZXIgbG9jYWwgc3RhdGUgb3BlcmF0aW9ucy4KLSAg
ICAgICAgLy8gVGhlbiBhIEZlbmNlIHdvdWxkIGxvb2sgYmxvY2ssIHNheSwgdGhlIGVsaW1pbmF0
aW9uIG9mIGEgcmVkdW5kYW50IEdldC4gQnV0IGl0IGxpa2UKLSAgICAgICAgLy8gdGhhdCdzIG5v
dCBhdCBhbGwgaG93IG91ciBvcHRpbWl6YXRpb25zIGZvciBTZXQvR2V0L1Vwc2lsb24vUGhpIHdv
cmsgLSB0aGV5IGdyb2sgdGhlaXIKLSAgICAgICAgLy8gb3BlcmF0aW9ucyBkZWVwbHkgZW5vdWdo
IHRoYXQgdGhleSBoYXZlIG5vIG5lZWQgdG8gY2hlY2sgdGhpcyBiaXQgLSBzbyB0aGlzIGNoZWF0
IGlzCi0gICAgICAgIC8vIGZpbmUuCi0gICAgICAgIHJlc3VsdC53cml0ZXNMb2NhbFN0YXRlID0g
dHJ1ZTsKKyAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIGNhc2UgQ0NhbGw6CkBAIC02OTQsNiArNzEzLDcgQEAgVmFsdWVLZXkgVmFsdWU6Omtl
eSgpIGNvbnN0CiAgICAgY2FzZSBDaGVjazoKICAgICBjYXNlIEJpdHdpc2VDYXN0OgogICAgIGNh
c2UgTmVnOgorICAgIGNhc2UgRGVwZW5kOgogICAgICAgICByZXR1cm4gVmFsdWVLZXkoa2luZCgp
LCB0eXBlKCksIGNoaWxkKDApKTsKICAgICBjYXNlIEFkZDoKICAgICBjYXNlIFN1YjoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEw
Nyw4IEBAIHB1YmxpYzoKICAgICAvLyB2YWx1ZXMgd2l0aCBJZGVudGl0aWVzIG9uIGJvdHRvbSBj
b25zdGFudHMuIEZvciB0aGlzIHJlYXNvbiwgdGhpcyB0YWtlcyBhIGNhbGxiYWNrIHRoYXQgaXMK
ICAgICAvLyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYm90dG9tcy4gVGhlcmUncyBhIHV0aWxp
dHkgZm9yIHRoaXMsIHNlZSBCM0JvdHRvbVByb3ZpZGVyLmguIFlvdQogICAgIC8vIGNhbiBhbHNv
IGFjY2VzcyB0aGF0IHV0aWxpdHkgdXNpbmcgcmVwbGFjZVdpdGhCb3R0b20oSW5zZXJ0aW9uU2V0
Jiwgc2l6ZV90KS4KKyAgICAvLworICAgIC8vIFlvdSdyZSBndWFyYW50ZWVkIHRoYXQgYm90dG9t
IGlzIHplcm8uCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQm90dG9tUHJvdmlkZXI+CiAgICAgdm9p
ZCByZXBsYWNlV2l0aEJvdHRvbShjb25zdCBCb3R0b21Qcm92aWRlciYpOwogICAgIApAQCAtMzIx
LDYgKzMyMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSVRvRjoKICAgICAgICAgY2FzZSBC
aXR3aXNlQ2FzdDoKICAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2UgRGVwZW5kOgog
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKG51bUFyZ3MgIT0gMSkpCiAgICAgICAgICAgICAgICAg
YmFkS2luZChraW5kLCBudW1BcmdzKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1dpZHRoLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCwz
OCBAQAogCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitUeXBlIGJlc3RUeXBlKEJhbmsgYmFuaywgV2lkdGggd2lkdGgpCit7
CisgICAgc3dpdGNoICh3aWR0aCkgeworICAgIGNhc2UgV2lkdGg4OgorICAgIGNhc2UgV2lkdGgx
NjoKKyAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgIHN3aXRjaCAoYmFuaykgeworICAgICAgICBj
YXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIEludDMyOworICAgICAgICBjYXNlIEZQOgorICAg
ICAgICAgICAgcmV0dXJuIEZsb2F0OworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWb2lkOworICAgIGNhc2UgV2lkdGg2NDoK
KyAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICBy
ZXR1cm4gSW50NjQ7CisgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICByZXR1cm4gRG91Ymxl
OworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBWb2lkOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBWb2lkOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwogbmFt
ZXNwYWNlIFdURiB7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6
OkIzOjpXaWR0aCB3aWR0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguaAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguaAkod29y
a2luZyBjb3B5KQpAQCAtNjIsNiArNjIsMTggQEAgaW5saW5lIFdpZHRoIHdpZHRoRm9yVHlwZShU
eXBlIHR5cGUpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK2lubGluZSBXaWR0aCBj
YW5vbmljYWxXaWR0aChXaWR0aCB3aWR0aCkKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoV2lkdGgz
Miwgd2lkdGgpOworfQorCitpbmxpbmUgV2lkdGggaXNDYW5vbmljYWxXaWR0aChXaWR0aCB3aWR0
aCkKK3sKKyAgICByZXR1cm4gd2lkdGggPj0gV2lkdGgzMjsKK30KKworVHlwZSBiZXN0VHlwZShC
YW5rIGJhbmssIFdpZHRoIHdpZHRoKTsKKwogaW5saW5lIFdpZHRoIGNvbnNlcnZhdGl2ZVdpZHRo
KEJhbmsgYmFuaykKIHsKICAgICByZXR1cm4gYmFuayA9PSBHUCA/IHBvaW50ZXJXaWR0aCgpIDog
V2lkdGg2NDsKQEAgLTkzLDYgKzEwNSwyMCBAQCBpbmxpbmUgV2lkdGggd2lkdGhGb3JCeXRlcyh1
bnNpZ25lZCBieXRlCiAgICAgfQogfQogCitpbmxpbmUgdWludDY0X3QgbWFzayhXaWR0aCB3aWR0
aCkKK3sKKyAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgY2FzZSBXaWR0aDg6CisgICAgICAgIHJl
dHVybiAweDAwMDAwMDAwMDAwMDAwZmZsbHU7CisgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICBy
ZXR1cm4gMHgwMDAwMDAwMDAwMDBmZmZmbGx1OworICAgIGNhc2UgV2lkdGgzMjoKKyAgICAgICAg
cmV0dXJuIDB4MDAwMDAwMDBmZmZmZmZmZmxsdTsKKyAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAg
IHJldHVybiAweGZmZmZmZmZmZmZmZmZmZmZsbHU7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NSw2ICsyODUsOSBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAgICAgY2FzZSBBcmc6
OkVhcmx5RGVmOgogICAgICAgICBvdXQucHJpbnQoIkVhcmx5RGVmIik7CiAgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFyZzo6RWFybHlaRGVmOgorICAgICAgICBvdXQucHJpbnQoIkVhcmx5WkRl
ZiIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OlNjcmF0Y2g6CiAgICAgICAgIG91
dC5wcmludCgiU2NyYXRjaCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsOCBA
QCBwdWJsaWM6CiAgICAgICAgIC8vIGFzIFVzZSBoYXMgdW5kZWZpbmVkIGJlaGF2aW9yOiB0aGUg
dXNlIG1heSBoYXBwZW4gYmVmb3JlIHRoZSBkZWYsIG9yIGl0IG1heSBoYXBwZW4gYWZ0ZXIKICAg
ICAgICAgLy8gaXQuCiAgICAgICAgIEVhcmx5RGVmLAorICAgICAgICAgICAgCisgICAgICAgIEVh
cmx5WkRlZiwKIAogICAgICAgICAvLyBTb21lIGluc3RydWN0aW9ucyBuZWVkIGEgc2NyYXRjaCBy
ZWdpc3Rlci4gV2UgbW9kZWwgdGhpcyBieSBzYXlpbmcgdGhhdCB0aGUgdGVtcG9yYXJ5IGlzCiAg
ICAgICAgIC8vIGRlZmluZWQgZWFybHkgYW5kIHVzZWQgbGF0ZS4gVGhpcyByb2xlIGltcGxpZXMg
dGhhdC4KQEAgLTE4Niw2ICsxODgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgWkRlZjoKICAg
ICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNl
IEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIwNiw2ICsyMDksNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICBjYXNlIEVh
cmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIyOCw2ICsy
MzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBTY3Jh
dGNoOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAg
ICAgICAgICAgIHJldHVybiByb2xlOwogICAgICAgICBjYXNlIFVzZToKICAgICAgICAgICAgIHJl
dHVybiBDb2xkVXNlOwpAQCAtMjUzLDYgKzI1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBM
YXRlQ29sZFVzZToKICAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICBjYXNlIEVhcmx5RGVm
OgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI3NCw2ICsyODAsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAg
ICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTI5NCw2ICszMDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAg
Y2FzZSBVc2VaRGVmOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5
WkRlZjoKICAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KQEAgLTMxNSw2ICszMjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgTGF0ZUNv
bGRVc2U6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgRWFybHlEZWY6
CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzMwLDYgKzMzOSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIExhdGVVc2U6CiAgICAgICAgIGNh
c2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICBjYXNlIFNjcmF0
Y2g6CiAgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0zNTgsNiArMzY4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBjYXNlIFpEZWY6CiAgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBF
YXJseVpEZWY6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsMTkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogCiBj
b25zdCBjaGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpkdW1wUHJlZml4ID0gIiMiOwogCit2b2lkIEJh
c2ljQmxvY2s6OnNldFN1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgbV9zdWNj
ZXNzb3JzLnJlc2l6ZSgxKTsKKyAgICBtX3N1Y2Nlc3NvcnNbMF0gPSB0YXJnZXQ7Cit9CisKK3Zv
aWQgQmFzaWNCbG9jazo6c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sgdGFrZW4sIEZyZXF1
ZW50ZWRCbG9jayBub3RUYWtlbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMucmVzaXplKDIpOworICAg
IG1fc3VjY2Vzc29yc1swXSA9IHRha2VuOworICAgIG1fc3VjY2Vzc29yc1sxXSA9IG5vdFRha2Vu
OworfQorCiBib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2Nr
KQogewogICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdWNj
ZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CiAg
ICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQog
CisgICAgdm9pZCBzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayk7CisgICAgdm9pZCBzZXRT
dWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jaywgRnJlcXVlbnRlZEJsb2NrKTsKKwogICAgIEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBzdWNj
ZXNzb3IoaW5kZXgpLmJsb2NrKCk7IH0KICAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yQmxvY2so
dW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsgfQogICAg
IFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29y
QmxvY2tzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNl
cnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgor
I2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvQnViYmxlU29ydC5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK0Jsb2NrSW5zZXJ0
aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChDb2RlICZjb2RlKQorICAgIDogR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0KGNvZGUubV9ibG9ja3MpCit7Cit9CisKK0Jsb2NrSW5zZXJ0aW9uU2V0Ojp+
QmxvY2tJbnNlcnRpb25TZXQoKQoreworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzR2VuZXJpY0Jsb2NrSXNuZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworY2xhc3MgSW5zZXJ0aW9uU2V0OworCit0eXBlZGVmIEdlbmVyaWNCbG9ja0luc2VydGlvblNl
dDxCYXNpY0Jsb2NrPjo6QmxvY2tJbnNlcnRpb24gQmxvY2tJbnNlcnRpb247CisKK2NsYXNzIEJs
b2NrSW5zZXJ0aW9uU2V0IDogcHVibGljIEdlbmVyaWNCbG9ja0luc2VydGlvblNldDxCYXNpY0Js
b2NrPiB7CitwdWJsaWM6CisgICAgQmxvY2tJbnNlcnRpb25TZXQoQ29kZSYpOworICAgIH5CbG9j
a0luc2VydGlvblNldCgpOworICAgIAorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXZlbnR1YWxs
eSBpbXBsZW1lbnQgQjM6OkJsb2NrSW5zZXJ0aW9uU2V0J3Mgc3BsaXRGb3J3YXJkKCkuCit9Owor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rl
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5v
cGNvZGVzCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENv
cHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMK
ICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjY4LDI4ICs2NjgsMzYzIEBAIExvYWQ4IFU6
Rzo4LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxOCBV
Okc6OCwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogU3RvcmU4IFU6
Rzo4LCBEOkc6OAogICAgIFRtcCwgSW5kZXgKICAgICBUbXAsIEFkZHIKICAgICB4ODY6IEltbSwg
SW5kZXgKICAgICB4ODY6IEltbSwgQWRkcgogCitTdG9yZVJlbDggVTpHOjgsIEQ6Rzo4CisgICAg
VG1wLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorICAgIHg4Njog
SW1tLCBBZGRyCisKIExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiBVOkc6OCwgWkQ6RzozMgogICAgIEFk
ZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9hZEFjcThTaWduZWRFeHRlbmRUbzMyIFU6Rzo4
LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBMb2FkMTYgVTpHOjE2
LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxMTYgVTpH
OjE2LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBMb2FkMTZTaWdu
ZWRFeHRlbmRUbzMyIFU6RzoxNiwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBU
bXAKIAorTG9hZEFjcTE2U2lnbmVkRXh0ZW5kVG8zMiBVOkc6MTYsIFpEOkc6MzIKKyAgICBBZGRy
LCBUbXAKKyAgICBJbmRleCwgVG1wCisKIFN0b3JlMTYgVTpHOjE2LCBEOkc6MTYKICAgICBUbXAs
IEluZGV4CiAgICAgVG1wLCBBZGRyCiAKK1N0b3JlQWNxMTYgVTpHOjE2LCBEOkc6MTYKKyAgICBU
bXAsIEluZGV4CisgICAgVG1wLCBBZGRyCisKK0xvYWRBY3EzMiBVOkc6MzIgWkQ6RzozMgorICAg
IFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCitTdG9yZVJlbDMyIFU6
RzozMiBaRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorICAgIHg4NjogSW1t
LCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisKKzY0OiBMb2FkQWNxNjQgVTpHOjY0IFpEOkc6
NjQKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworNjQ6IFN0
b3JlUmVsNjQgVTpHOjY0IFpEOkc6NjQKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4Cisg
ICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKworIyBUaGUgZmlyc3Qgb3Bl
cmFuZCBpcyByYXguCit4ODY6IExvY2tDbXBYY2hnOCBVRDpHOjgsIFU6Rzo4LCBVRDpHOjgsIFpE
Okc6OAorICAgIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAgVG1wKiwgVG1wLCBJbmRleCwgVG1w
CisKK3g4NjogTG9ja0NtcFhjaGcxNiBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYsIFpEOkc6OAor
ICAgIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAgVG1wKiwgVG1wLCBJbmRleCwgVG1wCisKK3g4
NjogTG9ja0NtcFhjaGczMiBVRDpHOjMyLCBVOkc6MzIsIFVEOkc6MzIsIFpEOkc6OAorICAgIFRt
cCosIFRtcCwgQWRkciwgVG1wCisgICAgVG1wKiwgVG1wLCBJbmRleCwgVG1wCisKK3g4Nl82NDog
TG9ja0NtcFhjaGc2NCBVRDpHOjY0LCBVOkc6NjQsIFVEOkc6NjQsIFpEOkc6OAorICAgIFRtcCos
IFRtcCwgQWRkciwgVG1wCisgICAgVG1wKiwgVG1wLCBJbmRleCwgVG1wCisKK3g4NjogQnJhbmNo
TG9ja0NtcFhjaGc4IFVEOkc6OCwgVTpHOjgsIFVEOkc6OCAvYnJhbmNoCisgICAgVG1wKiwgVG1w
LCBBZGRyCisgICAgVG1wKiwgVG1wLCBJbmRleAorCit4ODY6IEJyYW5jaExvY2tDbXBYY2hnMTYg
VUQ6RzoxNiwgVTpHOjMyLCBVRDpHOjE2IC9icmFuY2gKKyAgICBUbXAqLCBUbXAsIEFkZHIKKyAg
ICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNoTG9ja0NtcFhjaGczMiBVRDpHOjMyLCBV
Okc6MzIsIFVEOkc6MzIgL2JyYW5jaAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRt
cCwgSW5kZXgKKworeDg2XzY0OiBCcmFuY2hMb2NrQ21wWGNoZzY0IFVEOkc6NjQsIFU6Rzo2NCwg
VUQ6Rzo2NCAvYnJhbmNoCisgICAgVG1wKiwgVG1wLCBBZGRyCisgICAgVG1wKiwgVG1wLCBJbmRl
eAorCit4ODY6IExvY2tBZGQ4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0s
IEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tBZGQxNiBV
Okc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tBZGQzMiBVOkc6MzIsIFVEOkc6MzIKKyAg
ICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCit4ODZfNjQ6IExvY2tBZGQ2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAg
ICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tT
dWI4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1w
LCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tTdWIxNiBVOkc6MTYsIFVEOkc6MTYK
KyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJ
bmRleAorCit4ODY6IExvY2tTdWIzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAg
ICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IExv
Y2tTdWI2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4Cisg
ICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tBbmQ4IFU6Rzo4LCBVRDpH
OjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1w
LCBJbmRleAorCit4ODY6IExvY2tBbmQxNiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIK
KyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExv
Y2tBbmQzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4Cisg
ICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IExvY2tBbmQ2NCBVOkc6NjQs
IFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisg
ICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tPcjggVTpHOjgsIFVEOkc6OAorICAgIEltbSwgQWRk
cgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Njog
TG9ja09yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAor
ICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrT3IzMiBVOkc6MzIsIFVE
Okc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAg
VG1wLCBJbmRleAorCit4ODZfNjQ6IExvY2tPcjY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwg
QWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4
NjogTG9ja1hvcjggVTpHOjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgK
KyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hvcjE2IFU6RzoxNiwg
VUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hvcjMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwg
QWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4
Nl82NDogTG9ja1hvcjY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwg
SW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja05lZzggVUQ6
Rzo4CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogTG9ja05lZzE2IFVEOkc6MTYKKyAgICBB
ZGRyCisgICAgSW5kZXgKKworeDg2OiBMb2NrTmVnMzIgVUQ6RzozMgorICAgIEFkZHIKKyAgICBJ
bmRleAorCit4ODZfNjQ6IExvY2tOZWc2NCBVRDpHOjY0CisgICAgQWRkcgorICAgIEluZGV4CisK
K3g4NjogTG9ja05vdDggVUQ6Rzo4CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogTG9ja05v
dDE2IFVEOkc6MTYKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBMb2NrTm90MzIgVUQ6Rzoz
MgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODZfNjQ6IExvY2tOb3Q2NCBVRDpHOjY0CisgICAg
QWRkcgorICAgIEluZGV4CisKK3g4NjogTG9ja1hBZGQ4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1w
LCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tYQWRkMTYgVUQ6RzoxNiwgVUQ6Rzox
NgorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrWEFkZDMyIFVEOkc6
MzIsIFVEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9j
a1hBZGQ2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAor
Cit4ODY6IExvY2tYY2hnOCBVRDpHOjgsIFVEOkc6OAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwg
SW5kZXgKKworeDg2OiBMb2NrWGNoZzE2IFVEOkc6MTYsIFVEOkc6MTYKKyAgICBUbXAsIEFkZHIK
KyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hjaGczMiBVRDpHOjMyLCBVRDpHOjMyCisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IExvY2tYY2hnNjQgVUQ6Rzo2NCwg
VUQ6Rzo2NAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworYXJtNjQ6IExvYWRMaW5r
OCBVOkc6OCwgWkQ6Rzo4CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDog
TG9hZExpbmtBY3E4IFU6Rzo4LCBaRDpHOjgKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1w
CisKK2FybTY0OiBTdG9yZUNvbmQ4IFU6Rzo4LCBEOkc6OCwgRVpEOkc6OAorICAgIFRtcCwgQWRk
ciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmRSZWw4IFU6Rzo4
LCBEOkc6OCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1w
CisKK2FybTY0OiBMb2FkTGluazE2IFU6RzoxNiwgWkQ6RzoxNgorICAgIEFkZHIsIFRtcAorICAg
IEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rQWNxMTYgVTpHOjE2LCBaRDpHOjE2CisgICAg
QWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kMTYgVTpHOjE2LCBE
Okc6MTYsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAor
Cithcm02NDogU3RvcmVDb25kUmVsMTYgVTpHOjE2LCBEOkc6MTYsIEVaRDpHOjgKKyAgICBUbXAs
IEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmszMiBVOkc6
MzIsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2Fk
TGlua0FjcTMyIFU6RzozMiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAK
KworYXJtNjQ6IFN0b3JlQ29uZDMyIFU6RzozMiwgRDpHOjMyLCBFWkQ6Rzo4CisgICAgVG1wLCBB
ZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDMyIFU6
RzozMiwgRDpHOjMyLCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4
LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rNjQgVTpHOjY0LCBaRDpHOjY0CisgICAgQWRkciwgVG1w
CisgICAgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmtBY3E2NCBVOkc6NjQsIFpEOkc6NjQK
KyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQ2NCBVOkc6
NjQsIEQ6Rzo2NCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwg
VG1wCisKK2FybTY0OiBTdG9yZUNvbmRSZWw2NCBVOkc6NjQsIEQ6Rzo2NCwgRVpEOkc6OAorICAg
IFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBEZXBlbmQzMiBV
Okc6MzIsIEQ6RzozMgorICAgIFRtcCwgVG1wCisKK2FybTY0OiBEZXBlbmQ2NCBVOkc6NjQsIEQ6
Rzo2NAorICAgIFRtcCwgVG1wCisKIENvbXBhcmUzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBa
RDpHOjMyCiAgICAgUmVsQ29uZCwgVG1wLCBUbXAsIFRtcAogICAgIFJlbENvbmQsIFRtcCwgSW1t
LCBUbXAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGFkSW50ZXJmZXJl
bmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBh
ZEludGVyZmVyZW5jZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NiArNDgsNyBAQCB2b2lkIHBhZEludGVyZmVyZW5jZShDb2RlJiBjb2RlKQogICAgICAgICAgICAg
ICAgIFsmXSAoQXJnJiwgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
RWFybHlEZWY6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJseVpEZWY6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBoYXNFYXJseURlZiA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkxhdGVVc2U6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5
dGhpbmcuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUs
NyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6TGF0ZUNvbGRVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpT
Y3JhdGNoOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlEZWY6CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJseVpEZWY6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKFJlZyByZWcgOiBjb2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoYmFuaykpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0
ZXIuZ2V0KHJlZykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIu
c2V0KHJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5l
cmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNv
ZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw3ICsx
ODIsNyBAQCBkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCiBlbmQKIAogZGVmIGlzUm9sZSh0b2tlbikK
LSAgICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpfChaRCl8KFVaRCl8KFVBKXwoUykpXFovCisg
ICAgdG9rZW4gPX4gL1xBKChVKXwoRCl8KFVEKXwoWkQpfChVWkQpfChVQSl8KFMpfChFRCl8KEVa
RCl8KExVKSlcWi8KIGVuZAogCiBkZWYgaXNHRih0b2tlbikKQEAgLTY1MSw2ICs2NTEsMTIgQEAg
d3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VB
ZGRyIgogICAgICAgICAgICAgICAgIHdoZW4gIlMiCiAgICAgICAgICAgICAgICAgICAgIHJvbGUg
PSAiU2NyYXRjaCIKKyAgICAgICAgICAgICAgICB3aGVuICJFRCIKKyAgICAgICAgICAgICAgICAg
ICAgcm9sZSA9ICJFYXJseURlZiIKKyAgICAgICAgICAgICAgICB3aGVuICJFWkQiCisgICAgICAg
ICAgICAgICAgICAgIHJvbGUgPSAiRWFybHlaRGVmIgorICAgICAgICAgICAgICAgIHdoZW4gIkxV
IgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIkxhdGVVc2UiCiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302795</attachid>
            <date>2017-02-26 16:22:05 -0800</date>
            <delta_ts>2017-02-27 09:53:46 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>109594</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMSBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OwogCQkwRjJENERERDE5ODMyRDM0MDA3RDRC
MTkgLyogRGVidWdnZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJENEREQjE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5j
cHAgKi87IH07CiAJCTBGMkQ0RERFMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJENEREQzE5
ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkQ0REU4MTk4MzJEQUMwMDdENEIxOSAvKiBU
b1RoaXNTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyRDRERTUxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5jcHAgKi87IH07
CkBAIC0yNzY0LDYgKzI3NjksMTEgQEAKIAkJMEYyQzYzQUMxRTYwQUUzQzAwQzEzODM5IC8qIEIz
QmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhbmsuaDsgcGF0aCA9
IGIzL0IzQmFuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNjNBRDFFNjBB
RTNDMDBDMTM4MzkgLyogQjNXaWR0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM1dpZHRoLmNwcDsgcGF0aCA9IGIzL0IzV2lkdGguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjJDNjNBRTFFNjBBRTNEMDBDMTM4MzkgLyogQjNXaWR0aC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dpZHRoLmg7IHBhdGggPSBiMy9CM1dp
ZHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0IzMUU2MzQzRTgwMEMx
MzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzQXRvbWljVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBdG9taWNWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBC
M0F0b21pY1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQXRvbWlj
VmFsdWUuaDsgcGF0aCA9IGIzL0IzQXRvbWljVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0
aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCOTFFNjM0NDA4MDBDMTM4MzkgLyog
QWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0FpckJsb2NrSW5z
ZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQkExRTYz
NDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWly
QmxvY2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDRE
REIxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVidWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkQ0RERDMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQ
cm9maWxlckxvZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTI5Miw2ICs1MzAyLDggQEAKIAkJCQkwRkVD
ODRCMzFCREFDRDg4MDA4MEZGNzQgLyogYWlyICovLAogCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovLAogCQkJCTBGRUM4NEI1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCAqLywKKwkJCQkwRjJDNjNCMzFFNjM0M0U4
MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5jcHAgKi8sCisJCQkJMEYyQzYzQjQxRTYzNDNFODAw
QzEzODM5IC8qIEIzQXRvbWljVmFsdWUuaCAqLywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4
MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJCQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNC
YW5rLmggKi8sCiAJCQkJMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5j
cHAgKi8sCkBAIC01MzU0LDYgKzUzNjYsNyBAQAogCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4NENFMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyog
QjNHZW5lcmF0ZS5oICovLAorCQkJCTBGMkM2M0I1MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0dlbmVy
aWNCbG9ja0luc2VydGlvblNldC5oICovLAogCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCAqLywKIAkJCQkwRkVDODVCRjFCRTE2N0EwMDA4
MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3BwICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3
NCAvKiBCM0hlYXBSYW5nZS5oICovLApAQCAtNTQ2OSw2ICs1NDgyLDggQEAKIAkJCQkwRjY0RUFG
MjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFD
REM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgw
MEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYz
NDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIx
QkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYx
ODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC03
OTU2LDYgKzc5NzEsNyBAQAogCQkJCTBGRUM4NTgwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU4MTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5z
dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREY2N0Q3MUQ5REM0NDIwMDFCOTgyNSAv
KiBBaXJLaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJDNjNCQzFFNjM0NDBDMDBDMTM4Mzkg
LyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2ODRENDM4MUMw
MDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMzRD
MUExQzRCMzlBRTAwMDNBNTEyIC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjE4MzJGMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxs
b2MuaCBpbiBIZWFkZXJzICovLApAQCAtODA0Nyw2ICs4MDYzLDcgQEAKIAkJCQk0MzQyMkE2MzFD
MTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NUIzMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMzM4REY2MUJFOTNENTUwMDEzQzg4RiAvKiBCM0NvbnN0cmFpbmVkVmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVy
aWNCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhFMEUxQkYwMjc2
QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzNGQ0ZD
MUMxNjI1QkUwMDMyM0Y2NyAvKiBCM0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NkI4QUQ5MUM0RUREQTIwMDk2OTA1MiAvKiBCM0R1cGxpY2F0ZVRhaWxzLmggaW4gSGVhZGVycyAq
LywKQEAgLTgzNjYsNiArODM4Myw3IEBACiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8q
IERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1
NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFu
dG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYw
MEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3
RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjQ4LDYg
KzEwMjY2LDcgQEAKIAkJCQk5RTcyOTQwNzE5MEYwMUE1MDAxQTkxQjUgLyogSW5pdGlhbGl6ZVRo
cmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1QUQg
LyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxNEIyQzIxODVBNjg0
NDAwRjNDN0NCIC8qIEluamVjdGVkU2NyaXB0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjJDNjNCNjFFNjM0M0VBMDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNThFMzU5MTE4NjBERUNGMDAxRjI0RkUgLyogSW5qZWN0ZWRTY3JpcHRIb3N0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUNBMTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4NDBFMjAxODdCN0I4NjAw
ODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAy
NjYsNiArMTAyODUsNyBAQAogCQkJCUUzNUUwMzVGMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzOEIx
ODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNTBFNEI2MTE4ODA5REQ1MDA2OEE0NkQgLyogSW5zcGVjdG9yUnVudGltZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBB
aXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTUxNjVEMjFCREYw
Qjk4MDAzQjc1QzEgLyogSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNTkzQ0Y4MjE4NDAzNzcxMDBCRkNFMjcgLyogSW5zcGVjdG9yVmFsdWVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNGMTA3RUMzNzYwMDQyN0E0OCAvKiBJbnRlcm5h
bEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQXRvbWljVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQXRvbWljVmFsdWU6On5B
dG9taWNWYWx1ZSgpCit7Cit9CisKK1dpZHRoIEF0b21pY1ZhbHVlOjphY2Nlc3NXaWR0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fd2lkdGg7Cit9CisKK3ZvaWQgQXRvbWljVmFsdWU6OmR1bXBN
ZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KGNvbW1hLCAid2lkdGggPSAiLCBtX3dpZHRoKTsKKyAgICAKKyAgICBNZW1vcnlW
YWx1ZTo6ZHVtcE1ldGEoY29tbWEsIG91dCk7Cit9CisKK1ZhbHVlKiBBdG9taWNWYWx1ZTo6Y2xv
bmVJbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IEF0b21pY1ZhbHVlKCp0aGlzKTsKK30K
KworQXRvbWljVmFsdWU6OkF0b21pY1ZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgV2lk
dGggd2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQg
PSAwKQorICAgIDogTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgb3BlcmFuZC0+dHlw
ZSgpLCBvcmlnaW4sIG9mZnNldCwgb3BlcmFuZCwgcG9pbnRlcikKKyAgICAsIG1fd2lkdGgod2lk
dGgpCit7CisgICAgc2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBB
U1NFUlQoYmVzdFR5cGUob3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKyAg
ICAKKyAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6
CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNh
c2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9t
aWNYY2hnOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK0F0b21pY1ZhbHVlOjpBdG9taWNWYWx1ZShLaW5kIGtp
bmQsIE9yaWdpbiBvcmlnaW4sIFdpZHRoIHdpZHRoLCBWYWx1ZSogZXhwZWN0ZWRWYWx1ZSwgVmFs
dWUqIG5ld1ZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDog
TWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwga2luZC5vcGNvZGUoKSA9PSBBdG9taWNX
ZWFrQ0FTID8gSW50MzIgOiBleHBlY3RlZFZhbHVlLT50eXBlKCksIG9yaWdpbiwgb2Zmc2V0LCBl
eHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSwgcG9pbnRlcikKKyAgICAsIG1fd2lkdGgod2lkdGgpCit7
CisgICAgc2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBBU1NFUlQo
YmVzdFR5cGUob3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKworICAgIHN3
aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNl
IEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQXRvbWljVmFsdWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisj
aW5jbHVkZSAiQjNXaWR0aC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQXRvbWljVmFsdWUgOiBwdWJsaWMgTWVtb3J5VmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzQXRvbWljKGtpbmQub3Bjb2RlKCkpOworICAgIH0KKyAgICAKKyAgICB+
QXRvbWljVmFsdWUoKTsKKyAgICAKKyAgICBUeXBlIG9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJl
dHVybiBjaGlsZCgwKS0+dHlwZSgpOyB9CisgICAgCisgICAgV2lkdGggb3BlcmF0aW9uV2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgCisgICAgLy8gU3lub255bSBmb3Igd2lk
dGgoKSwgaWYgeW91J3JlIGFjY2Vzc2luZyB2aWEgTWVtb3J5VmFsdWUuCisgICAgV2lkdGggYWNj
ZXNzV2lkdGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1
bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
CisgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIEF0b21pY1ZhbHVlKEtpbmQs
IE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBv
ZmZzZXQgPSAwKTsKKyAgICAKKyAgICBBdG9taWNWYWx1ZShLaW5kLCBPcmlnaW4sIFdpZHRoLCBW
YWx1ZSogZXhwZWN0ZWRWYWx1ZSwgVmFsdWUqIG5ld1ZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50
MzJfdCBvZmZzZXQgPSAwKTsKKyAgICAKKyAgICBXaWR0aCBtX3dpZHRoOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2Vy
dGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMzUgKzM2LDEzIEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKIAogQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0
KFByb2NlZHVyZSAmcHJvYykKLSAgICA6IG1fcHJvYyhwcm9jKQorICAgIDogR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0KHByb2MubV9ibG9ja3MpCisgICAgLCBtX3Byb2MocHJvYykKIHsKIH0KIAog
QmxvY2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsgfQogCi12b2lkIEJsb2Nr
SW5zZXJ0aW9uU2V0OjppbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCi17Ci0gICAg
bV9pbnNlcnRpb25zLmFwcGVuZChXVEZNb3ZlKGluc2VydGlvbikpOwotfQotCi1CYXNpY0Jsb2Nr
KiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVl
bmN5KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNC
bG9jayhVSU5UX01BWCwgZnJlcXVlbmN5KSk7Ci0gICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxv
Y2suZ2V0KCk7Ci0gICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2Nr
KSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9u
U2V0OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5KQot
ewotICAgIHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVl
bmN5ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVuY3koKSk7Ci19Ci0KLUJhc2ljQmxvY2sq
IEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91Ymxl
IGZyZXF1ZW5jeSkKLXsKLSAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJl
cXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7Ci19
Ci0KIEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjpzcGxpdEZvcndhcmQoCiAgICAgQmFz
aWNCbG9jayogYmxvY2ssIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqIGluc2Vy
dGlvblNldCwgZG91YmxlIGZyZXF1ZW5jeSkKIHsKQEAgLTEwMiwzMiArODAsNiBAQCBCYXNpY0Js
b2NrKiBCbG9ja0luc2VydGlvblNldDo6c3BsaXRGb3J3CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgpCi17Ci0gICAgaWYgKG1faW5zZXJ0
aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBXZSBh
bGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5l
ZWQgdG8gc29ydCB0aGVtIGJlZm9yZQotICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0
aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8g
YmUKLSAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCi0gICAgYnViYmxlU29ydCht
X2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKLQotICAgIGV4ZWN1dGVJ
bnNlcnRpb25zKG1fcHJvYy5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKLSAgICAKLSAgICAvLyBQ
cnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0
IGl0J3MKLSAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5n
LgotICAgIG1fcHJvYy5tX2Jsb2Nrcy5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgWyZdIChz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4mIGJsb2NrUHRyKSAtPiBib29sIHsKLSAgICAgICAg
ICAgIHJldHVybiAhYmxvY2tQdHI7Ci0gICAgICAgIH0pOwotICAgIAotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9wcm9jLm1fYmxvY2tzLnNpemUoKTsgKytpKQotICAgICAgICBtX3By
b2MubV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQot
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5z
ZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCIKICNp
bmNsdWRlICJCM1Byb2NlZHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zNSwyNiArMzYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEluc2VydGlvblNldDsKIAotdHlwZWRlZiBXVEY6Okluc2Vy
dGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOwordHlwZWRl
ZiBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz46OkJsb2NrSW5zZXJ0aW9uIEJs
b2NrSW5zZXJ0aW9uOwogCi1jbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitjbGFzcyBCbG9ja0lu
c2VydGlvblNldCA6IHB1YmxpYyBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz4g
ewogcHVibGljOgogICAgIEJsb2NrSW5zZXJ0aW9uU2V0KFByb2NlZHVyZSYpOwogICAgIH5CbG9j
a0luc2VydGlvblNldCgpOwogICAgIAotICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYp
OwotCi0gICAgLy8gSW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCi0gICAgQmFz
aWNCbG9jayogaW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7
Ci0KLSAgICAvLyBJbnNlcnRzIGEgbmV3IGJsb2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVz
dWFsbHkgeW91IHdpbGwgbm90IHBhc3MgdGhlIGZyZXF1ZW5jeQotICAgIC8vIGFyZ3VtZW50LiBQ
YXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRvIGp1c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdi
ZWZvcmUnIGJsb2NrLiBUaGF0J3MKLSAgICAvLyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCi0gICAg
QmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1
ZW5jeSA9IFBOYU4pOwotCi0gICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2
ZW4gYmxvY2suCi0gICAgQmFzaWNCbG9jayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIs
IGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLQogICAgIC8vIEEgaGVscGVyIHRvIHNwbGl0IGEg
YmxvY2sgd2hlbiBmb3J3YXJkIGl0ZXJhdGluZyBvdmVyIGl0LiBJdCBjcmVhdGVzIGEgbmV3IGJs
b2NrIHRvIGhvbGQKICAgICAvLyBldmVyeXRoaW5nIGJlZm9yZSB0aGUgaW5zdHJ1Y3Rpb24gYXQg
dmFsdWVJbmRleC4gVGhlIGN1cnJlbnQgYmxvY2sgaXMgbGVmdCB3aXRoCiAgICAgLy8gZXZlcnl0
aGluZyBhdCBhbmQgYWZ0ZXIgdmFsdWVJbmRleC4gSWYgdGhlIG9wdGlvbmFsIEluc2VydGlvblNl
dCBpcyBwcm92aWRlZCwgaXQgd2lsbCBnZXQKQEAgLTgwLDEyICs2OCw5IEBAIHB1YmxpYzoKICAg
ICBCYXNpY0Jsb2NrKiBzcGxpdEZvcndhcmQoCiAgICAgICAgIEJhc2ljQmxvY2sqLCB1bnNpZ25l
ZCYgdmFsdWVJbmRleCwgSW5zZXJ0aW9uU2V0KiA9IG51bGxwdHIsCiAgICAgICAgIGRvdWJsZSBm
cmVxdWVuY3kgPSBQTmFOKTsKLSAgICAKLSAgICBib29sIGV4ZWN1dGUoKTsKIAogcHJpdmF0ZToK
ICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKLSAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1f
aW5zZXJ0aW9uczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3
ICs4Miw4IEBAIGJvb2wgRWZmZWN0czo6aW50ZXJmZXJlcyhjb25zdCBFZmZlY3RzJiAKICAgICAg
ICAgfHwgaW50ZXJmZXJlc1dpdGhXcml0ZXNQaW5uZWQob3RoZXIsICp0aGlzKQogICAgICAgICB8
fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIud3JpdGVzKQogICAgICAgICB8fCB3cml0ZXMub3Zlcmxh
cHMob3RoZXIucmVhZHMpCi0gICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcyk7
CisgICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKKyAgICAgICAgfHwgKGZl
bmNlICYmIG90aGVyLmZlbmNlKTsKIH0KIAogYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0
IEVmZmVjdHMmIG90aGVyKSBjb25zdApAQCAtOTUsNyArOTYsOCBAQCBib29sIEVmZmVjdHM6Om9w
ZXJhdG9yPT0oY29uc3QgRWZmZWN0cyYgCiAgICAgICAgICYmIHdyaXRlc1Bpbm5lZCA9PSBvdGhl
ci53cml0ZXNQaW5uZWQKICAgICAgICAgJiYgcmVhZHNQaW5uZWQgPT0gb3RoZXIucmVhZHNQaW5u
ZWQKICAgICAgICAgJiYgd3JpdGVzID09IG90aGVyLndyaXRlcwotICAgICAgICAmJiByZWFkcyA9
PSBvdGhlci5yZWFkczsKKyAgICAgICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHMKKyAgICAgICAg
JiYgZmVuY2UgPT0gb3RoZXIuZmVuY2U7CiB9CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3IhPShj
b25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAgLTEyMCw2ICsxMjIsOCBAQCB2b2lkIEVmZmVj
dHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
IldyaXRlc1Bpbm5lZCIpOwogICAgIGlmIChyZWFkc1Bpbm5lZCkKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiUmVhZHNQaW5uZWQiKTsKKyAgICBpZiAoZmVuY2UpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIkZlbmNlIik7CiAgICAgaWYgKHdyaXRlcykKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiV3JpdGVzOiIsIHdyaXRlcyk7CiAgICAgaWYgKHJlYWRzKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBA
QCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MzE3MwogICAgIGJvb2wgcmVhZHNQaW5uZWQgeyBmYWxzZSB9OwogICAgIGJv
b2wgd3JpdGVzUGlubmVkIHsgZmFsc2UgfTsKKyAgICAKKyAgICAvLyBNZW1vcnkgZmVuY2VzIGNh
bm5vdCBiZSByZW9yZGVyZWQgYXJvdW5kIGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVpciBl
ZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQKKyAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEgbWVt
b3J5IGZlbmNlLgorICAgIGJvb2wgZmVuY2UgeyBmYWxzZSB9OwogCiAgICAgSGVhcFJhbmdlIHdy
aXRlczsKICAgICBIZWFwUmFuZ2UgcmVhZHM7CkBAIC04OSw2ICs5Myw3IEBAIHN0cnVjdCBFZmZl
Y3RzIHsKICAgICAgICAgcmVzdWx0LnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKICAgICAgICAg
cmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LndyaXRlc1Bpbm5lZCA9
IHRydWU7CisgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCkBAIC0xMDMsNyArMTA4LDcgQEAgc3RydWN0IEVmZmVjdHMgewogCiAgICAg
Ym9vbCBtdXN0RXhlY3V0ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gdGVybWluYWwg
fHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQ
aW5uZWQ7CisgICAgICAgIHJldHVybiB0ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRl
c0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8IHdyaXRlc1Bpbm5lZCB8fCBmZW5jZTsKICAgICB9CiAK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0aGVz
ZSByZXNwZWN0aXZlIGVmZmVjdHMgd291bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NDIsNiArMTQyLDcgQEAgc3RydWN0IEltcHVyZUJsb2NrRGF0YSB7CiAKICAgICBSYW5nZVNldDxI
ZWFwUmFuZ2U+IHJlYWRzOyAvLyBUaGlzIG9ubHkgZ2V0cyB1c2VkIGZvciBmb3J3YXJkIHN0b3Jl
IGVsaW1pbmF0aW9uLgogICAgIFJhbmdlU2V0PEhlYXBSYW5nZT4gd3JpdGVzOyAvLyBUaGlzIGdl
dHMgdXNlZCBmb3IgYm90aCBsb2FkIGFuZCBzdG9yZSBlbGltaW5hdGlvbi4KKyAgICBib29sIGZl
bmNlOwogCiAgICAgTWVtb3J5VmFsdWVNYXAgc3RvcmVzQXRIZWFkOwogICAgIE1lbW9yeVZhbHVl
TWFwIG1lbW9yeVZhbHVlc0F0VGFpbDsKQEAgLTE3NCwxMiArMTc1LDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobWVtb3J5ICYmIG1lbW9yeS0+aXNT
dG9yZSgpCiAgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLnJlYWRzLm92ZXJsYXBzKG1lbW9y
eS0+cmFuZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIWRhdGEud3JpdGVzLm92ZXJsYXBz
KG1lbW9yeS0+cmFuZ2UoKSkpCisgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRlcy5v
dmVybGFwcyhtZW1vcnktPnJhbmdlKCkpCisgICAgICAgICAgICAgICAgICAgICYmICghZGF0YS5m
ZW5jZSB8fCAhbWVtb3J5LT5oYXNGZW5jZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5z
dG9yZXNBdEhlYWQuYWRkKG1lbW9yeSk7CiAgICAgICAgICAgICAgICAgZGF0YS5yZWFkcy5hZGQo
ZWZmZWN0cy5yZWFkcyk7CiAKICAgICAgICAgICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9
IGVmZmVjdHMud3JpdGVzKQogICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGRhdGEsIHdyaXRl
cyk7CisgICAgICAgICAgICAgICAgZGF0YS5mZW5jZSB8PSBlZmZlY3RzLmZlbmNlOwogCiAgICAg
ICAgICAgICAgICAgaWYgKG1lbW9yeSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZW1vcnlW
YWx1ZXNBdFRhaWwuYWRkKG1lbW9yeSk7CkBAIC00NzgsNiArNDgxLDkgQEAgcHJpdmF0ZToKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CiAgICAgYm9vbCBmaW5kU3RvcmVBZnRlckNsb2Ji
ZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKICAg
ICB7CisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBl
bGltaW5hdGUgYSBzdG9yZSBpZiBldmVyeSBmb3J3YXJkIHBhdGggaGl0cyBhIHN0b3JlIHRvIHRo
ZSBzYW1lIGxvY2F0aW9uIGJlZm9yZQogICAgICAgICAvLyBoaXR0aW5nIGFueSBvcGVyYXRpb24g
dGhhdCBvYnNlcnZlcyB0aGUgc3RvcmUuIFRoaXMgc2VhcmNoIHNlZW1zIGxpa2UgaXQgc2hvdWxk
IGJlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSwgYnV0IGluIHRoZSBvdmVyd2hlbG1pbmcgbWFqb3Jp
dHkgb2YgY2FzZXMgaXQgd2lsbCBhbG1vc3QgaW1tZWRpYXRlbHkgaGl0IGFuIApAQCAtNjE0LDYg
KzYyMCwxMiBAQCBwcml2YXRlOgogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRh
dGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcgYmFja3dhcmQgZm9yICIsICpwdHIsICIuLi5cbiIp
OwogICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNG
ZW5jZSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgR2l2aW5nIHVwIGJlY2F1c2UgZmVuY2VzLlxuIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSog
bWF0Y2ggPSBtX2RhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmZpbmQocHRyLCBmaWx0ZXIpKSB7CiAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRm91
bmQgIiwgKm1hdGNoLCAiIGxvY2FsbHkuXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNyBAQCB2
b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MDcKICAgICB9CiAKKyAgICAv
LyBUaGlzIHB1dHMgdGhlIElSIGluIHF1aXJrcyBtb2RlLgogICAgIGxvd2VyTWFjcm9zKHByb2Nl
ZHVyZSk7CiAKICAgICBpZiAob3B0TGV2ZWwgPj0gMSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0
aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEluc2Vy
dGlvblNldDsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2NsYXNzIEdlbmVyaWNC
bG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBXVEY6Okluc2VydGlvbjxz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOworICAgIAorICAgIEJs
b2NrSW5zZXJ0aW9uU2V0KFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9j
a3MpCisgICAgICAgIDogbV9ibG9ja3MoYmxvY2tzKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dm9pZCBpbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCisgICAgeworICAgICAgICBt
X2luc2VydGlvbnMuYXBwZW5kKFdURk1vdmUoaW5zZXJ0aW9uKSk7CisgICAgfQorCisgICAgLy8g
SW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCisgICAgQmFzaWNCbG9jayogaW5z
ZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTikKKyAgICB7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhVSU5U
X01BWCwgZnJlcXVlbmN5KSk7CisgICAgICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdl
dCgpOworICAgICAgICBpbnNlcnQoQmxvY2tJbnNlcnRpb24oaW5kZXgsIFdURk1vdmUoYmxvY2sp
KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gSW5zZXJ0cyBhIG5l
dyBibG9jayBiZWZvcmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNz
IHRoZSBmcmVxdWVuY3kKKyAgICAvLyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0
byBqdXN0IHVzZSB0aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCisg
ICAgLy8gdXN1YWxseSB3aGF0IHlvdSB3YW50LgorICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9y
ZShCYXNpY0Jsb2NrKiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGluc2VydChiZWZvcmUtPmluZGV4KCksIGZyZXF1ZW5jeSA9PSBmcmVxdWVu
Y3kgPyBmcmVxdWVuY3kgOiBiZWZvcmUtPmZyZXF1ZW5jeSgpKTsKKyAgICB9CisKKyAgICAvLyBJ
bnNlcnRzIGEgbmV3IGJsb2NrIGFmdGVyIHRoZSBnaXZlbiBibG9jay4KKyAgICBCYXNpY0Jsb2Nr
KiBpbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4p
CisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJlcXVl
bmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7CisgICAg
fQorCisgICAgYm9vbCBleGVjdXRlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2luc2VydGlvbnMu
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAg
Ly8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNv
LCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBiZWZvcmUKKyAgICAgICAgLy8gcnVubmluZyBXVEY6OmV4
ZWN1dGVJbnNlcnRpb25zLiBXZSBzdHJvbmdseSBwcmVmZXIgYSBzdGFibGUgc29ydCBhbmQgd2Ug
d2FudCBpdCB0byBiZQorICAgICAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCisg
ICAgICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQo
KSk7CisgICAgICAgIAorICAgICAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX2Jsb2NrcywgbV9pbnNl
cnRpb25zKTsKKyAgICAgICAgCisgICAgICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRyaWVzLiBU
aGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgICAgICAvLyBoZWFsdGh5
IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgICAgICBtX2Jsb2Nrcy5y
ZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEJhc2lj
QmxvY2s+JiBibG9ja1B0cikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFibG9j
a1B0cjsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGhlIGJsb2NrcyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2Jsb2Nr
c1tpXS0+bV9pbmRleCA9IGk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4mIG1f
YmxvY2tzOworICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHJldmlzaW9uIDIxMjk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04OCw2ICs4OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKICAgICB9CiAgICAgCisgICAgSGVhcFJhbmdlIG9wZXJhdG9yfChjb25zdCBIZWFw
UmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgKKyAg
ICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAgICAgICAgICAg
c3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAogICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9CiAKICAg
ICB1bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU4LDYgKzU4LDExIEBAIFZhbHVlKiBJbnNlcnRpb25TZXQ6Omluc2VydEJv
dHRvbShzaXplX3QKICAgICByZXR1cm4gaW5zZXJ0Qm90dG9tKGluZGV4LCBsaWtlVmFsdWUtPm9y
aWdpbigpLCBsaWtlVmFsdWUtPnR5cGUoKSk7CiB9CiAKK1ZhbHVlKiBJbnNlcnRpb25TZXQ6Omlu
c2VydENsb25lKHNpemVfdCBpbmRleCwgVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBpbnNl
cnRWYWx1ZShpbmRleCwgbV9wcm9jZWR1cmUuY2xvbmUodmFsdWUpKTsKK30KKwogdm9pZCBJbnNl
cnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgYnViYmxlU29ydCht
X2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzEsNiArNzEsOCBAQCBwdWJsaWM6CiAKICAgICBWYWx1ZSogaW5zZXJ0Qm90dG9tKHNpemVf
dCBpbmRleCwgT3JpZ2luLCBUeXBlKTsKICAgICBWYWx1ZSogaW5zZXJ0Qm90dG9tKHNpemVfdCBp
bmRleCwgVmFsdWUqKTsKKyAgICAKKyAgICBWYWx1ZSogaW5zZXJ0Q2xvbmUoc2l6ZV90IGluZGV4
LCBWYWx1ZSopOwogCiAgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIHJ1bigpCiAgICAg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wcm9jLmhhc1F1aXJrcygpKTsKKyAgICAgICAg
CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAg
IG1fYmxvY2sgPSBibG9jazsKICAgICAgICAgICAgIHByb2Nlc3NDdXJyZW50QmxvY2soKTsKQEAg
LTcyLDYgKzc0LDkgQEAgcHVibGljOgogICAgICAgICAgICAgbV9wcm9jLnJlc2V0UmVhY2hhYmls
aXR5KCk7CiAgICAgICAgICAgICBtX3Byb2MuaW52YWxpZGF0ZUNGRygpOwogICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBtX3Byb2Muc2V0SGFzUXVpcmtzKHRydWUpOworICAgICAgICAKICAg
ICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgICB9CiAgICAgCkBAIC0xODUsNyArMTkwLDczIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbG9hZC1sb2FkIGZlbmNlLiBUaGlzIGNvZGVnZW5zIHRv
IG5vdGhpbmcgb24gWDg2LiBXZSB1c2UgaXQgdG8gdGVsbCB0aGUKKyAgICAgICAgICAgICAgICAg
ICAgLy8gY29tcGlsZXIgbm90IHRvIGJsb2NrIGxvYWQgbW90aW9uLgorICAgICAgICAgICAgICAg
ICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxGZW5jZVZhbHVl
PihtX2luZGV4LCBtX29yaWdpbik7CisgICAgICAgICAgICAgICAgICAgIGZlbmNlLT5yZWFkID0g
SGVhcFJhbmdlKCk7CisgICAgICAgICAgICAgICAgICAgIGZlbmNlLT53cml0ZSA9IEhlYXBSYW5n
ZTo6dG9wKCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBL
aWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNob3VsZCB1bmxvY2sgYSBidW5jaCBvZiBjb2RlIHNpbXBs
aWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoQm90dG9t
KG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICBjYXNlIEF0b21p
Y1dlYWtDQVM6CisgICAgICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzogeworICAgICAgICAg
ICAgICAgIGlmIChpc1g4NigpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+
YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICAgICAgV2lkdGggd2lkdGggPSBhdG9taWMt
Pm9wZXJhdGlvbldpZHRoKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KGlzQ2Fub25pY2FsV2lkdGgod2lkdGgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYWx1ZSogZXhwZWN0ZWRWYWx1ZSA9IGF0
b21pYy0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gT24g
QVJNLCB0aGUgbG9hZCBwYXJ0IG9mIHRoZSBDQVMgZG9lcyBhIGxvYWQgd2l0aCB6ZXJvIGV4dGVu
c2lvbi4gVGhlcmVmb3JlLCB3ZSBuZWVkCisgICAgICAgICAgICAgICAgLy8gdG8gemVyby1leHRl
bmQgdGhlIGlucHV0LgorICAgICAgICAgICAgICAgIFZhbHVlKiBtYXNrZWRFeHBlY3RlZFZhbHVl
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgbV9p
bmRleCwgQml0QW5kLCBtX29yaWdpbiwgZXhwZWN0ZWRWYWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0SW50Q29uc3RhbnQobV9pbmRleCwgZXhwZWN0ZWRWYWx1
ZSwgbWFzayh3aWR0aCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdG9t
aWMtPmNoaWxkKDApID0gbWFza2VkRXhwZWN0ZWRWYWx1ZTsKKyAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgICAgICAg
ICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnT3I6Cisg
ICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hj
aGdYb3I6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGc6IHsKKyAgICAgICAgICAgICAgICAv
LyBPbiBYODYsIHRoZXNlIGFjdHVhbGx5IHJldHVybiBnYXJiYWdlIGluIHRoZSBoaWdoIGJpdHMu
IE9uIEFSTTY0LCB0aGVzZSBzb3J0YQorICAgICAgICAgICAgICAgIC8vIHplcm8tZXh0ZW5kIHRo
ZWlyIGhpZ2ggYml0cywgZXhjZXB0IHRoYXQgdGhlIGhpZ2ggYml0cyBtaWdodCBnZXQgcG9sbHV0
ZWQgYnkgaGlnaAorICAgICAgICAgICAgICAgIC8vIGJpdHMgaW4gdGhlIG9wZXJhbmQuIC4gU28s
IGVpdGhleSB3YXksIHdlIG5lZWQgdG8gdGhyb3cgYSBzaWduLWV4dGVuZCBvbiB0aGVzZQorICAg
ICAgICAgICAgICAgIC8vIHRoaW5ncy4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAg
ICAgICAgICAgICAgV2lkdGggd2lkdGggPSBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzQ2Fub25pY2FsV2lkdGgod2lkdGgp
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBWYWx1ZSogbmV3VmFsdWUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAor
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBzaWduRXh0ZW5kT3Bjb2RlKHdpZHRoKSwgbV9v
cmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENsb25lKG1f
aW5kZXgsIG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
TWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHAJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zQWZ0ZXJP
cHRpbWl6YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDE1ICsxNTYsMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGNhc2UgUm90TDogewogICAgICAgICAgICAgICAgIC8vIEFSTTY0
IGRvZXNuJ3QgaGF2ZSBhIHJvdGF0ZSBsZWZ0LgogICAgICAgICAgICAgICAgIGlmIChpc0FSTTY0
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgVmFsdWUqIG5ld1NoaWZ0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PihtX2luZGV4LCBOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogcm90YXRlID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPihtX2luZGV4LCBSb3RSLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hp
bGQoMCksIG5ld1NoaWZ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxh
Y2VXaXRoSWRlbnRpdHkocm90YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTaGlm
dCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgTmVnLCBtX3ZhbHVlLT5v
cmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSog
cm90YXRlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBSb3RSLCBtX3Zh
bHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG5ld1NoaWZ0KTsKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyb3RhdGUpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Miw2ICs3MiwxNCBAQCBuYW1lc3BhY2UgewogCiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKIAorLy8gRklYTUU6IFdlIHdvdWxkbid0IG5lZWQgdGhpcyBpZiBBaXIgc3VwcG9ydGVkIFdp
ZHRoIG1vZGlmaWVycyBpbiBBaXI6OktpbmQuCisvLyBPT1BTISEhIChuZWVkIGEgYnVnIFVSTCkK
KyNkZWZpbmUgT1BDT0RFX0ZPUl9XSURUSChvcGNvZGUsIHdpZHRoKSAoIFwKKyAgICAod2lkdGgp
ID09IFdpZHRoOCA/IG9wY29kZSAjIyA4IDogXAorICAgICh3aWR0aCkgPT0gV2lkdGgxNiA/IG9w
Y29kZSAjIyAxNiA6IFwKKyAgICAod2lkdGgpID09IFdpZHRoMzIgPyBvcGNvZGUgIyMgMzIgOiBc
CisgICAgb3Bjb2RlICMjIDY0KQorCiBjbGFzcyBMb3dlclRvQWlyIHsKIHB1YmxpYzoKICAgICBM
b3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQpAQCAtODMsNiArOTEsNyBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9kb21pbmF0b3JzKHByb2NlZHVyZS5kb21pbmF0b3JzKCkpCiAgICAgICAg
ICwgbV9wcm9jZWR1cmUocHJvY2VkdXJlKQogICAgICAgICAsIG1fY29kZShwcm9jZWR1cmUuY29k
ZSgpKQorICAgICAgICAsIG1fYmxvY2tJbnNlcnRpb25TZXQobV9jb2RlKQogICAgIHsKICAgICB9
CiAKQEAgLTEyNCwxNCArMTMzLDE4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gaG9pc3RlZCBhZGRy
ZXNzIGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxvb3Au
CiAgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUuYmxvY2tz
SW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7Ci0gICAgICAgICAg
ICAvLyBSZXNldCBzb21lIHN0YXRlLgotICAgICAgICAgICAgbV9pbnN0cy5yZXNpemUoMCk7CiAK
ICAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9jayk7CiAKICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvd2VyaW5n
IEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KKyAgICAg
ICAgICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNz
b3JzKCkuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayht
X2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3koKSkp
OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2NrcyBpbiByZXZl
cnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hhdCBhbGxvd3Mg
dXMKICAgICAgICAgICAgIC8vIHRvIG1hdGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5LgogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgewpAQCAtMTQ5LDE5
ICsxNjIsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBtX2luc3RzIGNvbnRh
aW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcwotICAgICAgICAgICAgLy8g
aXQgaW4gcmV2ZXJzZS4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5zdHMuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9pbnN0c1tp
XSkKLSAgICAgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5hcHBlbmRJbnN0
KFdURk1vdmUoaW5zdCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBNYWtlIHN1
cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KLSAgICAgICAgICAg
IGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygp
KSB7Ci0gICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNzb3JzKCku
YXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayhtX2Jsb2Nr
VG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3koKSkpOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKG1fYmxv
Y2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fYmxvY2tJ
bnNlcnRpb25TZXQuZXhlY3V0ZSgpOwogCiAgICAgICAgIEFpcjo6SW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChtX2NvZGUpOwogICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBtX3Byb2xvZ3VlKQpA
QCAtNTM4LDcgKzU0Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7CiAK
ICAgICAgICAgaW50MzJfdCBvZmZzZXQgPSB2YWx1ZS0+b2Zmc2V0KCk7Ci0gICAgICAgIFdpZHRo
IHdpZHRoID0gdmFsdWUtPmFjY2Vzc1dpZHRoKCk7CisgICAgICAgIFdpZHRoIHdpZHRoID0gdmFs
dWUtPmxvYWRTdG9yZVdpZHRoKCk7CiAKICAgICAgICAgQXJnIHJlc3VsdCA9IGVmZmVjdGl2ZUFk
ZHIodmFsdWUtPmxhc3RDaGlsZCgpLCBvZmZzZXQsIHdpZHRoKTsKICAgICAgICAgQVNTRVJUKHJl
c3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpOwpAQCAtNTYyLDExICs1NjYsMTYgQEAgcHJpdmF0ZToK
ICAgICAKICAgICBBcmdQcm9taXNlIGxvYWRQcm9taXNlQW55T3Bjb2RlKFZhbHVlKiBsb2FkVmFs
dWUpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2FkVmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpKTsKICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKGxvYWRWYWx1ZSkpCiAgICAgICAg
ICAgICByZXR1cm4gQXJnKCk7CiAgICAgICAgIGlmIChjcm9zc2VzSW50ZXJmZXJlbmNlKGxvYWRW
YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7Ci0gICAgICAgIEFyZ1Byb21pc2UgcmVz
dWx0KGFkZHIobG9hZFZhbHVlKSwgbG9hZFZhbHVlKTsKKyAgICAgICAgaWYgKGxvYWRWYWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7
CisgICAgICAgIEFyZyBsb2FkQWRkciA9IGFkZHIobG9hZFZhbHVlKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQobG9hZEFkZHIpOworICAgICAgICBBcmdQcm9taXNlIHJlc3VsdChsb2FkQWRkciwg
bG9hZFZhbHVlKTsKICAgICAgICAgaWYgKGxvYWRWYWx1ZS0+dHJhcHMoKSkKICAgICAgICAgICAg
IHJlc3VsdC5zZXRUcmFwcyh0cnVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTkzMSwx
MCArOTQwLDE1IEBAIHByaXZhdGU6CiAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZTMyLCBBaXI6
Ok9wY29kZSBvcGNvZGU2NCwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0
YXRpdmU+CiAgICAgYm9vbCB0cnlBcHBlbmRTdG9yZUJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlLT5hczxNZW1vcnlW
YWx1ZT4oKSk7CisgICAgICAgIAogICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNv
ZGVGb3JUeXBlKG9wY29kZTMyLCBvcGNvZGU2NCwgbGVmdC0+dHlwZSgpKTsKICAgICAgICAgaWYg
KG9wY29kZSA9PSBBaXI6Ok9vcHMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IAorICAgICAgICBpZiAobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAogICAgICAgICBBcmcgc3RvcmVBZGRy
ID0gYWRkcihtX3ZhbHVlKTsKICAgICAgICAgQVNTRVJUKHN0b3JlQWRkcik7CiAKQEAgLTk5NCwx
MCArMTAwOCw0OCBAQCBwcml2YXRlOgogCiAgICAgICAgIHJldHVybiBJbnN0KG1vdmUsIG1fdmFs
dWUsIHRtcCh2YWx1ZSksIGRlc3QpOwogICAgIH0KKyAgICAKKyAgICBBaXI6Ok9wY29kZSBzdG9y
ZU9wY29kZShXaWR0aCB3aWR0aCwgQmFuayBiYW5rLCBib29sIHJlbGVhc2UpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYmFuayA9PSBHUCk7CisgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/
IFN0b3JlUmVsOCA6IFN0b3JlODsKKyAgICAgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYmFuayA9PSBHUCk7CisgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/
IFN0b3JlUmVsMTYgOiBTdG9yZTE2OworICAgICAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgICAg
ICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlbGVhc2UgPyBTdG9yZVJlbDMyIDogTW92ZTMyOworICAgICAgICAgICAgY2FzZSBG
UDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVsZWFzZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE1vdmVGbG9hdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpczY0
Qml0KCkpOworICAgICAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgICAgICBjYXNlIEdQ
OgorICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlID8gU3RvcmVSZWw2NCA6IE1vdmU7Cisg
ICAgICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWxl
YXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW92ZURvdWJsZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlKFZh
bHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIHJldHVybiBzdG9yZU9wY29kZShtZW1vcnktPmxv
YWRTdG9yZVdpZHRoKCksIG1lbW9yeS0+YWNjZXNzQmFuaygpLCBtZW1vcnktPmhhc0ZlbmNlKCkp
OworICAgIH0KIAogICAgIEluc3QgY3JlYXRlU3RvcmUoVmFsdWUqIHZhbHVlLCBjb25zdCBBcmcm
IGRlc3QpCiAgICAgewotICAgICAgICBBaXI6Ok9wY29kZSBtb3ZlT3Bjb2RlID0gbW92ZUZvclR5
cGUodmFsdWUtPnR5cGUoKSk7CisgICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVPcGNvZGUgPSBzdG9y
ZU9wY29kZSh2YWx1ZSk7CiAgICAgICAgIHJldHVybiBjcmVhdGVTdG9yZShtb3ZlT3Bjb2RlLCB2
YWx1ZSwgZGVzdCk7CiAgICAgfQogCkBAIC0xMDA2LDcgKzEwNTgsNyBAQCBwcml2YXRlOgogICAg
IHsKICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBjcmVhdGVTdG9yZShzdGQ6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKSk7CiAgICAgfQotCisgICAgCiAgICAgQWlyOjpPcGNv
ZGUgbW92ZUZvclR5cGUoVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7
CkBAIC0xMDczLDcgKzExMjUsNDEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1faW5zdHMu
bGFzdCgpLmFwcGVuZChpbnN0KTsKICAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2hBcHBlbmRp
bmdJbnN0cnVjdGlvbnMoQWlyOjpCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgeworICAgICAgICAv
LyBOb3cgYXBwZW5kIHRoZSBpbnN0cnVjdGlvbnMuIG1faW5zdHMgY29udGFpbnMgdGhlbSBpbiBy
ZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCisgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5zdHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICBmb3IgKEluc3QmIGluc3QgOiBtX2luc3RzW2ldKQorICAgICAgICAgICAgICAgIHRhcmdl
dC0+YXBwZW5kSW5zdChXVEZNb3ZlKGluc3QpKTsKKyAgICAgICAgfQorICAgICAgICBtX2luc3Rz
LnJlc2l6ZSgwKTsKKyAgICB9CisgICAgCisgICAgQWlyOjpCYXNpY0Jsb2NrKiBuZXdCbG9jaygp
CisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRBZnRlciht
X2Jsb2NrVG9CbG9ja1ttX2Jsb2NrXSk7CisgICAgfQogCisgICAgLy8gTk9URTogVGhpcyB3aWxs
IGNyZWF0ZSBhIGNvbnRpbnVhdGlvbiBibG9jayAoYG5leHRCbG9ja2ApICphZnRlciogYW55IGJs
b2NrcyB5b3UndmUgY3JlYXRlZCB1c2luZworICAgIC8vIG5ld0Jsb2NrKCkuIFNvLCBpdCdzIHBy
ZWZlcmFibGUgdG8gY3JlYXRlIGFsbCBvZiB5b3VyIGJsb2NrcyB1cGZyb250IHVzaW5nIG5ld0Js
b2NrKCkuIEFsc28gbm90ZQorICAgIC8vIHRoYXQgYW55IGNvZGUgeW91IGVtaXQgYmVmb3JlIHRo
aXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIGNvbnRpbnVhdGlvbiwgYW5kIGFueSBjb2RlIHlv
dSBlbWl0CisgICAgLy8gYWZ0ZXIgdGhpcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBwcmV2aW91
cyBibG9jay4KKyAgICB2b2lkIHNwbGl0QmxvY2soQWlyOjpCYXNpY0Jsb2NrKiYgcHJldmlvdXNC
bG9jaywgQWlyOjpCYXNpY0Jsb2NrKiYgbmV4dEJsb2NrKQorICAgIHsKKyAgICAgICAgQWlyOjpC
YXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tUb0Jsb2NrW21fYmxvY2tdOworICAgICAgICAKKyAg
ICAgICAgcHJldmlvdXNCbG9jayA9IGJsb2NrOworICAgICAgICBuZXh0QmxvY2sgPSBtX2Jsb2Nr
SW5zZXJ0aW9uU2V0Lmluc2VydEFmdGVyKGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZpbmlz
aEFwcGVuZGluZ0luc3RydWN0aW9ucyhuZXh0QmxvY2spOworICAgICAgICBuZXh0QmxvY2stPnN1
Y2Nlc3NvcnMoKSA9IGJsb2NrLT5zdWNjZXNzb3JzKCk7CisgICAgICAgIGJsb2NrLT5zdWNjZXNz
b3JzKCkuY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIG1faW5zdHMuYXBwZW5kKFZlY3RvcjxJ
bnN0PigpKTsKKyAgICB9CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUu
Li4gQXJndW1lbnRzPgogICAgIFQqIGVuc3VyZVNwZWNpYWwoVComIGZpZWxkLCBBcmd1bWVudHMm
Ji4uLiBhcmd1bWVudHMpCiAgICAgewpAQCAtMTEyMyw3ICsxMjA5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJn
dW1lbnQ6CiAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjpjYWxsQXJnKHZhbHVlLnJlcCgpLm9m
ZnNldEZyb21TUCgpKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRTdG9yZSh2YWx1ZS52YWx1ZSgp
LCBhcmcpOworICAgICAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1vdmVGb3JUeXBlKHZhbHVlLnZh
bHVlKCkpLCBhcmcpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTk2
MSw2ICsyMDQ3LDIzMiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
KyAgICB2b2lkIGFwcGVuZFg4NkRpdihCMzo6T3Bjb2RlIG9wKQorICAgIHsKKyNpZiBDUFUoWDg2
KSB8fCBDUFUoWDg2XzY0KQorICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4
KTsKKyAgICAgICAgVG1wIGVkeCA9IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7CisKKyAgICAgICAg
QWlyOjpPcGNvZGUgY29udmVydFRvRG91YmxlV29yZDsKKyAgICAgICAgQWlyOjpPcGNvZGUgZGl2
OworICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEludDMy
OgorICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb0RvdWJsZVdv
cmQzMjsKKyAgICAgICAgICAgIGRpdiA9IFg4NkRpdjMyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2
Q29udmVydFRvUXVhZFdvcmQ2NDsKKyAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKG9wID09IERpdiB8fCBvcCA9PSBNb2QpOworICAgICAgICBYODZSZWdpc3RlcnM6
OlJlZ2lzdGVySUQgcmVzdWx0ID0gb3AgPT0gRGl2ID8gWDg2UmVnaXN0ZXJzOjplYXggOiBYODZS
ZWdpc3RlcnM6OmVkeDsKKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxk
KDApKSwgZWF4KTsKKyAgICAgICAgYXBwZW5kKGNvbnZlcnRUb0RvdWJsZVdvcmQsIGVheCwgZWR4
KTsKKyAgICAgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkp
OworICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKHJlc3VsdCksIHRtcChtX3ZhbHVlKSk7CisKKyNl
bHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShvcCk7CisgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBhcHBlbmRYODZVRGl2KEIzOjpP
cGNvZGUgb3ApCisgICAgeworI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgICAgIFRt
cCBlYXggPSBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBUbXAgZWR4ID0gVG1wKFg4
NlJlZ2lzdGVyczo6ZWR4KTsKKworICAgICAgICBBaXI6Ok9wY29kZSBkaXYgPSBtX3ZhbHVlLT50
eXBlKCkgPT0gSW50MzIgPyBYODZVRGl2MzIgOiBYODZVRGl2NjQ7CisKKyAgICAgICAgQVNTRVJU
KG9wID09IFVEaXYgfHwgb3AgPT0gVU1vZCk7CisgICAgICAgIFg4NlJlZ2lzdGVyczo6UmVnaXN0
ZXJJRCByZXN1bHQgPSBvcCA9PSBVRGl2ID8gWDg2UmVnaXN0ZXJzOjplYXggOiBYODZSZWdpc3Rl
cnM6OmVkeDsKKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwg
ZWF4KTsKKyAgICAgICAgYXBwZW5kKFhvcjY0LCBlZHgsIGVkeCk7CisgICAgICAgIGFwcGVuZChk
aXYsIGVheCwgZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgYXBwZW5kKE1v
dmUsIFRtcChyZXN1bHQpLCB0bXAobV92YWx1ZSkpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BB
UkFNKG9wKTsKKyAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisjZW5kaWYKKyAg
ICB9CisgICAgCisgICAgQWlyOjpPcGNvZGUgbG9hZExpbmtPcGNvZGUoV2lkdGggd2lkdGgsIGJv
b2wgZmVuY2UpCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2UgPyBPUENPREVfRk9SX1dJRFRI
KExvYWRMaW5rQWNxLCB3aWR0aCkgOiBPUENPREVfRk9SX1dJRFRIKExvYWRMaW5rLCB3aWR0aCk7
CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlQ29uZE9wY29kZShXaWR0aCB3aWR0
aCwgYm9vbCBmZW5jZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmZW5jZSA/IE9QQ09ERV9GT1Jf
V0lEVEgoU3RvcmVDb25kUmVsLCB3aWR0aCkgOiBPUENPREVfRk9SX1dJRFRIKFN0b3JlQ29uZCwg
d2lkdGgpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGNhbiBlbWl0IGNvZGUgZm9yIHRoZSBm
b2xsb3dpbmcgcGF0dGVybnM6CisgICAgLy8gQXRvbWljV2Vha0NBUworICAgIC8vIEJpdFhvcihB
dG9taWNXZWFrQ0FTLCAxKQorICAgIC8vIEF0b21pY1N0cm9uZ0NBUworICAgIC8vIEVxdWFsKEF0
b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpCisgICAgLy8gTm90RXF1YWwoQXRvbWljU3Ryb25nQ0FT
LCBleHBlY3RlZCkKKyAgICAvLyBCcmFuY2goQXRvbWljV2Vha0NBUykKKyAgICAvLyBCcmFuY2go
RXF1YWwoQXRvbWljU3Ryb25nQ0FTLCBleHBlY3RlZCkpCisgICAgLy8gQnJhbmNoKE5vdEVxdWFs
KEF0b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpKQorICAgIC8vCisgICAgLy8gSXQgYXNzdW1lcyB0
aGF0IGF0b21pY1ZhbHVlIHBvaW50cyB0byB0aGUgQ0FTLCBhbmQgbV92YWx1ZSBwb2ludHMgdG8g
dGhlIGluc3RydWN0aW9uIGJlaW5nCisgICAgLy8gZ2VuZXJhdGVkLiBJdCBhc3N1bWVzIHRoYXQg
eW91J3ZlIGNvbnN1bWVkIGV2ZXJ5dGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjb25zdW1lZC4KKyAg
ICBib29sIGFwcGVuZENBUyhWYWx1ZSogYXRvbWljVmFsdWUsIGJvb2wgaW52ZXJ0KQorICAgIHsK
KyAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IGF0b21pY1ZhbHVlLT5hczxBdG9taWNWYWx1
ZT4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXRvbWljKTsKKyAgICAgICAgCisgICAgICAg
IGJvb2wgaXNCcmFuY2ggPSBtX3ZhbHVlLT5vcCgpID09IEJyYW5jaDsKKyAgICAgICAgYm9vbCBp
c1N0cm9uZyA9IGF0b21pYy0+b3AoKSA9PSBBdG9taWNTdHJvbmdDQVM7CisgICAgICAgIGJvb2wg
cmV0dXJuc09sZFZhbHVlID0gbV92YWx1ZS0+b3AoKSA9PSBBdG9taWNTdHJvbmdDQVM7CisgICAg
ICAgIAorICAgICAgICBXaWR0aCB3aWR0aCA9IGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKTsKKyAg
ICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisKKyAgICAgICAgVG1wIHZhbHVlUmVz
dWx0VG1wOworICAgICAgICBUbXAgYm9vbFJlc3VsdFRtcDsKKyAgICAgICAgaWYgKHJldHVybnNP
bGRWYWx1ZSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWludmVydCk7CisgICAgICAg
ICAgICB2YWx1ZVJlc3VsdFRtcCA9IHRtcChtX3ZhbHVlKTsKKyAgICAgICAgICAgIGJvb2xSZXN1
bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0JyYW5jaCkg
eworICAgICAgICAgICAgdmFsdWVSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAg
ICAgICAgIGJvb2xSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHZhbHVlUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAg
ICAgICAgICBib29sUmVzdWx0VG1wID0gdG1wKG1fdmFsdWUpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBUbXAgc3VjY2Vzc0Jvb2xSZXN1bHRUbXA7CisgICAgICAgIGlmIChpc1N0cm9u
ZyAmJiAhaXNCcmFuY2gpCisgICAgICAgICAgICBzdWNjZXNzQm9vbFJlc3VsdFRtcCA9IG1fY29k
ZS5uZXdUbXAoR1ApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdWNjZXNzQm9vbFJlc3Vs
dFRtcCA9IGJvb2xSZXN1bHRUbXA7CisKKyAgICAgICAgVG1wIGV4cGVjdGVkVmFsdWVUbXAgPSB0
bXAoYXRvbWljLT5jaGlsZCgwKSk7CisgICAgICAgIFRtcCBuZXdWYWx1ZVRtcCA9IHRtcChhdG9t
aWMtPmNoaWxkKDEpKTsKKyAgICAgICAgCisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayBzdWNjZXNz
OworICAgICAgICBGcmVxdWVudGVkQmxvY2sgZmFpbHVyZTsKKyAgICAgICAgaWYgKGlzQnJhbmNo
KSB7CisgICAgICAgICAgICBzdWNjZXNzID0gbV9ibG9ja1RvQmxvY2tbbV9ibG9ja10tPnN1Y2Nl
c3NvcihpbnZlcnQpOworICAgICAgICAgICAgZmFpbHVyZSA9IG1fYmxvY2tUb0Jsb2NrW21fYmxv
Y2tdLT5zdWNjZXNzb3IoIWludmVydCk7CisgICAgICAgIH0KKyAgICAgICAgCisjaWYgQ1BVKFg4
Nl82NCkKKyAgICAgICAgVG1wIGVheCA9IFRtcChYODZSZWdpc3RlcnM6OmVheCk7CisgICAgICAg
IGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT5vcGVyYXRpb25UeXBlKCkpLCBpbW1P
clRtcChhdG9taWMtPmNoaWxkKDApKSwgZWF4KTsKKyAgICAgICAgaWYgKHJldHVybnNPbGRWYWx1
ZSkgeworICAgICAgICAgICAgYXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoTG9ja0NtcFhjaGcsIHdp
ZHRoKSwgZWF4LCBuZXdWYWx1ZVRtcCwgYWRkcmVzcyk7CisgICAgICAgICAgICBhcHBlbmQocmVs
YXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpKSwgZWF4LCB2YWx1ZVJlc3Vs
dFRtcCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNCcmFuY2gpIHsKKyAgICAgICAgICAgIGFwcGVu
ZChPUENPREVfRk9SX1dJRFRIKEJyYW5jaExvY2tDbXBYY2hnLCB3aWR0aCksIGVheCwgbmV3VmFs
dWVUbXAsIGFkZHJlc3MpOworICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbbV9ibG9ja10tPnNl
dFN1Y2Nlc3NvcnMoc3VjY2VzcywgZmFpbHVyZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChMb2NrQ21wWGNoZywgd2lkdGgpLCBlYXgsIHRt
cChhdG9taWMtPmNoaWxkKDEpKSwgYWRkcmVzcywgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAg
ICBpZiAoaW52ZXJ0KQorICAgICAgICAgICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKFhv
ciwgY2Fub25pY2FsV2lkdGgod2lkdGgpKSwgQXJnOjppbW0oMSksIGJvb2xSZXN1bHRUbXApOwor
ICAgICAgICB9CisjZWxpZiBDUFUoQVJNNjQpCisgICAgICAgIC8vIFdlIHdpc2ggdG8gZW1pdDoK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gQmxvY2sgI3JlbG9vcDoKKyAgICAgICAgLy8gICAgIExv
YWRMaW5rCisgICAgICAgIC8vICAgICBCcmFuY2ggTm90RXF1YWwKKyAgICAgICAgLy8gICBTdWNj
ZXNzb3JzOiBUaGVuOiNmYWlsLCBFbHNlOiAjc3RvcmUKKyAgICAgICAgLy8gQmxvY2sgI3N0b3Jl
OgorICAgICAgICAvLyAgICAgU3RvcmVDb25kCisgICAgICAgIC8vICAgICBYb3IgJDEsICVyZXN1
bHQgICAgPC0tLSBvbmx5IGlmICFpbnZlcnQKKyAgICAgICAgLy8gICAgIEp1bXAKKyAgICAgICAg
Ly8gICBTdWNjZXNzb3JzOiAjZG9uZQorICAgICAgICAvLyBCbG9jayAjZmFpbDoKKyAgICAgICAg
Ly8gICAgIE1vdmUgJGludmVydCwgJXJlc3VsdAorICAgICAgICAvLyAgICAgSnVtcAorICAgICAg
ICAvLyAgIFN1Y2Nlc3NvcnM6ICNkb25lCisgICAgICAgIC8vIEJsb2NrICNkb25lOgorICAgICAg
ICAKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiByZWxvb3BCbG9jayA9IG5ld0Jsb2NrKCk7Cisg
ICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3RvcmVCbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAg
IEFpcjo6QmFzaWNCbG9jayogc3VjY2Vzc0Jsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKCFp
c0JyYW5jaCAmJiBpc1N0cm9uZykKKyAgICAgICAgICAgIHN1Y2Nlc3NCbG9jayA9IG5ld0Jsb2Nr
KCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogZmFpbEJsb2NrID0gbnVsbHB0cjsKKyAgICAg
ICAgaWYgKCFpc0JyYW5jaCkKKyAgICAgICAgICAgIGZhaWxCbG9jayA9IG5ld0Jsb2NrKCk7Cisg
ICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3Ryb25nRmFpbEJsb2NrOworICAgICAgICBpZiAoaXNT
dHJvbmcpCisgICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2sgPSBuZXdCbG9jaygpOworICAgICAg
ICBGcmVxdWVudGVkQmxvY2sgY29tcGFyaXNvbkZhaWw7CisgICAgICAgIEZyZXF1ZW50ZWRCbG9j
ayB3ZWFrRmFpbDsKKyAgICAgICAgaWYgKGlzU3Ryb25nKSB7CisgICAgICAgICAgICBjb21wYXJp
c29uRmFpbCA9IHN0cm9uZ0ZhaWxCbG9jazsKKyAgICAgICAgICAgIHdlYWtGYWlsID0gcmVsb29w
QmxvY2s7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNCcmFuY2gpCisgICAg
ICAgICAgICAgICAgY29tcGFyaXNvbkZhaWwgPSBmYWlsdXJlOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGNvbXBhcmlzb25GYWlsID0gZmFpbEJsb2NrOworICAgICAgICAgICAg
d2Vha0ZhaWwgPSBmYWlsdXJlOworICAgICAgICB9CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayog
YmVnaW5CbG9jazsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBkb25lQmxvY2s7CisgICAgICAg
IHNwbGl0QmxvY2soYmVnaW5CbG9jaywgZG9uZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGFw
cGVuZChKdW1wKTsKKyAgICAgICAgYmVnaW5CbG9jay0+c2V0U3VjY2Vzc29ycyhyZWxvb3BCbG9j
ayk7CisgICAgICAgIAorICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKGxvYWRMaW5rT3Bjb2Rl
KHdpZHRoLCBhdG9taWMtPmhhc0ZlbmNlKCkpLCBtX3ZhbHVlLCB2YWx1ZVJlc3VsdFRtcCwgYWRk
cmVzcyk7CisgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChCcmFu
Y2gsIGNhbm9uaWNhbFdpZHRoKHdpZHRoKSksIG1fdmFsdWUsIEFyZzo6cmVsQ29uZChNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwpIHZhbHVlUmVzdWx0VG1wLCBleHBlY3RlZFZhbHVlVG1wKTsKKyAg
ICAgICAgcmVsb29wQmxvY2stPnNldFN1Y2Nlc3NvcnMoY29tcGFyaXNvbkZhaWwsIHN0b3JlQmxv
Y2spOworICAgICAgICAKKyAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKHN0b3JlQ29uZE9wY29k
ZSh3aWR0aCwgYXRvbWljLT5oYXNGZW5jZSgpKSwgbV92YWx1ZSwgbmV3VmFsdWVUbXAsIGFkZHJl
c3MsIHN1Y2Nlc3NCb29sUmVzdWx0VG1wKTsKKyAgICAgICAgaWYgKGlzQnJhbmNoKSB7CisgICAg
ICAgICAgICBzdG9yZUJsb2NrLT5hcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFj
cm9Bc3NlbWJsZXI6Olplcm8pLCBib29sUmVzdWx0VG1wLCBBcmc6OmJpdEltbSgtMSkpOworICAg
ICAgICAgICAgc3RvcmVCbG9jay0+c2V0U3VjY2Vzc29ycyhzdWNjZXNzLCB3ZWFrRmFpbCk7Cisg
ICAgICAgICAgICBkb25lQmxvY2stPnN1Y2Nlc3NvcnMoKS5jbGVhcigpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIWRvbmVCbG9jay0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGRvbmVCbG9j
ay0+YXBwZW5kKE9vcHMsIG1fdmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKGlzU3Ryb25nKSB7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKEJyYW5j
aFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgc3VjY2Vzc0Jvb2xS
ZXN1bHRUbXAsIEFyZzo6Yml0SW1tKC0xKSk7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+
c2V0U3VjY2Vzc29ycyhzdWNjZXNzQmxvY2ssIHJlbG9vcEJsb2NrKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBzdWNjZXNzQmxvY2stPmFwcGVuZChNb3ZlLCBtX3ZhbHVlLCBB
cmc6OmltbSghaW52ZXJ0KSwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICAgICAgc3VjY2Vz
c0Jsb2NrLT5hcHBlbmQoSnVtcCwgbV92YWx1ZSk7CisgICAgICAgICAgICAgICAgc3VjY2Vzc0Js
b2NrLT5zZXRTdWNjZXNzb3JzKGRvbmVCbG9jayk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGlmICghaW52ZXJ0KQorICAgICAgICAgICAgICAgICAgICBzdG9yZUJsb2Nr
LT5hcHBlbmQoWG9yMzIsIG1fdmFsdWUsIEFyZzo6Yml0SW1tKDEpLCBib29sUmVzdWx0VG1wLCBi
b29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdG9yZUJs
b2NrLT5hcHBlbmQoSnVtcCwgbV92YWx1ZSk7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+
c2V0U3VjY2Vzc29ycyhkb25lQmxvY2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBmYWlsQmxvY2stPmFwcGVuZChNb3ZlLCBtX3ZhbHVlLCBBcmc6OmltbShpbnZl
cnQpLCBib29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgIGZhaWxCbG9jay0+YXBwZW5kKEp1bXAs
IG1fdmFsdWUpOworICAgICAgICAgICAgZmFpbEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRvbmVCbG9j
ayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpc1N0cm9uZykgeworICAgICAg
ICAgICAgVG1wIHRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAgICAgc3Ryb25nRmFp
bEJsb2NrLT5hcHBlbmQoc3RvcmVDb25kT3Bjb2RlKHdpZHRoLCBhdG9taWMtPmhhc0ZlbmNlKCkp
LCBtX3ZhbHVlLCB2YWx1ZVJlc3VsdFRtcCwgYWRkcmVzcywgdG1wKTsKKyAgICAgICAgICAgIHN0
cm9uZ0ZhaWxCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvKSwgdG1wLCBBcmc6OmJpdEltbSgtMSkpOworICAgICAgICAgICAgc3Ryb25n
RmFpbEJsb2NrLT5zZXRTdWNjZXNzb3JzKGZhaWxCbG9jaywgcmVsb29wQmxvY2spOworICAgICAg
ICB9CisjZWxzZQorI2Vycm9yICJCYWQgYXJjaGl0ZWN0dXJlIgorI2VuZGlmCisgICAgfQorICAg
IAogICAgIHZvaWQgbG93ZXIoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNv
ZGUoKSkgewpAQCAtMTk3MSwzMCArMjI4Myw1MCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBMb2FkOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBp
bmdJbnN0KG1fdmFsdWUsIG1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksIG1fdmFsdWUsIGFk
ZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1l
bW9yeSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICAgICAgQWlyOjpPcGNv
ZGUgb3Bjb2RlID0gQWlyOjpPb3BzOworICAgICAgICAgICAgaWYgKG1lbW9yeS0+aGFzRmVuY2Uo
KSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobWVtb3J5LT50eXBlKCkpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBMb2FkQWNx
MzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW50
NjQ6CisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IExvYWRBY3E2NDsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgb3Bjb2RlID0gbW92ZUZvclR5cGUobWVtb3J5LT50eXBlKCkpOworICAgICAgICAgICAg
YXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1
ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBMb2FkOFM6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFw
cGluZ0luc3QobV92YWx1ZSwgTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBtX3ZhbHVlLCBhZGRyKG1f
dmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9
IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpID8gTG9hZEFjcThTaWduZWRF
eHRlbmRUbzMyIDogTG9hZDhTaWduZWRFeHRlbmRUbzMyOworICAgICAgICAgICAgYXBwZW5kKHRy
YXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcCht
X3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBMb2FkOFo6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9h
ZDgsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAg
QWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNl
KCkgPyBMb2FkQWNxOCA6IExvYWQ4OworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdCht
X3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBMb2FkMTZTOiB7
Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQxNlNpZ25lZEV4
dGVuZFRvMzIsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhh
c0ZlbmNlKCkgPyBMb2FkQWNxMTZTaWduZWRFeHRlbmRUbzMyIDogTG9hZDE2U2lnbmVkRXh0ZW5k
VG8zMjsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBt
X3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDE2WjogewotICAgICAgICAgICAgYXBw
ZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkMTYsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSks
IHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxMTYgOiBMb2FkMTY7Cisg
ICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwg
YWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQWRkOiB7CiAgICAgICAgICAgICBp
ZiAodHJ5QXBwZW5kTGVhKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjA5Miw3ICsy
NDI0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0NoaWxsKCkpCiAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsKICAgICAgICAgICAgIGlm
IChpc0ludChtX3ZhbHVlLT50eXBlKCkpICYmIGlzWDg2KCkpIHsKLSAgICAgICAgICAgICAgICBs
b3dlclg4NkRpdihEaXYpOworICAgICAgICAgICAgICAgIGFwcGVuZFg4NkRpdihEaXYpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVCgh
aXNYODYoKSB8fCBpc0Zsb2F0KG1fdmFsdWUtPnR5cGUoKSkpOwpAQCAtMjEwMyw3ICsyNDM1LDcg
QEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNlIFVEaXY6IHsKICAgICAgICAgICAgIGlmIChpc0lu
dChtX3ZhbHVlLT50eXBlKCkpICYmIGlzWDg2KCkpIHsKLSAgICAgICAgICAgICAgICBsb3dlclg4
NlVEaXYoVURpdik7CisgICAgICAgICAgICAgICAgYXBwZW5kWDg2VURpdihVRGl2KTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAgLTIxMTcsMTMgKzI0NDksMTMg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBNb2Q6IHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGlzWDg2KCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdmFsdWUtPmlzQ2hp
bGwoKSk7Ci0gICAgICAgICAgICBsb3dlclg4NkRpdihNb2QpOworICAgICAgICAgICAgYXBwZW5k
WDg2RGl2KE1vZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIFVNb2Q6IHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOwotICAgICAg
ICAgICAgbG93ZXJYODZVRGl2KFVNb2QpOworICAgICAgICAgICAgYXBwZW5kWDg2VURpdihVTW9k
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMTY2LDYgKzI0OTgsMTEg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+
Y2hpbGQoMSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBEZXBlbmQ6IHsKKyAgICAgICAgICAgIGFwcGVuZFVuT3A8RGVwZW5kMzIs
IERlcGVuZDY0PihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIFNobDogewogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDEpLT5pc0ludDMyKDEpKSB7CkBAIC0yMjY2LDcgKzI2MDMsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYXBwZW5kU3RvcmUo
dmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1f
dmFsdWUsIGFkZHIobV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
QEAgLTIyODcsNyArMjYyNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBlbmRT
dG9yZShBaXI6OlN0b3JlOCwgdmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAgICAgICAg
ICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjMwOCw3ICsyNjQ1LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZFN0b3JlKEFpcjo6U3RvcmUxNiwgdmFsdWVU
b1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUs
IHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIApAQCAtMjc4NCw2ICszMTIxLDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhcHBl
bmQoQWlyOjpFbnRyeVN3aXRjaCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1dlYWtDQVM6IHsKKyAgICAgICAgICAgIEF0
b21pY1ZhbHVlKiB2YWx1ZSA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworI2lmIENQVShY
ODZfNjQpCisgICAgICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAg
ICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUodmFsdWUtPm9wZXJhdGlvblR5cGUo
KSksIGltbU9yVG1wKHZhbHVlLT5jaGlsZCgwKSksIGVheCk7CisgICAgICAgICAgICBhcHBlbmQo
T1BDT0RFX0ZPUl9XSURUSChMb2NrQ21wWGNoZywgdmFsdWUtPm9wZXJhdGlvbldpZHRoKCkpLCBl
YXgsIHRtcCh2YWx1ZS0+Y2hpbGQoMSkpLCBhZGRyKHZhbHVlKSwgdG1wKHZhbHVlKSk7CisjZWxp
ZiBDUFUoQVJNNjQpCisgICAgICAgICAgICBhcHBlbmRBUk02NFdlYWtDQVModmFsdWUsIGZhbHNl
KTsKKyNlbHNlCisjZXJyb3IgIkJhZCBhcmNoaXRlY3R1cmUiCisjZW5kaWYKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVh
azsKQEAgLTI3OTMsNjMgKzMxNDQsNiBAQCBwcml2YXRlOgogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHZvaWQgbG93ZXJYODZEaXYoQjM6Ok9wY29k
ZSBvcCkKLSAgICB7Ci0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKLSAgICAgICAgVG1wIGVh
eCA9IFRtcChYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgICAgIFRtcCBlZHggPSBUbXAoWDg2UmVn
aXN0ZXJzOjplZHgpOwotCi0gICAgICAgIEFpcjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJsZVdvcmQ7
Ci0gICAgICAgIEFpcjo6T3Bjb2RlIGRpdjsKLSAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT50eXBl
KCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdv
cmQgPSBYODZDb252ZXJ0VG9Eb3VibGVXb3JkMzI7Ci0gICAgICAgICAgICBkaXYgPSBYODZEaXYz
MjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAg
Y29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb1F1YWRXb3JkNjQ7Ci0gICAgICAgICAg
ICBkaXYgPSBYODZEaXY2NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChvcCA9PSBEaXYgfHwgb3AgPT0gTW9k
KTsKLSAgICAgICAgWDg2UmVnaXN0ZXJzOjpSZWdpc3RlcklEIHJlc3VsdCA9IG9wID09IERpdiA/
IFg4NlJlZ2lzdGVyczo6ZWF4IDogWDg2UmVnaXN0ZXJzOjplZHg7Ci0KLSAgICAgICAgYXBwZW5k
KE1vdmUsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIGVheCk7Ci0gICAgICAgIGFwcGVuZChjb252
ZXJ0VG9Eb3VibGVXb3JkLCBlYXgsIGVkeCk7Ci0gICAgICAgIGFwcGVuZChkaXYsIGVheCwgZWR4
LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChyZXN1
bHQpLCB0bXAobV92YWx1ZSkpOwotCi0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwot
ICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSNlbmRpZgotICAgIH0KLQotICAg
IHZvaWQgbG93ZXJYODZVRGl2KEIzOjpPcGNvZGUgb3ApCi0gICAgewotI2lmIENQVShYODYpIHx8
IENQVShYODZfNjQpCi0gICAgICAgIFRtcCBlYXggPSBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpOwot
ICAgICAgICBUbXAgZWR4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWR4KTsKLQotICAgICAgICBBaXI6
Ok9wY29kZSBkaXYgPSBtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyBYODZVRGl2MzIgOiBYODZV
RGl2NjQ7Ci0KLSAgICAgICAgQVNTRVJUKG9wID09IFVEaXYgfHwgb3AgPT0gVU1vZCk7Ci0gICAg
ICAgIFg4NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCByZXN1bHQgPSBvcCA9PSBVRGl2ID8gWDg2UmVn
aXN0ZXJzOjplYXggOiBYODZSZWdpc3RlcnM6OmVkeDsKLQotICAgICAgICBhcHBlbmQoTW92ZSwg
dG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgZWF4KTsKLSAgICAgICAgYXBwZW5kKFhvcjY0LCBlZHgs
IGVkeCk7Ci0gICAgICAgIGFwcGVuZChkaXYsIGVheCwgZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQo
MSkpKTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChyZXN1bHQpLCB0bXAobV92YWx1ZSkpOwot
I2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgVU5SRUFDSEFCTEVfRk9S
X1BMQVRGT1JNKCk7Ci0jZW5kaWYKLSAgICB9Ci0KICAgICBJbmRleFNldDxWYWx1ZT4gbV9sb2Nr
ZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4KICAg
ICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBtX3ZhbHVlVG9UbXA7IC8vIFRoZXNlIGFyZSB2YWx1ZXMg
dGhhdCBtdXN0IGhhdmUgYSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBhIFZhbHVlKiB3aXRoIGEg
bm9uLW51bGwgVG1wIGlzICJwaW5uZWQiLgogICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IG1fcGhp
VG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBUbXAuCkBAIC0yODY0LDcgKzMxNTgsNyBA
QCBwcml2YXRlOgogCiAgICAgVmVjdG9yPFZlY3RvcjxJbnN0LCA0Pj4gbV9pbnN0czsKICAgICBW
ZWN0b3I8SW5zdD4gbV9wcm9sb2d1ZTsKLQorICAgIAogICAgIEIzOjpCYXNpY0Jsb2NrKiBtX2Js
b2NrOwogICAgIGJvb2wgbV9pc1JhcmU7CiAgICAgdW5zaWduZWQgbV9pbmRleDsKQEAgLTI4NzUs
NiArMzE2OSw4IEBAIHByaXZhdGU6CiAKICAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOwogICAg
IENvZGUmIG1fY29kZTsKKworICAgIEFpcjo6QmxvY2tJbnNlcnRpb25TZXQgbV9ibG9ja0luc2Vy
dGlvblNldDsKIH07CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwzMCArMzQsNDggQEAgTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgpCiB7CiB9CiAK
K1R5cGUgTWVtb3J5VmFsdWU6OmFjY2Vzc1R5cGUoKSBjb25zdAoreworICAgIGlmIChpc0xvYWQo
b3Bjb2RlKCkpKQorICAgICAgICByZXR1cm4gdHlwZSgpOworICAgIC8vIFRoaXMgaGFwcGVucyB0
byB3b3JrIGZvciBhdG9taWNzLCB0b28uIFRoYXQncyB3aHkgQXRvbWljVmFsdWUgZG9lcyBub3Qg
bmVlZCB0byBvdmVycmlkZSB0aGlzLgorICAgIHJldHVybiBjaGlsZCgwKS0+dHlwZSgpOworfQor
CitCYW5rIE1lbW9yeVZhbHVlOjphY2Nlc3NCYW5rKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYmFu
a0ZvclR5cGUoYWNjZXNzVHlwZSgpKTsKK30KKwogc2l6ZV90IE1lbW9yeVZhbHVlOjphY2Nlc3NC
eXRlU2l6ZSgpIGNvbnN0CiB7CisgICAgcmV0dXJuIGJ5dGVzKGFjY2Vzc1dpZHRoKCkpOworfQor
CitXaWR0aCBNZW1vcnlWYWx1ZTo6bG9hZFN0b3JlV2lkdGgoKSBjb25zdAorewogICAgIHN3aXRj
aCAob3Bjb2RlKCkpIHsKICAgICBjYXNlIExvYWQ4WjoKICAgICBjYXNlIExvYWQ4UzoKICAgICBj
YXNlIFN0b3JlODoKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiBXaWR0aDg7CiAg
ICAgY2FzZSBMb2FkMTZaOgogICAgIGNhc2UgTG9hZDE2UzoKICAgICBjYXNlIFN0b3JlMTY6Ci0g
ICAgICAgIHJldHVybiAyOworICAgICAgICByZXR1cm4gV2lkdGgxNjsKICAgICBjYXNlIExvYWQ6
Ci0gICAgICAgIHJldHVybiBzaXplb2ZUeXBlKHR5cGUoKSk7CisgICAgICAgIHJldHVybiB3aWR0
aEZvclR5cGUodHlwZSgpKTsKICAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXR1cm4gc2l6ZW9m
VHlwZShjaGlsZCgwKS0+dHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlwZShjaGls
ZCgwKS0+dHlwZSgpKTsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIFdpZHRoODsKICAg
ICB9CiB9CiAKIFdpZHRoIE1lbW9yeVZhbHVlOjphY2Nlc3NXaWR0aCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHdpZHRoRm9yQnl0ZXMoYWNjZXNzQnl0ZVNpemUoKSk7CisgICAgcmV0dXJuIGxvYWRT
dG9yZVdpZHRoKCk7CiB9CiAKIHZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRl
ciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC02Nyw2ICs4NSw4IEBAIHZvaWQg
TWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYKICAgICBpZiAoKGlzTG9hZCgpICYm
IGVmZmVjdHMoKS5yZWFkcyAhPSByYW5nZSgpKQogICAgICAgICB8fCAoaXNTdG9yZSgpICYmIGVm
ZmVjdHMoKS53cml0ZXMgIT0gcmFuZ2UoKSkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgInJh
bmdlID0gIiwgcmFuZ2UoKSk7CisgICAgaWYgKHBoYW50b21SYW5nZSgpKQorICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJwaGFudG9tUmFuZ2UgPSAiLCBwaGFudG9tUmFuZ2UoKSk7CiB9CiAKIFZh
bHVlKiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKQEAgLTc0LDYgKzk0LDU4IEBAIFZh
bHVlKiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKICAgICByZXR1cm4gbmV3IE1lbW9y
eVZhbHVlKCp0aGlzKTsKIH0KIAorLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBM
b2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhh
dAorLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KK01lbW9yeVZhbHVlOjpNZW1vcnlW
YWx1ZShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIs
IGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5
cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAgICBpZiAo
IUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAg
ICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZDha
OgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBj
YXNlIExvYWQxNlM6CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3RvcmUxNjoK
KyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9ybSBm
b3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCitNZW1vcnlWYWx1ZTo6
TWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50
MzJfdCBvZmZzZXQgPSAwKQorICAgIDogTWVtb3J5VmFsdWUoa2luZCwgSW50MzIsIG9yaWdpbiwg
cG9pbnRlciwgb2Zmc2V0KQoreworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAg
IHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAg
Y2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZT
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9y
bSBmb3Igc3RvcmVzLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAw
KQorICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwg
cG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAgICBBU1NFUlQoaXNTdG9yZShr
aW5kLm9wY29kZSgpKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiAjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9y
eVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5
VmFsdWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNDggKzI3LDE3IEBACiAKICNpZiBF
TkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNCYW5rLmgiCiAjaW5jbHVkZSAiQjNIZWFwUmFu
Z2UuaCIKICNpbmNsdWRlICJCM1ZhbHVlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgewogCi0vLyBGSVhNRTogV2Ugd2FudCB0byBhbGxvdyBmZW5jZWQgbWVtb3J5IGFjY2Vzc2Vz
IG9uIEFSTS4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIz
NDkKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUg
ewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQogICAgIHsKLSAg
ICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9hZDhaOgotICAg
ICAgICBjYXNlIExvYWQ4UzoKLSAgICAgICAgY2FzZSBMb2FkMTZaOgotICAgICAgICBjYXNlIExv
YWQxNlM6Ci0gICAgICAgIGNhc2UgTG9hZDoKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAg
IGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaXNTdG9yZShLaW5kIGtpbmQpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0g
ICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaXNMb2FkKEtpbmQga2luZCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhY2NlcHRzKGtpbmQpICYmICFpc1N0b3JlKGtpbmQpOworICAg
ICAgICByZXR1cm4gaXNNZW1vcnkoa2luZC5vcGNvZGUoKSk7CiAgICAgfQogCiAgICAgfk1lbW9y
eVZhbHVlKCk7CkBAIC03OCw3NiArNDcsNTYgQEAgcHVibGljOgogCiAgICAgY29uc3QgSGVhcFJh
bmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KICAgICB2b2lkIHNldFJhbmdl
KGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9yYW5nZSA9IHJhbmdlOyB9CisgICAgCisgICAg
Ly8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgcmFuZ2UuCisgICAgY29uc3QgSGVhcFJhbmdlJiBhY2Nl
c3NSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHJhbmdlKCk7IH0KKyAgICB2b2lkIHNldEFjY2Vzc1Jh
bmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgc2V0UmFuZ2UocmFuZ2UpOyB9CisgICAgCisg
ICAgY29uc3QgSGVhcFJhbmdlJiBmZW5jZVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9mZW5jZVJh
bmdlOyB9CisgICAgdm9pZCBzZXRGZW5jZVJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsg
bV9mZW5jZVJhbmdlID0gcmFuZ2U7IH0KKworICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0
dXJuIGlzU3RvcmUob3Bjb2RlKCkpOyB9CisgICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7IHJldHVy
biBpc0xvYWQob3Bjb2RlKCkpOyB9CiAKLSAgICBib29sIGlzU3RvcmUoKSBjb25zdCB7IHJldHVy
biB0eXBlKCkgPT0gVm9pZDsgfQotICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyByZXR1cm4gdHlw
ZSgpICE9IFZvaWQ7IH0KKyAgICBib29sIGhhc0ZlbmNlKCkgY29uc3QgeyByZXR1cm4gISFmZW5j
ZVJhbmdlKCk7IH0KIAorICAgIFR5cGUgYWNjZXNzVHlwZSgpIGNvbnN0OworICAgIEJhbmsgYWNj
ZXNzQmFuaygpIGNvbnN0OwogICAgIHNpemVfdCBhY2Nlc3NCeXRlU2l6ZSgpIGNvbnN0OwotICAg
IFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2xpZ2h0bHkgZmFzdGVy
IHZlcnNpb24gb2YgYWNjZXNzV2lkdGgsIGlmIHlvdSBrbm93IHRoYXQgeW91J3JlIHdvcmtpbmcg
d2l0aCBhIGxvYWQgb3Igc3RvcmUuCisgICAgV2lkdGggbG9hZFN0b3JlV2lkdGgoKSBjb25zdDsK
KyAgICAKKyAgICB2aXJ0dWFsIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CiAKIHByb3RlY3Rl
ZDoKLSAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92
ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7Ci0KLSAgICAv
LyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkg
b2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0Ci0gICAgLy8gZGVzY3JpYmVzIHRo
ZSByZXR1cm5lZCB0eXBlKS4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIFR5cGUgdHlwZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAg
ICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIE1lbW9yeVZhbHVl
KENoZWNrZWRPcGNvZGVUYWcsIEtpbmQga2luZCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBp
bnQzMl90IG9mZnNldCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShD
aGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAgICAgICAg
LCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6OnRvcCgpKQog
ICAgIHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAgIHN3aXRj
aCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBMb2FkOgotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMb2FkOFo6Ci0gICAgICAgICAgICBjYXNlIExv
YWQ4UzoKLSAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKLSAgICAgICAgICAgIGNhc2UgTG9hZDE2
UzoKLSAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgICAgIGNhc2UgU3Rv
cmUxNjoKLSAgICAgICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHR5
cGUgPT0gVm9pZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9CiAgICAgfQorICAgIAorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1
dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3Vm
Zml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgorICAgIE1lbW9y
eVZhbHVlKEtpbmQsIFR5cGUsIE9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0
ID0gMCk7CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJu
IHR5cGUgaXMgaW1wbGllZC4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDogTWVtb3J5
VmFsdWUoa2luZCwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KQotICAgIHsKLSAgICB9
CisgICAgTWVtb3J5VmFsdWUoS2luZCwgT3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBv
ZmZzZXQgPSAwKTsKIAogICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KLSAgICBNZW1v
cnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBv
aW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2Rl
LCBraW5kLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQotICAgICAgICAsIG1fb2Zmc2V0
KG9mZnNldCkKLSAgICAgICAgLCBtX3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCi0gICAgewotICAg
ICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgc3dpdGNoIChraW5kLm9w
Y29kZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgICAgIGNhc2UgU3Rv
cmUxNjoKLSAgICAgICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCisgICAgTWVtb3J5VmFsdWUoS2luZCwgT3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBw
b2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAgIAogICAgIGludDMyX3QgbV9vZmZzZXQg
eyAwIH07Ci0gICAgSGVhcFJhbmdlIG1fcmFuZ2U7CisgICAgSGVhcFJhbmdlIG1fcmFuZ2UgeyBI
ZWFwUmFuZ2U6OnRvcCgpIH07CisgICAgSGVhcFJhbmdlIG1fZmVuY2VSYW5nZSB7IEhlYXBSYW5n
ZSgpIH07CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKICNp
ZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSAiQjNXaWR0
aC5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIApAQCAtODIsNyArODMsNiBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIE1v
ZCwgLy8gQWxsIGJldHMgYXJlIG9mZiBhcyB0byB3aGF0IHdpbGwgaGFwcGVuIHdoZW4geW91IGV4
ZWN1dGUgdGhpcyBmb3IgLTJeMzElLTEgYW5kIHglMC4KICAgICBVTW9kLAogCi0KICAgICAvLyBQ
b2x5bW9ycGhpYyBuZWdhdGlvbi4gTm90ZSB0aGF0IHdlIG9ubHkgbmVlZCB0aGlzIGZvciBmbG9h
dGluZyBwb2ludCwgc2luY2UgaW50ZWdlciBuZWdhdGlvbgogICAgIC8vIGlzIGV4YWN0bHkgbGlr
ZSBTdWIoMCwgeCkuIEJ1dCB0aGF0J3Mgbm90IHRydWUgZm9yIGZsb2F0aW5nIHBvaW50LiBTdWIo
MCwgMCkgaXMgMCwgd2hpbGUKICAgICAvLyBOZWcoMCkgaXMgLTAuIEFsc28sIHdlIGNhbm9uaWNh
bGl6ZSBTdWIoMCwgeCkgaW50byBOZWcoeCkgaW4gY2FzZSBvZiBpbnRlZ2Vycy4KQEAgLTE2Miw2
ICsxNjIsMTA1IEBAIGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgU3RvcmUxNiwKICAgICAv
LyBUaGlzIGlzIGEgcG9seW1vcnBoaWMgc3RvcmUgZm9yIEludDMyLCBJbnQ2NCwgRmxvYXQsIGFu
ZCBEb3VibGUuCiAgICAgU3RvcmUsCisgICAgCisgICAgLy8gQXRvbWljIGNvbXBhcmUgYW5kIHN3
YXAgdGhhdCByZXR1cm5zIGEgYm9vbGVhbi4gTWF5IGNob29zZSB0byBkbyBub3RoaW5nIGFuZCBy
ZXR1cm4gZmFsc2UuIFlvdSBjYW4KKyAgICAvLyB1c3VhbGx5IGFzc3VtZSB0aGF0IHRoaXMgaXMg
ZmFzdGVyIGFuZCByZXN1bHRzIGluIGxlc3MgY29kZSB0aGFuIEF0b21pY1N0cm9uZ0NBUywgdGhv
dWdoIHRoYXQncworICAgIC8vIG5vdCBuZWNlc3NhcmlseSB0cnVlIG9uIEludGVsLCBpZiBpbnN0
cnVjdGlvbiBzZWxlY3Rpb24gZG9lcyBpdHMgam9iLiBJbWFnaW5lIHRoYXQgdGhpcyBvcGNvZGUg
aXMKKyAgICAvLyBhcyBpZiB5b3UgZGlkIHRoaXMgYXRvbWljYWxseToKKyAgICAvLworICAgIC8v
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgLy8gYm9vbCBBdG9taWNXZWFrQ0FTKFQgZXhwZWN0
ZWRWYWx1ZSwgVCBuZXdWYWx1ZSwgVCogcHRyKQorICAgIC8vIHsKKyAgICAvLyAgICAgaWYgKCFy
YW5kKCkpCisgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFJlYWwgd29ybGQgZXhhbXBs
ZSBvZiB0aGlzOiBjb250ZXh0IHN3aXRjaCBvbiBBUk0gd2hpbGUgZG9pbmcgQ0FTLgorICAgIC8v
ICAgICBpZiAoKnB0ciAhPSBleHBlY3RlZFZhbHVlKQorICAgIC8vICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIC8vICAgICAqcHRyID0gbmV3VmFsdWU7CisgICAgLy8gICAgIHJldHVybiB0cnVl
OworICAgIC8vIH0KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBhbGwgYXRvbWljcyBwdXQgdGhl
IHBvaW50ZXIgbGFzdCB0byBiZSBjb25zaXN0ZW50IHdpdGggaG93IGxvYWRzIGFuZCBzdG9yZXMg
d29yay4gVGhpcworICAgIC8vIGlzIGEgZ29vZnkgdHJhZGl0aW9uLCBidXQgaXQncyBoYXJtbGVz
cywgYW5kIGJldHRlciB0aGFuIGJlaW5nIGluY29uc2lzdGVudC4KKyAgICAvLworICAgIC8vIE5v
dGUgdGhhdCB3ZWFrIENBUyBoYXMgbm8gZmVuY2luZyBndWFyYW50ZWVzIHdoZW4gaXQgZmFpbHMu
IFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nCisgICAgLy8gdHJhbnNmb3JtYXRpb24gaXMg
YWx3YXlzIHZhbGlkOgorICAgIC8vCisgICAgLy8gQmVmb3JlOgorICAgIC8vCisgICAgLy8gICAg
ICAgICBCcmFuY2goQXRvbWljV2Vha0NBUyhleHBlY3RlZCwgbmV3LCBwdHIpKQorICAgIC8vICAg
ICAgIFN1Y2Nlc3NvcnM6IFRoZW46I3N1Y2Nlc3MsIEVsc2U6I2ZhaWwKKyAgICAvLworICAgIC8v
IEFmdGVyOgorICAgIC8vCisgICAgLy8gICAgICAgICBCcmFuY2goRXF1YWwoTG9hZChwdHIpLCBl
eHBlY3RlZCkpCisgICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhlbjojYXR0ZW1wdCwgRWxzZToj
ZmFpbAorICAgIC8vICAgICBCQiNhdHRlbXB0OgorICAgIC8vICAgICAgICAgQnJhbmNoKEF0b21p
Y1dlYWtDQVMoZXhwZWN0ZWQsIG5ldywgcHRyKSkKKyAgICAvLyAgICAgICBTdWNjZXNzb3JzOiBU
aGVuOiNzdWNjZXNzLCBFbHNlOiNmYWlsCisgICAgLy8KKyAgICAvLyBCb3RoIGtpbmRzIG9mIENB
UyBmb3Igbm9uLWNhbm9uaWNhbCB3aWR0aHMgKFdpZHRoOCBhbmQgV2lkdGgxNikgaWdub3JlIHRo
ZSBpcnJlbGV2YW50IGJpdHMgb2YgdGhlCisgICAgLy8gaW5wdXQuCisgICAgQXRvbWljV2Vha0NB
UywKKyAgICAKKyAgICAvLyBBdG9taWMgY29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgdGhl
IG9sZCB2YWx1ZS4gRG9lcyBub3QgaGF2ZSB0aGUgbm9uZGV0ZXJtaW5pc20gb2YgV2Vha0NBUy4K
KyAgICAvLyBUaGlzIGlzIGEgYml0IG1vcmUgY29kZSBhbmQgYSBiaXQgc2xvd2VyIGluIHNvbWUg
Y2FzZXMsIHRob3VnaCBub3QgYnkgYSBsb3QuIEltYWdpbmUgdGhhdCB0aGlzCisgICAgLy8gb3Bj
b2RlIGlzIGFzIGlmIHlvdSBkaWQgdGhpcyBhdG9taWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICAvLyBUIEF0b21pY1N0cm9uZ0NBUyhUIGV4cGVjdGVkVmFs
dWUsIFQgbmV3VmFsdWUsIFQqIHB0cikKKyAgICAvLyB7CisgICAgLy8gICAgIFQgb2xkVmFsdWUg
PSAqcHRyOworICAgIC8vICAgICBpZiAob2xkVmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZSkKKyAgICAv
LyAgICAgICAgICpwdHIgPSBuZXdWYWx1ZTsKKyAgICAvLyAgICAgcmV0dXJuIG9sZFZhbHVlCisg
ICAgLy8gfQorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IEF0b21pY1dlYWtDQVMgYW5kIEF0b21p
Y1N0cm9uZ0NBUyBzb3J0IG9mIGhhdmUgdGhpcyBraW5kIG9mIGVxdWl2YWxlbmNlOgorICAgIC8v
CisgICAgLy8gQXRvbWljV2Vha0NBUyhAZXhwLCBAbmV3LCBAcHRyKSA9PSBFcXVhbChBdG9taWNT
dHJvbmdDQVMoQGV4cCwgQG5ldywgQHB0ciksIEBleHApCisgICAgLy8KKyAgICAvLyBBc3N1bWlu
ZyB0aGF0IHRoZSBXZWFrQ0FTIGRvZXMgbm90IHNwdXJpb3VzbHkgZmFpbCwgb2YgY291cnNlLgor
ICAgIEF0b21pY1N0cm9uZ0NBUywKKyAgICAKKyAgICAvLyBBdG9taWNhbGx5IF9fXyBhIG1lbW9y
eSBsb2NhdGlvbiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuIFN5bnRheDoKKyAgICAvLworICAg
IC8vIEBvbGRWYWx1ZSA9IEF0b21pY1hjaGdfX18oQG9wZXJhbmQsIEBwdHIpCisgICAgLy8KKyAg
ICAvLyBGb3Igbm9uLWNhbm9uaWNhbCB3aWR0aHMgKFdpZHRoOCBhbmQgV2lkdGgxNiksIHRoZXNl
IHJldHVybiBzaWduLWV4dGVuZGVkIHJlc3VsdHMgYW5kIGlnbm9yZSB0aGUKKyAgICAvLyBpcnJl
bGV2YW50IGJpdHMgb2YgdGhlaXIgaW5wdXRzLgorICAgIEF0b21pY1hjaGdBZGQsCisgICAgQXRv
bWljWGNoZ0FuZCwKKyAgICBBdG9taWNYY2hnT3IsCisgICAgQXRvbWljWGNoZ1N1YiwKKyAgICBB
dG9taWNYY2hnWG9yLAorICAgIAorICAgIC8vIEF0b21pY2FsbHkgZXhjaGFuZ2UgYSB2YWx1ZSB3
aXRoIGEgbWVtb3J5IGxvY2F0aW9uLiBTeW50YXg6CisgICAgLy8KKyAgICAvLyBAb2xkVmFsdWUg
PSBBdG9taWNYY2hnKEBuZXdWYWx1ZSwgQHB0cikKKyAgICBBdG9taWNYY2hnLAorICAgIAorICAg
IC8vIEludHJvZHVjZSBhbiBpbnZpc2libGUgZGVwZW5kZW5jeSBmb3IgYmxvY2tpbmcgbW90aW9u
IG9mIGxvYWRzIHdpdGggcmVzcGVjdCB0byBlYWNoIG90aGVyLiBTeW50YXg6CisgICAgLy8KKyAg
ICAvLyBAcmVzdWx0ID0gRGVwZW5kKEBwaGFudG9tKQorICAgIC8vCisgICAgLy8gVGhpcyBpcyBl
dmVudHVhbGx5IGNvZGVnZW5lcmF0ZWQgdG8gaGF2ZSBsb2NhbCBzZW1hbnRpY3MgYXMgaWYgd2Ug
ZGlkOgorICAgIC8vCisgICAgLy8gQHJlc3VsdCA9ICQwCisgICAgLy8KKyAgICAvLyBCdXQgaXQg
ZW5zdXJlcyB0aGF0IHRoZSB1c2VycyBvZiBAcmVzdWx0IGNhbm5vdCBleGVjdXRlIHVudGlsIEBw
aGFudG9tIGlzIGNvbXB1dGVkLgorICAgIC8vCisgICAgLy8gVGhlIGNvbXBpbGVyIGlzIG5vdCBh
bGxvd2VkIHRvIHJlYXNvbiBhYm91dCB0aGUgZmFjdCB0aGF0IERlcGVuZCBjb2RlZ2VuZXJhdGVz
IHRoaXMgd2F5LiBBbnkga2luZAorICAgIC8vIG9mIHRyYW5zZm9ybWF0aW9uIG9yIGFuYWx5c2lz
IHRoYXQgcmVsaWVzIG9uIHRoZSBpbnNpZ2h0IHRoYXQgRGVwZW5kIGlzIHJlYWxseSB6ZXJvIGlz
IHVuc291bmQsCisgICAgLy8gYmVjYXVzZSBpdCB1bmxvY2tzIHJlb3JkZXJpbmcgb2YgdXNlcnMg
b2YgQHJlc3VsdCBhbmQgQHBoYW50b20uCisgICAgLy8KKyAgICAvLyBPbiBYODYsIHRoaXMgaXMg
bG93ZXJlZCB0byBhIGxvYWQtbG9hZCBmZW5jZSBhbmQgQHJlc3VsdCB1c2VzIEBwaGFudG9tIGRp
cmVjdGx5LgorICAgIC8vCisgICAgLy8gT24gQVJNLCB0aGlzIGlzIGxvd2VyZWQgYXMgaWYgbGlr
ZToKKyAgICAvLworICAgIC8vIEByZXN1bHQgPSBCaXRYb3IoQHBoYW50b20sIEBwaGFudG9tKQor
ICAgIC8vCisgICAgLy8gRXhjZXB0IHRoYXQgdGhlIGNvbXBpbGVyIG5ldmVyIGdldHMgYW4gb3Bw
b3J0dW5pdHkgdG8gc2ltcGxpZnkgb3V0IHRoZSBCaXRYb3IuCisgICAgRGVwZW5kLAogCiAgICAg
Ly8gVGhpcyBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIGFjdHVhbCBhZGRyZXNzIG9mIGEgV2FzbSBt
ZW1vcnkgb3BlcmF0aW9uLiBJdCB0YWtlcyBhbiBJbnRQdHIKICAgICAvLyBhbmQgYSBwaW5uZWQg
cmVnaXN0ZXIgdGhlbiBjb21wdXRlcyB0aGUgYXBwcm9wcmlhdGUgSW50UHRyIGFkZHJlc3MuIEZv
ciB0aGUgdXNlLWNhc2Ugb2YKQEAgLTMwMSw2ICs0MDAsMTEwIEBAIGlubGluZSBib29sIGlzRGVm
aW5pdGVseVRlcm1pbmFsKE9wY29kZSAKICAgICB9CiB9CiAKK2lubGluZSBib29sIGlzTG9hZChP
cGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBMb2FkOFo6
CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgorICAgIGNhc2UgTG9hZDE2UzoK
KyAgICBjYXNlIExvYWQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzU3RvcmUoT3Bjb2Rl
IG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgU3RvcmU4OgorICAg
IGNhc2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9v
bCBpc0xvYWRTdG9yZShPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgY2FzZSBMb2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgorICAg
IGNhc2UgTG9hZDE2UzoKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBTdG9yZTg6CisgICAgY2Fz
ZSBTdG9yZTE2OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlz
QXRvbWljKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNl
IEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgY2FzZSBBdG9t
aWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21pY1hjaGdP
cjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAg
IGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNBdG9taWNDQVMo
T3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgQXRvbWlj
V2Vha0NBUzoKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5l
IGJvb2wgaXNBdG9taWNYY2hnKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAg
IGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0
b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hnOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUg
Ym9vbCBpc01lbW9yeUFjY2VzcyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHJldHVybiBpc0F0b21p
YyhvcGNvZGUpIHx8IGlzTG9hZFN0b3JlKG9wY29kZSk7Cit9CisKK2lubGluZSBPcGNvZGUgc2ln
bkV4dGVuZE9wY29kZShXaWR0aCB3aWR0aCkKK3sKKyAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAg
Y2FzZSBXaWR0aDg6CisgICAgICAgIHJldHVybiBTRXh0ODsKKyAgICBjYXNlIFdpZHRoMTY6Cisg
ICAgICAgIHJldHVybiBTRXh0MTY7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9vcHM7CisgICAgfQorfQorCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
Miw2ICsyMDIsOCBAQCB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAg
ICAgICAgIH0KICAgICAgICAgZGF0YUxvZygiICAgICIsIGRlZXBEdW1wKCp0aGlzLCB2YWx1ZSks
ICJcbiIpOwogICAgIH0KKyAgICBpZiAoaGFzUXVpcmtzKCkpCisgICAgICAgIG91dC5wcmludCgi
SGFzIFF1aXJrczogVHJ1ZVxuIik7CiAgICAgaWYgKHZhcmlhYmxlcygpLnNpemUoKSkgewogICAg
ICAgICBvdXQucHJpbnQoIlZhcmlhYmxlczpcbiIpOwogICAgICAgICBmb3IgKFZhcmlhYmxlKiB2
YXJpYWJsZSA6IHZhcmlhYmxlcygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDcgQEAgcHVibGljOgog
ICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChPcmlnaW4sIFR5cGUsIGludDY0X3QgdmFsdWUpOwog
ICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChWYWx1ZSosIGludDY0X3QgdmFsdWUpOwogCisgICAg
Ly8gWW91J3JlIGd1YXJhbnRlZWQgdGhhdCBib3R0b20gaXMgemVyby4KICAgICBWYWx1ZSogYWRk
Qm90dG9tKE9yaWdpbiwgVHlwZSk7CiAgICAgVmFsdWUqIGFkZEJvdHRvbShWYWx1ZSopOwogCkBA
IC0xOTUsNiArMTk2LDEyIEBAIHB1YmxpYzoKICAgICAvLyBhbGl2ZS4gR3JlYXQgZm9yIGNvbXBp
bGVyLWdlbmVyYXRlZCBkYXRhIHNlY3Rpb25zLCBsaWtlIHN3aXRjaCBqdW1wIHRhYmxlcyBhbmQg
Y29uc3RhbnQgcG9vbHMuCiAgICAgLy8gVGhpcyByZXR1cm5zIG1lbW9yeSB0aGF0IGhhcyBiZWVu
IHplcm8taW5pdGlhbGl6ZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWRkRGF0YVNl
Y3Rpb24oc2l6ZV90KTsKKyAgICAKKyAgICAvLyBTb21lIG9wZXJhdGlvbnMgYXJlIHNwZWNpZmll
ZCBpbiBCMyBJUiB0byBiZWhhdmUgb25lIHdheSBidXQgb24gdGhpcyBnaXZlbiBDUFUgdGhleSBi
ZWhhdmUgYQorICAgIC8vIGRpZmZlcmVudCB3YXkuIFdoZW4gdHJ1ZSwgdGhvc2UgQjMgSVIgb3Bz
IHN3aXRjaCB0byBiZWhhdmluZyB0aGUgQ1BVIHdheSwgYW5kIHRoZSBvcHRpbWl6ZXIgbWF5Cisg
ICAgLy8gc3RhcnQgdGFraW5nIGFkdmFudGFnZSBvZiBpdC4KKyAgICBib29sIGhhc1F1aXJrcygp
IGNvbnN0IHsgcmV0dXJuIG1faGFzUXVpcmtzOyB9CisgICAgdm9pZCBzZXRIYXNRdWlya3MoYm9v
bCB2YWx1ZSkgeyBtX2hhc1F1aXJrcyA9IHZhbHVlOyB9CiAKICAgICBPcGFxdWVCeXByb2R1Y3Rz
JiBieXByb2R1Y3RzKCkgeyByZXR1cm4gKm1fYnlwcm9kdWN0czsgfQogCkBAIC0yNTIsNiArMjU5
LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFByaW50U3RyZWFtJiwg
T3JpZ2luKT4+IG1fb3JpZ2luUHJpbnRlcjsKICAgICBjb25zdCB2b2lkKiBtX2Zyb250ZW5kRGF0
YTsKICAgICBQQ1RvT3JpZ2luTWFwIG1fcGNUb09yaWdpbk1hcDsKKyAgICBib29sIG1faGFzUXVp
cmtzIHsgZmFsc2UgfTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24g
MjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjk1LDYgKzEyOTUsMTYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fcHJvYy5oYXNRdWlya3MoKSkgeworICAgICAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDgoQXRvbWljWGNoZ19fXykKKyAgICAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IEF0b21pY1hjaGdfX18KKyAgICAgICAgICAgICAgICBpZiAoaXNB
dG9taWNYY2hnKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVlPigpLT5vcGVyYXRpb25XaWR0
aCgpID09IFdpZHRoOCkgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5
KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAg
Y2FzZSBTRXh0MTY6CkBAIC0xMzQzLDYgKzEzNTMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIW1fcHJvYy5oYXNRdWlya3MoKSkgeworICAgICAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogU0V4dDE2KEF0b21pY1hjaGdfX18pCisgICAgICAgICAgICAgICAgLy8gSW50byB0
aGlzOiBBdG9taWNYY2hnX19fCisgICAgICAgICAgICAgICAgaWYgKGlzQXRvbWljWGNoZyhtX3Zh
bHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUt
PmNoaWxkKDApLT5hczxBdG9taWNWYWx1ZT4oKS0+b3BlcmF0aW9uV2lkdGgoKSA9PSBXaWR0aDE2
KSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hp
bGQoMCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNFeHQzMjoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQ2LDYgKzM0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBl
KCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5
cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0
ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVl
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTG9hZDoKQEAgLTM1
Myw2ICszNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51
bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2
YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgIT0gVm9pZCwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsK
ICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU3RvcmU4OgpAQCAtMzYyLDYgKzM2NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUo
KSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAg
ICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgU3RvcmU6CkBAIC0zNjksOCArMzcyLDQ5IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAo
IkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgx
KS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAgICAgIHZh
bGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1
ZS0+a2luZCgpLmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAzLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9
PSB2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkg
PT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxp
ZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2
YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1N0
cm9uZ0NBUzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxs
KCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51
bUNoaWxkcmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2
YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUt
PmNoaWxkKDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFM
SURBVEUoaXNJbnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7
CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgICAgICAg
ICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAg
ICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNo
Z1hvcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5j
aGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOwor
ICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEZXBlbmQ6CisgICAgICAgICAgICAgICAgVkFM
SURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZh
bHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtQWRkcmVzczoKICAgICAgICAg
ICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAq
dmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9
PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwpAQCAtNTM3LDYgKzU4MSwyMCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0
ZUZlbmNlKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkg
PSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0ZlbmNl
KCkpCisgICAgICAgICAgICBWQUxJREFURShtZW1vcnR5LT5hY2Nlc3NCYW5rKCkgPT0gR1AsICgi
RmVuY2UgYXQgIiwgKm1lbW9yeSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlQXRv
bWljKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSB2
YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgIAorICAgICAgICBWQUxJREFURShiZXN0
VHlwZShhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpID09IGF0b21pYy0+b3BlcmF0aW9uVHlwZSgp
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgIH0KIAogICAgIHZvaWQgdmFsaWRhdGVTdGFja0FjY2Vz
cyhWYWx1ZSogdmFsdWUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
LmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTAsNiArNTEwLDcgQEAgYm9vbCBWYWx1ZTo6cmV0
dXJuc0Jvb2woKSBjb25zdAogICAgIGNhc2UgQWJvdmVFcXVhbDoKICAgICBjYXNlIEJlbG93RXF1
YWw6CiAgICAgY2FzZSBFcXVhbE9yVW5vcmRlcmVkOgorICAgIGNhc2UgQXRvbWljV2Vha0NBUzoK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBQaGk6CiAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgaGF2ZSBhIHN0b3J5IGhlcmUuCkBAIC01ODksNiArNTkwLDcgQEAgRWZmZWN0cyBW
YWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgY2FzZSBCZWxvd0VxdWFsOgogICAgIGNhc2UgRXF1
YWxPclVub3JkZXJlZDoKICAgICBjYXNlIFNlbGVjdDoKKyAgICBjYXNlIERlcGVuZDoKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBEaXY6CiAgICAgY2FzZSBVRGl2OgpAQCAtNjAwLDE2ICs2MDIs
NDQgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgY2FzZSBMb2FkOFM6CiAg
ICAgY2FzZSBMb2FkMTZaOgogICAgIGNhc2UgTG9hZDE2UzoKLSAgICBjYXNlIExvYWQ6Ci0gICAg
ICAgIHJlc3VsdC5yZWFkcyA9IGFzPE1lbW9yeVZhbHVlPigpLT5yYW5nZSgpOworICAgIGNhc2Ug
TG9hZDogeworICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gYXM8TWVtb3J5VmFsdWU+KCk7
CisgICAgICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+cmFuZ2UoKTsKKyAgICAgICAgaWYgKG1l
bW9yeS0+cGhhbnRvbVJhbmdlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC53cml0ZXMgPSBtZW1v
cnktPnBoYW50b21SYW5nZSgpOworICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKKyAg
ICAgICAgfQogICAgICAgICByZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7CiAgICAgICAg
IGJyZWFrOworICAgIH0KICAgICBjYXNlIFN0b3JlODoKICAgICBjYXNlIFN0b3JlMTY6Ci0gICAg
Y2FzZSBTdG9yZToKLSAgICAgICAgcmVzdWx0LndyaXRlcyA9IGFzPE1lbW9yeVZhbHVlPigpLT5y
YW5nZSgpOworICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9
IGFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5yYW5n
ZSgpOworICAgICAgICBpZiAobWVtb3J5LT5waGFudG9tUmFuZ2UoKSkgeworICAgICAgICAgICAg
cmVzdWx0LnJlYWRzID0gbWVtb3J5LT5waGFudG9tUmFuZ2UoKTsKKyAgICAgICAgICAgIHJlc3Vs
dC5mZW5jZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRl
bnQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBdG9taWNXZWFrQ0FT
OgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAg
ICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBB
dG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hj
aGc6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOwor
ICAgICAgICByZXN1bHQucmVhZHMgPSBtZW1vcnktPnJhbmdlKCkgfCBtZW1vcnktPnBoYW50b21S
YW5nZSgpOworICAgICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5yYW5nZSgpIHwgbWVtb3J0
eS0+cGhhbnRvbVJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPnBoYW50b21SYW5nZSgpKQor
ICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LmNvbnRyb2xE
ZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBXYXNtQWRk
cmVzczoKICAgICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7
CkBAIC02MTcsMTggKzY0Nyw3IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAg
ICAgICBjb25zdCBGZW5jZVZhbHVlKiBmZW5jZSA9IGFzPEZlbmNlVmFsdWU+KCk7CiAgICAgICAg
IHJlc3VsdC5yZWFkcyA9IGZlbmNlLT5yZWFkOwogICAgICAgICByZXN1bHQud3JpdGVzID0gZmVu
Y2UtPndyaXRlOwotICAgICAgICAKLSAgICAgICAgLy8gUHJldmVudCBraWxsaW5nIG9mIGZlbmNl
cyB0aGF0IGNsYWltIG5vdCB0byB3cml0ZSBhbnl0aGluZy4gSXQncyBhIGJpdCB3ZWlyZCB0aGF0
IHdlIHVzZQotICAgICAgICAvLyBsb2NhbCBzdGF0ZSBhcyB0aGUgd2F5IHRvIGRvIHRoaXMsIGJ1
dCBpdCBoYXBwZW5zIHRvIHdvcms6IHdlIG11c3QgYXNzdW1lIHRoYXQgd2UgY2Fubm90Ci0gICAg
ICAgIC8vIGtpbGwgd3JpdGVzTG9jYWxTdGF0ZSB1bmxlc3Mgd2UgdW5kZXJzdGFuZHMgZXhhY3Rs
eSB3aGF0IHRoZSBpbnN0cnVjdGlvbiBpcyBkb2luZyAobGlrZQotICAgICAgICAvLyB0aGUgd2F5
IHRoYXQgZml4U1NBIHVuZGVyc3RhbmRzIFNldC9HZXQgYW5kIHRoZSB3YXkgdGhhdCByZWR1Y2VT
dHJlbmd0aCBhbmQgb3RoZXJzCi0gICAgICAgIC8vIHVuZGVyc3RhbmQgVXBzaWxvbikuIFRoaXMg
d291bGQgb25seSBiZWNvbWUgYSBwcm9ibGVtIGlmIHdlIGhhZCBzb21lIGFuYWx5c2lzIHRoYXQg
d2FzCi0gICAgICAgIC8vIGxvb2tpbmcgdG8gdXNlIHRoZSB3cml0ZXNMb2NhbFN0YXRlIGJpdCB0
byBpbnZhbGlkYXRlIGEgQ1NFIG92ZXIgbG9jYWwgc3RhdGUgb3BlcmF0aW9ucy4KLSAgICAgICAg
Ly8gVGhlbiBhIEZlbmNlIHdvdWxkIGxvb2sgYmxvY2ssIHNheSwgdGhlIGVsaW1pbmF0aW9uIG9m
IGEgcmVkdW5kYW50IEdldC4gQnV0IGl0IGxpa2UKLSAgICAgICAgLy8gdGhhdCdzIG5vdCBhdCBh
bGwgaG93IG91ciBvcHRpbWl6YXRpb25zIGZvciBTZXQvR2V0L1Vwc2lsb24vUGhpIHdvcmsgLSB0
aGV5IGdyb2sgdGhlaXIKLSAgICAgICAgLy8gb3BlcmF0aW9ucyBkZWVwbHkgZW5vdWdoIHRoYXQg
dGhleSBoYXZlIG5vIG5lZWQgdG8gY2hlY2sgdGhpcyBiaXQgLSBzbyB0aGlzIGNoZWF0IGlzCi0g
ICAgICAgIC8vIGZpbmUuCi0gICAgICAgIHJlc3VsdC53cml0ZXNMb2NhbFN0YXRlID0gdHJ1ZTsK
KyAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgQ0NhbGw6CkBAIC02OTQsNiArNzEzLDcgQEAgVmFsdWVLZXkgVmFsdWU6OmtleSgpIGNv
bnN0CiAgICAgY2FzZSBDaGVjazoKICAgICBjYXNlIEJpdHdpc2VDYXN0OgogICAgIGNhc2UgTmVn
OgorICAgIGNhc2UgRGVwZW5kOgogICAgICAgICByZXR1cm4gVmFsdWVLZXkoa2luZCgpLCB0eXBl
KCksIGNoaWxkKDApKTsKICAgICBjYXNlIEFkZDoKICAgICBjYXNlIFN1YjoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBA
IHB1YmxpYzoKICAgICAvLyB2YWx1ZXMgd2l0aCBJZGVudGl0aWVzIG9uIGJvdHRvbSBjb25zdGFu
dHMuIEZvciB0aGlzIHJlYXNvbiwgdGhpcyB0YWtlcyBhIGNhbGxiYWNrIHRoYXQgaXMKICAgICAv
LyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYm90dG9tcy4gVGhlcmUncyBhIHV0aWxpdHkgZm9y
IHRoaXMsIHNlZSBCM0JvdHRvbVByb3ZpZGVyLmguIFlvdQogICAgIC8vIGNhbiBhbHNvIGFjY2Vz
cyB0aGF0IHV0aWxpdHkgdXNpbmcgcmVwbGFjZVdpdGhCb3R0b20oSW5zZXJ0aW9uU2V0Jiwgc2l6
ZV90KS4KKyAgICAvLworICAgIC8vIFlvdSdyZSBndWFyYW50ZWVkIHRoYXQgYm90dG9tIGlzIHpl
cm8uCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQm90dG9tUHJvdmlkZXI+CiAgICAgdm9pZCByZXBs
YWNlV2l0aEJvdHRvbShjb25zdCBCb3R0b21Qcm92aWRlciYpOwogICAgIApAQCAtMzIxLDYgKzMy
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSVRvRjoKICAgICAgICAgY2FzZSBCaXR3aXNl
Q2FzdDoKICAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2UgRGVwZW5kOgogICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKG51bUFyZ3MgIT0gMSkpCiAgICAgICAgICAgICAgICAgYmFkS2lu
ZChraW5kLCBudW1BcmdzKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1dpZHRoLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzV2lkdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCwzOCBAQAog
CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitUeXBlIGJlc3RUeXBlKEJhbmsgYmFuaywgV2lkdGggd2lkdGgpCit7CisgICAg
c3dpdGNoICh3aWR0aCkgeworICAgIGNhc2UgV2lkdGg4OgorICAgIGNhc2UgV2lkdGgxNjoKKyAg
ICBjYXNlIFdpZHRoMzI6CisgICAgICAgIHN3aXRjaCAoYmFuaykgeworICAgICAgICBjYXNlIEdQ
OgorICAgICAgICAgICAgcmV0dXJuIEludDMyOworICAgICAgICBjYXNlIEZQOgorICAgICAgICAg
ICAgcmV0dXJuIEZsb2F0OworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWb2lkOworICAgIGNhc2UgV2lkdGg2NDoKKyAgICAg
ICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICByZXR1cm4g
SW50NjQ7CisgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICByZXR1cm4gRG91YmxlOworICAg
ICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBWb2lkOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBWb2lkOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwogbmFtZXNwYWNl
IFdURiB7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OkIzOjpX
aWR0aCB3aWR0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguaAkocmV2aXNpb24g
MjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguaAkod29ya2luZyBj
b3B5KQpAQCAtNjIsNiArNjIsMTggQEAgaW5saW5lIFdpZHRoIHdpZHRoRm9yVHlwZShUeXBlIHR5
cGUpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK2lubGluZSBXaWR0aCBjYW5vbmlj
YWxXaWR0aChXaWR0aCB3aWR0aCkKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoV2lkdGgzMiwgd2lk
dGgpOworfQorCitpbmxpbmUgV2lkdGggaXNDYW5vbmljYWxXaWR0aChXaWR0aCB3aWR0aCkKK3sK
KyAgICByZXR1cm4gd2lkdGggPj0gV2lkdGgzMjsKK30KKworVHlwZSBiZXN0VHlwZShCYW5rIGJh
bmssIFdpZHRoIHdpZHRoKTsKKwogaW5saW5lIFdpZHRoIGNvbnNlcnZhdGl2ZVdpZHRoKEJhbmsg
YmFuaykKIHsKICAgICByZXR1cm4gYmFuayA9PSBHUCA/IHBvaW50ZXJXaWR0aCgpIDogV2lkdGg2
NDsKQEAgLTkzLDYgKzEwNSwyMCBAQCBpbmxpbmUgV2lkdGggd2lkdGhGb3JCeXRlcyh1bnNpZ25l
ZCBieXRlCiAgICAgfQogfQogCitpbmxpbmUgdWludDY0X3QgbWFzayhXaWR0aCB3aWR0aCkKK3sK
KyAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgY2FzZSBXaWR0aDg6CisgICAgICAgIHJldHVybiAw
eDAwMDAwMDAwMDAwMDAwZmZsbHU7CisgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICByZXR1cm4g
MHgwMDAwMDAwMDAwMDBmZmZmbGx1OworICAgIGNhc2UgV2lkdGgzMjoKKyAgICAgICAgcmV0dXJu
IDB4MDAwMDAwMDBmZmZmZmZmZmxsdTsKKyAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgIHJldHVy
biAweGZmZmZmZmZmZmZmZmZmZmZsbHU7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NSw2ICsyODUsOSBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAgICAgY2FzZSBBcmc6OkVhcmx5
RGVmOgogICAgICAgICBvdXQucHJpbnQoIkVhcmx5RGVmIik7CiAgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFyZzo6RWFybHlaRGVmOgorICAgICAgICBvdXQucHJpbnQoIkVhcmx5WkRlZiIpOwor
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OlNjcmF0Y2g6CiAgICAgICAgIG91dC5wcmlu
dCgiU2NyYXRjaCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsOCBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIGFzIFVzZSBoYXMgdW5kZWZpbmVkIGJlaGF2aW9yOiB0aGUgdXNlIG1h
eSBoYXBwZW4gYmVmb3JlIHRoZSBkZWYsIG9yIGl0IG1heSBoYXBwZW4gYWZ0ZXIKICAgICAgICAg
Ly8gaXQuCiAgICAgICAgIEVhcmx5RGVmLAorICAgICAgICAgICAgCisgICAgICAgIEVhcmx5WkRl
ZiwKIAogICAgICAgICAvLyBTb21lIGluc3RydWN0aW9ucyBuZWVkIGEgc2NyYXRjaCByZWdpc3Rl
ci4gV2UgbW9kZWwgdGhpcyBieSBzYXlpbmcgdGhhdCB0aGUgdGVtcG9yYXJ5IGlzCiAgICAgICAg
IC8vIGRlZmluZWQgZWFybHkgYW5kIHVzZWQgbGF0ZS4gVGhpcyByb2xlIGltcGxpZXMgdGhhdC4K
QEAgLTE4Niw2ICsxODgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAg
Y2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5
WkRlZjoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIwNiw2ICsyMDksNyBAQCBwdWJsaWM6CiAgICAgICAgIGNh
c2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICBjYXNlIEVhcmx5RGVm
OgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIyOCw2ICsyMzIsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBTY3JhdGNoOgog
ICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAg
ICAgIHJldHVybiByb2xlOwogICAgICAgICBjYXNlIFVzZToKICAgICAgICAgICAgIHJldHVybiBD
b2xkVXNlOwpAQCAtMjUzLDYgKzI1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBMYXRlQ29s
ZFVzZToKICAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAg
ICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI3NCw2ICsyODAsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBj
YXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI5
NCw2ICszMDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBV
c2VaRGVmOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoK
ICAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KQEAgLTMxNSw2ICszMjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAg
ICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzMwLDYgKzMzOSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIExhdGVVc2U6CiAgICAgICAgIGNhc2UgRWFy
bHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAg
ICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0z
NTgsNiArMzY4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBjYXNlIFpEZWY6CiAgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBFYXJseVpE
ZWY6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFz
aWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
MTkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogCiBjb25zdCBj
aGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpkdW1wUHJlZml4ID0gIiMiOwogCit2b2lkIEJhc2ljQmxv
Y2s6OnNldFN1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgbV9zdWNjZXNzb3Jz
LnJlc2l6ZSgxKTsKKyAgICBtX3N1Y2Nlc3NvcnNbMF0gPSB0YXJnZXQ7Cit9CisKK3ZvaWQgQmFz
aWNCbG9jazo6c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sgdGFrZW4sIEZyZXF1ZW50ZWRC
bG9jayBub3RUYWtlbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMucmVzaXplKDIpOworICAgIG1fc3Vj
Y2Vzc29yc1swXSA9IHRha2VuOworICAgIG1fc3VjY2Vzc29yc1sxXSA9IG5vdFRha2VuOworfQor
CiBib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQogewog
ICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDIxMjk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OSw2ICs5OSw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdWNjZXNzb3JM
aXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CiAgICAgU3Vj
Y2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQogCisgICAg
dm9pZCBzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayk7CisgICAgdm9pZCBzZXRTdWNjZXNz
b3JzKEZyZXF1ZW50ZWRCbG9jaywgRnJlcXVlbnRlZEJsb2NrKTsKKwogICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3Io
aW5kZXgpLmJsb2NrKCk7IH0KICAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWdu
ZWQgaW5kZXgpIHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsgfQogICAgIFN1Y2Nl
c3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tz
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25T
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxv
Y2tJbnNlcnRpb25TZXQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0LmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvQnViYmxlU29ydC5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK0Jsb2NrSW5zZXJ0aW9uU2V0
OjpCbG9ja0luc2VydGlvblNldChDb2RlICZjb2RlKQorICAgIDogR2VuZXJpY0Jsb2NrSW5zZXJ0
aW9uU2V0KGNvZGUubV9ibG9ja3MpCit7Cit9CisKK0Jsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJ
bnNlcnRpb25TZXQoKQoreworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzR2VuZXJpY0Jsb2NrSXNuZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyQ29k
ZS5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xh
c3MgSW5zZXJ0aW9uU2V0OworCit0eXBlZGVmIEdlbmVyaWNCbG9ja0luc2VydGlvblNldDxCYXNp
Y0Jsb2NrPjo6QmxvY2tJbnNlcnRpb24gQmxvY2tJbnNlcnRpb247CisKK2NsYXNzIEJsb2NrSW5z
ZXJ0aW9uU2V0IDogcHVibGljIEdlbmVyaWNCbG9ja0luc2VydGlvblNldDxCYXNpY0Jsb2NrPiB7
CitwdWJsaWM6CisgICAgQmxvY2tJbnNlcnRpb25TZXQoQ29kZSYpOworICAgIH5CbG9ja0luc2Vy
dGlvblNldCgpOworICAgIAorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXZlbnR1YWxseSBpbXBs
ZW1lbnQgQjM6OkJsb2NrSW5zZXJ0aW9uU2V0J3Mgc3BsaXRGb3J3YXJkKCkuCit9OworCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw4IEBAIHZvaWQgcHJlcGFyZUZvckdl
bmVyYXRpb24oQ29kZSYgY29kZSkKICAgICAgICAgZGF0YUxvZygiSW5pdGlhbCBhaXI6XG4iKTsK
ICAgICAgICAgZGF0YUxvZyhjb2RlKTsKICAgICB9CisgICAgCisgICAgc2ltcGxpZnlDRkcoY29k
ZSk7CiAKICAgICBsb3dlck1hY3Jvcyhjb2RlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjY4LDI4ICs2NjgsMzc5IEBAIExvYWQ4IFU6Rzo4LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAg
ICAgSW5kZXgsIFRtcAogCitMb2FkQWNxOCBVOkc6OCwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAor
ICAgIEluZGV4LCBUbXAKKwogU3RvcmU4IFU6Rzo4LCBEOkc6OAogICAgIFRtcCwgSW5kZXgKICAg
ICBUbXAsIEFkZHIKICAgICB4ODY6IEltbSwgSW5kZXgKICAgICB4ODY6IEltbSwgQWRkcgogCitT
dG9yZVJlbDggVTpHOjgsIEQ6Rzo4CisgICAgVG1wLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAg
IHg4NjogSW1tLCBJbmRleAorICAgIHg4NjogSW1tLCBBZGRyCisKIExvYWQ4U2lnbmVkRXh0ZW5k
VG8zMiBVOkc6OCwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9h
ZEFjcThTaWduZWRFeHRlbmRUbzMyIFU6Rzo4LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAg
SW5kZXgsIFRtcAorCiBMb2FkMTYgVTpHOjE2LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAg
SW5kZXgsIFRtcAogCitMb2FkQWNxMTYgVTpHOjE2LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisg
ICAgSW5kZXgsIFRtcAorCiBMb2FkMTZTaWduZWRFeHRlbmRUbzMyIFU6RzoxNiwgWkQ6RzozMgog
ICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9hZEFjcTE2U2lnbmVkRXh0ZW5kVG8z
MiBVOkc6MTYsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIFN0b3Jl
MTYgVTpHOjE2LCBEOkc6MTYKICAgICBUbXAsIEluZGV4CiAgICAgVG1wLCBBZGRyCiAKK1N0b3Jl
QWNxMTYgVTpHOjE2LCBEOkc6MTYKKyAgICBUbXAsIEluZGV4CisgICAgVG1wLCBBZGRyCisKK0xv
YWRBY3EzMiBVOkc6MzIgWkQ6RzozMgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisgICAg
SW5kZXgsIFRtcAorCitTdG9yZVJlbDMyIFU6RzozMiBaRDpHOjMyCisgICAgVG1wLCBBZGRyCisg
ICAgVG1wLCBJbmRleAorICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisK
KzY0OiBMb2FkQWNxNjQgVTpHOjY0IFpEOkc6NjQKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRt
cAorICAgIEluZGV4LCBUbXAKKworNjQ6IFN0b3JlUmVsNjQgVTpHOjY0IFpEOkc6NjQKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IElt
bSwgSW5kZXgKKworIyBUaGUgZmlyc3Qgb3BlcmFuZCBpcyByYXguCit4ODY6IExvY2tDbXBYY2hn
OCBVRDpHOjgsIFU6Rzo4LCBVRDpHOjgsIFpEOkc6OAorICAgIFRtcCosIFRtcCwgQWRkciwgVG1w
CisgICAgVG1wKiwgVG1wLCBJbmRleCwgVG1wCisKK3g4NjogTG9ja0NtcFhjaGcxNiBVRDpHOjE2
LCBVOkc6MzIsIFVEOkc6MTYsIFpEOkc6OAorICAgIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAg
VG1wKiwgVG1wLCBJbmRleCwgVG1wCisKK3g4NjogTG9ja0NtcFhjaGczMiBVRDpHOjMyLCBVOkc6
MzIsIFVEOkc6MzIsIFpEOkc6OAorICAgIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAgVG1wKiwg
VG1wLCBJbmRleCwgVG1wCisKK3g4Nl82NDogTG9ja0NtcFhjaGc2NCBVRDpHOjY0LCBVOkc6NjQs
IFVEOkc6NjQsIFpEOkc6OAorICAgIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAgVG1wKiwgVG1w
LCBJbmRleCwgVG1wCisKK3g4NjogTG9ja0NtcFhjaGc4IFVEOkc6OCwgVTpHOjgsIFVEOkc6OAor
ICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrQ21w
WGNoZzE2IFVEOkc6MTYsIFU6RzozMiwgVUQ6RzoxNgorICAgIFRtcCosIFRtcCwgQWRkcgorICAg
IFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrQ21wWGNoZzMyIFVEOkc6MzIsIFU6RzozMiwg
VUQ6RzozMgorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgKKworeDg2
XzY0OiBMb2NrQ21wWGNoZzY0IFVEOkc6NjQsIFU6Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCosIFRt
cCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBCcmFuY2hMb2NrQ21wWGNoZzgg
VUQ6Rzo4LCBVOkc6OCwgVUQ6Rzo4IC9icmFuY2gKKyAgICBUbXAqLCBUbXAsIEFkZHIKKyAgICBU
bXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNoTG9ja0NtcFhjaGcxNiBVRDpHOjE2LCBVOkc6
MzIsIFVEOkc6MTYgL2JyYW5jaAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwg
SW5kZXgKKworeDg2OiBCcmFuY2hMb2NrQ21wWGNoZzMyIFVEOkc6MzIsIFU6RzozMiwgVUQ6Rzoz
MiAvYnJhbmNoCisgICAgVG1wKiwgVG1wLCBBZGRyCisgICAgVG1wKiwgVG1wLCBJbmRleAorCit4
ODZfNjQ6IEJyYW5jaExvY2tDbXBYY2hnNjQgVUQ6Rzo2NCwgVTpHOjY0LCBVRDpHOjY0IC9icmFu
Y2gKKyAgICBUbXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogTG9j
a0FkZDggVTpHOjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja0FkZDE2IFU6RzoxNiwgVUQ6Rzox
NgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAs
IEluZGV4CisKK3g4NjogTG9ja0FkZDMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgor
ICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDog
TG9ja0FkZDY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgK
KyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1N1YjggVTpHOjgsIFVE
Okc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBU
bXAsIEluZGV4CisKK3g4NjogTG9ja1N1YjE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRk
cgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Njog
TG9ja1N1YjMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgK
KyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9ja1N1YjY0IFU6Rzo2
NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIK
KyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja0FuZDggVTpHOjgsIFVEOkc6OAorICAgIEltbSwg
QWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4
NjogTG9ja0FuZDE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5k
ZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja0FuZDMyIFU6Rzoz
MiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIK
KyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9ja0FuZDY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAg
IEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4
CisKK3g4NjogTG9ja09yOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJ
bmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrT3IxNiBVOkc6
MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRy
CisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tPcjMyIFU6RzozMiwgVUQ6RzozMgorICAgIElt
bSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisK
K3g4Nl82NDogTG9ja09yNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisgICAgSW1t
LCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrWG9yOCBV
Okc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRk
cgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrWG9yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAg
SW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgK
KworeDg2OiBMb2NrWG9yMzIgVTpHOjMyLCBVRDpHOjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1t
LCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBMb2NrWG9y
NjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRt
cCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrTmVnOCBVRDpHOjgKKyAgICBBZGRy
CisgICAgSW5kZXgKKworeDg2OiBMb2NrTmVnMTYgVUQ6RzoxNgorICAgIEFkZHIKKyAgICBJbmRl
eAorCit4ODY6IExvY2tOZWczMiBVRDpHOjMyCisgICAgQWRkcgorICAgIEluZGV4CisKK3g4Nl82
NDogTG9ja05lZzY0IFVEOkc6NjQKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBMb2NrTm90
OCBVRDpHOjgKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBMb2NrTm90MTYgVUQ6RzoxNgor
ICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IExvY2tOb3QzMiBVRDpHOjMyCisgICAgQWRkcgor
ICAgIEluZGV4CisKK3g4Nl82NDogTG9ja05vdDY0IFVEOkc6NjQKKyAgICBBZGRyCisgICAgSW5k
ZXgKKworeDg2OiBMb2NrWEFkZDggVUQ6Rzo4LCBVRDpHOjgKKyAgICBUbXAsIEFkZHIKKyAgICBU
bXAsIEluZGV4CisKK3g4NjogTG9ja1hBZGQxNiBVRDpHOjE2LCBVRDpHOjE2CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tYQWRkMzIgVUQ6RzozMiwgVUQ6RzozMgor
ICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBMb2NrWEFkZDY0IFVEOkc6
NjQsIFVEOkc6NjQKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hj
aGc4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6
IExvY2tYY2hnMTYgVUQ6RzoxNiwgVUQ6RzoxNgorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5k
ZXgKKworeDg2OiBMb2NrWGNoZzMyIFVEOkc6MzIsIFVEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9ja1hjaGc2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCithcm02NDogTG9hZExpbms4IFU6Rzo4LCBaRDpH
OjgKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTgg
VTpHOjgsIFpEOkc6OAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0
b3JlQ29uZDggVTpHOjgsIEQ6Rzo4LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBU
bXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDggVTpHOjgsIEQ6Rzo4LCBFWkQ6
Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IExv
YWRMaW5rMTYgVTpHOjE2LCBaRDpHOjE2CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAor
Cithcm02NDogTG9hZExpbmtBY3ExNiBVOkc6MTYsIFpEOkc6MTYKKyAgICBBZGRyLCBUbXAKKyAg
ICBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQxNiBVOkc6MTYsIEQ6RzoxNiwgRVpEOkc6
OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9y
ZUNvbmRSZWwxNiBVOkc6MTYsIEQ6RzoxNiwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisg
ICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGluazMyIFU6RzozMiwgWkQ6RzozMgor
ICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rQWNxMzIgVTpH
OjMyLCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogU3Rv
cmVDb25kMzIgVTpHOjMyLCBEOkc6MzIsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAg
IFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kUmVsMzIgVTpHOjMyLCBEOkc6MzIs
IEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02
NDogTG9hZExpbms2NCBVOkc6NjQsIFpEOkc6NjQKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwg
VG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTY0IFU6Rzo2NCwgWkQ6Rzo2NAorICAgIEFkZHIsIFRt
cAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZDY0IFU6Rzo2NCwgRDpHOjY0LCBF
WkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6
IFN0b3JlQ29uZFJlbDY0IFU6Rzo2NCwgRDpHOjY0LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBU
bXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IERlcGVuZDMyIFU6RzozMiwgRDpHOjMy
CisgICAgVG1wLCBUbXAKKworYXJtNjQ6IERlcGVuZDY0IFU6Rzo2NCwgRDpHOjY0CisgICAgVG1w
LCBUbXAKKwogQ29tcGFyZTMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKICAgICBS
ZWxDb25kLCBUbXAsIFRtcCwgVG1wCiAgICAgUmVsQ29uZCwgVG1wLCBJbW0sIFRtcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNl
LmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJQYWRJbnRlcmZlcmVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHZv
aWQgcGFkSW50ZXJmZXJlbmNlKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgWyZdIChBcmcm
LCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChyb2xlKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5WkRlZjoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGhhc0Vhcmx5RGVmID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZVVzZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxF
dmVyeXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSw3IEBAIHZvaWQgc3Bp
bGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpM
YXRlQ29sZFVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNjcmF0Y2g6CiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBcmc6OkVhcmx5WkRlZjoKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJl
ZyA6IGNvZGUucmVnc0luUHJpb3JpdHlPcmRlcihiYW5rKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpICYmICFzZXRBZnRlci5nZXQocmVnKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3Iu
cmIJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bj
b2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBjb3B5KQpAQCAtMTgyLDcgKzE4Miw3IEBAIGRlZiBs
ZXgoc3RyLCBmaWxlTmFtZSkKIGVuZAogCiBkZWYgaXNSb2xlKHRva2VuKQotICAgIHRva2VuID1+
IC9cQSgoVSl8KEQpfChVRCl8KFpEKXwoVVpEKXwoVUEpfChTKSlcWi8KKyAgICB0b2tlbiA9fiAv
XEEoKFUpfChEKXwoVUQpfChaRCl8KFVaRCl8KFVBKXwoUyl8KEVEKXwoRVpEKXwoTFUpKVxaLwog
ZW5kCiAKIGRlZiBpc0dGKHRva2VuKQpAQCAtNjUxLDYgKzY1MSwxMiBAQCB3cml0ZUgoIk9wY29k
ZVV0aWxzIikgewogICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZUFkZHIiCiAgICAgICAg
ICAgICAgICAgd2hlbiAiUyIKICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJTY3JhdGNoIgor
ICAgICAgICAgICAgICAgIHdoZW4gIkVEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIkVh
cmx5RGVmIgorICAgICAgICAgICAgICAgIHdoZW4gIkVaRCIKKyAgICAgICAgICAgICAgICAgICAg
cm9sZSA9ICJFYXJseVpEZWYiCisgICAgICAgICAgICAgICAgd2hlbiAiTFUiCisgICAgICAgICAg
ICAgICAgICAgIHJvbGUgPSAiTGF0ZVVzZSIKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgZW5kCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302845</attachid>
            <date>2017-02-27 09:53:46 -0800</date>
            <delta_ts>2017-02-27 16:49:45 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>121256</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMiBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkwRjJDNjNCRTFFNjQ5REM0MDBDMTM4
MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCRDFFNjQ5REMyMDBDMTM4MzkgLyogQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAv
KiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkQ0RERCMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCAq
LzsgfTsKIAkJMEYyRDREREUxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERDMTk4MzJE
MzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRDRERTgxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhp
c1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJENERFNTE5ODMyREFDMDA3RDRCMTkgLyogVG9UaGlzU3RhdHVzLmNwcCAqLzsgfTsKQEAg
LTI3NjQsNiArMjc3MCwxMiBAQAogCQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5r
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmFuay5oOyBwYXRoID0gYjMv
QjNCYW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM2M0FEMUU2MEFFM0Mw
MEMxMzgzOSAvKiBCM1dpZHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzV2lkdGguY3BwOyBwYXRoID0gYjMvQjNXaWR0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzV2lkdGguaDsgcGF0aCA9IGIzL0IzV2lkdGgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjMxRTYzNDNFODAwQzEzODM5
IC8qIEIzQXRvbWljVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNBdG9taWNWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0F0b21pY1ZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjQxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNBdG9taWNWYWx1
ZS5oOyBwYXRoID0gYjMvQjNBdG9taWNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJDNjNCNTFFNjM0M0U4MDBDMTM4MzkgLyogQjNHZW5lcmljQmxvY2tJbnNlcnRpb25T
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmljQmxvY2tJbnNl
cnRpb25TZXQuaDsgcGF0aCA9IGIzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJC
bG9ja0luc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJCbG9ja0luc2VydGlvblNldC5jcHA7IHBhdGggPSBiMy9haXIvQWlyQmxvY2tJbnNlcnRp
b25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCQTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJCbG9j
a0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCRDFF
NjQ5REMyMDBDMTM4MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREIxOTgzMkQzNDAwN0Q0QjE5IC8qIERl
YnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVi
dWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkQ0RERDMTk4
MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNTI5Miw2ICs1MzA0LDggQEAKIAkJCQkwRkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyog
YWlyICovLAogCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFs
dWUuY3BwICovLAogCQkJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVn
VmFsdWUuaCAqLywKKwkJCQkwRjJDNjNCMzFFNjM0M0U4MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1
ZS5jcHAgKi8sCisJCQkJMEYyQzYzQjQxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUu
aCAqLywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJ
CQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi8sCiAJCQkJMEZFQzg0QjYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCkBAIC01MzU0LDYgKzUzNjgs
NyBAQAogCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5o
ICovLAogCQkJCTBGRUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywK
IAkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovLAorCQkJCTBG
MkM2M0I1MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oICov
LAogCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxv
Y2suaCAqLywKIAkJCQkwRkVDODVCRjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3Bw
ICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5oICovLApA
QCAtNTQ2OSw2ICs1NDg0LDggQEAKIAkJCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWly
QXJnSW5saW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNp
Y0Jsb2NrLmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNC
bG9jay5oICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2Vy
dGlvblNldC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJs
b2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC03MzI2LDYgKzczNDMsNyBAQAogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRjFGRTUxQjE5MjJBM0JDMDA2OTg3
QzUgLyogQWJvcnRSZWFzb24uaCAqLywKKwkJCQkwRjJDNjNCRDFFNjQ5REMyMDBDMTM4MzkgLyog
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8sCiAJCQkJODYwMTYxREYwRjNBODNDMTAwRjg0
NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCAqLywKIAkJCQkwRjM3MzA5MDFDMENENzBD
MDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggKi8sCiAJCQkJODY0
MDkyM0IxNTZFRUQzQjAwNTY2Q0IyIC8qIEFSTTY0QXNzZW1ibGVyLmggKi8sCkBAIC03MzU0LDgg
KzczNzIsOCBAQAogCQkJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxl
ck1JUFMuaCAqLywKIAkJCQlGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJs
ZXJQcmludGVyLmNwcCAqLywKIAkJCQlGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9B
c3NlbWJsZXJQcmludGVyLmggKi8sCi0JCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2XzY0LmggKi8sCisJCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJQTdBNEFFMDcxNzk3M0IyNjAwNTYxMkIxIC8q
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLywKIAkJCQk4NjAxNjFFMjBGM0E4M0MxMDBG
ODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3NzE4NUE4
RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywKQEAgLTc5
NTYsNiArNzk3NCw3IEBACiAJCQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3RDcxRDlEQzQ0MjAwMUI5ODI1IC8q
IEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2M0JDMUU2MzQ0MEMwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY4NEQ0MzgxQzAw
MTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUzNEMx
QTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQ3LDYgKzgwNjYsNyBAQAogCQkJCTQzNDIyQTYzMUMx
NThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUwRTFCRjAyNzZD
MDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzM0ZDRkMx
QzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2
QjhBRDkxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRlVGFpbHMuaCBpbiBIZWFkZXJzICov
LApAQCAtODM2Niw2ICs4Mzg2LDcgQEAKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyog
REZHT1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2
N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJDNjNCNzFFNjM0M0VEMDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjM3OTgxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50
b21JbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVGOTBBRjAw
QzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFQjE5RDBCQTdE
MDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBpbiBIZWFkZXJzICovLApAQCAtOTc5Miw2ICs5
ODEzLDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
IAkJCQkwRkZBNTQ5NzE2Qjg4MzUwMDBCM0E5ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjJDNjNCRTFFNjQ5REM0MDBDMTM4MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDQ5MzdDMzFEREJFNjE0MDA3N0M4MDcgLyog
QWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NUYwRjQxNEQx
MDYzOTAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM3MEI0
RjUxQkYyNjIwMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDI0OCw2ICsxMDI3MCw3IEBACiAJCQkJ
OUU3Mjk0MDcxOTBGMDFBNTAwMUE5MUI1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTUxM0U1QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmpl
Y3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQzYzQjYxRTYzNDNFQTAw
QzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTEx
ODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3Rl
ZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjY2LDYgKzEwMjg5LDcgQEAK
IAkJCQlFMzVFMDM1RjFCN0FCNDNFMDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0MzhCMTg1NjgzMzUwMDJFRDY5MiAv
KiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRC
NjExODgwOURENTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjJDNjNCQjFFNjM0NDBBMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25T
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1MTY1RDIxQkRGMEI5ODAwM0I3NUMxIC8qIElu
c3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NG
ODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIKKworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyOjpTdGF0dXNDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIHN3aXRj
aCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNz
OgorICAgICAgICBvdXQucHJpbnQoIlN1Y2Nlc3MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6RmFpbHVyZToKKyAgICAgICAgb3V0LnByaW50KCJG
YWlsdXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMiwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODksNiArODksMjMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gVGltZXNFaWdodDsKICAgICB9CiAgICAgCisgICAgZW51bSBTdGF0dXNDb25k
aXRpb24geworICAgICAgICBTdWNjZXNzLAorICAgICAgICBGYWlsdXJlCisgICAgfTsKKyAgICAK
KyAgICBzdGF0aWMgU3RhdHVzQ29uZGl0aW9uIGludmVydChTdGF0dXNDb25kaXRpb24gY29uZGl0
aW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICAgICAgY2FzZSBT
dWNjZXNzOgorICAgICAgICAgICAgcmV0dXJuIEZhaWx1cmU7CisgICAgICAgIGNhc2UgRmFpbHVy
ZToKKyAgICAgICAgICAgIHJldHVybiBTdWNjZXNzOworICAgICAgICB9CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBTdWNjZXNzOworICAgIH0K
KyAgICAKICAgICBzdHJ1Y3QgQmFzZUluZGV4OwogICAgIAogICAgIC8vIEFkZHJlc3M6CkBAIC0x
MTA4LDMgKzExMjUsMTYgQEAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlLCBN
YQogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQworCisj
aWYgRU5BQkxFKEFTU0VNQkxFUikKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3Ry
ZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkFic3RyYWN0TWFj
cm9Bc3NlbWJsZXI6OlN0YXR1c0NvbmRpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQXRvbWljVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQXRvbWljVmFsdWU6On5B
dG9taWNWYWx1ZSgpCit7Cit9CisKK1dpZHRoIEF0b21pY1ZhbHVlOjphY2Nlc3NXaWR0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fd2lkdGg7Cit9CisKK3ZvaWQgQXRvbWljVmFsdWU6OmR1bXBN
ZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KGNvbW1hLCAid2lkdGggPSAiLCBtX3dpZHRoKTsKKyAgICAKKyAgICBNZW1vcnlW
YWx1ZTo6ZHVtcE1ldGEoY29tbWEsIG91dCk7Cit9CisKK1ZhbHVlKiBBdG9taWNWYWx1ZTo6Y2xv
bmVJbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IEF0b21pY1ZhbHVlKCp0aGlzKTsKK30K
KworQXRvbWljVmFsdWU6OkF0b21pY1ZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgV2lk
dGggd2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQg
PSAwKQorICAgIDogTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgb3BlcmFuZC0+dHlw
ZSgpLCBvcmlnaW4sIG9mZnNldCwgb3BlcmFuZCwgcG9pbnRlcikKKyAgICAsIG1fd2lkdGgod2lk
dGgpCit7CisgICAgc2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBB
U1NFUlQoYmVzdFR5cGUob3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKyAg
ICAKKyAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6
CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNh
c2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9t
aWNYY2hnOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK0F0b21pY1ZhbHVlOjpBdG9taWNWYWx1ZShLaW5kIGtp
bmQsIE9yaWdpbiBvcmlnaW4sIFdpZHRoIHdpZHRoLCBWYWx1ZSogZXhwZWN0ZWRWYWx1ZSwgVmFs
dWUqIG5ld1ZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDog
TWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwga2luZC5vcGNvZGUoKSA9PSBBdG9taWNX
ZWFrQ0FTID8gSW50MzIgOiBleHBlY3RlZFZhbHVlLT50eXBlKCksIG9yaWdpbiwgb2Zmc2V0LCBl
eHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSwgcG9pbnRlcikKKyAgICAsIG1fd2lkdGgod2lkdGgpCit7
CisgICAgc2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBBU1NFUlQo
YmVzdFR5cGUob3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKworICAgIHN3
aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNl
IEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQXRvbWljVmFsdWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisj
aW5jbHVkZSAiQjNXaWR0aC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQXRvbWljVmFsdWUgOiBwdWJsaWMgTWVtb3J5VmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzQXRvbWljKGtpbmQub3Bjb2RlKCkpOworICAgIH0KKyAgICAKKyAgICB+
QXRvbWljVmFsdWUoKTsKKyAgICAKKyAgICBUeXBlIG9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJl
dHVybiBjaGlsZCgwKS0+dHlwZSgpOyB9CisgICAgCisgICAgV2lkdGggb3BlcmF0aW9uV2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgCisgICAgLy8gU3lub255bSBmb3Igd2lk
dGgoKSwgaWYgeW91J3JlIGFjY2Vzc2luZyB2aWEgTWVtb3J5VmFsdWUuCisgICAgV2lkdGggYWNj
ZXNzV2lkdGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1
bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
CisgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIEF0b21pY1ZhbHVlKEtpbmQs
IE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBv
ZmZzZXQgPSAwKTsKKyAgICAKKyAgICBBdG9taWNWYWx1ZShLaW5kLCBPcmlnaW4sIFdpZHRoLCBW
YWx1ZSogZXhwZWN0ZWRWYWx1ZSwgVmFsdWUqIG5ld1ZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50
MzJfdCBvZmZzZXQgPSAwKTsKKyAgICAKKyAgICBXaWR0aCBtX3dpZHRoOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2Vy
dGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMzUgKzM2LDEzIEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKIAogQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0
KFByb2NlZHVyZSAmcHJvYykKLSAgICA6IG1fcHJvYyhwcm9jKQorICAgIDogR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0KHByb2MubV9ibG9ja3MpCisgICAgLCBtX3Byb2MocHJvYykKIHsKIH0KIAog
QmxvY2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsgfQogCi12b2lkIEJsb2Nr
SW5zZXJ0aW9uU2V0OjppbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCi17Ci0gICAg
bV9pbnNlcnRpb25zLmFwcGVuZChXVEZNb3ZlKGluc2VydGlvbikpOwotfQotCi1CYXNpY0Jsb2Nr
KiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVl
bmN5KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNC
bG9jayhVSU5UX01BWCwgZnJlcXVlbmN5KSk7Ci0gICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxv
Y2suZ2V0KCk7Ci0gICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2Nr
KSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9u
U2V0OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5KQot
ewotICAgIHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVl
bmN5ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVuY3koKSk7Ci19Ci0KLUJhc2ljQmxvY2sq
IEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91Ymxl
IGZyZXF1ZW5jeSkKLXsKLSAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJl
cXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7Ci19
Ci0KIEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjpzcGxpdEZvcndhcmQoCiAgICAgQmFz
aWNCbG9jayogYmxvY2ssIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqIGluc2Vy
dGlvblNldCwgZG91YmxlIGZyZXF1ZW5jeSkKIHsKQEAgLTEwMiwzMiArODAsNiBAQCBCYXNpY0Js
b2NrKiBCbG9ja0luc2VydGlvblNldDo6c3BsaXRGb3J3CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgpCi17Ci0gICAgaWYgKG1faW5zZXJ0
aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBXZSBh
bGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5l
ZWQgdG8gc29ydCB0aGVtIGJlZm9yZQotICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0
aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8g
YmUKLSAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCi0gICAgYnViYmxlU29ydCht
X2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKLQotICAgIGV4ZWN1dGVJ
bnNlcnRpb25zKG1fcHJvYy5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKLSAgICAKLSAgICAvLyBQ
cnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0
IGl0J3MKLSAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5n
LgotICAgIG1fcHJvYy5tX2Jsb2Nrcy5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgWyZdIChz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4mIGJsb2NrUHRyKSAtPiBib29sIHsKLSAgICAgICAg
ICAgIHJldHVybiAhYmxvY2tQdHI7Ci0gICAgICAgIH0pOwotICAgIAotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9wcm9jLm1fYmxvY2tzLnNpemUoKTsgKytpKQotICAgICAgICBtX3By
b2MubV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQot
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5z
ZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCIKICNp
bmNsdWRlICJCM1Byb2NlZHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zNSwyNiArMzYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEluc2VydGlvblNldDsKIAotdHlwZWRlZiBXVEY6Okluc2Vy
dGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOwordHlwZWRl
ZiBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz46OkJsb2NrSW5zZXJ0aW9uIEJs
b2NrSW5zZXJ0aW9uOwogCi1jbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitjbGFzcyBCbG9ja0lu
c2VydGlvblNldCA6IHB1YmxpYyBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz4g
ewogcHVibGljOgogICAgIEJsb2NrSW5zZXJ0aW9uU2V0KFByb2NlZHVyZSYpOwogICAgIH5CbG9j
a0luc2VydGlvblNldCgpOwogICAgIAotICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYp
OwotCi0gICAgLy8gSW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCi0gICAgQmFz
aWNCbG9jayogaW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7
Ci0KLSAgICAvLyBJbnNlcnRzIGEgbmV3IGJsb2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVz
dWFsbHkgeW91IHdpbGwgbm90IHBhc3MgdGhlIGZyZXF1ZW5jeQotICAgIC8vIGFyZ3VtZW50LiBQ
YXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRvIGp1c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdi
ZWZvcmUnIGJsb2NrLiBUaGF0J3MKLSAgICAvLyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCi0gICAg
QmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1
ZW5jeSA9IFBOYU4pOwotCi0gICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2
ZW4gYmxvY2suCi0gICAgQmFzaWNCbG9jayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIs
IGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLQogICAgIC8vIEEgaGVscGVyIHRvIHNwbGl0IGEg
YmxvY2sgd2hlbiBmb3J3YXJkIGl0ZXJhdGluZyBvdmVyIGl0LiBJdCBjcmVhdGVzIGEgbmV3IGJs
b2NrIHRvIGhvbGQKICAgICAvLyBldmVyeXRoaW5nIGJlZm9yZSB0aGUgaW5zdHJ1Y3Rpb24gYXQg
dmFsdWVJbmRleC4gVGhlIGN1cnJlbnQgYmxvY2sgaXMgbGVmdCB3aXRoCiAgICAgLy8gZXZlcnl0
aGluZyBhdCBhbmQgYWZ0ZXIgdmFsdWVJbmRleC4gSWYgdGhlIG9wdGlvbmFsIEluc2VydGlvblNl
dCBpcyBwcm92aWRlZCwgaXQgd2lsbCBnZXQKQEAgLTgwLDEyICs2OCw5IEBAIHB1YmxpYzoKICAg
ICBCYXNpY0Jsb2NrKiBzcGxpdEZvcndhcmQoCiAgICAgICAgIEJhc2ljQmxvY2sqLCB1bnNpZ25l
ZCYgdmFsdWVJbmRleCwgSW5zZXJ0aW9uU2V0KiA9IG51bGxwdHIsCiAgICAgICAgIGRvdWJsZSBm
cmVxdWVuY3kgPSBQTmFOKTsKLSAgICAKLSAgICBib29sIGV4ZWN1dGUoKTsKIAogcHJpdmF0ZToK
ICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKLSAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1f
aW5zZXJ0aW9uczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3
ICs4Miw4IEBAIGJvb2wgRWZmZWN0czo6aW50ZXJmZXJlcyhjb25zdCBFZmZlY3RzJiAKICAgICAg
ICAgfHwgaW50ZXJmZXJlc1dpdGhXcml0ZXNQaW5uZWQob3RoZXIsICp0aGlzKQogICAgICAgICB8
fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIud3JpdGVzKQogICAgICAgICB8fCB3cml0ZXMub3Zlcmxh
cHMob3RoZXIucmVhZHMpCi0gICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcyk7
CisgICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKKyAgICAgICAgfHwgKGZl
bmNlICYmIG90aGVyLmZlbmNlKTsKIH0KIAogYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0
IEVmZmVjdHMmIG90aGVyKSBjb25zdApAQCAtOTUsNyArOTYsOCBAQCBib29sIEVmZmVjdHM6Om9w
ZXJhdG9yPT0oY29uc3QgRWZmZWN0cyYgCiAgICAgICAgICYmIHdyaXRlc1Bpbm5lZCA9PSBvdGhl
ci53cml0ZXNQaW5uZWQKICAgICAgICAgJiYgcmVhZHNQaW5uZWQgPT0gb3RoZXIucmVhZHNQaW5u
ZWQKICAgICAgICAgJiYgd3JpdGVzID09IG90aGVyLndyaXRlcwotICAgICAgICAmJiByZWFkcyA9
PSBvdGhlci5yZWFkczsKKyAgICAgICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHMKKyAgICAgICAg
JiYgZmVuY2UgPT0gb3RoZXIuZmVuY2U7CiB9CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3IhPShj
b25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAgLTEyMCw2ICsxMjIsOCBAQCB2b2lkIEVmZmVj
dHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
IldyaXRlc1Bpbm5lZCIpOwogICAgIGlmIChyZWFkc1Bpbm5lZCkKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiUmVhZHNQaW5uZWQiKTsKKyAgICBpZiAoZmVuY2UpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIkZlbmNlIik7CiAgICAgaWYgKHdyaXRlcykKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiV3JpdGVzOiIsIHdyaXRlcyk7CiAgICAgaWYgKHJlYWRzKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBA
QCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MzE3MwogICAgIGJvb2wgcmVhZHNQaW5uZWQgeyBmYWxzZSB9OwogICAgIGJv
b2wgd3JpdGVzUGlubmVkIHsgZmFsc2UgfTsKKyAgICAKKyAgICAvLyBNZW1vcnkgZmVuY2VzIGNh
bm5vdCBiZSByZW9yZGVyZWQgYXJvdW5kIGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVpciBl
ZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQKKyAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEgbWVt
b3J5IGZlbmNlLgorICAgIGJvb2wgZmVuY2UgeyBmYWxzZSB9OwogCiAgICAgSGVhcFJhbmdlIHdy
aXRlczsKICAgICBIZWFwUmFuZ2UgcmVhZHM7CkBAIC04OSw2ICs5Myw3IEBAIHN0cnVjdCBFZmZl
Y3RzIHsKICAgICAgICAgcmVzdWx0LnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKICAgICAgICAg
cmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LndyaXRlc1Bpbm5lZCA9
IHRydWU7CisgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCkBAIC0xMDMsNyArMTA4LDcgQEAgc3RydWN0IEVmZmVjdHMgewogCiAgICAg
Ym9vbCBtdXN0RXhlY3V0ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gdGVybWluYWwg
fHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQ
aW5uZWQ7CisgICAgICAgIHJldHVybiB0ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRl
c0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8IHdyaXRlc1Bpbm5lZCB8fCBmZW5jZTsKICAgICB9CiAK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0aGVz
ZSByZXNwZWN0aXZlIGVmZmVjdHMgd291bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NDIsNiArMTQyLDcgQEAgc3RydWN0IEltcHVyZUJsb2NrRGF0YSB7CiAKICAgICBSYW5nZVNldDxI
ZWFwUmFuZ2U+IHJlYWRzOyAvLyBUaGlzIG9ubHkgZ2V0cyB1c2VkIGZvciBmb3J3YXJkIHN0b3Jl
IGVsaW1pbmF0aW9uLgogICAgIFJhbmdlU2V0PEhlYXBSYW5nZT4gd3JpdGVzOyAvLyBUaGlzIGdl
dHMgdXNlZCBmb3IgYm90aCBsb2FkIGFuZCBzdG9yZSBlbGltaW5hdGlvbi4KKyAgICBib29sIGZl
bmNlOwogCiAgICAgTWVtb3J5VmFsdWVNYXAgc3RvcmVzQXRIZWFkOwogICAgIE1lbW9yeVZhbHVl
TWFwIG1lbW9yeVZhbHVlc0F0VGFpbDsKQEAgLTE3NCwxMiArMTc1LDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobWVtb3J5ICYmIG1lbW9yeS0+aXNT
dG9yZSgpCiAgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLnJlYWRzLm92ZXJsYXBzKG1lbW9y
eS0+cmFuZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIWRhdGEud3JpdGVzLm92ZXJsYXBz
KG1lbW9yeS0+cmFuZ2UoKSkpCisgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRlcy5v
dmVybGFwcyhtZW1vcnktPnJhbmdlKCkpCisgICAgICAgICAgICAgICAgICAgICYmICghZGF0YS5m
ZW5jZSB8fCAhbWVtb3J5LT5oYXNGZW5jZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5z
dG9yZXNBdEhlYWQuYWRkKG1lbW9yeSk7CiAgICAgICAgICAgICAgICAgZGF0YS5yZWFkcy5hZGQo
ZWZmZWN0cy5yZWFkcyk7CiAKICAgICAgICAgICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9
IGVmZmVjdHMud3JpdGVzKQogICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGRhdGEsIHdyaXRl
cyk7CisgICAgICAgICAgICAgICAgZGF0YS5mZW5jZSB8PSBlZmZlY3RzLmZlbmNlOwogCiAgICAg
ICAgICAgICAgICAgaWYgKG1lbW9yeSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZW1vcnlW
YWx1ZXNBdFRhaWwuYWRkKG1lbW9yeSk7CkBAIC00NzgsNiArNDgxLDkgQEAgcHJpdmF0ZToKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CiAgICAgYm9vbCBmaW5kU3RvcmVBZnRlckNsb2Ji
ZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKICAg
ICB7CisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBl
bGltaW5hdGUgYSBzdG9yZSBpZiBldmVyeSBmb3J3YXJkIHBhdGggaGl0cyBhIHN0b3JlIHRvIHRo
ZSBzYW1lIGxvY2F0aW9uIGJlZm9yZQogICAgICAgICAvLyBoaXR0aW5nIGFueSBvcGVyYXRpb24g
dGhhdCBvYnNlcnZlcyB0aGUgc3RvcmUuIFRoaXMgc2VhcmNoIHNlZW1zIGxpa2UgaXQgc2hvdWxk
IGJlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSwgYnV0IGluIHRoZSBvdmVyd2hlbG1pbmcgbWFqb3Jp
dHkgb2YgY2FzZXMgaXQgd2lsbCBhbG1vc3QgaW1tZWRpYXRlbHkgaGl0IGFuIApAQCAtNjE0LDYg
KzYyMCwxMiBAQCBwcml2YXRlOgogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRh
dGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcgYmFja3dhcmQgZm9yICIsICpwdHIsICIuLi5cbiIp
OwogICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNG
ZW5jZSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgR2l2aW5nIHVwIGJlY2F1c2UgZmVuY2VzLlxuIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSog
bWF0Y2ggPSBtX2RhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmZpbmQocHRyLCBmaWx0ZXIpKSB7CiAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRm91
bmQgIiwgKm1hdGNoLCAiIGxvY2FsbHkuXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNyBAQCB2
b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MDcKICAgICB9CiAKKyAgICAv
LyBUaGlzIHB1dHMgdGhlIElSIGluIHF1aXJrcyBtb2RlLgogICAgIGxvd2VyTWFjcm9zKHByb2Nl
ZHVyZSk7CiAKICAgICBpZiAob3B0TGV2ZWwgPj0gMSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0
aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEluc2Vy
dGlvblNldDsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2NsYXNzIEdlbmVyaWNC
bG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBXVEY6Okluc2VydGlvbjxz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOworICAgIAorICAgIEJs
b2NrSW5zZXJ0aW9uU2V0KFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9j
a3MpCisgICAgICAgIDogbV9ibG9ja3MoYmxvY2tzKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dm9pZCBpbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCisgICAgeworICAgICAgICBt
X2luc2VydGlvbnMuYXBwZW5kKFdURk1vdmUoaW5zZXJ0aW9uKSk7CisgICAgfQorCisgICAgLy8g
SW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCisgICAgQmFzaWNCbG9jayogaW5z
ZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTikKKyAgICB7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhVSU5U
X01BWCwgZnJlcXVlbmN5KSk7CisgICAgICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdl
dCgpOworICAgICAgICBpbnNlcnQoQmxvY2tJbnNlcnRpb24oaW5kZXgsIFdURk1vdmUoYmxvY2sp
KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gSW5zZXJ0cyBhIG5l
dyBibG9jayBiZWZvcmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNz
IHRoZSBmcmVxdWVuY3kKKyAgICAvLyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0
byBqdXN0IHVzZSB0aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCisg
ICAgLy8gdXN1YWxseSB3aGF0IHlvdSB3YW50LgorICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9y
ZShCYXNpY0Jsb2NrKiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGluc2VydChiZWZvcmUtPmluZGV4KCksIGZyZXF1ZW5jeSA9PSBmcmVxdWVu
Y3kgPyBmcmVxdWVuY3kgOiBiZWZvcmUtPmZyZXF1ZW5jeSgpKTsKKyAgICB9CisKKyAgICAvLyBJ
bnNlcnRzIGEgbmV3IGJsb2NrIGFmdGVyIHRoZSBnaXZlbiBibG9jay4KKyAgICBCYXNpY0Jsb2Nr
KiBpbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4p
CisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJlcXVl
bmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7CisgICAg
fQorCisgICAgYm9vbCBleGVjdXRlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2luc2VydGlvbnMu
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAg
Ly8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNv
LCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBiZWZvcmUKKyAgICAgICAgLy8gcnVubmluZyBXVEY6OmV4
ZWN1dGVJbnNlcnRpb25zLiBXZSBzdHJvbmdseSBwcmVmZXIgYSBzdGFibGUgc29ydCBhbmQgd2Ug
d2FudCBpdCB0byBiZQorICAgICAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCisg
ICAgICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQo
KSk7CisgICAgICAgIAorICAgICAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX2Jsb2NrcywgbV9pbnNl
cnRpb25zKTsKKyAgICAgICAgCisgICAgICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRyaWVzLiBU
aGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgICAgICAvLyBoZWFsdGh5
IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgICAgICBtX2Jsb2Nrcy5y
ZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEJhc2lj
QmxvY2s+JiBibG9ja1B0cikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFibG9j
a1B0cjsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGhlIGJsb2NrcyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2Jsb2Nr
c1tpXS0+bV9pbmRleCA9IGk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4mIG1f
YmxvY2tzOworICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHJldmlzaW9uIDIxMjk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04OCw2ICs4OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKICAgICB9CiAgICAgCisgICAgSGVhcFJhbmdlIG9wZXJhdG9yfChjb25zdCBIZWFw
UmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgKKyAg
ICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAgICAgICAgICAg
c3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAogICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9CiAKICAg
ICB1bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU4LDYgKzU4LDExIEBAIFZhbHVlKiBJbnNlcnRpb25TZXQ6Omluc2VydEJv
dHRvbShzaXplX3QKICAgICByZXR1cm4gaW5zZXJ0Qm90dG9tKGluZGV4LCBsaWtlVmFsdWUtPm9y
aWdpbigpLCBsaWtlVmFsdWUtPnR5cGUoKSk7CiB9CiAKK1ZhbHVlKiBJbnNlcnRpb25TZXQ6Omlu
c2VydENsb25lKHNpemVfdCBpbmRleCwgVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBpbnNl
cnRWYWx1ZShpbmRleCwgbV9wcm9jZWR1cmUuY2xvbmUodmFsdWUpKTsKK30KKwogdm9pZCBJbnNl
cnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgYnViYmxlU29ydCht
X2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzEsNiArNzEsOCBAQCBwdWJsaWM6CiAKICAgICBWYWx1ZSogaW5zZXJ0Qm90dG9tKHNpemVf
dCBpbmRleCwgT3JpZ2luLCBUeXBlKTsKICAgICBWYWx1ZSogaW5zZXJ0Qm90dG9tKHNpemVfdCBp
bmRleCwgVmFsdWUqKTsKKyAgICAKKyAgICBWYWx1ZSogaW5zZXJ0Q2xvbmUoc2l6ZV90IGluZGV4
LCBWYWx1ZSopOwogCiAgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIHJ1bigpCiAgICAg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wcm9jLmhhc1F1aXJrcygpKTsKKyAgICAgICAg
CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAg
IG1fYmxvY2sgPSBibG9jazsKICAgICAgICAgICAgIHByb2Nlc3NDdXJyZW50QmxvY2soKTsKQEAg
LTcyLDYgKzc0LDkgQEAgcHVibGljOgogICAgICAgICAgICAgbV9wcm9jLnJlc2V0UmVhY2hhYmls
aXR5KCk7CiAgICAgICAgICAgICBtX3Byb2MuaW52YWxpZGF0ZUNGRygpOwogICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBtX3Byb2Muc2V0SGFzUXVpcmtzKHRydWUpOworICAgICAgICAKICAg
ICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgICB9CiAgICAgCkBAIC0xODUsNyArMTkwLDczIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbG9hZC1sb2FkIGZlbmNlLiBUaGlzIGNvZGVnZW5zIHRv
IG5vdGhpbmcgb24gWDg2LiBXZSB1c2UgaXQgdG8gdGVsbCB0aGUKKyAgICAgICAgICAgICAgICAg
ICAgLy8gY29tcGlsZXIgbm90IHRvIGJsb2NrIGxvYWQgbW90aW9uLgorICAgICAgICAgICAgICAg
ICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxGZW5jZVZhbHVl
PihtX2luZGV4LCBtX29yaWdpbik7CisgICAgICAgICAgICAgICAgICAgIGZlbmNlLT5yZWFkID0g
SGVhcFJhbmdlKCk7CisgICAgICAgICAgICAgICAgICAgIGZlbmNlLT53cml0ZSA9IEhlYXBSYW5n
ZTo6dG9wKCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBL
aWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNob3VsZCB1bmxvY2sgYSBidW5jaCBvZiBjb2RlIHNpbXBs
aWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoQm90dG9t
KG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICBjYXNlIEF0b21p
Y1dlYWtDQVM6CisgICAgICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzogeworICAgICAgICAg
ICAgICAgIGlmIChpc1g4NigpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+
YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICAgICAgV2lkdGggd2lkdGggPSBhdG9taWMt
Pm9wZXJhdGlvbldpZHRoKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KGlzQ2Fub25pY2FsV2lkdGgod2lkdGgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYWx1ZSogZXhwZWN0ZWRWYWx1ZSA9IGF0
b21pYy0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gT24g
QVJNLCB0aGUgbG9hZCBwYXJ0IG9mIHRoZSBDQVMgZG9lcyBhIGxvYWQgd2l0aCB6ZXJvIGV4dGVu
c2lvbi4gVGhlcmVmb3JlLCB3ZSBuZWVkCisgICAgICAgICAgICAgICAgLy8gdG8gemVyby1leHRl
bmQgdGhlIGlucHV0LgorICAgICAgICAgICAgICAgIFZhbHVlKiBtYXNrZWRFeHBlY3RlZFZhbHVl
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgbV9p
bmRleCwgQml0QW5kLCBtX29yaWdpbiwgZXhwZWN0ZWRWYWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0SW50Q29uc3RhbnQobV9pbmRleCwgZXhwZWN0ZWRWYWx1
ZSwgbWFzayh3aWR0aCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdG9t
aWMtPmNoaWxkKDApID0gbWFza2VkRXhwZWN0ZWRWYWx1ZTsKKyAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgICAgICAg
ICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnT3I6Cisg
ICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hj
aGdYb3I6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGc6IHsKKyAgICAgICAgICAgICAgICAv
LyBPbiBYODYsIHRoZXNlIGFjdHVhbGx5IHJldHVybiBnYXJiYWdlIGluIHRoZSBoaWdoIGJpdHMu
IE9uIEFSTTY0LCB0aGVzZSBzb3J0YQorICAgICAgICAgICAgICAgIC8vIHplcm8tZXh0ZW5kIHRo
ZWlyIGhpZ2ggYml0cywgZXhjZXB0IHRoYXQgdGhlIGhpZ2ggYml0cyBtaWdodCBnZXQgcG9sbHV0
ZWQgYnkgaGlnaAorICAgICAgICAgICAgICAgIC8vIGJpdHMgaW4gdGhlIG9wZXJhbmQuIC4gU28s
IGVpdGhleSB3YXksIHdlIG5lZWQgdG8gdGhyb3cgYSBzaWduLWV4dGVuZCBvbiB0aGVzZQorICAg
ICAgICAgICAgICAgIC8vIHRoaW5ncy4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAg
ICAgICAgICAgICAgV2lkdGggd2lkdGggPSBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzQ2Fub25pY2FsV2lkdGgod2lkdGgp
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBWYWx1ZSogbmV3VmFsdWUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAor
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBzaWduRXh0ZW5kT3Bjb2RlKHdpZHRoKSwgbV9v
cmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENsb25lKG1f
aW5kZXgsIG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
TWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHAJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zQWZ0ZXJP
cHRpbWl6YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDE1ICsxNTYsMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGNhc2UgUm90TDogewogICAgICAgICAgICAgICAgIC8vIEFSTTY0
IGRvZXNuJ3QgaGF2ZSBhIHJvdGF0ZSBsZWZ0LgogICAgICAgICAgICAgICAgIGlmIChpc0FSTTY0
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgVmFsdWUqIG5ld1NoaWZ0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PihtX2luZGV4LCBOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogcm90YXRlID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPihtX2luZGV4LCBSb3RSLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hp
bGQoMCksIG5ld1NoaWZ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxh
Y2VXaXRoSWRlbnRpdHkocm90YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTaGlm
dCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgTmVnLCBtX3ZhbHVlLT5v
cmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSog
cm90YXRlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBSb3RSLCBtX3Zh
bHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG5ld1NoaWZ0KTsKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyb3RhdGUpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Miw2ICs3MiwxNCBAQCBuYW1lc3BhY2UgewogCiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKIAorLy8gRklYTUU6IFdlIHdvdWxkbid0IG5lZWQgdGhpcyBpZiBBaXIgc3VwcG9ydGVkIFdp
ZHRoIG1vZGlmaWVycyBpbiBBaXI6OktpbmQuCisvLyBPT1BTISEhIChuZWVkIGEgYnVnIFVSTCkK
KyNkZWZpbmUgT1BDT0RFX0ZPUl9XSURUSChvcGNvZGUsIHdpZHRoKSAoIFwKKyAgICAod2lkdGgp
ID09IFdpZHRoOCA/IG9wY29kZSAjIyA4IDogXAorICAgICh3aWR0aCkgPT0gV2lkdGgxNiA/IG9w
Y29kZSAjIyAxNiA6IFwKKyAgICAod2lkdGgpID09IFdpZHRoMzIgPyBvcGNvZGUgIyMgMzIgOiBc
CisgICAgb3Bjb2RlICMjIDY0KQorCiBjbGFzcyBMb3dlclRvQWlyIHsKIHB1YmxpYzoKICAgICBM
b3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQpAQCAtODMsNiArOTEsNyBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9kb21pbmF0b3JzKHByb2NlZHVyZS5kb21pbmF0b3JzKCkpCiAgICAgICAg
ICwgbV9wcm9jZWR1cmUocHJvY2VkdXJlKQogICAgICAgICAsIG1fY29kZShwcm9jZWR1cmUuY29k
ZSgpKQorICAgICAgICAsIG1fYmxvY2tJbnNlcnRpb25TZXQobV9jb2RlKQogICAgIHsKICAgICB9
CiAKQEAgLTEyNCwxNCArMTMzLDE4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gaG9pc3RlZCBhZGRy
ZXNzIGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxvb3Au
CiAgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUuYmxvY2tz
SW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7Ci0gICAgICAgICAg
ICAvLyBSZXNldCBzb21lIHN0YXRlLgotICAgICAgICAgICAgbV9pbnN0cy5yZXNpemUoMCk7CiAK
ICAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9jayk7CiAKICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvd2VyaW5n
IEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KKyAgICAg
ICAgICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNz
b3JzKCkuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayht
X2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3koKSkp
OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2NrcyBpbiByZXZl
cnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hhdCBhbGxvd3Mg
dXMKICAgICAgICAgICAgIC8vIHRvIG1hdGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5LgogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgewpAQCAtMTQ5LDE5
ICsxNjIsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBtX2luc3RzIGNvbnRh
aW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcwotICAgICAgICAgICAgLy8g
aXQgaW4gcmV2ZXJzZS4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5zdHMuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9pbnN0c1tp
XSkKLSAgICAgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5hcHBlbmRJbnN0
KFdURk1vdmUoaW5zdCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBNYWtlIHN1
cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KLSAgICAgICAgICAg
IGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygp
KSB7Ci0gICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNzb3JzKCku
YXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayhtX2Jsb2Nr
VG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3koKSkpOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKG1fYmxv
Y2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fYmxvY2tJ
bnNlcnRpb25TZXQuZXhlY3V0ZSgpOwogCiAgICAgICAgIEFpcjo6SW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChtX2NvZGUpOwogICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBtX3Byb2xvZ3VlKQpA
QCAtNTM4LDcgKzU0Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7CiAK
ICAgICAgICAgaW50MzJfdCBvZmZzZXQgPSB2YWx1ZS0+b2Zmc2V0KCk7Ci0gICAgICAgIFdpZHRo
IHdpZHRoID0gdmFsdWUtPmFjY2Vzc1dpZHRoKCk7CisgICAgICAgIFdpZHRoIHdpZHRoID0gdmFs
dWUtPmxvYWRTdG9yZVdpZHRoKCk7CiAKICAgICAgICAgQXJnIHJlc3VsdCA9IGVmZmVjdGl2ZUFk
ZHIodmFsdWUtPmxhc3RDaGlsZCgpLCBvZmZzZXQsIHdpZHRoKTsKICAgICAgICAgQVNTRVJUKHJl
c3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpOwpAQCAtNTYyLDExICs1NjYsMTYgQEAgcHJpdmF0ZToK
ICAgICAKICAgICBBcmdQcm9taXNlIGxvYWRQcm9taXNlQW55T3Bjb2RlKFZhbHVlKiBsb2FkVmFs
dWUpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2FkVmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpKTsKICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKGxvYWRWYWx1ZSkpCiAgICAgICAg
ICAgICByZXR1cm4gQXJnKCk7CiAgICAgICAgIGlmIChjcm9zc2VzSW50ZXJmZXJlbmNlKGxvYWRW
YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7Ci0gICAgICAgIEFyZ1Byb21pc2UgcmVz
dWx0KGFkZHIobG9hZFZhbHVlKSwgbG9hZFZhbHVlKTsKKyAgICAgICAgaWYgKGxvYWRWYWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7
CisgICAgICAgIEFyZyBsb2FkQWRkciA9IGFkZHIobG9hZFZhbHVlKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQobG9hZEFkZHIpOworICAgICAgICBBcmdQcm9taXNlIHJlc3VsdChsb2FkQWRkciwg
bG9hZFZhbHVlKTsKICAgICAgICAgaWYgKGxvYWRWYWx1ZS0+dHJhcHMoKSkKICAgICAgICAgICAg
IHJlc3VsdC5zZXRUcmFwcyh0cnVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTkzMSwx
MCArOTQwLDE1IEBAIHByaXZhdGU6CiAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZTMyLCBBaXI6
Ok9wY29kZSBvcGNvZGU2NCwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0
YXRpdmU+CiAgICAgYm9vbCB0cnlBcHBlbmRTdG9yZUJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlLT5hczxNZW1vcnlW
YWx1ZT4oKSk7CisgICAgICAgIAogICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNv
ZGVGb3JUeXBlKG9wY29kZTMyLCBvcGNvZGU2NCwgbGVmdC0+dHlwZSgpKTsKICAgICAgICAgaWYg
KG9wY29kZSA9PSBBaXI6Ok9vcHMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IAorICAgICAgICBpZiAobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAogICAgICAgICBBcmcgc3RvcmVBZGRy
ID0gYWRkcihtX3ZhbHVlKTsKICAgICAgICAgQVNTRVJUKHN0b3JlQWRkcik7CiAKQEAgLTk5NCwx
MCArMTAwOCw0OCBAQCBwcml2YXRlOgogCiAgICAgICAgIHJldHVybiBJbnN0KG1vdmUsIG1fdmFs
dWUsIHRtcCh2YWx1ZSksIGRlc3QpOwogICAgIH0KKyAgICAKKyAgICBBaXI6Ok9wY29kZSBzdG9y
ZU9wY29kZShXaWR0aCB3aWR0aCwgQmFuayBiYW5rLCBib29sIHJlbGVhc2UpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYmFuayA9PSBHUCk7CisgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/
IFN0b3JlUmVsOCA6IFN0b3JlODsKKyAgICAgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYmFuayA9PSBHUCk7CisgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/
IFN0b3JlUmVsMTYgOiBTdG9yZTE2OworICAgICAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgICAg
ICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlbGVhc2UgPyBTdG9yZVJlbDMyIDogTW92ZTMyOworICAgICAgICAgICAgY2FzZSBG
UDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVsZWFzZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE1vdmVGbG9hdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpczY0
Qml0KCkpOworICAgICAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgICAgICBjYXNlIEdQ
OgorICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlID8gU3RvcmVSZWw2NCA6IE1vdmU7Cisg
ICAgICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWxl
YXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW92ZURvdWJsZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlKFZh
bHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIHJldHVybiBzdG9yZU9wY29kZShtZW1vcnktPmxv
YWRTdG9yZVdpZHRoKCksIG1lbW9yeS0+YWNjZXNzQmFuaygpLCBtZW1vcnktPmhhc0ZlbmNlKCkp
OworICAgIH0KIAogICAgIEluc3QgY3JlYXRlU3RvcmUoVmFsdWUqIHZhbHVlLCBjb25zdCBBcmcm
IGRlc3QpCiAgICAgewotICAgICAgICBBaXI6Ok9wY29kZSBtb3ZlT3Bjb2RlID0gbW92ZUZvclR5
cGUodmFsdWUtPnR5cGUoKSk7CisgICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVPcGNvZGUgPSBzdG9y
ZU9wY29kZSh2YWx1ZSk7CiAgICAgICAgIHJldHVybiBjcmVhdGVTdG9yZShtb3ZlT3Bjb2RlLCB2
YWx1ZSwgZGVzdCk7CiAgICAgfQogCkBAIC0xMDA2LDcgKzEwNTgsNyBAQCBwcml2YXRlOgogICAg
IHsKICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBjcmVhdGVTdG9yZShzdGQ6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKSk7CiAgICAgfQotCisgICAgCiAgICAgQWlyOjpPcGNv
ZGUgbW92ZUZvclR5cGUoVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7
CkBAIC0xMDczLDcgKzExMjUsNDEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1faW5zdHMu
bGFzdCgpLmFwcGVuZChpbnN0KTsKICAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2hBcHBlbmRp
bmdJbnN0cnVjdGlvbnMoQWlyOjpCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgeworICAgICAgICAv
LyBOb3cgYXBwZW5kIHRoZSBpbnN0cnVjdGlvbnMuIG1faW5zdHMgY29udGFpbnMgdGhlbSBpbiBy
ZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCisgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5zdHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICBmb3IgKEluc3QmIGluc3QgOiBtX2luc3RzW2ldKQorICAgICAgICAgICAgICAgIHRhcmdl
dC0+YXBwZW5kSW5zdChXVEZNb3ZlKGluc3QpKTsKKyAgICAgICAgfQorICAgICAgICBtX2luc3Rz
LnJlc2l6ZSgwKTsKKyAgICB9CisgICAgCisgICAgQWlyOjpCYXNpY0Jsb2NrKiBuZXdCbG9jaygp
CisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRBZnRlciht
X2Jsb2NrVG9CbG9ja1ttX2Jsb2NrXSk7CisgICAgfQogCisgICAgLy8gTk9URTogVGhpcyB3aWxs
IGNyZWF0ZSBhIGNvbnRpbnVhdGlvbiBibG9jayAoYG5leHRCbG9ja2ApICphZnRlciogYW55IGJs
b2NrcyB5b3UndmUgY3JlYXRlZCB1c2luZworICAgIC8vIG5ld0Jsb2NrKCkuIFNvLCBpdCdzIHBy
ZWZlcmFibGUgdG8gY3JlYXRlIGFsbCBvZiB5b3VyIGJsb2NrcyB1cGZyb250IHVzaW5nIG5ld0Js
b2NrKCkuIEFsc28gbm90ZQorICAgIC8vIHRoYXQgYW55IGNvZGUgeW91IGVtaXQgYmVmb3JlIHRo
aXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIGNvbnRpbnVhdGlvbiwgYW5kIGFueSBjb2RlIHlv
dSBlbWl0CisgICAgLy8gYWZ0ZXIgdGhpcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBwcmV2aW91
cyBibG9jay4KKyAgICB2b2lkIHNwbGl0QmxvY2soQWlyOjpCYXNpY0Jsb2NrKiYgcHJldmlvdXNC
bG9jaywgQWlyOjpCYXNpY0Jsb2NrKiYgbmV4dEJsb2NrKQorICAgIHsKKyAgICAgICAgQWlyOjpC
YXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tUb0Jsb2NrW21fYmxvY2tdOworICAgICAgICAKKyAg
ICAgICAgcHJldmlvdXNCbG9jayA9IGJsb2NrOworICAgICAgICBuZXh0QmxvY2sgPSBtX2Jsb2Nr
SW5zZXJ0aW9uU2V0Lmluc2VydEFmdGVyKGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZpbmlz
aEFwcGVuZGluZ0luc3RydWN0aW9ucyhuZXh0QmxvY2spOworICAgICAgICBuZXh0QmxvY2stPnN1
Y2Nlc3NvcnMoKSA9IGJsb2NrLT5zdWNjZXNzb3JzKCk7CisgICAgICAgIGJsb2NrLT5zdWNjZXNz
b3JzKCkuY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIG1faW5zdHMuYXBwZW5kKFZlY3RvcjxJ
bnN0PigpKTsKKyAgICB9CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUu
Li4gQXJndW1lbnRzPgogICAgIFQqIGVuc3VyZVNwZWNpYWwoVComIGZpZWxkLCBBcmd1bWVudHMm
Ji4uLiBhcmd1bWVudHMpCiAgICAgewpAQCAtMTEyMyw3ICsxMjA5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJn
dW1lbnQ6CiAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjpjYWxsQXJnKHZhbHVlLnJlcCgpLm9m
ZnNldEZyb21TUCgpKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRTdG9yZSh2YWx1ZS52YWx1ZSgp
LCBhcmcpOworICAgICAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1vdmVGb3JUeXBlKHZhbHVlLnZh
bHVlKCkpLCBhcmcpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTk2
MSw2ICsyMDQ3LDIzMiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
KyAgICB2b2lkIGFwcGVuZFg4NkRpdihCMzo6T3Bjb2RlIG9wKQorICAgIHsKKyNpZiBDUFUoWDg2
KSB8fCBDUFUoWDg2XzY0KQorICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4
KTsKKyAgICAgICAgVG1wIGVkeCA9IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7CisKKyAgICAgICAg
QWlyOjpPcGNvZGUgY29udmVydFRvRG91YmxlV29yZDsKKyAgICAgICAgQWlyOjpPcGNvZGUgZGl2
OworICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEludDMy
OgorICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb0RvdWJsZVdv
cmQzMjsKKyAgICAgICAgICAgIGRpdiA9IFg4NkRpdjMyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2
Q29udmVydFRvUXVhZFdvcmQ2NDsKKyAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKG9wID09IERpdiB8fCBvcCA9PSBNb2QpOworICAgICAgICBYODZSZWdpc3RlcnM6
OlJlZ2lzdGVySUQgcmVzdWx0ID0gb3AgPT0gRGl2ID8gWDg2UmVnaXN0ZXJzOjplYXggOiBYODZS
ZWdpc3RlcnM6OmVkeDsKKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxk
KDApKSwgZWF4KTsKKyAgICAgICAgYXBwZW5kKGNvbnZlcnRUb0RvdWJsZVdvcmQsIGVheCwgZWR4
KTsKKyAgICAgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkp
OworICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKHJlc3VsdCksIHRtcChtX3ZhbHVlKSk7CisKKyNl
bHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShvcCk7CisgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBhcHBlbmRYODZVRGl2KEIzOjpP
cGNvZGUgb3ApCisgICAgeworI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgICAgIFRt
cCBlYXggPSBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBUbXAgZWR4ID0gVG1wKFg4
NlJlZ2lzdGVyczo6ZWR4KTsKKworICAgICAgICBBaXI6Ok9wY29kZSBkaXYgPSBtX3ZhbHVlLT50
eXBlKCkgPT0gSW50MzIgPyBYODZVRGl2MzIgOiBYODZVRGl2NjQ7CisKKyAgICAgICAgQVNTRVJU
KG9wID09IFVEaXYgfHwgb3AgPT0gVU1vZCk7CisgICAgICAgIFg4NlJlZ2lzdGVyczo6UmVnaXN0
ZXJJRCByZXN1bHQgPSBvcCA9PSBVRGl2ID8gWDg2UmVnaXN0ZXJzOjplYXggOiBYODZSZWdpc3Rl
cnM6OmVkeDsKKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwg
ZWF4KTsKKyAgICAgICAgYXBwZW5kKFhvcjY0LCBlZHgsIGVkeCk7CisgICAgICAgIGFwcGVuZChk
aXYsIGVheCwgZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgYXBwZW5kKE1v
dmUsIFRtcChyZXN1bHQpLCB0bXAobV92YWx1ZSkpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BB
UkFNKG9wKTsKKyAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisjZW5kaWYKKyAg
ICB9CisgICAgCisgICAgQWlyOjpPcGNvZGUgbG9hZExpbmtPcGNvZGUoV2lkdGggd2lkdGgsIGJv
b2wgZmVuY2UpCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2UgPyBPUENPREVfRk9SX1dJRFRI
KExvYWRMaW5rQWNxLCB3aWR0aCkgOiBPUENPREVfRk9SX1dJRFRIKExvYWRMaW5rLCB3aWR0aCk7
CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlQ29uZE9wY29kZShXaWR0aCB3aWR0
aCwgYm9vbCBmZW5jZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmZW5jZSA/IE9QQ09ERV9GT1Jf
V0lEVEgoU3RvcmVDb25kUmVsLCB3aWR0aCkgOiBPUENPREVfRk9SX1dJRFRIKFN0b3JlQ29uZCwg
d2lkdGgpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGNhbiBlbWl0IGNvZGUgZm9yIHRoZSBm
b2xsb3dpbmcgcGF0dGVybnM6CisgICAgLy8gQXRvbWljV2Vha0NBUworICAgIC8vIEJpdFhvcihB
dG9taWNXZWFrQ0FTLCAxKQorICAgIC8vIEF0b21pY1N0cm9uZ0NBUworICAgIC8vIEVxdWFsKEF0
b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpCisgICAgLy8gTm90RXF1YWwoQXRvbWljU3Ryb25nQ0FT
LCBleHBlY3RlZCkKKyAgICAvLyBCcmFuY2goQXRvbWljV2Vha0NBUykKKyAgICAvLyBCcmFuY2go
RXF1YWwoQXRvbWljU3Ryb25nQ0FTLCBleHBlY3RlZCkpCisgICAgLy8gQnJhbmNoKE5vdEVxdWFs
KEF0b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpKQorICAgIC8vCisgICAgLy8gSXQgYXNzdW1lcyB0
aGF0IGF0b21pY1ZhbHVlIHBvaW50cyB0byB0aGUgQ0FTLCBhbmQgbV92YWx1ZSBwb2ludHMgdG8g
dGhlIGluc3RydWN0aW9uIGJlaW5nCisgICAgLy8gZ2VuZXJhdGVkLiBJdCBhc3N1bWVzIHRoYXQg
eW91J3ZlIGNvbnN1bWVkIGV2ZXJ5dGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjb25zdW1lZC4KKyAg
ICBib29sIGFwcGVuZENBUyhWYWx1ZSogYXRvbWljVmFsdWUsIGJvb2wgaW52ZXJ0KQorICAgIHsK
KyAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IGF0b21pY1ZhbHVlLT5hczxBdG9taWNWYWx1
ZT4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXRvbWljKTsKKyAgICAgICAgCisgICAgICAg
IGJvb2wgaXNCcmFuY2ggPSBtX3ZhbHVlLT5vcCgpID09IEJyYW5jaDsKKyAgICAgICAgYm9vbCBp
c1N0cm9uZyA9IGF0b21pYy0+b3AoKSA9PSBBdG9taWNTdHJvbmdDQVM7CisgICAgICAgIGJvb2wg
cmV0dXJuc09sZFZhbHVlID0gbV92YWx1ZS0+b3AoKSA9PSBBdG9taWNTdHJvbmdDQVM7CisgICAg
ICAgIAorICAgICAgICBXaWR0aCB3aWR0aCA9IGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKTsKKyAg
ICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisKKyAgICAgICAgVG1wIHZhbHVlUmVz
dWx0VG1wOworICAgICAgICBUbXAgYm9vbFJlc3VsdFRtcDsKKyAgICAgICAgaWYgKHJldHVybnNP
bGRWYWx1ZSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWludmVydCk7CisgICAgICAg
ICAgICB2YWx1ZVJlc3VsdFRtcCA9IHRtcChtX3ZhbHVlKTsKKyAgICAgICAgICAgIGJvb2xSZXN1
bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0JyYW5jaCkg
eworICAgICAgICAgICAgdmFsdWVSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAg
ICAgICAgIGJvb2xSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHZhbHVlUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAg
ICAgICAgICBib29sUmVzdWx0VG1wID0gdG1wKG1fdmFsdWUpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBUbXAgc3VjY2Vzc0Jvb2xSZXN1bHRUbXA7CisgICAgICAgIGlmIChpc1N0cm9u
ZyAmJiAhaXNCcmFuY2gpCisgICAgICAgICAgICBzdWNjZXNzQm9vbFJlc3VsdFRtcCA9IG1fY29k
ZS5uZXdUbXAoR1ApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdWNjZXNzQm9vbFJlc3Vs
dFRtcCA9IGJvb2xSZXN1bHRUbXA7CisKKyAgICAgICAgVG1wIGV4cGVjdGVkVmFsdWVUbXAgPSB0
bXAoYXRvbWljLT5jaGlsZCgwKSk7CisgICAgICAgIFRtcCBuZXdWYWx1ZVRtcCA9IHRtcChhdG9t
aWMtPmNoaWxkKDEpKTsKKyAgICAgICAgCisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayBzdWNjZXNz
OworICAgICAgICBGcmVxdWVudGVkQmxvY2sgZmFpbHVyZTsKKyAgICAgICAgaWYgKGlzQnJhbmNo
KSB7CisgICAgICAgICAgICBzdWNjZXNzID0gbV9ibG9ja1RvQmxvY2tbbV9ibG9ja10tPnN1Y2Nl
c3NvcihpbnZlcnQpOworICAgICAgICAgICAgZmFpbHVyZSA9IG1fYmxvY2tUb0Jsb2NrW21fYmxv
Y2tdLT5zdWNjZXNzb3IoIWludmVydCk7CisgICAgICAgIH0KKyAgICAgICAgCisjaWYgQ1BVKFg4
Nl82NCkKKyAgICAgICAgVG1wIGVheCA9IFRtcChYODZSZWdpc3RlcnM6OmVheCk7CisgICAgICAg
IGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT5vcGVyYXRpb25UeXBlKCkpLCBpbW1P
clRtcChhdG9taWMtPmNoaWxkKDApKSwgZWF4KTsKKyAgICAgICAgaWYgKHJldHVybnNPbGRWYWx1
ZSkgeworICAgICAgICAgICAgYXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoTG9ja0NtcFhjaGcsIHdp
ZHRoKSwgZWF4LCBuZXdWYWx1ZVRtcCwgYWRkcmVzcyk7CisgICAgICAgICAgICBhcHBlbmQocmVs
YXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpKSwgZWF4LCB2YWx1ZVJlc3Vs
dFRtcCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNCcmFuY2gpIHsKKyAgICAgICAgICAgIGFwcGVu
ZChPUENPREVfRk9SX1dJRFRIKEJyYW5jaExvY2tDbXBYY2hnLCB3aWR0aCksIGVheCwgbmV3VmFs
dWVUbXAsIGFkZHJlc3MpOworICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbbV9ibG9ja10tPnNl
dFN1Y2Nlc3NvcnMoc3VjY2VzcywgZmFpbHVyZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChMb2NrQ21wWGNoZywgd2lkdGgpLCBlYXgsIHRt
cChhdG9taWMtPmNoaWxkKDEpKSwgYWRkcmVzcywgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAg
ICBpZiAoaW52ZXJ0KQorICAgICAgICAgICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKFhv
ciwgY2Fub25pY2FsV2lkdGgod2lkdGgpKSwgQXJnOjppbW0oMSksIGJvb2xSZXN1bHRUbXApOwor
ICAgICAgICB9CisjZWxpZiBDUFUoQVJNNjQpCisgICAgICAgIC8vIFdlIHdpc2ggdG8gZW1pdDoK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gQmxvY2sgI3JlbG9vcDoKKyAgICAgICAgLy8gICAgIExv
YWRMaW5rCisgICAgICAgIC8vICAgICBCcmFuY2ggTm90RXF1YWwKKyAgICAgICAgLy8gICBTdWNj
ZXNzb3JzOiBUaGVuOiNmYWlsLCBFbHNlOiAjc3RvcmUKKyAgICAgICAgLy8gQmxvY2sgI3N0b3Jl
OgorICAgICAgICAvLyAgICAgU3RvcmVDb25kCisgICAgICAgIC8vICAgICBYb3IgJDEsICVyZXN1
bHQgICAgPC0tLSBvbmx5IGlmICFpbnZlcnQKKyAgICAgICAgLy8gICAgIEp1bXAKKyAgICAgICAg
Ly8gICBTdWNjZXNzb3JzOiAjZG9uZQorICAgICAgICAvLyBCbG9jayAjZmFpbDoKKyAgICAgICAg
Ly8gICAgIE1vdmUgJGludmVydCwgJXJlc3VsdAorICAgICAgICAvLyAgICAgSnVtcAorICAgICAg
ICAvLyAgIFN1Y2Nlc3NvcnM6ICNkb25lCisgICAgICAgIC8vIEJsb2NrICNkb25lOgorICAgICAg
ICAKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiByZWxvb3BCbG9jayA9IG5ld0Jsb2NrKCk7Cisg
ICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3RvcmVCbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAg
IEFpcjo6QmFzaWNCbG9jayogc3VjY2Vzc0Jsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKCFp
c0JyYW5jaCAmJiBpc1N0cm9uZykKKyAgICAgICAgICAgIHN1Y2Nlc3NCbG9jayA9IG5ld0Jsb2Nr
KCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogZmFpbEJsb2NrID0gbnVsbHB0cjsKKyAgICAg
ICAgaWYgKCFpc0JyYW5jaCkKKyAgICAgICAgICAgIGZhaWxCbG9jayA9IG5ld0Jsb2NrKCk7Cisg
ICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3Ryb25nRmFpbEJsb2NrOworICAgICAgICBpZiAoaXNT
dHJvbmcpCisgICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2sgPSBuZXdCbG9jaygpOworICAgICAg
ICBGcmVxdWVudGVkQmxvY2sgY29tcGFyaXNvbkZhaWw7CisgICAgICAgIEZyZXF1ZW50ZWRCbG9j
ayB3ZWFrRmFpbDsKKyAgICAgICAgaWYgKGlzU3Ryb25nKSB7CisgICAgICAgICAgICBjb21wYXJp
c29uRmFpbCA9IHN0cm9uZ0ZhaWxCbG9jazsKKyAgICAgICAgICAgIHdlYWtGYWlsID0gcmVsb29w
QmxvY2s7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNCcmFuY2gpCisgICAg
ICAgICAgICAgICAgY29tcGFyaXNvbkZhaWwgPSBmYWlsdXJlOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGNvbXBhcmlzb25GYWlsID0gZmFpbEJsb2NrOworICAgICAgICAgICAg
d2Vha0ZhaWwgPSBmYWlsdXJlOworICAgICAgICB9CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayog
YmVnaW5CbG9jazsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBkb25lQmxvY2s7CisgICAgICAg
IHNwbGl0QmxvY2soYmVnaW5CbG9jaywgZG9uZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGFw
cGVuZChKdW1wKTsKKyAgICAgICAgYmVnaW5CbG9jay0+c2V0U3VjY2Vzc29ycyhyZWxvb3BCbG9j
ayk7CisgICAgICAgIAorICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKGxvYWRMaW5rT3Bjb2Rl
KHdpZHRoLCBhdG9taWMtPmhhc0ZlbmNlKCkpLCBtX3ZhbHVlLCB2YWx1ZVJlc3VsdFRtcCwgYWRk
cmVzcyk7CisgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChCcmFu
Y2gsIGNhbm9uaWNhbFdpZHRoKHdpZHRoKSksIG1fdmFsdWUsIEFyZzo6cmVsQ29uZChNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwpIHZhbHVlUmVzdWx0VG1wLCBleHBlY3RlZFZhbHVlVG1wKTsKKyAg
ICAgICAgcmVsb29wQmxvY2stPnNldFN1Y2Nlc3NvcnMoY29tcGFyaXNvbkZhaWwsIHN0b3JlQmxv
Y2spOworICAgICAgICAKKyAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKHN0b3JlQ29uZE9wY29k
ZSh3aWR0aCwgYXRvbWljLT5oYXNGZW5jZSgpKSwgbV92YWx1ZSwgbmV3VmFsdWVUbXAsIGFkZHJl
c3MsIHN1Y2Nlc3NCb29sUmVzdWx0VG1wKTsKKyAgICAgICAgaWYgKGlzQnJhbmNoKSB7CisgICAg
ICAgICAgICBzdG9yZUJsb2NrLT5hcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFj
cm9Bc3NlbWJsZXI6Olplcm8pLCBib29sUmVzdWx0VG1wLCBBcmc6OmJpdEltbSgtMSkpOworICAg
ICAgICAgICAgc3RvcmVCbG9jay0+c2V0U3VjY2Vzc29ycyhzdWNjZXNzLCB3ZWFrRmFpbCk7Cisg
ICAgICAgICAgICBkb25lQmxvY2stPnN1Y2Nlc3NvcnMoKS5jbGVhcigpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIWRvbmVCbG9jay0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGRvbmVCbG9j
ay0+YXBwZW5kKE9vcHMsIG1fdmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKGlzU3Ryb25nKSB7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKEJyYW5j
aFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgc3VjY2Vzc0Jvb2xS
ZXN1bHRUbXAsIEFyZzo6Yml0SW1tKC0xKSk7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+
c2V0U3VjY2Vzc29ycyhzdWNjZXNzQmxvY2ssIHJlbG9vcEJsb2NrKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBzdWNjZXNzQmxvY2stPmFwcGVuZChNb3ZlLCBtX3ZhbHVlLCBB
cmc6OmltbSghaW52ZXJ0KSwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICAgICAgc3VjY2Vz
c0Jsb2NrLT5hcHBlbmQoSnVtcCwgbV92YWx1ZSk7CisgICAgICAgICAgICAgICAgc3VjY2Vzc0Js
b2NrLT5zZXRTdWNjZXNzb3JzKGRvbmVCbG9jayk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGlmICghaW52ZXJ0KQorICAgICAgICAgICAgICAgICAgICBzdG9yZUJsb2Nr
LT5hcHBlbmQoWG9yMzIsIG1fdmFsdWUsIEFyZzo6Yml0SW1tKDEpLCBib29sUmVzdWx0VG1wLCBi
b29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdG9yZUJs
b2NrLT5hcHBlbmQoSnVtcCwgbV92YWx1ZSk7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+
c2V0U3VjY2Vzc29ycyhkb25lQmxvY2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBmYWlsQmxvY2stPmFwcGVuZChNb3ZlLCBtX3ZhbHVlLCBBcmc6OmltbShpbnZl
cnQpLCBib29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgIGZhaWxCbG9jay0+YXBwZW5kKEp1bXAs
IG1fdmFsdWUpOworICAgICAgICAgICAgZmFpbEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRvbmVCbG9j
ayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpc1N0cm9uZykgeworICAgICAg
ICAgICAgVG1wIHRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAgICAgc3Ryb25nRmFp
bEJsb2NrLT5hcHBlbmQoc3RvcmVDb25kT3Bjb2RlKHdpZHRoLCBhdG9taWMtPmhhc0ZlbmNlKCkp
LCBtX3ZhbHVlLCB2YWx1ZVJlc3VsdFRtcCwgYWRkcmVzcywgdG1wKTsKKyAgICAgICAgICAgIHN0
cm9uZ0ZhaWxCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvKSwgdG1wLCBBcmc6OmJpdEltbSgtMSkpOworICAgICAgICAgICAgc3Ryb25n
RmFpbEJsb2NrLT5zZXRTdWNjZXNzb3JzKGZhaWxCbG9jaywgcmVsb29wQmxvY2spOworICAgICAg
ICB9CisjZWxzZQorI2Vycm9yICJCYWQgYXJjaGl0ZWN0dXJlIgorI2VuZGlmCisgICAgfQorICAg
IAogICAgIHZvaWQgbG93ZXIoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNv
ZGUoKSkgewpAQCAtMTk3MSwzMCArMjI4Myw1MCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBMb2FkOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBp
bmdJbnN0KG1fdmFsdWUsIG1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksIG1fdmFsdWUsIGFk
ZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1l
bW9yeSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICAgICAgQWlyOjpPcGNv
ZGUgb3Bjb2RlID0gQWlyOjpPb3BzOworICAgICAgICAgICAgaWYgKG1lbW9yeS0+aGFzRmVuY2Uo
KSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobWVtb3J5LT50eXBlKCkpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBMb2FkQWNx
MzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW50
NjQ6CisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IExvYWRBY3E2NDsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgb3Bjb2RlID0gbW92ZUZvclR5cGUobWVtb3J5LT50eXBlKCkpOworICAgICAgICAgICAg
YXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1
ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBMb2FkOFM6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFw
cGluZ0luc3QobV92YWx1ZSwgTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBtX3ZhbHVlLCBhZGRyKG1f
dmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9
IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpID8gTG9hZEFjcThTaWduZWRF
eHRlbmRUbzMyIDogTG9hZDhTaWduZWRFeHRlbmRUbzMyOworICAgICAgICAgICAgYXBwZW5kKHRy
YXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcCht
X3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBMb2FkOFo6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9h
ZDgsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAg
QWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNl
KCkgPyBMb2FkQWNxOCA6IExvYWQ4OworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdCht
X3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBMb2FkMTZTOiB7
Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQxNlNpZ25lZEV4
dGVuZFRvMzIsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhh
c0ZlbmNlKCkgPyBMb2FkQWNxMTZTaWduZWRFeHRlbmRUbzMyIDogTG9hZDE2U2lnbmVkRXh0ZW5k
VG8zMjsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBt
X3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDE2WjogewotICAgICAgICAgICAgYXBw
ZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkMTYsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSks
IHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxMTYgOiBMb2FkMTY7Cisg
ICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwg
YWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQWRkOiB7CiAgICAgICAgICAgICBp
ZiAodHJ5QXBwZW5kTGVhKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjA5Miw3ICsy
NDI0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0NoaWxsKCkpCiAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsKICAgICAgICAgICAgIGlm
IChpc0ludChtX3ZhbHVlLT50eXBlKCkpICYmIGlzWDg2KCkpIHsKLSAgICAgICAgICAgICAgICBs
b3dlclg4NkRpdihEaXYpOworICAgICAgICAgICAgICAgIGFwcGVuZFg4NkRpdihEaXYpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVCgh
aXNYODYoKSB8fCBpc0Zsb2F0KG1fdmFsdWUtPnR5cGUoKSkpOwpAQCAtMjEwMyw3ICsyNDM1LDcg
QEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNlIFVEaXY6IHsKICAgICAgICAgICAgIGlmIChpc0lu
dChtX3ZhbHVlLT50eXBlKCkpICYmIGlzWDg2KCkpIHsKLSAgICAgICAgICAgICAgICBsb3dlclg4
NlVEaXYoVURpdik7CisgICAgICAgICAgICAgICAgYXBwZW5kWDg2VURpdihVRGl2KTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAgLTIxMTcsMTMgKzI0NDksMTMg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBNb2Q6IHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGlzWDg2KCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdmFsdWUtPmlzQ2hp
bGwoKSk7Ci0gICAgICAgICAgICBsb3dlclg4NkRpdihNb2QpOworICAgICAgICAgICAgYXBwZW5k
WDg2RGl2KE1vZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIFVNb2Q6IHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOwotICAgICAg
ICAgICAgbG93ZXJYODZVRGl2KFVNb2QpOworICAgICAgICAgICAgYXBwZW5kWDg2VURpdihVTW9k
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMTYyLDEwICsyNDk0LDI0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYXBwZW5kVW5PcDxOb3QzMiwgTm90NjQ+KG1f
dmFsdWUtPmNoaWxkKDApKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQo
MSkKKyAgICAgICAgICAgICAgICAmJiBpc0F0b21pY0NBUyhtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bj
b2RlKCkpCisgICAgICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgw
KSkpIHsKKyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSk7
CisgICAgICAgICAgICAgICAgYXBwZW5kQ0FTKG1fdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAg
ICAgICAgIGFwcGVuZEJpbk9wPFhvcjMyLCBYb3I2NCwgWG9yRG91YmxlLCBYb3JGbG9hdCwgQ29t
bXV0YXRpdmU+KAogICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5j
aGlsZCgxKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIERlcGVuZDogeworICAgICAgICAgICAgYXBwZW5kVW5PcDxEZXBlbmQzMiwg
RGVwZW5kNjQ+KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQogCiAgICAgICAgIGNhc2UgU2hsOiB7CiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMSktPmlzSW50MzIoMSkpIHsKQEAgLTIyNjYsNyArMjYxMiw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhcHBlbmRTdG9yZSh2
YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kU3RvcmUobV92
YWx1ZSwgYWRkcihtX3ZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApA
QCAtMjI4Nyw3ICsyNjMzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZFN0
b3JlKEFpcjo6U3RvcmU4LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpOworICAgICAgICAg
ICAgYXBwZW5kU3RvcmUobV92YWx1ZSwgdmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMzA4LDcgKzI2NTQsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kU3RvcmUoQWlyOjpTdG9yZTE2LCB2YWx1ZVRv
U3RvcmUsIGFkZHIobV92YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kU3RvcmUobV92YWx1ZSwg
dmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCkBAIC0yNzg0LDYgKzMxMzAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFwcGVu
ZChBaXI6OkVudHJ5U3dpdGNoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAgY2FzZSBBdG9t
aWNTdHJvbmdDQVM6IHsKKyAgICAgICAgICAgIGFwcGVuZENBUyhtX3ZhbHVlLCBmYWxzZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgYnJlYWs7CkBAIC0yNzkzLDYzICszMTQ1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICB2b2lkIGxvd2VyWDg2RGl2
KEIzOjpPcGNvZGUgb3ApCi0gICAgewotI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCi0gICAg
ICAgIFRtcCBlYXggPSBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpOwotICAgICAgICBUbXAgZWR4ID0g
VG1wKFg4NlJlZ2lzdGVyczo6ZWR4KTsKLQotICAgICAgICBBaXI6Ok9wY29kZSBjb252ZXJ0VG9E
b3VibGVXb3JkOwotICAgICAgICBBaXI6Ok9wY29kZSBkaXY7Ci0gICAgICAgIHN3aXRjaCAobV92
YWx1ZS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICBjb252ZXJ0
VG9Eb3VibGVXb3JkID0gWDg2Q29udmVydFRvRG91YmxlV29yZDMyOwotICAgICAgICAgICAgZGl2
ID0gWDg2RGl2MzI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAg
ICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBYODZDb252ZXJ0VG9RdWFkV29yZDY0Owot
ICAgICAgICAgICAgZGl2ID0gWDg2RGl2NjQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQob3AgPT0gRGl2IHx8
IG9wID09IE1vZCk7Ci0gICAgICAgIFg4NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCByZXN1bHQgPSBv
cCA9PSBEaXYgPyBYODZSZWdpc3RlcnM6OmVheCA6IFg4NlJlZ2lzdGVyczo6ZWR4OwotCi0gICAg
ICAgIGFwcGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBlYXgpOwotICAgICAgICBh
cHBlbmQoY29udmVydFRvRG91YmxlV29yZCwgZWF4LCBlZHgpOwotICAgICAgICBhcHBlbmQoZGl2
LCBlYXgsIGVkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7Ci0gICAgICAgIGFwcGVuZChNb3Zl
LCBUbXAocmVzdWx0KSwgdG1wKG1fdmFsdWUpKTsKLQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BB
UkFNKG9wKTsKLSAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0jZW5kaWYKLSAg
ICB9Ci0KLSAgICB2b2lkIGxvd2VyWDg2VURpdihCMzo6T3Bjb2RlIG9wKQotICAgIHsKLSNpZiBD
UFUoWDg2KSB8fCBDUFUoWDg2XzY0KQotICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVy
czo6ZWF4KTsKLSAgICAgICAgVG1wIGVkeCA9IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7Ci0KLSAg
ICAgICAgQWlyOjpPcGNvZGUgZGl2ID0gbV92YWx1ZS0+dHlwZSgpID09IEludDMyID8gWDg2VURp
djMyIDogWDg2VURpdjY0OwotCi0gICAgICAgIEFTU0VSVChvcCA9PSBVRGl2IHx8IG9wID09IFVN
b2QpOwotICAgICAgICBYODZSZWdpc3RlcnM6OlJlZ2lzdGVySUQgcmVzdWx0ID0gb3AgPT0gVURp
diA/IFg4NlJlZ2lzdGVyczo6ZWF4IDogWDg2UmVnaXN0ZXJzOjplZHg7Ci0KLSAgICAgICAgYXBw
ZW5kKE1vdmUsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIGVheCk7Ci0gICAgICAgIGFwcGVuZChY
b3I2NCwgZWR4LCBlZHgpOwotICAgICAgICBhcHBlbmQoZGl2LCBlYXgsIGVkeCwgdG1wKG1fdmFs
dWUtPmNoaWxkKDEpKSk7Ci0gICAgICAgIGFwcGVuZChNb3ZlLCBUbXAocmVzdWx0KSwgdG1wKG1f
dmFsdWUpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIFVOUkVB
Q0hBQkxFX0ZPUl9QTEFURk9STSgpOwotI2VuZGlmCi0gICAgfQotCiAgICAgSW5kZXhTZXQ8VmFs
dWU+IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBp
biBBaXIuCiAgICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBh
cmUgdmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1
ZSogd2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KICAgICBJbmRleE1hcDxWYWx1ZSwg
VG1wPiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgpAQCAtMjg2NCw3
ICszMTU5LDcgQEAgcHJpdmF0ZToKIAogICAgIFZlY3RvcjxWZWN0b3I8SW5zdCwgND4+IG1faW5z
dHM7CiAgICAgVmVjdG9yPEluc3Q+IG1fcHJvbG9ndWU7Ci0KKyAgICAKICAgICBCMzo6QmFzaWNC
bG9jayogbV9ibG9jazsKICAgICBib29sIG1faXNSYXJlOwogICAgIHVuc2lnbmVkIG1faW5kZXg7
CkBAIC0yODc1LDYgKzMxNzAsOCBAQCBwcml2YXRlOgogCiAgICAgUHJvY2VkdXJlJiBtX3Byb2Nl
ZHVyZTsKICAgICBDb2RlJiBtX2NvZGU7CisKKyAgICBBaXI6OkJsb2NrSW5zZXJ0aW9uU2V0IG1f
YmxvY2tJbnNlcnRpb25TZXQ7CiB9OwogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsMzAgKzM0LDQ4IEBAIE1lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUo
KQogewogfQogCitUeXBlIE1lbW9yeVZhbHVlOjphY2Nlc3NUeXBlKCkgY29uc3QKK3sKKyAgICBp
ZiAoaXNMb2FkKG9wY29kZSgpKSkKKyAgICAgICAgcmV0dXJuIHR5cGUoKTsKKyAgICAvLyBUaGlz
IGhhcHBlbnMgdG8gd29yayBmb3IgYXRvbWljcywgdG9vLiBUaGF0J3Mgd2h5IEF0b21pY1ZhbHVl
IGRvZXMgbm90IG5lZWQgdG8gb3ZlcnJpZGUgdGhpcy4KKyAgICByZXR1cm4gY2hpbGQoMCktPnR5
cGUoKTsKK30KKworQmFuayBNZW1vcnlWYWx1ZTo6YWNjZXNzQmFuaygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGJhbmtGb3JUeXBlKGFjY2Vzc1R5cGUoKSk7Cit9CisKIHNpemVfdCBNZW1vcnlWYWx1
ZTo6YWNjZXNzQnl0ZVNpemUoKSBjb25zdAogeworICAgIHJldHVybiBieXRlcyhhY2Nlc3NXaWR0
aCgpKTsKK30KKworV2lkdGggTWVtb3J5VmFsdWU6OmxvYWRTdG9yZVdpZHRoKCkgY29uc3QKK3sK
ICAgICBzd2l0Y2ggKG9wY29kZSgpKSB7CiAgICAgY2FzZSBMb2FkOFo6CiAgICAgY2FzZSBMb2Fk
OFM6CiAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4g
V2lkdGg4OwogICAgIGNhc2UgTG9hZDE2WjoKICAgICBjYXNlIExvYWQxNlM6CiAgICAgY2FzZSBT
dG9yZTE2OgotICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgcmV0dXJuIFdpZHRoMTY7CiAgICAg
Y2FzZSBMb2FkOgotICAgICAgICByZXR1cm4gc2l6ZW9mVHlwZSh0eXBlKCkpOworICAgICAgICBy
ZXR1cm4gd2lkdGhGb3JUeXBlKHR5cGUoKSk7CiAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgcmV0
dXJuIHNpemVvZlR5cGUoY2hpbGQoMCktPnR5cGUoKSk7CisgICAgICAgIHJldHVybiB3aWR0aEZv
clR5cGUoY2hpbGQoMCktPnR5cGUoKSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBX
aWR0aDg7CiAgICAgfQogfQogCiBXaWR0aCBNZW1vcnlWYWx1ZTo6YWNjZXNzV2lkdGgoKSBjb25z
dAogewotICAgIHJldHVybiB3aWR0aEZvckJ5dGVzKGFjY2Vzc0J5dGVTaXplKCkpOworICAgIHJl
dHVybiBsb2FkU3RvcmVXaWR0aCgpOwogfQogCiB2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShD
b21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtNjcsNiArODUs
OCBAQCB2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImCiAgICAgaWYgKChp
c0xvYWQoKSAmJiBlZmZlY3RzKCkucmVhZHMgIT0gcmFuZ2UoKSkKICAgICAgICAgfHwgKGlzU3Rv
cmUoKSAmJiBlZmZlY3RzKCkud3JpdGVzICE9IHJhbmdlKCkpKQogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJyYW5nZSA9ICIsIHJhbmdlKCkpOworICAgIGlmIChwaGFudG9tUmFuZ2UoKSkKKyAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAicGhhbnRvbVJhbmdlID0gIiwgcGhhbnRvbVJhbmdlKCkp
OwogfQogCiBWYWx1ZSogTWVtb3J5VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CkBAIC03NCw2ICs5
NCw1OCBAQCBWYWx1ZSogTWVtb3J5VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CiAgICAgcmV0dXJu
IG5ldyBNZW1vcnlWYWx1ZSgqdGhpcyk7CiB9CiAKKy8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQg
KGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEg
c3VmZml4IHRoYXQKKy8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCitNZW1vcnlWYWx1
ZTo6TWVtb3J5VmFsdWUoS2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2Rl
LCBraW5kLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgLCBtX29mZnNldChvZmZzZXQpCit7
CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgc3dpdGNoIChraW5kLm9wY29k
ZSgpKSB7CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoK
KyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNl
IFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9
PSBWb2lkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIFVzZSB0
aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorTWVt
b3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBv
aW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKGtpbmQsIEludDMy
LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCkKK3sKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkg
eworICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBMb2FkOFo6
CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNh
c2UgTG9hZDE2UzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIFVz
ZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KK01lbW9yeVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtp
bmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qg
b2Zmc2V0ID0gMCkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIFZvaWQsIG9yaWdp
biwgdmFsdWUsIHBvaW50ZXIpCisgICAgLCBtX29mZnNldChvZmZzZXQpCit7CisgICAgQVNTRVJU
KGlzU3RvcmUoa2luZC5vcGNvZGUoKSkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
IAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDQ4ICsyNywxNyBA
QAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzQmFuay5oIgogI2luY2x1ZGUg
IkIzSGVhcFJhbmdlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKIAotLy8gRklYTUU6IFdlIHdhbnQgdG8gYWxsb3cgZmVuY2VkIG1lbW9y
eSBhY2Nlc3NlcyBvbiBBUk0uCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYyMzQ5Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeVZhbHVlIDogcHVi
bGljIFZhbHVlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKEtpbmQga2luZCkK
ICAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICBjYXNlIExv
YWQ4WjoKLSAgICAgICAgY2FzZSBMb2FkOFM6Ci0gICAgICAgIGNhc2UgTG9hZDE2WjoKLSAgICAg
ICAgY2FzZSBMb2FkMTZTOgotICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAgIGNhc2UgU3RvcmU4
OgotICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzU3RvcmUoS2luZCBraW5k
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2Ug
U3RvcmU4OgotICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIGNhc2UgU3RvcmU6Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzTG9hZChLaW5k
IGtpbmQpCi0gICAgewotICAgICAgICByZXR1cm4gYWNjZXB0cyhraW5kKSAmJiAhaXNTdG9yZShr
aW5kKTsKKyAgICAgICAgcmV0dXJuIGlzTWVtb3J5KGtpbmQub3Bjb2RlKCkpOwogICAgIH0KIAog
ICAgIH5NZW1vcnlWYWx1ZSgpOwpAQCAtNzgsNzYgKzQ3LDU2IEBAIHB1YmxpYzoKIAogICAgIGNv
bnN0IEhlYXBSYW5nZSYgcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlOyB9CiAgICAgdm9p
ZCBzZXRSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKSB7IG1fcmFuZ2UgPSByYW5nZTsgfQor
ICAgIAorICAgIC8vIFRoaXMgaXMgYW4gYWxpYXMgZm9yIHJhbmdlLgorICAgIGNvbnN0IEhlYXBS
YW5nZSYgYWNjZXNzUmFuZ2UoKSBjb25zdCB7IHJldHVybiByYW5nZSgpOyB9CisgICAgdm9pZCBz
ZXRBY2Nlc3NSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKSB7IHNldFJhbmdlKHJhbmdlKTsg
fQorICAgIAorICAgIGNvbnN0IEhlYXBSYW5nZSYgZmVuY2VSYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZmVuY2VSYW5nZTsgfQorICAgIHZvaWQgc2V0RmVuY2VSYW5nZShjb25zdCBIZWFwUmFuZ2Um
IHJhbmdlKSB7IG1fZmVuY2VSYW5nZSA9IHJhbmdlOyB9CisKKyAgICBib29sIGlzU3RvcmUoKSBj
b25zdCB7IHJldHVybiBpc1N0b3JlKG9wY29kZSgpKTsgfQorICAgIGJvb2wgaXNMb2FkKCkgY29u
c3QgeyByZXR1cm4gaXNMb2FkKG9wY29kZSgpKTsgfQogCi0gICAgYm9vbCBpc1N0b3JlKCkgY29u
c3QgeyByZXR1cm4gdHlwZSgpID09IFZvaWQ7IH0KLSAgICBib29sIGlzTG9hZCgpIGNvbnN0IHsg
cmV0dXJuIHR5cGUoKSAhPSBWb2lkOyB9CisgICAgYm9vbCBoYXNGZW5jZSgpIGNvbnN0IHsgcmV0
dXJuICEhZmVuY2VSYW5nZSgpOyB9CiAKKyAgICBUeXBlIGFjY2Vzc1R5cGUoKSBjb25zdDsKKyAg
ICBCYW5rIGFjY2Vzc0JhbmsoKSBjb25zdDsKICAgICBzaXplX3QgYWNjZXNzQnl0ZVNpemUoKSBj
b25zdDsKLSAgICBXaWR0aCBhY2Nlc3NXaWR0aCgpIGNvbnN0OworICAgIAorICAgIC8vIFNsaWdo
dGx5IGZhc3RlciB2ZXJzaW9uIG9mIGFjY2Vzc1dpZHRoLCBpZiB5b3Uga25vdyB0aGF0IHlvdSdy
ZSB3b3JraW5nIHdpdGggYSBsb2FkIG9yIHN0b3JlLgorICAgIFdpZHRoIGxvYWRTdG9yZVdpZHRo
KCkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCBXaWR0aCBhY2Nlc3NXaWR0aCgpIGNvbnN0Owog
CiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVy
JiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFZhbHVlKiBjbG9uZUltcGwo
KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJl
OwotCi0gICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4
Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAotICAgIC8vIGRl
c2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBU
eXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9
IDApCi0gICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgdHlwZSwgb3JpZ2luLCBw
b2ludGVyKQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBN
ZW1vcnlWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3JpZ2lu
IG9yaWdpbiwgaW50MzJfdCBvZmZzZXQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAg
IDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4p
CiAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAsIG1fcmFuZ2UoSGVhcFJhbmdl
Ojp0b3AoKSkKICAgICB7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgTG9hZDoKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTG9hZDhaOgotICAgICAgICAg
ICAgY2FzZSBMb2FkOFM6Ci0gICAgICAgICAgICBjYXNlIExvYWQxNlo6Ci0gICAgICAgICAgICBj
YXNlIExvYWQxNlM6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgICAg
ICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAgICAg
IEFTU0VSVCh0eXBlID09IFZvaWQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZv
ciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQg
aGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4K
KyAgICBNZW1vcnlWYWx1ZShLaW5kLCBUeXBlLCBPcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQz
Ml90IG9mZnNldCA9IDApOwogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUg
dGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAg
ICA6IE1lbW9yeVZhbHVlKGtpbmQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCkKLSAg
ICB7Ci0gICAgfQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFsdWUqIHBvaW50ZXIs
IGludDMyX3Qgb2Zmc2V0ID0gMCk7CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMu
Ci0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUs
IFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDogVmFsdWUoQ2hl
Y2tlZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKLSAgICAgICAg
LCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6OnRvcCgpKQot
ICAgIHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAgIHN3aXRj
aCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgICAg
ICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFsdWUqIHZhbHVl
LCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKTsKKyAgICAKICAgICBpbnQzMl90
IG1fb2Zmc2V0IHsgMCB9OwotICAgIEhlYXBSYW5nZSBtX3JhbmdlOworICAgIEhlYXBSYW5nZSBt
X3JhbmdlIHsgSGVhcFJhbmdlOjp0b3AoKSB9OworICAgIEhlYXBSYW5nZSBtX2ZlbmNlUmFuZ2Ug
eyBIZWFwUmFuZ2UoKSB9OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1
ZGUgIkIzV2lkdGguaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAKQEAgLTgyLDcgKzgzLDYgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90
IHsKICAgICBNb2QsIC8vIEFsbCBiZXRzIGFyZSBvZmYgYXMgdG8gd2hhdCB3aWxsIGhhcHBlbiB3
aGVuIHlvdSBleGVjdXRlIHRoaXMgZm9yIC0yXjMxJS0xIGFuZCB4JTAuCiAgICAgVU1vZCwKIAot
CiAgICAgLy8gUG9seW1vcnBoaWMgbmVnYXRpb24uIE5vdGUgdGhhdCB3ZSBvbmx5IG5lZWQgdGhp
cyBmb3IgZmxvYXRpbmcgcG9pbnQsIHNpbmNlIGludGVnZXIgbmVnYXRpb24KICAgICAvLyBpcyBl
eGFjdGx5IGxpa2UgU3ViKDAsIHgpLiBCdXQgdGhhdCdzIG5vdCB0cnVlIGZvciBmbG9hdGluZyBw
b2ludC4gU3ViKDAsIDApIGlzIDAsIHdoaWxlCiAgICAgLy8gTmVnKDApIGlzIC0wLiBBbHNvLCB3
ZSBjYW5vbmljYWxpemUgU3ViKDAsIHgpIGludG8gTmVnKHgpIGluIGNhc2Ugb2YgaW50ZWdlcnMu
CkBAIC0xNjIsNiArMTYyLDEwNSBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIFN0b3Jl
MTYsCiAgICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGljIHN0b3JlIGZvciBJbnQzMiwgSW50NjQs
IEZsb2F0LCBhbmQgRG91YmxlLgogICAgIFN0b3JlLAorICAgIAorICAgIC8vIEF0b21pYyBjb21w
YXJlIGFuZCBzd2FwIHRoYXQgcmV0dXJucyBhIGJvb2xlYW4uIE1heSBjaG9vc2UgdG8gZG8gbm90
aGluZyBhbmQgcmV0dXJuIGZhbHNlLiBZb3UgY2FuCisgICAgLy8gdXN1YWxseSBhc3N1bWUgdGhh
dCB0aGlzIGlzIGZhc3RlciBhbmQgcmVzdWx0cyBpbiBsZXNzIGNvZGUgdGhhbiBBdG9taWNTdHJv
bmdDQVMsIHRob3VnaCB0aGF0J3MKKyAgICAvLyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSBvbiBJbnRl
bCwgaWYgaW5zdHJ1Y3Rpb24gc2VsZWN0aW9uIGRvZXMgaXRzIGpvYi4gSW1hZ2luZSB0aGF0IHRo
aXMgb3Bjb2RlIGlzCisgICAgLy8gYXMgaWYgeW91IGRpZCB0aGlzIGF0b21pY2FsbHk6CisgICAg
Ly8KKyAgICAvLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIC8vIGJvb2wgQXRvbWljV2Vha0NB
UyhUIGV4cGVjdGVkVmFsdWUsIFQgbmV3VmFsdWUsIFQqIHB0cikKKyAgICAvLyB7CisgICAgLy8g
ICAgIGlmICghcmFuZCgpKQorICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBSZWFsIHdv
cmxkIGV4YW1wbGUgb2YgdGhpczogY29udGV4dCBzd2l0Y2ggb24gQVJNIHdoaWxlIGRvaW5nIENB
Uy4KKyAgICAvLyAgICAgaWYgKCpwdHIgIT0gZXhwZWN0ZWRWYWx1ZSkKKyAgICAvLyAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAvLyAgICAgKnB0ciA9IG5ld1ZhbHVlOworICAgIC8vICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgYWxsIGF0b21p
Y3MgcHV0IHRoZSBwb2ludGVyIGxhc3QgdG8gYmUgY29uc2lzdGVudCB3aXRoIGhvdyBsb2FkcyBh
bmQgc3RvcmVzIHdvcmsuIFRoaXMKKyAgICAvLyBpcyBhIGdvb2Z5IHRyYWRpdGlvbiwgYnV0IGl0
J3MgaGFybWxlc3MsIGFuZCBiZXR0ZXIgdGhhbiBiZWluZyBpbmNvbnNpc3RlbnQuCisgICAgLy8K
KyAgICAvLyBOb3RlIHRoYXQgd2VhayBDQVMgaGFzIG5vIGZlbmNpbmcgZ3VhcmFudGVlcyB3aGVu
IGl0IGZhaWxzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZworICAgIC8vIHRyYW5zZm9y
bWF0aW9uIGlzIGFsd2F5cyB2YWxpZDoKKyAgICAvLworICAgIC8vIEJlZm9yZToKKyAgICAvLwor
ICAgIC8vICAgICAgICAgQnJhbmNoKEF0b21pY1dlYWtDQVMoZXhwZWN0ZWQsIG5ldywgcHRyKSkK
KyAgICAvLyAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiNzdWNjZXNzLCBFbHNlOiNmYWlsCisgICAg
Ly8KKyAgICAvLyBBZnRlcjoKKyAgICAvLworICAgIC8vICAgICAgICAgQnJhbmNoKEVxdWFsKExv
YWQocHRyKSwgZXhwZWN0ZWQpKQorICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I2F0dGVt
cHQsIEVsc2U6I2ZhaWwKKyAgICAvLyAgICAgQkIjYXR0ZW1wdDoKKyAgICAvLyAgICAgICAgIEJy
YW5jaChBdG9taWNXZWFrQ0FTKGV4cGVjdGVkLCBuZXcsIHB0cikpCisgICAgLy8gICAgICAgU3Vj
Y2Vzc29yczogVGhlbjojc3VjY2VzcywgRWxzZTojZmFpbAorICAgIC8vCisgICAgLy8gQm90aCBr
aW5kcyBvZiBDQVMgZm9yIG5vbi1jYW5vbmljYWwgd2lkdGhzIChXaWR0aDggYW5kIFdpZHRoMTYp
IGlnbm9yZSB0aGUgaXJyZWxldmFudCBiaXRzIG9mIHRoZQorICAgIC8vIGlucHV0LgorICAgIEF0
b21pY1dlYWtDQVMsCisgICAgCisgICAgLy8gQXRvbWljIGNvbXBhcmUgYW5kIHN3YXAgdGhhdCBy
ZXR1cm5zIHRoZSBvbGQgdmFsdWUuIERvZXMgbm90IGhhdmUgdGhlIG5vbmRldGVybWluaXNtIG9m
IFdlYWtDQVMuCisgICAgLy8gVGhpcyBpcyBhIGJpdCBtb3JlIGNvZGUgYW5kIGEgYml0IHNsb3dl
ciBpbiBzb21lIGNhc2VzLCB0aG91Z2ggbm90IGJ5IGEgbG90LiBJbWFnaW5lIHRoYXQgdGhpcwor
ICAgIC8vIG9wY29kZSBpcyBhcyBpZiB5b3UgZGlkIHRoaXMgYXRvbWljYWxseToKKyAgICAvLwor
ICAgIC8vIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgLy8gVCBBdG9taWNTdHJvbmdDQVMoVCBl
eHBlY3RlZFZhbHVlLCBUIG5ld1ZhbHVlLCBUKiBwdHIpCisgICAgLy8geworICAgIC8vICAgICBU
IG9sZFZhbHVlID0gKnB0cjsKKyAgICAvLyAgICAgaWYgKG9sZFZhbHVlID09IGV4cGVjdGVkVmFs
dWUpCisgICAgLy8gICAgICAgICAqcHRyID0gbmV3VmFsdWU7CisgICAgLy8gICAgIHJldHVybiBv
bGRWYWx1ZQorICAgIC8vIH0KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBBdG9taWNXZWFrQ0FT
IGFuZCBBdG9taWNTdHJvbmdDQVMgc29ydCBvZiBoYXZlIHRoaXMga2luZCBvZiBlcXVpdmFsZW5j
ZToKKyAgICAvLworICAgIC8vIEF0b21pY1dlYWtDQVMoQGV4cCwgQG5ldywgQHB0cikgPT0gRXF1
YWwoQXRvbWljU3Ryb25nQ0FTKEBleHAsIEBuZXcsIEBwdHIpLCBAZXhwKQorICAgIC8vCisgICAg
Ly8gQXNzdW1pbmcgdGhhdCB0aGUgV2Vha0NBUyBkb2VzIG5vdCBzcHVyaW91c2x5IGZhaWwsIG9m
IGNvdXJzZS4KKyAgICBBdG9taWNTdHJvbmdDQVMsCisgICAgCisgICAgLy8gQXRvbWljYWxseSBf
X18gYSBtZW1vcnkgbG9jYXRpb24gYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiBTeW50YXg6Cisg
ICAgLy8KKyAgICAvLyBAb2xkVmFsdWUgPSBBdG9taWNYY2hnX19fKEBvcGVyYW5kLCBAcHRyKQor
ICAgIC8vCisgICAgLy8gRm9yIG5vbi1jYW5vbmljYWwgd2lkdGhzIChXaWR0aDggYW5kIFdpZHRo
MTYpLCB0aGVzZSByZXR1cm4gc2lnbi1leHRlbmRlZCByZXN1bHRzIGFuZCBpZ25vcmUgdGhlCisg
ICAgLy8gaXJyZWxldmFudCBiaXRzIG9mIHRoZWlyIGlucHV0cy4KKyAgICBBdG9taWNYY2hnQWRk
LAorICAgIEF0b21pY1hjaGdBbmQsCisgICAgQXRvbWljWGNoZ09yLAorICAgIEF0b21pY1hjaGdT
dWIsCisgICAgQXRvbWljWGNoZ1hvciwKKyAgICAKKyAgICAvLyBBdG9taWNhbGx5IGV4Y2hhbmdl
IGEgdmFsdWUgd2l0aCBhIG1lbW9yeSBsb2NhdGlvbi4gU3ludGF4OgorICAgIC8vCisgICAgLy8g
QG9sZFZhbHVlID0gQXRvbWljWGNoZyhAbmV3VmFsdWUsIEBwdHIpCisgICAgQXRvbWljWGNoZywK
KyAgICAKKyAgICAvLyBJbnRyb2R1Y2UgYW4gaW52aXNpYmxlIGRlcGVuZGVuY3kgZm9yIGJsb2Nr
aW5nIG1vdGlvbiBvZiBsb2FkcyB3aXRoIHJlc3BlY3QgdG8gZWFjaCBvdGhlci4gU3ludGF4Ogor
ICAgIC8vCisgICAgLy8gQHJlc3VsdCA9IERlcGVuZChAcGhhbnRvbSkKKyAgICAvLworICAgIC8v
IFRoaXMgaXMgZXZlbnR1YWxseSBjb2RlZ2VuZXJhdGVkIHRvIGhhdmUgbG9jYWwgc2VtYW50aWNz
IGFzIGlmIHdlIGRpZDoKKyAgICAvLworICAgIC8vIEByZXN1bHQgPSAkMAorICAgIC8vCisgICAg
Ly8gQnV0IGl0IGVuc3VyZXMgdGhhdCB0aGUgdXNlcnMgb2YgQHJlc3VsdCBjYW5ub3QgZXhlY3V0
ZSB1bnRpbCBAcGhhbnRvbSBpcyBjb21wdXRlZC4KKyAgICAvLworICAgIC8vIFRoZSBjb21waWxl
ciBpcyBub3QgYWxsb3dlZCB0byByZWFzb24gYWJvdXQgdGhlIGZhY3QgdGhhdCBEZXBlbmQgY29k
ZWdlbmVyYXRlcyB0aGlzIHdheS4gQW55IGtpbmQKKyAgICAvLyBvZiB0cmFuc2Zvcm1hdGlvbiBv
ciBhbmFseXNpcyB0aGF0IHJlbGllcyBvbiB0aGUgaW5zaWdodCB0aGF0IERlcGVuZCBpcyByZWFs
bHkgemVybyBpcyB1bnNvdW5kLAorICAgIC8vIGJlY2F1c2UgaXQgdW5sb2NrcyByZW9yZGVyaW5n
IG9mIHVzZXJzIG9mIEByZXN1bHQgYW5kIEBwaGFudG9tLgorICAgIC8vCisgICAgLy8gT24gWDg2
LCB0aGlzIGlzIGxvd2VyZWQgdG8gYSBsb2FkLWxvYWQgZmVuY2UgYW5kIEByZXN1bHQgdXNlcyBA
cGhhbnRvbSBkaXJlY3RseS4KKyAgICAvLworICAgIC8vIE9uIEFSTSwgdGhpcyBpcyBsb3dlcmVk
IGFzIGlmIGxpa2U6CisgICAgLy8KKyAgICAvLyBAcmVzdWx0ID0gQml0WG9yKEBwaGFudG9tLCBA
cGhhbnRvbSkKKyAgICAvLworICAgIC8vIEV4Y2VwdCB0aGF0IHRoZSBjb21waWxlciBuZXZlciBn
ZXRzIGFuIG9wcG9ydHVuaXR5IHRvIHNpbXBsaWZ5IG91dCB0aGUgQml0WG9yLgorICAgIERlcGVu
ZCwKIAogICAgIC8vIFRoaXMgaXMgdXNlZCB0byBjb21wdXRlIHRoZSBhY3R1YWwgYWRkcmVzcyBv
ZiBhIFdhc20gbWVtb3J5IG9wZXJhdGlvbi4gSXQgdGFrZXMgYW4gSW50UHRyCiAgICAgLy8gYW5k
IGEgcGlubmVkIHJlZ2lzdGVyIHRoZW4gY29tcHV0ZXMgdGhlIGFwcHJvcHJpYXRlIEludFB0ciBh
ZGRyZXNzLiBGb3IgdGhlIHVzZS1jYXNlIG9mCkBAIC0zMDEsNiArNDAwLDExMCBAQCBpbmxpbmUg
Ym9vbCBpc0RlZmluaXRlbHlUZXJtaW5hbChPcGNvZGUgCiAgICAgfQogfQogCitpbmxpbmUgYm9v
bCBpc0xvYWQoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNh
c2UgTG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2WjoKKyAgICBjYXNl
IExvYWQxNlM6CisgICAgY2FzZSBMb2FkOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc1N0
b3JlKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIFN0
b3JlODoKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
aW5saW5lIGJvb2wgaXNMb2FkU3RvcmUoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9w
Y29kZSkgeworICAgIGNhc2UgTG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9h
ZDE2WjoKKyAgICBjYXNlIExvYWQxNlM6CisgICAgY2FzZSBMb2FkOgorICAgIGNhc2UgU3RvcmU4
OgorICAgIGNhc2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxp
bmUgYm9vbCBpc0F0b21pYyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7
CisgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAg
IGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBB
dG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNo
Z1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlz
QXRvbWljQ0FTKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBj
YXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK2lubGluZSBib29sIGlzQXRvbWljWGNoZyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRj
aCAob3Bjb2RlKSB7CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNo
Z0FuZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6Cisg
ICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworaW5saW5lIGJvb2wgaXNNZW1vcnlBY2Nlc3MoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICByZXR1
cm4gaXNBdG9taWMob3Bjb2RlKSB8fCBpc0xvYWRTdG9yZShvcGNvZGUpOworfQorCitpbmxpbmUg
T3Bjb2RlIHNpZ25FeHRlbmRPcGNvZGUoV2lkdGggd2lkdGgpCit7CisgICAgc3dpdGNoICh3aWR0
aCkgeworICAgIGNhc2UgV2lkdGg4OgorICAgICAgICByZXR1cm4gU0V4dDg7CisgICAgY2FzZSBX
aWR0aDE2OgorICAgICAgICByZXR1cm4gU0V4dDE2OworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBPb3BzOworICAgIH0K
K30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDIsNiArMjAyLDggQEAgdm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgYwogICAgICAgICB9CiAgICAgICAgIGRhdGFMb2coIiAgICAiLCBkZWVwRHVtcCgqdGhp
cywgdmFsdWUpLCAiXG4iKTsKICAgICB9CisgICAgaWYgKGhhc1F1aXJrcygpKQorICAgICAgICBv
dXQucHJpbnQoIkhhcyBRdWlya3M6IFRydWVcbiIpOwogICAgIGlmICh2YXJpYWJsZXMoKS5zaXpl
KCkpIHsKICAgICAgICAgb3V0LnByaW50KCJWYXJpYWJsZXM6XG4iKTsKICAgICAgICAgZm9yIChW
YXJpYWJsZSogdmFyaWFibGUgOiB2YXJpYWJsZXMoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3IEBA
IHB1YmxpYzoKICAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoT3JpZ2luLCBUeXBlLCBpbnQ2NF90
IHZhbHVlKTsKICAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoVmFsdWUqLCBpbnQ2NF90IHZhbHVl
KTsKIAorICAgIC8vIFlvdSdyZSBndWFyYW50ZWVkIHRoYXQgYm90dG9tIGlzIHplcm8uCiAgICAg
VmFsdWUqIGFkZEJvdHRvbShPcmlnaW4sIFR5cGUpOwogICAgIFZhbHVlKiBhZGRCb3R0b20oVmFs
dWUqKTsKIApAQCAtMTk1LDYgKzE5NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gYWxpdmUuIEdyZWF0
IGZvciBjb21waWxlci1nZW5lcmF0ZWQgZGF0YSBzZWN0aW9ucywgbGlrZSBzd2l0Y2gganVtcCB0
YWJsZXMgYW5kIGNvbnN0YW50IHBvb2xzLgogICAgIC8vIFRoaXMgcmV0dXJucyBtZW1vcnkgdGhh
dCBoYXMgYmVlbiB6ZXJvLWluaXRpYWxpemVkLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQq
IGFkZERhdGFTZWN0aW9uKHNpemVfdCk7CisgICAgCisgICAgLy8gU29tZSBvcGVyYXRpb25zIGFy
ZSBzcGVjaWZpZWQgaW4gQjMgSVIgdG8gYmVoYXZlIG9uZSB3YXkgYnV0IG9uIHRoaXMgZ2l2ZW4g
Q1BVIHRoZXkgYmVoYXZlIGEKKyAgICAvLyBkaWZmZXJlbnQgd2F5LiBXaGVuIHRydWUsIHRob3Nl
IEIzIElSIG9wcyBzd2l0Y2ggdG8gYmVoYXZpbmcgdGhlIENQVSB3YXksIGFuZCB0aGUgb3B0aW1p
emVyIG1heQorICAgIC8vIHN0YXJ0IHRha2luZyBhZHZhbnRhZ2Ugb2YgaXQuCisgICAgYm9vbCBo
YXNRdWlya3MoKSBjb25zdCB7IHJldHVybiBtX2hhc1F1aXJrczsgfQorICAgIHZvaWQgc2V0SGFz
UXVpcmtzKGJvb2wgdmFsdWUpIHsgbV9oYXNRdWlya3MgPSB2YWx1ZTsgfQogCiAgICAgT3BhcXVl
Qnlwcm9kdWN0cyYgYnlwcm9kdWN0cygpIHsgcmV0dXJuICptX2J5cHJvZHVjdHM7IH0KIApAQCAt
MjUyLDYgKzI1OSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChQcmlu
dFN0cmVhbSYsIE9yaWdpbik+PiBtX29yaWdpblByaW50ZXI7CiAgICAgY29uc3Qgdm9pZCogbV9m
cm9udGVuZERhdGE7CiAgICAgUENUb09yaWdpbk1hcCBtX3BjVG9PcmlnaW5NYXA7CisgICAgYm9v
bCBtX2hhc1F1aXJrcyB7IGZhbHNlIH07CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5NSw2ICsxMjk1LDE2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQ4KEF0b21pY1hjaGdfX18pCisg
ICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBdG9taWNYY2hnX19fCisgICAgICAgICAgICAg
ICAgaWYgKGlzQXRvbWljWGNoZyhtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpCisgICAgICAg
ICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5hczxBdG9taWNWYWx1ZT4oKS0+b3Bl
cmF0aW9uV2lkdGgoKSA9PSBXaWR0aDgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgU0V4dDE2OgpAQCAtMTM0Myw2ICsxMzUzLDE2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihBdG9taWNYY2hnX19fKQorICAgICAgICAgICAgICAg
IC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXworICAgICAgICAgICAgICAgIGlmIChpc0F0b21p
Y1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpKQorICAgICAgICAgICAgICAgICAgICAm
JiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRvbWljVmFsdWU+KCktPm9wZXJhdGlvbldpZHRoKCkg
PT0gV2lkdGgxNikgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1f
dmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBTRXh0MzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw2ICszNDYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUp
KTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBw
b2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgdmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0Fj
Y2Vzcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIExv
YWQ6CkBAIC0zNTMsNiArMzU0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwg
KCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgp
ICE9IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVGZW5j
ZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFN0b3JlODoKQEAgLTM2Miw2
ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxk
KDApLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAi
LCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZv
aWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVGZW5jZSh2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFN0b3JlOgpAQCAtMzY5LDggKzM3Miw0
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVu
KCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwog
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAq
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAg
ICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMywgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDAp
LT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPmNoaWxkKDApLT50eXBlKCkpLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgy
KS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlU3Rh
Y2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5k
KCkuaXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5udW1DaGlsZHJlbigpID09IDMsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgp
ID09IHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgyKS0+dHlwZSgpID09IHBvaW50
ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9t
aWModmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnQWRkOgor
ICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgICAgICAgICAgY2FzZSBBdG9taWNY
Y2hnT3I6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgICAgICAgICBjYXNl
IEF0b21pY1hjaGdYb3I6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9
PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVy
VHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlQXRvbWlj
KHZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRGVwZW5kOgorICAgICAgICAg
ICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2
YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09
IDEsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5
cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgV2FzbUFkZHJlc3M6
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCks
ICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNo
aWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKQEAgLTUzNyw2ICs1ODEsMjAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIHZv
aWQgdmFsaWRhdGVGZW5jZShWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBNZW1vcnlWYWx1
ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICBpZiAobWVtb3J5
LT5oYXNGZW5jZSgpKQorICAgICAgICAgICAgVkFMSURBVEUobWVtb3J0eS0+YWNjZXNzQmFuaygp
ID09IEdQLCAoIkZlbmNlIGF0ICIsICptZW1vcnkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2
YWxpZGF0ZUF0b21pYyhWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBBdG9taWNWYWx1ZSog
YXRvbWljID0gdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAKKyAgICAgICAgVkFM
SURBVEUoYmVzdFR5cGUoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSA9PSBhdG9taWMtPm9wZXJh
dGlvblR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICB9CiAKICAgICB2b2lkIHZhbGlkYXRl
U3RhY2tBY2Nlc3MoVmFsdWUqIHZhbHVlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEwLDYgKzUxMCw3IEBAIGJvb2wg
VmFsdWU6OnJldHVybnNCb29sKCkgY29uc3QKICAgICBjYXNlIEFib3ZlRXF1YWw6CiAgICAgY2Fz
ZSBCZWxvd0VxdWFsOgogICAgIGNhc2UgRXF1YWxPclVub3JkZXJlZDoKKyAgICBjYXNlIEF0b21p
Y1dlYWtDQVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgUGhpOgogICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSBzdG9yeSBoZXJlLgpAQCAtNTg5LDYgKzU5MCw3IEBA
IEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgIGNhc2UgQmVsb3dFcXVhbDoKICAg
ICBjYXNlIEVxdWFsT3JVbm9yZGVyZWQ6CiAgICAgY2FzZSBTZWxlY3Q6CisgICAgY2FzZSBEZXBl
bmQ6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRGl2OgogICAgIGNhc2UgVURpdjoKQEAgLTYw
MCwxNiArNjAyLDQ0IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgIGNhc2Ug
TG9hZDhTOgogICAgIGNhc2UgTG9hZDE2WjoKICAgICBjYXNlIExvYWQxNlM6Ci0gICAgY2FzZSBM
b2FkOgotICAgICAgICByZXN1bHQucmVhZHMgPSBhczxNZW1vcnlWYWx1ZT4oKS0+cmFuZ2UoKTsK
KyAgICBjYXNlIExvYWQ6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9y
eVZhbHVlPigpOworICAgICAgICByZXN1bHQucmVhZHMgPSBtZW1vcnktPnJhbmdlKCk7CisgICAg
ICAgIGlmIChtZW1vcnktPnBoYW50b21SYW5nZSgpKSB7CisgICAgICAgICAgICByZXN1bHQud3Jp
dGVzID0gbWVtb3J5LT5waGFudG9tUmFuZ2UoKTsKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9
IHRydWU7CisgICAgICAgIH0KICAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVl
OwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBTdG9yZTg6CiAgICAgY2FzZSBTdG9y
ZTE2OgotICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgIHJlc3VsdC53cml0ZXMgPSBhczxNZW1vcnlW
YWx1ZT4oKS0+cmFuZ2UoKTsKKyAgICBjYXNlIFN0b3JlOiB7CisgICAgICAgIE1lbW9yeVZhbHVl
KiBtZW1vcnkgPSBhczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LndyaXRlcyA9IG1l
bW9yeS0+cmFuZ2UoKTsKKyAgICAgICAgaWYgKG1lbW9yeS0+cGhhbnRvbVJhbmdlKCkpIHsKKyAg
ICAgICAgICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+cGhhbnRvbVJhbmdlKCk7CisgICAgICAg
ICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5jb250
cm9sRGVwZW5kZW50ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXRv
bWljV2Vha0NBUzoKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICBjYXNlIEF0b21pY1hj
aGdBZGQ6CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgor
ICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2Fz
ZSBBdG9taWNYY2hnOiB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBhczxNZW1vcnlW
YWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5LT5yYW5nZSgpIHwgbWVtb3J5
LT5waGFudG9tUmFuZ2UoKTsKKyAgICAgICAgcmVzdWx0LndyaXRlcyA9IG1lbW9yeS0+cmFuZ2Uo
KSB8IG1lbW9ydHktPnBoYW50b21SYW5nZSgpOworICAgICAgICBpZiAobWVtb3J5LT5waGFudG9t
UmFuZ2UoKSkKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIHJlc3Vs
dC5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNh
c2UgV2FzbUFkZHJlc3M6CiAgICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAg
ICAgIGJyZWFrOwpAQCAtNjE3LDE4ICs2NDcsNyBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkg
Y29uc3QKICAgICAgICAgY29uc3QgRmVuY2VWYWx1ZSogZmVuY2UgPSBhczxGZW5jZVZhbHVlPigp
OwogICAgICAgICByZXN1bHQucmVhZHMgPSBmZW5jZS0+cmVhZDsKICAgICAgICAgcmVzdWx0Lndy
aXRlcyA9IGZlbmNlLT53cml0ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIFByZXZlbnQga2lsbGlu
ZyBvZiBmZW5jZXMgdGhhdCBjbGFpbSBub3QgdG8gd3JpdGUgYW55dGhpbmcuIEl0J3MgYSBiaXQg
d2VpcmQgdGhhdCB3ZSB1c2UKLSAgICAgICAgLy8gbG9jYWwgc3RhdGUgYXMgdGhlIHdheSB0byBk
byB0aGlzLCBidXQgaXQgaGFwcGVucyB0byB3b3JrOiB3ZSBtdXN0IGFzc3VtZSB0aGF0IHdlIGNh
bm5vdAotICAgICAgICAvLyBraWxsIHdyaXRlc0xvY2FsU3RhdGUgdW5sZXNzIHdlIHVuZGVyc3Rh
bmRzIGV4YWN0bHkgd2hhdCB0aGUgaW5zdHJ1Y3Rpb24gaXMgZG9pbmcgKGxpa2UKLSAgICAgICAg
Ly8gdGhlIHdheSB0aGF0IGZpeFNTQSB1bmRlcnN0YW5kcyBTZXQvR2V0IGFuZCB0aGUgd2F5IHRo
YXQgcmVkdWNlU3RyZW5ndGggYW5kIG90aGVycwotICAgICAgICAvLyB1bmRlcnN0YW5kIFVwc2ls
b24pLiBUaGlzIHdvdWxkIG9ubHkgYmVjb21lIGEgcHJvYmxlbSBpZiB3ZSBoYWQgc29tZSBhbmFs
eXNpcyB0aGF0IHdhcwotICAgICAgICAvLyBsb29raW5nIHRvIHVzZSB0aGUgd3JpdGVzTG9jYWxT
dGF0ZSBiaXQgdG8gaW52YWxpZGF0ZSBhIENTRSBvdmVyIGxvY2FsIHN0YXRlIG9wZXJhdGlvbnMu
Ci0gICAgICAgIC8vIFRoZW4gYSBGZW5jZSB3b3VsZCBsb29rIGJsb2NrLCBzYXksIHRoZSBlbGlt
aW5hdGlvbiBvZiBhIHJlZHVuZGFudCBHZXQuIEJ1dCBpdCBsaWtlCi0gICAgICAgIC8vIHRoYXQn
cyBub3QgYXQgYWxsIGhvdyBvdXIgb3B0aW1pemF0aW9ucyBmb3IgU2V0L0dldC9VcHNpbG9uL1Bo
aSB3b3JrIC0gdGhleSBncm9rIHRoZWlyCi0gICAgICAgIC8vIG9wZXJhdGlvbnMgZGVlcGx5IGVu
b3VnaCB0aGF0IHRoZXkgaGF2ZSBubyBuZWVkIHRvIGNoZWNrIHRoaXMgYml0IC0gc28gdGhpcyBj
aGVhdCBpcwotICAgICAgICAvLyBmaW5lLgotICAgICAgICByZXN1bHQud3JpdGVzTG9jYWxTdGF0
ZSA9IHRydWU7CisgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIENDYWxsOgpAQCAtNjk0LDYgKzcxMyw3IEBAIFZhbHVlS2V5IFZhbHVl
OjprZXkoKSBjb25zdAogICAgIGNhc2UgQ2hlY2s6CiAgICAgY2FzZSBCaXR3aXNlQ2FzdDoKICAg
ICBjYXNlIE5lZzoKKyAgICBjYXNlIERlcGVuZDoKICAgICAgICAgcmV0dXJuIFZhbHVlS2V5KGtp
bmQoKSwgdHlwZSgpLCBjaGlsZCgwKSk7CiAgICAgY2FzZSBBZGQ6CiAgICAgY2FzZSBTdWI6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2
ICsxMDcsOCBAQCBwdWJsaWM6CiAgICAgLy8gdmFsdWVzIHdpdGggSWRlbnRpdGllcyBvbiBib3R0
b20gY29uc3RhbnRzLiBGb3IgdGhpcyByZWFzb24sIHRoaXMgdGFrZXMgYSBjYWxsYmFjayB0aGF0
IGlzCiAgICAgLy8gcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGJvdHRvbXMuIFRoZXJlJ3MgYSB1
dGlsaXR5IGZvciB0aGlzLCBzZWUgQjNCb3R0b21Qcm92aWRlci5oLiBZb3UKICAgICAvLyBjYW4g
YWxzbyBhY2Nlc3MgdGhhdCB1dGlsaXR5IHVzaW5nIHJlcGxhY2VXaXRoQm90dG9tKEluc2VydGlv
blNldCYsIHNpemVfdCkuCisgICAgLy8KKyAgICAvLyBZb3UncmUgZ3VhcmFudGVlZCB0aGF0IGJv
dHRvbSBpcyB6ZXJvLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJvdHRvbVByb3ZpZGVyPgogICAg
IHZvaWQgcmVwbGFjZVdpdGhCb3R0b20oY29uc3QgQm90dG9tUHJvdmlkZXImKTsKICAgICAKQEAg
LTMyMSw2ICszMjMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElUb0Y6CiAgICAgICAgIGNh
c2UgQml0d2lzZUNhc3Q6CiAgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIERlcGVu
ZDoKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShudW1BcmdzICE9IDEpKQogICAgICAgICAgICAg
ICAgIGJhZEtpbmQoa2luZCwgbnVtQXJncyk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsMzggQEAKIAogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworVHlwZSBiZXN0VHlwZShCYW5rIGJhbmssIFdpZHRoIHdpZHRo
KQoreworICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICBjYXNlIFdpZHRoODoKKyAgICBjYXNlIFdp
ZHRoMTY6CisgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAg
ICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICAgICAgY2FzZSBGUDoK
KyAgICAgICAgICAgIHJldHVybiBGbG9hdDsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVm9pZDsKKyAgICBjYXNlIFdpZHRo
NjQ6CisgICAgICAgIHN3aXRjaCAoYmFuaykgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAg
ICAgcmV0dXJuIEludDY0OworICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIERv
dWJsZTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gVm9pZDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gVm9pZDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
IG5hbWVzcGFjZSBXVEYgewogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
SlNDOjpCMzo6V2lkdGggd2lkdGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNX
aWR0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDE4IEBAIGlubGluZSBXaWR0aCB3aWR0aEZvclR5
cGUoVHlwZSB0eXBlKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCitpbmxpbmUgV2lk
dGggY2Fub25pY2FsV2lkdGgoV2lkdGggd2lkdGgpCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KFdp
ZHRoMzIsIHdpZHRoKTsKK30KKworaW5saW5lIFdpZHRoIGlzQ2Fub25pY2FsV2lkdGgoV2lkdGgg
d2lkdGgpCit7CisgICAgcmV0dXJuIHdpZHRoID49IFdpZHRoMzI7Cit9CisKK1R5cGUgYmVzdFR5
cGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0aCk7CisKIGlubGluZSBXaWR0aCBjb25zZXJ2YXRpdmVX
aWR0aChCYW5rIGJhbmspCiB7CiAgICAgcmV0dXJuIGJhbmsgPT0gR1AgPyBwb2ludGVyV2lkdGgo
KSA6IFdpZHRoNjQ7CkBAIC05Myw2ICsxMDUsMjAgQEAgaW5saW5lIFdpZHRoIHdpZHRoRm9yQnl0
ZXModW5zaWduZWQgYnl0ZQogICAgIH0KIH0KIAoraW5saW5lIHVpbnQ2NF90IG1hc2soV2lkdGgg
d2lkdGgpCit7CisgICAgc3dpdGNoICh3aWR0aCkgeworICAgIGNhc2UgV2lkdGg4OgorICAgICAg
ICByZXR1cm4gMHgwMDAwMDAwMDAwMDAwMGZmbGx1OworICAgIGNhc2UgV2lkdGgxNjoKKyAgICAg
ICAgcmV0dXJuIDB4MDAwMDAwMDAwMDAwZmZmZmxsdTsKKyAgICBjYXNlIFdpZHRoMzI6CisgICAg
ICAgIHJldHVybiAweDAwMDAwMDAwZmZmZmZmZmZsbHU7CisgICAgY2FzZSBXaWR0aDY0OgorICAg
ICAgICByZXR1cm4gMHhmZmZmZmZmZmZmZmZmZmZmbGx1OworICAgIH0KK30KKwogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAy
LDcgQEAgdW5zaWduZWQgQXJnOjpqc0hhc2goKSBjb25zdAogICAgIGNhc2UgUmVsQ29uZDoKICAg
ICBjYXNlIFJlc0NvbmQ6CiAgICAgY2FzZSBEb3VibGVDb25kOgorICAgIGNhc2UgU3RhdHVzQ29u
ZDoKICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fb2Zmc2V0KTsKICAgICAgICAgYnJlYWs7CkBAIC0xODIsNiArMTgzLDkgQEAgdm9p
ZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBjYXNlIERvdWJsZUNvbmQ6
CiAgICAgICAgIG91dC5wcmludChhc0RvdWJsZUNvbmRpdGlvbigpKTsKICAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgU3RhdHVzQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzU3RhdHVzQ29uZGl0
aW9uKCkpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBvdXQu
cHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI0MSw2
ICsyNDUsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAgICAg
Y2FzZSBBcmc6OkRvdWJsZUNvbmQ6CiAgICAgICAgIG91dC5wcmludCgiRG91YmxlQ29uZCIpOwog
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OlN0YXR1c0NvbmQ6CisgICAgICAgIG91dC5w
cmludCgiU3RhdHVzQ29uZCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OlNwZWNp
YWw6CiAgICAgICAgIG91dC5wcmludCgiU3BlY2lhbCIpOwogICAgICAgICByZXR1cm47CkBAIC0y
ODUsNiArMjkyLDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZwog
ICAgIGNhc2UgQXJnOjpFYXJseURlZjoKICAgICAgICAgb3V0LnByaW50KCJFYXJseURlZiIpOwog
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkVhcmx5WkRlZjoKKyAgICAgICAgb3V0LnBy
aW50KCJFYXJseVpEZWYiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpTY3JhdGNo
OgogICAgICAgICBvdXQucHJpbnQoIlNjcmF0Y2giKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Miw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgUmVsQ29uZCwKICAgICAgICAgUmVzQ29uZCwK
ICAgICAgICAgRG91YmxlQ29uZCwKKyAgICAgICAgU3RhdHVzQ29uZCwKICAgICAgICAgU3BlY2lh
bCwKICAgICAgICAgV2lkdGhBcmcKICAgICB9OwpAQCAtMTUxLDYgKzE1Miw4IEBAIHB1YmxpYzoK
ICAgICAgICAgLy8gYXMgVXNlIGhhcyB1bmRlZmluZWQgYmVoYXZpb3I6IHRoZSB1c2UgbWF5IGhh
cHBlbiBiZWZvcmUgdGhlIGRlZiwgb3IgaXQgbWF5IGhhcHBlbiBhZnRlcgogICAgICAgICAvLyBp
dC4KICAgICAgICAgRWFybHlEZWYsCisgICAgICAgICAgICAKKyAgICAgICAgRWFybHlaRGVmLAog
CiAgICAgICAgIC8vIFNvbWUgaW5zdHJ1Y3Rpb25zIG5lZWQgYSBzY3JhdGNoIHJlZ2lzdGVyLiBX
ZSBtb2RlbCB0aGlzIGJ5IHNheWluZyB0aGF0IHRoZSB0ZW1wb3JhcnkgaXMKICAgICAgICAgLy8g
ZGVmaW5lZCBlYXJseSBhbmQgdXNlZCBsYXRlLiBUaGlzIHJvbGUgaW1wbGllcyB0aGF0LgpAQCAt
MTg2LDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNl
IFVzZUFkZHI6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVm
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMjA2LDYgKzIxMCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBV
c2VBZGRyOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6Cisg
ICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjI4LDYgKzIzMyw3IEBAIHB1
YmxpYzoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAg
ICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAg
cmV0dXJuIHJvbGU7CiAgICAgICAgIGNhc2UgVXNlOgogICAgICAgICAgICAgcmV0dXJuIENvbGRV
c2U7CkBAIC0yNTMsNiArMjU5LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIExhdGVDb2xkVXNl
OgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAg
IGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjc0LDYgKzI4MSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2Ug
RWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjk0LDYg
KzMwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZVpE
ZWY6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAg
ICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpA
QCAtMzE1LDYgKzMyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAg
Y2FzZSBFYXJseVpEZWY6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CkBAIC0zMzAsNiArMzQwLDcgQEAgcHVibGljOgogICAgICAgICBj
YXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToKICAgICAgICAgY2FzZSBFYXJseURl
ZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAg
ICAgY2FzZSBMYXRlQ29sZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM1OCw2
ICszNjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNh
c2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtNTMzLDYgKzU0NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCisgICAgc3RhdGljIEFyZyBzdGF0dXNDb25kKE1hY3JvQXNzZW1ibGVy
OjpTdGF0dXNDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YXR1c0NvbmQ7CisgICAgICAgIHJlc3VsdC5tX29m
ZnNldCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBz
dGF0aWMgQXJnIHNwZWNpYWwoQWlyOjpTcGVjaWFsKiBzcGVjaWFsKQogICAgIHsKICAgICAgICAg
QXJnIHJlc3VsdDsKQEAgLTY1OCwxMiArNjc4LDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGtpbmQoKSA9PSBEb3VibGVDb25kOwogICAgIH0KIAorICAgIGJvb2wgaXNTdGF0dXNDb25kKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3RhdHVzQ29uZDsKKyAgICB9
CisKICAgICBib29sIGlzQ29uZGl0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAo
a2luZCgpKSB7CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgog
ICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtODUxLDYgKzg3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWxDb25k
OgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKKyAgICAg
ICAgY2FzZSBTdGF0dXNDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CiAgICAgICAgIGNhc2Ug
V2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg3Miw2ICs4OTksNyBAQCBw
dWJsaWM6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAg
ICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAg
Y2FzZSBTcGVjaWFsOgogICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICBjYXNlIEludmFs
aWQ6CkBAIC0xMDU4LDYgKzEwODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoK
ICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAg
IGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBjYXNlIFdp
ZHRoQXJnOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTc3LDYgKzEyMDYsMTIgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUNvbmRpdGlvbj4obV9vZmZzZXQpOwogICAgIH0KICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
U3RhdHVzQ29uZGl0aW9uIGFzU3RhdHVzQ29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc1N0YXR1c0NvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNy
b0Fzc2VtYmxlcjo6U3RhdHVzQ29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorICAgIAogICAg
IC8vIFRlbGxzIHlvdSBpZiB0aGUgQXJnIGlzIGludmVydGlibGUuIE9ubHkgY29uZGl0aW9uIGFy
Z3VtZW50cyBhcmUgaW52ZXJ0aWJsZSwgYW5kIGV2ZW4gZm9yIHRob3NlLCB0aGVyZQogICAgIC8v
IGFyZSBhIGZldyBleGNlcHRpb25zIC0gbm90YWJseSBPdmVyZmxvdyBhbmQgU2lnbmVkLgogICAg
IGJvb2wgaXNJbnZlcnRpYmxlKCkgY29uc3QKQEAgLTExODQsNiArMTIxOSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAg
ICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXI6OmlzSW52ZXJ0aWJsZShhc1Jlc3VsdENvbmRpdGlvbigpKTsKQEAgLTEy
MDQsNiArMTI0MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiByZXNDb25kKE1hY3Jv
QXNzZW1ibGVyOjppbnZlcnQoYXNSZXN1bHRDb25kaXRpb24oKSkpOwogICAgICAgICBjYXNlIERv
dWJsZUNvbmQ6CiAgICAgICAgICAgICByZXR1cm4gZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6
aW52ZXJ0KGFzRG91YmxlQ29uZGl0aW9uKCkpKTsKKyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgor
ICAgICAgICAgICAgcmV0dXJuIHN0YXR1c0NvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc1N0
YXR1c0NvbmRpdGlvbigpKSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlCiAKIGNvbnN0IGNoYXIqIGNvbnN0IEJhc2ljQmxvY2s6
OmR1bXBQcmVmaXggPSAiIyI7CiAKK3ZvaWQgQmFzaWNCbG9jazo6c2V0U3VjY2Vzc29ycyhCYXNp
Y0Jsb2NrKiBibG9jaykKK3sKKyAgICBtX3N1Y2Nlc3NvcnMucmVzaXplKDEpOworICAgIG1fc3Vj
Y2Vzc29yc1swXSA9IHRhcmdldDsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpzZXRTdWNjZXNzb3Jz
KEZyZXF1ZW50ZWRCbG9jayB0YWtlbiwgRnJlcXVlbnRlZEJsb2NrIG5vdFRha2VuKQoreworICAg
IG1fc3VjY2Vzc29ycy5yZXNpemUoMik7CisgICAgbV9zdWNjZXNzb3JzWzBdID0gdGFrZW47Cisg
ICAgbV9zdWNjZXNzb3JzWzFdID0gbm90VGFrZW47Cit9CisKIGJvb2wgQmFzaWNCbG9jazo6YWRk
UHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgcmV0dXJuIEIzOjphZGRQcmVk
ZWNlc3Nvcih0aGlzLCBibG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5
LDkgQEAgcHVibGljOgogICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25z
dCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KICAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3Jz
KCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CiAKKyAgICB2b2lkIHNldFN1Y2Nlc3NvcnMoRnJl
cXVlbnRlZEJsb2NrKTsKKyAgICB2b2lkIHNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrLCBG
cmVxdWVudGVkQmxvY2spOworCiAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsgfQogICAg
IEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gc3Vj
Y2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CiAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Js
b2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2Vy
dGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyQmxvY2tJbnNlcnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1
ZGUgPHd0Zi9CdWJibGVTb3J0Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KENv
ZGUgJmNvZGUpCisgICAgOiBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQoY29kZS5tX2Jsb2NrcykK
K3sKK30KKworQmxvY2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpCit7Cit9CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRp
b25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJs
b2NrSW5zZXJ0aW9uU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNHZW5lcmljQmxv
Y2tJc25lcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSA8d3RmL0lu
c2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK3R5
cGVkZWYgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+OjpCbG9ja0luc2VydGlv
biBCbG9ja0luc2VydGlvbjsKKworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgOiBwdWJsaWMgR2Vu
ZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+IHsKK3B1YmxpYzoKKyAgICBCbG9ja0lu
c2VydGlvblNldChDb2RlJik7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IGltcGxlbWVudCBCMzo6QmxvY2tJbnNlcnRp
b25TZXQncyBzcGxpdEZvcndhcmQoKS4KK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTczLDYgKzczLDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQog
ICAgICAgICBkYXRhTG9nKCJJbml0aWFsIGFpcjpcbiIpOwogICAgICAgICBkYXRhTG9nKGNvZGUp
OwogICAgIH0KKyAgICAKKyAgICBzaW1wbGlmeUNGRyhjb2RlKTsKIAogICAgIGxvd2VyTWFjcm9z
KGNvZGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5v
cGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bj
b2RlLm9wY29kZXMJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0j
IENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NjgsMjggKzY2OCwzNzkgQEAgTG9h
ZDggVTpHOjgsIFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRB
Y3E4IFU6Rzo4LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBTdG9y
ZTggVTpHOjgsIEQ6Rzo4CiAgICAgVG1wLCBJbmRleAogICAgIFRtcCwgQWRkcgogICAgIHg4Njog
SW1tLCBJbmRleAogICAgIHg4NjogSW1tLCBBZGRyCiAKK1N0b3JlUmVsOCBVOkc6OCwgRDpHOjgK
KyAgICBUbXAsIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisgICAg
eDg2OiBJbW0sIEFkZHIKKwogTG9hZDhTaWduZWRFeHRlbmRUbzMyIFU6Rzo4LCBaRDpHOjMyCiAg
ICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIg
VTpHOjgsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIExvYWQxNiBV
Okc6MTYsIFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3Ex
NiBVOkc6MTYsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIExvYWQx
NlNpZ25lZEV4dGVuZFRvMzIgVTpHOjE2LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5k
ZXgsIFRtcAogCitMb2FkQWNxMTZTaWduZWRFeHRlbmRUbzMyIFU6RzoxNiwgWkQ6RzozMgorICAg
IEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogU3RvcmUxNiBVOkc6MTYsIEQ6RzoxNgogICAg
IFRtcCwgSW5kZXgKICAgICBUbXAsIEFkZHIKIAorU3RvcmVBY3ExNiBVOkc6MTYsIEQ6RzoxNgor
ICAgIFRtcCwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKworTG9hZEFjcTMyIFU6RzozMiBaRDpHOjMy
CisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK1N0b3JlUmVs
MzIgVTpHOjMyIFpEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisgICAgeDg2
OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKworNjQ6IExvYWRBY3E2NCBVOkc6NjQg
WkQ6Rzo2NAorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCis2
NDogU3RvcmVSZWw2NCBVOkc6NjQgWkQ6Rzo2NAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5k
ZXgKKyAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorCisjIFRoZSBmaXJz
dCBvcGVyYW5kIGlzIHJheC4KK3g4NjogTG9ja0NtcFhjaGc4IFU6RzozMiwgVUQ6Rzo4LCBVOkc6
OCwgVUQ6Rzo4LCBaRDpHOjgKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIsIFRtcAor
ICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgsIFRtcAorCit4ODY6IExvY2tDbXBYY2hn
MTYgVTpHOjMyLCBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYsIFpEOkc6OAorICAgIFN0YXR1c0Nv
bmQsIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRl
eCwgVG1wCisKK3g4NjogTG9ja0NtcFhjaGczMiBVOkc6MzIsIFVEOkc6MzIsIFU6RzozMiwgVUQ6
RzozMiwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBT
dGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2XzY0OiBMb2NrQ21wWGNoZzY0
IFU6RzozMiwgVUQ6Rzo2NCwgVTpHOjY0LCBVRDpHOjY0LCBaRDpHOjgKKyAgICBTdGF0dXNDb25k
LCBUbXAqLCBUbXAsIEFkZHIsIFRtcAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgs
IFRtcAorCit4ODY6IExvY2tDbXBYY2hnOCBVRDpHOjgsIFU6Rzo4LCBVRDpHOjgKKyAgICBUbXAq
LCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogTG9ja0NtcFhjaGcxNiBV
RDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYKKyAgICBUbXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBU
bXAsIEluZGV4CisKK3g4NjogTG9ja0NtcFhjaGczMiBVRDpHOjMyLCBVOkc6MzIsIFVEOkc6MzIK
KyAgICBUbXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9j
a0NtcFhjaGc2NCBVRDpHOjY0LCBVOkc6NjQsIFVEOkc6NjQKKyAgICBUbXAqLCBUbXAsIEFkZHIK
KyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNoTG9ja0NtcFhjaGc4IFU6RzozMiwg
VUQ6Rzo4LCBVOkc6OCwgVUQ6Rzo4IC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAs
IEFkZHIKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNoTG9j
a0NtcFhjaGcxNiBVOkc6MzIsIFVEOkc6MTYsIFU6RzozMiwgVUQ6RzoxNiAvYnJhbmNoCisgICAg
U3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJ
bmRleAorCit4ODY6IEJyYW5jaExvY2tDbXBYY2hnMzIgVTpHOjMyLCBVRDpHOjMyLCBVOkc6MzIs
IFVEOkc6MzIgL2JyYW5jaAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkcgorICAgIFN0
YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgKKworeDg2XzY0OiBCcmFuY2hMb2NrQ21wWGNoZzY0
IFU6RzozMiwgVUQ6Rzo2NCwgVTpHOjY0LCBVRDpHOjY0IC9icmFuY2gKKyAgICBTdGF0dXNDb25k
LCBUbXAqLCBUbXAsIEFkZHIKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4
NjogTG9ja0FkZDggVTpHOjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgK
KyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja0FkZDE2IFU6RzoxNiwg
VUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4NjogTG9ja0FkZDMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwg
QWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4
Nl82NDogTG9ja0FkZDY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwg
SW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1N1YjggVTpH
OjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIK
KyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1N1YjE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIElt
bSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisK
K3g4NjogTG9ja1N1YjMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwg
SW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9ja1N1YjY0
IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAs
IEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja0FuZDggVTpHOjgsIFVEOkc6OAorICAg
IEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4
CisKK3g4NjogTG9ja0FuZDE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIElt
bSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja0FuZDMy
IFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAs
IEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9ja0FuZDY0IFU6Rzo2NCwgVUQ6Rzo2
NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAs
IEluZGV4CisKK3g4NjogTG9ja09yOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAg
SW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrT3Ix
NiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1w
LCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tPcjMyIFU6RzozMiwgVUQ6RzozMgor
ICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIElu
ZGV4CisKK3g4Nl82NDogTG9ja09yNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisg
ICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2Nr
WG9yOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRt
cCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrWG9yMTYgVTpHOjE2LCBVRDpHOjE2
CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwg
SW5kZXgKKworeDg2OiBMb2NrWG9yMzIgVTpHOjMyLCBVRDpHOjMyCisgICAgSW1tLCBBZGRyCisg
ICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBM
b2NrWG9yNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAor
ICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBMb2NrTmVnOCBVRDpHOjgKKyAg
ICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBMb2NrTmVnMTYgVUQ6RzoxNgorICAgIEFkZHIKKyAg
ICBJbmRleAorCit4ODY6IExvY2tOZWczMiBVRDpHOjMyCisgICAgQWRkcgorICAgIEluZGV4CisK
K3g4Nl82NDogTG9ja05lZzY0IFVEOkc6NjQKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBM
b2NrTm90OCBVRDpHOjgKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBMb2NrTm90MTYgVUQ6
RzoxNgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IExvY2tOb3QzMiBVRDpHOjMyCisgICAg
QWRkcgorICAgIEluZGV4CisKK3g4Nl82NDogTG9ja05vdDY0IFVEOkc6NjQKKyAgICBBZGRyCisg
ICAgSW5kZXgKKworeDg2OiBMb2NrWEFkZDggVUQ6Rzo4LCBVRDpHOjgKKyAgICBUbXAsIEFkZHIK
KyAgICBUbXAsIEluZGV4CisKK3g4NjogTG9ja1hBZGQxNiBVRDpHOjE2LCBVRDpHOjE2CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IExvY2tYQWRkMzIgVUQ6RzozMiwgVUQ6
RzozMgorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBMb2NrWEFkZDY0
IFVEOkc6NjQsIFVEOkc6NjQKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Njog
TG9ja1hjaGc4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAor
Cit4ODY6IExvY2tYY2hnMTYgVUQ6RzoxNiwgVUQ6RzoxNgorICAgIFRtcCwgQWRkcgorICAgIFRt
cCwgSW5kZXgKKworeDg2OiBMb2NrWGNoZzMyIFVEOkc6MzIsIFVEOkc6MzIKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogTG9ja1hjaGc2NCBVRDpHOjY0LCBVRDpHOjY0
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCithcm02NDogTG9hZExpbms4IFU6Rzo4
LCBaRDpHOjgKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlu
a0FjcTggVTpHOjgsIFpEOkc6OAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJt
NjQ6IFN0b3JlQ29uZDggVTpHOjgsIEQ6Rzo4LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAK
KyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDggVTpHOjgsIEQ6Rzo4
LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJt
NjQ6IExvYWRMaW5rMTYgVTpHOjE2LCBaRDpHOjE2CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgs
IFRtcAorCithcm02NDogTG9hZExpbmtBY3ExNiBVOkc6MTYsIFpEOkc6MTYKKyAgICBBZGRyLCBU
bXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQxNiBVOkc6MTYsIEQ6RzoxNiwg
RVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0
OiBTdG9yZUNvbmRSZWwxNiBVOkc6MTYsIEQ6RzoxNiwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwg
VG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGluazMyIFU6RzozMiwgWkQ6
RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rQWNx
MzIgVTpHOjMyLCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02
NDogU3RvcmVDb25kMzIgVTpHOjMyLCBEOkc6MzIsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRt
cAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kUmVsMzIgVTpHOjMyLCBE
Okc6MzIsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAor
Cithcm02NDogTG9hZExpbms2NCBVOkc6NjQsIFpEOkc6NjQKKyAgICBBZGRyLCBUbXAKKyAgICBJ
bmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTY0IFU6Rzo2NCwgWkQ6Rzo2NAorICAgIEFk
ZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZDY0IFU6Rzo2NCwgRDpH
OjY0LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKwor
YXJtNjQ6IFN0b3JlQ29uZFJlbDY0IFU6Rzo2NCwgRDpHOjY0LCBFWkQ6Rzo4CisgICAgVG1wLCBB
ZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IERlcGVuZDMyIFU6RzozMiwg
RDpHOjMyCisgICAgVG1wLCBUbXAKKworYXJtNjQ6IERlcGVuZDY0IFU6Rzo2NCwgRDpHOjY0Cisg
ICAgVG1wLCBUbXAKKwogQ29tcGFyZTMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIK
ICAgICBSZWxDb25kLCBUbXAsIFRtcCwgVG1wCiAgICAgUmVsQ29uZCwgVG1wLCBJbW0sIFRtcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1p
emVCbG9ja09yZGVyLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTc3LDYgKzE3NywxMCBAQCB2b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQogICAg
ICAgICBjYXNlIEJyYW5jaFN1YjY0OgogICAgICAgICBjYXNlIEJyYW5jaE5lZzMyOgogICAgICAg
ICBjYXNlIEJyYW5jaE5lZzY0OgorICAgICAgICBjYXNlIEJyYW5jaExvY2tDbXBYY2hnODoKKyAg
ICAgICAgY2FzZSBCcmFuY2hMb2NrQ21wWGNoZzE2OgorICAgICAgICBjYXNlIEJyYW5jaExvY2tD
bXBYY2hnMzI6CisgICAgICAgIGNhc2UgQnJhbmNoTG9ja0NtcFhjaGc2NDoKICAgICAgICAgICAg
IGlmIChjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spID09IGJsb2NrLT5zdWNjZXNzb3JCbG9jaygw
KSAmJiBicmFuY2guYXJnc1swXS5pc0ludmVydGlibGUoKSkgewogICAgICAgICAgICAgICAgIHN0
ZDo6c3dhcChibG9jay0+c3VjY2Vzc29yKDApLCBibG9jay0+c3VjY2Vzc29yKDEpKTsKICAgICAg
ICAgICAgICAgICBicmFuY2guYXJnc1swXSA9IGJyYW5jaC5hcmdzWzBdLmludmVydGVkKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQYWRJbnRlcmZl
cmVuY2UuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcg
QEAgdm9pZCBwYWRJbnRlcmZlcmVuY2UoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICBbJl0g
KEFyZyYsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgewogICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHJvbGUpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVm
OgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlaRGVmOgogICAgICAgICAgICAg
ICAgICAgICAgICAgaGFzRWFybHlEZWYgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlVXNlOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDcgQEAgdm9p
ZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OkxhdGVDb2xkVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U2NyYXRjaDoK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgorICAgICAgICAgICAgICAg
ICAgICBjYXNlIEFyZzo6RWFybHlaRGVmOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChS
ZWcgcmVnIDogY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChy
ZWcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJi
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVy
YXRvci5yYgkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDcgQEAg
ZGVmIGxleChzdHIsIGZpbGVOYW1lKQogZW5kCiAKIGRlZiBpc1JvbGUodG9rZW4pCi0gICAgdG9r
ZW4gPX4gL1xBKChVKXwoRCl8KFVEKXwoWkQpfChVWkQpfChVQSl8KFMpKVxaLworICAgIHRva2Vu
ID1+IC9cQSgoVSl8KEQpfChVRCl8KFpEKXwoVVpEKXwoVUEpfChTKXwoRUQpfChFWkQpfChMVSkp
XFovCiBlbmQKIAogZGVmIGlzR0YodG9rZW4pCkBAIC0xOTAsNyArMTkwLDcgQEAgZGVmIGlzR0Yo
dG9rZW4pCiBlbmQKIAogZGVmIGlzS2luZCh0b2tlbikKLSAgICB0b2tlbiA9fiAvXEEoKFRtcCl8
KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoQWRkcil8KEluZGV4KXwoUmVsQ29u
ZCl8KFJlc0NvbmQpfChEb3VibGVDb25kKSlcWi8KKyAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KElt
bSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoQWRkcil8KEluZGV4KXwoUmVsQ29uZCl8
KFJlc0NvbmQpfChEb3VibGVDb25kKXwoU3RhdHVzQ29uZCkpXFovCiBlbmQKIAogZGVmIGlzQXJj
aCh0b2tlbikKQEAgLTI2NCw3ICsyNjQsNyBAQCBjbGFzcyBQYXJzZXIKIAogICAgIGRlZiBjb25z
dW1lS2luZAogICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKLSAgICAgICAgcGFyc2VFcnJv
cigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFRtcCwgQWRk
ciwgSW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIG9yIERvdWJsZUNvbmQpIikgdW5sZXNzIGlzS2lu
ZChyZXN1bHQpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1t
LCBCaXRJbW0sIEJpdEltbTY0LCBUbXAsIEFkZHIsIEluZGV4LCBSZWxDb25kLCBSZXNDb25kLCBE
b3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQogICAgICAg
ICBhZHZhbmNlCiAgICAgICAgIHJlc3VsdAogICAgIGVuZApAQCAtNjUxLDYgKzY1MSwxMiBAQCB3
cml0ZUgoIk9wY29kZVV0aWxzIikgewogICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZUFk
ZHIiCiAgICAgICAgICAgICAgICAgd2hlbiAiUyIKICAgICAgICAgICAgICAgICAgICAgcm9sZSA9
ICJTY3JhdGNoIgorICAgICAgICAgICAgICAgIHdoZW4gIkVEIgorICAgICAgICAgICAgICAgICAg
ICByb2xlID0gIkVhcmx5RGVmIgorICAgICAgICAgICAgICAgIHdoZW4gIkVaRCIKKyAgICAgICAg
ICAgICAgICAgICAgcm9sZSA9ICJFYXJseVpEZWYiCisgICAgICAgICAgICAgICAgd2hlbiAiTFUi
CisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiTGF0ZVVzZSIKICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgZW5kCkBAIC04
MTksNiArODI1LDcgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAg
ICAgd2hlbiAiUmVsQ29uZCIKICAgICAgICAgICAgICAgICB3aGVuICJSZXNDb25kIgogICAgICAg
ICAgICAgICAgIHdoZW4gIkRvdWJsZUNvbmQiCisgICAgICAgICAgICAgICAgd2hlbiAiU3RhdHVz
Q29uZCIKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlICJV
bmV4cGVjdGVkIGtpbmQ6ICN7a2luZC5uYW1lfSIKICAgICAgICAgICAgICAgICBlbmQKQEAgLTEx
MDUsNiArMTExMiw4IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAg
ICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Jlc3VsdENvbmRpdGlvbigpIgog
ICAgICAgICAgICAgICAgIHdoZW4gIkRvdWJsZUNvbmQiCiAgICAgICAgICAgICAgICAgICAgIG91
dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzRG91YmxlQ29uZGl0aW9uKCkiCisgICAgICAgICAg
ICAgICAgd2hlbiAiU3RhdHVzQ29uZCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
YXJnc1sje2luZGV4fV0uYXNTdGF0dXNDb25kaXRpb24oKSIKICAgICAgICAgICAgICAgICBlbmQK
ICAgICAgICAgICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302892</attachid>
            <date>2017-02-27 16:49:45 -0800</date>
            <delta_ts>2017-02-27 20:17:25 -0800</delta_ts>
            <desc>done with B3-&gt;Air isel for all atomics</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>134296</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMiBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkwRjJDNjNCRTFFNjQ5REM0MDBDMTM4
MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCRDFFNjQ5REMyMDBDMTM4MzkgLyogQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAv
KiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkQ0RERCMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCAq
LzsgfTsKIAkJMEYyRDREREUxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERDMTk4MzJE
MzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRDRERTgxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhp
c1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJENERFNTE5ODMyREFDMDA3RDRCMTkgLyogVG9UaGlzU3RhdHVzLmNwcCAqLzsgfTsKQEAg
LTI3NjQsNiArMjc3MCwxMiBAQAogCQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5r
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmFuay5oOyBwYXRoID0gYjMv
QjNCYW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM2M0FEMUU2MEFFM0Mw
MEMxMzgzOSAvKiBCM1dpZHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzV2lkdGguY3BwOyBwYXRoID0gYjMvQjNXaWR0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzV2lkdGguaDsgcGF0aCA9IGIzL0IzV2lkdGgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjMxRTYzNDNFODAwQzEzODM5
IC8qIEIzQXRvbWljVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNBdG9taWNWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0F0b21pY1ZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjQxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNBdG9taWNWYWx1
ZS5oOyBwYXRoID0gYjMvQjNBdG9taWNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJDNjNCNTFFNjM0M0U4MDBDMTM4MzkgLyogQjNHZW5lcmljQmxvY2tJbnNlcnRpb25T
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmljQmxvY2tJbnNl
cnRpb25TZXQuaDsgcGF0aCA9IGIzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJC
bG9ja0luc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJCbG9ja0luc2VydGlvblNldC5jcHA7IHBhdGggPSBiMy9haXIvQWlyQmxvY2tJbnNlcnRp
b25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCQTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJCbG9j
a0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCRDFF
NjQ5REMyMDBDMTM4MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREIxOTgzMkQzNDAwN0Q0QjE5IC8qIERl
YnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVi
dWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkQ0RERDMTk4
MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNTI5Miw2ICs1MzA0LDggQEAKIAkJCQkwRkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyog
YWlyICovLAogCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFs
dWUuY3BwICovLAogCQkJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVn
VmFsdWUuaCAqLywKKwkJCQkwRjJDNjNCMzFFNjM0M0U4MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1
ZS5jcHAgKi8sCisJCQkJMEYyQzYzQjQxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUu
aCAqLywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJ
CQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi8sCiAJCQkJMEZFQzg0QjYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCkBAIC01MzU0LDYgKzUzNjgs
NyBAQAogCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5o
ICovLAogCQkJCTBGRUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywK
IAkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovLAorCQkJCTBG
MkM2M0I1MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oICov
LAogCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxv
Y2suaCAqLywKIAkJCQkwRkVDODVCRjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3Bw
ICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5oICovLApA
QCAtNTQ2OSw2ICs1NDg0LDggQEAKIAkJCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWly
QXJnSW5saW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNp
Y0Jsb2NrLmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNC
bG9jay5oICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2Vy
dGlvblNldC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJs
b2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC03MzI2LDYgKzczNDMsNyBAQAogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRjFGRTUxQjE5MjJBM0JDMDA2OTg3
QzUgLyogQWJvcnRSZWFzb24uaCAqLywKKwkJCQkwRjJDNjNCRDFFNjQ5REMyMDBDMTM4MzkgLyog
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8sCiAJCQkJODYwMTYxREYwRjNBODNDMTAwRjg0
NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCAqLywKIAkJCQkwRjM3MzA5MDFDMENENzBD
MDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggKi8sCiAJCQkJODY0
MDkyM0IxNTZFRUQzQjAwNTY2Q0IyIC8qIEFSTTY0QXNzZW1ibGVyLmggKi8sCkBAIC03MzU0LDgg
KzczNzIsOCBAQAogCQkJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxl
ck1JUFMuaCAqLywKIAkJCQlGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJs
ZXJQcmludGVyLmNwcCAqLywKIAkJCQlGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9B
c3NlbWJsZXJQcmludGVyLmggKi8sCi0JCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2XzY0LmggKi8sCisJCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJQTdBNEFFMDcxNzk3M0IyNjAwNTYxMkIxIC8q
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLywKIAkJCQk4NjAxNjFFMjBGM0E4M0MxMDBG
ODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3NzE4NUE4
RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywKQEAgLTc5
NTYsNiArNzk3NCw3IEBACiAJCQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3RDcxRDlEQzQ0MjAwMUI5ODI1IC8q
IEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2M0JDMUU2MzQ0MEMwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY4NEQ0MzgxQzAw
MTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUzNEMx
QTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQ3LDYgKzgwNjYsNyBAQAogCQkJCTQzNDIyQTYzMUMx
NThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUwRTFCRjAyNzZD
MDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzM0ZDRkMx
QzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2
QjhBRDkxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRlVGFpbHMuaCBpbiBIZWFkZXJzICov
LApAQCAtODM2Niw2ICs4Mzg2LDcgQEAKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyog
REZHT1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2
N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJDNjNCNzFFNjM0M0VEMDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjM3OTgxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50
b21JbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVGOTBBRjAw
QzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFQjE5RDBCQTdE
MDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBpbiBIZWFkZXJzICovLApAQCAtOTc5Miw2ICs5
ODEzLDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
IAkJCQkwRkZBNTQ5NzE2Qjg4MzUwMDBCM0E5ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjJDNjNCRTFFNjQ5REM0MDBDMTM4MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDQ5MzdDMzFEREJFNjE0MDA3N0M4MDcgLyog
QWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NUYwRjQxNEQx
MDYzOTAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM3MEI0
RjUxQkYyNjIwMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDI0OCw2ICsxMDI3MCw3IEBACiAJCQkJ
OUU3Mjk0MDcxOTBGMDFBNTAwMUE5MUI1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTUxM0U1QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmpl
Y3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQzYzQjYxRTYzNDNFQTAw
QzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTEx
ODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3Rl
ZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjY2LDYgKzEwMjg5LDcgQEAK
IAkJCQlFMzVFMDM1RjFCN0FCNDNFMDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0MzhCMTg1NjgzMzUwMDJFRDY5MiAv
KiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRC
NjExODgwOURENTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjJDNjNCQjFFNjM0NDBBMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25T
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1MTY1RDIxQkRGMEI5ODAwM0I3NUMxIC8qIElu
c3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NG
ODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIKKworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyOjpTdGF0dXNDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIHN3aXRj
aCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNz
OgorICAgICAgICBvdXQucHJpbnQoIlN1Y2Nlc3MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6RmFpbHVyZToKKyAgICAgICAgb3V0LnByaW50KCJG
YWlsdXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMiwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODksNiArODksMjMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gVGltZXNFaWdodDsKICAgICB9CiAgICAgCisgICAgZW51bSBTdGF0dXNDb25k
aXRpb24geworICAgICAgICBTdWNjZXNzLAorICAgICAgICBGYWlsdXJlCisgICAgfTsKKyAgICAK
KyAgICBzdGF0aWMgU3RhdHVzQ29uZGl0aW9uIGludmVydChTdGF0dXNDb25kaXRpb24gY29uZGl0
aW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICAgICAgY2FzZSBT
dWNjZXNzOgorICAgICAgICAgICAgcmV0dXJuIEZhaWx1cmU7CisgICAgICAgIGNhc2UgRmFpbHVy
ZToKKyAgICAgICAgICAgIHJldHVybiBTdWNjZXNzOworICAgICAgICB9CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBTdWNjZXNzOworICAgIH0K
KyAgICAKICAgICBzdHJ1Y3QgQmFzZUluZGV4OwogICAgIAogICAgIC8vIEFkZHJlc3M6CkBAIC0x
MTA4LDMgKzExMjUsMTYgQEAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlLCBN
YQogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQworCisj
aWYgRU5BQkxFKEFTU0VNQkxFUikKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3Ry
ZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkFic3RyYWN0TWFj
cm9Bc3NlbWJsZXI6OlN0YXR1c0NvbmRpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQXRvbWljVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQXRvbWljVmFsdWU6On5B
dG9taWNWYWx1ZSgpCit7Cit9CisKK1dpZHRoIEF0b21pY1ZhbHVlOjphY2Nlc3NXaWR0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fd2lkdGg7Cit9CisKK3ZvaWQgQXRvbWljVmFsdWU6OmR1bXBN
ZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KGNvbW1hLCAid2lkdGggPSAiLCBtX3dpZHRoKTsKKyAgICAKKyAgICBNZW1vcnlW
YWx1ZTo6ZHVtcE1ldGEoY29tbWEsIG91dCk7Cit9CisKK1ZhbHVlKiBBdG9taWNWYWx1ZTo6Y2xv
bmVJbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IEF0b21pY1ZhbHVlKCp0aGlzKTsKK30K
KworQXRvbWljVmFsdWU6OkF0b21pY1ZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgV2lk
dGggd2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQg
PSAwKQorICAgIDogTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgb3BlcmFuZC0+dHlw
ZSgpLCBvcmlnaW4sIG9mZnNldCwgb3BlcmFuZCwgcG9pbnRlcikKKyAgICAsIG1fd2lkdGgod2lk
dGgpCit7CisgICAgc2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBB
U1NFUlQoYmVzdFR5cGUob3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKyAg
ICAKKyAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6
CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNh
c2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9t
aWNYY2hnOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK0F0b21pY1ZhbHVlOjpBdG9taWNWYWx1ZShLaW5kIGtp
bmQsIE9yaWdpbiBvcmlnaW4sIFdpZHRoIHdpZHRoLCBWYWx1ZSogZXhwZWN0ZWRWYWx1ZSwgVmFs
dWUqIG5ld1ZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDog
TWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwga2luZC5vcGNvZGUoKSA9PSBBdG9taWNX
ZWFrQ0FTID8gSW50MzIgOiBleHBlY3RlZFZhbHVlLT50eXBlKCksIG9yaWdpbiwgb2Zmc2V0LCBl
eHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSwgcG9pbnRlcikKKyAgICAsIG1fd2lkdGgod2lkdGgpCit7
CisgICAgc2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBBU1NFUlQo
YmVzdFR5cGUob3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKworICAgIHN3
aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNl
IEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQXRvbWljVmFsdWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisj
aW5jbHVkZSAiQjNXaWR0aC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQXRvbWljVmFsdWUgOiBwdWJsaWMgTWVtb3J5VmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzQXRvbWljKGtpbmQub3Bjb2RlKCkpOworICAgIH0KKyAgICAKKyAgICB+
QXRvbWljVmFsdWUoKTsKKyAgICAKKyAgICBUeXBlIG9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJl
dHVybiBjaGlsZCgwKS0+dHlwZSgpOyB9CisgICAgCisgICAgV2lkdGggb3BlcmF0aW9uV2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgCisgICAgLy8gU3lub255bSBmb3Igd2lk
dGgoKSwgaWYgeW91J3JlIGFjY2Vzc2luZyB2aWEgTWVtb3J5VmFsdWUuCisgICAgV2lkdGggYWNj
ZXNzV2lkdGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1
bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
CisgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIEF0b21pY1ZhbHVlKEtpbmQs
IE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBv
ZmZzZXQgPSAwKTsKKyAgICAKKyAgICBBdG9taWNWYWx1ZShLaW5kLCBPcmlnaW4sIFdpZHRoLCBW
YWx1ZSogZXhwZWN0ZWRWYWx1ZSwgVmFsdWUqIG5ld1ZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50
MzJfdCBvZmZzZXQgPSAwKTsKKyAgICAKKyAgICBXaWR0aCBtX3dpZHRoOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2Vy
dGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMzUgKzM2LDEzIEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKIAogQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0
KFByb2NlZHVyZSAmcHJvYykKLSAgICA6IG1fcHJvYyhwcm9jKQorICAgIDogR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0KHByb2MubV9ibG9ja3MpCisgICAgLCBtX3Byb2MocHJvYykKIHsKIH0KIAog
QmxvY2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsgfQogCi12b2lkIEJsb2Nr
SW5zZXJ0aW9uU2V0OjppbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCi17Ci0gICAg
bV9pbnNlcnRpb25zLmFwcGVuZChXVEZNb3ZlKGluc2VydGlvbikpOwotfQotCi1CYXNpY0Jsb2Nr
KiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVl
bmN5KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNC
bG9jayhVSU5UX01BWCwgZnJlcXVlbmN5KSk7Ci0gICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxv
Y2suZ2V0KCk7Ci0gICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2Nr
KSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9u
U2V0OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5KQot
ewotICAgIHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVl
bmN5ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVuY3koKSk7Ci19Ci0KLUJhc2ljQmxvY2sq
IEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91Ymxl
IGZyZXF1ZW5jeSkKLXsKLSAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJl
cXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7Ci19
Ci0KIEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjpzcGxpdEZvcndhcmQoCiAgICAgQmFz
aWNCbG9jayogYmxvY2ssIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqIGluc2Vy
dGlvblNldCwgZG91YmxlIGZyZXF1ZW5jeSkKIHsKQEAgLTEwMiwzMiArODAsNiBAQCBCYXNpY0Js
b2NrKiBCbG9ja0luc2VydGlvblNldDo6c3BsaXRGb3J3CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgpCi17Ci0gICAgaWYgKG1faW5zZXJ0
aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBXZSBh
bGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5l
ZWQgdG8gc29ydCB0aGVtIGJlZm9yZQotICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0
aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8g
YmUKLSAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCi0gICAgYnViYmxlU29ydCht
X2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKLQotICAgIGV4ZWN1dGVJ
bnNlcnRpb25zKG1fcHJvYy5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKLSAgICAKLSAgICAvLyBQ
cnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0
IGl0J3MKLSAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5n
LgotICAgIG1fcHJvYy5tX2Jsb2Nrcy5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgWyZdIChz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4mIGJsb2NrUHRyKSAtPiBib29sIHsKLSAgICAgICAg
ICAgIHJldHVybiAhYmxvY2tQdHI7Ci0gICAgICAgIH0pOwotICAgIAotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9wcm9jLm1fYmxvY2tzLnNpemUoKTsgKytpKQotICAgICAgICBtX3By
b2MubV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQot
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5z
ZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCIKICNp
bmNsdWRlICJCM1Byb2NlZHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zNSwyNiArMzYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEluc2VydGlvblNldDsKIAotdHlwZWRlZiBXVEY6Okluc2Vy
dGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOwordHlwZWRl
ZiBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz46OkJsb2NrSW5zZXJ0aW9uIEJs
b2NrSW5zZXJ0aW9uOwogCi1jbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitjbGFzcyBCbG9ja0lu
c2VydGlvblNldCA6IHB1YmxpYyBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz4g
ewogcHVibGljOgogICAgIEJsb2NrSW5zZXJ0aW9uU2V0KFByb2NlZHVyZSYpOwogICAgIH5CbG9j
a0luc2VydGlvblNldCgpOwogICAgIAotICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYp
OwotCi0gICAgLy8gSW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCi0gICAgQmFz
aWNCbG9jayogaW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7
Ci0KLSAgICAvLyBJbnNlcnRzIGEgbmV3IGJsb2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVz
dWFsbHkgeW91IHdpbGwgbm90IHBhc3MgdGhlIGZyZXF1ZW5jeQotICAgIC8vIGFyZ3VtZW50LiBQ
YXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRvIGp1c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdi
ZWZvcmUnIGJsb2NrLiBUaGF0J3MKLSAgICAvLyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCi0gICAg
QmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1
ZW5jeSA9IFBOYU4pOwotCi0gICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2
ZW4gYmxvY2suCi0gICAgQmFzaWNCbG9jayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIs
IGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLQogICAgIC8vIEEgaGVscGVyIHRvIHNwbGl0IGEg
YmxvY2sgd2hlbiBmb3J3YXJkIGl0ZXJhdGluZyBvdmVyIGl0LiBJdCBjcmVhdGVzIGEgbmV3IGJs
b2NrIHRvIGhvbGQKICAgICAvLyBldmVyeXRoaW5nIGJlZm9yZSB0aGUgaW5zdHJ1Y3Rpb24gYXQg
dmFsdWVJbmRleC4gVGhlIGN1cnJlbnQgYmxvY2sgaXMgbGVmdCB3aXRoCiAgICAgLy8gZXZlcnl0
aGluZyBhdCBhbmQgYWZ0ZXIgdmFsdWVJbmRleC4gSWYgdGhlIG9wdGlvbmFsIEluc2VydGlvblNl
dCBpcyBwcm92aWRlZCwgaXQgd2lsbCBnZXQKQEAgLTgwLDEyICs2OCw5IEBAIHB1YmxpYzoKICAg
ICBCYXNpY0Jsb2NrKiBzcGxpdEZvcndhcmQoCiAgICAgICAgIEJhc2ljQmxvY2sqLCB1bnNpZ25l
ZCYgdmFsdWVJbmRleCwgSW5zZXJ0aW9uU2V0KiA9IG51bGxwdHIsCiAgICAgICAgIGRvdWJsZSBm
cmVxdWVuY3kgPSBQTmFOKTsKLSAgICAKLSAgICBib29sIGV4ZWN1dGUoKTsKIAogcHJpdmF0ZToK
ICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKLSAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1f
aW5zZXJ0aW9uczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3
ICs4Miw4IEBAIGJvb2wgRWZmZWN0czo6aW50ZXJmZXJlcyhjb25zdCBFZmZlY3RzJiAKICAgICAg
ICAgfHwgaW50ZXJmZXJlc1dpdGhXcml0ZXNQaW5uZWQob3RoZXIsICp0aGlzKQogICAgICAgICB8
fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIud3JpdGVzKQogICAgICAgICB8fCB3cml0ZXMub3Zlcmxh
cHMob3RoZXIucmVhZHMpCi0gICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcyk7
CisgICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKKyAgICAgICAgfHwgKGZl
bmNlICYmIG90aGVyLmZlbmNlKTsKIH0KIAogYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0
IEVmZmVjdHMmIG90aGVyKSBjb25zdApAQCAtOTUsNyArOTYsOCBAQCBib29sIEVmZmVjdHM6Om9w
ZXJhdG9yPT0oY29uc3QgRWZmZWN0cyYgCiAgICAgICAgICYmIHdyaXRlc1Bpbm5lZCA9PSBvdGhl
ci53cml0ZXNQaW5uZWQKICAgICAgICAgJiYgcmVhZHNQaW5uZWQgPT0gb3RoZXIucmVhZHNQaW5u
ZWQKICAgICAgICAgJiYgd3JpdGVzID09IG90aGVyLndyaXRlcwotICAgICAgICAmJiByZWFkcyA9
PSBvdGhlci5yZWFkczsKKyAgICAgICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHMKKyAgICAgICAg
JiYgZmVuY2UgPT0gb3RoZXIuZmVuY2U7CiB9CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3IhPShj
b25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAgLTEyMCw2ICsxMjIsOCBAQCB2b2lkIEVmZmVj
dHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
IldyaXRlc1Bpbm5lZCIpOwogICAgIGlmIChyZWFkc1Bpbm5lZCkKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiUmVhZHNQaW5uZWQiKTsKKyAgICBpZiAoZmVuY2UpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIkZlbmNlIik7CiAgICAgaWYgKHdyaXRlcykKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiV3JpdGVzOiIsIHdyaXRlcyk7CiAgICAgaWYgKHJlYWRzKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBA
QCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MzE3MwogICAgIGJvb2wgcmVhZHNQaW5uZWQgeyBmYWxzZSB9OwogICAgIGJv
b2wgd3JpdGVzUGlubmVkIHsgZmFsc2UgfTsKKyAgICAKKyAgICAvLyBNZW1vcnkgZmVuY2VzIGNh
bm5vdCBiZSByZW9yZGVyZWQgYXJvdW5kIGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVpciBl
ZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQKKyAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEgbWVt
b3J5IGZlbmNlLgorICAgIGJvb2wgZmVuY2UgeyBmYWxzZSB9OwogCiAgICAgSGVhcFJhbmdlIHdy
aXRlczsKICAgICBIZWFwUmFuZ2UgcmVhZHM7CkBAIC04OSw2ICs5Myw3IEBAIHN0cnVjdCBFZmZl
Y3RzIHsKICAgICAgICAgcmVzdWx0LnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKICAgICAgICAg
cmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LndyaXRlc1Bpbm5lZCA9
IHRydWU7CisgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCkBAIC0xMDMsNyArMTA4LDcgQEAgc3RydWN0IEVmZmVjdHMgewogCiAgICAg
Ym9vbCBtdXN0RXhlY3V0ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gdGVybWluYWwg
fHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQ
aW5uZWQ7CisgICAgICAgIHJldHVybiB0ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRl
c0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8IHdyaXRlc1Bpbm5lZCB8fCBmZW5jZTsKICAgICB9CiAK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0aGVz
ZSByZXNwZWN0aXZlIGVmZmVjdHMgd291bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NDIsNiArMTQyLDcgQEAgc3RydWN0IEltcHVyZUJsb2NrRGF0YSB7CiAKICAgICBSYW5nZVNldDxI
ZWFwUmFuZ2U+IHJlYWRzOyAvLyBUaGlzIG9ubHkgZ2V0cyB1c2VkIGZvciBmb3J3YXJkIHN0b3Jl
IGVsaW1pbmF0aW9uLgogICAgIFJhbmdlU2V0PEhlYXBSYW5nZT4gd3JpdGVzOyAvLyBUaGlzIGdl
dHMgdXNlZCBmb3IgYm90aCBsb2FkIGFuZCBzdG9yZSBlbGltaW5hdGlvbi4KKyAgICBib29sIGZl
bmNlOwogCiAgICAgTWVtb3J5VmFsdWVNYXAgc3RvcmVzQXRIZWFkOwogICAgIE1lbW9yeVZhbHVl
TWFwIG1lbW9yeVZhbHVlc0F0VGFpbDsKQEAgLTE3NCwxMiArMTc1LDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobWVtb3J5ICYmIG1lbW9yeS0+aXNT
dG9yZSgpCiAgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLnJlYWRzLm92ZXJsYXBzKG1lbW9y
eS0+cmFuZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIWRhdGEud3JpdGVzLm92ZXJsYXBz
KG1lbW9yeS0+cmFuZ2UoKSkpCisgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRlcy5v
dmVybGFwcyhtZW1vcnktPnJhbmdlKCkpCisgICAgICAgICAgICAgICAgICAgICYmICghZGF0YS5m
ZW5jZSB8fCAhbWVtb3J5LT5oYXNGZW5jZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5z
dG9yZXNBdEhlYWQuYWRkKG1lbW9yeSk7CiAgICAgICAgICAgICAgICAgZGF0YS5yZWFkcy5hZGQo
ZWZmZWN0cy5yZWFkcyk7CiAKICAgICAgICAgICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9
IGVmZmVjdHMud3JpdGVzKQogICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGRhdGEsIHdyaXRl
cyk7CisgICAgICAgICAgICAgICAgZGF0YS5mZW5jZSB8PSBlZmZlY3RzLmZlbmNlOwogCiAgICAg
ICAgICAgICAgICAgaWYgKG1lbW9yeSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZW1vcnlW
YWx1ZXNBdFRhaWwuYWRkKG1lbW9yeSk7CkBAIC00NzgsNiArNDgxLDkgQEAgcHJpdmF0ZToKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CiAgICAgYm9vbCBmaW5kU3RvcmVBZnRlckNsb2Ji
ZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKICAg
ICB7CisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBl
bGltaW5hdGUgYSBzdG9yZSBpZiBldmVyeSBmb3J3YXJkIHBhdGggaGl0cyBhIHN0b3JlIHRvIHRo
ZSBzYW1lIGxvY2F0aW9uIGJlZm9yZQogICAgICAgICAvLyBoaXR0aW5nIGFueSBvcGVyYXRpb24g
dGhhdCBvYnNlcnZlcyB0aGUgc3RvcmUuIFRoaXMgc2VhcmNoIHNlZW1zIGxpa2UgaXQgc2hvdWxk
IGJlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSwgYnV0IGluIHRoZSBvdmVyd2hlbG1pbmcgbWFqb3Jp
dHkgb2YgY2FzZXMgaXQgd2lsbCBhbG1vc3QgaW1tZWRpYXRlbHkgaGl0IGFuIApAQCAtNjE0LDYg
KzYyMCwxMiBAQCBwcml2YXRlOgogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRh
dGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcgYmFja3dhcmQgZm9yICIsICpwdHIsICIuLi5cbiIp
OwogICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNG
ZW5jZSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgR2l2aW5nIHVwIGJlY2F1c2UgZmVuY2VzLlxuIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSog
bWF0Y2ggPSBtX2RhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmZpbmQocHRyLCBmaWx0ZXIpKSB7CiAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRm91
bmQgIiwgKm1hdGNoLCAiIGxvY2FsbHkuXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNyBAQCB2
b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MDcKICAgICB9CiAKKyAgICAv
LyBUaGlzIHB1dHMgdGhlIElSIGluIHF1aXJrcyBtb2RlLgogICAgIGxvd2VyTWFjcm9zKHByb2Nl
ZHVyZSk7CiAKICAgICBpZiAob3B0TGV2ZWwgPj0gMSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0
aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEluc2Vy
dGlvblNldDsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2NsYXNzIEdlbmVyaWNC
bG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBXVEY6Okluc2VydGlvbjxz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOworICAgIAorICAgIEJs
b2NrSW5zZXJ0aW9uU2V0KFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9j
a3MpCisgICAgICAgIDogbV9ibG9ja3MoYmxvY2tzKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dm9pZCBpbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCisgICAgeworICAgICAgICBt
X2luc2VydGlvbnMuYXBwZW5kKFdURk1vdmUoaW5zZXJ0aW9uKSk7CisgICAgfQorCisgICAgLy8g
SW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCisgICAgQmFzaWNCbG9jayogaW5z
ZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTikKKyAgICB7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhVSU5U
X01BWCwgZnJlcXVlbmN5KSk7CisgICAgICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdl
dCgpOworICAgICAgICBpbnNlcnQoQmxvY2tJbnNlcnRpb24oaW5kZXgsIFdURk1vdmUoYmxvY2sp
KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gSW5zZXJ0cyBhIG5l
dyBibG9jayBiZWZvcmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNz
IHRoZSBmcmVxdWVuY3kKKyAgICAvLyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0
byBqdXN0IHVzZSB0aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCisg
ICAgLy8gdXN1YWxseSB3aGF0IHlvdSB3YW50LgorICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9y
ZShCYXNpY0Jsb2NrKiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGluc2VydChiZWZvcmUtPmluZGV4KCksIGZyZXF1ZW5jeSA9PSBmcmVxdWVu
Y3kgPyBmcmVxdWVuY3kgOiBiZWZvcmUtPmZyZXF1ZW5jeSgpKTsKKyAgICB9CisKKyAgICAvLyBJ
bnNlcnRzIGEgbmV3IGJsb2NrIGFmdGVyIHRoZSBnaXZlbiBibG9jay4KKyAgICBCYXNpY0Jsb2Nr
KiBpbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4p
CisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJlcXVl
bmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7CisgICAg
fQorCisgICAgYm9vbCBleGVjdXRlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2luc2VydGlvbnMu
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAg
Ly8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNv
LCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBiZWZvcmUKKyAgICAgICAgLy8gcnVubmluZyBXVEY6OmV4
ZWN1dGVJbnNlcnRpb25zLiBXZSBzdHJvbmdseSBwcmVmZXIgYSBzdGFibGUgc29ydCBhbmQgd2Ug
d2FudCBpdCB0byBiZQorICAgICAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCisg
ICAgICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQo
KSk7CisgICAgICAgIAorICAgICAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX2Jsb2NrcywgbV9pbnNl
cnRpb25zKTsKKyAgICAgICAgCisgICAgICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRyaWVzLiBU
aGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgICAgICAvLyBoZWFsdGh5
IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgICAgICBtX2Jsb2Nrcy5y
ZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEJhc2lj
QmxvY2s+JiBibG9ja1B0cikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFibG9j
a1B0cjsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGhlIGJsb2NrcyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2Jsb2Nr
c1tpXS0+bV9pbmRleCA9IGk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4mIG1f
YmxvY2tzOworICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHJldmlzaW9uIDIxMjk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04OCw2ICs4OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKICAgICB9CiAgICAgCisgICAgSGVhcFJhbmdlIG9wZXJhdG9yfChjb25zdCBIZWFw
UmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgKKyAg
ICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAgICAgICAgICAg
c3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAogICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9CiAKICAg
ICB1bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU4LDYgKzU4LDExIEBAIFZhbHVlKiBJbnNlcnRpb25TZXQ6Omluc2VydEJv
dHRvbShzaXplX3QKICAgICByZXR1cm4gaW5zZXJ0Qm90dG9tKGluZGV4LCBsaWtlVmFsdWUtPm9y
aWdpbigpLCBsaWtlVmFsdWUtPnR5cGUoKSk7CiB9CiAKK1ZhbHVlKiBJbnNlcnRpb25TZXQ6Omlu
c2VydENsb25lKHNpemVfdCBpbmRleCwgVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBpbnNl
cnRWYWx1ZShpbmRleCwgbV9wcm9jZWR1cmUuY2xvbmUodmFsdWUpKTsKK30KKwogdm9pZCBJbnNl
cnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgYnViYmxlU29ydCht
X2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzEsNiArNzEsOCBAQCBwdWJsaWM6CiAKICAgICBWYWx1ZSogaW5zZXJ0Qm90dG9tKHNpemVf
dCBpbmRleCwgT3JpZ2luLCBUeXBlKTsKICAgICBWYWx1ZSogaW5zZXJ0Qm90dG9tKHNpemVfdCBp
bmRleCwgVmFsdWUqKTsKKyAgICAKKyAgICBWYWx1ZSogaW5zZXJ0Q2xvbmUoc2l6ZV90IGluZGV4
LCBWYWx1ZSopOwogCiAgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTgsMTEgKzU4LDE0IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3Byb2MocHJv
YykKICAgICAgICAgLCBtX2Jsb2NrSW5zZXJ0aW9uU2V0KHByb2MpCiAgICAgICAgICwgbV9pbnNl
cnRpb25TZXQocHJvYykKKyAgICAgICAgLCBtX3VzZUNvdW50cyhwcm9jKQogICAgIHsKICAgICB9
CiAKICAgICBib29sIHJ1bigpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wcm9j
Lmhhc1F1aXJrcygpKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX3Byb2MpIHsKICAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKICAgICAgICAgICAgIHBy
b2Nlc3NDdXJyZW50QmxvY2soKTsKQEAgLTcyLDYgKzc1LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG1fcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOwogICAgICAgICAgICAgbV9wcm9jLmludmFs
aWRhdGVDRkcoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpbmRpY2F0
ZXMgdGhhdCB3ZSd2ZSAKKyAgICAgICAgbV9wcm9jLnNldEhhc1F1aXJrcyh0cnVlKTsKKyAgICAg
ICAgCiAgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CiAgICAgfQogICAgIApAQCAtMTg1LDcgKzE5
Miw5NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIERlcGVuZDogeworICAgICAgICAgICAgICAgIGlmIChpc1g4NigpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGxvYWQtbG9hZCBmZW5jZS4gVGhpcyBjb2Rl
Z2VucyB0byBub3RoaW5nIG9uIFg4Ni4gV2UgdXNlIGl0IHRvIHRlbGwgdGhlCisgICAgICAgICAg
ICAgICAgICAgIC8vIGNvbXBpbGVyIG5vdCB0byBibG9jayBsb2FkIG1vdGlvbi4KKyAgICAgICAg
ICAgICAgICAgICAgRmVuY2VWYWx1ZSogZmVuY2UgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8RmVu
Y2VWYWx1ZT4obV9pbmRleCwgbV9vcmlnaW4pOworICAgICAgICAgICAgICAgICAgICBmZW5jZS0+
cmVhZCA9IEhlYXBSYW5nZSgpOworICAgICAgICAgICAgICAgICAgICBmZW5jZS0+d3JpdGUgPSBI
ZWFwUmFuZ2U6OnRvcCgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgLy8gS2lsbCB0aGUgRGVwZW5kLCB3aGljaCBzaG91bGQgdW5sb2NrIGEgYnVuY2ggb2YgY29k
ZSBzaW1wbGlmaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0
aEJvdHRvbShtX2luc2VydGlvblNldCwgbV9pbmRleCk7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgY2Fz
ZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6IHsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IG1f
dmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgICAgIFdpZHRoIHdpZHRoID0g
YXRvbWljLT5vcGVyYXRpb25XaWR0aCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmIChpc0Nhbm9uaWNhbFdpZHRoKHdpZHRoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFsdWUqIGV4cGVjdGVkVmFs
dWUgPSBhdG9taWMtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IC8vIE9uIEFSTSwgdGhlIGxvYWQgcGFydCBvZiB0aGUgQ0FTIGRvZXMgYSBsb2FkIHdpdGggemVy
byBleHRlbnNpb24uIFRoZXJlZm9yZSwgd2UgbmVlZAorICAgICAgICAgICAgICAgIC8vIHRvIHpl
cm8tZXh0ZW5kIHRoZSBpbnB1dC4KKyAgICAgICAgICAgICAgICBWYWx1ZSogbWFza2VkRXhwZWN0
ZWRWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAg
ICAgIG1faW5kZXgsIEJpdEFuZCwgbV9vcmlnaW4sIGV4cGVjdGVkVmFsdWUsCisgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENvbnN0YW50KG1faW5kZXgsIGV4cGVj
dGVkVmFsdWUsIG1hc2sod2lkdGgpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgYXRvbWljLT5jaGlsZCgwKSA9IG1hc2tlZEV4cGVjdGVkVmFsdWU7CisgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAg
ICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNo
Z09yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgICAgICAgICAgY2FzZSBB
dG9taWNYY2hnWG9yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnOiB7CisgICAgICAgICAg
ICAgICAgLy8gT24gWDg2LCB0aGVzZSBtYXkgYWN0dWFsbHkgcmV0dXJuIGdhcmJhZ2UgaW4gdGhl
IGhpZ2ggYml0cy4gT24gQVJNNjQsIHRoZXNlIHNvcnRhCisgICAgICAgICAgICAgICAgLy8gemVy
by1leHRlbmQgdGhlaXIgaGlnaCBiaXRzLCBleGNlcHQgdGhhdCB0aGUgaGlnaCBiaXRzIG1pZ2h0
IGdldCBwb2xsdXRlZCBieSBoaWdoCisgICAgICAgICAgICAgICAgLy8gYml0cyBpbiB0aGUgb3Bl
cmFuZC4gLiBTbywgZWl0aGVyIHdheSwgd2UgbmVlZCB0byB0aHJvdyBhIHNpZ24tZXh0ZW5kIG9u
IHRoZXNlCisgICAgICAgICAgICAgICAgLy8gdGhpbmdzLgorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5vcGNvZGUoKSA9PSBBdG9taWNYY2hnU3ViICYmIG1fdXNlQ291bnRzLm51bVVzZXMobV92
YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9uIHg4NiwgeGNoZ2FkZCBpcyBi
ZXR0ZXIgdGhhbiB4Y2hnc3ViIGlmIGl0IGhhcyBhbnkgdXNlcnMuCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlLT5zZXRLaW5kVW5zYWZlbHkoQXRvbWljWGNoZ0FkZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgTmVnLCBtX29y
aWdpbiwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBib29sIGV4ZW1wdCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBBdG9taWNYY2hnT3I6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICAgICAgICAg
ICAgICAgICAgZXhlbXB0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4ZW1w
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92
YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICAgICAgV2lkdGggd2lkdGggPSBh
dG9taWMtPm9wZXJhdGlvbldpZHRoKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKGlzQ2Fub25pY2FsV2lkdGgod2lkdGgpKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYWx1ZSogbmV3VmFsdWUgPSBt
X2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4
LCBzaWduRXh0ZW5kT3Bjb2RlKHdpZHRoKSwgbV9vcmlnaW4sCisgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydENsb25lKG1faW5kZXgsIG1fdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG5l
d1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTQ3MCw2
ICs1NjYsNyBAQCBwcml2YXRlOgogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAgIEJsb2NrSW5z
ZXJ0aW9uU2V0IG1fYmxvY2tJbnNlcnRpb25TZXQ7CiAgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0
aW9uU2V0OworICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBCYXNpY0Jsb2NrKiBtX2Js
b2NrOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgVmFsdWUqIG1fdmFsdWU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3NB
ZnRlck9wdGltaXphdGlvbnMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1NiwxNSArMTU2LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFJv
dEw6IHsKICAgICAgICAgICAgICAgICAvLyBBUk02NCBkb2Vzbid0IGhhdmUgYSByb3RhdGUgbGVm
dC4KICAgICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChpc0FSTTY0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTaGlm
dCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgTmVnLCBtX3ZhbHVlLT5v
cmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmFs
dWUqIHJvdGF0ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgUm90Uiwg
bV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBuZXdTaGlmdCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KHJvdGF0ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBWYWx1ZSogbmV3U2hpZnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KG1faW5kZXgsIE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEp
KTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHJvdGF0ZSA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxWYWx1ZT4obV9pbmRleCwgUm90UiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNo
aWxkKDApLCBuZXdTaGlmdCk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VX
aXRoSWRlbnRpdHkocm90YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9B
aXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9B
aXIuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsMTQgQEAgbmFtZXNwYWNl
IHsKIAogY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKKy8vIEZJWE1FOiBXZSB3b3VsZG4n
dCBuZWVkIHRoaXMgaWYgQWlyIHN1cHBvcnRlZCBXaWR0aCBtb2RpZmllcnMgaW4gQWlyOjpLaW5k
LgorLy8gT09QUyEhISAobmVlZCBhIGJ1ZyBVUkwpCisjZGVmaW5lIE9QQ09ERV9GT1JfV0lEVEgo
b3Bjb2RlLCB3aWR0aCkgKCBcCisgICAgKHdpZHRoKSA9PSBXaWR0aDggPyBvcGNvZGUgIyMgOCA6
IFwKKyAgICAod2lkdGgpID09IFdpZHRoMTYgPyBvcGNvZGUgIyMgMTYgOiBcCisgICAgKHdpZHRo
KSA9PSBXaWR0aDMyID8gb3Bjb2RlICMjIDMyIDogXAorICAgIG9wY29kZSAjIyA2NCkKKwogY2xh
c3MgTG93ZXJUb0FpciB7CiBwdWJsaWM6CiAgICAgTG93ZXJUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSkKQEAgLTgzLDYgKzkxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2RvbWluYXRvcnMo
cHJvY2VkdXJlLmRvbWluYXRvcnMoKSkKICAgICAgICAgLCBtX3Byb2NlZHVyZShwcm9jZWR1cmUp
CiAgICAgICAgICwgbV9jb2RlKHByb2NlZHVyZS5jb2RlKCkpCisgICAgICAgICwgbV9ibG9ja0lu
c2VydGlvblNldChtX2NvZGUpCisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICAgICAg
LCBtX2VheChYODZSZWdpc3RlcnM6OmVheCkKKyAgICAgICAgLCBtX2VjeChYODZSZWdpc3RlcnM6
OmVjeCkKKyAgICAgICAgLCBtX2VkeChYODZSZWdpc3RlcnM6OmVkeCkKKyNlbmRpZgogICAgIHsK
ICAgICB9CiAKQEAgLTEyNCwxNCArMTM4LDE4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gaG9pc3Rl
ZCBhZGRyZXNzIGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhl
IGxvb3AuCiAgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUu
YmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7Ci0gICAg
ICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgotICAgICAgICAgICAgbV9pbnN0cy5yZXNpemUo
MCk7CiAKICAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9jayk7
CiAKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkxv
d2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4K
KyAgICAgICAgICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+
c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5z
dWNjZXNzb3JzKCkuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRC
bG9jayhtX2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVu
Y3koKSkpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2NrcyBp
biByZXZlcnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hhdCBh
bGxvd3MgdXMKICAgICAgICAgICAgIC8vIHRvIG1hdGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5Lgog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgewpAQCAt
MTQ5LDE5ICsxNjcsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBtX2luc3Rz
IGNvbnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcwotICAgICAgICAg
ICAgLy8gaXQgaW4gcmV2ZXJzZS4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5z
dHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9p
bnN0c1tpXSkKLSAgICAgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5hcHBl
bmRJbnN0KFdURk1vdmUoaW5zdCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KLSAgICAg
ICAgICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7Ci0gICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNz
b3JzKCkuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayht
X2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3koKSkp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25z
KG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1f
YmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwogCiAgICAgICAgIEFpcjo6SW5zZXJ0aW9uU2V0
IGluc2VydGlvblNldChtX2NvZGUpOwogICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBtX3Byb2xv
Z3VlKQpAQCAtNTM4LDcgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gQXJn
KCk7CiAKICAgICAgICAgaW50MzJfdCBvZmZzZXQgPSB2YWx1ZS0+b2Zmc2V0KCk7Ci0gICAgICAg
IFdpZHRoIHdpZHRoID0gdmFsdWUtPmFjY2Vzc1dpZHRoKCk7CisgICAgICAgIFdpZHRoIHdpZHRo
ID0gdmFsdWUtPmxvYWRTdG9yZVdpZHRoKCk7CiAKICAgICAgICAgQXJnIHJlc3VsdCA9IGVmZmVj
dGl2ZUFkZHIodmFsdWUtPmxhc3RDaGlsZCgpLCBvZmZzZXQsIHdpZHRoKTsKICAgICAgICAgQVNT
RVJUKHJlc3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpOwpAQCAtNTYyLDExICs1NzEsMTYgQEAgcHJp
dmF0ZToKICAgICAKICAgICBBcmdQcm9taXNlIGxvYWRQcm9taXNlQW55T3Bjb2RlKFZhbHVlKiBs
b2FkVmFsdWUpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2FkVmFsdWUtPmFzPE1l
bW9yeVZhbHVlPigpKTsKICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKGxvYWRWYWx1ZSkpCiAg
ICAgICAgICAgICByZXR1cm4gQXJnKCk7CiAgICAgICAgIGlmIChjcm9zc2VzSW50ZXJmZXJlbmNl
KGxvYWRWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7Ci0gICAgICAgIEFyZ1Byb21p
c2UgcmVzdWx0KGFkZHIobG9hZFZhbHVlKSwgbG9hZFZhbHVlKTsKKyAgICAgICAgaWYgKGxvYWRW
YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4g
QXJnKCk7CisgICAgICAgIEFyZyBsb2FkQWRkciA9IGFkZHIobG9hZFZhbHVlKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobG9hZEFkZHIpOworICAgICAgICBBcmdQcm9taXNlIHJlc3VsdChsb2Fk
QWRkciwgbG9hZFZhbHVlKTsKICAgICAgICAgaWYgKGxvYWRWYWx1ZS0+dHJhcHMoKSkKICAgICAg
ICAgICAgIHJlc3VsdC5zZXRUcmFwcyh0cnVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTg5OCwxMSArOTEyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKICAgICAgICAgYXBwZW5kKE1vdmUsIHRt
cCh2YWx1ZSksIHRtcChtX3ZhbHVlKSk7Ci0gICAgICAgIGFwcGVuZChNb3ZlLCB0bXAoYW1vdW50
KSwgVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KSk7Ci0gICAgICAgIGFwcGVuZChvcGNvZGUsIFRtcChY
ODZSZWdpc3RlcnM6OmVjeCksIHRtcChtX3ZhbHVlKSk7Ci0jZW5kaWYKKyAgICAgICAgYXBwZW5k
KE1vdmUsIHRtcChhbW91bnQpLCBtX2VjeCk7CisgICAgICAgIGFwcGVuZChvcGNvZGUsIG1fZWN4
LCB0bXAobV92YWx1ZSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29k
ZTMyLCBBaXI6Ok9wY29kZSBvcGNvZGU2ND4KQEAgLTkzMSwxMCArOTQzLDE1IEBAIHByaXZhdGU6
CiAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZTMyLCBBaXI6Ok9wY29kZSBvcGNvZGU2NCwgQ29t
bXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU+CiAgICAgYm9vbCB0cnlB
cHBlbmRTdG9yZUJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCiAgICAgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSk7CisgICAgICAgIAog
ICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNvZGVGb3JUeXBlKG9wY29kZTMyLCBv
cGNvZGU2NCwgbGVmdC0+dHlwZSgpKTsKICAgICAgICAgaWYgKG9wY29kZSA9PSBBaXI6Ok9vcHMp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAorICAgICAgICBpZiAobV92YWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAogICAgICAgICBBcmcgc3RvcmVBZGRyID0gYWRkcihtX3ZhbHVlKTsKICAg
ICAgICAgQVNTRVJUKHN0b3JlQWRkcik7CiAKQEAgLTk5NCwxMCArMTAxMSw0OCBAQCBwcml2YXRl
OgogCiAgICAgICAgIHJldHVybiBJbnN0KG1vdmUsIG1fdmFsdWUsIHRtcCh2YWx1ZSksIGRlc3Qp
OwogICAgIH0KKyAgICAKKyAgICBBaXI6Ok9wY29kZSBzdG9yZU9wY29kZShXaWR0aCB3aWR0aCwg
QmFuayBiYW5rLCBib29sIHJlbGVhc2UpCisgICAgeworICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7
CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFuayA9
PSBHUCk7CisgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVsOCA6IFN0b3JlODsK
KyAgICAgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFuayA9
PSBHUCk7CisgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVsMTYgOiBTdG9yZTE2
OworICAgICAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAg
ICAgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBTdG9y
ZVJlbDMyIDogTW92ZTMyOworICAgICAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghcmVsZWFzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1vdmVGbG9h
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdpZHRo
NjQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpczY0Qml0KCkpOworICAgICAgICAgICAg
c3dpdGNoIChiYW5rKSB7CisgICAgICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgICAgIHJl
dHVybiByZWxlYXNlID8gU3RvcmVSZWw2NCA6IE1vdmU7CisgICAgICAgICAgICBjYXNlIEZQOgor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWxlYXNlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTW92ZURvdWJsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
ICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlKFZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7Cisg
ICAgICAgIHJldHVybiBzdG9yZU9wY29kZShtZW1vcnktPmxvYWRTdG9yZVdpZHRoKCksIG1lbW9y
eS0+YWNjZXNzQmFuaygpLCBtZW1vcnktPmhhc0ZlbmNlKCkpOworICAgIH0KIAogICAgIEluc3Qg
Y3JlYXRlU3RvcmUoVmFsdWUqIHZhbHVlLCBjb25zdCBBcmcmIGRlc3QpCiAgICAgewotICAgICAg
ICBBaXI6Ok9wY29kZSBtb3ZlT3Bjb2RlID0gbW92ZUZvclR5cGUodmFsdWUtPnR5cGUoKSk7Cisg
ICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVPcGNvZGUgPSBzdG9yZU9wY29kZSh2YWx1ZSk7CiAgICAg
ICAgIHJldHVybiBjcmVhdGVTdG9yZShtb3ZlT3Bjb2RlLCB2YWx1ZSwgZGVzdCk7CiAgICAgfQog
CkBAIC0xMDA2LDcgKzEwNjEsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgYXBwZW5kKHRy
YXBwaW5nSW5zdChtX3ZhbHVlLCBjcmVhdGVTdG9yZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncyku
Li4pKSk7CiAgICAgfQotCisgICAgCiAgICAgQWlyOjpPcGNvZGUgbW92ZUZvclR5cGUoVHlwZSB0
eXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xMDczLDcgKzExMjgsNDEg
QEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChpbnN0KTsK
ICAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2hBcHBlbmRpbmdJbnN0cnVjdGlvbnMoQWlyOjpC
YXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgeworICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBpbnN0
cnVjdGlvbnMuIG1faW5zdHMgY29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBw
cm9jZXNzCisgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1faW5zdHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBmb3IgKEluc3QmIGluc3Qg
OiBtX2luc3RzW2ldKQorICAgICAgICAgICAgICAgIHRhcmdldC0+YXBwZW5kSW5zdChXVEZNb3Zl
KGluc3QpKTsKKyAgICAgICAgfQorICAgICAgICBtX2luc3RzLnJlc2l6ZSgwKTsKKyAgICB9Cisg
ICAgCisgICAgQWlyOjpCYXNpY0Jsb2NrKiBuZXdCbG9jaygpCisgICAgeworICAgICAgICByZXR1
cm4gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRBZnRlcihtX2Jsb2NrVG9CbG9ja1ttX2Jsb2Nr
XSk7CisgICAgfQogCisgICAgLy8gTk9URTogVGhpcyB3aWxsIGNyZWF0ZSBhIGNvbnRpbnVhdGlv
biBibG9jayAoYG5leHRCbG9ja2ApICphZnRlciogYW55IGJsb2NrcyB5b3UndmUgY3JlYXRlZCB1
c2luZworICAgIC8vIG5ld0Jsb2NrKCkuIFNvLCBpdCdzIHByZWZlcmFibGUgdG8gY3JlYXRlIGFs
bCBvZiB5b3VyIGJsb2NrcyB1cGZyb250IHVzaW5nIG5ld0Jsb2NrKCkuIEFsc28gbm90ZQorICAg
IC8vIHRoYXQgYW55IGNvZGUgeW91IGVtaXQgYmVmb3JlIHRoaXMgd2lsbCBiZSBwcmVwZW5kZWQg
dG8gdGhlIGNvbnRpbnVhdGlvbiwgYW5kIGFueSBjb2RlIHlvdSBlbWl0CisgICAgLy8gYWZ0ZXIg
dGhpcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBwcmV2aW91cyBibG9jay4KKyAgICB2b2lkIHNw
bGl0QmxvY2soQWlyOjpCYXNpY0Jsb2NrKiYgcHJldmlvdXNCbG9jaywgQWlyOjpCYXNpY0Jsb2Nr
KiYgbmV4dEJsb2NrKQorICAgIHsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBibG9jayA9IG1f
YmxvY2tUb0Jsb2NrW21fYmxvY2tdOworICAgICAgICAKKyAgICAgICAgcHJldmlvdXNCbG9jayA9
IGJsb2NrOworICAgICAgICBuZXh0QmxvY2sgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEFm
dGVyKGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZpbmlzaEFwcGVuZGluZ0luc3RydWN0aW9u
cyhuZXh0QmxvY2spOworICAgICAgICBuZXh0QmxvY2stPnN1Y2Nlc3NvcnMoKSA9IGJsb2NrLT5z
dWNjZXNzb3JzKCk7CisgICAgICAgIGJsb2NrLT5zdWNjZXNzb3JzKCkuY2xlYXIoKTsKKyAgICAg
ICAgCisgICAgICAgIG1faW5zdHMuYXBwZW5kKFZlY3RvcjxJbnN0PigpKTsKKyAgICB9CisgICAg
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIFQq
IGVuc3VyZVNwZWNpYWwoVComIGZpZWxkLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCiAgICAg
ewpAQCAtMTEyMyw3ICsxMjEyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CiAgICAgICAgICAgICAg
ICAgYXJnID0gQXJnOjpjYWxsQXJnKHZhbHVlLnJlcCgpLm9mZnNldEZyb21TUCgpKTsKLSAgICAg
ICAgICAgICAgICBhcHBlbmRTdG9yZSh2YWx1ZS52YWx1ZSgpLCBhcmcpOworICAgICAgICAgICAg
ICAgIGFwcGVuZFN0b3JlKG1vdmVGb3JUeXBlKHZhbHVlLnZhbHVlKCkpLCBhcmcpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTk2MSw2ICsyMDUwLDMwOCBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICB2b2lkIGFwcGVuZFg4NkRp
dihCMzo6T3Bjb2RlIG9wKQorICAgIHsKKyAgICAgICAgQWlyOjpPcGNvZGUgY29udmVydFRvRG91
YmxlV29yZDsKKyAgICAgICAgQWlyOjpPcGNvZGUgZGl2OworICAgICAgICBzd2l0Y2ggKG1fdmFs
dWUtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgY29udmVydFRv
RG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMjsKKyAgICAgICAgICAgIGRpdiA9
IFg4NkRpdjMyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAg
ICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2Q29udmVydFRvUXVhZFdvcmQ2NDsKKyAg
ICAgICAgICAgIGRpdiA9IFg4NkRpdjY0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKG9wID09IERpdiB8fCBv
cCA9PSBNb2QpOworICAgICAgICBUbXAgcmVzdWx0ID0gb3AgPT0gRGl2ID8gbV9lYXggOiBtX2Vk
eDsKKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgbV9lYXgp
OworICAgICAgICBhcHBlbmQoY29udmVydFRvRG91YmxlV29yZCwgbV9lYXgsIG1fZWR4KTsKKyAg
ICAgICAgYXBwZW5kKGRpdiwgbV9lYXgsIG1fZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsK
KyAgICAgICAgYXBwZW5kKE1vdmUsIHJlc3VsdCwgdG1wKG1fdmFsdWUpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFwcGVuZFg4NlVEaXYoQjM6Ok9wY29kZSBvcCkKKyAgICB7CisgICAgICAgIEFpcjo6
T3Bjb2RlIGRpdiA9IG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IFg4NlVEaXYzMiA6IFg4NlVE
aXY2NDsKKworICAgICAgICBBU1NFUlQob3AgPT0gVURpdiB8fCBvcCA9PSBVTW9kKTsKKyAgICAg
ICAgVG1wIHJlc3VsdCA9IG9wID09IFVEaXYgPyBtX2VheCA6IG1fZWR4OworCisgICAgICAgIGFw
cGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBtX2VheCk7CisgICAgICAgIGFwcGVu
ZChYb3I2NCwgbV9lZHgsIG1fZWR4KTsKKyAgICAgICAgYXBwZW5kKGRpdiwgbV9lYXgsIG1fZWR4
LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIHJlc3VsdCwg
dG1wKG1fdmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgQWlyOjpPcGNvZGUgbG9hZExpbmtPcGNv
ZGUoV2lkdGggd2lkdGgsIGJvb2wgZmVuY2UpCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2Ug
PyBPUENPREVfRk9SX1dJRFRIKExvYWRMaW5rQWNxLCB3aWR0aCkgOiBPUENPREVfRk9SX1dJRFRI
KExvYWRMaW5rLCB3aWR0aCk7CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlQ29u
ZE9wY29kZShXaWR0aCB3aWR0aCwgYm9vbCBmZW5jZSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
ZW5jZSA/IE9QQ09ERV9GT1JfV0lEVEgoU3RvcmVDb25kUmVsLCB3aWR0aCkgOiBPUENPREVfRk9S
X1dJRFRIKFN0b3JlQ29uZCwgd2lkdGgpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGNhbiBl
bWl0IGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgcGF0dGVybnM6CisgICAgLy8gQXRvbWljV2Vha0NB
UworICAgIC8vIEJpdFhvcihBdG9taWNXZWFrQ0FTLCAxKQorICAgIC8vIEF0b21pY1N0cm9uZ0NB
UworICAgIC8vIEVxdWFsKEF0b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpCisgICAgLy8gTm90RXF1
YWwoQXRvbWljU3Ryb25nQ0FTLCBleHBlY3RlZCkKKyAgICAvLyBCcmFuY2goQXRvbWljV2Vha0NB
UykKKyAgICAvLyBCcmFuY2goRXF1YWwoQXRvbWljU3Ryb25nQ0FTLCBleHBlY3RlZCkpCisgICAg
Ly8gQnJhbmNoKE5vdEVxdWFsKEF0b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpKQorICAgIC8vCisg
ICAgLy8gSXQgYXNzdW1lcyB0aGF0IGF0b21pY1ZhbHVlIHBvaW50cyB0byB0aGUgQ0FTLCBhbmQg
bV92YWx1ZSBwb2ludHMgdG8gdGhlIGluc3RydWN0aW9uIGJlaW5nCisgICAgLy8gZ2VuZXJhdGVk
LiBJdCBhc3N1bWVzIHRoYXQgeW91J3ZlIGNvbnN1bWVkIGV2ZXJ5dGhpbmcgdGhhdCBuZWVkcyB0
byBiZSBjb25zdW1lZC4KKyAgICB2b2lkIGFwcGVuZENBUyhWYWx1ZSogYXRvbWljVmFsdWUsIGJv
b2wgaW52ZXJ0KQorICAgIHsKKyAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IGF0b21pY1Zh
bHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXRvbWljKTsK
KyAgICAgICAgCisgICAgICAgIGJvb2wgaXNCcmFuY2ggPSBtX3ZhbHVlLT5vcCgpID09IEJyYW5j
aDsKKyAgICAgICAgYm9vbCBpc1N0cm9uZyA9IGF0b21pYy0+b3AoKSA9PSBBdG9taWNTdHJvbmdD
QVM7CisgICAgICAgIGJvb2wgcmV0dXJuc09sZFZhbHVlID0gbV92YWx1ZS0+b3AoKSA9PSBBdG9t
aWNTdHJvbmdDQVM7CisgICAgICAgIAorICAgICAgICBXaWR0aCB3aWR0aCA9IGF0b21pYy0+b3Bl
cmF0aW9uV2lkdGgoKTsKKyAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisKKyAg
ICAgICAgVG1wIHZhbHVlUmVzdWx0VG1wOworICAgICAgICBUbXAgYm9vbFJlc3VsdFRtcDsKKyAg
ICAgICAgaWYgKHJldHVybnNPbGRWYWx1ZSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWludmVydCk7CisgICAgICAgICAgICB2YWx1ZVJlc3VsdFRtcCA9IHRtcChtX3ZhbHVlKTsKKyAg
ICAgICAgICAgIGJvb2xSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgfSBl
bHNlIGlmIChpc0JyYW5jaCkgeworICAgICAgICAgICAgdmFsdWVSZXN1bHRUbXAgPSBtX2NvZGUu
bmV3VG1wKEdQKTsKKyAgICAgICAgICAgIGJvb2xSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQ
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlUmVzdWx0VG1wID0gbV9jb2Rl
Lm5ld1RtcChHUCk7CisgICAgICAgICAgICBib29sUmVzdWx0VG1wID0gdG1wKG1fdmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBUbXAgc3VjY2Vzc0Jvb2xSZXN1bHRUbXA7Cisg
ICAgICAgIGlmIChpc1N0cm9uZyAmJiAhaXNCcmFuY2gpCisgICAgICAgICAgICBzdWNjZXNzQm9v
bFJlc3VsdFRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzdWNjZXNzQm9vbFJlc3VsdFRtcCA9IGJvb2xSZXN1bHRUbXA7CisKKyAgICAgICAgVG1wIGV4
cGVjdGVkVmFsdWVUbXAgPSB0bXAoYXRvbWljLT5jaGlsZCgwKSk7CisgICAgICAgIFRtcCBuZXdW
YWx1ZVRtcCA9IHRtcChhdG9taWMtPmNoaWxkKDEpKTsKKyAgICAgICAgCisgICAgICAgIEZyZXF1
ZW50ZWRCbG9jayBzdWNjZXNzOworICAgICAgICBGcmVxdWVudGVkQmxvY2sgZmFpbHVyZTsKKyAg
ICAgICAgaWYgKGlzQnJhbmNoKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gbV9ibG9ja1RvQmxv
Y2tbbV9ibG9ja10tPnN1Y2Nlc3NvcihpbnZlcnQpOworICAgICAgICAgICAgZmFpbHVyZSA9IG1f
YmxvY2tUb0Jsb2NrW21fYmxvY2tdLT5zdWNjZXNzb3IoIWludmVydCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBhcHBlbmQocmVsYXhl
ZE1vdmVGb3JUeXBlKGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpKSwgaW1tT3JUbXAoYXRvbWljLT5j
aGlsZCgwKSksIG1fZWF4KTsKKyAgICAgICAgICAgIGlmIChyZXR1cm5zT2xkVmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNTdHJvbmdDQVMsIHdp
ZHRoKSwgbV9lYXgsIG5ld1ZhbHVlVG1wLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBhcHBl
bmQocmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpKSwgbV9lYXgsIHZh
bHVlUmVzdWx0VG1wKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNCcmFuY2gpIHsKKyAgICAg
ICAgICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChCcmFuY2hBdG9taWNTdHJvbmdDQVMs
IHdpZHRoKSwgQXJnOjpzdGF0dXNDb25kKE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNzKSwgbV9lYXgs
IG5ld1ZhbHVlVG1wLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrVG9CbG9ja1tt
X2Jsb2NrXS0+c2V0U3VjY2Vzc29ycyhzdWNjZXNzLCBmYWlsdXJlKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKEF0b21pY1N0cm9u
Z0NBUywgd2lkdGgpLCBBcmc6OnN0YXR1c0NvbmQoaW52ZXJ0ID8gTWFjcm9Bc3NlbWJsZXI6OkZh
aWx1cmUgOiBNYWNyb0Fzc2VtYmxlcjo6U3VjY2VzcyksIG1fZWF4LCB0bXAoYXRvbWljLT5jaGls
ZCgxKSksIGFkZHJlc3MsIGJvb2xSZXN1bHRUbXApOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOworICAg
ICAgICAvLyBXZSB3aXNoIHRvIGVtaXQ6CisgICAgICAgIC8vCisgICAgICAgIC8vIEJsb2NrICNy
ZWxvb3A6CisgICAgICAgIC8vICAgICBMb2FkTGluaworICAgICAgICAvLyAgICAgQnJhbmNoIE5v
dEVxdWFsCisgICAgICAgIC8vICAgU3VjY2Vzc29yczogVGhlbjojZmFpbCwgRWxzZTogI3N0b3Jl
CisgICAgICAgIC8vIEJsb2NrICNzdG9yZToKKyAgICAgICAgLy8gICAgIFN0b3JlQ29uZAorICAg
ICAgICAvLyAgICAgWG9yICQxLCAlcmVzdWx0ICAgIDwtLS0gb25seSBpZiAhaW52ZXJ0CisgICAg
ICAgIC8vICAgICBKdW1wCisgICAgICAgIC8vICAgU3VjY2Vzc29yczogI2RvbmUKKyAgICAgICAg
Ly8gQmxvY2sgI2ZhaWw6CisgICAgICAgIC8vICAgICBNb3ZlICRpbnZlcnQsICVyZXN1bHQKKyAg
ICAgICAgLy8gICAgIEp1bXAKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiAjZG9uZQorICAgICAg
ICAvLyBCbG9jayAjZG9uZToKKyAgICAgICAgCisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogcmVs
b29wQmxvY2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHN0b3JlQmxv
Y2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHN1Y2Nlc3NCbG9jayA9
IG51bGxwdHI7CisgICAgICAgIGlmICghaXNCcmFuY2ggJiYgaXNTdHJvbmcpCisgICAgICAgICAg
ICBzdWNjZXNzQmxvY2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGZh
aWxCbG9jayA9IG51bGxwdHI7CisgICAgICAgIGlmICghaXNCcmFuY2gpCisgICAgICAgICAgICBm
YWlsQmxvY2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHN0cm9uZ0Zh
aWxCbG9jazsKKyAgICAgICAgaWYgKGlzU3Ryb25nKQorICAgICAgICAgICAgc3Ryb25nRmFpbEJs
b2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrIGNvbXBhcmlzb25GYWls
OworICAgICAgICBGcmVxdWVudGVkQmxvY2sgd2Vha0ZhaWw7CisgICAgICAgIGlmIChpc1N0cm9u
ZykgeworICAgICAgICAgICAgY29tcGFyaXNvbkZhaWwgPSBzdHJvbmdGYWlsQmxvY2s7CisgICAg
ICAgICAgICB3ZWFrRmFpbCA9IHJlbG9vcEJsb2NrOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKGlzQnJhbmNoKQorICAgICAgICAgICAgICAgIGNvbXBhcmlzb25GYWlsID0gZmFp
bHVyZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wYXJpc29uRmFpbCA9
IGZhaWxCbG9jazsKKyAgICAgICAgICAgIHdlYWtGYWlsID0gZmFpbHVyZTsKKyAgICAgICAgfQor
ICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGJlZ2luQmxvY2s7CisgICAgICAgIEFpcjo6QmFzaWNC
bG9jayogZG9uZUJsb2NrOworICAgICAgICBzcGxpdEJsb2NrKGJlZ2luQmxvY2ssIGRvbmVCbG9j
ayk7CisgICAgICAgIAorICAgICAgICBhcHBlbmQoSnVtcCk7CisgICAgICAgIGJlZ2luQmxvY2st
PnNldFN1Y2Nlc3NvcnMocmVsb29wQmxvY2spOworICAgICAgICAKKyAgICAgICAgcmVsb29wQmxv
Y2stPmFwcGVuZChsb2FkTGlua09wY29kZSh3aWR0aCwgYXRvbWljLT5oYXNGZW5jZSgpKSwgbV92
YWx1ZSwgdmFsdWVSZXN1bHRUbXAsIGFkZHJlc3MpOworICAgICAgICByZWxvb3BCbG9jay0+YXBw
ZW5kKE9QQ09ERV9GT1JfV0lEVEgoQnJhbmNoLCBjYW5vbmljYWxXaWR0aCh3aWR0aCkpLCBtX3Zh
bHVlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSB2YWx1ZVJlc3VsdFRt
cCwgZXhwZWN0ZWRWYWx1ZVRtcCk7CisgICAgICAgIHJlbG9vcEJsb2NrLT5zZXRTdWNjZXNzb3Jz
KGNvbXBhcmlzb25GYWlsLCBzdG9yZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JlQmxv
Y2stPmFwcGVuZChzdG9yZUNvbmRPcGNvZGUod2lkdGgsIGF0b21pYy0+aGFzRmVuY2UoKSksIG1f
dmFsdWUsIG5ld1ZhbHVlVG1wLCBhZGRyZXNzLCBzdWNjZXNzQm9vbFJlc3VsdFRtcCk7CisgICAg
ICAgIGlmIChpc0JyYW5jaCkgeworICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKEJyYW5j
aFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYm9vbFJlc3VsdFRt
cCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgICAgIHN0b3JlQmxvY2stPnNldFN1Y2Nlc3Nv
cnMoc3VjY2Vzcywgd2Vha0ZhaWwpOworICAgICAgICAgICAgZG9uZUJsb2NrLT5zdWNjZXNzb3Jz
KCkuY2xlYXIoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkb25lQmxvY2stPnNpemUo
KSk7CisgICAgICAgICAgICBkb25lQmxvY2stPmFwcGVuZChPb3BzLCBtX3ZhbHVlKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc1N0cm9uZykgeworICAgICAgICAgICAgICAg
IHN0b3JlQmxvY2stPmFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6WmVybyksIHN1Y2Nlc3NCb29sUmVzdWx0VG1wLCBBcmc6OmJpdEltbSgtMSkpOworICAg
ICAgICAgICAgICAgIHN0b3JlQmxvY2stPnNldFN1Y2Nlc3NvcnMoc3VjY2Vzc0Jsb2NrLCByZWxv
b3BCbG9jayk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3VjY2Vzc0Jsb2Nr
LT5hcHBlbmQoTW92ZSwgbV92YWx1ZSwgQXJnOjppbW0oIWludmVydCksIGJvb2xSZXN1bHRUbXAp
OworICAgICAgICAgICAgICAgIHN1Y2Nlc3NCbG9jay0+YXBwZW5kKEp1bXAsIG1fdmFsdWUpOwor
ICAgICAgICAgICAgICAgIHN1Y2Nlc3NCbG9jay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2spOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWludmVydCkKKyAgICAg
ICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKFhvcjMyLCBtX3ZhbHVlLCBBcmc6OmJp
dEltbSgxKSwgYm9vbFJlc3VsdFRtcCwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKEp1bXAsIG1fdmFsdWUpOworICAg
ICAgICAgICAgICAgIHN0b3JlQmxvY2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmFpbEJsb2NrLT5hcHBlbmQoTW92
ZSwgbV92YWx1ZSwgQXJnOjppbW0oaW52ZXJ0KSwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAg
ICBmYWlsQmxvY2stPmFwcGVuZChKdW1wLCBtX3ZhbHVlKTsKKyAgICAgICAgICAgIGZhaWxCbG9j
ay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoaXNTdHJvbmcpIHsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBtX2NvZGUubmV3VG1wKEdQ
KTsKKyAgICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9jay0+YXBwZW5kKHN0b3JlQ29uZE9wY29kZSh3
aWR0aCwgYXRvbWljLT5oYXNGZW5jZSgpKSwgbV92YWx1ZSwgdmFsdWVSZXN1bHRUbXAsIGFkZHJl
c3MsIHRtcCk7CisgICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2stPmFwcGVuZChCcmFuY2hUZXN0
MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIHRtcCwgQXJnOjpiaXRJbW0o
LTEpKTsKKyAgICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9jay0+c2V0U3VjY2Vzc29ycyhmYWlsQmxv
Y2ssIHJlbG9vcEJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGFwcGVu
ZFZvaWRBdG9taWMoQWlyOjpPcGNvZGUgYXRvbWljT3Bjb2RlKQorICAgIHsKKyAgICAgICAgaWYg
KG1fdXNlQ291bnRzLm51bVVzZXMobV92YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICBBcmcgYWRkcmVzcyA9IGFkZHIobV92YWx1ZSk7CisgICAgICAg
IAorICAgICAgICBpZiAoaXNWYWxpZEZvcm0oYXRvbWljT3Bjb2RlLCBBcmc6OkltbSwgYWRkcmVz
cy5raW5kKCkpICYmIGltbShtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKKyAgICAgICAgICAgIGFwcGVu
ZChhdG9taWNPcGNvZGUsIGltbShtX3ZhbHVlLT5jaGlsZCgwKSksIGFkZHJlc3MpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpc1Zh
bGlkRm9ybShhdG9taWNPcGNvZGUsIEFyZzo6VG1wLCBhZGRyZXNzLmtpbmQoKSkpIHsKKyAgICAg
ICAgICAgIGFwcGVuZChhdG9taWNPcGNvZGUsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIGFkZHJl
c3MpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZEdlbmVyYWxBdG9t
aWMoQWlyOjpPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQXRvbWljVmFsdWUqIGF0b21p
YyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAKKyAgICAgICAgQXJnIGFk
ZHJlc3MgPSBhZGRyKG1fdmFsdWUpOworICAgICAgICBUbXAgb2xkVmFsdWUgPSBtX2NvZGUubmV3
VG1wKEdQKTsKKyAgICAgICAgVG1wIG5ld1ZhbHVlID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAg
ICAgIAorICAgICAgICAvLyBXZSBuZWVkIGEgQ0FTIGxvb3Agb3IgYSBMTC9TQyBsb29wLiBVc2lu
ZyBwcmVwYXJlL2F0dGVtcHQgamFyZ29uLCB3ZSB3YW50OgorICAgICAgICAvLworICAgICAgICAv
LyBCbG9jayAjcmVsb29wOgorICAgICAgICAvLyAgICAgUHJlcGFyZQorICAgICAgICAvLyAgICAg
b3Bjb2RlCisgICAgICAgIC8vICAgICBBdHRlbXB0CisgICAgICAgIC8vICAgU3VjY2Vzc29yczog
VGhlbjojZG9uZSwgRWxzZTojcmVsb29wCisgICAgICAgIC8vIEJsb2NrICNkb25lOgorICAgICAg
ICAvLyAgICAgTW92ZSBvbGRWYWx1ZSwgcmVzdWx0CisgICAgICAgIAorICAgICAgICBhcHBlbmQo
cmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgb2xkVmFsdWUsIHRtcChhdG9taWMp
KTsKKyAgICAgICAgCisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogcmVsb29wQmxvY2sgPSBuZXdC
bG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGJlZ2luQmxvY2s7CisgICAgICAgIEFp
cjo6QmFzaWNCbG9jayogZG9uZUJsb2NrOworICAgICAgICBzcGxpdEJsb2NrKGJlZ2luQmxvY2ss
IGRvbmVCbG9jayk7CisgICAgICAgIAorICAgICAgICBhcHBlbmQoSnVtcCk7CisgICAgICAgIGJl
Z2luQmxvY2stPnNldFN1Y2Nlc3NvcnMocmVsb29wQmxvY2spOworICAgICAgICAKKyAgICAgICAg
QWlyOjpPcGNvZGUgcHJlcGFyZU9wY29kZTsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSB7CisgICAgICAgICAgICBj
YXNlIFdpZHRoODoKKyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTG9hZDhTaWduZWRF
eHRlbmRUbzMyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXaWR0
aDE2OgorICAgICAgICAgICAgICAgIHByZXBhcmVPcGNvZGUgPSBMb2FkMTZTaWduZWRFeHRlbmRU
bzMyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXaWR0aDMyOgor
ICAgICAgICAgICAgICAgIHByZXBhcmVPcGNvZGUgPSBNb3ZlMzI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICAgICAgcHJlcGFy
ZU9wY29kZSA9IE1vdmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOwor
ICAgICAgICAgICAgb3Bjb2RlID0gbG9hZExpbmtPcGNvZGUoYXRvbWljLT5vcGVyYXRpb25XaWR0
aCgpLCBhdG9taWMtPmhhc0ZlbmNlKCkpOworICAgICAgICB9CisgICAgICAgIHJlbG9vcEJsb2Nr
LT5hcHBlbmQocHJlcGFyZU9wY29kZSwgbV92YWx1ZSwgYWRkcmVzcywgb2xkVmFsdWUpOworICAg
ICAgICAKKyAgICAgICAgaWYgKG9wY29kZSAhPSBOb3ApIHsKKyAgICAgICAgICAgIGlmIChpbW0o
YXRvbWljLT5jaGlsZCgwKSkgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpU
bXAsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKG9wY29k
ZSwgbV92YWx1ZSwgaW1tKGF0b21pYy0+Y2hpbGQoMCkpLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwor
ICAgICAgICAgICAgZWxzZSBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpU
bXAsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKG9wY29k
ZSwgbV92YWx1ZSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChy
ZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwor
ICAgICAgICAgICAgICAgIGlmIChpbW0oYXRvbWljLT5jaGlsZCgwKSkgJiYgaXNWYWxpZEZvcm0o
b3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgICAgICByZWxvb3BC
bG9jay0+YXBwZW5kKG9wY29kZSwgbV92YWx1ZSwgaW1tKGF0b21pYy0+Y2hpbGQoMCkpLCBuZXdW
YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZWxvb3BC
bG9jay0+YXBwZW5kKG9wY29kZSwgbV92YWx1ZSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCBuZXdW
YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNYODYoKSkg
eworICAgICAgICAgICAgQWlyOjpPcGNvZGUgY2FzT3Bjb2RlID0gT1BDT0RFX0ZPUl9XSURUSChC
cmFuY2hBdG9taWNTdHJvbmdDQVMsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSk7CisgICAgICAg
ICAgICByZWxvb3BCbG9jay0+YXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUo
KSksIG9sZFZhbHVlLCBtX2VheCk7CisgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKGNh
c09wY29kZSwgbV92YWx1ZSwgQXJnOjpzdGF0dXNDb25kKE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNz
KSwgbV9lYXgsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7CisgICAgICAgICAgICBUbXAgYm9vbFJlc3Vs
dCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChz
dG9yZUNvbmRPcGNvZGUoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpLCBhdG9taWMtPmhhc0ZlbmNl
KCkpLCBuZXdWYWx1ZSwgYWRkcmVzcywgYm9vbFJlc3VsdCk7CisgICAgICAgICAgICByZWxvb3BC
bG9jay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvKSwgYm9vbFJlc3VsdCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgfQorICAgICAgICBy
ZWxvb3BCbG9jay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2ssIHJlbG9vcEJsb2NrKTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCBsb3dlcigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUt
Pm9wY29kZSgpKSB7CkBAIC0xOTcxLDMwICsyMzYyLDUwIEBAIHByaXZhdGU6CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExvYWQ6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0
cmFwcGluZ0luc3QobV92YWx1ZSwgbW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgbV92YWx1
ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBNZW1vcnlWYWx1
ZSogbWVtb3J5ID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUgPSBBaXI6Ok9vcHM7CisgICAgICAgICAgICBpZiAobWVtb3J5LT5oYXNG
ZW5jZSgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtZW1vcnktPnR5cGUoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IExv
YWRBY3EzMjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gTG9hZEFjcTY0OworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICBvcGNvZGUgPSBtb3ZlRm9yVHlwZShtZW1vcnktPnR5cGUoKSk7CisgICAgICAg
ICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkciht
X3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExvYWQ4UzogewotICAgICAgICAgICAgYXBwZW5k
KHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIG1fdmFsdWUsIGFk
ZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bj
b2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxOFNp
Z25lZEV4dGVuZFRvMzIgOiBMb2FkOFNpZ25lZEV4dGVuZFRvMzI7CisgICAgICAgICAgICBhcHBl
bmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwg
dG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIExvYWQ4WjogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVl
LCBMb2FkOCwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAg
ICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFz
RmVuY2UoKSA/IExvYWRBY3E4IDogTG9hZDg7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJ
bnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUp
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIExvYWQx
NlM6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9hZDE2U2ln
bmVkRXh0ZW5kVG8zMiwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7Cisg
ICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4o
KS0+aGFzRmVuY2UoKSA/IExvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIgOiBMb2FkMTZTaWduZWRF
eHRlbmRUbzMyOworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNv
ZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBMb2FkMTZaOiB7Ci0gICAgICAgICAg
ICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQxNiwgbV92YWx1ZSwgYWRkcihtX3Zh
bHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBt
X3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3ExNiA6IExvYWQx
NjsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBtX3Zh
bHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotCisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBZGQ6IHsKICAgICAgICAg
ICAgIGlmICh0cnlBcHBlbmRMZWEoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMDky
LDcgKzI1MDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzQ2hpbGwo
KSkKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOwogICAgICAgICAg
ICAgaWYgKGlzSW50KG1fdmFsdWUtPnR5cGUoKSkgJiYgaXNYODYoKSkgewotICAgICAgICAgICAg
ICAgIGxvd2VyWDg2RGl2KERpdik7CisgICAgICAgICAgICAgICAgYXBwZW5kWDg2RGl2KERpdik7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQVNT
RVJUKCFpc1g4NigpIHx8IGlzRmxvYXQobV92YWx1ZS0+dHlwZSgpKSk7CkBAIC0yMTAzLDcgKzI1
MTQsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGNhc2UgVURpdjogewogICAgICAgICAgICAgaWYg
KGlzSW50KG1fdmFsdWUtPnR5cGUoKSkgJiYgaXNYODYoKSkgewotICAgICAgICAgICAgICAgIGxv
d2VyWDg2VURpdihVRGl2KTsKKyAgICAgICAgICAgICAgICBhcHBlbmRYODZVRGl2KFVEaXYpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMjExNywxMyArMjUy
OCwxMyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vZDogewogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaXNYODYoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV92YWx1ZS0+
aXNDaGlsbCgpKTsKLSAgICAgICAgICAgIGxvd2VyWDg2RGl2KE1vZCk7CisgICAgICAgICAgICBh
cHBlbmRYODZEaXYoTW9kKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2UgVU1vZDogewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7Ci0g
ICAgICAgICAgICBsb3dlclg4NlVEaXYoVU1vZCk7CisgICAgICAgICAgICBhcHBlbmRYODZVRGl2
KFVNb2QpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIxNjIsMTAgKzI1
NzMsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBhcHBlbmRVbk9wPE5vdDMyLCBOb3Q2
ND4obV92YWx1ZS0+Y2hpbGQoMCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5p
c0ludCgxKQorICAgICAgICAgICAgICAgICYmIGlzQXRvbWljQ0FTKG1fdmFsdWUtPmNoaWxkKDAp
LT5vcGNvZGUoKSkKKyAgICAgICAgICAgICAgICAmJiBjYW5CZUludGVybmFsKG1fdmFsdWUtPmNo
aWxkKDApKSkgeworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKG1fdmFsdWUtPmNoaWxk
KDApKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRDQVMobV92YWx1ZS0+Y2hpbGQoMCksIHRydWUp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgYXBwZW5kQmluT3A8WG9yMzIsIFhvcjY0LCBYb3JEb3VibGUsIFhvckZsb2F0
LCBDb21tdXRhdGl2ZT4oCiAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFs
dWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICBhcHBlbmRVbk9wPERlcGVu
ZDMyLCBEZXBlbmQ2ND4obV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTaGw6IHsKICAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgxKS0+aXNJbnQzMigxKSkgewpAQCAtMjI2Niw3ICsyNjkxLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGFwcGVuZFN0
b3JlKHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBlbmRTdG9y
ZShtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCkBAIC0yMjg3LDcgKzI3MTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBw
ZW5kU3RvcmUoQWlyOjpTdG9yZTgsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAg
ICAgICAgICBhcHBlbmRTdG9yZShtX3ZhbHVlLCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIzMDgsNyArMjczMyw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBlbmRTdG9yZShBaXI6OlN0b3JlMTYsIHZh
bHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBlbmRTdG9yZShtX3Zh
bHVlLCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKQEAgLTI0MTYsNyArMjg0MSwyMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBFcXVhbDoKLSAgICAgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgY2Fz
ZSBOb3RFcXVhbDogeworICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBBdG9taWNTdHJvbmdDQVMKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkKKyAgICAgICAgICAgICAgICAmJiBjYW5C
ZUludGVybmFsKG1fdmFsdWUtPmNoaWxkKDApKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCgh
bV9sb2NrZWQuY29udGFpbnMobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKSk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKCFtX2xvY2tlZC5jb250YWlucyhtX3ZhbHVlLT5jaGlsZCgxKSkpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKG1fdmFsdWUt
PmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRDQVMobV92YWx1ZS0+Y2hpbGQoMCks
IG1fdmFsdWUtPm9wY29kZSgpID09IE5vdEVxdWFsKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtX2luc3RzLmxh
c3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFyZShtX3ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIExlc3NUaGFuOgogICAgICAg
ICBjYXNlIEdyZWF0ZXJUaGFuOgogICAgICAgICBjYXNlIExlc3NFcXVhbDoKQEAgLTI3MjcsNiAr
MzE2NywzOSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsK
KyAgICAgICAgICAgIGlmIChjYW5CZUludGVybmFsKG1fdmFsdWUtPmNoaWxkKDApKSkgeworICAg
ICAgICAgICAgICAgIFZhbHVlKiBicmFuY2hDaGlsZCA9IG1fdmFsdWUtPmNoaWxkKDApOworICAg
ICAgICAgICAgICAgIHN3aXRjaCAoYnJhbmNoQ2hpbGQtPm9wY29kZSgpKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRl
cm5hbChicmFuY2hDaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENBUyhicmFuY2hD
aGlsZCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAgICAg
ICAgICAgICAgICAvLyBBIGJyYW5jaCBpcyBhIGNvbXBhcmlzb24gdG8gemVyby4KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGJyYW5jaENoaWxkLT5jaGlsZCgwKS0+aXNJbnQoMCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZENBUyhicmFuY2hDaGlsZCwgZmFsc2UpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIEVxdWFsOgorICAgICAgICAgICAgICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgICAgICAg
ICAgICAgIGlmIChicmFuY2hDaGlsZC0+Y2hpbGQoMCktPm9wY29kZSgpID09IEF0b21pY1N0cm9u
Z0NBUworICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbChicmFuY2hDaGls
ZC0+b3Bjb2RlKDApKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgYnJhbmNoQ2hpbGQtPmNo
aWxkKDApLT5jaGlsZCgwKSA9PSBicmFuY2hDaGlsZC0+Y2hpbGQoMSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkLT5jaGlsZCgwKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRDQVMoYnJhbmNoQ2hpbGQtPmNoaWxkKDApLCBicmFuY2hD
aGlsZC0+b3Bjb2RlKCkgPT0gTm90RXF1YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgbV9pbnN0
cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUJyYW5jaChtX3ZhbHVlLT5jaGlsZCgwKSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNzg0LDcgKzMyNTcsODEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGFwcGVuZChBaXI6OkVudHJ5U3dpdGNoKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoK
KyAgICAgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6IHsKKyAgICAgICAgICAgIGFwcGVuZENBUyht
X3ZhbHVlLCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6IHsKKyAgICAgICAgICAgIEF0b21pY1Zh
bHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlm
IChhcHBlbmRWb2lkQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljQWRkLCBhdG9taWMtPm9w
ZXJhdGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihhdG9taWMpOworICAgICAgICAgICAgQWly
OjpPcGNvZGUgb3Bjb2RlID0gT1BDT0RFX0ZPUl9XSURUSChBdG9taWNYY2hnQWRkLCBhdG9taWMt
Pm9wZXJhdGlvbldpZHRoKCkpOworICAgICAgICAgICAgaWYgKGlzVmFsaWRPcGNvZGUob3Bjb2Rl
LCBBcmc6OlRtcCwgYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1v
dmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCB0bXAoYXRv
bWljKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGF0b21pYyksIGFkZHJl
c3MpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEFkZCwgY2Fub25pY2FsV2lk
dGgoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAKKyAgICAgICAgY2FzZSBBdG9taWNYY2hnU3ViOiB7CisgICAgICAgICAgICBBdG9t
aWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAg
ICBpZiAoYXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY1N1YiwgYXRvbWlj
LT5vcGVyYXRpb25XaWR0aCgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoU3Vi
LCBjYW5vbmljYWxXaWR0aChhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hj
aGdBbmQ6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxB
dG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWljKE9QQ09ERV9G
T1JfV0lEVEgoQXRvbWljQW5kLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxB
dG9taWMoT1BDT0RFX0ZPUl9XSURUSChBbmQsIGNhbm9uaWNhbFdpZHRoKGF0b21pYy0+b3BlcmF0
aW9uV2lkdGgoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXRvbWljWGNoZ09yOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1
ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAo
YXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY09yLCBhdG9taWMtPm9wZXJh
dGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChPciwgY2Fub25p
Y2FsV2lkdGgoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOiB7
CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFs
dWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9SX1dJRFRI
KEF0b21pY1hvciwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWljKE9Q
Q09ERV9GT1JfV0lEVEgoWG9yLCBjYW5vbmljYWxXaWR0aChhdG9taWMtPm9wZXJhdGlvbldpZHRo
KCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEF0b21pY1hjaGc6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMg
PSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
QXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNv
ZGUgPSBPUENPREVfRk9SX1dJRFRIKEF0b21pY1hjaGcsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgo
KSk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZE9wY29kZShvcGNvZGUsIEFyZzo6VG1wLCBhZGRy
ZXNzKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWlj
LT50eXBlKCkpLCB0bXAoYXRvbWljLT5jaGlsZCgwKSksIHRtcChhdG9taWMpKTsKKyAgICAgICAg
ICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoYXRvbWljKSwgYWRkcmVzcyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBh
cHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoWG9yLCBjYW5vbmljYWxXaWR0aChh
dG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTI3OTIsNjQgKzMzMzksNyBAQCBwcml2YXRlOgogICAgICAgICBkYXRhTG9n
KCJGQVRBTDogY291bGQgbm90IGxvd2VyICIsIGRlZXBEdW1wKG1fcHJvY2VkdXJlLCBtX3ZhbHVl
KSwgIlxuIik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQot
Ci0gICAgdm9pZCBsb3dlclg4NkRpdihCMzo6T3Bjb2RlIG9wKQotICAgIHsKLSNpZiBDUFUoWDg2
KSB8fCBDUFUoWDg2XzY0KQotICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4
KTsKLSAgICAgICAgVG1wIGVkeCA9IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7Ci0KLSAgICAgICAg
QWlyOjpPcGNvZGUgY29udmVydFRvRG91YmxlV29yZDsKLSAgICAgICAgQWlyOjpPcGNvZGUgZGl2
OwotICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPnR5cGUoKSkgewotICAgICAgICBjYXNlIEludDMy
OgotICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb0RvdWJsZVdv
cmQzMjsKLSAgICAgICAgICAgIGRpdiA9IFg4NkRpdjMyOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2
Q29udmVydFRvUXVhZFdvcmQ2NDsKLSAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQVNTRVJUKG9wID09IERpdiB8fCBvcCA9PSBNb2QpOwotICAgICAgICBYODZSZWdpc3RlcnM6
OlJlZ2lzdGVySUQgcmVzdWx0ID0gb3AgPT0gRGl2ID8gWDg2UmVnaXN0ZXJzOjplYXggOiBYODZS
ZWdpc3RlcnM6OmVkeDsKLQotICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxk
KDApKSwgZWF4KTsKLSAgICAgICAgYXBwZW5kKGNvbnZlcnRUb0RvdWJsZVdvcmQsIGVheCwgZWR4
KTsKLSAgICAgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkp
OwotICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKHJlc3VsdCksIHRtcChtX3ZhbHVlKSk7Ci0KLSNl
bHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdm9pZCBsb3dlclg4NlVEaXYoQjM6Ok9w
Y29kZSBvcCkKLSAgICB7Ci0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKLSAgICAgICAgVG1w
IGVheCA9IFRtcChYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgICAgIFRtcCBlZHggPSBUbXAoWDg2
UmVnaXN0ZXJzOjplZHgpOwotCi0gICAgICAgIEFpcjo6T3Bjb2RlIGRpdiA9IG1fdmFsdWUtPnR5
cGUoKSA9PSBJbnQzMiA/IFg4NlVEaXYzMiA6IFg4NlVEaXY2NDsKLQotICAgICAgICBBU1NFUlQo
b3AgPT0gVURpdiB8fCBvcCA9PSBVTW9kKTsKLSAgICAgICAgWDg2UmVnaXN0ZXJzOjpSZWdpc3Rl
cklEIHJlc3VsdCA9IG9wID09IFVEaXYgPyBYODZSZWdpc3RlcnM6OmVheCA6IFg4NlJlZ2lzdGVy
czo6ZWR4OwotCi0gICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBl
YXgpOwotICAgICAgICBhcHBlbmQoWG9yNjQsIGVkeCwgZWR4KTsKLSAgICAgICAgYXBwZW5kKGRp
diwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkpOwotICAgICAgICBhcHBlbmQoTW92
ZSwgVG1wKHJlc3VsdCksIHRtcChtX3ZhbHVlKSk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFS
QU0ob3ApOwotICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSNlbmRpZgotICAg
IH0KLQorICAgIAogICAgIEluZGV4U2V0PFZhbHVlPiBtX2xvY2tlZDsgLy8gVGhlc2UgYXJlIHZh
bHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgogICAgIEluZGV4TWFwPFZhbHVlLCBU
bXA+IG1fdmFsdWVUb1RtcDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRt
cCBpbiBBaXIuIFdlIHNheSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBp
bm5lZCIuCiAgICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV9waGlUb1RtcDsgLy8gRWFjaCBQaGkg
Z2V0cyBpdHMgb3duIFRtcC4KQEAgLTI4NjQsNyArMzM1NCw3IEBAIHByaXZhdGU6CiAKICAgICBW
ZWN0b3I8VmVjdG9yPEluc3QsIDQ+PiBtX2luc3RzOwogICAgIFZlY3RvcjxJbnN0PiBtX3Byb2xv
Z3VlOwotCisgICAgCiAgICAgQjM6OkJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgYm9vbCBtX2lz
UmFyZTsKICAgICB1bnNpZ25lZCBtX2luZGV4OwpAQCAtMjg3NSw2ICszMzY1LDEyIEBAIHByaXZh
dGU6CiAKICAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOwogICAgIENvZGUmIG1fY29kZTsKKwor
ICAgIEFpcjo6QmxvY2tJbnNlcnRpb25TZXQgbV9ibG9ja0luc2VydGlvblNldDsKKworICAgIFRt
cCBtX2VheDsKKyAgICBUbXAgbV9lY3g7CisgICAgVG1wIG1fZWR4OwogfTsKIAogfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5
VmFsdWUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNNZW1vcnlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDMwICszNCw0OCBAQCBNZW1v
cnlWYWx1ZTo6fk1lbW9yeVZhbHVlKCkKIHsKIH0KIAorVHlwZSBNZW1vcnlWYWx1ZTo6YWNjZXNz
VHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZChvcGNvZGUoKSkpCisgICAgICAgIHJldHVy
biB0eXBlKCk7CisgICAgLy8gVGhpcyBoYXBwZW5zIHRvIHdvcmsgZm9yIGF0b21pY3MsIHRvby4g
VGhhdCdzIHdoeSBBdG9taWNWYWx1ZSBkb2VzIG5vdCBuZWVkIHRvIG92ZXJyaWRlIHRoaXMuCisg
ICAgcmV0dXJuIGNoaWxkKDApLT50eXBlKCk7Cit9CisKK0JhbmsgTWVtb3J5VmFsdWU6OmFjY2Vz
c0JhbmsoKSBjb25zdAoreworICAgIHJldHVybiBiYW5rRm9yVHlwZShhY2Nlc3NUeXBlKCkpOwor
fQorCiBzaXplX3QgTWVtb3J5VmFsdWU6OmFjY2Vzc0J5dGVTaXplKCkgY29uc3QKIHsKKyAgICBy
ZXR1cm4gYnl0ZXMoYWNjZXNzV2lkdGgoKSk7Cit9CisKK1dpZHRoIE1lbW9yeVZhbHVlOjpsb2Fk
U3RvcmVXaWR0aCgpIGNvbnN0Cit7CiAgICAgc3dpdGNoIChvcGNvZGUoKSkgewogICAgIGNhc2Ug
TG9hZDhaOgogICAgIGNhc2UgTG9hZDhTOgogICAgIGNhc2UgU3RvcmU4OgotICAgICAgICByZXR1
cm4gMTsKKyAgICAgICAgcmV0dXJuIFdpZHRoODsKICAgICBjYXNlIExvYWQxNlo6CiAgICAgY2Fz
ZSBMb2FkMTZTOgogICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgcmV0dXJuIDI7CisgICAgICAg
IHJldHVybiBXaWR0aDE2OwogICAgIGNhc2UgTG9hZDoKLSAgICAgICAgcmV0dXJuIHNpemVvZlR5
cGUodHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlwZSh0eXBlKCkpOwogICAgIGNh
c2UgU3RvcmU6Ci0gICAgICAgIHJldHVybiBzaXplb2ZUeXBlKGNoaWxkKDApLT50eXBlKCkpOwor
ICAgICAgICByZXR1cm4gd2lkdGhGb3JUeXBlKGNoaWxkKDApLT50eXBlKCkpOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gV2lkdGg4OwogICAgIH0KIH0KIAogV2lkdGggTWVtb3J5VmFs
dWU6OmFjY2Vzc1dpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gd2lkdGhGb3JCeXRlcyhhY2Nl
c3NCeXRlU2l6ZSgpKTsKKyAgICByZXR1cm4gbG9hZFN0b3JlV2lkdGgoKTsKIH0KIAogdm9pZCBN
ZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKQEAgLTY3LDYgKzg1LDggQEAgdm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoQ29t
bWFQcmludGVyJgogICAgIGlmICgoaXNMb2FkKCkgJiYgZWZmZWN0cygpLnJlYWRzICE9IHJhbmdl
KCkpCiAgICAgICAgIHx8IChpc1N0b3JlKCkgJiYgZWZmZWN0cygpLndyaXRlcyAhPSByYW5nZSgp
KSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAicmFuZ2UgPSAiLCByYW5nZSgpKTsKKyAgICBp
ZiAocGhhbnRvbVJhbmdlKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgInBoYW50b21SYW5n
ZSA9ICIsIHBoYW50b21SYW5nZSgpKTsKIH0KIAogVmFsdWUqIE1lbW9yeVZhbHVlOjpjbG9uZUlt
cGwoKSBjb25zdApAQCAtNzQsNiArOTQsNTggQEAgVmFsdWUqIE1lbW9yeVZhbHVlOjpjbG9uZUlt
cGwoKSBjb25zdAogICAgIHJldHVybiBuZXcgTWVtb3J5VmFsdWUoKnRoaXMpOwogfQogCisvLyBV
c2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2Yg
dGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisvLyBkZXNjcmliZXMgdGhlIHJldHVy
bmVkIHR5cGUpLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAg
IDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAg
ICwgbV9vZmZzZXQob2Zmc2V0KQoreworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAg
ICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgor
ICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAg
IEFTU0VSVCh0eXBlID09IEludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFN0b3JlODoKKyAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlOgorICAg
ICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVm9pZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfQorfQorCisvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJu
IHR5cGUgaXMgaW1wbGllZC4KK01lbW9yeVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgOiBN
ZW1vcnlWYWx1ZShraW5kLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpCit7CisgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7
CisgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2Fz
ZSBMb2FkMTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgfQorfQorCisvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCitNZW1vcnlWYWx1
ZTo6TWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZh
bHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgOiBWYWx1ZShDaGVja2VkT3Bj
b2RlLCBraW5kLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICwgbV9vZmZzZXQo
b2Zmc2V0KQoreworICAgIEFTU0VSVChpc1N0b3JlKGtpbmQub3Bjb2RlKCkpKTsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw0OCArMjcsMTcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRl
ICJCM0JhbmsuaCIKICNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgogI2luY2x1ZGUgIkIzVmFsdWUu
aCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKLS8vIEZJWE1FOiBXZSB3YW50
IHRvIGFsbG93IGZlbmNlZCBtZW1vcnkgYWNjZXNzZXMgb24gQVJNLgotLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjM0OQotCiBjbGFzcyBKU19FWFBPUlRfUFJJ
VkFURSBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhLaW5kIGtpbmQpCiAgICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2Rl
KCkpIHsKLSAgICAgICAgY2FzZSBMb2FkOFo6Ci0gICAgICAgIGNhc2UgTG9hZDhTOgotICAgICAg
ICBjYXNlIExvYWQxNlo6Ci0gICAgICAgIGNhc2UgTG9hZDE2UzoKLSAgICAgICAgY2FzZSBMb2Fk
OgotICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICBj
YXNlIFN0b3JlOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMg
Ym9vbCBpc1N0b3JlKEtpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZC5vcGNv
ZGUoKSkgewotICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgY2FzZSBTdG9yZTE2OgotICAg
ICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBz
dGF0aWMgYm9vbCBpc0xvYWQoS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFjY2Vw
dHMoa2luZCkgJiYgIWlzU3RvcmUoa2luZCk7CisgICAgICAgIHJldHVybiBpc01lbW9yeShraW5k
Lm9wY29kZSgpKTsKICAgICB9CiAKICAgICB+TWVtb3J5VmFsdWUoKTsKQEAgLTc4LDc2ICs0Nyw1
NiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKCkgY29uc3QgeyByZXR1
cm4gbV9yYW5nZTsgfQogICAgIHZvaWQgc2V0UmFuZ2UoY29uc3QgSGVhcFJhbmdlJiByYW5nZSkg
eyBtX3JhbmdlID0gcmFuZ2U7IH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGFuIGFsaWFzIGZvciBy
YW5nZS4KKyAgICBjb25zdCBIZWFwUmFuZ2UmIGFjY2Vzc1JhbmdlKCkgY29uc3QgeyByZXR1cm4g
cmFuZ2UoKTsgfQorICAgIHZvaWQgc2V0QWNjZXNzUmFuZ2UoY29uc3QgSGVhcFJhbmdlJiByYW5n
ZSkgeyBzZXRSYW5nZShyYW5nZSk7IH0KKyAgICAKKyAgICBjb25zdCBIZWFwUmFuZ2UmIGZlbmNl
UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2ZlbmNlUmFuZ2U7IH0KKyAgICB2b2lkIHNldEZlbmNl
UmFuZ2UoY29uc3QgSGVhcFJhbmdlJiByYW5nZSkgeyBtX2ZlbmNlUmFuZ2UgPSByYW5nZTsgfQor
CisgICAgYm9vbCBpc1N0b3JlKCkgY29uc3QgeyByZXR1cm4gaXNTdG9yZShvcGNvZGUoKSk7IH0K
KyAgICBib29sIGlzTG9hZCgpIGNvbnN0IHsgcmV0dXJuIGlzTG9hZChvcGNvZGUoKSk7IH0KIAot
ICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBWb2lkOyB9Ci0gICAg
Ym9vbCBpc0xvYWQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgIT0gVm9pZDsgfQorICAgIGJvb2wg
aGFzRmVuY2UoKSBjb25zdCB7IHJldHVybiAhIWZlbmNlUmFuZ2UoKTsgfQogCisgICAgVHlwZSBh
Y2Nlc3NUeXBlKCkgY29uc3Q7CisgICAgQmFuayBhY2Nlc3NCYW5rKCkgY29uc3Q7CiAgICAgc2l6
ZV90IGFjY2Vzc0J5dGVTaXplKCkgY29uc3Q7Ci0gICAgV2lkdGggYWNjZXNzV2lkdGgoKSBjb25z
dDsKKyAgICAKKyAgICAvLyBTbGlnaHRseSBmYXN0ZXIgdmVyc2lvbiBvZiBhY2Nlc3NXaWR0aCwg
aWYgeW91IGtub3cgdGhhdCB5b3UncmUgd29ya2luZyB3aXRoIGEgbG9hZCBvciBzdG9yZS4KKyAg
ICBXaWR0aCBsb2FkU3RvcmVXaWR0aCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgV2lkdGgg
YWNjZXNzV2lkdGgoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZHVtcE1ldGEoQ29t
bWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBWYWx1ZSogY2xvbmVJbXBsKCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKLQotICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQg
KGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEg
c3VmZml4IHRoYXQKLSAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgotICAgIE1l
bW9yeVZhbHVlKEtpbmQga2luZCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9p
bnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUs
IGtpbmQsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgS2luZCBr
aW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGludDMyX3Qgb2Zmc2V0LCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUs
IG9yaWdpbiwgYXJndW1lbnRzLi4uKQogICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICAg
ICAgLCBtX3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCiAgICAgewotICAgICAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkgewotICAgICAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAg
ICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIExvYWQ4WjoKLSAgICAgICAgICAgIGNhc2UgTG9hZDhTOgotICAgICAgICAgICAgY2FzZSBM
b2FkMTZaOgotICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgotICAgICAgICAgICAgICAgIEFTU0VS
VCh0eXBlID09IEludDMyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgU3RvcmU4OgotICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICAgICAgY2FzZSBT
dG9yZToKLSAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBWb2lkKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICB9CisgICAgCisg
ICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3Ig
YW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorICAgIC8vIGRlc2NyaWJl
cyB0aGUgcmV0dXJuZWQgdHlwZSkuCisgICAgTWVtb3J5VmFsdWUoS2luZCwgVHlwZSwgT3JpZ2lu
LCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKTsKIAogICAgIC8vIFVzZSB0aGlz
IGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgotICAgIE1l
bW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMy
X3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAgOiBNZW1vcnlWYWx1ZShraW5kLCBJbnQzMiwgb3JpZ2lu
LCBwb2ludGVyLCBvZmZzZXQpCi0gICAgewotICAgIH0KKyAgICBNZW1vcnlWYWx1ZShLaW5kLCBP
cmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOwogCiAgICAgLy8gVXNl
IHRoaXMgZm9ybSBmb3Igc3RvcmVzLgotICAgIE1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAw
KQotICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIFZvaWQsIG9yaWdpbiwgdmFs
dWUsIHBvaW50ZXIpCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAsIG1fcmFu
Z2UoSGVhcFJhbmdlOjp0b3AoKSkKLSAgICB7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVE
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgU3RvcmU4OgotICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICAgICAgY2FzZSBT
dG9yZToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KKyAgICBNZW1vcnlWYWx1ZShLaW5k
LCBPcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0g
MCk7CisgICAgCiAgICAgaW50MzJfdCBtX29mZnNldCB7IDAgfTsKLSAgICBIZWFwUmFuZ2UgbV9y
YW5nZTsKKyAgICBIZWFwUmFuZ2UgbV9yYW5nZSB7IEhlYXBSYW5nZTo6dG9wKCkgfTsKKyAgICBI
ZWFwUmFuZ2UgbV9mZW5jZVJhbmdlIHsgSGVhcFJhbmdlKCkgfTsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlz
aW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNs
dWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlICJCM1dpZHRoLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC04Miw3ICs4Myw2IEBA
IGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgTW9kLCAvLyBBbGwgYmV0cyBhcmUgb2ZmIGFz
IHRvIHdoYXQgd2lsbCBoYXBwZW4gd2hlbiB5b3UgZXhlY3V0ZSB0aGlzIGZvciAtMl4zMSUtMSBh
bmQgeCUwLgogICAgIFVNb2QsCiAKLQogICAgIC8vIFBvbHltb3JwaGljIG5lZ2F0aW9uLiBOb3Rl
IHRoYXQgd2Ugb25seSBuZWVkIHRoaXMgZm9yIGZsb2F0aW5nIHBvaW50LCBzaW5jZSBpbnRlZ2Vy
IG5lZ2F0aW9uCiAgICAgLy8gaXMgZXhhY3RseSBsaWtlIFN1YigwLCB4KS4gQnV0IHRoYXQncyBu
b3QgdHJ1ZSBmb3IgZmxvYXRpbmcgcG9pbnQuIFN1YigwLCAwKSBpcyAwLCB3aGlsZQogICAgIC8v
IE5lZygwKSBpcyAtMC4gQWxzbywgd2UgY2Fub25pY2FsaXplIFN1YigwLCB4KSBpbnRvIE5lZyh4
KSBpbiBjYXNlIG9mIGludGVnZXJzLgpAQCAtMTYyLDYgKzE2MiwxMDUgQEAgZW51bSBPcGNvZGUg
OiBpbnQxNl90IHsKICAgICBTdG9yZTE2LAogICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBz
dG9yZSBmb3IgSW50MzIsIEludDY0LCBGbG9hdCwgYW5kIERvdWJsZS4KICAgICBTdG9yZSwKKyAg
ICAKKyAgICAvLyBBdG9taWMgY29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgYSBib29sZWFu
LiBNYXkgY2hvb3NlIHRvIGRvIG5vdGhpbmcgYW5kIHJldHVybiBmYWxzZS4gWW91IGNhbgorICAg
IC8vIHVzdWFsbHkgYXNzdW1lIHRoYXQgdGhpcyBpcyBmYXN0ZXIgYW5kIHJlc3VsdHMgaW4gbGVz
cyBjb2RlIHRoYW4gQXRvbWljU3Ryb25nQ0FTLCB0aG91Z2ggdGhhdCdzCisgICAgLy8gbm90IG5l
Y2Vzc2FyaWx5IHRydWUgb24gSW50ZWwsIGlmIGluc3RydWN0aW9uIHNlbGVjdGlvbiBkb2VzIGl0
cyBqb2IuIEltYWdpbmUgdGhhdCB0aGlzIG9wY29kZSBpcworICAgIC8vIGFzIGlmIHlvdSBkaWQg
dGhpcyBhdG9taWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICAvLyBib29sIEF0b21pY1dlYWtDQVMoVCBleHBlY3RlZFZhbHVlLCBUIG5ld1ZhbHVlLCBUKiBw
dHIpCisgICAgLy8geworICAgIC8vICAgICBpZiAoIXJhbmQoKSkKKyAgICAvLyAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gUmVhbCB3b3JsZCBleGFtcGxlIG9mIHRoaXM6IGNvbnRleHQgc3dpdGNo
IG9uIEFSTSB3aGlsZSBkb2luZyBDQVMuCisgICAgLy8gICAgIGlmICgqcHRyICE9IGV4cGVjdGVk
VmFsdWUpCisgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gICAgICpwdHIgPSBu
ZXdWYWx1ZTsKKyAgICAvLyAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gfQorICAgIC8vCisgICAg
Ly8gTm90ZSB0aGF0IGFsbCBhdG9taWNzIHB1dCB0aGUgcG9pbnRlciBsYXN0IHRvIGJlIGNvbnNp
c3RlbnQgd2l0aCBob3cgbG9hZHMgYW5kIHN0b3JlcyB3b3JrLiBUaGlzCisgICAgLy8gaXMgYSBn
b29meSB0cmFkaXRpb24sIGJ1dCBpdCdzIGhhcm1sZXNzLCBhbmQgYmV0dGVyIHRoYW4gYmVpbmcg
aW5jb25zaXN0ZW50LgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHdlYWsgQ0FTIGhhcyBubyBm
ZW5jaW5nIGd1YXJhbnRlZXMgd2hlbiBpdCBmYWlscy4gVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xs
b3dpbmcKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbiBpcyBhbHdheXMgdmFsaWQ6CisgICAgLy8KKyAg
ICAvLyBCZWZvcmU6CisgICAgLy8KKyAgICAvLyAgICAgICAgIEJyYW5jaChBdG9taWNXZWFrQ0FT
KGV4cGVjdGVkLCBuZXcsIHB0cikpCisgICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhlbjojc3Vj
Y2VzcywgRWxzZTojZmFpbAorICAgIC8vCisgICAgLy8gQWZ0ZXI6CisgICAgLy8KKyAgICAvLyAg
ICAgICAgIEJyYW5jaChFcXVhbChMb2FkKHB0ciksIGV4cGVjdGVkKSkKKyAgICAvLyAgICAgICBT
dWNjZXNzb3JzOiBUaGVuOiNhdHRlbXB0LCBFbHNlOiNmYWlsCisgICAgLy8gICAgIEJCI2F0dGVt
cHQ6CisgICAgLy8gICAgICAgICBCcmFuY2goQXRvbWljV2Vha0NBUyhleHBlY3RlZCwgbmV3LCBw
dHIpKQorICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I3N1Y2Nlc3MsIEVsc2U6I2ZhaWwK
KyAgICAvLworICAgIC8vIEJvdGgga2luZHMgb2YgQ0FTIGZvciBub24tY2Fub25pY2FsIHdpZHRo
cyAoV2lkdGg4IGFuZCBXaWR0aDE2KSBpZ25vcmUgdGhlIGlycmVsZXZhbnQgYml0cyBvZiB0aGUK
KyAgICAvLyBpbnB1dC4KKyAgICBBdG9taWNXZWFrQ0FTLAorICAgIAorICAgIC8vIEF0b21pYyBj
b21wYXJlIGFuZCBzd2FwIHRoYXQgcmV0dXJucyB0aGUgb2xkIHZhbHVlLiBEb2VzIG5vdCBoYXZl
IHRoZSBub25kZXRlcm1pbmlzbSBvZiBXZWFrQ0FTLgorICAgIC8vIFRoaXMgaXMgYSBiaXQgbW9y
ZSBjb2RlIGFuZCBhIGJpdCBzbG93ZXIgaW4gc29tZSBjYXNlcywgdGhvdWdoIG5vdCBieSBhIGxv
dC4gSW1hZ2luZSB0aGF0IHRoaXMKKyAgICAvLyBvcGNvZGUgaXMgYXMgaWYgeW91IGRpZCB0aGlz
IGF0b21pY2FsbHk6CisgICAgLy8KKyAgICAvLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIC8v
IFQgQXRvbWljU3Ryb25nQ0FTKFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSwgVCogcHRyKQor
ICAgIC8vIHsKKyAgICAvLyAgICAgVCBvbGRWYWx1ZSA9ICpwdHI7CisgICAgLy8gICAgIGlmIChv
bGRWYWx1ZSA9PSBleHBlY3RlZFZhbHVlKQorICAgIC8vICAgICAgICAgKnB0ciA9IG5ld1ZhbHVl
OworICAgIC8vICAgICByZXR1cm4gb2xkVmFsdWUKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBO
b3RlIHRoYXQgQXRvbWljV2Vha0NBUyBhbmQgQXRvbWljU3Ryb25nQ0FTIHNvcnQgb2YgaGF2ZSB0
aGlzIGtpbmQgb2YgZXF1aXZhbGVuY2U6CisgICAgLy8KKyAgICAvLyBBdG9taWNXZWFrQ0FTKEBl
eHAsIEBuZXcsIEBwdHIpID09IEVxdWFsKEF0b21pY1N0cm9uZ0NBUyhAZXhwLCBAbmV3LCBAcHRy
KSwgQGV4cCkKKyAgICAvLworICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhlIFdlYWtDQVMgZG9lcyBu
b3Qgc3B1cmlvdXNseSBmYWlsLCBvZiBjb3Vyc2UuCisgICAgQXRvbWljU3Ryb25nQ0FTLAorICAg
IAorICAgIC8vIEF0b21pY2FsbHkgX19fIGEgbWVtb3J5IGxvY2F0aW9uIGFuZCByZXR1cm4gdGhl
IG9sZCB2YWx1ZS4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQG9sZFZhbHVlID0gQXRvbWljWGNo
Z19fXyhAb3BlcmFuZCwgQHB0cikKKyAgICAvLworICAgIC8vIEZvciBub24tY2Fub25pY2FsIHdp
ZHRocyAoV2lkdGg4IGFuZCBXaWR0aDE2KSwgdGhlc2UgcmV0dXJuIHNpZ24tZXh0ZW5kZWQgcmVz
dWx0cyBhbmQgaWdub3JlIHRoZQorICAgIC8vIGlycmVsZXZhbnQgYml0cyBvZiB0aGVpciBpbnB1
dHMuCisgICAgQXRvbWljWGNoZ0FkZCwKKyAgICBBdG9taWNYY2hnQW5kLAorICAgIEF0b21pY1hj
aGdPciwKKyAgICBBdG9taWNYY2hnU3ViLAorICAgIEF0b21pY1hjaGdYb3IsCisgICAgCisgICAg
Ly8gQXRvbWljYWxseSBleGNoYW5nZSBhIHZhbHVlIHdpdGggYSBtZW1vcnkgbG9jYXRpb24uIFN5
bnRheDoKKyAgICAvLworICAgIC8vIEBvbGRWYWx1ZSA9IEF0b21pY1hjaGcoQG5ld1ZhbHVlLCBA
cHRyKQorICAgIEF0b21pY1hjaGcsCisgICAgCisgICAgLy8gSW50cm9kdWNlIGFuIGludmlzaWJs
ZSBkZXBlbmRlbmN5IGZvciBibG9ja2luZyBtb3Rpb24gb2YgbG9hZHMgd2l0aCByZXNwZWN0IHRv
IGVhY2ggb3RoZXIuIFN5bnRheDoKKyAgICAvLworICAgIC8vIEByZXN1bHQgPSBEZXBlbmQoQHBo
YW50b20pCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIGV2ZW50dWFsbHkgY29kZWdlbmVyYXRlZCB0
byBoYXZlIGxvY2FsIHNlbWFudGljcyBhcyBpZiB3ZSBkaWQ6CisgICAgLy8KKyAgICAvLyBAcmVz
dWx0ID0gJDAKKyAgICAvLworICAgIC8vIEJ1dCBpdCBlbnN1cmVzIHRoYXQgdGhlIHVzZXJzIG9m
IEByZXN1bHQgY2Fubm90IGV4ZWN1dGUgdW50aWwgQHBoYW50b20gaXMgY29tcHV0ZWQuCisgICAg
Ly8KKyAgICAvLyBUaGUgY29tcGlsZXIgaXMgbm90IGFsbG93ZWQgdG8gcmVhc29uIGFib3V0IHRo
ZSBmYWN0IHRoYXQgRGVwZW5kIGNvZGVnZW5lcmF0ZXMgdGhpcyB3YXkuIEFueSBraW5kCisgICAg
Ly8gb2YgdHJhbnNmb3JtYXRpb24gb3IgYW5hbHlzaXMgdGhhdCByZWxpZXMgb24gdGhlIGluc2ln
aHQgdGhhdCBEZXBlbmQgaXMgcmVhbGx5IHplcm8gaXMgdW5zb3VuZCwKKyAgICAvLyBiZWNhdXNl
IGl0IHVubG9ja3MgcmVvcmRlcmluZyBvZiB1c2VycyBvZiBAcmVzdWx0IGFuZCBAcGhhbnRvbS4K
KyAgICAvLworICAgIC8vIE9uIFg4NiwgdGhpcyBpcyBsb3dlcmVkIHRvIGEgbG9hZC1sb2FkIGZl
bmNlIGFuZCBAcmVzdWx0IHVzZXMgQHBoYW50b20gZGlyZWN0bHkuCisgICAgLy8KKyAgICAvLyBP
biBBUk0sIHRoaXMgaXMgbG93ZXJlZCBhcyBpZiBsaWtlOgorICAgIC8vCisgICAgLy8gQHJlc3Vs
dCA9IEJpdFhvcihAcGhhbnRvbSwgQHBoYW50b20pCisgICAgLy8KKyAgICAvLyBFeGNlcHQgdGhh
dCB0aGUgY29tcGlsZXIgbmV2ZXIgZ2V0cyBhbiBvcHBvcnR1bml0eSB0byBzaW1wbGlmeSBvdXQg
dGhlIEJpdFhvci4KKyAgICBEZXBlbmQsCiAKICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gY29tcHV0
ZSB0aGUgYWN0dWFsIGFkZHJlc3Mgb2YgYSBXYXNtIG1lbW9yeSBvcGVyYXRpb24uIEl0IHRha2Vz
IGFuIEludFB0cgogICAgIC8vIGFuZCBhIHBpbm5lZCByZWdpc3RlciB0aGVuIGNvbXB1dGVzIHRo
ZSBhcHByb3ByaWF0ZSBJbnRQdHIgYWRkcmVzcy4gRm9yIHRoZSB1c2UtY2FzZSBvZgpAQCAtMzAx
LDYgKzQwMCwxMTAgQEAgaW5saW5lIGJvb2wgaXNEZWZpbml0ZWx5VGVybWluYWwoT3Bjb2RlIAog
ICAgIH0KIH0KIAoraW5saW5lIGJvb2wgaXNMb2FkKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dp
dGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICBjYXNlIExvYWQ4UzoKKyAgICBj
YXNlIExvYWQxNlo6CisgICAgY2FzZSBMb2FkMTZTOgorICAgIGNhc2UgTG9hZDoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworaW5saW5lIGJvb2wgaXNTdG9yZShPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgY2FzZSBTdG9yZTg6CisgICAgY2FzZSBTdG9yZTE2OgorICAgIGNhc2Ug
U3RvcmU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzTG9hZFN0b3JlKE9wY29kZSBvcGNv
ZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICBjYXNl
IExvYWQ4UzoKKyAgICBjYXNlIExvYWQxNlo6CisgICAgY2FzZSBMb2FkMTZTOgorICAgIGNhc2Ug
TG9hZDoKKyAgICBjYXNlIFN0b3JlODoKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgY2FzZSBTdG9y
ZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNBdG9taWMoT3Bjb2RlIG9wY29kZSkKK3sK
KyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNl
IEF0b21pY1N0cm9uZ0NBUzoKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBBdG9t
aWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNoZ1N1
YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hnOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitpbmxpbmUgYm9vbCBpc0F0b21pY0NBUyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3
aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWlj
U3Ryb25nQ0FTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0F0b21pY1hjaGcoT3Bjb2Rl
IG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgQXRvbWljWGNoZ0Fk
ZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAg
Y2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0
b21pY1hjaGc6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzTWVtb3J5QWNjZXNzKE9wY29k
ZSBvcGNvZGUpCit7CisgICAgcmV0dXJuIGlzQXRvbWljKG9wY29kZSkgfHwgaXNMb2FkU3RvcmUo
b3Bjb2RlKTsKK30KKworaW5saW5lIE9wY29kZSBzaWduRXh0ZW5kT3Bjb2RlKFdpZHRoIHdpZHRo
KQoreworICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICBjYXNlIFdpZHRoODoKKyAgICAgICAgcmV0
dXJuIFNFeHQ4OworICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgcmV0dXJuIFNFeHQxNjsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gT29wczsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiBu
YW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDYgKzIwMiw4IEBAIHZvaWQgUHJvY2Vk
dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKICAgICAgICAgfQogICAgICAgICBkYXRhTG9n
KCIgICAgIiwgZGVlcER1bXAoKnRoaXMsIHZhbHVlKSwgIlxuIik7CiAgICAgfQorICAgIGlmICho
YXNRdWlya3MoKSkKKyAgICAgICAgb3V0LnByaW50KCJIYXMgUXVpcmtzOiBUcnVlXG4iKTsKICAg
ICBpZiAodmFyaWFibGVzKCkuc2l6ZSgpKSB7CiAgICAgICAgIG91dC5wcmludCgiVmFyaWFibGVz
OlxuIik7CiAgICAgICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDogdmFyaWFibGVzKCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNyw2ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGFkZEludENvbnN0YW50
KE9yaWdpbiwgVHlwZSwgaW50NjRfdCB2YWx1ZSk7CiAgICAgVmFsdWUqIGFkZEludENvbnN0YW50
KFZhbHVlKiwgaW50NjRfdCB2YWx1ZSk7CiAKKyAgICAvLyBZb3UncmUgZ3VhcmFudGVlZCB0aGF0
IGJvdHRvbSBpcyB6ZXJvLgogICAgIFZhbHVlKiBhZGRCb3R0b20oT3JpZ2luLCBUeXBlKTsKICAg
ICBWYWx1ZSogYWRkQm90dG9tKFZhbHVlKik7CiAKQEAgLTE5NSw2ICsxOTYsMTIgQEAgcHVibGlj
OgogICAgIC8vIGFsaXZlLiBHcmVhdCBmb3IgY29tcGlsZXItZ2VuZXJhdGVkIGRhdGEgc2VjdGlv
bnMsIGxpa2Ugc3dpdGNoIGp1bXAgdGFibGVzIGFuZCBjb25zdGFudCBwb29scy4KICAgICAvLyBU
aGlzIHJldHVybnMgbWVtb3J5IHRoYXQgaGFzIGJlZW4gemVyby1pbml0aWFsaXplZC4KICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiBhZGREYXRhU2VjdGlvbihzaXplX3QpOworICAgIAorICAg
IC8vIFNvbWUgb3BlcmF0aW9ucyBhcmUgc3BlY2lmaWVkIGluIEIzIElSIHRvIGJlaGF2ZSBvbmUg
d2F5IGJ1dCBvbiB0aGlzIGdpdmVuIENQVSB0aGV5IGJlaGF2ZSBhCisgICAgLy8gZGlmZmVyZW50
IHdheS4gV2hlbiB0cnVlLCB0aG9zZSBCMyBJUiBvcHMgc3dpdGNoIHRvIGJlaGF2aW5nIHRoZSBD
UFUgd2F5LCBhbmQgdGhlIG9wdGltaXplciBtYXkKKyAgICAvLyBzdGFydCB0YWtpbmcgYWR2YW50
YWdlIG9mIGl0LgorICAgIGJvb2wgaGFzUXVpcmtzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNRdWly
a3M7IH0KKyAgICB2b2lkIHNldEhhc1F1aXJrcyhib29sIHZhbHVlKSB7IG1faGFzUXVpcmtzID0g
dmFsdWU7IH0KIAogICAgIE9wYXF1ZUJ5cHJvZHVjdHMmIGJ5cHJvZHVjdHMoKSB7IHJldHVybiAq
bV9ieXByb2R1Y3RzOyB9CiAKQEAgLTI1Miw2ICsyNTksNyBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoUHJpbnRTdHJlYW0mLCBPcmlnaW4pPj4gbV9vcmlnaW5QcmludGVy
OwogICAgIGNvbnN0IHZvaWQqIG1fZnJvbnRlbmREYXRhOwogICAgIFBDVG9PcmlnaW5NYXAgbV9w
Y1RvT3JpZ2luTWFwOworICAgIGJvb2wgbV9oYXNRdWlya3MgeyBmYWxzZSB9OwogfTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMiw3
ICs2MDIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBicmVhazsK
LQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmVnOgogICAgICAgICAgICAgLy8gVHVybiB0
aGlzOiBOZWcoY29uc3RhbnQpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IC1jb25zdGFudApA
QCAtMTI5NSw2ICsxMjk1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IFNFeHQ4KEF0b21pY1hjaGdfX18pCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBBdG9taWNYY2hnX19fCisgICAgICAgICAgICAgICAgaWYgKGlzQXRvbWljWGNoZyhtX3ZhbHVl
LT5jaGlsZCgwKS0+b3Bjb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNo
aWxkKDApLT5hczxBdG9taWNWYWx1ZT4oKS0+b3BlcmF0aW9uV2lkdGgoKSA9PSBXaWR0aDgpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgw
KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgU0V4dDE2OgpAQCAt
MTM0Myw2ICsxMzUzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFtX3By
b2MuaGFzUXVpcmtzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihB
dG9taWNYY2hnX19fKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19f
XworICAgICAgICAgICAgICAgIGlmIChpc0F0b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9w
Y29kZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRv
bWljVmFsdWU+KCktPm9wZXJhdGlvbldpZHRoKCkgPT0gV2lkdGgxNikgeworICAgICAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTRXh0MzI6CkBAIC0yMTAxLDIyICsyMTIx
LDI1IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChtX3ZhbHVlLT5udW1DaGlsZHJlbigpID49
IDIpOwogICAgICAgICAKICAgICAgICAgLy8gTGVhdmUgaXQgYWxvbmUgaWYgdGhlIHJpZ2h0IGNo
aWxkIGlzIGEgY29uc3RhbnQuCi0gICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNDb25z
dGFudCgpKQorICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzQ29uc3RhbnQoKQorICAg
ICAgICAgICAgfHwgbV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NB
UykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgwKS0+aXNDb25zdGFudCgpKSB7CisgICAgICAgIGF1dG8gc3dhcCA9IFsmXSAoKSB7CiAg
ICAgICAgICAgICBzdGQ6OnN3YXAobV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEp
KTsKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3dhcCgpOworICAgICAg
ICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJv
bmdDQVMpCisgICAgICAgICAgICByZXR1cm4gc3dhcCgpOworICAgICAgICAKICAgICAgICAgLy8g
U29ydCB0aGUgb3BlcmFuZHMuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGNhbm9uaWNhbGl6YXRpb24u
IFdlIHVzZSB0aGUgaW5kZXggaW5zdGVhZCBvZgogICAgICAgICAvLyB0aGUgYWRkcmVzcyB0byBt
YWtlIHRoaXMgYXQgbGVhc3Qgc2xpZ2h0bHkgZGV0ZXJtaW5pc3RpYy4KLSAgICAgICAgaWYgKG1f
dmFsdWUtPmNoaWxkKDApLT5pbmRleCgpID4gbV92YWx1ZS0+Y2hpbGQoMSktPmluZGV4KCkpIHsK
LSAgICAgICAgICAgIHN0ZDo6c3dhcChtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQo
MSkpOwotICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQorICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmluZGV4KCkgPiBtX3Zh
bHVlLT5jaGlsZCgxKS0+aW5kZXgoKSkKKyAgICAgICAgICAgIHJldHVybiBzd2FwKCk7CiAgICAg
fQogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBhIGZvcndhcmQgYW5hbHlz
aXMuIEluc3RlYWQsIHdlIHVzZXMgYSBib3VuZGVkLXNlYXJjaCBiYWNrd2FyZHMKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQ2LDYgKzM0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQg
IiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJ
bnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZh
bHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTG9hZDoKQEAgLTM1Myw2ICszNTQs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVu
KCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwog
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAq
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAg
ICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgU3RvcmU4OgpAQCAtMzYyLDYgKzM2NCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQz
MiwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hp
bGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAg
ICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgU3RvcmU6CkBAIC0zNjksOCArMzcyLDQ5IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2
YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgp
ID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3Rh
Y2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgp
LmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAzLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1ZS0+
Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJ
REFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRl
clR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21p
Yyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoK
KyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVu
KCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDEp
LT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJ
bnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAq
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgICAgICAgICBjYXNlIEF0
b21pY1hjaGdBbmQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAgICAg
IGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAg
ICAgICAgICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFs
dWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+
dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50
KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOworICAgICAgICAg
ICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBEZXBlbmQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZh
bHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGls
ZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtQWRkcmVzczoKICAgICAgICAgICAgICAgICBW
QUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsK
ICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0
ICIsICp2YWx1ZSkpOwpAQCAtNTM3LDYgKzU4MSwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZUZlbmNlKFZh
bHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpCisgICAg
ICAgICAgICBWQUxJREFURShtZW1vcnR5LT5hY2Nlc3NCYW5rKCkgPT0gR1AsICgiRmVuY2UgYXQg
IiwgKm1lbW9yeSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlQXRvbWljKFZhbHVl
KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSB2YWx1ZS0+YXM8
QXRvbWljVmFsdWU+KCk7CisgICAgICAgIAorICAgICAgICBWQUxJREFURShiZXN0VHlwZShhdG9t
aWMtPm9wZXJhdGlvbldpZHRoKCkpID09IGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgIH0KIAogICAgIHZvaWQgdmFsaWRhdGVTdGFja0FjY2VzcyhWYWx1ZSog
dmFsdWUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MTAsNiArNTEwLDcgQEAgYm9vbCBWYWx1ZTo6cmV0dXJuc0Jvb2wo
KSBjb25zdAogICAgIGNhc2UgQWJvdmVFcXVhbDoKICAgICBjYXNlIEJlbG93RXF1YWw6CiAgICAg
Y2FzZSBFcXVhbE9yVW5vcmRlcmVkOgorICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgY2FzZSBQaGk6CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
aGF2ZSBhIHN0b3J5IGhlcmUuCkBAIC01ODksNiArNTkwLDcgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZm
ZWN0cygpIGNvbnN0CiAgICAgY2FzZSBCZWxvd0VxdWFsOgogICAgIGNhc2UgRXF1YWxPclVub3Jk
ZXJlZDoKICAgICBjYXNlIFNlbGVjdDoKKyAgICBjYXNlIERlcGVuZDoKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBEaXY6CiAgICAgY2FzZSBVRGl2OgpAQCAtNjAwLDE2ICs2MDIsNDQgQEAgRWZm
ZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgY2FzZSBMb2FkOFM6CiAgICAgY2FzZSBM
b2FkMTZaOgogICAgIGNhc2UgTG9hZDE2UzoKLSAgICBjYXNlIExvYWQ6Ci0gICAgICAgIHJlc3Vs
dC5yZWFkcyA9IGFzPE1lbW9yeVZhbHVlPigpLT5yYW5nZSgpOworICAgIGNhc2UgTG9hZDogewor
ICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gYXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAg
IHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+cmFuZ2UoKTsKKyAgICAgICAgaWYgKG1lbW9yeS0+cGhh
bnRvbVJhbmdlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC53cml0ZXMgPSBtZW1vcnktPnBoYW50
b21SYW5nZSgpOworICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKKyAgICAgICAgfQog
ICAgICAgICByZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwor
ICAgIH0KICAgICBjYXNlIFN0b3JlODoKICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgY2FzZSBTdG9y
ZToKLSAgICAgICAgcmVzdWx0LndyaXRlcyA9IGFzPE1lbW9yeVZhbHVlPigpLT5yYW5nZSgpOwor
ICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9y
eVZhbHVlPigpOworICAgICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5yYW5nZSgpOworICAg
ICAgICBpZiAobWVtb3J5LT5waGFudG9tUmFuZ2UoKSkgeworICAgICAgICAgICAgcmVzdWx0LnJl
YWRzID0gbWVtb3J5LT5waGFudG9tUmFuZ2UoKTsKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVl
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgIGNh
c2UgQXRvbWljU3Ryb25nQ0FTOgorICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0
b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hn
U3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6IHsKKyAg
ICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICBy
ZXN1bHQucmVhZHMgPSBtZW1vcnktPnJhbmdlKCkgfCBtZW1vcnktPnBoYW50b21SYW5nZSgpOwor
ICAgICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5yYW5nZSgpIHwgbWVtb3J0eS0+cGhhbnRv
bVJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPnBoYW50b21SYW5nZSgpKQorICAgICAgICAg
ICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQg
PSB0cnVlOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBXYXNtQWRkcmVzczoKICAg
ICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CkBAIC02MTcs
MTggKzY0Nyw3IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgICAgICBjb25z
dCBGZW5jZVZhbHVlKiBmZW5jZSA9IGFzPEZlbmNlVmFsdWU+KCk7CiAgICAgICAgIHJlc3VsdC5y
ZWFkcyA9IGZlbmNlLT5yZWFkOwogICAgICAgICByZXN1bHQud3JpdGVzID0gZmVuY2UtPndyaXRl
OwotICAgICAgICAKLSAgICAgICAgLy8gUHJldmVudCBraWxsaW5nIG9mIGZlbmNlcyB0aGF0IGNs
YWltIG5vdCB0byB3cml0ZSBhbnl0aGluZy4gSXQncyBhIGJpdCB3ZWlyZCB0aGF0IHdlIHVzZQot
ICAgICAgICAvLyBsb2NhbCBzdGF0ZSBhcyB0aGUgd2F5IHRvIGRvIHRoaXMsIGJ1dCBpdCBoYXBw
ZW5zIHRvIHdvcms6IHdlIG11c3QgYXNzdW1lIHRoYXQgd2UgY2Fubm90Ci0gICAgICAgIC8vIGtp
bGwgd3JpdGVzTG9jYWxTdGF0ZSB1bmxlc3Mgd2UgdW5kZXJzdGFuZHMgZXhhY3RseSB3aGF0IHRo
ZSBpbnN0cnVjdGlvbiBpcyBkb2luZyAobGlrZQotICAgICAgICAvLyB0aGUgd2F5IHRoYXQgZml4
U1NBIHVuZGVyc3RhbmRzIFNldC9HZXQgYW5kIHRoZSB3YXkgdGhhdCByZWR1Y2VTdHJlbmd0aCBh
bmQgb3RoZXJzCi0gICAgICAgIC8vIHVuZGVyc3RhbmQgVXBzaWxvbikuIFRoaXMgd291bGQgb25s
eSBiZWNvbWUgYSBwcm9ibGVtIGlmIHdlIGhhZCBzb21lIGFuYWx5c2lzIHRoYXQgd2FzCi0gICAg
ICAgIC8vIGxvb2tpbmcgdG8gdXNlIHRoZSB3cml0ZXNMb2NhbFN0YXRlIGJpdCB0byBpbnZhbGlk
YXRlIGEgQ1NFIG92ZXIgbG9jYWwgc3RhdGUgb3BlcmF0aW9ucy4KLSAgICAgICAgLy8gVGhlbiBh
IEZlbmNlIHdvdWxkIGxvb2sgYmxvY2ssIHNheSwgdGhlIGVsaW1pbmF0aW9uIG9mIGEgcmVkdW5k
YW50IEdldC4gQnV0IGl0IGxpa2UKLSAgICAgICAgLy8gdGhhdCdzIG5vdCBhdCBhbGwgaG93IG91
ciBvcHRpbWl6YXRpb25zIGZvciBTZXQvR2V0L1Vwc2lsb24vUGhpIHdvcmsgLSB0aGV5IGdyb2sg
dGhlaXIKLSAgICAgICAgLy8gb3BlcmF0aW9ucyBkZWVwbHkgZW5vdWdoIHRoYXQgdGhleSBoYXZl
IG5vIG5lZWQgdG8gY2hlY2sgdGhpcyBiaXQgLSBzbyB0aGlzIGNoZWF0IGlzCi0gICAgICAgIC8v
IGZpbmUuCi0gICAgICAgIHJlc3VsdC53cml0ZXNMb2NhbFN0YXRlID0gdHJ1ZTsKKyAgICAgICAg
cmVzdWx0LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ0Nh
bGw6CkBAIC02OTQsNiArNzEzLDcgQEAgVmFsdWVLZXkgVmFsdWU6OmtleSgpIGNvbnN0CiAgICAg
Y2FzZSBDaGVjazoKICAgICBjYXNlIEJpdHdpc2VDYXN0OgogICAgIGNhc2UgTmVnOgorICAgIGNh
c2UgRGVwZW5kOgogICAgICAgICByZXR1cm4gVmFsdWVLZXkoa2luZCgpLCB0eXBlKCksIGNoaWxk
KDApKTsKICAgICBjYXNlIEFkZDoKICAgICBjYXNlIFN1YjoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsMTAgQEAgcHVibGljOgog
ICAgIAogICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBraW5kKCkub3Bjb2RlKCk7
IH0KICAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIGtpbmQgaXMgbWVhbnQgdG8gYmUgaW1tdXRh
YmxlLiBEbyB0aGlzIHdoZW4geW91IGtub3cgdGhhdCB0aGlzIGlzIHNhZmUuIEl0J3Mgbm90Cisg
ICAgLy8gdXN1YWxseSBzYWZlLgorICAgIHZvaWQgc2V0S2luZFVuc2FmZWx5KEtpbmQga2luZCkg
eyBtX2tpbmQgPSBraW5kOyB9CisgICAgCiAgICAgLy8gSXQncyBnb29kIHByYWN0aWNlIHRvIG1p
cnJvciBLaW5kIG1ldGhvZHMgaGVyZSwgc28geW91IGNhbiBzYXkgdmFsdWUtPmlzQmxhaCgpCiAg
ICAgLy8gaW5zdGVhZCBvZiB2YWx1ZS0+a2luZCgpLmlzQmxhaCgpLgogICAgIGJvb2wgaXNDaGls
bCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKS5pc0NoaWxsKCk7IH0KQEAgLTEwNyw2ICsxMTEsOCBA
QCBwdWJsaWM6CiAgICAgLy8gdmFsdWVzIHdpdGggSWRlbnRpdGllcyBvbiBib3R0b20gY29uc3Rh
bnRzLiBGb3IgdGhpcyByZWFzb24sIHRoaXMgdGFrZXMgYSBjYWxsYmFjayB0aGF0IGlzCiAgICAg
Ly8gcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGJvdHRvbXMuIFRoZXJlJ3MgYSB1dGlsaXR5IGZv
ciB0aGlzLCBzZWUgQjNCb3R0b21Qcm92aWRlci5oLiBZb3UKICAgICAvLyBjYW4gYWxzbyBhY2Nl
c3MgdGhhdCB1dGlsaXR5IHVzaW5nIHJlcGxhY2VXaXRoQm90dG9tKEluc2VydGlvblNldCYsIHNp
emVfdCkuCisgICAgLy8KKyAgICAvLyBZb3UncmUgZ3VhcmFudGVlZCB0aGF0IGJvdHRvbSBpcyB6
ZXJvLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJvdHRvbVByb3ZpZGVyPgogICAgIHZvaWQgcmVw
bGFjZVdpdGhCb3R0b20oY29uc3QgQm90dG9tUHJvdmlkZXImKTsKICAgICAKQEAgLTMyMSw2ICsz
MjcsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElUb0Y6CiAgICAgICAgIGNhc2UgQml0d2lz
ZUNhc3Q6CiAgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIERlcGVuZDoKICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShudW1BcmdzICE9IDEpKQogICAgICAgICAgICAgICAgIGJhZEtp
bmQoa2luZCwgbnVtQXJncyk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1dpZHRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNXaWR0aC5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1dpZHRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMzggQEAK
IAogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworVHlwZSBiZXN0VHlwZShCYW5rIGJhbmssIFdpZHRoIHdpZHRoKQoreworICAg
IHN3aXRjaCAod2lkdGgpIHsKKyAgICBjYXNlIFdpZHRoODoKKyAgICBjYXNlIFdpZHRoMTY6Cisg
ICAgY2FzZSBXaWR0aDMyOgorICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgY2FzZSBH
UDoKKyAgICAgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAg
ICAgIHJldHVybiBGbG9hdDsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVm9pZDsKKyAgICBjYXNlIFdpZHRoNjQ6CisgICAg
ICAgIHN3aXRjaCAoYmFuaykgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJu
IEludDY0OworICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAg
ICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gVm9pZDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gVm9pZDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKIG5hbWVzcGFj
ZSBXVEYgewogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpCMzo6
V2lkdGggd2lkdGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDE4IEBAIGlubGluZSBXaWR0aCB3aWR0aEZvclR5cGUoVHlwZSB0
eXBlKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCitpbmxpbmUgV2lkdGggY2Fub25p
Y2FsV2lkdGgoV2lkdGggd2lkdGgpCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KFdpZHRoMzIsIHdp
ZHRoKTsKK30KKworaW5saW5lIFdpZHRoIGlzQ2Fub25pY2FsV2lkdGgoV2lkdGggd2lkdGgpCit7
CisgICAgcmV0dXJuIHdpZHRoID49IFdpZHRoMzI7Cit9CisKK1R5cGUgYmVzdFR5cGUoQmFuayBi
YW5rLCBXaWR0aCB3aWR0aCk7CisKIGlubGluZSBXaWR0aCBjb25zZXJ2YXRpdmVXaWR0aChCYW5r
IGJhbmspCiB7CiAgICAgcmV0dXJuIGJhbmsgPT0gR1AgPyBwb2ludGVyV2lkdGgoKSA6IFdpZHRo
NjQ7CkBAIC05Myw2ICsxMDUsMjAgQEAgaW5saW5lIFdpZHRoIHdpZHRoRm9yQnl0ZXModW5zaWdu
ZWQgYnl0ZQogICAgIH0KIH0KIAoraW5saW5lIHVpbnQ2NF90IG1hc2soV2lkdGggd2lkdGgpCit7
CisgICAgc3dpdGNoICh3aWR0aCkgeworICAgIGNhc2UgV2lkdGg4OgorICAgICAgICByZXR1cm4g
MHgwMDAwMDAwMDAwMDAwMGZmbGx1OworICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgcmV0dXJu
IDB4MDAwMDAwMDAwMDAwZmZmZmxsdTsKKyAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgIHJldHVy
biAweDAwMDAwMDAwZmZmZmZmZmZsbHU7CisgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICByZXR1
cm4gMHhmZmZmZmZmZmZmZmZmZmZmbGx1OworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDcgQEAgdW5z
aWduZWQgQXJnOjpqc0hhc2goKSBjb25zdAogICAgIGNhc2UgUmVsQ29uZDoKICAgICBjYXNlIFJl
c0NvbmQ6CiAgICAgY2FzZSBEb3VibGVDb25kOgorICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICBj
YXNlIFdpZHRoQXJnOgogICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
b2Zmc2V0KTsKICAgICAgICAgYnJlYWs7CkBAIC0xODIsNiArMTgzLDkgQEAgdm9pZCBBcmc6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAg
IG91dC5wcmludChhc0RvdWJsZUNvbmRpdGlvbigpKTsKICAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgU3RhdHVzQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzU3RhdHVzQ29uZGl0aW9uKCkpOwor
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBvdXQucHJpbnQocG9p
bnRlckR1bXAoc3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI0MSw2ICsyNDUsOSBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAgICAgY2FzZSBBcmc6
OkRvdWJsZUNvbmQ6CiAgICAgICAgIG91dC5wcmludCgiRG91YmxlQ29uZCIpOwogICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBcmc6OlN0YXR1c0NvbmQ6CisgICAgICAgIG91dC5wcmludCgiU3Rh
dHVzQ29uZCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OlNwZWNpYWw6CiAgICAg
ICAgIG91dC5wcmludCgiU3BlY2lhbCIpOwogICAgICAgICByZXR1cm47CkBAIC0yODUsNiArMjky
LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZwogICAgIGNhc2Ug
QXJnOjpFYXJseURlZjoKICAgICAgICAgb3V0LnByaW50KCJFYXJseURlZiIpOwogICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBcmc6OkVhcmx5WkRlZjoKKyAgICAgICAgb3V0LnByaW50KCJFYXJs
eVpEZWYiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpTY3JhdGNoOgogICAgICAg
ICBvdXQucHJpbnQoIlNjcmF0Y2giKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3
IEBAIHB1YmxpYzoKICAgICAgICAgUmVsQ29uZCwKICAgICAgICAgUmVzQ29uZCwKICAgICAgICAg
RG91YmxlQ29uZCwKKyAgICAgICAgU3RhdHVzQ29uZCwKICAgICAgICAgU3BlY2lhbCwKICAgICAg
ICAgV2lkdGhBcmcKICAgICB9OwpAQCAtMTUxLDYgKzE1Miw4IEBAIHB1YmxpYzoKICAgICAgICAg
Ly8gYXMgVXNlIGhhcyB1bmRlZmluZWQgYmVoYXZpb3I6IHRoZSB1c2UgbWF5IGhhcHBlbiBiZWZv
cmUgdGhlIGRlZiwgb3IgaXQgbWF5IGhhcHBlbiBhZnRlcgogICAgICAgICAvLyBpdC4KICAgICAg
ICAgRWFybHlEZWYsCisgICAgICAgICAgICAKKyAgICAgICAgRWFybHlaRGVmLAogCiAgICAgICAg
IC8vIFNvbWUgaW5zdHJ1Y3Rpb25zIG5lZWQgYSBzY3JhdGNoIHJlZ2lzdGVyLiBXZSBtb2RlbCB0
aGlzIGJ5IHNheWluZyB0aGF0IHRoZSB0ZW1wb3JhcnkgaXMKICAgICAgICAgLy8gZGVmaW5lZCBl
YXJseSBhbmQgdXNlZCBsYXRlLiBUaGlzIHJvbGUgaW1wbGllcyB0aGF0LgpAQCAtMTg2LDYgKzE4
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZUFkZHI6
CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMjA2LDYgKzIxMCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBVc2VBZGRyOgog
ICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNh
c2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjI4LDYgKzIzMyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2Ug
RWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIHJv
bGU7CiAgICAgICAgIGNhc2UgVXNlOgogICAgICAgICAgICAgcmV0dXJuIENvbGRVc2U7CkBAIC0y
NTMsNiArMjU5LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgogICAgICAg
ICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFy
bHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjc0LDYgKzI4MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
Y2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6
CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjk0LDYgKzMwMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6CiAgICAg
ICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICBjYXNl
IFNjcmF0Y2g6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzE1LDYg
KzMyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJs
eVpEZWY6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CkBAIC0zMzAsNiArMzQwLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFVzZUFk
ZHI6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAg
ICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAgY2FzZSBM
YXRlQ29sZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM1OCw2ICszNjksNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgWkRlZjoK
ICAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtNTMzLDYgKzU0NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogCisgICAgc3RhdGljIEFyZyBzdGF0dXNDb25kKE1hY3JvQXNzZW1ibGVyOjpTdGF0dXND
b25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fa2luZCA9IFN0YXR1c0NvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGNv
bmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBzdGF0aWMgQXJn
IHNwZWNpYWwoQWlyOjpTcGVjaWFsKiBzcGVjaWFsKQogICAgIHsKICAgICAgICAgQXJnIHJlc3Vs
dDsKQEAgLTY1OCwxMiArNjc4LDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9
PSBEb3VibGVDb25kOwogICAgIH0KIAorICAgIGJvb2wgaXNTdGF0dXNDb25kKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3RhdHVzQ29uZDsKKyAgICB9CisKICAgICBi
b29sIGlzQ29uZGl0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7
CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBj
YXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtODUxLDYgKzg3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAg
ICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKKyAgICAgICAgY2FzZSBT
dGF0dXNDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CiAgICAgICAgIGNhc2UgV2lkdGhBcmc6
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg3Miw2ICs4OTksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNl
IERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgY2FzZSBTcGVj
aWFsOgogICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICBjYXNlIEludmFsaWQ6CkBAIC0x
MDU4LDYgKzEwODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAg
Y2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3Rh
dHVzQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBjYXNlIFdpZHRoQXJnOgog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTc3LDYgKzEyMDYsMTIgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlv
bj4obV9vZmZzZXQpOwogICAgIH0KICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6U3RhdHVzQ29u
ZGl0aW9uIGFzU3RhdHVzQ29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c1N0YXR1c0NvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxl
cjo6U3RhdHVzQ29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorICAgIAogICAgIC8vIFRlbGxz
IHlvdSBpZiB0aGUgQXJnIGlzIGludmVydGlibGUuIE9ubHkgY29uZGl0aW9uIGFyZ3VtZW50cyBh
cmUgaW52ZXJ0aWJsZSwgYW5kIGV2ZW4gZm9yIHRob3NlLCB0aGVyZQogICAgIC8vIGFyZSBhIGZl
dyBleGNlcHRpb25zIC0gbm90YWJseSBPdmVyZmxvdyBhbmQgU2lnbmVkLgogICAgIGJvb2wgaXNJ
bnZlcnRpYmxlKCkgY29uc3QKQEAgLTExODQsNiArMTIxOSw3IEBAIHB1YmxpYzoKICAgICAgICAg
c3dpdGNoIChraW5kKCkpIHsKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIERv
dWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXI6OmlzSW52ZXJ0aWJsZShhc1Jlc3VsdENvbmRpdGlvbigpKTsKQEAgLTEyMDQsNiArMTI0
MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiByZXNDb25kKE1hY3JvQXNzZW1ibGVy
OjppbnZlcnQoYXNSZXN1bHRDb25kaXRpb24oKSkpOwogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6
CiAgICAgICAgICAgICByZXR1cm4gZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0KGFz
RG91YmxlQ29uZGl0aW9uKCkpKTsKKyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgorICAgICAgICAg
ICAgcmV0dXJuIHN0YXR1c0NvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc1N0YXR1c0NvbmRp
dGlvbigpKSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAyMTI5
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlCiAKIGNvbnN0IGNoYXIqIGNvbnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVm
aXggPSAiIyI7CiAKK3ZvaWQgQmFzaWNCbG9jazo6c2V0U3VjY2Vzc29ycyhCYXNpY0Jsb2NrKiBi
bG9jaykKK3sKKyAgICBtX3N1Y2Nlc3NvcnMucmVzaXplKDEpOworICAgIG1fc3VjY2Vzc29yc1sw
XSA9IHRhcmdldDsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpzZXRTdWNjZXNzb3JzKEZyZXF1ZW50
ZWRCbG9jayB0YWtlbiwgRnJlcXVlbnRlZEJsb2NrIG5vdFRha2VuKQoreworICAgIG1fc3VjY2Vz
c29ycy5yZXNpemUoMik7CisgICAgbV9zdWNjZXNzb3JzWzBdID0gdGFrZW47CisgICAgbV9zdWNj
ZXNzb3JzWzFdID0gbm90VGFrZW47Cit9CisKIGJvb2wgQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgcmV0dXJuIEIzOjphZGRQcmVkZWNlc3Nvcih0
aGlzLCBibG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2lj
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJh
c2ljQmxvY2suaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDkgQEAgcHVi
bGljOgogICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVy
biBtX3N1Y2Nlc3NvcnM7IH0KICAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1
cm4gbV9zdWNjZXNzb3JzOyB9CiAKKyAgICB2b2lkIHNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJs
b2NrKTsKKyAgICB2b2lkIHNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrLCBGcmVxdWVudGVk
QmxvY2spOworCiAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsgfQogICAgIEJhc2ljQmxv
Y2sqJiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gc3VjY2Vzc29yKGlu
ZGV4KS5ibG9jaygpOyB9CiAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNj
ZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWlyQmxvY2tJbnNlcnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9C
dWJibGVTb3J0Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KENvZGUgJmNvZGUp
CisgICAgOiBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQoY29kZS5tX2Jsb2NrcykKK3sKK30KKwor
QmxvY2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpCit7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0
aW9uU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJCbG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNHZW5lcmljQmxvY2tJc25lcnRp
b25TZXQuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK3R5cGVkZWYgR2Vu
ZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+OjpCbG9ja0luc2VydGlvbiBCbG9ja0lu
c2VydGlvbjsKKworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgOiBwdWJsaWMgR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+IHsKK3B1YmxpYzoKKyAgICBCbG9ja0luc2VydGlvblNl
dChDb2RlJik7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBldmVudHVhbGx5IGltcGxlbWVudCBCMzo6QmxvY2tJbnNlcnRpb25TZXQncyBz
cGxpdEZvcndhcmQoKS4KK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYg
KzczLDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAgICAgICBk
YXRhTG9nKCJJbml0aWFsIGFpcjpcbiIpOwogICAgICAgICBkYXRhTG9nKGNvZGUpOwogICAgIH0K
KyAgICAKKyAgICBzaW1wbGlmeUNGRyhjb2RlKTsKIAogICAgIGxvd2VyTWFjcm9zKGNvZGUpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29k
ZXMJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NjgsMjggKzY2OCwzODAgQEAgTG9hZDggVTpHOjgs
IFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3E4IFU6Rzo4
LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBTdG9yZTggVTpHOjgs
IEQ6Rzo4CiAgICAgVG1wLCBJbmRleAogICAgIFRtcCwgQWRkcgogICAgIHg4NjogSW1tLCBJbmRl
eAogICAgIHg4NjogSW1tLCBBZGRyCiAKK1N0b3JlUmVsOCBVOkc6OCwgRDpHOjgKKyAgICBUbXAs
IEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisgICAgeDg2OiBJbW0s
IEFkZHIKKwogTG9hZDhTaWduZWRFeHRlbmRUbzMyIFU6Rzo4LCBaRDpHOjMyCiAgICAgQWRkciwg
VG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIgVTpHOjgsIFpE
Okc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIExvYWQxNiBVOkc6MTYsIFpE
Okc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3ExNiBVOkc6MTYs
IFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIExvYWQxNlNpZ25lZEV4
dGVuZFRvMzIgVTpHOjE2LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAog
CitMb2FkQWNxMTZTaWduZWRFeHRlbmRUbzMyIFU6RzoxNiwgWkQ6RzozMgorICAgIEFkZHIsIFRt
cAorICAgIEluZGV4LCBUbXAKKwogU3RvcmUxNiBVOkc6MTYsIEQ6RzoxNgogICAgIFRtcCwgSW5k
ZXgKICAgICBUbXAsIEFkZHIKIAorU3RvcmVBY3ExNiBVOkc6MTYsIEQ6RzoxNgorICAgIFRtcCwg
SW5kZXgKKyAgICBUbXAsIEFkZHIKKworTG9hZEFjcTMyIFU6RzozMiBaRDpHOjMyCisgICAgVG1w
LCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK1N0b3JlUmVsMzIgVTpHOjMy
IFpEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisgICAgeDg2OiBJbW0sIEFk
ZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKworNjQ6IExvYWRBY3E2NCBVOkc6NjQgWkQ6Rzo2NAor
ICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCis2NDogU3RvcmVS
ZWw2NCBVOkc6NjQgWkQ6Rzo2NAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKyAgICB4
ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorCisjIFRoZSBmaXJzdCBvcGVyYW5k
IGlzIHJheC4KK3g4NjogQXRvbWljU3Ryb25nQ0FTOCBVOkc6MzIsIFVEOkc6OCwgVTpHOjgsIFVE
Okc6OCwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBT
dGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVMx
NiBVOkc6MzIsIFVEOkc6MTYsIFU6RzozMiwgVUQ6RzoxNiwgWkQ6Rzo4CisgICAgU3RhdHVzQ29u
ZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4
LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVMzMiBVOkc6MzIsIFVEOkc6MzIsIFU6RzozMiwg
VUQ6RzozMiwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAg
ICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2XzY0OiBBdG9taWNTdHJv
bmdDQVM2NCBVOkc6MzIsIFVEOkc6NjQsIFU6Rzo2NCwgVUQ6Rzo2NCwgWkQ6Rzo4CisgICAgU3Rh
dHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAs
IEluZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVM4IFVEOkc6OCwgVTpHOjgsIFVEOkc6
OAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBBdG9t
aWNTdHJvbmdDQVMxNiBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYKKyAgICBUbXAqLCBUbXAsIEFk
ZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljU3Ryb25nQ0FTMzIgVUQ6Rzoz
MiwgVTpHOjMyLCBVRDpHOjMyCisgICAgVG1wKiwgVG1wLCBBZGRyCisgICAgVG1wKiwgVG1wLCBJ
bmRleAorCit4ODZfNjQ6IEF0b21pY1N0cm9uZ0NBUzY0IFVEOkc6NjQsIFU6Rzo2NCwgVUQ6Rzo2
NAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBCcmFu
Y2hBdG9taWNTdHJvbmdDQVM4IFU6RzozMiwgVUQ6Rzo4LCBVOkc6OCwgVUQ6Rzo4IC9icmFuY2gK
KyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBU
bXAsIEluZGV4CisKK3g4NjogQnJhbmNoQXRvbWljU3Ryb25nQ0FTMTYgVTpHOjMyLCBVRDpHOjE2
LCBVOkc6MzIsIFVEOkc6MTYgL2JyYW5jaAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRk
cgorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBCcmFuY2hBdG9taWNT
dHJvbmdDQVMzMiBVOkc6MzIsIFVEOkc6MzIsIFU6RzozMiwgVUQ6RzozMiAvYnJhbmNoCisgICAg
U3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJ
bmRleAorCit4ODZfNjQ6IEJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0IFU6RzozMiwgVUQ6Rzo2NCwg
VTpHOjY0LCBVRDpHOjY0IC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIK
KyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljQWRkOCBVOkc6
OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgor
ICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNBZGQxNiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJ
bW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAor
Cit4ODY6IEF0b21pY0FkZDMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIElt
bSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWlj
QWRkNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAg
IFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNTdWI4IFU6Rzo4LCBVRDpH
OjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1w
LCBJbmRleAorCit4ODY6IEF0b21pY1N1YjE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRk
cgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Njog
QXRvbWljU3ViMzIgVTpHOjMyLCBVRDpHOjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRl
eAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNTdWI2NCBV
Okc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FuZDggVTpHOjgsIFVEOkc6OAorICAg
IEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4
CisKK3g4NjogQXRvbWljQW5kMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAg
SW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNB
bmQzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY0FuZDY0IFU6Rzo2NCwg
VUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljT3I4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFk
ZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6
IEF0b21pY09yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRl
eAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNPcjMyIFU6Rzoz
MiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIK
KyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljT3I2NCBVOkc6NjQsIFVEOkc6NjQKKyAg
ICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCit4ODY6IEF0b21pY1hvcjggVTpHOjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIElt
bSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljWG9y
MTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRt
cCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNYb3IzMiBVOkc6MzIsIFVEOkc6
MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1w
LCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1hvcjY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwg
QWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4
NjogQXRvbWljTmVnOCBVRDpHOjgKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNO
ZWcxNiBVRDpHOjE2CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogQXRvbWljTmVnMzIgVUQ6
RzozMgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODZfNjQ6IEF0b21pY05lZzY0IFVEOkc6NjQK
KyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOb3Q4IFVEOkc6OAorICAgIEFkZHIK
KyAgICBJbmRleAorCit4ODY6IEF0b21pY05vdDE2IFVEOkc6MTYKKyAgICBBZGRyCisgICAgSW5k
ZXgKKworeDg2OiBBdG9taWNOb3QzMiBVRDpHOjMyCisgICAgQWRkcgorICAgIEluZGV4CisKK3g4
Nl82NDogQXRvbWljTm90NjQgVUQ6Rzo2NAorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0
b21pY1hjaGdBZGQ4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCit4ODY6IEF0b21pY1hjaGdBZGQxNiBVRDpHOjE2LCBVRDpHOjE2CisgICAgVG1wLCBBZGRy
CisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQzMiBVRDpHOjMyLCBVRDpHOjMy
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1hjaGdBZGQ2
NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6
IEF0b21pY1hjaGc4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCit4ODY6IEF0b21pY1hjaGcxNiBVRDpHOjE2LCBVRDpHOjE2CisgICAgVG1wLCBBZGRyCisg
ICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGczMiBVRDpHOjMyLCBVRDpHOjMyCisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1hjaGc2NCBVRDpHOjY0
LCBVRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCithcm02NDogTG9hZExp
bms4IFU6Rzo4LCBaRDpHOjgKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0
OiBMb2FkTGlua0FjcTggVTpHOjgsIFpEOkc6OAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBU
bXAKKworIyBTdXBlciBjb25mdXNpbmcgZmFjdDogdGhpcyByZXR1cm5zIDAgdG8gbWVhbiBzdWNj
ZXNzLCAxIHRvIG1lYW4gZmFpbHVyZS4KK2FybTY0OiBTdG9yZUNvbmQ4IFU6Rzo4LCBEOkc6OCwg
RVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0
OiBTdG9yZUNvbmRSZWw4IFU6Rzo4LCBEOkc6OCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1w
CisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGluazE2IFU6RzoxNiwgWkQ6Rzox
NgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rQWNxMTYg
VTpHOjE2LCBaRDpHOjE2CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDog
U3RvcmVDb25kMTYgVTpHOjE2LCBEOkc6MTYsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAor
ICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kUmVsMTYgVTpHOjE2LCBEOkc6
MTYsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCith
cm02NDogTG9hZExpbmszMiBVOkc6MzIsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRl
eCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTMyIFU6RzozMiwgWkQ6RzozMgorICAgIEFkZHIs
IFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZDMyIFU6RzozMiwgRDpHOjMy
LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJt
NjQ6IFN0b3JlQ29uZFJlbDMyIFU6RzozMiwgRDpHOjMyLCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRy
LCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rNjQgVTpHOjY0LCBa
RDpHOjY0CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmtB
Y3E2NCBVOkc6NjQsIFpEOkc6NjQKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2Fy
bTY0OiBTdG9yZUNvbmQ2NCBVOkc6NjQsIEQ6Rzo2NCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwg
VG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmRSZWw2NCBVOkc6NjQs
IEQ6Rzo2NCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1w
CisKK2FybTY0OiBEZXBlbmQzMiBVOkc6MzIsIEQ6RzozMgorICAgIFRtcCwgVG1wCisKK2FybTY0
OiBEZXBlbmQ2NCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wCisKIENvbXBhcmUzMiBVOkc6
MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCiAgICAgUmVsQ29uZCwgVG1wLCBUbXAsIFRtcAog
ICAgIFJlbENvbmQsIFRtcCwgSW1tLCBUbXAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09y
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Nyw2ICsxNzcsMTAgQEAgdm9pZCBvcHRpbWl6
ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKICAgICAgICAgY2FzZSBCcmFuY2hTdWI2NDoKICAgICAg
ICAgY2FzZSBCcmFuY2hOZWczMjoKICAgICAgICAgY2FzZSBCcmFuY2hOZWc2NDoKKyAgICAgICAg
Y2FzZSBCcmFuY2hBdG9taWNTdHJvbmdDQVM4OgorICAgICAgICBjYXNlIEJyYW5jaEF0b21pY1N0
cm9uZ0NBUzE2OgorICAgICAgICBjYXNlIEJyYW5jaEF0b21pY1N0cm9uZ0NBUzMyOgorICAgICAg
ICBjYXNlIEJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0OgogICAgICAgICAgICAgaWYgKGNvZGUuZmlu
ZE5leHRCbG9jayhibG9jaykgPT0gYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApICYmIGJyYW5jaC5h
cmdzWzBdLmlzSW52ZXJ0aWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgc3RkOjpzd2FwKGJsb2Nr
LT5zdWNjZXNzb3IoMCksIGJsb2NrLT5zdWNjZXNzb3IoMSkpOwogICAgICAgICAgICAgICAgIGJy
YW5jaC5hcmdzWzBdID0gYnJhbmNoLmFyZ3NbMF0uaW52ZXJ0ZWQoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGFkSW50
ZXJmZXJlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCB2b2lkIHBhZElu
dGVyZmVyZW5jZShDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgIFsmXSAoQXJnJiwgQXJnOjpS
b2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9s
ZSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlEZWY6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpFYXJseVpEZWY6CiAgICAgICAgICAgICAgICAgICAgICAgICBo
YXNFYXJseURlZiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBcmc6OkxhdGVVc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAy
MTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUsNyBAQCB2b2lkIHNwaWxsRXZlcnl0
aGluZyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZUNvbGRV
c2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTY3JhdGNoOgogICAgICAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6RWFybHlEZWY6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJn
OjpFYXJseVpEZWY6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBjb2Rl
LnJlZ3NJblByaW9yaXR5T3JkZXIoYmFuaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5l
cmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw3ICsxODIsNyBAQCBkZWYgbGV4KHN0ciwg
ZmlsZU5hbWUpCiBlbmQKIAogZGVmIGlzUm9sZSh0b2tlbikKLSAgICB0b2tlbiA9fiAvXEEoKFUp
fChEKXwoVUQpfChaRCl8KFVaRCl8KFVBKXwoUykpXFovCisgICAgdG9rZW4gPX4gL1xBKChVKXwo
RCl8KFVEKXwoWkQpfChVWkQpfChVQSl8KFMpfChFRCl8KEVaRCl8KExVKSlcWi8KIGVuZAogCiBk
ZWYgaXNHRih0b2tlbikKQEAgLTE5MCw3ICsxOTAsNyBAQCBkZWYgaXNHRih0b2tlbikKIGVuZAog
CiBkZWYgaXNLaW5kKHRva2VuKQotICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1t
KXwoQml0SW1tKXwoQml0SW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8
KERvdWJsZUNvbmQpKVxaLworICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwo
Qml0SW1tKXwoQml0SW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERv
dWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KIGVuZAogCiBkZWYgaXNBcmNoKHRva2VuKQpAQCAt
MjY0LDcgKzI2NCw3IEBAIGNsYXNzIFBhcnNlcgogCiAgICAgZGVmIGNvbnN1bWVLaW5kCiAgICAg
ICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwotICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBr
aW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVs
Q29uZCwgUmVzQ29uZCwgb3IgRG91YmxlQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAg
ICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdEltbSwgQml0
SW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9y
IFN0YXR1c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCiAgICAgICAgIGFkdmFuY2UKICAg
ICAgICAgcmVzdWx0CiAgICAgZW5kCkBAIC02NTEsNiArNjUxLDEyIEBAIHdyaXRlSCgiT3Bjb2Rl
VXRpbHMiKSB7CiAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlQWRkciIKICAgICAgICAg
ICAgICAgICB3aGVuICJTIgogICAgICAgICAgICAgICAgICAgICByb2xlID0gIlNjcmF0Y2giCisg
ICAgICAgICAgICAgICAgd2hlbiAiRUQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiRWFy
bHlEZWYiCisgICAgICAgICAgICAgICAgd2hlbiAiRVpEIgorICAgICAgICAgICAgICAgICAgICBy
b2xlID0gIkVhcmx5WkRlZiIKKyAgICAgICAgICAgICAgICB3aGVuICJMVSIKKyAgICAgICAgICAg
ICAgICAgICAgcm9sZSA9ICJMYXRlVXNlIgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBlbmQKQEAgLTgxOSw2ICs4MjUsNyBA
QCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICB3aGVuICJSZWxD
b25kIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCiAgICAgICAgICAgICAgICAgd2hl
biAiRG91YmxlQ29uZCIKKyAgICAgICAgICAgICAgICB3aGVuICJTdGF0dXNDb25kIgogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgIlVuZXhwZWN0ZWQga2lu
ZDogI3traW5kLm5hbWV9IgogICAgICAgICAgICAgICAgIGVuZApAQCAtMTEwNSw2ICsxMTEyLDgg
QEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0aW9uKCkiCiAgICAgICAgICAgICAg
ICAgd2hlbiAiRG91YmxlQ29uZCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJn
c1sje2luZGV4fV0uYXNEb3VibGVDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICB3aGVuICJT
dGF0dXNDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9
XS5hc1N0YXR1c0NvbmRpdGlvbigpIgogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAg
fQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302917</attachid>
            <date>2017-02-27 20:17:25 -0800</date>
            <delta_ts>2017-02-27 21:46:41 -0800</delta_ts>
            <desc>adding X86 instruction formatting for atomics</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>136936</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMiBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkwRjJDNjNCRTFFNjQ5REM0MDBDMTM4
MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCRDFFNjQ5REMyMDBDMTM4MzkgLyogQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAv
KiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkQ0RERCMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCAq
LzsgfTsKIAkJMEYyRDREREUxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERDMTk4MzJE
MzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRDRERTgxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhp
c1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJENERFNTE5ODMyREFDMDA3RDRCMTkgLyogVG9UaGlzU3RhdHVzLmNwcCAqLzsgfTsKQEAg
LTI3NjQsNiArMjc3MCwxMiBAQAogCQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5r
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmFuay5oOyBwYXRoID0gYjMv
QjNCYW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM2M0FEMUU2MEFFM0Mw
MEMxMzgzOSAvKiBCM1dpZHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzV2lkdGguY3BwOyBwYXRoID0gYjMvQjNXaWR0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzV2lkdGguaDsgcGF0aCA9IGIzL0IzV2lkdGgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjMxRTYzNDNFODAwQzEzODM5
IC8qIEIzQXRvbWljVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNBdG9taWNWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0F0b21pY1ZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjQxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNBdG9taWNWYWx1
ZS5oOyBwYXRoID0gYjMvQjNBdG9taWNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJDNjNCNTFFNjM0M0U4MDBDMTM4MzkgLyogQjNHZW5lcmljQmxvY2tJbnNlcnRpb25T
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmljQmxvY2tJbnNl
cnRpb25TZXQuaDsgcGF0aCA9IGIzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJC
bG9ja0luc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJCbG9ja0luc2VydGlvblNldC5jcHA7IHBhdGggPSBiMy9haXIvQWlyQmxvY2tJbnNlcnRp
b25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCQTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJCbG9j
a0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCRDFF
NjQ5REMyMDBDMTM4MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREIxOTgzMkQzNDAwN0Q0QjE5IC8qIERl
YnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVi
dWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkQ0RERDMTk4
MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNTI5Miw2ICs1MzA0LDggQEAKIAkJCQkwRkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyog
YWlyICovLAogCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFs
dWUuY3BwICovLAogCQkJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVn
VmFsdWUuaCAqLywKKwkJCQkwRjJDNjNCMzFFNjM0M0U4MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1
ZS5jcHAgKi8sCisJCQkJMEYyQzYzQjQxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUu
aCAqLywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJ
CQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi8sCiAJCQkJMEZFQzg0QjYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCkBAIC01MzU0LDYgKzUzNjgs
NyBAQAogCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5o
ICovLAogCQkJCTBGRUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywK
IAkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovLAorCQkJCTBG
MkM2M0I1MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oICov
LAogCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxv
Y2suaCAqLywKIAkJCQkwRkVDODVCRjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3Bw
ICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5oICovLApA
QCAtNTQ2OSw2ICs1NDg0LDggQEAKIAkJCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWly
QXJnSW5saW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNp
Y0Jsb2NrLmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNC
bG9jay5oICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2Vy
dGlvblNldC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJs
b2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC03MzI2LDYgKzczNDMsNyBAQAogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRjFGRTUxQjE5MjJBM0JDMDA2OTg3
QzUgLyogQWJvcnRSZWFzb24uaCAqLywKKwkJCQkwRjJDNjNCRDFFNjQ5REMyMDBDMTM4MzkgLyog
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8sCiAJCQkJODYwMTYxREYwRjNBODNDMTAwRjg0
NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCAqLywKIAkJCQkwRjM3MzA5MDFDMENENzBD
MDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggKi8sCiAJCQkJODY0
MDkyM0IxNTZFRUQzQjAwNTY2Q0IyIC8qIEFSTTY0QXNzZW1ibGVyLmggKi8sCkBAIC03MzU0LDgg
KzczNzIsOCBAQAogCQkJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxl
ck1JUFMuaCAqLywKIAkJCQlGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJs
ZXJQcmludGVyLmNwcCAqLywKIAkJCQlGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9B
c3NlbWJsZXJQcmludGVyLmggKi8sCi0JCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2XzY0LmggKi8sCisJCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJQTdBNEFFMDcxNzk3M0IyNjAwNTYxMkIxIC8q
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLywKIAkJCQk4NjAxNjFFMjBGM0E4M0MxMDBG
ODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3NzE4NUE4
RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywKQEAgLTc5
NTYsNiArNzk3NCw3IEBACiAJCQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3RDcxRDlEQzQ0MjAwMUI5ODI1IC8q
IEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2M0JDMUU2MzQ0MEMwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY4NEQ0MzgxQzAw
MTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUzNEMx
QTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQ3LDYgKzgwNjYsNyBAQAogCQkJCTQzNDIyQTYzMUMx
NThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUwRTFCRjAyNzZD
MDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzM0ZDRkMx
QzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2
QjhBRDkxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRlVGFpbHMuaCBpbiBIZWFkZXJzICov
LApAQCAtODM2Niw2ICs4Mzg2LDcgQEAKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyog
REZHT1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2
N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJDNjNCNzFFNjM0M0VEMDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjM3OTgxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50
b21JbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVGOTBBRjAw
QzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFQjE5RDBCQTdE
MDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBpbiBIZWFkZXJzICovLApAQCAtOTc5Miw2ICs5
ODEzLDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
IAkJCQkwRkZBNTQ5NzE2Qjg4MzUwMDBCM0E5ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjJDNjNCRTFFNjQ5REM0MDBDMTM4MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDQ5MzdDMzFEREJFNjE0MDA3N0M4MDcgLyog
QWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NUYwRjQxNEQx
MDYzOTAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM3MEI0
RjUxQkYyNjIwMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDI0OCw2ICsxMDI3MCw3IEBACiAJCQkJ
OUU3Mjk0MDcxOTBGMDFBNTAwMUE5MUI1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTUxM0U1QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmpl
Y3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQzYzQjYxRTYzNDNFQTAw
QzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTEx
ODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3Rl
ZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjY2LDYgKzEwMjg5LDcgQEAK
IAkJCQlFMzVFMDM1RjFCN0FCNDNFMDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0MzhCMTg1NjgzMzUwMDJFRDY5MiAv
KiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRC
NjExODgwOURENTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjJDNjNCQjFFNjM0NDBBMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25T
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1MTY1RDIxQkRGMEI5ODAwM0I3NUMxIC8qIElu
c3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NG
ODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIKKworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyOjpTdGF0dXNDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIHN3aXRj
aCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNz
OgorICAgICAgICBvdXQucHJpbnQoIlN1Y2Nlc3MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6RmFpbHVyZToKKyAgICAgICAgb3V0LnByaW50KCJG
YWlsdXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMiwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODksNiArODksMjMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gVGltZXNFaWdodDsKICAgICB9CiAgICAgCisgICAgZW51bSBTdGF0dXNDb25k
aXRpb24geworICAgICAgICBTdWNjZXNzLAorICAgICAgICBGYWlsdXJlCisgICAgfTsKKyAgICAK
KyAgICBzdGF0aWMgU3RhdHVzQ29uZGl0aW9uIGludmVydChTdGF0dXNDb25kaXRpb24gY29uZGl0
aW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICAgICAgY2FzZSBT
dWNjZXNzOgorICAgICAgICAgICAgcmV0dXJuIEZhaWx1cmU7CisgICAgICAgIGNhc2UgRmFpbHVy
ZToKKyAgICAgICAgICAgIHJldHVybiBTdWNjZXNzOworICAgICAgICB9CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBTdWNjZXNzOworICAgIH0K
KyAgICAKICAgICBzdHJ1Y3QgQmFzZUluZGV4OwogICAgIAogICAgIC8vIEFkZHJlc3M6CkBAIC0x
MTA4LDMgKzExMjUsMTYgQEAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlLCBN
YQogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQworCisj
aWYgRU5BQkxFKEFTU0VNQkxFUikKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3Ry
ZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkFic3RyYWN0TWFj
cm9Bc3NlbWJsZXI6OlN0YXR1c0NvbmRpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTAsNiArMjkwLDggQEAgcHJpdmF0ZToKICAgICAgICAgT1BfU0VUQ0MgICAgICAgICAg
ICA9IDB4OTAsCiAgICAgICAgIE9QMl8zQllURV9FU0NBUEVfQUUgPSAweEFFLAogICAgICAgICBP
UDJfSU1VTF9HdkV2ICAgICAgID0gMHhBRiwKKyAgICAgICAgT1AyX0NNUFhDSEdiICAgICAgICA9
IDB4QjAsCisgICAgICAgIE9QMl9DTVBYQ0hHICAgICAgICAgPSAweEIxLAogICAgICAgICBPUDJf
TU9WWlhfR3ZFYiAgICAgID0gMHhCNiwKICAgICAgICAgT1AyX0JTRiAgICAgICAgICAgICA9IDB4
QkMsCiAgICAgICAgIE9QMl9UWkNOVCAgICAgICAgICAgPSAweEJDLApAQCAtMjk4LDYgKzMwMCw4
IEBAIHByaXZhdGU6CiAgICAgICAgIE9QMl9NT1ZTWF9HdkViICAgICAgPSAweEJFLAogICAgICAg
ICBPUDJfTU9WWlhfR3ZFdyAgICAgID0gMHhCNywKICAgICAgICAgT1AyX01PVlNYX0d2RXcgICAg
ICA9IDB4QkYsCisgICAgICAgIE9QMl9YQUREYiAgICAgICAgICAgPSAweEMwLAorICAgICAgICBP
UDJfWEFERCAgICAgICAgICAgID0gMHhDMSwKICAgICAgICAgT1AyX1BFWFRSV19HZFVkSWIgICA9
IDB4QzUsCiAgICAgICAgIE9QMl9QU0xMUV9VZHFJYiAgICAgPSAweDczLAogICAgICAgICBPUDJf
UFNSTFFfVWRxSWIgICAgID0gMHg3MywKQEAgLTI3NzUsNiArMjc3OSw0OCBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfTE9DSyk7CiAgICAgfQogICAgIAorICAgIHZv
aWQgY21weGNoZ2Jfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDgoT1AyX0NNUFhDSEdiLCBz
cmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY21weGNoZ2Jfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJf
Q01QWENIR2IsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGNtcHhjaGd3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRf
U0laRSk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfQ01QWENIRywgc3JjLCBi
YXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGd3X3JtKFJlZ2lzdGVy
SUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGlu
dCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9T
SVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9DTVBYQ0hHLCBzcmMsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hn
bF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9DTVBYQ0hHLCBzcmMsIGJhc2UsIG9m
ZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY21weGNoZ2xfcm0oUmVnaXN0ZXJJRCBzcmMs
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9DTVBYQ0hHLCBzcmMs
IGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4
Y2hncV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wNjQoT1AyX0NNUFhDSEcsIHNyYywgYmFz
ZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hncV9ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfQ01QWENI
Rywgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAogICAgIHZv
aWQgbWZlbmNlKCkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLnRocmVlQnl0ZU9wKE9QMl8z
QllURV9FU0NBUEVfQUUsIE9QM19NRkVOQ0UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQXRvbWljVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQXRvbWljVmFsdWU6On5B
dG9taWNWYWx1ZSgpCit7Cit9CisKK1dpZHRoIEF0b21pY1ZhbHVlOjphY2Nlc3NXaWR0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fd2lkdGg7Cit9CisKK3ZvaWQgQXRvbWljVmFsdWU6OmR1bXBN
ZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KGNvbW1hLCAid2lkdGggPSAiLCBtX3dpZHRoKTsKKyAgICAKKyAgICBNZW1vcnlW
YWx1ZTo6ZHVtcE1ldGEoY29tbWEsIG91dCk7Cit9CisKK1ZhbHVlKiBBdG9taWNWYWx1ZTo6Y2xv
bmVJbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IEF0b21pY1ZhbHVlKCp0aGlzKTsKK30K
KworQXRvbWljVmFsdWU6OkF0b21pY1ZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgV2lk
dGggd2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQg
PSAwKQorICAgIDogTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgb3BlcmFuZC0+dHlw
ZSgpLCBvcmlnaW4sIG9mZnNldCwgb3BlcmFuZCwgcG9pbnRlcikKKyAgICAsIG1fd2lkdGgod2lk
dGgpCit7CisgICAgc2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBB
U1NFUlQoYmVzdFR5cGUob3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKyAg
ICAKKyAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6
CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNh
c2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9t
aWNYY2hnOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK0F0b21pY1ZhbHVlOjpBdG9taWNWYWx1ZShLaW5kIGtp
bmQsIE9yaWdpbiBvcmlnaW4sIFdpZHRoIHdpZHRoLCBWYWx1ZSogZXhwZWN0ZWRWYWx1ZSwgVmFs
dWUqIG5ld1ZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDog
TWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwga2luZC5vcGNvZGUoKSA9PSBBdG9taWNX
ZWFrQ0FTID8gSW50MzIgOiBleHBlY3RlZFZhbHVlLT50eXBlKCksIG9yaWdpbiwgb2Zmc2V0LCBl
eHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSwgcG9pbnRlcikKKyAgICAsIG1fd2lkdGgod2lkdGgpCit7
CisgICAgc2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBBU1NFUlQo
YmVzdFR5cGUob3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKworICAgIHN3
aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNl
IEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQXRvbWljVmFsdWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisj
aW5jbHVkZSAiQjNXaWR0aC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQXRvbWljVmFsdWUgOiBwdWJsaWMgTWVtb3J5VmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzQXRvbWljKGtpbmQub3Bjb2RlKCkpOworICAgIH0KKyAgICAKKyAgICB+
QXRvbWljVmFsdWUoKTsKKyAgICAKKyAgICBUeXBlIG9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJl
dHVybiBjaGlsZCgwKS0+dHlwZSgpOyB9CisgICAgCisgICAgV2lkdGggb3BlcmF0aW9uV2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgCisgICAgLy8gU3lub255bSBmb3Igd2lk
dGgoKSwgaWYgeW91J3JlIGFjY2Vzc2luZyB2aWEgTWVtb3J5VmFsdWUuCisgICAgV2lkdGggYWNj
ZXNzV2lkdGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1
bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
CisgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIEF0b21pY1ZhbHVlKEtpbmQs
IE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBv
ZmZzZXQgPSAwKTsKKyAgICAKKyAgICBBdG9taWNWYWx1ZShLaW5kLCBPcmlnaW4sIFdpZHRoLCBW
YWx1ZSogZXhwZWN0ZWRWYWx1ZSwgVmFsdWUqIG5ld1ZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50
MzJfdCBvZmZzZXQgPSAwKTsKKyAgICAKKyAgICBXaWR0aCBtX3dpZHRoOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2Vy
dGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMzUgKzM2LDEzIEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKIAogQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0
KFByb2NlZHVyZSAmcHJvYykKLSAgICA6IG1fcHJvYyhwcm9jKQorICAgIDogR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0KHByb2MubV9ibG9ja3MpCisgICAgLCBtX3Byb2MocHJvYykKIHsKIH0KIAog
QmxvY2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsgfQogCi12b2lkIEJsb2Nr
SW5zZXJ0aW9uU2V0OjppbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCi17Ci0gICAg
bV9pbnNlcnRpb25zLmFwcGVuZChXVEZNb3ZlKGluc2VydGlvbikpOwotfQotCi1CYXNpY0Jsb2Nr
KiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVl
bmN5KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNC
bG9jayhVSU5UX01BWCwgZnJlcXVlbmN5KSk7Ci0gICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxv
Y2suZ2V0KCk7Ci0gICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2Nr
KSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9u
U2V0OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5KQot
ewotICAgIHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVl
bmN5ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVuY3koKSk7Ci19Ci0KLUJhc2ljQmxvY2sq
IEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91Ymxl
IGZyZXF1ZW5jeSkKLXsKLSAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJl
cXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7Ci19
Ci0KIEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjpzcGxpdEZvcndhcmQoCiAgICAgQmFz
aWNCbG9jayogYmxvY2ssIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqIGluc2Vy
dGlvblNldCwgZG91YmxlIGZyZXF1ZW5jeSkKIHsKQEAgLTEwMiwzMiArODAsNiBAQCBCYXNpY0Js
b2NrKiBCbG9ja0luc2VydGlvblNldDo6c3BsaXRGb3J3CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgpCi17Ci0gICAgaWYgKG1faW5zZXJ0
aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBXZSBh
bGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5l
ZWQgdG8gc29ydCB0aGVtIGJlZm9yZQotICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0
aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8g
YmUKLSAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCi0gICAgYnViYmxlU29ydCht
X2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKLQotICAgIGV4ZWN1dGVJ
bnNlcnRpb25zKG1fcHJvYy5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKLSAgICAKLSAgICAvLyBQ
cnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0
IGl0J3MKLSAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5n
LgotICAgIG1fcHJvYy5tX2Jsb2Nrcy5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgWyZdIChz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4mIGJsb2NrUHRyKSAtPiBib29sIHsKLSAgICAgICAg
ICAgIHJldHVybiAhYmxvY2tQdHI7Ci0gICAgICAgIH0pOwotICAgIAotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9wcm9jLm1fYmxvY2tzLnNpemUoKTsgKytpKQotICAgICAgICBtX3By
b2MubV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQot
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5z
ZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCIKICNp
bmNsdWRlICJCM1Byb2NlZHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zNSwyNiArMzYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEluc2VydGlvblNldDsKIAotdHlwZWRlZiBXVEY6Okluc2Vy
dGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOwordHlwZWRl
ZiBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz46OkJsb2NrSW5zZXJ0aW9uIEJs
b2NrSW5zZXJ0aW9uOwogCi1jbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitjbGFzcyBCbG9ja0lu
c2VydGlvblNldCA6IHB1YmxpYyBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz4g
ewogcHVibGljOgogICAgIEJsb2NrSW5zZXJ0aW9uU2V0KFByb2NlZHVyZSYpOwogICAgIH5CbG9j
a0luc2VydGlvblNldCgpOwogICAgIAotICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYp
OwotCi0gICAgLy8gSW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCi0gICAgQmFz
aWNCbG9jayogaW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7
Ci0KLSAgICAvLyBJbnNlcnRzIGEgbmV3IGJsb2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVz
dWFsbHkgeW91IHdpbGwgbm90IHBhc3MgdGhlIGZyZXF1ZW5jeQotICAgIC8vIGFyZ3VtZW50LiBQ
YXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRvIGp1c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdi
ZWZvcmUnIGJsb2NrLiBUaGF0J3MKLSAgICAvLyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCi0gICAg
QmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1
ZW5jeSA9IFBOYU4pOwotCi0gICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2
ZW4gYmxvY2suCi0gICAgQmFzaWNCbG9jayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIs
IGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLQogICAgIC8vIEEgaGVscGVyIHRvIHNwbGl0IGEg
YmxvY2sgd2hlbiBmb3J3YXJkIGl0ZXJhdGluZyBvdmVyIGl0LiBJdCBjcmVhdGVzIGEgbmV3IGJs
b2NrIHRvIGhvbGQKICAgICAvLyBldmVyeXRoaW5nIGJlZm9yZSB0aGUgaW5zdHJ1Y3Rpb24gYXQg
dmFsdWVJbmRleC4gVGhlIGN1cnJlbnQgYmxvY2sgaXMgbGVmdCB3aXRoCiAgICAgLy8gZXZlcnl0
aGluZyBhdCBhbmQgYWZ0ZXIgdmFsdWVJbmRleC4gSWYgdGhlIG9wdGlvbmFsIEluc2VydGlvblNl
dCBpcyBwcm92aWRlZCwgaXQgd2lsbCBnZXQKQEAgLTgwLDEyICs2OCw5IEBAIHB1YmxpYzoKICAg
ICBCYXNpY0Jsb2NrKiBzcGxpdEZvcndhcmQoCiAgICAgICAgIEJhc2ljQmxvY2sqLCB1bnNpZ25l
ZCYgdmFsdWVJbmRleCwgSW5zZXJ0aW9uU2V0KiA9IG51bGxwdHIsCiAgICAgICAgIGRvdWJsZSBm
cmVxdWVuY3kgPSBQTmFOKTsKLSAgICAKLSAgICBib29sIGV4ZWN1dGUoKTsKIAogcHJpdmF0ZToK
ICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKLSAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1f
aW5zZXJ0aW9uczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3
ICs4Miw4IEBAIGJvb2wgRWZmZWN0czo6aW50ZXJmZXJlcyhjb25zdCBFZmZlY3RzJiAKICAgICAg
ICAgfHwgaW50ZXJmZXJlc1dpdGhXcml0ZXNQaW5uZWQob3RoZXIsICp0aGlzKQogICAgICAgICB8
fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIud3JpdGVzKQogICAgICAgICB8fCB3cml0ZXMub3Zlcmxh
cHMob3RoZXIucmVhZHMpCi0gICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcyk7
CisgICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKKyAgICAgICAgfHwgKGZl
bmNlICYmIG90aGVyLmZlbmNlKTsKIH0KIAogYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0
IEVmZmVjdHMmIG90aGVyKSBjb25zdApAQCAtOTUsNyArOTYsOCBAQCBib29sIEVmZmVjdHM6Om9w
ZXJhdG9yPT0oY29uc3QgRWZmZWN0cyYgCiAgICAgICAgICYmIHdyaXRlc1Bpbm5lZCA9PSBvdGhl
ci53cml0ZXNQaW5uZWQKICAgICAgICAgJiYgcmVhZHNQaW5uZWQgPT0gb3RoZXIucmVhZHNQaW5u
ZWQKICAgICAgICAgJiYgd3JpdGVzID09IG90aGVyLndyaXRlcwotICAgICAgICAmJiByZWFkcyA9
PSBvdGhlci5yZWFkczsKKyAgICAgICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHMKKyAgICAgICAg
JiYgZmVuY2UgPT0gb3RoZXIuZmVuY2U7CiB9CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3IhPShj
b25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAgLTEyMCw2ICsxMjIsOCBAQCB2b2lkIEVmZmVj
dHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
IldyaXRlc1Bpbm5lZCIpOwogICAgIGlmIChyZWFkc1Bpbm5lZCkKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiUmVhZHNQaW5uZWQiKTsKKyAgICBpZiAoZmVuY2UpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIkZlbmNlIik7CiAgICAgaWYgKHdyaXRlcykKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiV3JpdGVzOiIsIHdyaXRlcyk7CiAgICAgaWYgKHJlYWRzKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBA
QCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MzE3MwogICAgIGJvb2wgcmVhZHNQaW5uZWQgeyBmYWxzZSB9OwogICAgIGJv
b2wgd3JpdGVzUGlubmVkIHsgZmFsc2UgfTsKKyAgICAKKyAgICAvLyBNZW1vcnkgZmVuY2VzIGNh
bm5vdCBiZSByZW9yZGVyZWQgYXJvdW5kIGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVpciBl
ZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQKKyAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEgbWVt
b3J5IGZlbmNlLgorICAgIGJvb2wgZmVuY2UgeyBmYWxzZSB9OwogCiAgICAgSGVhcFJhbmdlIHdy
aXRlczsKICAgICBIZWFwUmFuZ2UgcmVhZHM7CkBAIC04OSw2ICs5Myw3IEBAIHN0cnVjdCBFZmZl
Y3RzIHsKICAgICAgICAgcmVzdWx0LnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKICAgICAgICAg
cmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LndyaXRlc1Bpbm5lZCA9
IHRydWU7CisgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCkBAIC0xMDMsNyArMTA4LDcgQEAgc3RydWN0IEVmZmVjdHMgewogCiAgICAg
Ym9vbCBtdXN0RXhlY3V0ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gdGVybWluYWwg
fHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQ
aW5uZWQ7CisgICAgICAgIHJldHVybiB0ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRl
c0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8IHdyaXRlc1Bpbm5lZCB8fCBmZW5jZTsKICAgICB9CiAK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0aGVz
ZSByZXNwZWN0aXZlIGVmZmVjdHMgd291bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NDIsNiArMTQyLDcgQEAgc3RydWN0IEltcHVyZUJsb2NrRGF0YSB7CiAKICAgICBSYW5nZVNldDxI
ZWFwUmFuZ2U+IHJlYWRzOyAvLyBUaGlzIG9ubHkgZ2V0cyB1c2VkIGZvciBmb3J3YXJkIHN0b3Jl
IGVsaW1pbmF0aW9uLgogICAgIFJhbmdlU2V0PEhlYXBSYW5nZT4gd3JpdGVzOyAvLyBUaGlzIGdl
dHMgdXNlZCBmb3IgYm90aCBsb2FkIGFuZCBzdG9yZSBlbGltaW5hdGlvbi4KKyAgICBib29sIGZl
bmNlOwogCiAgICAgTWVtb3J5VmFsdWVNYXAgc3RvcmVzQXRIZWFkOwogICAgIE1lbW9yeVZhbHVl
TWFwIG1lbW9yeVZhbHVlc0F0VGFpbDsKQEAgLTE3NCwxMiArMTc1LDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobWVtb3J5ICYmIG1lbW9yeS0+aXNT
dG9yZSgpCiAgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLnJlYWRzLm92ZXJsYXBzKG1lbW9y
eS0+cmFuZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIWRhdGEud3JpdGVzLm92ZXJsYXBz
KG1lbW9yeS0+cmFuZ2UoKSkpCisgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRlcy5v
dmVybGFwcyhtZW1vcnktPnJhbmdlKCkpCisgICAgICAgICAgICAgICAgICAgICYmICghZGF0YS5m
ZW5jZSB8fCAhbWVtb3J5LT5oYXNGZW5jZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5z
dG9yZXNBdEhlYWQuYWRkKG1lbW9yeSk7CiAgICAgICAgICAgICAgICAgZGF0YS5yZWFkcy5hZGQo
ZWZmZWN0cy5yZWFkcyk7CiAKICAgICAgICAgICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9
IGVmZmVjdHMud3JpdGVzKQogICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGRhdGEsIHdyaXRl
cyk7CisgICAgICAgICAgICAgICAgZGF0YS5mZW5jZSB8PSBlZmZlY3RzLmZlbmNlOwogCiAgICAg
ICAgICAgICAgICAgaWYgKG1lbW9yeSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZW1vcnlW
YWx1ZXNBdFRhaWwuYWRkKG1lbW9yeSk7CkBAIC00NzgsNiArNDgxLDkgQEAgcHJpdmF0ZToKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CiAgICAgYm9vbCBmaW5kU3RvcmVBZnRlckNsb2Ji
ZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKICAg
ICB7CisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBl
bGltaW5hdGUgYSBzdG9yZSBpZiBldmVyeSBmb3J3YXJkIHBhdGggaGl0cyBhIHN0b3JlIHRvIHRo
ZSBzYW1lIGxvY2F0aW9uIGJlZm9yZQogICAgICAgICAvLyBoaXR0aW5nIGFueSBvcGVyYXRpb24g
dGhhdCBvYnNlcnZlcyB0aGUgc3RvcmUuIFRoaXMgc2VhcmNoIHNlZW1zIGxpa2UgaXQgc2hvdWxk
IGJlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSwgYnV0IGluIHRoZSBvdmVyd2hlbG1pbmcgbWFqb3Jp
dHkgb2YgY2FzZXMgaXQgd2lsbCBhbG1vc3QgaW1tZWRpYXRlbHkgaGl0IGFuIApAQCAtNjE0LDYg
KzYyMCwxMiBAQCBwcml2YXRlOgogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRh
dGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcgYmFja3dhcmQgZm9yICIsICpwdHIsICIuLi5cbiIp
OwogICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNG
ZW5jZSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgR2l2aW5nIHVwIGJlY2F1c2UgZmVuY2VzLlxuIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSog
bWF0Y2ggPSBtX2RhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmZpbmQocHRyLCBmaWx0ZXIpKSB7CiAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRm91
bmQgIiwgKm1hdGNoLCAiIGxvY2FsbHkuXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNyBAQCB2
b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MDcKICAgICB9CiAKKyAgICAv
LyBUaGlzIHB1dHMgdGhlIElSIGluIHF1aXJrcyBtb2RlLgogICAgIGxvd2VyTWFjcm9zKHByb2Nl
ZHVyZSk7CiAKICAgICBpZiAob3B0TGV2ZWwgPj0gMSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0
aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEluc2Vy
dGlvblNldDsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2NsYXNzIEdlbmVyaWNC
bG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBXVEY6Okluc2VydGlvbjxz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOworICAgIAorICAgIEJs
b2NrSW5zZXJ0aW9uU2V0KFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9j
a3MpCisgICAgICAgIDogbV9ibG9ja3MoYmxvY2tzKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dm9pZCBpbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCisgICAgeworICAgICAgICBt
X2luc2VydGlvbnMuYXBwZW5kKFdURk1vdmUoaW5zZXJ0aW9uKSk7CisgICAgfQorCisgICAgLy8g
SW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCisgICAgQmFzaWNCbG9jayogaW5z
ZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTikKKyAgICB7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhVSU5U
X01BWCwgZnJlcXVlbmN5KSk7CisgICAgICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdl
dCgpOworICAgICAgICBpbnNlcnQoQmxvY2tJbnNlcnRpb24oaW5kZXgsIFdURk1vdmUoYmxvY2sp
KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gSW5zZXJ0cyBhIG5l
dyBibG9jayBiZWZvcmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNz
IHRoZSBmcmVxdWVuY3kKKyAgICAvLyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0
byBqdXN0IHVzZSB0aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCisg
ICAgLy8gdXN1YWxseSB3aGF0IHlvdSB3YW50LgorICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9y
ZShCYXNpY0Jsb2NrKiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGluc2VydChiZWZvcmUtPmluZGV4KCksIGZyZXF1ZW5jeSA9PSBmcmVxdWVu
Y3kgPyBmcmVxdWVuY3kgOiBiZWZvcmUtPmZyZXF1ZW5jeSgpKTsKKyAgICB9CisKKyAgICAvLyBJ
bnNlcnRzIGEgbmV3IGJsb2NrIGFmdGVyIHRoZSBnaXZlbiBibG9jay4KKyAgICBCYXNpY0Jsb2Nr
KiBpbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4p
CisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJlcXVl
bmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7CisgICAg
fQorCisgICAgYm9vbCBleGVjdXRlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2luc2VydGlvbnMu
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAg
Ly8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNv
LCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBiZWZvcmUKKyAgICAgICAgLy8gcnVubmluZyBXVEY6OmV4
ZWN1dGVJbnNlcnRpb25zLiBXZSBzdHJvbmdseSBwcmVmZXIgYSBzdGFibGUgc29ydCBhbmQgd2Ug
d2FudCBpdCB0byBiZQorICAgICAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCisg
ICAgICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQo
KSk7CisgICAgICAgIAorICAgICAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX2Jsb2NrcywgbV9pbnNl
cnRpb25zKTsKKyAgICAgICAgCisgICAgICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRyaWVzLiBU
aGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgICAgICAvLyBoZWFsdGh5
IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgICAgICBtX2Jsb2Nrcy5y
ZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEJhc2lj
QmxvY2s+JiBibG9ja1B0cikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFibG9j
a1B0cjsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGhlIGJsb2NrcyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2Jsb2Nr
c1tpXS0+bV9pbmRleCA9IGk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4mIG1f
YmxvY2tzOworICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHJldmlzaW9uIDIxMjk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04OCw2ICs4OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKICAgICB9CiAgICAgCisgICAgSGVhcFJhbmdlIG9wZXJhdG9yfChjb25zdCBIZWFw
UmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgKKyAg
ICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAgICAgICAgICAg
c3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAogICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9CiAKICAg
ICB1bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU4LDYgKzU4LDExIEBAIFZhbHVlKiBJbnNlcnRpb25TZXQ6Omluc2VydEJv
dHRvbShzaXplX3QKICAgICByZXR1cm4gaW5zZXJ0Qm90dG9tKGluZGV4LCBsaWtlVmFsdWUtPm9y
aWdpbigpLCBsaWtlVmFsdWUtPnR5cGUoKSk7CiB9CiAKK1ZhbHVlKiBJbnNlcnRpb25TZXQ6Omlu
c2VydENsb25lKHNpemVfdCBpbmRleCwgVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBpbnNl
cnRWYWx1ZShpbmRleCwgbV9wcm9jZWR1cmUuY2xvbmUodmFsdWUpKTsKK30KKwogdm9pZCBJbnNl
cnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgYnViYmxlU29ydCht
X2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzEsNiArNzEsOCBAQCBwdWJsaWM6CiAKICAgICBWYWx1ZSogaW5zZXJ0Qm90dG9tKHNpemVf
dCBpbmRleCwgT3JpZ2luLCBUeXBlKTsKICAgICBWYWx1ZSogaW5zZXJ0Qm90dG9tKHNpemVfdCBp
bmRleCwgVmFsdWUqKTsKKyAgICAKKyAgICBWYWx1ZSogaW5zZXJ0Q2xvbmUoc2l6ZV90IGluZGV4
LCBWYWx1ZSopOwogCiAgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTgsMTEgKzU4LDE0IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3Byb2MocHJv
YykKICAgICAgICAgLCBtX2Jsb2NrSW5zZXJ0aW9uU2V0KHByb2MpCiAgICAgICAgICwgbV9pbnNl
cnRpb25TZXQocHJvYykKKyAgICAgICAgLCBtX3VzZUNvdW50cyhwcm9jKQogICAgIHsKICAgICB9
CiAKICAgICBib29sIHJ1bigpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wcm9j
Lmhhc1F1aXJrcygpKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX3Byb2MpIHsKICAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKICAgICAgICAgICAgIHBy
b2Nlc3NDdXJyZW50QmxvY2soKTsKQEAgLTcyLDYgKzc1LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG1fcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOwogICAgICAgICAgICAgbV9wcm9jLmludmFs
aWRhdGVDRkcoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpbmRpY2F0
ZXMgdGhhdCB3ZSd2ZSAKKyAgICAgICAgbV9wcm9jLnNldEhhc1F1aXJrcyh0cnVlKTsKKyAgICAg
ICAgCiAgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CiAgICAgfQogICAgIApAQCAtMTg1LDcgKzE5
Miw5NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIERlcGVuZDogeworICAgICAgICAgICAgICAgIGlmIChpc1g4NigpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGxvYWQtbG9hZCBmZW5jZS4gVGhpcyBjb2Rl
Z2VucyB0byBub3RoaW5nIG9uIFg4Ni4gV2UgdXNlIGl0IHRvIHRlbGwgdGhlCisgICAgICAgICAg
ICAgICAgICAgIC8vIGNvbXBpbGVyIG5vdCB0byBibG9jayBsb2FkIG1vdGlvbi4KKyAgICAgICAg
ICAgICAgICAgICAgRmVuY2VWYWx1ZSogZmVuY2UgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8RmVu
Y2VWYWx1ZT4obV9pbmRleCwgbV9vcmlnaW4pOworICAgICAgICAgICAgICAgICAgICBmZW5jZS0+
cmVhZCA9IEhlYXBSYW5nZSgpOworICAgICAgICAgICAgICAgICAgICBmZW5jZS0+d3JpdGUgPSBI
ZWFwUmFuZ2U6OnRvcCgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgLy8gS2lsbCB0aGUgRGVwZW5kLCB3aGljaCBzaG91bGQgdW5sb2NrIGEgYnVuY2ggb2YgY29k
ZSBzaW1wbGlmaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0
aEJvdHRvbShtX2luc2VydGlvblNldCwgbV9pbmRleCk7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgY2Fz
ZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6IHsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IG1f
dmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgICAgIFdpZHRoIHdpZHRoID0g
YXRvbWljLT5vcGVyYXRpb25XaWR0aCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmIChpc0Nhbm9uaWNhbFdpZHRoKHdpZHRoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFsdWUqIGV4cGVjdGVkVmFs
dWUgPSBhdG9taWMtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IC8vIE9uIEFSTSwgdGhlIGxvYWQgcGFydCBvZiB0aGUgQ0FTIGRvZXMgYSBsb2FkIHdpdGggemVy
byBleHRlbnNpb24uIFRoZXJlZm9yZSwgd2UgbmVlZAorICAgICAgICAgICAgICAgIC8vIHRvIHpl
cm8tZXh0ZW5kIHRoZSBpbnB1dC4KKyAgICAgICAgICAgICAgICBWYWx1ZSogbWFza2VkRXhwZWN0
ZWRWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAg
ICAgIG1faW5kZXgsIEJpdEFuZCwgbV9vcmlnaW4sIGV4cGVjdGVkVmFsdWUsCisgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENvbnN0YW50KG1faW5kZXgsIGV4cGVj
dGVkVmFsdWUsIG1hc2sod2lkdGgpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgYXRvbWljLT5jaGlsZCgwKSA9IG1hc2tlZEV4cGVjdGVkVmFsdWU7CisgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAg
ICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNo
Z09yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgICAgICAgICAgY2FzZSBB
dG9taWNYY2hnWG9yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnOiB7CisgICAgICAgICAg
ICAgICAgLy8gT24gWDg2LCB0aGVzZSBtYXkgYWN0dWFsbHkgcmV0dXJuIGdhcmJhZ2UgaW4gdGhl
IGhpZ2ggYml0cy4gT24gQVJNNjQsIHRoZXNlIHNvcnRhCisgICAgICAgICAgICAgICAgLy8gemVy
by1leHRlbmQgdGhlaXIgaGlnaCBiaXRzLCBleGNlcHQgdGhhdCB0aGUgaGlnaCBiaXRzIG1pZ2h0
IGdldCBwb2xsdXRlZCBieSBoaWdoCisgICAgICAgICAgICAgICAgLy8gYml0cyBpbiB0aGUgb3Bl
cmFuZC4gLiBTbywgZWl0aGVyIHdheSwgd2UgbmVlZCB0byB0aHJvdyBhIHNpZ24tZXh0ZW5kIG9u
IHRoZXNlCisgICAgICAgICAgICAgICAgLy8gdGhpbmdzLgorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5vcGNvZGUoKSA9PSBBdG9taWNYY2hnU3ViICYmIG1fdXNlQ291bnRzLm51bVVzZXMobV92
YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9uIHg4NiwgeGNoZ2FkZCBpcyBi
ZXR0ZXIgdGhhbiB4Y2hnc3ViIGlmIGl0IGhhcyBhbnkgdXNlcnMuCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlLT5zZXRLaW5kVW5zYWZlbHkoQXRvbWljWGNoZ0FkZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgTmVnLCBtX29y
aWdpbiwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBib29sIGV4ZW1wdCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBBdG9taWNYY2hnT3I6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICAgICAgICAg
ICAgICAgICAgZXhlbXB0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4ZW1w
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92
YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICAgICAgV2lkdGggd2lkdGggPSBh
dG9taWMtPm9wZXJhdGlvbldpZHRoKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKGlzQ2Fub25pY2FsV2lkdGgod2lkdGgpKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYWx1ZSogbmV3VmFsdWUgPSBt
X2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4
LCBzaWduRXh0ZW5kT3Bjb2RlKHdpZHRoKSwgbV9vcmlnaW4sCisgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydENsb25lKG1faW5kZXgsIG1fdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG5l
d1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTQ3MCw2
ICs1NjYsNyBAQCBwcml2YXRlOgogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAgIEJsb2NrSW5z
ZXJ0aW9uU2V0IG1fYmxvY2tJbnNlcnRpb25TZXQ7CiAgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0
aW9uU2V0OworICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBCYXNpY0Jsb2NrKiBtX2Js
b2NrOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgVmFsdWUqIG1fdmFsdWU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3NB
ZnRlck9wdGltaXphdGlvbnMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1NiwxNSArMTU2LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFJv
dEw6IHsKICAgICAgICAgICAgICAgICAvLyBBUk02NCBkb2Vzbid0IGhhdmUgYSByb3RhdGUgbGVm
dC4KICAgICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChpc0FSTTY0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTaGlm
dCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgTmVnLCBtX3ZhbHVlLT5v
cmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmFs
dWUqIHJvdGF0ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgUm90Uiwg
bV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBuZXdTaGlmdCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KHJvdGF0ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBWYWx1ZSogbmV3U2hpZnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KG1faW5kZXgsIE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEp
KTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHJvdGF0ZSA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxWYWx1ZT4obV9pbmRleCwgUm90UiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNo
aWxkKDApLCBuZXdTaGlmdCk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VX
aXRoSWRlbnRpdHkocm90YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9B
aXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9B
aXIuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsMTQgQEAgbmFtZXNwYWNl
IHsKIAogY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKKy8vIEZJWE1FOiBXZSB3b3VsZG4n
dCBuZWVkIHRoaXMgaWYgQWlyIHN1cHBvcnRlZCBXaWR0aCBtb2RpZmllcnMgaW4gQWlyOjpLaW5k
LgorLy8gT09QUyEhISAobmVlZCBhIGJ1ZyBVUkwpCisjZGVmaW5lIE9QQ09ERV9GT1JfV0lEVEgo
b3Bjb2RlLCB3aWR0aCkgKCBcCisgICAgKHdpZHRoKSA9PSBXaWR0aDggPyBvcGNvZGUgIyMgOCA6
IFwKKyAgICAod2lkdGgpID09IFdpZHRoMTYgPyBvcGNvZGUgIyMgMTYgOiBcCisgICAgKHdpZHRo
KSA9PSBXaWR0aDMyID8gb3Bjb2RlICMjIDMyIDogXAorICAgIG9wY29kZSAjIyA2NCkKKwogY2xh
c3MgTG93ZXJUb0FpciB7CiBwdWJsaWM6CiAgICAgTG93ZXJUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSkKQEAgLTgzLDYgKzkxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2RvbWluYXRvcnMo
cHJvY2VkdXJlLmRvbWluYXRvcnMoKSkKICAgICAgICAgLCBtX3Byb2NlZHVyZShwcm9jZWR1cmUp
CiAgICAgICAgICwgbV9jb2RlKHByb2NlZHVyZS5jb2RlKCkpCisgICAgICAgICwgbV9ibG9ja0lu
c2VydGlvblNldChtX2NvZGUpCisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICAgICAg
LCBtX2VheChYODZSZWdpc3RlcnM6OmVheCkKKyAgICAgICAgLCBtX2VjeChYODZSZWdpc3RlcnM6
OmVjeCkKKyAgICAgICAgLCBtX2VkeChYODZSZWdpc3RlcnM6OmVkeCkKKyNlbmRpZgogICAgIHsK
ICAgICB9CiAKQEAgLTEyNCwxNCArMTM4LDE4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gaG9pc3Rl
ZCBhZGRyZXNzIGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhl
IGxvb3AuCiAgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUu
YmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7Ci0gICAg
ICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgotICAgICAgICAgICAgbV9pbnN0cy5yZXNpemUo
MCk7CiAKICAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9jayk7
CiAKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkxv
d2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4K
KyAgICAgICAgICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+
c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5z
dWNjZXNzb3JzKCkuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRC
bG9jayhtX2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVu
Y3koKSkpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2NrcyBp
biByZXZlcnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hhdCBh
bGxvd3MgdXMKICAgICAgICAgICAgIC8vIHRvIG1hdGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5Lgog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgewpAQCAt
MTQ5LDE5ICsxNjcsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBtX2luc3Rz
IGNvbnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcwotICAgICAgICAg
ICAgLy8gaXQgaW4gcmV2ZXJzZS4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5z
dHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9p
bnN0c1tpXSkKLSAgICAgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5hcHBl
bmRJbnN0KFdURk1vdmUoaW5zdCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KLSAgICAg
ICAgICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7Ci0gICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNz
b3JzKCkuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayht
X2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3koKSkp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25z
KG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1f
YmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwogCiAgICAgICAgIEFpcjo6SW5zZXJ0aW9uU2V0
IGluc2VydGlvblNldChtX2NvZGUpOwogICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBtX3Byb2xv
Z3VlKQpAQCAtNTM4LDcgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gQXJn
KCk7CiAKICAgICAgICAgaW50MzJfdCBvZmZzZXQgPSB2YWx1ZS0+b2Zmc2V0KCk7Ci0gICAgICAg
IFdpZHRoIHdpZHRoID0gdmFsdWUtPmFjY2Vzc1dpZHRoKCk7CisgICAgICAgIFdpZHRoIHdpZHRo
ID0gdmFsdWUtPmxvYWRTdG9yZVdpZHRoKCk7CiAKICAgICAgICAgQXJnIHJlc3VsdCA9IGVmZmVj
dGl2ZUFkZHIodmFsdWUtPmxhc3RDaGlsZCgpLCBvZmZzZXQsIHdpZHRoKTsKICAgICAgICAgQVNT
RVJUKHJlc3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpOwpAQCAtNTYyLDExICs1NzEsMTYgQEAgcHJp
dmF0ZToKICAgICAKICAgICBBcmdQcm9taXNlIGxvYWRQcm9taXNlQW55T3Bjb2RlKFZhbHVlKiBs
b2FkVmFsdWUpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2FkVmFsdWUtPmFzPE1l
bW9yeVZhbHVlPigpKTsKICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKGxvYWRWYWx1ZSkpCiAg
ICAgICAgICAgICByZXR1cm4gQXJnKCk7CiAgICAgICAgIGlmIChjcm9zc2VzSW50ZXJmZXJlbmNl
KGxvYWRWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7Ci0gICAgICAgIEFyZ1Byb21p
c2UgcmVzdWx0KGFkZHIobG9hZFZhbHVlKSwgbG9hZFZhbHVlKTsKKyAgICAgICAgaWYgKGxvYWRW
YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4g
QXJnKCk7CisgICAgICAgIEFyZyBsb2FkQWRkciA9IGFkZHIobG9hZFZhbHVlKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobG9hZEFkZHIpOworICAgICAgICBBcmdQcm9taXNlIHJlc3VsdChsb2Fk
QWRkciwgbG9hZFZhbHVlKTsKICAgICAgICAgaWYgKGxvYWRWYWx1ZS0+dHJhcHMoKSkKICAgICAg
ICAgICAgIHJlc3VsdC5zZXRUcmFwcyh0cnVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTg5OCwxMSArOTEyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKICAgICAgICAgYXBwZW5kKE1vdmUsIHRt
cCh2YWx1ZSksIHRtcChtX3ZhbHVlKSk7Ci0gICAgICAgIGFwcGVuZChNb3ZlLCB0bXAoYW1vdW50
KSwgVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KSk7Ci0gICAgICAgIGFwcGVuZChvcGNvZGUsIFRtcChY
ODZSZWdpc3RlcnM6OmVjeCksIHRtcChtX3ZhbHVlKSk7Ci0jZW5kaWYKKyAgICAgICAgYXBwZW5k
KE1vdmUsIHRtcChhbW91bnQpLCBtX2VjeCk7CisgICAgICAgIGFwcGVuZChvcGNvZGUsIG1fZWN4
LCB0bXAobV92YWx1ZSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29k
ZTMyLCBBaXI6Ok9wY29kZSBvcGNvZGU2ND4KQEAgLTkzMSwxMCArOTQzLDE1IEBAIHByaXZhdGU6
CiAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZTMyLCBBaXI6Ok9wY29kZSBvcGNvZGU2NCwgQ29t
bXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU+CiAgICAgYm9vbCB0cnlB
cHBlbmRTdG9yZUJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCiAgICAgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSk7CisgICAgICAgIAog
ICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNvZGVGb3JUeXBlKG9wY29kZTMyLCBv
cGNvZGU2NCwgbGVmdC0+dHlwZSgpKTsKICAgICAgICAgaWYgKG9wY29kZSA9PSBBaXI6Ok9vcHMp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAorICAgICAgICBpZiAobV92YWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAogICAgICAgICBBcmcgc3RvcmVBZGRyID0gYWRkcihtX3ZhbHVlKTsKICAg
ICAgICAgQVNTRVJUKHN0b3JlQWRkcik7CiAKQEAgLTk5NCwxMCArMTAxMSw0OCBAQCBwcml2YXRl
OgogCiAgICAgICAgIHJldHVybiBJbnN0KG1vdmUsIG1fdmFsdWUsIHRtcCh2YWx1ZSksIGRlc3Qp
OwogICAgIH0KKyAgICAKKyAgICBBaXI6Ok9wY29kZSBzdG9yZU9wY29kZShXaWR0aCB3aWR0aCwg
QmFuayBiYW5rLCBib29sIHJlbGVhc2UpCisgICAgeworICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7
CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFuayA9
PSBHUCk7CisgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVsOCA6IFN0b3JlODsK
KyAgICAgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFuayA9
PSBHUCk7CisgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVsMTYgOiBTdG9yZTE2
OworICAgICAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAg
ICAgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBTdG9y
ZVJlbDMyIDogTW92ZTMyOworICAgICAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghcmVsZWFzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1vdmVGbG9h
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdpZHRo
NjQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpczY0Qml0KCkpOworICAgICAgICAgICAg
c3dpdGNoIChiYW5rKSB7CisgICAgICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgICAgIHJl
dHVybiByZWxlYXNlID8gU3RvcmVSZWw2NCA6IE1vdmU7CisgICAgICAgICAgICBjYXNlIEZQOgor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWxlYXNlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTW92ZURvdWJsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
ICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlKFZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7Cisg
ICAgICAgIHJldHVybiBzdG9yZU9wY29kZShtZW1vcnktPmxvYWRTdG9yZVdpZHRoKCksIG1lbW9y
eS0+YWNjZXNzQmFuaygpLCBtZW1vcnktPmhhc0ZlbmNlKCkpOworICAgIH0KIAogICAgIEluc3Qg
Y3JlYXRlU3RvcmUoVmFsdWUqIHZhbHVlLCBjb25zdCBBcmcmIGRlc3QpCiAgICAgewotICAgICAg
ICBBaXI6Ok9wY29kZSBtb3ZlT3Bjb2RlID0gbW92ZUZvclR5cGUodmFsdWUtPnR5cGUoKSk7Cisg
ICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVPcGNvZGUgPSBzdG9yZU9wY29kZSh2YWx1ZSk7CiAgICAg
ICAgIHJldHVybiBjcmVhdGVTdG9yZShtb3ZlT3Bjb2RlLCB2YWx1ZSwgZGVzdCk7CiAgICAgfQog
CkBAIC0xMDA2LDcgKzEwNjEsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgYXBwZW5kKHRy
YXBwaW5nSW5zdChtX3ZhbHVlLCBjcmVhdGVTdG9yZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncyku
Li4pKSk7CiAgICAgfQotCisgICAgCiAgICAgQWlyOjpPcGNvZGUgbW92ZUZvclR5cGUoVHlwZSB0
eXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xMDczLDcgKzExMjgsNDEg
QEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChpbnN0KTsK
ICAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2hBcHBlbmRpbmdJbnN0cnVjdGlvbnMoQWlyOjpC
YXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgeworICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBpbnN0
cnVjdGlvbnMuIG1faW5zdHMgY29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBw
cm9jZXNzCisgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1faW5zdHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBmb3IgKEluc3QmIGluc3Qg
OiBtX2luc3RzW2ldKQorICAgICAgICAgICAgICAgIHRhcmdldC0+YXBwZW5kSW5zdChXVEZNb3Zl
KGluc3QpKTsKKyAgICAgICAgfQorICAgICAgICBtX2luc3RzLnJlc2l6ZSgwKTsKKyAgICB9Cisg
ICAgCisgICAgQWlyOjpCYXNpY0Jsb2NrKiBuZXdCbG9jaygpCisgICAgeworICAgICAgICByZXR1
cm4gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRBZnRlcihtX2Jsb2NrVG9CbG9ja1ttX2Jsb2Nr
XSk7CisgICAgfQogCisgICAgLy8gTk9URTogVGhpcyB3aWxsIGNyZWF0ZSBhIGNvbnRpbnVhdGlv
biBibG9jayAoYG5leHRCbG9ja2ApICphZnRlciogYW55IGJsb2NrcyB5b3UndmUgY3JlYXRlZCB1
c2luZworICAgIC8vIG5ld0Jsb2NrKCkuIFNvLCBpdCdzIHByZWZlcmFibGUgdG8gY3JlYXRlIGFs
bCBvZiB5b3VyIGJsb2NrcyB1cGZyb250IHVzaW5nIG5ld0Jsb2NrKCkuIEFsc28gbm90ZQorICAg
IC8vIHRoYXQgYW55IGNvZGUgeW91IGVtaXQgYmVmb3JlIHRoaXMgd2lsbCBiZSBwcmVwZW5kZWQg
dG8gdGhlIGNvbnRpbnVhdGlvbiwgYW5kIGFueSBjb2RlIHlvdSBlbWl0CisgICAgLy8gYWZ0ZXIg
dGhpcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBwcmV2aW91cyBibG9jay4KKyAgICB2b2lkIHNw
bGl0QmxvY2soQWlyOjpCYXNpY0Jsb2NrKiYgcHJldmlvdXNCbG9jaywgQWlyOjpCYXNpY0Jsb2Nr
KiYgbmV4dEJsb2NrKQorICAgIHsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBibG9jayA9IG1f
YmxvY2tUb0Jsb2NrW21fYmxvY2tdOworICAgICAgICAKKyAgICAgICAgcHJldmlvdXNCbG9jayA9
IGJsb2NrOworICAgICAgICBuZXh0QmxvY2sgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEFm
dGVyKGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZpbmlzaEFwcGVuZGluZ0luc3RydWN0aW9u
cyhuZXh0QmxvY2spOworICAgICAgICBuZXh0QmxvY2stPnN1Y2Nlc3NvcnMoKSA9IGJsb2NrLT5z
dWNjZXNzb3JzKCk7CisgICAgICAgIGJsb2NrLT5zdWNjZXNzb3JzKCkuY2xlYXIoKTsKKyAgICAg
ICAgCisgICAgICAgIG1faW5zdHMuYXBwZW5kKFZlY3RvcjxJbnN0PigpKTsKKyAgICB9CisgICAg
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIFQq
IGVuc3VyZVNwZWNpYWwoVComIGZpZWxkLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCiAgICAg
ewpAQCAtMTEyMyw3ICsxMjEyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CiAgICAgICAgICAgICAg
ICAgYXJnID0gQXJnOjpjYWxsQXJnKHZhbHVlLnJlcCgpLm9mZnNldEZyb21TUCgpKTsKLSAgICAg
ICAgICAgICAgICBhcHBlbmRTdG9yZSh2YWx1ZS52YWx1ZSgpLCBhcmcpOworICAgICAgICAgICAg
ICAgIGFwcGVuZFN0b3JlKG1vdmVGb3JUeXBlKHZhbHVlLnZhbHVlKCkpLCBhcmcpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTk2MSw2ICsyMDUwLDMwOCBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICB2b2lkIGFwcGVuZFg4NkRp
dihCMzo6T3Bjb2RlIG9wKQorICAgIHsKKyAgICAgICAgQWlyOjpPcGNvZGUgY29udmVydFRvRG91
YmxlV29yZDsKKyAgICAgICAgQWlyOjpPcGNvZGUgZGl2OworICAgICAgICBzd2l0Y2ggKG1fdmFs
dWUtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgY29udmVydFRv
RG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMjsKKyAgICAgICAgICAgIGRpdiA9
IFg4NkRpdjMyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAg
ICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2Q29udmVydFRvUXVhZFdvcmQ2NDsKKyAg
ICAgICAgICAgIGRpdiA9IFg4NkRpdjY0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKG9wID09IERpdiB8fCBv
cCA9PSBNb2QpOworICAgICAgICBUbXAgcmVzdWx0ID0gb3AgPT0gRGl2ID8gbV9lYXggOiBtX2Vk
eDsKKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgbV9lYXgp
OworICAgICAgICBhcHBlbmQoY29udmVydFRvRG91YmxlV29yZCwgbV9lYXgsIG1fZWR4KTsKKyAg
ICAgICAgYXBwZW5kKGRpdiwgbV9lYXgsIG1fZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsK
KyAgICAgICAgYXBwZW5kKE1vdmUsIHJlc3VsdCwgdG1wKG1fdmFsdWUpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFwcGVuZFg4NlVEaXYoQjM6Ok9wY29kZSBvcCkKKyAgICB7CisgICAgICAgIEFpcjo6
T3Bjb2RlIGRpdiA9IG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IFg4NlVEaXYzMiA6IFg4NlVE
aXY2NDsKKworICAgICAgICBBU1NFUlQob3AgPT0gVURpdiB8fCBvcCA9PSBVTW9kKTsKKyAgICAg
ICAgVG1wIHJlc3VsdCA9IG9wID09IFVEaXYgPyBtX2VheCA6IG1fZWR4OworCisgICAgICAgIGFw
cGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBtX2VheCk7CisgICAgICAgIGFwcGVu
ZChYb3I2NCwgbV9lZHgsIG1fZWR4KTsKKyAgICAgICAgYXBwZW5kKGRpdiwgbV9lYXgsIG1fZWR4
LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIHJlc3VsdCwg
dG1wKG1fdmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgQWlyOjpPcGNvZGUgbG9hZExpbmtPcGNv
ZGUoV2lkdGggd2lkdGgsIGJvb2wgZmVuY2UpCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2Ug
PyBPUENPREVfRk9SX1dJRFRIKExvYWRMaW5rQWNxLCB3aWR0aCkgOiBPUENPREVfRk9SX1dJRFRI
KExvYWRMaW5rLCB3aWR0aCk7CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlQ29u
ZE9wY29kZShXaWR0aCB3aWR0aCwgYm9vbCBmZW5jZSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
ZW5jZSA/IE9QQ09ERV9GT1JfV0lEVEgoU3RvcmVDb25kUmVsLCB3aWR0aCkgOiBPUENPREVfRk9S
X1dJRFRIKFN0b3JlQ29uZCwgd2lkdGgpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGNhbiBl
bWl0IGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgcGF0dGVybnM6CisgICAgLy8gQXRvbWljV2Vha0NB
UworICAgIC8vIEJpdFhvcihBdG9taWNXZWFrQ0FTLCAxKQorICAgIC8vIEF0b21pY1N0cm9uZ0NB
UworICAgIC8vIEVxdWFsKEF0b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpCisgICAgLy8gTm90RXF1
YWwoQXRvbWljU3Ryb25nQ0FTLCBleHBlY3RlZCkKKyAgICAvLyBCcmFuY2goQXRvbWljV2Vha0NB
UykKKyAgICAvLyBCcmFuY2goRXF1YWwoQXRvbWljU3Ryb25nQ0FTLCBleHBlY3RlZCkpCisgICAg
Ly8gQnJhbmNoKE5vdEVxdWFsKEF0b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpKQorICAgIC8vCisg
ICAgLy8gSXQgYXNzdW1lcyB0aGF0IGF0b21pY1ZhbHVlIHBvaW50cyB0byB0aGUgQ0FTLCBhbmQg
bV92YWx1ZSBwb2ludHMgdG8gdGhlIGluc3RydWN0aW9uIGJlaW5nCisgICAgLy8gZ2VuZXJhdGVk
LiBJdCBhc3N1bWVzIHRoYXQgeW91J3ZlIGNvbnN1bWVkIGV2ZXJ5dGhpbmcgdGhhdCBuZWVkcyB0
byBiZSBjb25zdW1lZC4KKyAgICB2b2lkIGFwcGVuZENBUyhWYWx1ZSogYXRvbWljVmFsdWUsIGJv
b2wgaW52ZXJ0KQorICAgIHsKKyAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IGF0b21pY1Zh
bHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXRvbWljKTsK
KyAgICAgICAgCisgICAgICAgIGJvb2wgaXNCcmFuY2ggPSBtX3ZhbHVlLT5vcCgpID09IEJyYW5j
aDsKKyAgICAgICAgYm9vbCBpc1N0cm9uZyA9IGF0b21pYy0+b3AoKSA9PSBBdG9taWNTdHJvbmdD
QVM7CisgICAgICAgIGJvb2wgcmV0dXJuc09sZFZhbHVlID0gbV92YWx1ZS0+b3AoKSA9PSBBdG9t
aWNTdHJvbmdDQVM7CisgICAgICAgIAorICAgICAgICBXaWR0aCB3aWR0aCA9IGF0b21pYy0+b3Bl
cmF0aW9uV2lkdGgoKTsKKyAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisKKyAg
ICAgICAgVG1wIHZhbHVlUmVzdWx0VG1wOworICAgICAgICBUbXAgYm9vbFJlc3VsdFRtcDsKKyAg
ICAgICAgaWYgKHJldHVybnNPbGRWYWx1ZSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWludmVydCk7CisgICAgICAgICAgICB2YWx1ZVJlc3VsdFRtcCA9IHRtcChtX3ZhbHVlKTsKKyAg
ICAgICAgICAgIGJvb2xSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgfSBl
bHNlIGlmIChpc0JyYW5jaCkgeworICAgICAgICAgICAgdmFsdWVSZXN1bHRUbXAgPSBtX2NvZGUu
bmV3VG1wKEdQKTsKKyAgICAgICAgICAgIGJvb2xSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQ
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlUmVzdWx0VG1wID0gbV9jb2Rl
Lm5ld1RtcChHUCk7CisgICAgICAgICAgICBib29sUmVzdWx0VG1wID0gdG1wKG1fdmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBUbXAgc3VjY2Vzc0Jvb2xSZXN1bHRUbXA7Cisg
ICAgICAgIGlmIChpc1N0cm9uZyAmJiAhaXNCcmFuY2gpCisgICAgICAgICAgICBzdWNjZXNzQm9v
bFJlc3VsdFRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzdWNjZXNzQm9vbFJlc3VsdFRtcCA9IGJvb2xSZXN1bHRUbXA7CisKKyAgICAgICAgVG1wIGV4
cGVjdGVkVmFsdWVUbXAgPSB0bXAoYXRvbWljLT5jaGlsZCgwKSk7CisgICAgICAgIFRtcCBuZXdW
YWx1ZVRtcCA9IHRtcChhdG9taWMtPmNoaWxkKDEpKTsKKyAgICAgICAgCisgICAgICAgIEZyZXF1
ZW50ZWRCbG9jayBzdWNjZXNzOworICAgICAgICBGcmVxdWVudGVkQmxvY2sgZmFpbHVyZTsKKyAg
ICAgICAgaWYgKGlzQnJhbmNoKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gbV9ibG9ja1RvQmxv
Y2tbbV9ibG9ja10tPnN1Y2Nlc3NvcihpbnZlcnQpOworICAgICAgICAgICAgZmFpbHVyZSA9IG1f
YmxvY2tUb0Jsb2NrW21fYmxvY2tdLT5zdWNjZXNzb3IoIWludmVydCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBhcHBlbmQocmVsYXhl
ZE1vdmVGb3JUeXBlKGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpKSwgaW1tT3JUbXAoYXRvbWljLT5j
aGlsZCgwKSksIG1fZWF4KTsKKyAgICAgICAgICAgIGlmIChyZXR1cm5zT2xkVmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNTdHJvbmdDQVMsIHdp
ZHRoKSwgbV9lYXgsIG5ld1ZhbHVlVG1wLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBhcHBl
bmQocmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpKSwgbV9lYXgsIHZh
bHVlUmVzdWx0VG1wKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNCcmFuY2gpIHsKKyAgICAg
ICAgICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChCcmFuY2hBdG9taWNTdHJvbmdDQVMs
IHdpZHRoKSwgQXJnOjpzdGF0dXNDb25kKE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNzKSwgbV9lYXgs
IG5ld1ZhbHVlVG1wLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrVG9CbG9ja1tt
X2Jsb2NrXS0+c2V0U3VjY2Vzc29ycyhzdWNjZXNzLCBmYWlsdXJlKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKEF0b21pY1N0cm9u
Z0NBUywgd2lkdGgpLCBBcmc6OnN0YXR1c0NvbmQoaW52ZXJ0ID8gTWFjcm9Bc3NlbWJsZXI6OkZh
aWx1cmUgOiBNYWNyb0Fzc2VtYmxlcjo6U3VjY2VzcyksIG1fZWF4LCB0bXAoYXRvbWljLT5jaGls
ZCgxKSksIGFkZHJlc3MsIGJvb2xSZXN1bHRUbXApOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOworICAg
ICAgICAvLyBXZSB3aXNoIHRvIGVtaXQ6CisgICAgICAgIC8vCisgICAgICAgIC8vIEJsb2NrICNy
ZWxvb3A6CisgICAgICAgIC8vICAgICBMb2FkTGluaworICAgICAgICAvLyAgICAgQnJhbmNoIE5v
dEVxdWFsCisgICAgICAgIC8vICAgU3VjY2Vzc29yczogVGhlbjojZmFpbCwgRWxzZTogI3N0b3Jl
CisgICAgICAgIC8vIEJsb2NrICNzdG9yZToKKyAgICAgICAgLy8gICAgIFN0b3JlQ29uZAorICAg
ICAgICAvLyAgICAgWG9yICQxLCAlcmVzdWx0ICAgIDwtLS0gb25seSBpZiAhaW52ZXJ0CisgICAg
ICAgIC8vICAgICBKdW1wCisgICAgICAgIC8vICAgU3VjY2Vzc29yczogI2RvbmUKKyAgICAgICAg
Ly8gQmxvY2sgI2ZhaWw6CisgICAgICAgIC8vICAgICBNb3ZlICRpbnZlcnQsICVyZXN1bHQKKyAg
ICAgICAgLy8gICAgIEp1bXAKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiAjZG9uZQorICAgICAg
ICAvLyBCbG9jayAjZG9uZToKKyAgICAgICAgCisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogcmVs
b29wQmxvY2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHN0b3JlQmxv
Y2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHN1Y2Nlc3NCbG9jayA9
IG51bGxwdHI7CisgICAgICAgIGlmICghaXNCcmFuY2ggJiYgaXNTdHJvbmcpCisgICAgICAgICAg
ICBzdWNjZXNzQmxvY2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGZh
aWxCbG9jayA9IG51bGxwdHI7CisgICAgICAgIGlmICghaXNCcmFuY2gpCisgICAgICAgICAgICBm
YWlsQmxvY2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHN0cm9uZ0Zh
aWxCbG9jazsKKyAgICAgICAgaWYgKGlzU3Ryb25nKQorICAgICAgICAgICAgc3Ryb25nRmFpbEJs
b2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrIGNvbXBhcmlzb25GYWls
OworICAgICAgICBGcmVxdWVudGVkQmxvY2sgd2Vha0ZhaWw7CisgICAgICAgIGlmIChpc1N0cm9u
ZykgeworICAgICAgICAgICAgY29tcGFyaXNvbkZhaWwgPSBzdHJvbmdGYWlsQmxvY2s7CisgICAg
ICAgICAgICB3ZWFrRmFpbCA9IHJlbG9vcEJsb2NrOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKGlzQnJhbmNoKQorICAgICAgICAgICAgICAgIGNvbXBhcmlzb25GYWlsID0gZmFp
bHVyZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wYXJpc29uRmFpbCA9
IGZhaWxCbG9jazsKKyAgICAgICAgICAgIHdlYWtGYWlsID0gZmFpbHVyZTsKKyAgICAgICAgfQor
ICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGJlZ2luQmxvY2s7CisgICAgICAgIEFpcjo6QmFzaWNC
bG9jayogZG9uZUJsb2NrOworICAgICAgICBzcGxpdEJsb2NrKGJlZ2luQmxvY2ssIGRvbmVCbG9j
ayk7CisgICAgICAgIAorICAgICAgICBhcHBlbmQoSnVtcCk7CisgICAgICAgIGJlZ2luQmxvY2st
PnNldFN1Y2Nlc3NvcnMocmVsb29wQmxvY2spOworICAgICAgICAKKyAgICAgICAgcmVsb29wQmxv
Y2stPmFwcGVuZChsb2FkTGlua09wY29kZSh3aWR0aCwgYXRvbWljLT5oYXNGZW5jZSgpKSwgbV92
YWx1ZSwgdmFsdWVSZXN1bHRUbXAsIGFkZHJlc3MpOworICAgICAgICByZWxvb3BCbG9jay0+YXBw
ZW5kKE9QQ09ERV9GT1JfV0lEVEgoQnJhbmNoLCBjYW5vbmljYWxXaWR0aCh3aWR0aCkpLCBtX3Zh
bHVlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSB2YWx1ZVJlc3VsdFRt
cCwgZXhwZWN0ZWRWYWx1ZVRtcCk7CisgICAgICAgIHJlbG9vcEJsb2NrLT5zZXRTdWNjZXNzb3Jz
KGNvbXBhcmlzb25GYWlsLCBzdG9yZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JlQmxv
Y2stPmFwcGVuZChzdG9yZUNvbmRPcGNvZGUod2lkdGgsIGF0b21pYy0+aGFzRmVuY2UoKSksIG1f
dmFsdWUsIG5ld1ZhbHVlVG1wLCBhZGRyZXNzLCBzdWNjZXNzQm9vbFJlc3VsdFRtcCk7CisgICAg
ICAgIGlmIChpc0JyYW5jaCkgeworICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKEJyYW5j
aFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYm9vbFJlc3VsdFRt
cCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgICAgIHN0b3JlQmxvY2stPnNldFN1Y2Nlc3Nv
cnMoc3VjY2Vzcywgd2Vha0ZhaWwpOworICAgICAgICAgICAgZG9uZUJsb2NrLT5zdWNjZXNzb3Jz
KCkuY2xlYXIoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkb25lQmxvY2stPnNpemUo
KSk7CisgICAgICAgICAgICBkb25lQmxvY2stPmFwcGVuZChPb3BzLCBtX3ZhbHVlKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc1N0cm9uZykgeworICAgICAgICAgICAgICAg
IHN0b3JlQmxvY2stPmFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6WmVybyksIHN1Y2Nlc3NCb29sUmVzdWx0VG1wLCBBcmc6OmJpdEltbSgtMSkpOworICAg
ICAgICAgICAgICAgIHN0b3JlQmxvY2stPnNldFN1Y2Nlc3NvcnMoc3VjY2Vzc0Jsb2NrLCByZWxv
b3BCbG9jayk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3VjY2Vzc0Jsb2Nr
LT5hcHBlbmQoTW92ZSwgbV92YWx1ZSwgQXJnOjppbW0oIWludmVydCksIGJvb2xSZXN1bHRUbXAp
OworICAgICAgICAgICAgICAgIHN1Y2Nlc3NCbG9jay0+YXBwZW5kKEp1bXAsIG1fdmFsdWUpOwor
ICAgICAgICAgICAgICAgIHN1Y2Nlc3NCbG9jay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2spOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWludmVydCkKKyAgICAg
ICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKFhvcjMyLCBtX3ZhbHVlLCBBcmc6OmJp
dEltbSgxKSwgYm9vbFJlc3VsdFRtcCwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKEp1bXAsIG1fdmFsdWUpOworICAg
ICAgICAgICAgICAgIHN0b3JlQmxvY2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmFpbEJsb2NrLT5hcHBlbmQoTW92
ZSwgbV92YWx1ZSwgQXJnOjppbW0oaW52ZXJ0KSwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAg
ICBmYWlsQmxvY2stPmFwcGVuZChKdW1wLCBtX3ZhbHVlKTsKKyAgICAgICAgICAgIGZhaWxCbG9j
ay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoaXNTdHJvbmcpIHsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBtX2NvZGUubmV3VG1wKEdQ
KTsKKyAgICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9jay0+YXBwZW5kKHN0b3JlQ29uZE9wY29kZSh3
aWR0aCwgYXRvbWljLT5oYXNGZW5jZSgpKSwgbV92YWx1ZSwgdmFsdWVSZXN1bHRUbXAsIGFkZHJl
c3MsIHRtcCk7CisgICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2stPmFwcGVuZChCcmFuY2hUZXN0
MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIHRtcCwgQXJnOjpiaXRJbW0o
LTEpKTsKKyAgICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9jay0+c2V0U3VjY2Vzc29ycyhmYWlsQmxv
Y2ssIHJlbG9vcEJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGFwcGVu
ZFZvaWRBdG9taWMoQWlyOjpPcGNvZGUgYXRvbWljT3Bjb2RlKQorICAgIHsKKyAgICAgICAgaWYg
KG1fdXNlQ291bnRzLm51bVVzZXMobV92YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICBBcmcgYWRkcmVzcyA9IGFkZHIobV92YWx1ZSk7CisgICAgICAg
IAorICAgICAgICBpZiAoaXNWYWxpZEZvcm0oYXRvbWljT3Bjb2RlLCBBcmc6OkltbSwgYWRkcmVz
cy5raW5kKCkpICYmIGltbShtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKKyAgICAgICAgICAgIGFwcGVu
ZChhdG9taWNPcGNvZGUsIGltbShtX3ZhbHVlLT5jaGlsZCgwKSksIGFkZHJlc3MpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpc1Zh
bGlkRm9ybShhdG9taWNPcGNvZGUsIEFyZzo6VG1wLCBhZGRyZXNzLmtpbmQoKSkpIHsKKyAgICAg
ICAgICAgIGFwcGVuZChhdG9taWNPcGNvZGUsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIGFkZHJl
c3MpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZEdlbmVyYWxBdG9t
aWMoQWlyOjpPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQXRvbWljVmFsdWUqIGF0b21p
YyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAKKyAgICAgICAgQXJnIGFk
ZHJlc3MgPSBhZGRyKG1fdmFsdWUpOworICAgICAgICBUbXAgb2xkVmFsdWUgPSBtX2NvZGUubmV3
VG1wKEdQKTsKKyAgICAgICAgVG1wIG5ld1ZhbHVlID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAg
ICAgIAorICAgICAgICAvLyBXZSBuZWVkIGEgQ0FTIGxvb3Agb3IgYSBMTC9TQyBsb29wLiBVc2lu
ZyBwcmVwYXJlL2F0dGVtcHQgamFyZ29uLCB3ZSB3YW50OgorICAgICAgICAvLworICAgICAgICAv
LyBCbG9jayAjcmVsb29wOgorICAgICAgICAvLyAgICAgUHJlcGFyZQorICAgICAgICAvLyAgICAg
b3Bjb2RlCisgICAgICAgIC8vICAgICBBdHRlbXB0CisgICAgICAgIC8vICAgU3VjY2Vzc29yczog
VGhlbjojZG9uZSwgRWxzZTojcmVsb29wCisgICAgICAgIC8vIEJsb2NrICNkb25lOgorICAgICAg
ICAvLyAgICAgTW92ZSBvbGRWYWx1ZSwgcmVzdWx0CisgICAgICAgIAorICAgICAgICBhcHBlbmQo
cmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgb2xkVmFsdWUsIHRtcChhdG9taWMp
KTsKKyAgICAgICAgCisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogcmVsb29wQmxvY2sgPSBuZXdC
bG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGJlZ2luQmxvY2s7CisgICAgICAgIEFp
cjo6QmFzaWNCbG9jayogZG9uZUJsb2NrOworICAgICAgICBzcGxpdEJsb2NrKGJlZ2luQmxvY2ss
IGRvbmVCbG9jayk7CisgICAgICAgIAorICAgICAgICBhcHBlbmQoSnVtcCk7CisgICAgICAgIGJl
Z2luQmxvY2stPnNldFN1Y2Nlc3NvcnMocmVsb29wQmxvY2spOworICAgICAgICAKKyAgICAgICAg
QWlyOjpPcGNvZGUgcHJlcGFyZU9wY29kZTsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSB7CisgICAgICAgICAgICBj
YXNlIFdpZHRoODoKKyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTG9hZDhTaWduZWRF
eHRlbmRUbzMyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXaWR0
aDE2OgorICAgICAgICAgICAgICAgIHByZXBhcmVPcGNvZGUgPSBMb2FkMTZTaWduZWRFeHRlbmRU
bzMyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXaWR0aDMyOgor
ICAgICAgICAgICAgICAgIHByZXBhcmVPcGNvZGUgPSBNb3ZlMzI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICAgICAgcHJlcGFy
ZU9wY29kZSA9IE1vdmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOwor
ICAgICAgICAgICAgb3Bjb2RlID0gbG9hZExpbmtPcGNvZGUoYXRvbWljLT5vcGVyYXRpb25XaWR0
aCgpLCBhdG9taWMtPmhhc0ZlbmNlKCkpOworICAgICAgICB9CisgICAgICAgIHJlbG9vcEJsb2Nr
LT5hcHBlbmQocHJlcGFyZU9wY29kZSwgbV92YWx1ZSwgYWRkcmVzcywgb2xkVmFsdWUpOworICAg
ICAgICAKKyAgICAgICAgaWYgKG9wY29kZSAhPSBOb3ApIHsKKyAgICAgICAgICAgIGlmIChpbW0o
YXRvbWljLT5jaGlsZCgwKSkgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpU
bXAsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKG9wY29k
ZSwgbV92YWx1ZSwgaW1tKGF0b21pYy0+Y2hpbGQoMCkpLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwor
ICAgICAgICAgICAgZWxzZSBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpU
bXAsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKG9wY29k
ZSwgbV92YWx1ZSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChy
ZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwor
ICAgICAgICAgICAgICAgIGlmIChpbW0oYXRvbWljLT5jaGlsZCgwKSkgJiYgaXNWYWxpZEZvcm0o
b3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgICAgICByZWxvb3BC
bG9jay0+YXBwZW5kKG9wY29kZSwgbV92YWx1ZSwgaW1tKGF0b21pYy0+Y2hpbGQoMCkpLCBuZXdW
YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZWxvb3BC
bG9jay0+YXBwZW5kKG9wY29kZSwgbV92YWx1ZSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCBuZXdW
YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNYODYoKSkg
eworICAgICAgICAgICAgQWlyOjpPcGNvZGUgY2FzT3Bjb2RlID0gT1BDT0RFX0ZPUl9XSURUSChC
cmFuY2hBdG9taWNTdHJvbmdDQVMsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSk7CisgICAgICAg
ICAgICByZWxvb3BCbG9jay0+YXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUo
KSksIG9sZFZhbHVlLCBtX2VheCk7CisgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKGNh
c09wY29kZSwgbV92YWx1ZSwgQXJnOjpzdGF0dXNDb25kKE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNz
KSwgbV9lYXgsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7CisgICAgICAgICAgICBUbXAgYm9vbFJlc3Vs
dCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChz
dG9yZUNvbmRPcGNvZGUoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpLCBhdG9taWMtPmhhc0ZlbmNl
KCkpLCBuZXdWYWx1ZSwgYWRkcmVzcywgYm9vbFJlc3VsdCk7CisgICAgICAgICAgICByZWxvb3BC
bG9jay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvKSwgYm9vbFJlc3VsdCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgfQorICAgICAgICBy
ZWxvb3BCbG9jay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2ssIHJlbG9vcEJsb2NrKTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCBsb3dlcigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUt
Pm9wY29kZSgpKSB7CkBAIC0xOTcxLDMwICsyMzYyLDUwIEBAIHByaXZhdGU6CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExvYWQ6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0
cmFwcGluZ0luc3QobV92YWx1ZSwgbW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgbV92YWx1
ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBNZW1vcnlWYWx1
ZSogbWVtb3J5ID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUgPSBBaXI6Ok9vcHM7CisgICAgICAgICAgICBpZiAobWVtb3J5LT5oYXNG
ZW5jZSgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtZW1vcnktPnR5cGUoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IExv
YWRBY3EzMjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gTG9hZEFjcTY0OworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICBvcGNvZGUgPSBtb3ZlRm9yVHlwZShtZW1vcnktPnR5cGUoKSk7CisgICAgICAg
ICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkciht
X3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExvYWQ4UzogewotICAgICAgICAgICAgYXBwZW5k
KHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIG1fdmFsdWUsIGFk
ZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bj
b2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxOFNp
Z25lZEV4dGVuZFRvMzIgOiBMb2FkOFNpZ25lZEV4dGVuZFRvMzI7CisgICAgICAgICAgICBhcHBl
bmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwg
dG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIExvYWQ4WjogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVl
LCBMb2FkOCwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAg
ICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFz
RmVuY2UoKSA/IExvYWRBY3E4IDogTG9hZDg7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJ
bnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUp
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIExvYWQx
NlM6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9hZDE2U2ln
bmVkRXh0ZW5kVG8zMiwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7Cisg
ICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4o
KS0+aGFzRmVuY2UoKSA/IExvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIgOiBMb2FkMTZTaWduZWRF
eHRlbmRUbzMyOworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNv
ZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBMb2FkMTZaOiB7Ci0gICAgICAgICAg
ICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQxNiwgbV92YWx1ZSwgYWRkcihtX3Zh
bHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBt
X3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3ExNiA6IExvYWQx
NjsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBtX3Zh
bHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotCisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBZGQ6IHsKICAgICAgICAg
ICAgIGlmICh0cnlBcHBlbmRMZWEoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMDky
LDcgKzI1MDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzQ2hpbGwo
KSkKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOwogICAgICAgICAg
ICAgaWYgKGlzSW50KG1fdmFsdWUtPnR5cGUoKSkgJiYgaXNYODYoKSkgewotICAgICAgICAgICAg
ICAgIGxvd2VyWDg2RGl2KERpdik7CisgICAgICAgICAgICAgICAgYXBwZW5kWDg2RGl2KERpdik7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQVNT
RVJUKCFpc1g4NigpIHx8IGlzRmxvYXQobV92YWx1ZS0+dHlwZSgpKSk7CkBAIC0yMTAzLDcgKzI1
MTQsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGNhc2UgVURpdjogewogICAgICAgICAgICAgaWYg
KGlzSW50KG1fdmFsdWUtPnR5cGUoKSkgJiYgaXNYODYoKSkgewotICAgICAgICAgICAgICAgIGxv
d2VyWDg2VURpdihVRGl2KTsKKyAgICAgICAgICAgICAgICBhcHBlbmRYODZVRGl2KFVEaXYpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMjExNywxMyArMjUy
OCwxMyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vZDogewogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaXNYODYoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV92YWx1ZS0+
aXNDaGlsbCgpKTsKLSAgICAgICAgICAgIGxvd2VyWDg2RGl2KE1vZCk7CisgICAgICAgICAgICBh
cHBlbmRYODZEaXYoTW9kKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2UgVU1vZDogewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7Ci0g
ICAgICAgICAgICBsb3dlclg4NlVEaXYoVU1vZCk7CisgICAgICAgICAgICBhcHBlbmRYODZVRGl2
KFVNb2QpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIxNjIsMTAgKzI1
NzMsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBhcHBlbmRVbk9wPE5vdDMyLCBOb3Q2
ND4obV92YWx1ZS0+Y2hpbGQoMCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5p
c0ludCgxKQorICAgICAgICAgICAgICAgICYmIGlzQXRvbWljQ0FTKG1fdmFsdWUtPmNoaWxkKDAp
LT5vcGNvZGUoKSkKKyAgICAgICAgICAgICAgICAmJiBjYW5CZUludGVybmFsKG1fdmFsdWUtPmNo
aWxkKDApKSkgeworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKG1fdmFsdWUtPmNoaWxk
KDApKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRDQVMobV92YWx1ZS0+Y2hpbGQoMCksIHRydWUp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgYXBwZW5kQmluT3A8WG9yMzIsIFhvcjY0LCBYb3JEb3VibGUsIFhvckZsb2F0
LCBDb21tdXRhdGl2ZT4oCiAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFs
dWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICBhcHBlbmRVbk9wPERlcGVu
ZDMyLCBEZXBlbmQ2ND4obV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTaGw6IHsKICAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgxKS0+aXNJbnQzMigxKSkgewpAQCAtMjI2Niw3ICsyNjkxLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGFwcGVuZFN0
b3JlKHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBlbmRTdG9y
ZShtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCkBAIC0yMjg3LDcgKzI3MTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBw
ZW5kU3RvcmUoQWlyOjpTdG9yZTgsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAg
ICAgICAgICBhcHBlbmRTdG9yZShtX3ZhbHVlLCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIzMDgsNyArMjczMyw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBlbmRTdG9yZShBaXI6OlN0b3JlMTYsIHZh
bHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBlbmRTdG9yZShtX3Zh
bHVlLCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKQEAgLTI0MTYsNyArMjg0MSwyMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBFcXVhbDoKLSAgICAgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgY2Fz
ZSBOb3RFcXVhbDogeworICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBBdG9taWNTdHJvbmdDQVMKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkKKyAgICAgICAgICAgICAgICAmJiBjYW5C
ZUludGVybmFsKG1fdmFsdWUtPmNoaWxkKDApKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCgh
bV9sb2NrZWQuY29udGFpbnMobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKSk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKCFtX2xvY2tlZC5jb250YWlucyhtX3ZhbHVlLT5jaGlsZCgxKSkpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKG1fdmFsdWUt
PmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRDQVMobV92YWx1ZS0+Y2hpbGQoMCks
IG1fdmFsdWUtPm9wY29kZSgpID09IE5vdEVxdWFsKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtX2luc3RzLmxh
c3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFyZShtX3ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIExlc3NUaGFuOgogICAgICAg
ICBjYXNlIEdyZWF0ZXJUaGFuOgogICAgICAgICBjYXNlIExlc3NFcXVhbDoKQEAgLTI3MjcsNiAr
MzE2NywzOSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsK
KyAgICAgICAgICAgIGlmIChjYW5CZUludGVybmFsKG1fdmFsdWUtPmNoaWxkKDApKSkgeworICAg
ICAgICAgICAgICAgIFZhbHVlKiBicmFuY2hDaGlsZCA9IG1fdmFsdWUtPmNoaWxkKDApOworICAg
ICAgICAgICAgICAgIHN3aXRjaCAoYnJhbmNoQ2hpbGQtPm9wY29kZSgpKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRl
cm5hbChicmFuY2hDaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENBUyhicmFuY2hD
aGlsZCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAgICAg
ICAgICAgICAgICAvLyBBIGJyYW5jaCBpcyBhIGNvbXBhcmlzb24gdG8gemVyby4KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGJyYW5jaENoaWxkLT5jaGlsZCgwKS0+aXNJbnQoMCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZENBUyhicmFuY2hDaGlsZCwgZmFsc2UpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIEVxdWFsOgorICAgICAgICAgICAgICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgICAgICAg
ICAgICAgIGlmIChicmFuY2hDaGlsZC0+Y2hpbGQoMCktPm9wY29kZSgpID09IEF0b21pY1N0cm9u
Z0NBUworICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbChicmFuY2hDaGls
ZC0+b3Bjb2RlKDApKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgYnJhbmNoQ2hpbGQtPmNo
aWxkKDApLT5jaGlsZCgwKSA9PSBicmFuY2hDaGlsZC0+Y2hpbGQoMSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkLT5jaGlsZCgwKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRDQVMoYnJhbmNoQ2hpbGQtPmNoaWxkKDApLCBicmFuY2hD
aGlsZC0+b3Bjb2RlKCkgPT0gTm90RXF1YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgbV9pbnN0
cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUJyYW5jaChtX3ZhbHVlLT5jaGlsZCgwKSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNzg0LDcgKzMyNTcsODEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGFwcGVuZChBaXI6OkVudHJ5U3dpdGNoKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoK
KyAgICAgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6IHsKKyAgICAgICAgICAgIGFwcGVuZENBUyht
X3ZhbHVlLCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6IHsKKyAgICAgICAgICAgIEF0b21pY1Zh
bHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlm
IChhcHBlbmRWb2lkQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljQWRkLCBhdG9taWMtPm9w
ZXJhdGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihhdG9taWMpOworICAgICAgICAgICAgQWly
OjpPcGNvZGUgb3Bjb2RlID0gT1BDT0RFX0ZPUl9XSURUSChBdG9taWNYY2hnQWRkLCBhdG9taWMt
Pm9wZXJhdGlvbldpZHRoKCkpOworICAgICAgICAgICAgaWYgKGlzVmFsaWRPcGNvZGUob3Bjb2Rl
LCBBcmc6OlRtcCwgYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1v
dmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCB0bXAoYXRv
bWljKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGF0b21pYyksIGFkZHJl
c3MpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEFkZCwgY2Fub25pY2FsV2lk
dGgoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAKKyAgICAgICAgY2FzZSBBdG9taWNYY2hnU3ViOiB7CisgICAgICAgICAgICBBdG9t
aWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAg
ICBpZiAoYXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY1N1YiwgYXRvbWlj
LT5vcGVyYXRpb25XaWR0aCgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoU3Vi
LCBjYW5vbmljYWxXaWR0aChhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hj
aGdBbmQ6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxB
dG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWljKE9QQ09ERV9G
T1JfV0lEVEgoQXRvbWljQW5kLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxB
dG9taWMoT1BDT0RFX0ZPUl9XSURUSChBbmQsIGNhbm9uaWNhbFdpZHRoKGF0b21pYy0+b3BlcmF0
aW9uV2lkdGgoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXRvbWljWGNoZ09yOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1
ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAo
YXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY09yLCBhdG9taWMtPm9wZXJh
dGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChPciwgY2Fub25p
Y2FsV2lkdGgoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOiB7
CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFs
dWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9SX1dJRFRI
KEF0b21pY1hvciwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWljKE9Q
Q09ERV9GT1JfV0lEVEgoWG9yLCBjYW5vbmljYWxXaWR0aChhdG9taWMtPm9wZXJhdGlvbldpZHRo
KCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEF0b21pY1hjaGc6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMg
PSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
QXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNv
ZGUgPSBPUENPREVfRk9SX1dJRFRIKEF0b21pY1hjaGcsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgo
KSk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZE9wY29kZShvcGNvZGUsIEFyZzo6VG1wLCBhZGRy
ZXNzKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWlj
LT50eXBlKCkpLCB0bXAoYXRvbWljLT5jaGlsZCgwKSksIHRtcChhdG9taWMpKTsKKyAgICAgICAg
ICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoYXRvbWljKSwgYWRkcmVzcyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBh
cHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoWG9yLCBjYW5vbmljYWxXaWR0aChh
dG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTI3OTIsNjQgKzMzMzksNyBAQCBwcml2YXRlOgogICAgICAgICBkYXRhTG9n
KCJGQVRBTDogY291bGQgbm90IGxvd2VyICIsIGRlZXBEdW1wKG1fcHJvY2VkdXJlLCBtX3ZhbHVl
KSwgIlxuIik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQot
Ci0gICAgdm9pZCBsb3dlclg4NkRpdihCMzo6T3Bjb2RlIG9wKQotICAgIHsKLSNpZiBDUFUoWDg2
KSB8fCBDUFUoWDg2XzY0KQotICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4
KTsKLSAgICAgICAgVG1wIGVkeCA9IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7Ci0KLSAgICAgICAg
QWlyOjpPcGNvZGUgY29udmVydFRvRG91YmxlV29yZDsKLSAgICAgICAgQWlyOjpPcGNvZGUgZGl2
OwotICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPnR5cGUoKSkgewotICAgICAgICBjYXNlIEludDMy
OgotICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb0RvdWJsZVdv
cmQzMjsKLSAgICAgICAgICAgIGRpdiA9IFg4NkRpdjMyOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2
Q29udmVydFRvUXVhZFdvcmQ2NDsKLSAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQVNTRVJUKG9wID09IERpdiB8fCBvcCA9PSBNb2QpOwotICAgICAgICBYODZSZWdpc3RlcnM6
OlJlZ2lzdGVySUQgcmVzdWx0ID0gb3AgPT0gRGl2ID8gWDg2UmVnaXN0ZXJzOjplYXggOiBYODZS
ZWdpc3RlcnM6OmVkeDsKLQotICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxk
KDApKSwgZWF4KTsKLSAgICAgICAgYXBwZW5kKGNvbnZlcnRUb0RvdWJsZVdvcmQsIGVheCwgZWR4
KTsKLSAgICAgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkp
OwotICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKHJlc3VsdCksIHRtcChtX3ZhbHVlKSk7Ci0KLSNl
bHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdm9pZCBsb3dlclg4NlVEaXYoQjM6Ok9w
Y29kZSBvcCkKLSAgICB7Ci0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKLSAgICAgICAgVG1w
IGVheCA9IFRtcChYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgICAgIFRtcCBlZHggPSBUbXAoWDg2
UmVnaXN0ZXJzOjplZHgpOwotCi0gICAgICAgIEFpcjo6T3Bjb2RlIGRpdiA9IG1fdmFsdWUtPnR5
cGUoKSA9PSBJbnQzMiA/IFg4NlVEaXYzMiA6IFg4NlVEaXY2NDsKLQotICAgICAgICBBU1NFUlQo
b3AgPT0gVURpdiB8fCBvcCA9PSBVTW9kKTsKLSAgICAgICAgWDg2UmVnaXN0ZXJzOjpSZWdpc3Rl
cklEIHJlc3VsdCA9IG9wID09IFVEaXYgPyBYODZSZWdpc3RlcnM6OmVheCA6IFg4NlJlZ2lzdGVy
czo6ZWR4OwotCi0gICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBl
YXgpOwotICAgICAgICBhcHBlbmQoWG9yNjQsIGVkeCwgZWR4KTsKLSAgICAgICAgYXBwZW5kKGRp
diwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkpOwotICAgICAgICBhcHBlbmQoTW92
ZSwgVG1wKHJlc3VsdCksIHRtcChtX3ZhbHVlKSk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFS
QU0ob3ApOwotICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSNlbmRpZgotICAg
IH0KLQorICAgIAogICAgIEluZGV4U2V0PFZhbHVlPiBtX2xvY2tlZDsgLy8gVGhlc2UgYXJlIHZh
bHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgogICAgIEluZGV4TWFwPFZhbHVlLCBU
bXA+IG1fdmFsdWVUb1RtcDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRt
cCBpbiBBaXIuIFdlIHNheSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBp
bm5lZCIuCiAgICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV9waGlUb1RtcDsgLy8gRWFjaCBQaGkg
Z2V0cyBpdHMgb3duIFRtcC4KQEAgLTI4NjQsNyArMzM1NCw3IEBAIHByaXZhdGU6CiAKICAgICBW
ZWN0b3I8VmVjdG9yPEluc3QsIDQ+PiBtX2luc3RzOwogICAgIFZlY3RvcjxJbnN0PiBtX3Byb2xv
Z3VlOwotCisgICAgCiAgICAgQjM6OkJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgYm9vbCBtX2lz
UmFyZTsKICAgICB1bnNpZ25lZCBtX2luZGV4OwpAQCAtMjg3NSw2ICszMzY1LDEyIEBAIHByaXZh
dGU6CiAKICAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOwogICAgIENvZGUmIG1fY29kZTsKKwor
ICAgIEFpcjo6QmxvY2tJbnNlcnRpb25TZXQgbV9ibG9ja0luc2VydGlvblNldDsKKworICAgIFRt
cCBtX2VheDsKKyAgICBUbXAgbV9lY3g7CisgICAgVG1wIG1fZWR4OwogfTsKIAogfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5
VmFsdWUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNNZW1vcnlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDMwICszNCw0OCBAQCBNZW1v
cnlWYWx1ZTo6fk1lbW9yeVZhbHVlKCkKIHsKIH0KIAorVHlwZSBNZW1vcnlWYWx1ZTo6YWNjZXNz
VHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZChvcGNvZGUoKSkpCisgICAgICAgIHJldHVy
biB0eXBlKCk7CisgICAgLy8gVGhpcyBoYXBwZW5zIHRvIHdvcmsgZm9yIGF0b21pY3MsIHRvby4g
VGhhdCdzIHdoeSBBdG9taWNWYWx1ZSBkb2VzIG5vdCBuZWVkIHRvIG92ZXJyaWRlIHRoaXMuCisg
ICAgcmV0dXJuIGNoaWxkKDApLT50eXBlKCk7Cit9CisKK0JhbmsgTWVtb3J5VmFsdWU6OmFjY2Vz
c0JhbmsoKSBjb25zdAoreworICAgIHJldHVybiBiYW5rRm9yVHlwZShhY2Nlc3NUeXBlKCkpOwor
fQorCiBzaXplX3QgTWVtb3J5VmFsdWU6OmFjY2Vzc0J5dGVTaXplKCkgY29uc3QKIHsKKyAgICBy
ZXR1cm4gYnl0ZXMoYWNjZXNzV2lkdGgoKSk7Cit9CisKK1dpZHRoIE1lbW9yeVZhbHVlOjpsb2Fk
U3RvcmVXaWR0aCgpIGNvbnN0Cit7CiAgICAgc3dpdGNoIChvcGNvZGUoKSkgewogICAgIGNhc2Ug
TG9hZDhaOgogICAgIGNhc2UgTG9hZDhTOgogICAgIGNhc2UgU3RvcmU4OgotICAgICAgICByZXR1
cm4gMTsKKyAgICAgICAgcmV0dXJuIFdpZHRoODsKICAgICBjYXNlIExvYWQxNlo6CiAgICAgY2Fz
ZSBMb2FkMTZTOgogICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgcmV0dXJuIDI7CisgICAgICAg
IHJldHVybiBXaWR0aDE2OwogICAgIGNhc2UgTG9hZDoKLSAgICAgICAgcmV0dXJuIHNpemVvZlR5
cGUodHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlwZSh0eXBlKCkpOwogICAgIGNh
c2UgU3RvcmU6Ci0gICAgICAgIHJldHVybiBzaXplb2ZUeXBlKGNoaWxkKDApLT50eXBlKCkpOwor
ICAgICAgICByZXR1cm4gd2lkdGhGb3JUeXBlKGNoaWxkKDApLT50eXBlKCkpOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gV2lkdGg4OwogICAgIH0KIH0KIAogV2lkdGggTWVtb3J5VmFs
dWU6OmFjY2Vzc1dpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gd2lkdGhGb3JCeXRlcyhhY2Nl
c3NCeXRlU2l6ZSgpKTsKKyAgICByZXR1cm4gbG9hZFN0b3JlV2lkdGgoKTsKIH0KIAogdm9pZCBN
ZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKQEAgLTY3LDYgKzg1LDggQEAgdm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoQ29t
bWFQcmludGVyJgogICAgIGlmICgoaXNMb2FkKCkgJiYgZWZmZWN0cygpLnJlYWRzICE9IHJhbmdl
KCkpCiAgICAgICAgIHx8IChpc1N0b3JlKCkgJiYgZWZmZWN0cygpLndyaXRlcyAhPSByYW5nZSgp
KSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAicmFuZ2UgPSAiLCByYW5nZSgpKTsKKyAgICBp
ZiAocGhhbnRvbVJhbmdlKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgInBoYW50b21SYW5n
ZSA9ICIsIHBoYW50b21SYW5nZSgpKTsKIH0KIAogVmFsdWUqIE1lbW9yeVZhbHVlOjpjbG9uZUlt
cGwoKSBjb25zdApAQCAtNzQsNiArOTQsNTggQEAgVmFsdWUqIE1lbW9yeVZhbHVlOjpjbG9uZUlt
cGwoKSBjb25zdAogICAgIHJldHVybiBuZXcgTWVtb3J5VmFsdWUoKnRoaXMpOwogfQogCisvLyBV
c2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2Yg
dGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisvLyBkZXNjcmliZXMgdGhlIHJldHVy
bmVkIHR5cGUpLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAg
IDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAg
ICwgbV9vZmZzZXQob2Zmc2V0KQoreworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAg
ICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgor
ICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAg
IEFTU0VSVCh0eXBlID09IEludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFN0b3JlODoKKyAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlOgorICAg
ICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVm9pZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfQorfQorCisvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJu
IHR5cGUgaXMgaW1wbGllZC4KK01lbW9yeVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgOiBN
ZW1vcnlWYWx1ZShraW5kLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpCit7CisgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7
CisgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2Fz
ZSBMb2FkMTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgfQorfQorCisvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCitNZW1vcnlWYWx1
ZTo6TWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZh
bHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgOiBWYWx1ZShDaGVja2VkT3Bj
b2RlLCBraW5kLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICwgbV9vZmZzZXQo
b2Zmc2V0KQoreworICAgIEFTU0VSVChpc1N0b3JlKGtpbmQub3Bjb2RlKCkpKTsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw0OCArMjcsMTcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRl
ICJCM0JhbmsuaCIKICNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgogI2luY2x1ZGUgIkIzVmFsdWUu
aCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKLS8vIEZJWE1FOiBXZSB3YW50
IHRvIGFsbG93IGZlbmNlZCBtZW1vcnkgYWNjZXNzZXMgb24gQVJNLgotLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjM0OQotCiBjbGFzcyBKU19FWFBPUlRfUFJJ
VkFURSBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhLaW5kIGtpbmQpCiAgICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2Rl
KCkpIHsKLSAgICAgICAgY2FzZSBMb2FkOFo6Ci0gICAgICAgIGNhc2UgTG9hZDhTOgotICAgICAg
ICBjYXNlIExvYWQxNlo6Ci0gICAgICAgIGNhc2UgTG9hZDE2UzoKLSAgICAgICAgY2FzZSBMb2Fk
OgotICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICBj
YXNlIFN0b3JlOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMg
Ym9vbCBpc1N0b3JlKEtpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZC5vcGNv
ZGUoKSkgewotICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgY2FzZSBTdG9yZTE2OgotICAg
ICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBz
dGF0aWMgYm9vbCBpc0xvYWQoS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFjY2Vw
dHMoa2luZCkgJiYgIWlzU3RvcmUoa2luZCk7CisgICAgICAgIHJldHVybiBpc01lbW9yeShraW5k
Lm9wY29kZSgpKTsKICAgICB9CiAKICAgICB+TWVtb3J5VmFsdWUoKTsKQEAgLTc4LDc2ICs0Nyw1
NiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKCkgY29uc3QgeyByZXR1
cm4gbV9yYW5nZTsgfQogICAgIHZvaWQgc2V0UmFuZ2UoY29uc3QgSGVhcFJhbmdlJiByYW5nZSkg
eyBtX3JhbmdlID0gcmFuZ2U7IH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGFuIGFsaWFzIGZvciBy
YW5nZS4KKyAgICBjb25zdCBIZWFwUmFuZ2UmIGFjY2Vzc1JhbmdlKCkgY29uc3QgeyByZXR1cm4g
cmFuZ2UoKTsgfQorICAgIHZvaWQgc2V0QWNjZXNzUmFuZ2UoY29uc3QgSGVhcFJhbmdlJiByYW5n
ZSkgeyBzZXRSYW5nZShyYW5nZSk7IH0KKyAgICAKKyAgICBjb25zdCBIZWFwUmFuZ2UmIGZlbmNl
UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2ZlbmNlUmFuZ2U7IH0KKyAgICB2b2lkIHNldEZlbmNl
UmFuZ2UoY29uc3QgSGVhcFJhbmdlJiByYW5nZSkgeyBtX2ZlbmNlUmFuZ2UgPSByYW5nZTsgfQor
CisgICAgYm9vbCBpc1N0b3JlKCkgY29uc3QgeyByZXR1cm4gaXNTdG9yZShvcGNvZGUoKSk7IH0K
KyAgICBib29sIGlzTG9hZCgpIGNvbnN0IHsgcmV0dXJuIGlzTG9hZChvcGNvZGUoKSk7IH0KIAot
ICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBWb2lkOyB9Ci0gICAg
Ym9vbCBpc0xvYWQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgIT0gVm9pZDsgfQorICAgIGJvb2wg
aGFzRmVuY2UoKSBjb25zdCB7IHJldHVybiAhIWZlbmNlUmFuZ2UoKTsgfQogCisgICAgVHlwZSBh
Y2Nlc3NUeXBlKCkgY29uc3Q7CisgICAgQmFuayBhY2Nlc3NCYW5rKCkgY29uc3Q7CiAgICAgc2l6
ZV90IGFjY2Vzc0J5dGVTaXplKCkgY29uc3Q7Ci0gICAgV2lkdGggYWNjZXNzV2lkdGgoKSBjb25z
dDsKKyAgICAKKyAgICAvLyBTbGlnaHRseSBmYXN0ZXIgdmVyc2lvbiBvZiBhY2Nlc3NXaWR0aCwg
aWYgeW91IGtub3cgdGhhdCB5b3UncmUgd29ya2luZyB3aXRoIGEgbG9hZCBvciBzdG9yZS4KKyAg
ICBXaWR0aCBsb2FkU3RvcmVXaWR0aCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgV2lkdGgg
YWNjZXNzV2lkdGgoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZHVtcE1ldGEoQ29t
bWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBWYWx1ZSogY2xvbmVJbXBsKCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKLQotICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQg
KGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEg
c3VmZml4IHRoYXQKLSAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgotICAgIE1l
bW9yeVZhbHVlKEtpbmQga2luZCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9p
bnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUs
IGtpbmQsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgS2luZCBr
aW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGludDMyX3Qgb2Zmc2V0LCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUs
IG9yaWdpbiwgYXJndW1lbnRzLi4uKQogICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICAg
ICAgLCBtX3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCiAgICAgewotICAgICAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkgewotICAgICAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAg
ICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIExvYWQ4WjoKLSAgICAgICAgICAgIGNhc2UgTG9hZDhTOgotICAgICAgICAgICAgY2FzZSBM
b2FkMTZaOgotICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgotICAgICAgICAgICAgICAgIEFTU0VS
VCh0eXBlID09IEludDMyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgU3RvcmU4OgotICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICAgICAgY2FzZSBT
dG9yZToKLSAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBWb2lkKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICB9CisgICAgCisg
ICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3Ig
YW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorICAgIC8vIGRlc2NyaWJl
cyB0aGUgcmV0dXJuZWQgdHlwZSkuCisgICAgTWVtb3J5VmFsdWUoS2luZCwgVHlwZSwgT3JpZ2lu
LCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKTsKIAogICAgIC8vIFVzZSB0aGlz
IGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgotICAgIE1l
bW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMy
X3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAgOiBNZW1vcnlWYWx1ZShraW5kLCBJbnQzMiwgb3JpZ2lu
LCBwb2ludGVyLCBvZmZzZXQpCi0gICAgewotICAgIH0KKyAgICBNZW1vcnlWYWx1ZShLaW5kLCBP
cmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOwogCiAgICAgLy8gVXNl
IHRoaXMgZm9ybSBmb3Igc3RvcmVzLgotICAgIE1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAw
KQotICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIFZvaWQsIG9yaWdpbiwgdmFs
dWUsIHBvaW50ZXIpCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAsIG1fcmFu
Z2UoSGVhcFJhbmdlOjp0b3AoKSkKLSAgICB7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVE
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgU3RvcmU4OgotICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICAgICAgY2FzZSBT
dG9yZToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KKyAgICBNZW1vcnlWYWx1ZShLaW5k
LCBPcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0g
MCk7CisgICAgCiAgICAgaW50MzJfdCBtX29mZnNldCB7IDAgfTsKLSAgICBIZWFwUmFuZ2UgbV9y
YW5nZTsKKyAgICBIZWFwUmFuZ2UgbV9yYW5nZSB7IEhlYXBSYW5nZTo6dG9wKCkgfTsKKyAgICBI
ZWFwUmFuZ2UgbV9mZW5jZVJhbmdlIHsgSGVhcFJhbmdlKCkgfTsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlz
aW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNs
dWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlICJCM1dpZHRoLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC04Miw3ICs4Myw2IEBA
IGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgTW9kLCAvLyBBbGwgYmV0cyBhcmUgb2ZmIGFz
IHRvIHdoYXQgd2lsbCBoYXBwZW4gd2hlbiB5b3UgZXhlY3V0ZSB0aGlzIGZvciAtMl4zMSUtMSBh
bmQgeCUwLgogICAgIFVNb2QsCiAKLQogICAgIC8vIFBvbHltb3JwaGljIG5lZ2F0aW9uLiBOb3Rl
IHRoYXQgd2Ugb25seSBuZWVkIHRoaXMgZm9yIGZsb2F0aW5nIHBvaW50LCBzaW5jZSBpbnRlZ2Vy
IG5lZ2F0aW9uCiAgICAgLy8gaXMgZXhhY3RseSBsaWtlIFN1YigwLCB4KS4gQnV0IHRoYXQncyBu
b3QgdHJ1ZSBmb3IgZmxvYXRpbmcgcG9pbnQuIFN1YigwLCAwKSBpcyAwLCB3aGlsZQogICAgIC8v
IE5lZygwKSBpcyAtMC4gQWxzbywgd2UgY2Fub25pY2FsaXplIFN1YigwLCB4KSBpbnRvIE5lZyh4
KSBpbiBjYXNlIG9mIGludGVnZXJzLgpAQCAtMTYyLDYgKzE2MiwxMDcgQEAgZW51bSBPcGNvZGUg
OiBpbnQxNl90IHsKICAgICBTdG9yZTE2LAogICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBz
dG9yZSBmb3IgSW50MzIsIEludDY0LCBGbG9hdCwgYW5kIERvdWJsZS4KICAgICBTdG9yZSwKKyAg
ICAKKyAgICAvLyBBdG9taWMgY29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgYSBib29sZWFu
LiBNYXkgY2hvb3NlIHRvIGRvIG5vdGhpbmcgYW5kIHJldHVybiBmYWxzZS4gWW91IGNhbgorICAg
IC8vIHVzdWFsbHkgYXNzdW1lIHRoYXQgdGhpcyBpcyBmYXN0ZXIgYW5kIHJlc3VsdHMgaW4gbGVz
cyBjb2RlIHRoYW4gQXRvbWljU3Ryb25nQ0FTLCB0aG91Z2ggdGhhdCdzCisgICAgLy8gbm90IG5l
Y2Vzc2FyaWx5IHRydWUgb24gSW50ZWwsIGlmIGluc3RydWN0aW9uIHNlbGVjdGlvbiBkb2VzIGl0
cyBqb2IuIEltYWdpbmUgdGhhdCB0aGlzIG9wY29kZSBpcworICAgIC8vIGFzIGlmIHlvdSBkaWQg
dGhpcyBhdG9taWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICAvLyBib29sIEF0b21pY1dlYWtDQVMoVCBleHBlY3RlZFZhbHVlLCBUIG5ld1ZhbHVlLCBUKiBw
dHIpCisgICAgLy8geworICAgIC8vICAgICBpZiAoIXJhbmQoKSkKKyAgICAvLyAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gUmVhbCB3b3JsZCBleGFtcGxlIG9mIHRoaXM6IGNvbnRleHQgc3dpdGNo
IG9uIEFSTSB3aGlsZSBkb2luZyBDQVMuCisgICAgLy8gICAgIGlmICgqcHRyICE9IGV4cGVjdGVk
VmFsdWUpCisgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gICAgICpwdHIgPSBu
ZXdWYWx1ZTsKKyAgICAvLyAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gfQorICAgIC8vCisgICAg
Ly8gTm90ZSB0aGF0IGFsbCBhdG9taWNzIHB1dCB0aGUgcG9pbnRlciBsYXN0IHRvIGJlIGNvbnNp
c3RlbnQgd2l0aCBob3cgbG9hZHMgYW5kIHN0b3JlcyB3b3JrLiBUaGlzCisgICAgLy8gaXMgYSBn
b29meSB0cmFkaXRpb24sIGJ1dCBpdCdzIGhhcm1sZXNzLCBhbmQgYmV0dGVyIHRoYW4gYmVpbmcg
aW5jb25zaXN0ZW50LgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHdlYWsgQ0FTIGhhcyBubyBm
ZW5jaW5nIGd1YXJhbnRlZXMgd2hlbiBpdCBmYWlscy4gVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xs
b3dpbmcKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbiBpcyBhbHdheXMgdmFsaWQ6CisgICAgLy8KKyAg
ICAvLyBCZWZvcmU6CisgICAgLy8KKyAgICAvLyAgICAgICAgIEJyYW5jaChBdG9taWNXZWFrQ0FT
KGV4cGVjdGVkLCBuZXcsIHB0cikpCisgICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhlbjojc3Vj
Y2VzcywgRWxzZTojZmFpbAorICAgIC8vCisgICAgLy8gQWZ0ZXI6CisgICAgLy8KKyAgICAvLyAg
ICAgICAgIEJyYW5jaChFcXVhbChMb2FkKHB0ciksIGV4cGVjdGVkKSkKKyAgICAvLyAgICAgICBT
dWNjZXNzb3JzOiBUaGVuOiNhdHRlbXB0LCBFbHNlOiNmYWlsCisgICAgLy8gICAgIEJCI2F0dGVt
cHQ6CisgICAgLy8gICAgICAgICBCcmFuY2goQXRvbWljV2Vha0NBUyhleHBlY3RlZCwgbmV3LCBw
dHIpKQorICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I3N1Y2Nlc3MsIEVsc2U6I2ZhaWwK
KyAgICAvLworICAgIC8vIEJvdGgga2luZHMgb2YgQ0FTIGZvciBub24tY2Fub25pY2FsIHdpZHRo
cyAoV2lkdGg4IGFuZCBXaWR0aDE2KSBpZ25vcmUgdGhlIGlycmVsZXZhbnQgYml0cyBvZiB0aGUK
KyAgICAvLyBpbnB1dC4KKyAgICBBdG9taWNXZWFrQ0FTLAorICAgIAorICAgIC8vIEF0b21pYyBj
b21wYXJlIGFuZCBzd2FwIHRoYXQgcmV0dXJucyB0aGUgb2xkIHZhbHVlLiBEb2VzIG5vdCBoYXZl
IHRoZSBub25kZXRlcm1pbmlzbSBvZiBXZWFrQ0FTLgorICAgIC8vIFRoaXMgaXMgYSBiaXQgbW9y
ZSBjb2RlIGFuZCBhIGJpdCBzbG93ZXIgaW4gc29tZSBjYXNlcywgdGhvdWdoIG5vdCBieSBhIGxv
dC4gSW1hZ2luZSB0aGF0IHRoaXMKKyAgICAvLyBvcGNvZGUgaXMgYXMgaWYgeW91IGRpZCB0aGlz
IGF0b21pY2FsbHk6CisgICAgLy8KKyAgICAvLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIC8v
IFQgQXRvbWljU3Ryb25nQ0FTKFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSwgVCogcHRyKQor
ICAgIC8vIHsKKyAgICAvLyAgICAgVCBvbGRWYWx1ZSA9ICpwdHI7CisgICAgLy8gICAgIGlmIChv
bGRWYWx1ZSA9PSBleHBlY3RlZFZhbHVlKQorICAgIC8vICAgICAgICAgKnB0ciA9IG5ld1ZhbHVl
OworICAgIC8vICAgICByZXR1cm4gb2xkVmFsdWUKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBO
b3RlIHRoYXQgQXRvbWljV2Vha0NBUyBhbmQgQXRvbWljU3Ryb25nQ0FTIHNvcnQgb2YgaGF2ZSB0
aGlzIGtpbmQgb2YgZXF1aXZhbGVuY2U6CisgICAgLy8KKyAgICAvLyBBdG9taWNXZWFrQ0FTKEBl
eHAsIEBuZXcsIEBwdHIpID09IEVxdWFsKEF0b21pY1N0cm9uZ0NBUyhAZXhwLCBAbmV3LCBAcHRy
KSwgQGV4cCkKKyAgICAvLworICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhlIFdlYWtDQVMgZG9lcyBu
b3Qgc3B1cmlvdXNseSBmYWlsLCBvZiBjb3Vyc2UuCisgICAgQXRvbWljU3Ryb25nQ0FTLAorICAg
IAorICAgIC8vIEF0b21pY2FsbHkgX19fIGEgbWVtb3J5IGxvY2F0aW9uIGFuZCByZXR1cm4gdGhl
IG9sZCB2YWx1ZS4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQG9sZFZhbHVlID0gQXRvbWljWGNo
Z19fXyhAb3BlcmFuZCwgQHB0cikKKyAgICAvLworICAgIC8vIEZvciBub24tY2Fub25pY2FsIHdp
ZHRocyAoV2lkdGg4IGFuZCBXaWR0aDE2KSwgdGhlc2UgcmV0dXJuIHNpZ24tZXh0ZW5kZWQgcmVz
dWx0cyBhbmQgaWdub3JlIHRoZQorICAgIC8vIGlycmVsZXZhbnQgYml0cyBvZiB0aGVpciBpbnB1
dHMuCisgICAgQXRvbWljWGNoZ0FkZCwKKyAgICBBdG9taWNYY2hnQW5kLAorICAgIEF0b21pY1hj
aGdPciwKKyAgICBBdG9taWNYY2hnU3ViLAorICAgIEF0b21pY1hjaGdYb3IsCisgICAgCisgICAg
Ly8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBoYXZlIEF0b21pY1hjaGdOZWcgYW5kIEF0b21pY1hj
aGdOb3QuCisgICAgCisgICAgLy8gQXRvbWljYWxseSBleGNoYW5nZSBhIHZhbHVlIHdpdGggYSBt
ZW1vcnkgbG9jYXRpb24uIFN5bnRheDoKKyAgICAvLworICAgIC8vIEBvbGRWYWx1ZSA9IEF0b21p
Y1hjaGcoQG5ld1ZhbHVlLCBAcHRyKQorICAgIEF0b21pY1hjaGcsCisgICAgCisgICAgLy8gSW50
cm9kdWNlIGFuIGludmlzaWJsZSBkZXBlbmRlbmN5IGZvciBibG9ja2luZyBtb3Rpb24gb2YgbG9h
ZHMgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3RoZXIuIFN5bnRheDoKKyAgICAvLworICAgIC8vIEBy
ZXN1bHQgPSBEZXBlbmQoQHBoYW50b20pCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIGV2ZW50dWFs
bHkgY29kZWdlbmVyYXRlZCB0byBoYXZlIGxvY2FsIHNlbWFudGljcyBhcyBpZiB3ZSBkaWQ6Cisg
ICAgLy8KKyAgICAvLyBAcmVzdWx0ID0gJDAKKyAgICAvLworICAgIC8vIEJ1dCBpdCBlbnN1cmVz
IHRoYXQgdGhlIHVzZXJzIG9mIEByZXN1bHQgY2Fubm90IGV4ZWN1dGUgdW50aWwgQHBoYW50b20g
aXMgY29tcHV0ZWQuCisgICAgLy8KKyAgICAvLyBUaGUgY29tcGlsZXIgaXMgbm90IGFsbG93ZWQg
dG8gcmVhc29uIGFib3V0IHRoZSBmYWN0IHRoYXQgRGVwZW5kIGNvZGVnZW5lcmF0ZXMgdGhpcyB3
YXkuIEFueSBraW5kCisgICAgLy8gb2YgdHJhbnNmb3JtYXRpb24gb3IgYW5hbHlzaXMgdGhhdCBy
ZWxpZXMgb24gdGhlIGluc2lnaHQgdGhhdCBEZXBlbmQgaXMgcmVhbGx5IHplcm8gaXMgdW5zb3Vu
ZCwKKyAgICAvLyBiZWNhdXNlIGl0IHVubG9ja3MgcmVvcmRlcmluZyBvZiB1c2VycyBvZiBAcmVz
dWx0IGFuZCBAcGhhbnRvbS4KKyAgICAvLworICAgIC8vIE9uIFg4NiwgdGhpcyBpcyBsb3dlcmVk
IHRvIGEgbG9hZC1sb2FkIGZlbmNlIGFuZCBAcmVzdWx0IHVzZXMgQHBoYW50b20gZGlyZWN0bHku
CisgICAgLy8KKyAgICAvLyBPbiBBUk0sIHRoaXMgaXMgbG93ZXJlZCBhcyBpZiBsaWtlOgorICAg
IC8vCisgICAgLy8gQHJlc3VsdCA9IEJpdFhvcihAcGhhbnRvbSwgQHBoYW50b20pCisgICAgLy8K
KyAgICAvLyBFeGNlcHQgdGhhdCB0aGUgY29tcGlsZXIgbmV2ZXIgZ2V0cyBhbiBvcHBvcnR1bml0
eSB0byBzaW1wbGlmeSBvdXQgdGhlIEJpdFhvci4KKyAgICBEZXBlbmQsCiAKICAgICAvLyBUaGlz
IGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsIGFkZHJlc3Mgb2YgYSBXYXNtIG1lbW9yeSBv
cGVyYXRpb24uIEl0IHRha2VzIGFuIEludFB0cgogICAgIC8vIGFuZCBhIHBpbm5lZCByZWdpc3Rl
ciB0aGVuIGNvbXB1dGVzIHRoZSBhcHByb3ByaWF0ZSBJbnRQdHIgYWRkcmVzcy4gRm9yIHRoZSB1
c2UtY2FzZSBvZgpAQCAtMzAxLDYgKzQwMiwxMTAgQEAgaW5saW5lIGJvb2wgaXNEZWZpbml0ZWx5
VGVybWluYWwoT3Bjb2RlIAogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgaXNMb2FkKE9wY29kZSBv
cGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICBj
YXNlIExvYWQ4UzoKKyAgICBjYXNlIExvYWQxNlo6CisgICAgY2FzZSBMb2FkMTZTOgorICAgIGNh
c2UgTG9hZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNTdG9yZShPcGNvZGUgb3Bjb2Rl
KQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBTdG9yZTg6CisgICAgY2FzZSBT
dG9yZTE2OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzTG9h
ZFN0b3JlKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNl
IExvYWQ4WjoKKyAgICBjYXNlIExvYWQ4UzoKKyAgICBjYXNlIExvYWQxNlo6CisgICAgY2FzZSBM
b2FkMTZTOgorICAgIGNhc2UgTG9hZDoKKyAgICBjYXNlIFN0b3JlODoKKyAgICBjYXNlIFN0b3Jl
MTY6CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNBdG9taWMo
T3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgQXRvbWlj
V2Vha0NBUzoKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICBjYXNlIEF0b21pY1hjaGdB
ZGQ6CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAg
IGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBB
dG9taWNYY2hnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0F0b21pY0NBUyhPcGNvZGUg
b3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBBdG9taWNXZWFrQ0FT
OgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBp
c0F0b21pY1hjaGcoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAg
IGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBB
dG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNo
Z1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlz
TWVtb3J5QWNjZXNzKE9wY29kZSBvcGNvZGUpCit7CisgICAgcmV0dXJuIGlzQXRvbWljKG9wY29k
ZSkgfHwgaXNMb2FkU3RvcmUob3Bjb2RlKTsKK30KKworaW5saW5lIE9wY29kZSBzaWduRXh0ZW5k
T3Bjb2RlKFdpZHRoIHdpZHRoKQoreworICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICBjYXNlIFdp
ZHRoODoKKyAgICAgICAgcmV0dXJuIFNFeHQ4OworICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAg
cmV0dXJuIFNFeHQxNjsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gT29wczsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDYgKzIw
Miw4IEBAIHZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKICAgICAgICAg
fQogICAgICAgICBkYXRhTG9nKCIgICAgIiwgZGVlcER1bXAoKnRoaXMsIHZhbHVlKSwgIlxuIik7
CiAgICAgfQorICAgIGlmIChoYXNRdWlya3MoKSkKKyAgICAgICAgb3V0LnByaW50KCJIYXMgUXVp
cmtzOiBUcnVlXG4iKTsKICAgICBpZiAodmFyaWFibGVzKCkuc2l6ZSgpKSB7CiAgICAgICAgIG91
dC5wcmludCgiVmFyaWFibGVzOlxuIik7CiAgICAgICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxl
IDogdmFyaWFibGVzKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
aAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgVmFs
dWUqIGFkZEludENvbnN0YW50KE9yaWdpbiwgVHlwZSwgaW50NjRfdCB2YWx1ZSk7CiAgICAgVmFs
dWUqIGFkZEludENvbnN0YW50KFZhbHVlKiwgaW50NjRfdCB2YWx1ZSk7CiAKKyAgICAvLyBZb3Un
cmUgZ3VhcmFudGVlZCB0aGF0IGJvdHRvbSBpcyB6ZXJvLgogICAgIFZhbHVlKiBhZGRCb3R0b20o
T3JpZ2luLCBUeXBlKTsKICAgICBWYWx1ZSogYWRkQm90dG9tKFZhbHVlKik7CiAKQEAgLTE5NSw2
ICsxOTYsMTIgQEAgcHVibGljOgogICAgIC8vIGFsaXZlLiBHcmVhdCBmb3IgY29tcGlsZXItZ2Vu
ZXJhdGVkIGRhdGEgc2VjdGlvbnMsIGxpa2Ugc3dpdGNoIGp1bXAgdGFibGVzIGFuZCBjb25zdGFu
dCBwb29scy4KICAgICAvLyBUaGlzIHJldHVybnMgbWVtb3J5IHRoYXQgaGFzIGJlZW4gemVyby1p
bml0aWFsaXplZC4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhZGREYXRhU2VjdGlvbihz
aXplX3QpOworICAgIAorICAgIC8vIFNvbWUgb3BlcmF0aW9ucyBhcmUgc3BlY2lmaWVkIGluIEIz
IElSIHRvIGJlaGF2ZSBvbmUgd2F5IGJ1dCBvbiB0aGlzIGdpdmVuIENQVSB0aGV5IGJlaGF2ZSBh
CisgICAgLy8gZGlmZmVyZW50IHdheS4gV2hlbiB0cnVlLCB0aG9zZSBCMyBJUiBvcHMgc3dpdGNo
IHRvIGJlaGF2aW5nIHRoZSBDUFUgd2F5LCBhbmQgdGhlIG9wdGltaXplciBtYXkKKyAgICAvLyBz
dGFydCB0YWtpbmcgYWR2YW50YWdlIG9mIGl0LgorICAgIGJvb2wgaGFzUXVpcmtzKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNRdWlya3M7IH0KKyAgICB2b2lkIHNldEhhc1F1aXJrcyhib29sIHZhbHVl
KSB7IG1faGFzUXVpcmtzID0gdmFsdWU7IH0KIAogICAgIE9wYXF1ZUJ5cHJvZHVjdHMmIGJ5cHJv
ZHVjdHMoKSB7IHJldHVybiAqbV9ieXByb2R1Y3RzOyB9CiAKQEAgLTI1Miw2ICsyNTksNyBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoUHJpbnRTdHJlYW0mLCBPcmlnaW4p
Pj4gbV9vcmlnaW5QcmludGVyOwogICAgIGNvbnN0IHZvaWQqIG1fZnJvbnRlbmREYXRhOwogICAg
IFBDVG9PcmlnaW5NYXAgbV9wY1RvT3JpZ2luTWFwOworICAgIGJvb2wgbV9oYXNRdWlya3MgeyBm
YWxzZSB9OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwMiw3ICs2MDIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBicmVhazsKLQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmVnOgogICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBOZWcoY29uc3RhbnQpCiAgICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IC1jb25zdGFudApAQCAtMTI5NSw2ICsxMjk1LDE2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQ4KEF0b21pY1hjaGdfX18pCisgICAgICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBBdG9taWNYY2hnX19fCisgICAgICAgICAgICAgICAgaWYgKGlz
QXRvbWljWGNoZyhtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpCisgICAgICAgICAgICAgICAg
ICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5hczxBdG9taWNWYWx1ZT4oKS0+b3BlcmF0aW9uV2lk
dGgoKSA9PSBXaWR0aDgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0
eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGNhc2UgU0V4dDE2OgpAQCAtMTM0Myw2ICsxMzUzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IFNFeHQxNihBdG9taWNYY2hnX19fKQorICAgICAgICAgICAgICAgIC8vIEludG8g
dGhpczogQXRvbWljWGNoZ19fXworICAgICAgICAgICAgICAgIGlmIChpc0F0b21pY1hjaGcobV92
YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVl
LT5jaGlsZCgwKS0+YXM8QXRvbWljVmFsdWU+KCktPm9wZXJhdGlvbldpZHRoKCkgPT0gV2lkdGgx
NikgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNo
aWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTRXh0MzI6
CkBAIC0yMTAxLDIyICsyMTIxLDI1IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChtX3ZhbHVl
LT5udW1DaGlsZHJlbigpID49IDIpOwogICAgICAgICAKICAgICAgICAgLy8gTGVhdmUgaXQgYWxv
bmUgaWYgdGhlIHJpZ2h0IGNoaWxkIGlzIGEgY29uc3RhbnQuCi0gICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgxKS0+aXNDb25zdGFudCgpKQorICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSkt
PmlzQ29uc3RhbnQoKQorICAgICAgICAgICAgfHwgbV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgp
ID09IEF0b21pY1N0cm9uZ0NBUykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNDb25zdGFudCgpKSB7CisgICAgICAgIGF1dG8g
c3dhcCA9IFsmXSAoKSB7CiAgICAgICAgICAgICBzdGQ6OnN3YXAobV92YWx1ZS0+Y2hpbGQoMCks
IG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQorICAgICAgICB9OworICAgICAgICAKKyAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1
cm4gc3dhcCgpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNv
ZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMpCisgICAgICAgICAgICByZXR1cm4gc3dhcCgpOworICAg
ICAgICAKICAgICAgICAgLy8gU29ydCB0aGUgb3BlcmFuZHMuIFRoaXMgaXMgYW4gaW1wb3J0YW50
IGNhbm9uaWNhbGl6YXRpb24uIFdlIHVzZSB0aGUgaW5kZXggaW5zdGVhZCBvZgogICAgICAgICAv
LyB0aGUgYWRkcmVzcyB0byBtYWtlIHRoaXMgYXQgbGVhc3Qgc2xpZ2h0bHkgZGV0ZXJtaW5pc3Rp
Yy4KLSAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pbmRleCgpID4gbV92YWx1ZS0+Y2hp
bGQoMSktPmluZGV4KCkpIHsKLSAgICAgICAgICAgIHN0ZDo6c3dhcChtX3ZhbHVlLT5jaGlsZCgw
KSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MCktPmluZGV4KCkgPiBtX3ZhbHVlLT5jaGlsZCgxKS0+aW5kZXgoKSkKKyAgICAgICAgICAgIHJl
dHVybiBzd2FwKCk7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBi
ZSBhIGZvcndhcmQgYW5hbHlzaXMuIEluc3RlYWQsIHdlIHVzZXMgYSBib3VuZGVkLXNlYXJjaCBi
YWNrd2FyZHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDYgKzM0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHBv
aW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNj
ZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTG9h
ZDoKQEAgLTM1Myw2ICszNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAo
IkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkg
IT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNl
KHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU3RvcmU4OgpAQCAtMzYyLDYg
KzM2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQo
MCktPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIs
ICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9p
ZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVl
KTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU3RvcmU6CkBAIC0zNjksOCArMzcyLDQ5
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4o
KSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVl
LT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2
YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAg
ICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgICAgIFZBTElE
QVRFKCF2YWx1ZS0+a2luZCgpLmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAzLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCkt
PnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIp
LT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFj
a0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQo
KS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkg
PT0gdmFsdWUtPmNoaWxkKDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRl
clR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21p
Yyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6Cisg
ICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hj
aGdPcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAgICAgICAgIGNhc2Ug
QXRvbWljWGNoZ1hvcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09
IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJU
eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWMo
dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEZXBlbmQ6CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0g
MSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlw
ZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtQWRkcmVzczoK
ICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwg
KCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hp
bGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwpAQCAtNTM3LDYgKzU4MSwyMCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgdm9p
ZCB2YWxpZGF0ZUZlbmNlKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVl
KiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmIChtZW1vcnkt
Pmhhc0ZlbmNlKCkpCisgICAgICAgICAgICBWQUxJREFURShtZW1vcnR5LT5hY2Nlc3NCYW5rKCkg
PT0gR1AsICgiRmVuY2UgYXQgIiwgKm1lbW9yeSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZh
bGlkYXRlQXRvbWljKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEF0b21pY1ZhbHVlKiBh
dG9taWMgPSB2YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgIAorICAgICAgICBWQUxJ
REFURShiZXN0VHlwZShhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpID09IGF0b21pYy0+b3BlcmF0
aW9uVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgIH0KIAogICAgIHZvaWQgdmFsaWRhdGVT
dGFja0FjY2VzcyhWYWx1ZSogdmFsdWUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTAsNiArNTEwLDcgQEAgYm9vbCBW
YWx1ZTo6cmV0dXJuc0Jvb2woKSBjb25zdAogICAgIGNhc2UgQWJvdmVFcXVhbDoKICAgICBjYXNl
IEJlbG93RXF1YWw6CiAgICAgY2FzZSBFcXVhbE9yVW5vcmRlcmVkOgorICAgIGNhc2UgQXRvbWlj
V2Vha0NBUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBQaGk6CiAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHN0b3J5IGhlcmUuCkBAIC01ODksNiArNTkwLDcgQEAg
RWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgY2FzZSBCZWxvd0VxdWFsOgogICAg
IGNhc2UgRXF1YWxPclVub3JkZXJlZDoKICAgICBjYXNlIFNlbGVjdDoKKyAgICBjYXNlIERlcGVu
ZDoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBEaXY6CiAgICAgY2FzZSBVRGl2OgpAQCAtNjAw
LDE2ICs2MDIsNDQgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgY2FzZSBM
b2FkOFM6CiAgICAgY2FzZSBMb2FkMTZaOgogICAgIGNhc2UgTG9hZDE2UzoKLSAgICBjYXNlIExv
YWQ6Ci0gICAgICAgIHJlc3VsdC5yZWFkcyA9IGFzPE1lbW9yeVZhbHVlPigpLT5yYW5nZSgpOwor
ICAgIGNhc2UgTG9hZDogeworICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gYXM8TWVtb3J5
VmFsdWU+KCk7CisgICAgICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+cmFuZ2UoKTsKKyAgICAg
ICAgaWYgKG1lbW9yeS0+cGhhbnRvbVJhbmdlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC53cml0
ZXMgPSBtZW1vcnktPnBoYW50b21SYW5nZSgpOworICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0g
dHJ1ZTsKKyAgICAgICAgfQogICAgICAgICByZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7
CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIFN0b3JlODoKICAgICBjYXNlIFN0b3Jl
MTY6Ci0gICAgY2FzZSBTdG9yZToKLSAgICAgICAgcmVzdWx0LndyaXRlcyA9IGFzPE1lbW9yeVZh
bHVlPigpLT5yYW5nZSgpOworICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUq
IG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICByZXN1bHQud3JpdGVzID0gbWVt
b3J5LT5yYW5nZSgpOworICAgICAgICBpZiAobWVtb3J5LT5waGFudG9tUmFuZ2UoKSkgeworICAg
ICAgICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5LT5waGFudG9tUmFuZ2UoKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmNvbnRy
b2xEZXBlbmRlbnQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBdG9t
aWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgIGNhc2UgQXRvbWljWGNo
Z0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6Cisg
ICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNl
IEF0b21pY1hjaGc6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZh
bHVlPigpOworICAgICAgICByZXN1bHQucmVhZHMgPSBtZW1vcnktPnJhbmdlKCkgfCBtZW1vcnkt
PnBoYW50b21SYW5nZSgpOworICAgICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5yYW5nZSgp
IHwgbWVtb3J0eS0+cGhhbnRvbVJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPnBoYW50b21S
YW5nZSgpKQorICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0
LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2Fz
ZSBXYXNtQWRkcmVzczoKICAgICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAg
ICAgYnJlYWs7CkBAIC02MTcsMTggKzY0Nyw3IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBj
b25zdAogICAgICAgICBjb25zdCBGZW5jZVZhbHVlKiBmZW5jZSA9IGFzPEZlbmNlVmFsdWU+KCk7
CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IGZlbmNlLT5yZWFkOwogICAgICAgICByZXN1bHQud3Jp
dGVzID0gZmVuY2UtPndyaXRlOwotICAgICAgICAKLSAgICAgICAgLy8gUHJldmVudCBraWxsaW5n
IG9mIGZlbmNlcyB0aGF0IGNsYWltIG5vdCB0byB3cml0ZSBhbnl0aGluZy4gSXQncyBhIGJpdCB3
ZWlyZCB0aGF0IHdlIHVzZQotICAgICAgICAvLyBsb2NhbCBzdGF0ZSBhcyB0aGUgd2F5IHRvIGRv
IHRoaXMsIGJ1dCBpdCBoYXBwZW5zIHRvIHdvcms6IHdlIG11c3QgYXNzdW1lIHRoYXQgd2UgY2Fu
bm90Ci0gICAgICAgIC8vIGtpbGwgd3JpdGVzTG9jYWxTdGF0ZSB1bmxlc3Mgd2UgdW5kZXJzdGFu
ZHMgZXhhY3RseSB3aGF0IHRoZSBpbnN0cnVjdGlvbiBpcyBkb2luZyAobGlrZQotICAgICAgICAv
LyB0aGUgd2F5IHRoYXQgZml4U1NBIHVuZGVyc3RhbmRzIFNldC9HZXQgYW5kIHRoZSB3YXkgdGhh
dCByZWR1Y2VTdHJlbmd0aCBhbmQgb3RoZXJzCi0gICAgICAgIC8vIHVuZGVyc3RhbmQgVXBzaWxv
bikuIFRoaXMgd291bGQgb25seSBiZWNvbWUgYSBwcm9ibGVtIGlmIHdlIGhhZCBzb21lIGFuYWx5
c2lzIHRoYXQgd2FzCi0gICAgICAgIC8vIGxvb2tpbmcgdG8gdXNlIHRoZSB3cml0ZXNMb2NhbFN0
YXRlIGJpdCB0byBpbnZhbGlkYXRlIGEgQ1NFIG92ZXIgbG9jYWwgc3RhdGUgb3BlcmF0aW9ucy4K
LSAgICAgICAgLy8gVGhlbiBhIEZlbmNlIHdvdWxkIGxvb2sgYmxvY2ssIHNheSwgdGhlIGVsaW1p
bmF0aW9uIG9mIGEgcmVkdW5kYW50IEdldC4gQnV0IGl0IGxpa2UKLSAgICAgICAgLy8gdGhhdCdz
IG5vdCBhdCBhbGwgaG93IG91ciBvcHRpbWl6YXRpb25zIGZvciBTZXQvR2V0L1Vwc2lsb24vUGhp
IHdvcmsgLSB0aGV5IGdyb2sgdGhlaXIKLSAgICAgICAgLy8gb3BlcmF0aW9ucyBkZWVwbHkgZW5v
dWdoIHRoYXQgdGhleSBoYXZlIG5vIG5lZWQgdG8gY2hlY2sgdGhpcyBiaXQgLSBzbyB0aGlzIGNo
ZWF0IGlzCi0gICAgICAgIC8vIGZpbmUuCi0gICAgICAgIHJlc3VsdC53cml0ZXNMb2NhbFN0YXRl
ID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgQ0NhbGw6CkBAIC02OTQsNiArNzEzLDcgQEAgVmFsdWVLZXkgVmFsdWU6
OmtleSgpIGNvbnN0CiAgICAgY2FzZSBDaGVjazoKICAgICBjYXNlIEJpdHdpc2VDYXN0OgogICAg
IGNhc2UgTmVnOgorICAgIGNhc2UgRGVwZW5kOgogICAgICAgICByZXR1cm4gVmFsdWVLZXkoa2lu
ZCgpLCB0eXBlKCksIGNoaWxkKDApKTsKICAgICBjYXNlIEFkZDoKICAgICBjYXNlIFN1YjoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiAr
NjgsMTAgQEAgcHVibGljOgogICAgIAogICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVy
biBraW5kKCkub3Bjb2RlKCk7IH0KICAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIGtpbmQgaXMg
bWVhbnQgdG8gYmUgaW1tdXRhYmxlLiBEbyB0aGlzIHdoZW4geW91IGtub3cgdGhhdCB0aGlzIGlz
IHNhZmUuIEl0J3Mgbm90CisgICAgLy8gdXN1YWxseSBzYWZlLgorICAgIHZvaWQgc2V0S2luZFVu
c2FmZWx5KEtpbmQga2luZCkgeyBtX2tpbmQgPSBraW5kOyB9CisgICAgCiAgICAgLy8gSXQncyBn
b29kIHByYWN0aWNlIHRvIG1pcnJvciBLaW5kIG1ldGhvZHMgaGVyZSwgc28geW91IGNhbiBzYXkg
dmFsdWUtPmlzQmxhaCgpCiAgICAgLy8gaW5zdGVhZCBvZiB2YWx1ZS0+a2luZCgpLmlzQmxhaCgp
LgogICAgIGJvb2wgaXNDaGlsbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKS5pc0NoaWxsKCk7IH0K
QEAgLTEwNyw2ICsxMTEsOCBAQCBwdWJsaWM6CiAgICAgLy8gdmFsdWVzIHdpdGggSWRlbnRpdGll
cyBvbiBib3R0b20gY29uc3RhbnRzLiBGb3IgdGhpcyByZWFzb24sIHRoaXMgdGFrZXMgYSBjYWxs
YmFjayB0aGF0IGlzCiAgICAgLy8gcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGJvdHRvbXMuIFRo
ZXJlJ3MgYSB1dGlsaXR5IGZvciB0aGlzLCBzZWUgQjNCb3R0b21Qcm92aWRlci5oLiBZb3UKICAg
ICAvLyBjYW4gYWxzbyBhY2Nlc3MgdGhhdCB1dGlsaXR5IHVzaW5nIHJlcGxhY2VXaXRoQm90dG9t
KEluc2VydGlvblNldCYsIHNpemVfdCkuCisgICAgLy8KKyAgICAvLyBZb3UncmUgZ3VhcmFudGVl
ZCB0aGF0IGJvdHRvbSBpcyB6ZXJvLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJvdHRvbVByb3Zp
ZGVyPgogICAgIHZvaWQgcmVwbGFjZVdpdGhCb3R0b20oY29uc3QgQm90dG9tUHJvdmlkZXImKTsK
ICAgICAKQEAgLTMyMSw2ICszMjcsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElUb0Y6CiAg
ICAgICAgIGNhc2UgQml0d2lzZUNhc3Q6CiAgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBj
YXNlIERlcGVuZDoKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShudW1BcmdzICE9IDEpKQogICAg
ICAgICAgICAgICAgIGJhZEtpbmQoa2luZCwgbnVtQXJncyk7CiAgICAgICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5jcHAJKHJldmlzaW9uIDIxMjk5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsMzggQEAKIAogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVHlwZSBiZXN0VHlwZShCYW5rIGJhbmssIFdp
ZHRoIHdpZHRoKQoreworICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICBjYXNlIFdpZHRoODoKKyAg
ICBjYXNlIFdpZHRoMTY6CisgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICBzd2l0Y2ggKGJhbmsp
IHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICAgICAg
Y2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBGbG9hdDsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVm9pZDsKKyAgICBj
YXNlIFdpZHRoNjQ6CisgICAgICAgIHN3aXRjaCAoYmFuaykgeworICAgICAgICBjYXNlIEdQOgor
ICAgICAgICAgICAgcmV0dXJuIEludDY0OworICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAg
cmV0dXJuIERvdWJsZTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gVm9pZDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVm9pZDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKIG5hbWVzcGFjZSBXVEYgewogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgSlNDOjpCMzo6V2lkdGggd2lkdGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNXaWR0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1dpZHRoLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1dpZHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDE4IEBAIGlubGluZSBXaWR0aCB3
aWR0aEZvclR5cGUoVHlwZSB0eXBlKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCitp
bmxpbmUgV2lkdGggY2Fub25pY2FsV2lkdGgoV2lkdGggd2lkdGgpCit7CisgICAgcmV0dXJuIHN0
ZDo6bWF4KFdpZHRoMzIsIHdpZHRoKTsKK30KKworaW5saW5lIFdpZHRoIGlzQ2Fub25pY2FsV2lk
dGgoV2lkdGggd2lkdGgpCit7CisgICAgcmV0dXJuIHdpZHRoID49IFdpZHRoMzI7Cit9CisKK1R5
cGUgYmVzdFR5cGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0aCk7CisKIGlubGluZSBXaWR0aCBjb25z
ZXJ2YXRpdmVXaWR0aChCYW5rIGJhbmspCiB7CiAgICAgcmV0dXJuIGJhbmsgPT0gR1AgPyBwb2lu
dGVyV2lkdGgoKSA6IFdpZHRoNjQ7CkBAIC05Myw2ICsxMDUsMjAgQEAgaW5saW5lIFdpZHRoIHdp
ZHRoRm9yQnl0ZXModW5zaWduZWQgYnl0ZQogICAgIH0KIH0KIAoraW5saW5lIHVpbnQ2NF90IG1h
c2soV2lkdGggd2lkdGgpCit7CisgICAgc3dpdGNoICh3aWR0aCkgeworICAgIGNhc2UgV2lkdGg4
OgorICAgICAgICByZXR1cm4gMHgwMDAwMDAwMDAwMDAwMGZmbGx1OworICAgIGNhc2UgV2lkdGgx
NjoKKyAgICAgICAgcmV0dXJuIDB4MDAwMDAwMDAwMDAwZmZmZmxsdTsKKyAgICBjYXNlIFdpZHRo
MzI6CisgICAgICAgIHJldHVybiAweDAwMDAwMDAwZmZmZmZmZmZsbHU7CisgICAgY2FzZSBXaWR0
aDY0OgorICAgICAgICByZXR1cm4gMHhmZmZmZmZmZmZmZmZmZmZmbGx1OworICAgIH0KK30KKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDIsNiArMTAyLDcgQEAgdW5zaWduZWQgQXJnOjpqc0hhc2goKSBjb25zdAogICAgIGNhc2UgUmVs
Q29uZDoKICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgY2FzZSBEb3VibGVDb25kOgorICAgIGNhc2Ug
U3RhdHVzQ29uZDoKICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICByZXN1bHQgKz0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fb2Zmc2V0KTsKICAgICAgICAgYnJlYWs7CkBAIC0xODIsNiArMTgz
LDkgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBjYXNlIERv
dWJsZUNvbmQ6CiAgICAgICAgIG91dC5wcmludChhc0RvdWJsZUNvbmRpdGlvbigpKTsKICAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3RhdHVzQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzU3Rh
dHVzQ29uZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTcGVjaWFsOgogICAg
ICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVybjsK
QEAgLTI0MSw2ICsyNDUsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
QXJnCiAgICAgY2FzZSBBcmc6OkRvdWJsZUNvbmQ6CiAgICAgICAgIG91dC5wcmludCgiRG91Ymxl
Q29uZCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OlN0YXR1c0NvbmQ6CisgICAg
ICAgIG91dC5wcmludCgiU3RhdHVzQ29uZCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBB
cmc6OlNwZWNpYWw6CiAgICAgICAgIG91dC5wcmludCgiU3BlY2lhbCIpOwogICAgICAgICByZXR1
cm47CkBAIC0yODUsNiArMjkyLDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEFyZwogICAgIGNhc2UgQXJnOjpFYXJseURlZjoKICAgICAgICAgb3V0LnByaW50KCJFYXJs
eURlZiIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkVhcmx5WkRlZjoKKyAgICAg
ICAgb3V0LnByaW50KCJFYXJseVpEZWYiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJn
OjpTY3JhdGNoOgogICAgICAgICBvdXQucHJpbnQoIlNjcmF0Y2giKTsKICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAyMTI5
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC04Miw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgUmVsQ29uZCwKICAgICAgICAg
UmVzQ29uZCwKICAgICAgICAgRG91YmxlQ29uZCwKKyAgICAgICAgU3RhdHVzQ29uZCwKICAgICAg
ICAgU3BlY2lhbCwKICAgICAgICAgV2lkdGhBcmcKICAgICB9OwpAQCAtMTUxLDYgKzE1Miw4IEBA
IHB1YmxpYzoKICAgICAgICAgLy8gYXMgVXNlIGhhcyB1bmRlZmluZWQgYmVoYXZpb3I6IHRoZSB1
c2UgbWF5IGhhcHBlbiBiZWZvcmUgdGhlIGRlZiwgb3IgaXQgbWF5IGhhcHBlbiBhZnRlcgogICAg
ICAgICAvLyBpdC4KICAgICAgICAgRWFybHlEZWYsCisgICAgICAgICAgICAKKyAgICAgICAgRWFy
bHlaRGVmLAogCiAgICAgICAgIC8vIFNvbWUgaW5zdHJ1Y3Rpb25zIG5lZWQgYSBzY3JhdGNoIHJl
Z2lzdGVyLiBXZSBtb2RlbCB0aGlzIGJ5IHNheWluZyB0aGF0IHRoZSB0ZW1wb3JhcnkgaXMKICAg
ICAgICAgLy8gZGVmaW5lZCBlYXJseSBhbmQgdXNlZCBsYXRlLiBUaGlzIHJvbGUgaW1wbGllcyB0
aGF0LgpAQCAtMTg2LDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAg
ICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2Ug
RWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjA2LDYgKzIxMCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgRWFy
bHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjI4LDYgKzIz
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIFNjcmF0
Y2g6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAg
ICAgICAgICAgcmV0dXJuIHJvbGU7CiAgICAgICAgIGNhc2UgVXNlOgogICAgICAgICAgICAgcmV0
dXJuIENvbGRVc2U7CkBAIC0yNTMsNiArMjU5LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIExh
dGVDb2xkVXNlOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6
CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjc0LDYgKzI4MSw3IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAg
ICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMjk0LDYgKzMwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBj
YXNlIFVzZVpEZWY6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHla
RGVmOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQpAQCAtMzE1LDYgKzMyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBMYXRlQ29s
ZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBFYXJseURlZjoK
KyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMzAsNiArMzQwLDcgQEAgcHVibGljOgog
ICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToKICAgICAgICAgY2Fz
ZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgIGNhc2UgU2NyYXRj
aDoKICAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTM1OCw2ICszNjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNlIEVh
cmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTMzLDYgKzU0NSwxNCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgc3RhdGljIEFyZyBzdGF0dXNDb25kKE1hY3Jv
QXNzZW1ibGVyOjpTdGF0dXNDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJn
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YXR1c0NvbmQ7CisgICAgICAgIHJl
c3VsdC5tX29mZnNldCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKICAgICBzdGF0aWMgQXJnIHNwZWNpYWwoQWlyOjpTcGVjaWFsKiBzcGVjaWFsKQogICAgIHsK
ICAgICAgICAgQXJnIHJlc3VsdDsKQEAgLTY1OCwxMiArNjc4LDE4IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBEb3VibGVDb25kOwogICAgIH0KIAorICAgIGJvb2wgaXNTdGF0
dXNDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3RhdHVzQ29u
ZDsKKyAgICB9CisKICAgICBib29sIGlzQ29uZGl0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHN3aXRjaCAoa2luZCgpKSB7CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBS
ZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29u
ZDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtODUxLDYgKzg3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2Fz
ZSBSZWxDb25kOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29u
ZDoKKyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CiAgICAg
ICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg3Miw2ICs4
OTksNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXND
b25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoK
ICAgICAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICBj
YXNlIEludmFsaWQ6CkBAIC0xMDU4LDYgKzEwODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
UmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6
CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgogICAgICAg
ICBjYXNlIFdpZHRoQXJnOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTc3LDYgKzEy
MDYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUNvbmRpdGlvbj4obV9vZmZzZXQpOwogICAgIH0KICAgICAKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6U3RhdHVzQ29uZGl0aW9uIGFzU3RhdHVzQ29uZGl0aW9uKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc1N0YXR1c0NvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxNYWNyb0Fzc2VtYmxlcjo6U3RhdHVzQ29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQor
ICAgIAogICAgIC8vIFRlbGxzIHlvdSBpZiB0aGUgQXJnIGlzIGludmVydGlibGUuIE9ubHkgY29u
ZGl0aW9uIGFyZ3VtZW50cyBhcmUgaW52ZXJ0aWJsZSwgYW5kIGV2ZW4gZm9yIHRob3NlLCB0aGVy
ZQogICAgIC8vIGFyZSBhIGZldyBleGNlcHRpb25zIC0gbm90YWJseSBPdmVyZmxvdyBhbmQgU2ln
bmVkLgogICAgIGJvb2wgaXNJbnZlcnRpYmxlKCkgY29uc3QKQEAgLTExODQsNiArMTIxOSw3IEBA
IHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKICAgICAgICAgY2FzZSBSZWxDb25k
OgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OmlzSW52ZXJ0aWJsZShhc1Jlc3VsdENvbmRpdGlvbigp
KTsKQEAgLTEyMDQsNiArMTI0MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiByZXND
b25kKE1hY3JvQXNzZW1ibGVyOjppbnZlcnQoYXNSZXN1bHRDb25kaXRpb24oKSkpOwogICAgICAg
ICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAgICAgICByZXR1cm4gZG91YmxlQ29uZChNYWNyb0Fz
c2VtYmxlcjo6aW52ZXJ0KGFzRG91YmxlQ29uZGl0aW9uKCkpKTsKKyAgICAgICAgY2FzZSBTdGF0
dXNDb25kOgorICAgICAgICAgICAgcmV0dXJuIHN0YXR1c0NvbmQoTWFjcm9Bc3NlbWJsZXI6Omlu
dmVydChhc1N0YXR1c0NvbmRpdGlvbigpKSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIEFyZygp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2su
Y3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlCiAKIGNvbnN0IGNoYXIqIGNvbnN0IEJh
c2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CiAKK3ZvaWQgQmFzaWNCbG9jazo6c2V0U3VjY2Vz
c29ycyhCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBtX3N1Y2Nlc3NvcnMucmVzaXplKDEpOwor
ICAgIG1fc3VjY2Vzc29yc1swXSA9IHRhcmdldDsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpzZXRT
dWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayB0YWtlbiwgRnJlcXVlbnRlZEJsb2NrIG5vdFRha2Vu
KQoreworICAgIG1fc3VjY2Vzc29ycy5yZXNpemUoMik7CisgICAgbV9zdWNjZXNzb3JzWzBdID0g
dGFrZW47CisgICAgbV9zdWNjZXNzb3JzWzFdID0gbm90VGFrZW47Cit9CisKIGJvb2wgQmFzaWNC
bG9jazo6YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgcmV0dXJuIEIz
OjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk5LDYgKzk5LDkgQEAgcHVibGljOgogICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3Nv
cnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KICAgICBTdWNjZXNzb3JMaXN0JiBz
dWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CiAKKyAgICB2b2lkIHNldFN1Y2Nl
c3NvcnMoRnJlcXVlbnRlZEJsb2NrKTsKKyAgICB2b2lkIHNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRl
ZEJsb2NrLCBGcmVxdWVudGVkQmxvY2spOworCiAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yQmxv
Y2sodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2so
KTsgfQogICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgeyBy
ZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CiAgICAgU3VjY2Vzc29yQ29sbGVjdGlv
bjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNl
dC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJC
bG9ja0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQWlyQmxvY2tJbnNlcnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5o
IgorI2luY2x1ZGUgPHd0Zi9CdWJibGVTb3J0Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0
aW9uU2V0KENvZGUgJmNvZGUpCisgICAgOiBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQoY29kZS5t
X2Jsb2NrcykKK3sKK30KKworQmxvY2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgp
Cit7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxv
Y2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNH
ZW5lcmljQmxvY2tJc25lcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVk
ZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBJbnNlcnRpb25T
ZXQ7CisKK3R5cGVkZWYgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+OjpCbG9j
a0luc2VydGlvbiBCbG9ja0luc2VydGlvbjsKKworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgOiBw
dWJsaWMgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+IHsKK3B1YmxpYzoKKyAg
ICBCbG9ja0luc2VydGlvblNldChDb2RlJik7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7Cisg
ICAgCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IGltcGxlbWVudCBCMzo6Qmxv
Y2tJbnNlcnRpb25TZXQncyBzcGxpdEZvcndhcmQoKS4KK307CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTczLDYgKzczLDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2Rl
JiBjb2RlKQogICAgICAgICBkYXRhTG9nKCJJbml0aWFsIGFpcjpcbiIpOwogICAgICAgICBkYXRh
TG9nKGNvZGUpOwogICAgIH0KKyAgICAKKyAgICBzaW1wbGlmeUNGRyhjb2RlKTsKIAogICAgIGxv
d2VyTWFjcm9zKGNvZGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCAr
MSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NjgsMjggKzY2OCwz
ODAgQEAgTG9hZDggVTpHOjgsIFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1w
CiAKK0xvYWRBY3E4IFU6Rzo4LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRt
cAorCiBTdG9yZTggVTpHOjgsIEQ6Rzo4CiAgICAgVG1wLCBJbmRleAogICAgIFRtcCwgQWRkcgog
ICAgIHg4NjogSW1tLCBJbmRleAogICAgIHg4NjogSW1tLCBBZGRyCiAKK1N0b3JlUmVsOCBVOkc6
OCwgRDpHOjgKKyAgICBUbXAsIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgeDg2OiBJbW0sIElu
ZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKwogTG9hZDhTaWduZWRFeHRlbmRUbzMyIFU6Rzo4LCBa
RDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxOFNpZ25lZEV4
dGVuZFRvMzIgVTpHOjgsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisK
IExvYWQxNiBVOkc6MTYsIFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAK
K0xvYWRBY3ExNiBVOkc6MTYsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1w
CisKIExvYWQxNlNpZ25lZEV4dGVuZFRvMzIgVTpHOjE2LCBaRDpHOjMyCiAgICAgQWRkciwgVG1w
CiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxMTZTaWduZWRFeHRlbmRUbzMyIFU6RzoxNiwgWkQ6
RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogU3RvcmUxNiBVOkc6MTYsIEQ6
RzoxNgogICAgIFRtcCwgSW5kZXgKICAgICBUbXAsIEFkZHIKIAorU3RvcmVBY3ExNiBVOkc6MTYs
IEQ6RzoxNgorICAgIFRtcCwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKworTG9hZEFjcTMyIFU6Rzoz
MiBaRDpHOjMyCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisK
K1N0b3JlUmVsMzIgVTpHOjMyIFpEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4
CisgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKworNjQ6IExvYWRBY3E2
NCBVOkc6NjQgWkQ6Rzo2NAorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgs
IFRtcAorCis2NDogU3RvcmVSZWw2NCBVOkc6NjQgWkQ6Rzo2NAorICAgIFRtcCwgQWRkcgorICAg
IFRtcCwgSW5kZXgKKyAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorCisj
IFRoZSBmaXJzdCBvcGVyYW5kIGlzIHJheC4KK3g4NjogQXRvbWljU3Ryb25nQ0FTOCBVOkc6MzIs
IFVEOkc6OCwgVTpHOjgsIFVEOkc6OCwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1w
LCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2
OiBBdG9taWNTdHJvbmdDQVMxNiBVOkc6MzIsIFVEOkc6MTYsIFU6RzozMiwgVUQ6RzoxNiwgWkQ6
Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25k
LCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVMzMiBVOkc6MzIs
IFVEOkc6MzIsIFU6RzozMiwgVUQ6RzozMiwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwg
VG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKwor
eDg2XzY0OiBBdG9taWNTdHJvbmdDQVM2NCBVOkc6MzIsIFVEOkc6NjQsIFU6Rzo2NCwgVUQ6Rzo2
NCwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0
dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVM4IFVE
Okc6OCwgVTpHOjgsIFVEOkc6OAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwg
SW5kZXgKKworeDg2OiBBdG9taWNTdHJvbmdDQVMxNiBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYK
KyAgICBUbXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQXRvbWlj
U3Ryb25nQ0FTMzIgVUQ6RzozMiwgVTpHOjMyLCBVRDpHOjMyCisgICAgVG1wKiwgVG1wLCBBZGRy
CisgICAgVG1wKiwgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1N0cm9uZ0NBUzY0IFVEOkc6
NjQsIFU6Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwg
SW5kZXgKKworeDg2OiBCcmFuY2hBdG9taWNTdHJvbmdDQVM4IFU6RzozMiwgVUQ6Rzo4LCBVOkc6
OCwgVUQ6Rzo4IC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIKKyAgICBT
dGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNoQXRvbWljU3Ryb25nQ0FT
MTYgVTpHOjMyLCBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYgL2JyYW5jaAorICAgIFN0YXR1c0Nv
bmQsIFRtcCosIFRtcCwgQWRkcgorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgKKwor
eDg2OiBCcmFuY2hBdG9taWNTdHJvbmdDQVMzMiBVOkc6MzIsIFVEOkc6MzIsIFU6RzozMiwgVUQ6
RzozMiAvYnJhbmNoCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyCisgICAgU3RhdHVz
Q29uZCwgVG1wKiwgVG1wLCBJbmRleAorCit4ODZfNjQ6IEJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0
IFU6RzozMiwgVUQ6Rzo2NCwgVTpHOjY0LCBVRDpHOjY0IC9icmFuY2gKKyAgICBTdGF0dXNDb25k
LCBUbXAqLCBUbXAsIEFkZHIKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4
NjogQXRvbWljQWRkOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRl
eAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNBZGQxNiBVOkc6
MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRy
CisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FkZDMyIFU6RzozMiwgVUQ6RzozMgorICAg
IEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4
CisKK3g4Nl82NDogQXRvbWljQWRkNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisg
ICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9t
aWNTdWI4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1N1YjE2IFU6RzoxNiwgVUQ6
RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBU
bXAsIEluZGV4CisKK3g4NjogQXRvbWljU3ViMzIgVTpHOjMyLCBVRDpHOjMyCisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
XzY0OiBBdG9taWNTdWI2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0s
IEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FuZDgg
VTpHOjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljQW5kMTYgVTpHOjE2LCBVRDpHOjE2Cisg
ICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5k
ZXgKKworeDg2OiBBdG9taWNBbmQzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAg
ICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0
b21pY0FuZDY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgK
KyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljT3I4IFU6Rzo4LCBV
RDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAg
VG1wLCBJbmRleAorCit4ODY6IEF0b21pY09yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
OiBBdG9taWNPcjMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5k
ZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljT3I2NCBV
Okc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hvcjggVTpHOjgsIFVEOkc6OAorICAg
IEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4
CisKK3g4NjogQXRvbWljWG9yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAg
SW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNY
b3IzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1hvcjY0IFU6Rzo2NCwg
VUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljTmVnOCBVRDpHOjgKKyAgICBBZGRyCisgICAgSW5k
ZXgKKworeDg2OiBBdG9taWNOZWcxNiBVRDpHOjE2CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4
NjogQXRvbWljTmVnMzIgVUQ6RzozMgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODZfNjQ6IEF0
b21pY05lZzY0IFVEOkc6NjQKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOb3Q4
IFVEOkc6OAorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY05vdDE2IFVEOkc6MTYK
KyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOb3QzMiBVRDpHOjMyCisgICAgQWRk
cgorICAgIEluZGV4CisKK3g4Nl82NDogQXRvbWljTm90NjQgVUQ6Rzo2NAorICAgIEFkZHIKKyAg
ICBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQ4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQxNiBVRDpHOjE2LCBVRDpH
OjE2CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQz
MiBVRDpHOjMyLCBVRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZf
NjQ6IEF0b21pY1hjaGdBZGQ2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAg
VG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGc4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGcxNiBVRDpHOjE2LCBVRDpHOjE2
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGczMiBVRDpH
OjMyLCBVRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0
b21pY1hjaGc2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCithcm02NDogTG9hZExpbms4IFU6Rzo4LCBaRDpHOjgKKyAgICBBZGRyLCBUbXAKKyAgICBJ
bmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTggVTpHOjgsIFpEOkc6OAorICAgIEFkZHIs
IFRtcAorICAgIEluZGV4LCBUbXAKKworIyBTdXBlciBjb25mdXNpbmcgZmFjdDogdGhpcyByZXR1
cm5zIDAgdG8gbWVhbiBzdWNjZXNzLCAxIHRvIG1lYW4gZmFpbHVyZS4KK2FybTY0OiBTdG9yZUNv
bmQ4IFU6Rzo4LCBEOkc6OCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJ
bmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmRSZWw4IFU6Rzo4LCBEOkc6OCwgRVpEOkc6OAor
ICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlu
azE2IFU6RzoxNiwgWkQ6RzoxNgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJt
NjQ6IExvYWRMaW5rQWNxMTYgVTpHOjE2LCBaRDpHOjE2CisgICAgQWRkciwgVG1wCisgICAgSW5k
ZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kMTYgVTpHOjE2LCBEOkc6MTYsIEVaRDpHOjgKKyAg
ICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25k
UmVsMTYgVTpHOjE2LCBEOkc6MTYsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRt
cCwgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmszMiBVOkc6MzIsIFpEOkc6MzIKKyAgICBB
ZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTMyIFU6RzozMiwg
WkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29u
ZDMyIFU6RzozMiwgRDpHOjMyLCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAs
IEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDMyIFU6RzozMiwgRDpHOjMyLCBFWkQ6
Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IExv
YWRMaW5rNjQgVTpHOjY0LCBaRDpHOjY0CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAor
Cithcm02NDogTG9hZExpbmtBY3E2NCBVOkc6NjQsIFpEOkc6NjQKKyAgICBBZGRyLCBUbXAKKyAg
ICBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQ2NCBVOkc6NjQsIEQ6Rzo2NCwgRVpEOkc6
OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9y
ZUNvbmRSZWw2NCBVOkc6NjQsIEQ6Rzo2NCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisg
ICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBEZXBlbmQzMiBVOkc6MzIsIEQ6RzozMgorICAg
IFRtcCwgVG1wCisKK2FybTY0OiBEZXBlbmQ2NCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1w
CisKIENvbXBhcmUzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCiAgICAgUmVsQ29u
ZCwgVG1wLCBUbXAsIFRtcAogICAgIFJlbENvbmQsIFRtcCwgSW1tLCBUbXAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRl
ci5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Nyw2ICsxNzcs
MTAgQEAgdm9pZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKICAgICAgICAgY2FzZSBC
cmFuY2hTdWI2NDoKICAgICAgICAgY2FzZSBCcmFuY2hOZWczMjoKICAgICAgICAgY2FzZSBCcmFu
Y2hOZWc2NDoKKyAgICAgICAgY2FzZSBCcmFuY2hBdG9taWNTdHJvbmdDQVM4OgorICAgICAgICBj
YXNlIEJyYW5jaEF0b21pY1N0cm9uZ0NBUzE2OgorICAgICAgICBjYXNlIEJyYW5jaEF0b21pY1N0
cm9uZ0NBUzMyOgorICAgICAgICBjYXNlIEJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0OgogICAgICAg
ICAgICAgaWYgKGNvZGUuZmluZE5leHRCbG9jayhibG9jaykgPT0gYmxvY2stPnN1Y2Nlc3NvckJs
b2NrKDApICYmIGJyYW5jaC5hcmdzWzBdLmlzSW52ZXJ0aWJsZSgpKSB7CiAgICAgICAgICAgICAg
ICAgc3RkOjpzd2FwKGJsb2NrLT5zdWNjZXNzb3IoMCksIGJsb2NrLT5zdWNjZXNzb3IoMSkpOwog
ICAgICAgICAgICAgICAgIGJyYW5jaC5hcmdzWzBdID0gYnJhbmNoLmFyZ3NbMF0uaW52ZXJ0ZWQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBhZElu
dGVyZmVyZW5jZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiAr
NDgsNyBAQCB2b2lkIHBhZEludGVyZmVyZW5jZShDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAg
IFsmXSAoQXJnJiwgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFy
bHlEZWY6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJseVpEZWY6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBoYXNFYXJseURlZiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkxhdGVVc2U6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUsNyBA
QCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6TGF0ZUNvbGRVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTY3Jh
dGNoOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlEZWY6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpFYXJseVpEZWY6CiAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKFJlZyByZWcgOiBjb2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoYmFuaykpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIu
Z2V0KHJlZykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0
KHJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0
b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVf
Z2VuZXJhdG9yLnJiCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw3ICsxODIs
NyBAQCBkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCiBlbmQKIAogZGVmIGlzUm9sZSh0b2tlbikKLSAg
ICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpfChaRCl8KFVaRCl8KFVBKXwoUykpXFovCisgICAg
dG9rZW4gPX4gL1xBKChVKXwoRCl8KFVEKXwoWkQpfChVWkQpfChVQSl8KFMpfChFRCl8KEVaRCl8
KExVKSlcWi8KIGVuZAogCiBkZWYgaXNHRih0b2tlbikKQEAgLTE5MCw3ICsxOTAsNyBAQCBkZWYg
aXNHRih0b2tlbikKIGVuZAogCiBkZWYgaXNLaW5kKHRva2VuKQotICAgIHRva2VuID1+IC9cQSgo
VG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQpfChBZGRyKXwoSW5kZXgpfChS
ZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpKVxaLworICAgIHRva2VuID1+IC9cQSgoVG1w
KXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxD
b25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KIGVuZAogCiBkZWYg
aXNBcmNoKHRva2VuKQpAQCAtMjY0LDcgKzI2NCw3IEBAIGNsYXNzIFBhcnNlcgogCiAgICAgZGVm
IGNvbnN1bWVLaW5kCiAgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwotICAgICAgICBwYXJz
ZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgVG1w
LCBBZGRyLCBJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgb3IgRG91YmxlQ29uZCkiKSB1bmxlc3Mg
aXNLaW5kKHJlc3VsdCkKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBC
aWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIFJlc0Nv
bmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCiAg
ICAgICAgIGFkdmFuY2UKICAgICAgICAgcmVzdWx0CiAgICAgZW5kCkBAIC02NTEsNiArNjUxLDEy
IEBAIHdyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7CiAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAi
VXNlQWRkciIKICAgICAgICAgICAgICAgICB3aGVuICJTIgogICAgICAgICAgICAgICAgICAgICBy
b2xlID0gIlNjcmF0Y2giCisgICAgICAgICAgICAgICAgd2hlbiAiRUQiCisgICAgICAgICAgICAg
ICAgICAgIHJvbGUgPSAiRWFybHlEZWYiCisgICAgICAgICAgICAgICAgd2hlbiAiRVpEIgorICAg
ICAgICAgICAgICAgICAgICByb2xlID0gIkVhcmx5WkRlZiIKKyAgICAgICAgICAgICAgICB3aGVu
ICJMVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJMYXRlVXNlIgogICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBlbmQK
QEAgLTgxOSw2ICs4MjUsNyBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAg
ICAgICAgICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCiAg
ICAgICAgICAgICAgICAgd2hlbiAiRG91YmxlQ29uZCIKKyAgICAgICAgICAgICAgICB3aGVuICJT
dGF0dXNDb25kIgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmFp
c2UgIlVuZXhwZWN0ZWQga2luZDogI3traW5kLm5hbWV9IgogICAgICAgICAgICAgICAgIGVuZApA
QCAtMTEwNSw2ICsxMTEyLDggQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAg
ICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0aW9u
KCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiRG91YmxlQ29uZCIKICAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNEb3VibGVDb25kaXRpb24oKSIKKyAgICAg
ICAgICAgICAgICB3aGVuICJTdGF0dXNDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnBy
aW50ICJhcmdzWyN7aW5kZXh9XS5hc1N0YXR1c0NvbmRpdGlvbigpIgogICAgICAgICAgICAgICAg
IGVuZAogICAgICAgICAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302922</attachid>
            <date>2017-02-27 21:46:41 -0800</date>
            <delta_ts>2017-02-28 09:35:07 -0800</delta_ts>
            <desc>more x86 atomic instruction formatting</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>147968</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMiBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkwRjJDNjNCRTFFNjQ5REM0MDBDMTM4
MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCRDFFNjQ5REMyMDBDMTM4MzkgLyogQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAv
KiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkQ0RERCMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCAq
LzsgfTsKIAkJMEYyRDREREUxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERDMTk4MzJE
MzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRDRERTgxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhp
c1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJENERFNTE5ODMyREFDMDA3RDRCMTkgLyogVG9UaGlzU3RhdHVzLmNwcCAqLzsgfTsKQEAg
LTI3NjQsNiArMjc3MCwxMiBAQAogCQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5r
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmFuay5oOyBwYXRoID0gYjMv
QjNCYW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM2M0FEMUU2MEFFM0Mw
MEMxMzgzOSAvKiBCM1dpZHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzV2lkdGguY3BwOyBwYXRoID0gYjMvQjNXaWR0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzV2lkdGguaDsgcGF0aCA9IGIzL0IzV2lkdGgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjMxRTYzNDNFODAwQzEzODM5
IC8qIEIzQXRvbWljVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNBdG9taWNWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0F0b21pY1ZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjQxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNBdG9taWNWYWx1
ZS5oOyBwYXRoID0gYjMvQjNBdG9taWNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJDNjNCNTFFNjM0M0U4MDBDMTM4MzkgLyogQjNHZW5lcmljQmxvY2tJbnNlcnRpb25T
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmljQmxvY2tJbnNl
cnRpb25TZXQuaDsgcGF0aCA9IGIzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJC
bG9ja0luc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJCbG9ja0luc2VydGlvblNldC5jcHA7IHBhdGggPSBiMy9haXIvQWlyQmxvY2tJbnNlcnRp
b25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCQTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJCbG9j
a0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCRDFF
NjQ5REMyMDBDMTM4MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREIxOTgzMkQzNDAwN0Q0QjE5IC8qIERl
YnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVi
dWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkQ0RERDMTk4
MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNTI5Miw2ICs1MzA0LDggQEAKIAkJCQkwRkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyog
YWlyICovLAogCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFs
dWUuY3BwICovLAogCQkJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVn
VmFsdWUuaCAqLywKKwkJCQkwRjJDNjNCMzFFNjM0M0U4MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1
ZS5jcHAgKi8sCisJCQkJMEYyQzYzQjQxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUu
aCAqLywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJ
CQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi8sCiAJCQkJMEZFQzg0QjYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCkBAIC01MzU0LDYgKzUzNjgs
NyBAQAogCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5o
ICovLAogCQkJCTBGRUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywK
IAkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovLAorCQkJCTBG
MkM2M0I1MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oICov
LAogCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxv
Y2suaCAqLywKIAkJCQkwRkVDODVCRjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3Bw
ICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5oICovLApA
QCAtNTQ2OSw2ICs1NDg0LDggQEAKIAkJCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWly
QXJnSW5saW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNp
Y0Jsb2NrLmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNC
bG9jay5oICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2Vy
dGlvblNldC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJs
b2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC03MzI2LDYgKzczNDMsNyBAQAogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRjFGRTUxQjE5MjJBM0JDMDA2OTg3
QzUgLyogQWJvcnRSZWFzb24uaCAqLywKKwkJCQkwRjJDNjNCRDFFNjQ5REMyMDBDMTM4MzkgLyog
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8sCiAJCQkJODYwMTYxREYwRjNBODNDMTAwRjg0
NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCAqLywKIAkJCQkwRjM3MzA5MDFDMENENzBD
MDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggKi8sCiAJCQkJODY0
MDkyM0IxNTZFRUQzQjAwNTY2Q0IyIC8qIEFSTTY0QXNzZW1ibGVyLmggKi8sCkBAIC03MzU0LDgg
KzczNzIsOCBAQAogCQkJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxl
ck1JUFMuaCAqLywKIAkJCQlGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJs
ZXJQcmludGVyLmNwcCAqLywKIAkJCQlGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9B
c3NlbWJsZXJQcmludGVyLmggKi8sCi0JCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2XzY0LmggKi8sCisJCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJQTdBNEFFMDcxNzk3M0IyNjAwNTYxMkIxIC8q
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLywKIAkJCQk4NjAxNjFFMjBGM0E4M0MxMDBG
ODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3NzE4NUE4
RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywKQEAgLTc5
NTYsNiArNzk3NCw3IEBACiAJCQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3RDcxRDlEQzQ0MjAwMUI5ODI1IC8q
IEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2M0JDMUU2MzQ0MEMwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY4NEQ0MzgxQzAw
MTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUzNEMx
QTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQ3LDYgKzgwNjYsNyBAQAogCQkJCTQzNDIyQTYzMUMx
NThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUwRTFCRjAyNzZD
MDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzM0ZDRkMx
QzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2
QjhBRDkxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRlVGFpbHMuaCBpbiBIZWFkZXJzICov
LApAQCAtODM2Niw2ICs4Mzg2LDcgQEAKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyog
REZHT1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2
N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJDNjNCNzFFNjM0M0VEMDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjM3OTgxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50
b21JbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVGOTBBRjAw
QzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFQjE5RDBCQTdE
MDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBpbiBIZWFkZXJzICovLApAQCAtOTc5Miw2ICs5
ODEzLDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
IAkJCQkwRkZBNTQ5NzE2Qjg4MzUwMDBCM0E5ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjJDNjNCRTFFNjQ5REM0MDBDMTM4MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDQ5MzdDMzFEREJFNjE0MDA3N0M4MDcgLyog
QWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NUYwRjQxNEQx
MDYzOTAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM3MEI0
RjUxQkYyNjIwMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDI0OCw2ICsxMDI3MCw3IEBACiAJCQkJ
OUU3Mjk0MDcxOTBGMDFBNTAwMUE5MUI1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTUxM0U1QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmpl
Y3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQzYzQjYxRTYzNDNFQTAw
QzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTEx
ODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3Rl
ZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjY2LDYgKzEwMjg5LDcgQEAK
IAkJCQlFMzVFMDM1RjFCN0FCNDNFMDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0MzhCMTg1NjgzMzUwMDJFRDY5MiAv
KiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRC
NjExODgwOURENTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjJDNjNCQjFFNjM0NDBBMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25T
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1MTY1RDIxQkRGMEI5ODAwM0I3NUMxIC8qIElu
c3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NG
ODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIKKworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyOjpTdGF0dXNDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIHN3aXRj
aCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNz
OgorICAgICAgICBvdXQucHJpbnQoIlN1Y2Nlc3MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6RmFpbHVyZToKKyAgICAgICAgb3V0LnByaW50KCJG
YWlsdXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMiwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODksNiArODksMjMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gVGltZXNFaWdodDsKICAgICB9CiAgICAgCisgICAgZW51bSBTdGF0dXNDb25k
aXRpb24geworICAgICAgICBTdWNjZXNzLAorICAgICAgICBGYWlsdXJlCisgICAgfTsKKyAgICAK
KyAgICBzdGF0aWMgU3RhdHVzQ29uZGl0aW9uIGludmVydChTdGF0dXNDb25kaXRpb24gY29uZGl0
aW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICAgICAgY2FzZSBT
dWNjZXNzOgorICAgICAgICAgICAgcmV0dXJuIEZhaWx1cmU7CisgICAgICAgIGNhc2UgRmFpbHVy
ZToKKyAgICAgICAgICAgIHJldHVybiBTdWNjZXNzOworICAgICAgICB9CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBTdWNjZXNzOworICAgIH0K
KyAgICAKICAgICBzdHJ1Y3QgQmFzZUluZGV4OwogICAgIAogICAgIC8vIEFkZHJlc3M6CkBAIC0x
MTA4LDMgKzExMjUsMTYgQEAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlLCBN
YQogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQworCisj
aWYgRU5BQkxFKEFTU0VNQkxFUikKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3Ry
ZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkFic3RyYWN0TWFj
cm9Bc3NlbWJsZXI6OlN0YXR1c0NvbmRpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQzLDYgKzI3NDMsOTYgQEAg
cHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CiAgICAgICAgIG1fYXNzZW1ibGVy
Lm9ybF9pbSgwLCAwLCBYODZSZWdpc3RlcnM6OmVzcCk7CiAgICAgfQorICAgIAorICAgIHZvaWQg
YXRvbWljU3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3Rl
cklEIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3Rl
ZEFuZFJlc3VsdCwgcmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1
ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIHZvaWQg
YXRvbWljU3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lz
dGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVj
dGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1Zh
bHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVMxNihTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAg
ICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgcmVzdWx0LCBbJl0g
eyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVz
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQg
bmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7Cisg
ICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgcmVzdWx0LCBb
Jl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKwor
ICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMzIoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy
SUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVz
cywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMoY29u
ZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2xf
cm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisK
KyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRk
cmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMo
Y29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNo
Z2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5k
ZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NB
UzgoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5k
UmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25n
Q0FTOChSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3Rl
ZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJl
c3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9
KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2KFJlZ2lzdGVySUQgZXhwZWN0
ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3Nl
bWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Up
OyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2KFJlZ2lzdGVySUQgZXhw
ZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBt
X2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIHZv
aWQgYXRvbWljU3Ryb25nQ0FTMzIoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0
ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ry
b25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnbF9ybShu
ZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAg
IHZvaWQgYXRvbWljU3Ryb25nQ0FTMzIoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVn
aXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBhdG9t
aWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGds
X3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4
LCBhZGRyZXNzLnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJv
bmdDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0
LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBy
ZXR1cm4gYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxl
ci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0p
OworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTOChTdGF0dXNDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1
ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWlj
U3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4
Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWlj
U3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRS
ZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQs
IFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdD
QVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwg
UmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBy
ZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0g
eyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwg
ZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1ZhbHVl
LCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hBdG9taWNTdHJvbmdDQVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBl
eHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVj
dGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7
IH0pOworICAgIH0KIAogICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVu
dHMgbW90aW9uIG9mIG5vcm1hbCBzdG9yZXMuIFNvLCBpdCdzIGEgbm8tb3Agb24geDg2LgogICAg
IHZvaWQgc3RvcmVGZW5jZSgpCkBAIC0yODMxLDYgKzI5MjEsMTggQEAgcHJvdGVjdGVkOgogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8WDg2QXNzZW1ibGVyOjpDb25kaXRpb24+KGNvbmQpOwog
ICAgIH0KIAorICAgIFg4NkFzc2VtYmxlcjo6Q29uZGl0aW9uIHg4NkNvbmRpdGlvbihTdGF0dXND
b25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZCkgeworICAgICAgICBj
YXNlIFN1Y2Nlc3M6CisgICAgICAgICAgICByZXR1cm4gWDg2QXNzZW1ibGVyOjpDb25kaXRpb25F
OworICAgICAgICBjYXNlIEZhaWx1cmU6CisgICAgICAgICAgICByZXR1cm4gWDg2QXNzZW1ibGVy
OjpDb25kaXRpb25ORTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gWDg2QXNzZW1ibGVyOjpDb25kaXRpb25FOworICAgIH0K
KwogICAgIHZvaWQgc2V0MzIoWDg2QXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICNpZiBDUFUoWDg2KQpAQCAtMjkyNSw2ICszMDI3LDM1IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoc2l6ZU9mUmVnaXN0ZXIpLCBkc3QpOwog
ICAgICAgICBzcmNJc05vblplcm8ubGluayh0aGlzKTsKICAgICB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUyhTdGF0dXNDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCByZXN1bHQs
IGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBzd2FwKGV4cGVjdGVkQW5kUmVzdWx0
LCBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAg
ICAgZnVuYygpOworICAgICAgICBzd2FwKGV4cGVjdGVkQW5kUmVzdWx0LCBYODZSZWdpc3RlcnM6
OmVheCk7CisgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgcmVzdWx0KTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FT
KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgewor
ICAgICAgICBzd2FwKGV4cGVjdGVkQW5kUmVzdWx0LCBYODZSZWdpc3RlcnM6OmVheCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgZnVuYygpOworICAgICAgICBzd2FwKGV4
cGVjdGVkQW5kUmVzdWx0LCBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgY29uc3QgRnVuYyYg
ZnVuYykKKyAgICB7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVy
czo6ZWF4KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBmdW5jKCk7Cisg
ICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAg
ICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOworICAg
IH0KIAogcHJpdmF0ZToKICAgICAvLyBPbmx5IE1hY3JvQXNzZW1ibGVyWDg2IHNob3VsZCBiZSB1
c2luZyB0aGUgZm9sbG93aW5nIG1ldGhvZDsgU1NFMiBpcyBhbHdheXMgYXZhaWxhYmxlIG9uCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
OTQsNiArMTI5NCwzNiBAQCBwdWJsaWM6CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
Ojptb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsK
ICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpicmFuY2hUZXN0OChjb25k
LCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSwgbWFzazgpOwogICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJl
Z2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljc1N0cm9uZ0NBUyhjb25kLCBl
eHBlY3RlZEFuZFJlc3VsdCwgcmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hncV9ybShu
ZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAg
IHZvaWQgYXRvbWljU3Ryb25nQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
ZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNz
LCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21pY3NTdHJvbmdDQVMoY29u
ZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ff
cm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgs
IGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzY0
KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0b21pY3NTdHJvbmdDQVMoZXhwZWN0ZWRBbmRS
ZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdD
QVM2NChSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0b21pY3NTdHJvbmdDQVMoZXhwZWN0
ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRy
ZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsg
fSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVM2NChTdGF0dXNDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdW
YWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21p
Y3NTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNt
cHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVM2NChTdGF0dXNDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljc1N0
cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNo
Z3Ffcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5k
ZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CiAKICAgICB2b2lkIHRydW5jYXRlRG91Ymxl
VG9VaW50MzIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3Nl
bWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDYgKzI5MCw4IEBAIHByaXZhdGU6CiAgICAg
ICAgIE9QX1NFVENDICAgICAgICAgICAgPSAweDkwLAogICAgICAgICBPUDJfM0JZVEVfRVNDQVBF
X0FFID0gMHhBRSwKICAgICAgICAgT1AyX0lNVUxfR3ZFdiAgICAgICA9IDB4QUYsCisgICAgICAg
IE9QMl9DTVBYQ0hHYiAgICAgICAgPSAweEIwLAorICAgICAgICBPUDJfQ01QWENIRyAgICAgICAg
ID0gMHhCMSwKICAgICAgICAgT1AyX01PVlpYX0d2RWIgICAgICA9IDB4QjYsCiAgICAgICAgIE9Q
Ml9CU0YgICAgICAgICAgICAgPSAweEJDLAogICAgICAgICBPUDJfVFpDTlQgICAgICAgICAgID0g
MHhCQywKQEAgLTI5OCw2ICszMDAsOCBAQCBwcml2YXRlOgogICAgICAgICBPUDJfTU9WU1hfR3ZF
YiAgICAgID0gMHhCRSwKICAgICAgICAgT1AyX01PVlpYX0d2RXcgICAgICA9IDB4QjcsCiAgICAg
ICAgIE9QMl9NT1ZTWF9HdkV3ICAgICAgPSAweEJGLAorICAgICAgICBPUDJfWEFERGIgICAgICAg
ICAgID0gMHhDMCwKKyAgICAgICAgT1AyX1hBREQgICAgICAgICAgICA9IDB4QzEsCiAgICAgICAg
IE9QMl9QRVhUUldfR2RVZEliICAgPSAweEM1LAogICAgICAgICBPUDJfUFNMTFFfVWRxSWIgICAg
ID0gMHg3MywKICAgICAgICAgT1AyX1BTUkxRX1VkcUliICAgICA9IDB4NzMsCkBAIC0yNzc1LDYg
KzI3NzksOTAgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX0xPQ0sp
OwogICAgIH0KICAgICAKKyAgICB2b2lkIGNtcHhjaGdiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29C
eXRlT3A4KE9QMl9DTVBYQ0hHYiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNtcHhjaGdiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLnR3b0J5dGVPcDgoT1AyX0NNUFhDSEdiLCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwg
b2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnd19ybShSZWdpc3RlcklEIHNy
YywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0
ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRl
T3AoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbXB4Y2hnd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVP
cChPUDJfQ01QWENIRywgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY21weGNoZ2xfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJf
Q01QWENIRywgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhj
aGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5
dGVPcChPUDJfQ01QWENIRywgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgY21weGNoZ3Ffcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0
KE9QMl9DTVBYQ0hHLCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y21weGNoZ3Ffcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
dHdvQnl0ZU9wNjQoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRl
T3A4KE9QMl9YQUREYiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHhhZGRiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3
b0J5dGVPcDgoT1AyX1hBRERiLCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCB4YWRkd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9P
UEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX1hBREQsIHNy
YywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkd19ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBp
bnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRf
U0laRSk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfWEFERCwgc3JjLCBiYXNl
LCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZGxfcm0o
UmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfWEFERCwgc3JjLCBiYXNlLCBvZmZzZXQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfWEFERCwgc3JjLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZHFfcm0oUmVnaXN0ZXJJ
RCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9YQURELCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgeGFkZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIudHdvQnl0ZU9wNjQoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KKyAgICAKICAgICB2b2lkIG1mZW5jZSgpCiAgICAgewogICAgICAg
ICBtX2Zvcm1hdHRlci50aHJlZUJ5dGVPcChPUDJfM0JZVEVfRVNDQVBFX0FFLCBPUDNfTUZFTkNF
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNB
dG9taWNWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK0F0b21pY1ZhbHVlOjp+QXRvbWljVmFsdWUoKQoreworfQorCitXaWR0
aCBBdG9taWNWYWx1ZTo6YWNjZXNzV2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3dpZHRo
OworfQorCit2b2lkIEF0b21pY1ZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChjb21tYSwgIndpZHRoID0g
IiwgbV93aWR0aCk7CisgICAgCisgICAgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKGNvbW1hLCBvdXQp
OworfQorCitWYWx1ZSogQXRvbWljVmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG5ldyBBdG9taWNWYWx1ZSgqdGhpcyk7Cit9CisKK0F0b21pY1ZhbHVlOjpBdG9taWNWYWx1
ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFdpZHRoIHdpZHRoLCBWYWx1ZSogb3BlcmFuZCwg
VmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKENo
ZWNrZWRPcGNvZGUsIGtpbmQsIG9wZXJhbmQtPnR5cGUoKSwgb3JpZ2luLCBvZmZzZXQsIG9wZXJh
bmQsIHBvaW50ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIHNldEZlbmNlUmFuZ2Uo
SGVhcFJhbmdlOjp0b3AoKSk7CisgICAgCisgICAgQVNTRVJUKGJlc3RUeXBlKG9wZXJhdGlvbldp
ZHRoKCkpID09IG9wZXJhdGlvblR5cGUoKSk7CisgICAgCisgICAgc3dpdGNoIChraW5kLm9wY29k
ZSgpKSB7CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoK
KyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2Fz
ZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitB
dG9taWNWYWx1ZTo6QXRvbWljVmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBXaWR0aCB3
aWR0aCwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBuZXdWYWx1ZSwgVmFsdWUqIHBvaW50
ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGUs
IGtpbmQsIGtpbmQub3Bjb2RlKCkgPT0gQXRvbWljV2Vha0NBUyA/IEludDMyIDogZXhwZWN0ZWRW
YWx1ZS0+dHlwZSgpLCBvcmlnaW4sIG9mZnNldCwgZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUsIHBv
aW50ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIHNldEZlbmNlUmFuZ2UoSGVhcFJh
bmdlOjp0b3AoKSk7CisgICAgCisgICAgQVNTRVJUKGJlc3RUeXBlKG9wZXJhdGlvbldpZHRoKCkp
ID09IG9wZXJhdGlvblR5cGUoKSk7CisKKyAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAg
ICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIzV2lkdGguaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEF0
b21pY1ZhbHVlIDogcHVibGljIE1lbW9yeVZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9v
bCBhY2NlcHRzKEtpbmQga2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0F0b21pYyhraW5k
Lm9wY29kZSgpKTsKKyAgICB9CisgICAgCisgICAgfkF0b21pY1ZhbHVlKCk7CisgICAgCisgICAg
VHlwZSBvcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gY2hpbGQoMCktPnR5cGUoKTsgfQor
ICAgIAorICAgIFdpZHRoIG9wZXJhdGlvbldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsg
fQorICAgIAorICAgIC8vIFN5bm9ueW0gZm9yIHdpZHRoKCksIGlmIHlvdSdyZSBhY2Nlc3Npbmcg
dmlhIE1lbW9yeVZhbHVlLgorICAgIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIFZhbHVlKiBjbG9uZUltcGwoKSBj
b25zdCBvdmVycmlkZTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVy
ZTsKKyAgICAKKyAgICBBdG9taWNWYWx1ZShLaW5kLCBPcmlnaW4sIFdpZHRoLCBWYWx1ZSogb3Bl
cmFuZCwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CisgICAgCisgICAgQXRv
bWljVmFsdWUoS2luZCwgT3JpZ2luLCBXaWR0aCwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVl
KiBuZXdWYWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CisgICAgCisg
ICAgV2lkdGggbV93aWR0aDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QmxvY2tJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM2LDM1ICszNiwxMyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIEJsb2Nr
SW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChQcm9jZWR1cmUgJnByb2MpCi0gICAgOiBt
X3Byb2MocHJvYykKKyAgICA6IEdlbmVyaWNCbG9ja0luc2VydGlvblNldChwcm9jLm1fYmxvY2tz
KQorICAgICwgbV9wcm9jKHByb2MpCiB7CiB9CiAKIEJsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJ
bnNlcnRpb25TZXQoKSB7IH0KIAotdm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KEJsb2Nr
SW5zZXJ0aW9uJiYgaW5zZXJ0aW9uKQotewotICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoV1RGTW92
ZShpbnNlcnRpb24pKTsKLX0KLQotQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2Vy
dCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIGZyZXF1ZW5jeSkp
OwotICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOwotICAgIGluc2VydChCbG9j
a0luc2VydGlvbihpbmRleCwgV1RGTW92ZShibG9jaykpKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1CYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3JlKEJhc2ljQmxv
Y2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSkKLXsKLSAgICByZXR1cm4gaW5zZXJ0KGJlZm9y
ZS0+aW5kZXgoKSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGJlZm9yZS0+
ZnJlcXVlbmN5KCkpOwotfQotCi1CYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0
QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBmcmVxdWVuY3kpCi17Ci0gICAgcmV0dXJu
IGluc2VydChhZnRlci0+aW5kZXgoKSArIDEsIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVx
dWVuY3kgOiBhZnRlci0+ZnJlcXVlbmN5KCkpOwotfQotCiBCYXNpY0Jsb2NrKiBCbG9ja0luc2Vy
dGlvblNldDo6c3BsaXRGb3J3YXJkKAogICAgIEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCYg
dmFsdWVJbmRleCwgSW5zZXJ0aW9uU2V0KiBpbnNlcnRpb25TZXQsIGRvdWJsZSBmcmVxdWVuY3kp
CiB7CkBAIC0xMDIsMzIgKzgwLDYgQEAgQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6OnNw
bGl0Rm9ydwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgQmxvY2tJbnNlcnRpb25TZXQ6
OmV4ZWN1dGUoKQotewotICAgIGlmIChtX2luc2VydGlvbnMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZl
biB0byB1cyBpbiBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBiZWZvcmUKLSAg
ICAvLyBydW5uaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMuIFdlIHN0cm9uZ2x5IHByZWZlciBh
IHN0YWJsZSBzb3J0IGFuZCB3ZSB3YW50IGl0IHRvIGJlCi0gICAgLy8gZmFzdCwgc28gd2UgdXNl
IGJ1YmJsZSBzb3J0LgotICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5z
ZXJ0aW9ucy5lbmQoKSk7Ci0KLSAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX3Byb2MubV9ibG9ja3Ms
IG1faW5zZXJ0aW9ucyk7Ci0gICAgCi0gICAgLy8gUHJ1bmUgb3V0IGVtcHR5IGVudHJpZXMuIFRo
aXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBpdCdzCi0gICAgLy8gaGVhbHRoeSB0byBr
ZWVwIHRoZSBibG9jayBsaXN0IGZyb20gZ3Jvd2luZy4KLSAgICBtX3Byb2MubV9ibG9ja3MucmVt
b3ZlQWxsTWF0Y2hpbmcoCi0gICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+
JiBibG9ja1B0cikgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gIWJsb2NrUHRyOwotICAg
ICAgICB9KTsKLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhl
aXIgbmV3IGluZGljZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvYy5tX2Js
b2Nrcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9wcm9jLm1fYmxvY2tzW2ldLT5tX2luZGV4ID0g
aTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIz
R2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNp
bmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzUs
MjYgKzM2LDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBJbnNl
cnRpb25TZXQ7CiAKLXR5cGVkZWYgV1RGOjpJbnNlcnRpb248c3RkOjp1bmlxdWVfcHRyPEJhc2lj
QmxvY2s+PiBCbG9ja0luc2VydGlvbjsKK3R5cGVkZWYgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0
PEJhc2ljQmxvY2s+OjpCbG9ja0luc2VydGlvbiBCbG9ja0luc2VydGlvbjsKIAotY2xhc3MgQmxv
Y2tJbnNlcnRpb25TZXQgeworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgOiBwdWJsaWMgR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+IHsKIHB1YmxpYzoKICAgICBCbG9ja0luc2Vy
dGlvblNldChQcm9jZWR1cmUmKTsKICAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKICAgICAKLSAg
ICB2b2lkIGluc2VydChCbG9ja0luc2VydGlvbiYmKTsKLQotICAgIC8vIEluc2VydCBhIG5ldyBi
bG9jayBhdCBhIGdpdmVuIGluZGV4LgotICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBp
bmRleCwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOwotCi0gICAgLy8gSW5zZXJ0cyBhIG5ldyBi
bG9jayBiZWZvcmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNzIHRo
ZSBmcmVxdWVuY3kKLSAgICAvLyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0byBq
dXN0IHVzZSB0aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCi0gICAg
Ly8gdXN1YWxseSB3aGF0IHlvdSB3YW50LgotICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShC
YXNpY0Jsb2NrKiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLQotICAgIC8vIElu
c2VydHMgYSBuZXcgYmxvY2sgYWZ0ZXIgdGhlIGdpdmVuIGJsb2NrLgotICAgIEJhc2ljQmxvY2sq
IGluc2VydEFmdGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7
Ci0KICAgICAvLyBBIGhlbHBlciB0byBzcGxpdCBhIGJsb2NrIHdoZW4gZm9yd2FyZCBpdGVyYXRp
bmcgb3ZlciBpdC4gSXQgY3JlYXRlcyBhIG5ldyBibG9jayB0byBob2xkCiAgICAgLy8gZXZlcnl0
aGluZyBiZWZvcmUgdGhlIGluc3RydWN0aW9uIGF0IHZhbHVlSW5kZXguIFRoZSBjdXJyZW50IGJs
b2NrIGlzIGxlZnQgd2l0aAogICAgIC8vIGV2ZXJ5dGhpbmcgYXQgYW5kIGFmdGVyIHZhbHVlSW5k
ZXguIElmIHRoZSBvcHRpb25hbCBJbnNlcnRpb25TZXQgaXMgcHJvdmlkZWQsIGl0IHdpbGwgZ2V0
CkBAIC04MCwxMiArNjgsOSBAQCBwdWJsaWM6CiAgICAgQmFzaWNCbG9jayogc3BsaXRGb3J3YXJk
KAogICAgICAgICBCYXNpY0Jsb2NrKiwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIEluc2VydGlvblNl
dCogPSBudWxscHRyLAogICAgICAgICBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7Ci0gICAgCi0g
ICAgYm9vbCBleGVjdXRlKCk7CiAKIHByaXZhdGU6CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7Ci0g
ICAgVmVjdG9yPEJsb2NrSW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7CiB9OwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVj
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMu
Y3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZl
Y3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsOCBAQCBib29sIEVmZmVjdHM6Omlu
dGVyZmVyZXMoY29uc3QgRWZmZWN0cyYgCiAgICAgICAgIHx8IGludGVyZmVyZXNXaXRoV3JpdGVz
UGlubmVkKG90aGVyLCAqdGhpcykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVyLndy
aXRlcykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVyLnJlYWRzKQotICAgICAgICB8
fCByZWFkcy5vdmVybGFwcyhvdGhlci53cml0ZXMpOworICAgICAgICB8fCByZWFkcy5vdmVybGFw
cyhvdGhlci53cml0ZXMpCisgICAgICAgIHx8IChmZW5jZSAmJiBvdGhlci5mZW5jZSk7CiB9CiAK
IGJvb2wgRWZmZWN0czo6b3BlcmF0b3I9PShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAg
LTk1LDcgKzk2LDggQEAgYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0IEVmZmVjdHMmIAog
ICAgICAgICAmJiB3cml0ZXNQaW5uZWQgPT0gb3RoZXIud3JpdGVzUGlubmVkCiAgICAgICAgICYm
IHJlYWRzUGlubmVkID09IG90aGVyLnJlYWRzUGlubmVkCiAgICAgICAgICYmIHdyaXRlcyA9PSBv
dGhlci53cml0ZXMKLSAgICAgICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHM7CisgICAgICAgICYm
IHJlYWRzID09IG90aGVyLnJlYWRzCisgICAgICAgICYmIGZlbmNlID09IG90aGVyLmZlbmNlOwog
fQogCiBib29sIEVmZmVjdHM6Om9wZXJhdG9yIT0oY29uc3QgRWZmZWN0cyYgb3RoZXIpIGNvbnN0
CkBAIC0xMjAsNiArMTIyLDggQEAgdm9pZCBFZmZlY3RzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbgogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXcml0ZXNQaW5uZWQiKTsKICAgICBpZiAo
cmVhZHNQaW5uZWQpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlJlYWRzUGlubmVkIik7Cisg
ICAgaWYgKGZlbmNlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJGZW5jZSIpOwogICAgIGlm
ICh3cml0ZXMpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlczoiLCB3cml0ZXMpOwog
ICAgIGlmIChyZWFkcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgc3RydWN0IEVmZmVjdHMgewogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMxNzMKICAgICBib29s
IHJlYWRzUGlubmVkIHsgZmFsc2UgfTsKICAgICBib29sIHdyaXRlc1Bpbm5lZCB7IGZhbHNlIH07
CisgICAgCisgICAgLy8gTWVtb3J5IGZlbmNlcyBjYW5ub3QgYmUgcmVvcmRlcmVkIGFyb3VuZCBl
YWNoIG90aGVyIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgZWZmZWN0cy4gVGhpcyBpcyBmbGFnZ2VkCisg
ICAgLy8gaWYgdGhlIG9wZXJhdGlvbiBpcyBhIG1lbW9yeSBmZW5jZS4KKyAgICBib29sIGZlbmNl
IHsgZmFsc2UgfTsKIAogICAgIEhlYXBSYW5nZSB3cml0ZXM7CiAgICAgSGVhcFJhbmdlIHJlYWRz
OwpAQCAtODksNiArOTMsNyBAQCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgICAgIHJlc3VsdC5yZWFk
cyA9IEhlYXBSYW5nZTo6dG9wKCk7CiAgICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7
CiAgICAgICAgIHJlc3VsdC53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICByZXN1bHQuZmVu
Y2UgPSB0cnVlOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMTAzLDcgKzEw
OCw3IEBAIHN0cnVjdCBFZmZlY3RzIHsKIAogICAgIGJvb2wgbXVzdEV4ZWN1dGUoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRlcm1pbmFsIHx8IGV4aXRzU2lkZXdheXMgfHwgd3JpdGVz
TG9jYWxTdGF0ZSB8fCB3cml0ZXMgfHwgd3JpdGVzUGlubmVkOworICAgICAgICByZXR1cm4gdGVy
bWluYWwgfHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3
cml0ZXNQaW5uZWQgfHwgZmVuY2U7CiAgICAgfQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHJl
b3JkZXJpbmcgaW5zdHJ1Y3Rpb25zIHdpdGggdGhlc2UgcmVzcGVjdGl2ZSBlZmZlY3RzIHdvdWxk
IGNoYW5nZSBwcm9ncmFtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5h
dGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAy
MTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQyLDYgKzE0Miw3IEBAIHN0cnVjdCBJbXB1
cmVCbG9ja0RhdGEgewogCiAgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiByZWFkczsgLy8gVGhpcyBv
bmx5IGdldHMgdXNlZCBmb3IgZm9yd2FyZCBzdG9yZSBlbGltaW5hdGlvbi4KICAgICBSYW5nZVNl
dDxIZWFwUmFuZ2U+IHdyaXRlczsgLy8gVGhpcyBnZXRzIHVzZWQgZm9yIGJvdGggbG9hZCBhbmQg
c3RvcmUgZWxpbWluYXRpb24uCisgICAgYm9vbCBmZW5jZTsKIAogICAgIE1lbW9yeVZhbHVlTWFw
IHN0b3Jlc0F0SGVhZDsKICAgICBNZW1vcnlWYWx1ZU1hcCBtZW1vcnlWYWx1ZXNBdFRhaWw7CkBA
IC0xNzQsMTIgKzE3NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaWYgKG1lbW9yeSAmJiBtZW1vcnktPmlzU3RvcmUoKQogICAgICAgICAgICAgICAgICAg
ICAmJiAhZGF0YS5yZWFkcy5vdmVybGFwcyhtZW1vcnktPnJhbmdlKCkpCi0gICAgICAgICAgICAg
ICAgICAgICYmICFkYXRhLndyaXRlcy5vdmVybGFwcyhtZW1vcnktPnJhbmdlKCkpKQorICAgICAg
ICAgICAgICAgICAgICAmJiAhZGF0YS53cml0ZXMub3ZlcmxhcHMobWVtb3J5LT5yYW5nZSgpKQor
ICAgICAgICAgICAgICAgICAgICAmJiAoIWRhdGEuZmVuY2UgfHwgIW1lbW9yeS0+aGFzRmVuY2Uo
KSkpCiAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3RvcmVzQXRIZWFkLmFkZChtZW1vcnkpOwog
ICAgICAgICAgICAgICAgIGRhdGEucmVhZHMuYWRkKGVmZmVjdHMucmVhZHMpOwogCiAgICAgICAg
ICAgICAgICAgaWYgKEhlYXBSYW5nZSB3cml0ZXMgPSBlZmZlY3RzLndyaXRlcykKICAgICAgICAg
ICAgICAgICAgICAgY2xvYmJlcihkYXRhLCB3cml0ZXMpOworICAgICAgICAgICAgICAgIGRhdGEu
ZmVuY2UgfD0gZWZmZWN0cy5mZW5jZTsKIAogICAgICAgICAgICAgICAgIGlmIChtZW1vcnkpCiAg
ICAgICAgICAgICAgICAgICAgIGRhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmFkZChtZW1vcnkpOwpA
QCAtNDc4LDYgKzQ4MSw5IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVy
PgogICAgIGJvb2wgZmluZFN0b3JlQWZ0ZXJDbG9iYmVyKFZhbHVlKiBwdHIsIEhlYXBSYW5nZSBy
YW5nZSwgY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgeworICAgICAgICBpZiAobV92YWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAogICAgICAgICAvLyBXZSBjYW4gZWxpbWluYXRlIGEgc3RvcmUgaWYgZXZlcnkg
Zm9yd2FyZCBwYXRoIGhpdHMgYSBzdG9yZSB0byB0aGUgc2FtZSBsb2NhdGlvbiBiZWZvcmUKICAg
ICAgICAgLy8gaGl0dGluZyBhbnkgb3BlcmF0aW9uIHRoYXQgb2JzZXJ2ZXMgdGhlIHN0b3JlLiBU
aGlzIHNlYXJjaCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZQogICAgICAgICAvLyBleHBlbnNpdmUs
IGJ1dCBpbiB0aGUgb3ZlcndoZWxtaW5nIG1ham9yaXR5IG9mIGNhc2VzIGl0IHdpbGwgYWxtb3N0
IGltbWVkaWF0ZWx5IGhpdCBhbiAKQEAgLTYxNCw2ICs2MjAsMTIgQEAgcHJpdmF0ZToKICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCptX3ZhbHVlLCAiOiBsb29raW5n
IGJhY2t3YXJkIGZvciAiLCAqcHRyLCAiLi4uXG4iKTsKICAgICAgICAgCisgICAgICAgIGlmICht
X3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkgeworICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEdpdmluZyB1cCBiZWNhdXNl
IGZlbmNlcy5cbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIAogICAgICAgICBpZiAoTWVtb3J5VmFsdWUqIG1hdGNoID0gbV9kYXRhLm1lbW9yeVZhbHVl
c0F0VGFpbC5maW5kKHB0ciwgZmlsdGVyKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEZvdW5kICIsICptYXRjaCwgIiBsb2NhbGx5Llxu
Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZpc2lv
biAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDcgQEAgdm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVy
ZSYgcHJvY2VkdXJlLAogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUwNTA3CiAgICAgfQogCisgICAgLy8gVGhpcyBwdXRzIHRoZSBJUiBpbiBxdWly
a3MgbW9kZS4KICAgICBsb3dlck1hY3Jvcyhwcm9jZWR1cmUpOwogCiAgICAgaWYgKG9wdExldmVs
ID49IDEpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNCbG9ja0lu
c2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyaWNCbG9ja0luc2VydGlvblNldC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0
Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEJhc2ljQmxvY2s+CitjbGFzcyBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQgeworcHVibGlj
OgorICAgIHR5cGVkZWYgV1RGOjpJbnNlcnRpb248c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+
PiBCbG9ja0luc2VydGlvbjsKKyAgICAKKyAgICBCbG9ja0luc2VydGlvblNldChWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiYgYmxvY2tzKQorICAgICAgICA6IG1fYmxvY2tzKGJs
b2NrcykKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9u
JiYgaW5zZXJ0aW9uKQorICAgIHsKKyAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChXVEZNb3Zl
KGluc2VydGlvbikpOworICAgIH0KKworICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBhIGdp
dmVuIGluZGV4LgorICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91Ymxl
IGZyZXF1ZW5jeSA9IFBOYU4pCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNC
bG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIGZyZXF1ZW5jeSkpOworICAgICAg
ICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICAgICAgaW5zZXJ0KEJsb2Nr
SW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2NrKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYmVmb3JlIHRoZSBnaXZlbiBi
bG9jay4gVXN1YWxseSB5b3Ugd2lsbCBub3QgcGFzcyB0aGUgZnJlcXVlbmN5CisgICAgLy8gYXJn
dW1lbnQuIFBhc3NpbmcgUE5hTiBjYXVzZXMgdXMgdG8ganVzdCB1c2UgdGhlIGZyZXF1ZW5jeSBv
ZiB0aGUgJ2JlZm9yZScgYmxvY2suIFRoYXQncworICAgIC8vIHVzdWFsbHkgd2hhdCB5b3Ugd2Fu
dC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3Vi
bGUgZnJlcXVlbmN5ID0gUE5hTikKKyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnQoYmVmb3Jl
LT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5m
cmVxdWVuY3koKSk7CisgICAgfQorCisgICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0
aGUgZ2l2ZW4gYmxvY2suCisgICAgQmFzaWNCbG9jayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayog
YWZ0ZXIsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlu
c2VydChhZnRlci0+aW5kZXgoKSArIDEsIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVu
Y3kgOiBhZnRlci0+ZnJlcXVlbmN5KCkpOworICAgIH0KKworICAgIGJvb2wgZXhlY3V0ZSgpCisg
ICAgeworICAgICAgICBpZiAobV9pbnNlcnRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGFsbG93IGluc2VydGlvbnMgdG8g
YmUgZ2l2ZW4gdG8gdXMgaW4gYW55IG9yZGVyLiBTbywgd2UgbmVlZCB0byBzb3J0IHRoZW0gYmVm
b3JlCisgICAgICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25n
bHkgcHJlZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8gYmUKKyAgICAgICAgLy8g
ZmFzdCwgc28gd2UgdXNlIGJ1YmJsZSBzb3J0LgorICAgICAgICBidWJibGVTb3J0KG1faW5zZXJ0
aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworICAgICAgICAKKyAgICAgICAgZXhl
Y3V0ZUluc2VydGlvbnMobV9ibG9ja3MsIG1faW5zZXJ0aW9ucyk7CisgICAgICAgIAorICAgICAg
ICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3Nh
cnkgYnV0IGl0J3MKKyAgICAgICAgLy8gaGVhbHRoeSB0byBrZWVwIHRoZSBibG9jayBsaXN0IGZy
b20gZ3Jvd2luZy4KKyAgICAgICAgbV9ibG9ja3MucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAg
ICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiYgYmxvY2tQdHIpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBu
ZXcgaW5kaWNlcy4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmxvY2tzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgbV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8QmxvY2tJ
bnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0hlYXBSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0hlYXBSYW5nZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNIZWFwUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsMTMgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgfQogICAgIAorICAg
IEhlYXBSYW5nZSBvcGVyYXRvcnwoY29uc3QgSGVhcFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBIZWFwUmFuZ2UoCisgICAgICAgICAgICBzdGQ6Om1pbihtX2JlZ2lu
LCBvdGhlci5tX2JlZ2luKSwKKyAgICAgICAgICAgIHN0ZDo6bWF4KG1fZW5kLCBvdGhlci5tX2Vu
ZCkpOworICAgIH0KKyAgICAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsgfQogCiAgICAgdW5zaWduZWQgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBtX2JlZ2luOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNl
cnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0lu
c2VydGlvblNldC5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw2ICs1OCwxMSBA
QCBWYWx1ZSogSW5zZXJ0aW9uU2V0OjppbnNlcnRCb3R0b20oc2l6ZV90CiAgICAgcmV0dXJuIGlu
c2VydEJvdHRvbShpbmRleCwgbGlrZVZhbHVlLT5vcmlnaW4oKSwgbGlrZVZhbHVlLT50eXBlKCkp
OwogfQogCitWYWx1ZSogSW5zZXJ0aW9uU2V0OjppbnNlcnRDbG9uZShzaXplX3QgaW5kZXgsIFZh
bHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gaW5zZXJ0VmFsdWUoaW5kZXgsIG1fcHJvY2VkdXJl
LmNsb25lKHZhbHVlKSk7Cit9CisKIHZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxv
Y2sqIGJsb2NrKQogewogICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5z
ZXJ0aW9ucy5lbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRp
b25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRp
b25TZXQuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
SW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDggQEAgcHVibGljOgog
CiAgICAgVmFsdWUqIGluc2VydEJvdHRvbShzaXplX3QgaW5kZXgsIE9yaWdpbiwgVHlwZSk7CiAg
ICAgVmFsdWUqIGluc2VydEJvdHRvbShzaXplX3QgaW5kZXgsIFZhbHVlKik7CisgICAgCisgICAg
VmFsdWUqIGluc2VydENsb25lKHNpemVfdCBpbmRleCwgVmFsdWUqKTsKIAogICAgIHZvaWQgZXhl
Y3V0ZShCYXNpY0Jsb2NrKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyTWFjcm9zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlck1hY3Jvcy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDExICs1OCwxNCBA
QCBwdWJsaWM6CiAgICAgICAgIDogbV9wcm9jKHByb2MpCiAgICAgICAgICwgbV9ibG9ja0luc2Vy
dGlvblNldChwcm9jKQogICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KHByb2MpCisgICAgICAgICwg
bV91c2VDb3VudHMocHJvYykKICAgICB7CiAgICAgfQogCiAgICAgYm9vbCBydW4oKQogICAgIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcHJvYy5oYXNRdWlya3MoKSk7CisgICAgICAgIAog
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBt
X2Jsb2NrID0gYmxvY2s7CiAgICAgICAgICAgICBwcm9jZXNzQ3VycmVudEJsb2NrKCk7CkBAIC03
Miw2ICs3NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3Byb2MucmVzZXRSZWFjaGFiaWxp
dHkoKTsKICAgICAgICAgICAgIG1fcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7CiAgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIFRoaXMgaW5kaWNhdGVzIHRoYXQgd2UndmUgCisgICAgICAgIG1f
cHJvYy5zZXRIYXNRdWlya3ModHJ1ZSk7CisgICAgICAgIAogICAgICAgICByZXR1cm4gbV9jaGFu
Z2VkOwogICAgIH0KICAgICAKQEAgLTE4NSw3ICsxOTIsOTYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBEZXBlbmQ6IHsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBDcmVh
dGUgYSBsb2FkLWxvYWQgZmVuY2UuIFRoaXMgY29kZWdlbnMgdG8gbm90aGluZyBvbiBYODYuIFdl
IHVzZSBpdCB0byB0ZWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBjb21waWxlciBub3Qg
dG8gYmxvY2sgbG9hZCBtb3Rpb24uCisgICAgICAgICAgICAgICAgICAgIEZlbmNlVmFsdWUqIGZl
bmNlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PEZlbmNlVmFsdWU+KG1faW5kZXgsIG1fb3JpZ2lu
KTsKKyAgICAgICAgICAgICAgICAgICAgZmVuY2UtPnJlYWQgPSBIZWFwUmFuZ2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZmVuY2UtPndyaXRlID0gSGVhcFJhbmdlOjp0b3AoKTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIEtpbGwgdGhlIERlcGVuZCwgd2hp
Y2ggc2hvdWxkIHVubG9jayBhIGJ1bmNoIG9mIGNvZGUgc2ltcGxpZmljYXRpb24uCisgICAgICAg
ICAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGhCb3R0b20obV9pbnNlcnRpb25TZXQsIG1f
aW5kZXgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAg
ICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOiB7CisgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkp
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsK
KyAgICAgICAgICAgICAgICBXaWR0aCB3aWR0aCA9IGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNDYW5vbmljYWxXaWR0aCh3
aWR0aCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIFZhbHVlKiBleHBlY3RlZFZhbHVlID0gYXRvbWljLT5jaGlsZCgwKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBPbiBBUk0sIHRoZSBsb2FkIHBhcnQg
b2YgdGhlIENBUyBkb2VzIGEgbG9hZCB3aXRoIHplcm8gZXh0ZW5zaW9uLiBUaGVyZWZvcmUsIHdl
IG5lZWQKKyAgICAgICAgICAgICAgICAvLyB0byB6ZXJvLWV4dGVuZCB0aGUgaW5wdXQuCisgICAg
ICAgICAgICAgICAgVmFsdWUqIG1hc2tlZEV4cGVjdGVkVmFsdWUgPSBtX2luc2VydGlvblNldC5p
bnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBCaXRBbmQsIG1fb3Jp
Z2luLCBleHBlY3RlZFZhbHVlLAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnRJbnRDb25zdGFudChtX2luZGV4LCBleHBlY3RlZFZhbHVlLCBtYXNrKHdpZHRoKSkpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGF0b21pYy0+Y2hpbGQoMCkgPSBtYXNr
ZWRFeHBlY3RlZFZhbHVlOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdB
bmQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAgICAgIGNhc2UgQXRv
bWljWGNoZ1N1YjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICAgICAgICAg
IGNhc2UgQXRvbWljWGNoZzogeworICAgICAgICAgICAgICAgIC8vIE9uIFg4NiwgdGhlc2UgbWF5
IGFjdHVhbGx5IHJldHVybiBnYXJiYWdlIGluIHRoZSBoaWdoIGJpdHMuIE9uIEFSTTY0LCB0aGVz
ZSBzb3J0YQorICAgICAgICAgICAgICAgIC8vIHplcm8tZXh0ZW5kIHRoZWlyIGhpZ2ggYml0cywg
ZXhjZXB0IHRoYXQgdGhlIGhpZ2ggYml0cyBtaWdodCBnZXQgcG9sbHV0ZWQgYnkgaGlnaAorICAg
ICAgICAgICAgICAgIC8vIGJpdHMgaW4gdGhlIG9wZXJhbmQuIC4gU28sIGVpdGhlciB3YXksIHdl
IG5lZWQgdG8gdGhyb3cgYSBzaWduLWV4dGVuZCBvbiB0aGVzZQorICAgICAgICAgICAgICAgIC8v
IHRoaW5ncy4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+b3Bjb2RlKCkgPT0gQXRvbWljWGNo
Z1N1YiAmJiBtX3VzZUNvdW50cy5udW1Vc2VzKG1fdmFsdWUpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBPbiB4ODYsIHhjaGdhZGQgaXMgYmV0dGVyIHRoYW4geGNoZ3N1YiBpZiBpdCBo
YXMgYW55IHVzZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+c2V0S2luZFVu
c2FmZWx5KEF0b21pY1hjaGdBZGQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
Y2hpbGQoMSkgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5kZXgsIE5lZywgbV9vcmlnaW4sIG1fdmFsdWUtPmNoaWxkKDEpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgYm9vbCBleGVtcHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChtX3ZhbHVlLT5vcGNvZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1hj
aGdBbmQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
QXRvbWljWGNoZ1hvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4ZW1wdCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChleGVtcHQpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOwor
ICAgICAgICAgICAgICAgIFdpZHRoIHdpZHRoID0gYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc0Nhbm9uaWNhbFdpZHRoKHdp
ZHRoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgVmFsdWUqIG5ld1ZhbHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PigKKyAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgc2lnbkV4dGVuZE9wY29kZSh3aWR0aCks
IG1fb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRDbG9u
ZShtX2luZGV4LCBtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
bV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAg
bV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00NzAsNiArNTY2LDcgQEAgcHJpdmF0ZToKICAgICBQ
cm9jZWR1cmUmIG1fcHJvYzsKICAgICBCbG9ja0luc2VydGlvblNldCBtX2Jsb2NrSW5zZXJ0aW9u
U2V0OwogICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBVc2VDb3VudHMgbV91
c2VDb3VudHM7CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICB1bnNpZ25lZCBtX2luZGV4
OwogICAgIFZhbHVlKiBtX3ZhbHVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3NB
ZnRlck9wdGltaXphdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsMTUgKzE1NiwxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBSb3RMOiB7CiAgICAgICAgICAgICAgICAgLy8g
QVJNNjQgZG9lc24ndCBoYXZlIGEgcm90YXRlIGxlZnQuCiAgICAgICAgICAgICAgICAgaWYgKGlz
QVJNNjQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWYWx1ZSogbmV3U2hpZnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KG1faW5kZXgsIE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiByb3RhdGUgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIFJvdFIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVl
LT5jaGlsZCgwKSwgbmV3U2hpZnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
cmVwbGFjZVdpdGhJZGVudGl0eShyb3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG5l
d1NoaWZ0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBOZWcsIG1fdmFs
dWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlKiByb3RhdGUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIFJvdFIs
IG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbmV3U2hpZnQpOworICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KHJvdGF0ZSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjEyOTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcyLDYgKzcyLDE0IEBAIG5hbWVzcGFjZSB7CiAKIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwogCisvLyBGSVhNRTogV2Ugd291bGRuJ3QgbmVlZCB0aGlzIGlmIEFpciBzdXBwb3J0
ZWQgV2lkdGggbW9kaWZpZXJzIGluIEFpcjo6S2luZC4KKy8vIE9PUFMhISEgKG5lZWQgYSBidWcg
VVJMKQorI2RlZmluZSBPUENPREVfRk9SX1dJRFRIKG9wY29kZSwgd2lkdGgpICggXAorICAgICh3
aWR0aCkgPT0gV2lkdGg4ID8gb3Bjb2RlICMjIDggOiBcCisgICAgKHdpZHRoKSA9PSBXaWR0aDE2
ID8gb3Bjb2RlICMjIDE2IDogXAorICAgICh3aWR0aCkgPT0gV2lkdGgzMiA/IG9wY29kZSAjIyAz
MiA6IFwKKyAgICBvcGNvZGUgIyMgNjQpCisKIGNsYXNzIExvd2VyVG9BaXIgewogcHVibGljOgog
ICAgIExvd2VyVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCkBAIC04Myw2ICs5MSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9kb21pbmF0b3JzKHByb2NlZHVyZS5kb21pbmF0b3JzKCkpCiAg
ICAgICAgICwgbV9wcm9jZWR1cmUocHJvY2VkdXJlKQogICAgICAgICAsIG1fY29kZShwcm9jZWR1
cmUuY29kZSgpKQorICAgICAgICAsIG1fYmxvY2tJbnNlcnRpb25TZXQobV9jb2RlKQorI2lmIENQ
VShYODYpIHx8IENQVShYODZfNjQpCisgICAgICAgICwgbV9lYXgoWDg2UmVnaXN0ZXJzOjplYXgp
CisgICAgICAgICwgbV9lY3goWDg2UmVnaXN0ZXJzOjplY3gpCisgICAgICAgICwgbV9lZHgoWDg2
UmVnaXN0ZXJzOjplZHgpCisjZW5kaWYKICAgICB7CiAgICAgfQogCkBAIC0xMjQsMTQgKzEzOCwx
OCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGhvaXN0ZWQgYWRkcmVzcyBleHByZXNzaW9uIGJlZm9y
ZSB3ZSBkdXBsaWNhdGUgaXQgYmFjayBpbnRvIHRoZSBsb29wLgogICAgICAgICBmb3IgKEIzOjpC
YXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvY2VkdXJlLmJsb2Nrc0luUHJlT3JkZXIoKSkgewogICAg
ICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwotICAgICAgICAgICAgLy8gUmVzZXQgc29tZSBzdGF0
ZS4KLSAgICAgICAgICAgIG1faW5zdHMucmVzaXplKDApOwogCiAgICAgICAgICAgICBtX2lzUmFy
ZSA9ICFtX2Zhc3RXb3JrbGlzdC5zYXcoYmxvY2spOwogCiAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyBCbG9jayAiLCAqYmxvY2ssICI6
XG4iKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHN1
Y2Nlc3NvcnMgYXJlIHNldCB1cCBjb3JyZWN0bHkuCisgICAgICAgICAgICBmb3IgKEIzOjpGcmVx
dWVudGVkQmxvY2sgc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAg
ICAgICAgIG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vzc29ycygpLmFwcGVuZCgKKyAgICAg
ICAgICAgICAgICAgICAgQWlyOjpGcmVxdWVudGVkQmxvY2sobV9ibG9ja1RvQmxvY2tbc3VjY2Vz
c29yLmJsb2NrKCldLCBzdWNjZXNzb3IuZnJlcXVlbmN5KCkpKTsKKyAgICAgICAgICAgIH0KKwog
ICAgICAgICAgICAgLy8gUHJvY2VzcyBibG9ja3MgaW4gcmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUg
dXNlcyBiZWZvcmUgZGVmcy4gVGhhdCdzIHdoYXQgYWxsb3dzIHVzCiAgICAgICAgICAgICAvLyB0
byBtYXRjaCBwYXR0ZXJucyBlZmZlY3RpdmVseS4KICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsKQEAgLTE0OSwxOSArMTY3LDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIE5vdyBh
cHBlbmQgdGhlIGluc3RydWN0aW9ucy4gbV9pbnN0cyBjb250YWlucyB0aGVtIGluIHJldmVyc2Ug
b3JkZXIsIHNvIHdlIHByb2Nlc3MKLSAgICAgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luc3RzLnNpemUoKTsgaS0tOykgewotICAgICAg
ICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IG1faW5zdHNbaV0pCi0gICAgICAgICAgICAgICAg
ICAgIG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+YXBwZW5kSW5zdChXVEZNb3ZlKGluc3QpKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHN1Y2Nlc3Nv
cnMgYXJlIHNldCB1cCBjb3JyZWN0bHkuCi0gICAgICAgICAgICBmb3IgKEIzOjpGcmVxdWVudGVk
QmxvY2sgc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgewotICAgICAgICAgICAgICAg
IG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vzc29ycygpLmFwcGVuZCgKLSAgICAgICAgICAg
ICAgICAgICAgQWlyOjpGcmVxdWVudGVkQmxvY2sobV9ibG9ja1RvQmxvY2tbc3VjY2Vzc29yLmJs
b2NrKCldLCBzdWNjZXNzb3IuZnJlcXVlbmN5KCkpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGZpbmlzaEFwcGVuZGluZ0luc3RydWN0aW9ucyhtX2Jsb2NrVG9CbG9ja1tibG9ja10pOwog
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2Jsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
KTsKIAogICAgICAgICBBaXI6Okluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9jb2RlKTsKICAg
ICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9wcm9sb2d1ZSkKQEAgLTUzOCw3ICs1NDcsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwogCiAgICAgICAgIGludDMyX3Qgb2Zm
c2V0ID0gdmFsdWUtPm9mZnNldCgpOwotICAgICAgICBXaWR0aCB3aWR0aCA9IHZhbHVlLT5hY2Nl
c3NXaWR0aCgpOworICAgICAgICBXaWR0aCB3aWR0aCA9IHZhbHVlLT5sb2FkU3RvcmVXaWR0aCgp
OwogCiAgICAgICAgIEFyZyByZXN1bHQgPSBlZmZlY3RpdmVBZGRyKHZhbHVlLT5sYXN0Q2hpbGQo
KSwgb2Zmc2V0LCB3aWR0aCk7CiAgICAgICAgIEFTU0VSVChyZXN1bHQuaXNWYWxpZEZvcm0od2lk
dGgpKTsKQEAgLTU2MiwxMSArNTcxLDE2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQXJnUHJvbWlz
ZSBsb2FkUHJvbWlzZUFueU9wY29kZShWYWx1ZSogbG9hZFZhbHVlKQogICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobG9hZFZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSk7CiAgICAgICAgIGlm
ICghY2FuQmVJbnRlcm5hbChsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwog
ICAgICAgICBpZiAoY3Jvc3Nlc0ludGVyZmVyZW5jZShsb2FkVmFsdWUpKQogICAgICAgICAgICAg
cmV0dXJuIEFyZygpOwotICAgICAgICBBcmdQcm9taXNlIHJlc3VsdChhZGRyKGxvYWRWYWx1ZSks
IGxvYWRWYWx1ZSk7CisgICAgICAgIGlmIChsb2FkVmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5o
YXNGZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBBcmcgbG9hZEFk
ZHIgPSBhZGRyKGxvYWRWYWx1ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvYWRBZGRyKTsK
KyAgICAgICAgQXJnUHJvbWlzZSByZXN1bHQobG9hZEFkZHIsIGxvYWRWYWx1ZSk7CiAgICAgICAg
IGlmIChsb2FkVmFsdWUtPnRyYXBzKCkpCiAgICAgICAgICAgICByZXN1bHQuc2V0VHJhcHModHJ1
ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC04OTgsMTEgKzkxMiw5IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotI2lmIENQVShYODYpIHx8IENQVShY
ODZfNjQpCiAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAodmFsdWUpLCB0bXAobV92YWx1ZSkpOwot
ICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGFtb3VudCksIFRtcChYODZSZWdpc3RlcnM6OmVjeCkp
OwotICAgICAgICBhcHBlbmQob3Bjb2RlLCBUbXAoWDg2UmVnaXN0ZXJzOjplY3gpLCB0bXAobV92
YWx1ZSkpOwotI2VuZGlmCisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAoYW1vdW50KSwgbV9lY3gp
OworICAgICAgICBhcHBlbmQob3Bjb2RlLCBtX2VjeCwgdG1wKG1fdmFsdWUpKTsKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGUzMiwgQWlyOjpPcGNvZGUgb3Bjb2RlNjQ+
CkBAIC05MzEsMTAgKzk0MywxNSBAQCBwcml2YXRlOgogICAgICAgICBBaXI6Ok9wY29kZSBvcGNv
ZGUzMiwgQWlyOjpPcGNvZGUgb3Bjb2RlNjQsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9
IE5vdENvbW11dGF0aXZlPgogICAgIGJvb2wgdHJ5QXBwZW5kU3RvcmVCaW5PcChWYWx1ZSogbGVm
dCwgVmFsdWUqIHJpZ2h0KQogICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV92YWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCkpOworICAgICAgICAKICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2Rl
ID0gdHJ5T3Bjb2RlRm9yVHlwZShvcGNvZGUzMiwgb3Bjb2RlNjQsIGxlZnQtPnR5cGUoKSk7CiAg
ICAgICAgIGlmIChvcGNvZGUgPT0gQWlyOjpPb3BzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNG
ZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKICAgICAgICAgQXJn
IHN0b3JlQWRkciA9IGFkZHIobV92YWx1ZSk7CiAgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOwog
CkBAIC05OTQsMTAgKzEwMTEsNDggQEAgcHJpdmF0ZToKIAogICAgICAgICByZXR1cm4gSW5zdCht
b3ZlLCBtX3ZhbHVlLCB0bXAodmFsdWUpLCBkZXN0KTsKICAgICB9CisgICAgCisgICAgQWlyOjpP
cGNvZGUgc3RvcmVPcGNvZGUoV2lkdGggd2lkdGgsIEJhbmsgYmFuaywgYm9vbCByZWxlYXNlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAgICBjYXNlIFdpZHRoODoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhbmsgPT0gR1ApOworICAgICAgICAgICAgcmV0dXJu
IHJlbGVhc2UgPyBTdG9yZVJlbDggOiBTdG9yZTg7CisgICAgICAgIGNhc2UgV2lkdGgxNjoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhbmsgPT0gR1ApOworICAgICAgICAgICAgcmV0dXJu
IHJlbGVhc2UgPyBTdG9yZVJlbDE2IDogU3RvcmUxNjsKKyAgICAgICAgY2FzZSBXaWR0aDMyOgor
ICAgICAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgICAgICBjYXNlIEdQOgorICAgICAg
ICAgICAgICAgIHJldHVybiByZWxlYXNlID8gU3RvcmVSZWwzMiA6IE1vdmUzMjsKKyAgICAgICAg
ICAgIGNhc2UgRlA6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlbGVhc2UpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBNb3ZlRmxvYXQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXM2NEJpdCgpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYmFuaykgeworICAgICAgICAg
ICAgY2FzZSBHUDoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVsNjQg
OiBNb3ZlOworICAgICAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghcmVsZWFzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1vdmVEb3VibGU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBBaXI6Ok9wY29kZSBzdG9y
ZU9wY29kZShWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5
ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICByZXR1cm4gc3RvcmVPcGNvZGUo
bWVtb3J5LT5sb2FkU3RvcmVXaWR0aCgpLCBtZW1vcnktPmFjY2Vzc0JhbmsoKSwgbWVtb3J5LT5o
YXNGZW5jZSgpKTsKKyAgICB9CiAKICAgICBJbnN0IGNyZWF0ZVN0b3JlKFZhbHVlKiB2YWx1ZSwg
Y29uc3QgQXJnJiBkZXN0KQogICAgIHsKLSAgICAgICAgQWlyOjpPcGNvZGUgbW92ZU9wY29kZSA9
IG1vdmVGb3JUeXBlKHZhbHVlLT50eXBlKCkpOworICAgICAgICBBaXI6Ok9wY29kZSBtb3ZlT3Bj
b2RlID0gc3RvcmVPcGNvZGUodmFsdWUpOwogICAgICAgICByZXR1cm4gY3JlYXRlU3RvcmUobW92
ZU9wY29kZSwgdmFsdWUsIGRlc3QpOwogICAgIH0KIApAQCAtMTAwNiw3ICsxMDYxLDcgQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgY3JlYXRl
U3RvcmUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSkpOwogICAgIH0KLQorICAgIAogICAg
IEFpcjo6T3Bjb2RlIG1vdmVGb3JUeXBlKFR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRj
aCAodHlwZSkgewpAQCAtMTA3Myw3ICsxMTI4LDQxIEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoaW5zdCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgZmlu
aXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKEFpcjo6QmFzaWNCbG9jayogdGFyZ2V0KQorICAgIHsK
KyAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBtX2luc3RzIGNvbnRhaW5z
IHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcworICAgICAgICAvLyBpdCBpbiBy
ZXZlcnNlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luc3RzLnNpemUoKTsgaS0tOykg
eworICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9pbnN0c1tpXSkKKyAgICAgICAgICAg
ICAgICB0YXJnZXQtPmFwcGVuZEluc3QoV1RGTW92ZShpbnN0KSk7CisgICAgICAgIH0KKyAgICAg
ICAgbV9pbnN0cy5yZXNpemUoMCk7CisgICAgfQorICAgIAorICAgIEFpcjo6QmFzaWNCbG9jayog
bmV3QmxvY2soKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmxvY2tJbnNlcnRpb25TZXQuaW5z
ZXJ0QWZ0ZXIobV9ibG9ja1RvQmxvY2tbbV9ibG9ja10pOworICAgIH0KIAorICAgIC8vIE5PVEU6
IFRoaXMgd2lsbCBjcmVhdGUgYSBjb250aW51YXRpb24gYmxvY2sgKGBuZXh0QmxvY2tgKSAqYWZ0
ZXIqIGFueSBibG9ja3MgeW91J3ZlIGNyZWF0ZWQgdXNpbmcKKyAgICAvLyBuZXdCbG9jaygpLiBT
bywgaXQncyBwcmVmZXJhYmxlIHRvIGNyZWF0ZSBhbGwgb2YgeW91ciBibG9ja3MgdXBmcm9udCB1
c2luZyBuZXdCbG9jaygpLiBBbHNvIG5vdGUKKyAgICAvLyB0aGF0IGFueSBjb2RlIHlvdSBlbWl0
IGJlZm9yZSB0aGlzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoZSBjb250aW51YXRpb24sIGFuZCBh
bnkgY29kZSB5b3UgZW1pdAorICAgIC8vIGFmdGVyIHRoaXMgd2lsbCBiZSBhcHBlbmRlZCB0byB0
aGUgcHJldmlvdXMgYmxvY2suCisgICAgdm9pZCBzcGxpdEJsb2NrKEFpcjo6QmFzaWNCbG9jayom
IHByZXZpb3VzQmxvY2ssIEFpcjo6QmFzaWNCbG9jayomIG5leHRCbG9jaykKKyAgICB7CisgICAg
ICAgIEFpcjo6QmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2NrVG9CbG9ja1ttX2Jsb2NrXTsKKyAg
ICAgICAgCisgICAgICAgIHByZXZpb3VzQmxvY2sgPSBibG9jazsKKyAgICAgICAgbmV4dEJsb2Nr
ID0gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRBZnRlcihibG9jayk7CisgICAgICAgIAorICAg
ICAgICBmaW5pc2hBcHBlbmRpbmdJbnN0cnVjdGlvbnMobmV4dEJsb2NrKTsKKyAgICAgICAgbmV4
dEJsb2NrLT5zdWNjZXNzb3JzKCkgPSBibG9jay0+c3VjY2Vzc29ycygpOworICAgICAgICBibG9j
ay0+c3VjY2Vzc29ycygpLmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBtX2luc3RzLmFwcGVu
ZChWZWN0b3I8SW5zdD4oKSk7CisgICAgfQorICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICBUKiBlbnN1cmVTcGVjaWFsKFQqJiBmaWVsZCwg
QXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQogICAgIHsKQEAgLTExMjMsNyArMTIxMiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVw
OjpTdGFja0FyZ3VtZW50OgogICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6Y2FsbEFyZyh2YWx1
ZS5yZXAoKS5vZmZzZXRGcm9tU1AoKSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kU3RvcmUodmFs
dWUudmFsdWUoKSwgYXJnKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRTdG9yZShtb3ZlRm9yVHlw
ZSh2YWx1ZS52YWx1ZSgpKSwgYXJnKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTE5NjEsNiArMjA1MCwzMDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCisgICAgdm9pZCBhcHBlbmRYODZEaXYoQjM6Ok9wY29kZSBvcCkKKyAgICB7Cisg
ICAgICAgIEFpcjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJsZVdvcmQ7CisgICAgICAgIEFpcjo6T3Bj
b2RlIGRpdjsKKyAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBJbnQzMjoKKyAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBYODZDb252ZXJ0VG9E
b3VibGVXb3JkMzI7CisgICAgICAgICAgICBkaXYgPSBYODZEaXYzMjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29y
ZCA9IFg4NkNvbnZlcnRUb1F1YWRXb3JkNjQ7CisgICAgICAgICAgICBkaXYgPSBYODZEaXY2NDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIEFTU0VSVChvcCA9PSBEaXYgfHwgb3AgPT0gTW9kKTsKKyAgICAgICAgVG1wIHJl
c3VsdCA9IG9wID09IERpdiA/IG1fZWF4IDogbV9lZHg7CisKKyAgICAgICAgYXBwZW5kKE1vdmUs
IHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIG1fZWF4KTsKKyAgICAgICAgYXBwZW5kKGNvbnZlcnRU
b0RvdWJsZVdvcmQsIG1fZWF4LCBtX2VkeCk7CisgICAgICAgIGFwcGVuZChkaXYsIG1fZWF4LCBt
X2VkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCByZXN1
bHQsIHRtcChtX3ZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRYODZVRGl2KEIzOjpP
cGNvZGUgb3ApCisgICAgeworICAgICAgICBBaXI6Ok9wY29kZSBkaXYgPSBtX3ZhbHVlLT50eXBl
KCkgPT0gSW50MzIgPyBYODZVRGl2MzIgOiBYODZVRGl2NjQ7CisKKyAgICAgICAgQVNTRVJUKG9w
ID09IFVEaXYgfHwgb3AgPT0gVU1vZCk7CisgICAgICAgIFRtcCByZXN1bHQgPSBvcCA9PSBVRGl2
ID8gbV9lYXggOiBtX2VkeDsKKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNo
aWxkKDApKSwgbV9lYXgpOworICAgICAgICBhcHBlbmQoWG9yNjQsIG1fZWR4LCBtX2VkeCk7Cisg
ICAgICAgIGFwcGVuZChkaXYsIG1fZWF4LCBtX2VkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7
CisgICAgICAgIGFwcGVuZChNb3ZlLCByZXN1bHQsIHRtcChtX3ZhbHVlKSk7CisgICAgfQorICAg
IAorICAgIEFpcjo6T3Bjb2RlIGxvYWRMaW5rT3Bjb2RlKFdpZHRoIHdpZHRoLCBib29sIGZlbmNl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZlbmNlID8gT1BDT0RFX0ZPUl9XSURUSChMb2FkTGlu
a0FjcSwgd2lkdGgpIDogT1BDT0RFX0ZPUl9XSURUSChMb2FkTGluaywgd2lkdGgpOworICAgIH0K
KyAgICAKKyAgICBBaXI6Ok9wY29kZSBzdG9yZUNvbmRPcGNvZGUoV2lkdGggd2lkdGgsIGJvb2wg
ZmVuY2UpCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2UgPyBPUENPREVfRk9SX1dJRFRIKFN0
b3JlQ29uZFJlbCwgd2lkdGgpIDogT1BDT0RFX0ZPUl9XSURUSChTdG9yZUNvbmQsIHdpZHRoKTsK
KyAgICB9CisgICAgCisgICAgLy8gVGhpcyBjYW4gZW1pdCBjb2RlIGZvciB0aGUgZm9sbG93aW5n
IHBhdHRlcm5zOgorICAgIC8vIEF0b21pY1dlYWtDQVMKKyAgICAvLyBCaXRYb3IoQXRvbWljV2Vh
a0NBUywgMSkKKyAgICAvLyBBdG9taWNTdHJvbmdDQVMKKyAgICAvLyBFcXVhbChBdG9taWNTdHJv
bmdDQVMsIGV4cGVjdGVkKQorICAgIC8vIE5vdEVxdWFsKEF0b21pY1N0cm9uZ0NBUywgZXhwZWN0
ZWQpCisgICAgLy8gQnJhbmNoKEF0b21pY1dlYWtDQVMpCisgICAgLy8gQnJhbmNoKEVxdWFsKEF0
b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpKQorICAgIC8vIEJyYW5jaChOb3RFcXVhbChBdG9taWNT
dHJvbmdDQVMsIGV4cGVjdGVkKSkKKyAgICAvLworICAgIC8vIEl0IGFzc3VtZXMgdGhhdCBhdG9t
aWNWYWx1ZSBwb2ludHMgdG8gdGhlIENBUywgYW5kIG1fdmFsdWUgcG9pbnRzIHRvIHRoZSBpbnN0
cnVjdGlvbiBiZWluZworICAgIC8vIGdlbmVyYXRlZC4gSXQgYXNzdW1lcyB0aGF0IHlvdSd2ZSBj
b25zdW1lZCBldmVyeXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29uc3VtZWQuCisgICAgdm9pZCBh
cHBlbmRDQVMoVmFsdWUqIGF0b21pY1ZhbHVlLCBib29sIGludmVydCkKKyAgICB7CisgICAgICAg
IEF0b21pY1ZhbHVlKiBhdG9taWMgPSBhdG9taWNWYWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGF0b21pYyk7CisgICAgICAgIAorICAgICAgICBib29sIGlz
QnJhbmNoID0gbV92YWx1ZS0+b3AoKSA9PSBCcmFuY2g7CisgICAgICAgIGJvb2wgaXNTdHJvbmcg
PSBhdG9taWMtPm9wKCkgPT0gQXRvbWljU3Ryb25nQ0FTOworICAgICAgICBib29sIHJldHVybnNP
bGRWYWx1ZSA9IG1fdmFsdWUtPm9wKCkgPT0gQXRvbWljU3Ryb25nQ0FTOworICAgICAgICAKKyAg
ICAgICAgV2lkdGggd2lkdGggPSBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCk7CisgICAgICAgIEFy
ZyBhZGRyZXNzID0gYWRkcihhdG9taWMpOworCisgICAgICAgIFRtcCB2YWx1ZVJlc3VsdFRtcDsK
KyAgICAgICAgVG1wIGJvb2xSZXN1bHRUbXA7CisgICAgICAgIGlmIChyZXR1cm5zT2xkVmFsdWUp
IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbnZlcnQpOworICAgICAgICAgICAgdmFs
dWVSZXN1bHRUbXAgPSB0bXAobV92YWx1ZSk7CisgICAgICAgICAgICBib29sUmVzdWx0VG1wID0g
bV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNCcmFuY2gpIHsKKyAgICAg
ICAgICAgIHZhbHVlUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgICAgICBi
b29sUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB2YWx1ZVJlc3VsdFRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAgICAg
Ym9vbFJlc3VsdFRtcCA9IHRtcChtX3ZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgVG1wIHN1Y2Nlc3NCb29sUmVzdWx0VG1wOworICAgICAgICBpZiAoaXNTdHJvbmcgJiYgIWlz
QnJhbmNoKQorICAgICAgICAgICAgc3VjY2Vzc0Jvb2xSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1w
KEdQKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3VjY2Vzc0Jvb2xSZXN1bHRUbXAgPSBi
b29sUmVzdWx0VG1wOworCisgICAgICAgIFRtcCBleHBlY3RlZFZhbHVlVG1wID0gdG1wKGF0b21p
Yy0+Y2hpbGQoMCkpOworICAgICAgICBUbXAgbmV3VmFsdWVUbXAgPSB0bXAoYXRvbWljLT5jaGls
ZCgxKSk7CisgICAgICAgIAorICAgICAgICBGcmVxdWVudGVkQmxvY2sgc3VjY2VzczsKKyAgICAg
ICAgRnJlcXVlbnRlZEJsb2NrIGZhaWx1cmU7CisgICAgICAgIGlmIChpc0JyYW5jaCkgeworICAg
ICAgICAgICAgc3VjY2VzcyA9IG1fYmxvY2tUb0Jsb2NrW21fYmxvY2tdLT5zdWNjZXNzb3IoaW52
ZXJ0KTsKKyAgICAgICAgICAgIGZhaWx1cmUgPSBtX2Jsb2NrVG9CbG9ja1ttX2Jsb2NrXS0+c3Vj
Y2Vzc29yKCFpbnZlcnQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXNYODYo
KSkgeworICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPm9wZXJh
dGlvblR5cGUoKSksIGltbU9yVG1wKGF0b21pYy0+Y2hpbGQoMCkpLCBtX2VheCk7CisgICAgICAg
ICAgICBpZiAocmV0dXJuc09sZFZhbHVlKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKE9QQ09E
RV9GT1JfV0lEVEgoQXRvbWljU3Ryb25nQ0FTLCB3aWR0aCksIG1fZWF4LCBuZXdWYWx1ZVRtcCwg
YWRkcmVzcyk7CisgICAgICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9t
aWMtPm9wZXJhdGlvblR5cGUoKSksIG1fZWF4LCB2YWx1ZVJlc3VsdFRtcCk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzQnJhbmNoKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKE9QQ09ERV9G
T1JfV0lEVEgoQnJhbmNoQXRvbWljU3Ryb25nQ0FTLCB3aWR0aCksIEFyZzo6c3RhdHVzQ29uZChN
YWNyb0Fzc2VtYmxlcjo6U3VjY2VzcyksIG1fZWF4LCBuZXdWYWx1ZVRtcCwgYWRkcmVzcyk7Cisg
ICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbbV9ibG9ja10tPnNldFN1Y2Nlc3NvcnMoc3Vj
Y2VzcywgZmFpbHVyZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhcHBl
bmQoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNTdHJvbmdDQVMsIHdpZHRoKSwgQXJnOjpzdGF0dXND
b25kKGludmVydCA/IE1hY3JvQXNzZW1ibGVyOjpGYWlsdXJlIDogTWFjcm9Bc3NlbWJsZXI6OlN1
Y2Nlc3MpLCBtX2VheCwgdG1wKGF0b21pYy0+Y2hpbGQoMSkpLCBhZGRyZXNzLCBib29sUmVzdWx0
VG1wKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsKKyAgICAgICAgLy8gV2Ugd2lzaCB0byBlbWl0Ogor
ICAgICAgICAvLworICAgICAgICAvLyBCbG9jayAjcmVsb29wOgorICAgICAgICAvLyAgICAgTG9h
ZExpbmsKKyAgICAgICAgLy8gICAgIEJyYW5jaCBOb3RFcXVhbAorICAgICAgICAvLyAgIFN1Y2Nl
c3NvcnM6IFRoZW46I2ZhaWwsIEVsc2U6ICNzdG9yZQorICAgICAgICAvLyBCbG9jayAjc3RvcmU6
CisgICAgICAgIC8vICAgICBTdG9yZUNvbmQKKyAgICAgICAgLy8gICAgIFhvciAkMSwgJXJlc3Vs
dCAgICA8LS0tIG9ubHkgaWYgIWludmVydAorICAgICAgICAvLyAgICAgSnVtcAorICAgICAgICAv
LyAgIFN1Y2Nlc3NvcnM6ICNkb25lCisgICAgICAgIC8vIEJsb2NrICNmYWlsOgorICAgICAgICAv
LyAgICAgTW92ZSAkaW52ZXJ0LCAlcmVzdWx0CisgICAgICAgIC8vICAgICBKdW1wCisgICAgICAg
IC8vICAgU3VjY2Vzc29yczogI2RvbmUKKyAgICAgICAgLy8gQmxvY2sgI2RvbmU6CisgICAgICAg
IAorICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHJlbG9vcEJsb2NrID0gbmV3QmxvY2soKTsKKyAg
ICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBzdG9yZUJsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAg
QWlyOjpCYXNpY0Jsb2NrKiBzdWNjZXNzQmxvY2sgPSBudWxscHRyOworICAgICAgICBpZiAoIWlz
QnJhbmNoICYmIGlzU3Ryb25nKQorICAgICAgICAgICAgc3VjY2Vzc0Jsb2NrID0gbmV3QmxvY2so
KTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBmYWlsQmxvY2sgPSBudWxscHRyOworICAgICAg
ICBpZiAoIWlzQnJhbmNoKQorICAgICAgICAgICAgZmFpbEJsb2NrID0gbmV3QmxvY2soKTsKKyAg
ICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBzdHJvbmdGYWlsQmxvY2s7CisgICAgICAgIGlmIChpc1N0
cm9uZykKKyAgICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAg
IEZyZXF1ZW50ZWRCbG9jayBjb21wYXJpc29uRmFpbDsKKyAgICAgICAgRnJlcXVlbnRlZEJsb2Nr
IHdlYWtGYWlsOworICAgICAgICBpZiAoaXNTdHJvbmcpIHsKKyAgICAgICAgICAgIGNvbXBhcmlz
b25GYWlsID0gc3Ryb25nRmFpbEJsb2NrOworICAgICAgICAgICAgd2Vha0ZhaWwgPSByZWxvb3BC
bG9jazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc0JyYW5jaCkKKyAgICAg
ICAgICAgICAgICBjb21wYXJpc29uRmFpbCA9IGZhaWx1cmU7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgY29tcGFyaXNvbkZhaWwgPSBmYWlsQmxvY2s7CisgICAgICAgICAgICB3
ZWFrRmFpbCA9IGZhaWx1cmU7CisgICAgICAgIH0KKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBi
ZWdpbkJsb2NrOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGRvbmVCbG9jazsKKyAgICAgICAg
c3BsaXRCbG9jayhiZWdpbkJsb2NrLCBkb25lQmxvY2spOworICAgICAgICAKKyAgICAgICAgYXBw
ZW5kKEp1bXApOworICAgICAgICBiZWdpbkJsb2NrLT5zZXRTdWNjZXNzb3JzKHJlbG9vcEJsb2Nr
KTsKKyAgICAgICAgCisgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQobG9hZExpbmtPcGNvZGUo
d2lkdGgsIGF0b21pYy0+aGFzRmVuY2UoKSksIG1fdmFsdWUsIHZhbHVlUmVzdWx0VG1wLCBhZGRy
ZXNzKTsKKyAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChPUENPREVfRk9SX1dJRFRIKEJyYW5j
aCwgY2Fub25pY2FsV2lkdGgod2lkdGgpKSwgbV92YWx1ZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCkgdmFsdWVSZXN1bHRUbXAsIGV4cGVjdGVkVmFsdWVUbXApOworICAg
ICAgICByZWxvb3BCbG9jay0+c2V0U3VjY2Vzc29ycyhjb21wYXJpc29uRmFpbCwgc3RvcmVCbG9j
ayk7CisgICAgICAgIAorICAgICAgICBzdG9yZUJsb2NrLT5hcHBlbmQoc3RvcmVDb25kT3Bjb2Rl
KHdpZHRoLCBhdG9taWMtPmhhc0ZlbmNlKCkpLCBtX3ZhbHVlLCBuZXdWYWx1ZVRtcCwgYWRkcmVz
cywgc3VjY2Vzc0Jvb2xSZXN1bHRUbXApOworICAgICAgICBpZiAoaXNCcmFuY2gpIHsKKyAgICAg
ICAgICAgIHN0b3JlQmxvY2stPmFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNy
b0Fzc2VtYmxlcjo6WmVybyksIGJvb2xSZXN1bHRUbXAsIEFyZzo6Yml0SW1tKC0xKSk7CisgICAg
ICAgICAgICBzdG9yZUJsb2NrLT5zZXRTdWNjZXNzb3JzKHN1Y2Nlc3MsIHdlYWtGYWlsKTsKKyAg
ICAgICAgICAgIGRvbmVCbG9jay0+c3VjY2Vzc29ycygpLmNsZWFyKCk7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghZG9uZUJsb2NrLT5zaXplKCkpOworICAgICAgICAgICAgZG9uZUJsb2Nr
LT5hcHBlbmQoT29wcywgbV92YWx1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAoaXNTdHJvbmcpIHsKKyAgICAgICAgICAgICAgICBzdG9yZUJsb2NrLT5hcHBlbmQoQnJhbmNo
VGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBzdWNjZXNzQm9vbFJl
c3VsdFRtcCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgICAgICAgICBzdG9yZUJsb2NrLT5z
ZXRTdWNjZXNzb3JzKHN1Y2Nlc3NCbG9jaywgcmVsb29wQmxvY2spOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHN1Y2Nlc3NCbG9jay0+YXBwZW5kKE1vdmUsIG1fdmFsdWUsIEFy
Zzo6aW1tKCFpbnZlcnQpLCBib29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgICAgICBzdWNjZXNz
QmxvY2stPmFwcGVuZChKdW1wLCBtX3ZhbHVlKTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzQmxv
Y2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFpbnZlcnQpCisgICAgICAgICAgICAgICAgICAgIHN0b3JlQmxvY2st
PmFwcGVuZChYb3IzMiwgbV92YWx1ZSwgQXJnOjpiaXRJbW0oMSksIGJvb2xSZXN1bHRUbXAsIGJv
b2xSZXN1bHRUbXApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0b3JlQmxv
Y2stPmFwcGVuZChKdW1wLCBtX3ZhbHVlKTsKKyAgICAgICAgICAgICAgICBzdG9yZUJsb2NrLT5z
ZXRTdWNjZXNzb3JzKGRvbmVCbG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZhaWxCbG9jay0+YXBwZW5kKE1vdmUsIG1fdmFsdWUsIEFyZzo6aW1tKGludmVy
dCksIGJvb2xSZXN1bHRUbXApOworICAgICAgICAgICAgZmFpbEJsb2NrLT5hcHBlbmQoSnVtcCwg
bV92YWx1ZSk7CisgICAgICAgICAgICBmYWlsQmxvY2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2Nr
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzU3Ryb25nKSB7CisgICAgICAg
ICAgICBUbXAgdG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgICAgICBzdHJvbmdGYWls
QmxvY2stPmFwcGVuZChzdG9yZUNvbmRPcGNvZGUod2lkdGgsIGF0b21pYy0+aGFzRmVuY2UoKSks
IG1fdmFsdWUsIHZhbHVlUmVzdWx0VG1wLCBhZGRyZXNzLCB0bXApOworICAgICAgICAgICAgc3Ry
b25nRmFpbEJsb2NrLT5hcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8pLCB0bXAsIEFyZzo6Yml0SW1tKC0xKSk7CisgICAgICAgICAgICBzdHJvbmdG
YWlsQmxvY2stPnNldFN1Y2Nlc3NvcnMoZmFpbEJsb2NrLCByZWxvb3BCbG9jayk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgYm9vbCBhcHBlbmRWb2lkQXRvbWljKEFpcjo6T3Bjb2RlIGF0
b21pY09wY29kZSkKKyAgICB7CisgICAgICAgIGlmIChtX3VzZUNvdW50cy5udW1Vc2VzKG1fdmFs
dWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgQXJnIGFk
ZHJlc3MgPSBhZGRyKG1fdmFsdWUpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzVmFsaWRGb3Jt
KGF0b21pY09wY29kZSwgQXJnOjpJbW0sIGFkZHJlc3Mua2luZCgpKSAmJiBpbW0obV92YWx1ZS0+
Y2hpbGQoMCkpKSB7CisgICAgICAgICAgICBhcHBlbmQoYXRvbWljT3Bjb2RlLCBpbW0obV92YWx1
ZS0+Y2hpbGQoMCkpLCBhZGRyZXNzKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXNWYWxpZEZvcm0oYXRvbWljT3Bjb2RlLCBBcmc6
OlRtcCwgYWRkcmVzcy5raW5kKCkpKSB7CisgICAgICAgICAgICBhcHBlbmQoYXRvbWljT3Bjb2Rl
LCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBhZGRyZXNzKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhcHBlbmRHZW5lcmFsQXRvbWljKEFpcjo6T3Bjb2RlIG9wY29kZSkKKyAg
ICB7CisgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1
ZT4oKTsKKyAgICAgICAgCisgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihtX3ZhbHVlKTsKKyAg
ICAgICAgVG1wIG9sZFZhbHVlID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgIFRtcCBuZXdW
YWx1ZSA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAKKyAgICAgICAgLy8gV2UgbmVlZCBh
IENBUyBsb29wIG9yIGEgTEwvU0MgbG9vcC4gVXNpbmcgcHJlcGFyZS9hdHRlbXB0IGphcmdvbiwg
d2Ugd2FudDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQmxvY2sgI3JlbG9vcDoKKyAgICAgICAg
Ly8gICAgIFByZXBhcmUKKyAgICAgICAgLy8gICAgIG9wY29kZQorICAgICAgICAvLyAgICAgQXR0
ZW1wdAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6IFRoZW46I2RvbmUsIEVsc2U6I3JlbG9vcAor
ICAgICAgICAvLyBCbG9jayAjZG9uZToKKyAgICAgICAgLy8gICAgIE1vdmUgb2xkVmFsdWUsIHJl
c3VsdAorICAgICAgICAKKyAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMt
PnR5cGUoKSksIG9sZFZhbHVlLCB0bXAoYXRvbWljKSk7CisgICAgICAgIAorICAgICAgICBBaXI6
OkJhc2ljQmxvY2sqIHJlbG9vcEJsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNp
Y0Jsb2NrKiBiZWdpbkJsb2NrOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGRvbmVCbG9jazsK
KyAgICAgICAgc3BsaXRCbG9jayhiZWdpbkJsb2NrLCBkb25lQmxvY2spOworICAgICAgICAKKyAg
ICAgICAgYXBwZW5kKEp1bXApOworICAgICAgICBiZWdpbkJsb2NrLT5zZXRTdWNjZXNzb3JzKHJl
bG9vcEJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIEFpcjo6T3Bjb2RlIHByZXBhcmVPcGNvZGU7
CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGF0b21pYy0+b3Bl
cmF0aW9uV2lkdGgoKSkgeworICAgICAgICAgICAgY2FzZSBXaWR0aDg6CisgICAgICAgICAgICAg
ICAgcHJlcGFyZU9wY29kZSA9IExvYWQ4U2lnbmVkRXh0ZW5kVG8zMjsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgICAgICAgICBwcmVw
YXJlT3Bjb2RlID0gTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMjsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgV2lkdGgzMjoKKyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bj
b2RlID0gTW92ZTMyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBX
aWR0aDY0OgorICAgICAgICAgICAgICAgIHByZXBhcmVPcGNvZGUgPSBNb3ZlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsKKyAgICAgICAgICAgIG9wY29kZSA9IGxvYWRM
aW5rT3Bjb2RlKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSwgYXRvbWljLT5oYXNGZW5jZSgpKTsK
KyAgICAgICAgfQorICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKHByZXBhcmVPcGNvZGUsIG1f
dmFsdWUsIGFkZHJlc3MsIG9sZFZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChvcGNvZGUg
IT0gTm9wKSB7CisgICAgICAgICAgICBpZiAoaW1tKGF0b21pYy0+Y2hpbGQoMCkpICYmIGlzVmFs
aWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAgICAg
ICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChvcGNvZGUsIG1fdmFsdWUsIGltbShhdG9taWMtPmNo
aWxkKDApKSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzVmFs
aWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAgICAg
ICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChvcGNvZGUsIG1fdmFsdWUsIHRtcChhdG9taWMtPmNo
aWxkKDApKSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+
dHlwZSgpKSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoaW1tKGF0
b21pYy0+Y2hpbGQoMCkpICYmIGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIEFyZzo6VG1w
KSkKKyAgICAgICAgICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChvcGNvZGUsIG1fdmFs
dWUsIGltbShhdG9taWMtPmNoaWxkKDApKSwgbmV3VmFsdWUpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChvcGNvZGUsIG1fdmFs
dWUsIHRtcChhdG9taWMtPmNoaWxkKDApKSwgbmV3VmFsdWUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2Rl
IGNhc09wY29kZSA9IE9QQ09ERV9GT1JfV0lEVEgoQnJhbmNoQXRvbWljU3Ryb25nQ0FTLCBhdG9t
aWMtPm9wZXJhdGlvbldpZHRoKCkpOworICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChy
ZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCBvbGRWYWx1ZSwgbV9lYXgpOworICAg
ICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChjYXNPcGNvZGUsIG1fdmFsdWUsIEFyZzo6c3Rh
dHVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6U3VjY2VzcyksIG1fZWF4LCBuZXdWYWx1ZSwgYWRkcmVz
cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0
KCkpOworICAgICAgICAgICAgVG1wIGJvb2xSZXN1bHQgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAg
ICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQoc3RvcmVDb25kT3Bjb2RlKGF0b21pYy0+b3Bl
cmF0aW9uV2lkdGgoKSwgYXRvbWljLT5oYXNGZW5jZSgpKSwgbmV3VmFsdWUsIGFkZHJlc3MsIGJv
b2xSZXN1bHQpOworICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChCcmFuY2hUZXN0MzIs
IEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGJvb2xSZXN1bHQsIEFyZzo6Yml0
SW1tKC0xKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVsb29wQmxvY2stPnNldFN1Y2Nlc3NvcnMo
ZG9uZUJsb2NrLCByZWxvb3BCbG9jayk7CisgICAgfQorICAgIAogICAgIHZvaWQgbG93ZXIoKQog
ICAgIHsKICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgewpAQCAtMTk3MSwzMCAr
MjM2Miw1MCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBMb2FkOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG1vdmVG
b3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3Zh
bHVlKSkpOworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IG1fdmFsdWUtPmFzPE1l
bW9yeVZhbHVlPigpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gQWlyOjpPb3Bz
OworICAgICAgICAgICAgaWYgKG1lbW9yeS0+aGFzRmVuY2UoKSkgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAobWVtb3J5LT50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEludDMyOgor
ICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBMb2FkQWNxMzI7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICAgICAg
ICAgIG9wY29kZSA9IExvYWRBY3E2NDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgb3Bjb2RlID0gbW92ZUZv
clR5cGUobWVtb3J5LT50eXBlKCkpOworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdCht
X3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBMb2FkOFM6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9h
ZDhTaWduZWRFeHRlbmRUbzMyLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkp
KTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpLT5oYXNGZW5jZSgpID8gTG9hZEFjcThTaWduZWRFeHRlbmRUbzMyIDogTG9hZDhTaWdu
ZWRFeHRlbmRUbzMyOworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBv
cGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBMb2FkOFo6IHsKLSAgICAgICAg
ICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9hZDgsIG1fdmFsdWUsIGFkZHIobV92
YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0g
bV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxOCA6IExvYWQ4
OworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFs
dWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBMb2FkMTZTOiB7Ci0gICAgICAgICAgICBhcHBlbmQo
dHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIG1fdmFsdWUsIGFk
ZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bj
b2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxMTZT
aWduZWRFeHRlbmRUbzMyIDogTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMjsKKyAgICAgICAgICAgIGFw
cGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUp
LCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2UgTG9hZDE2WjogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3Zh
bHVlLCBMb2FkMTYsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAg
ICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkt
Pmhhc0ZlbmNlKCkgPyBMb2FkQWNxMTYgOiBMb2FkMTY7CisgICAgICAgICAgICBhcHBlbmQodHJh
cHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1f
dmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQorICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQWRkOiB7CiAgICAgICAgICAgICBpZiAodHJ5QXBwZW5kTGVhKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjA5Miw3ICsyNTAzLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0NoaWxsKCkpCiAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaXNBUk02NCgpKTsKICAgICAgICAgICAgIGlmIChpc0ludChtX3ZhbHVlLT50eXBl
KCkpICYmIGlzWDg2KCkpIHsKLSAgICAgICAgICAgICAgICBsb3dlclg4NkRpdihEaXYpOworICAg
ICAgICAgICAgICAgIGFwcGVuZFg4NkRpdihEaXYpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVCghaXNYODYoKSB8fCBpc0Zsb2F0KG1f
dmFsdWUtPnR5cGUoKSkpOwpAQCAtMjEwMyw3ICsyNTE0LDcgQEAgcHJpdmF0ZToKIAogICAgICAg
ICBjYXNlIFVEaXY6IHsKICAgICAgICAgICAgIGlmIChpc0ludChtX3ZhbHVlLT50eXBlKCkpICYm
IGlzWDg2KCkpIHsKLSAgICAgICAgICAgICAgICBsb3dlclg4NlVEaXYoVURpdik7CisgICAgICAg
ICAgICAgICAgYXBwZW5kWDg2VURpdihVRGl2KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAKQEAgLTIxMTcsMTMgKzI1MjgsMTMgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBNb2Q6IHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOwogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdmFsdWUtPmlzQ2hpbGwoKSk7Ci0gICAgICAgICAgICBs
b3dlclg4NkRpdihNb2QpOworICAgICAgICAgICAgYXBwZW5kWDg2RGl2KE1vZCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFVNb2Q6IHsKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOwotICAgICAgICAgICAgbG93ZXJYODZVRGl2KFVN
b2QpOworICAgICAgICAgICAgYXBwZW5kWDg2VURpdihVTW9kKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCkBAIC0yMTYyLDEwICsyNTczLDI0IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgYXBwZW5kVW5PcDxOb3QzMiwgTm90NjQ+KG1fdmFsdWUtPmNoaWxkKDApKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMSkKKyAgICAgICAgICAgICAgICAm
JiBpc0F0b21pY0NBUyhtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpCisgICAgICAgICAgICAg
ICAgJiYgY2FuQmVJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKKyAgICAgICAgICAgICAg
ICBjb21taXRJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgYXBw
ZW5kQ0FTKG1fdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPFhv
cjMyLCBYb3I2NCwgWG9yRG91YmxlLCBYb3JGbG9hdCwgQ29tbXV0YXRpdmU+KAogICAgICAgICAg
ICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERlcGVuZDog
eworICAgICAgICAgICAgYXBwZW5kVW5PcDxEZXBlbmQzMiwgRGVwZW5kNjQ+KG1fdmFsdWUtPmNo
aWxkKDApKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
U2hsOiB7CiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMSkpIHsK
QEAgLTIyNjYsNyArMjY5MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBhcHBlbmRTdG9yZSh2YWx1ZVRvU3RvcmUsIGFkZHIobV92
YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kU3RvcmUobV92YWx1ZSwgYWRkcihtX3ZhbHVlKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjI4Nyw3ICsyNzEyLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZFN0b3JlKEFpcjo6U3RvcmU4LCB2YWx1
ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kU3RvcmUobV92YWx1
ZSwgdmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC0yMzA4LDcgKzI3MzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYXBwZW5kU3RvcmUoQWlyOjpTdG9yZTE2LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkp
OworICAgICAgICAgICAgYXBwZW5kU3RvcmUobV92YWx1ZSwgdmFsdWVUb1N0b3JlLCBhZGRyKG1f
dmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yNDE2LDcgKzI4
NDEsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgRXF1YWw6Ci0gICAg
ICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgIGNhc2UgTm90RXF1YWw6IHsKKyAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTCisgICAg
ICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApID09IG1fdmFsdWUtPmNo
aWxkKDEpCisgICAgICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgw
KSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5zKG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKSkpOworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9sb2NrZWQu
Y29udGFpbnMobV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjb21taXRJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAg
ICAgYXBwZW5kQ0FTKG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5vcGNvZGUoKSA9PSBOb3RF
cXVhbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUo
bV92YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBMZXNzVGhhbjoKICAgICAgICAgY2FzZSBHcmVhdGVyVGhhbjoKICAgICAg
ICAgY2FzZSBMZXNzRXF1YWw6CkBAIC0yNzI3LDYgKzMxNjcsMzkgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2UgQnJhbmNoOiB7CisgICAgICAgICAgICBpZiAoY2FuQmVJbnRl
cm5hbChtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogYnJhbmNo
Q2hpbGQgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGJyYW5j
aENoaWxkLT5vcGNvZGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoK
KyAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwoYnJhbmNoQ2hpbGQpOworICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRDQVMoYnJhbmNoQ2hpbGQsIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgICAgICAgICAgICAgLy8gQSBicmFuY2ggaXMg
YSBjb21wYXJpc29uIHRvIHplcm8uCisgICAgICAgICAgICAgICAgICAgIGlmIChicmFuY2hDaGls
ZC0+Y2hpbGQoMCktPmlzSW50KDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJ
bnRlcm5hbChicmFuY2hDaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRDQVMo
YnJhbmNoQ2hpbGQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgICAgICAg
ICBjYXNlIE5vdEVxdWFsOgorICAgICAgICAgICAgICAgICAgICBpZiAoYnJhbmNoQ2hpbGQtPmNo
aWxkKDApLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMKKyAgICAgICAgICAgICAgICAgICAg
ICAgICYmIGNhbkJlSW50ZXJuYWwoYnJhbmNoQ2hpbGQtPm9wY29kZSgwKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICYmIGJyYW5jaENoaWxkLT5jaGlsZCgwKS0+Y2hpbGQoMCkgPT0gYnJhbmNo
Q2hpbGQtPmNoaWxkKDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5h
bChicmFuY2hDaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChi
cmFuY2hDaGlsZC0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ0FT
KGJyYW5jaENoaWxkLT5jaGlsZCgwKSwgYnJhbmNoQ2hpbGQtPm9wY29kZSgpID09IE5vdEVxdWFs
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKICAgICAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVCcmFu
Y2gobV92YWx1ZS0+Y2hpbGQoMCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtMjc4NCw3ICszMjU3LDgxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhcHBlbmQoQWlyOjpF
bnRyeVN3aXRjaCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAgIGNhc2UgQXRvbWljU3Ryb25n
Q0FTOiB7CisgICAgICAgICAgICBhcHBlbmRDQVMobV92YWx1ZSwgZmFsc2UpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNY
Y2hnQWRkOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8
QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0b21pYyhPUENPREVf
Rk9SX1dJRFRIKEF0b21pY0FkZCwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBBcmcgYWRkcmVzcyA9
IGFkZHIoYXRvbWljKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IE9QQ09ERV9G
T1JfV0lEVEgoQXRvbWljWGNoZ0FkZCwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKTsKKyAgICAg
ICAgICAgIGlmIChpc1ZhbGlkT3Bjb2RlKG9wY29kZSwgQXJnOjpUbXAsIGFkZHJlc3MpKSB7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUoKSks
IHRtcChhdG9taWMtPmNoaWxkKDApKSwgdG1wKGF0b21pYykpOworICAgICAgICAgICAgICAgIGFw
cGVuZChvcGNvZGUsIHRtcChhdG9taWMpLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BD
T0RFX0ZPUl9XSURUSChBZGQsIGNhbm9uaWNhbFdpZHRoKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgo
KSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCisgICAgICAgIGNhc2UgQXRv
bWljWGNoZ1N1YjogeworICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUt
PmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgaWYgKGFwcGVuZFZvaWRBdG9taWMoT1BD
T0RFX0ZPUl9XSURUSChBdG9taWNTdWIsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXBwZW5kR2Vu
ZXJhbEF0b21pYyhPUENPREVfRk9SX1dJRFRIKFN1YiwgY2Fub25pY2FsV2lkdGgoYXRvbWljLT5v
cGVyYXRpb25XaWR0aCgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNYY2hnQW5kOiB7CisgICAgICAgICAgICBBdG9t
aWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAg
ICBpZiAoYXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY0FuZCwgYXRvbWlj
LT5vcGVyYXRpb25XaWR0aCgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQW5k
LCBjYW5vbmljYWxXaWR0aChhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hj
aGdPcjogeworICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0
b21pY1ZhbHVlPigpOworICAgICAgICAgICAgaWYgKGFwcGVuZFZvaWRBdG9taWMoT1BDT0RFX0ZP
Ul9XSURUSChBdG9taWNPciwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRv
bWljKE9QQ09ERV9GT1JfV0lEVEgoT3IsIGNhbm9uaWNhbFdpZHRoKGF0b21pYy0+b3BlcmF0aW9u
V2lkdGgoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjogeworICAgICAgICAgICAgQXRvbWljVmFsdWUq
IGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgaWYgKGFw
cGVuZFZvaWRBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNYb3IsIGF0b21pYy0+b3BlcmF0
aW9uV2lkdGgoKSkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX1dJRFRIKFhvciwgY2Fub25p
Y2FsV2lkdGgoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNYY2hnOiB7Cisg
ICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihhdG9taWMp
OworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gT1BDT0RFX0ZPUl9XSURUSChBdG9t
aWNYY2hnLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpOworICAgICAgICAgICAgaWYgKGlzVmFs
aWRPcGNvZGUob3Bjb2RlLCBBcmc6OlRtcCwgYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBh
cHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgdG1wKGF0b21pYy0+Y2hp
bGQoMCkpLCB0bXAoYXRvbWljKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1w
KGF0b21pYyksIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVf
Rk9SX1dJRFRIKFhvciwgY2Fub25pY2FsV2lkdGgoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNzkyLDY0ICszMzM5
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZygiRkFUQUw6IGNvdWxkIG5vdCBsb3dlciAi
LCBkZWVwRHVtcChtX3Byb2NlZHVyZSwgbV92YWx1ZSksICJcbiIpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIHZvaWQgbG93ZXJYODZEaXYoQjM6
Ok9wY29kZSBvcCkKLSAgICB7Ci0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKLSAgICAgICAg
VG1wIGVheCA9IFRtcChYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgICAgIFRtcCBlZHggPSBUbXAo
WDg2UmVnaXN0ZXJzOjplZHgpOwotCi0gICAgICAgIEFpcjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJs
ZVdvcmQ7Ci0gICAgICAgIEFpcjo6T3Bjb2RlIGRpdjsKLSAgICAgICAgc3dpdGNoIChtX3ZhbHVl
LT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIGNvbnZlcnRUb0Rv
dWJsZVdvcmQgPSBYODZDb252ZXJ0VG9Eb3VibGVXb3JkMzI7Ci0gICAgICAgICAgICBkaXYgPSBY
ODZEaXYzMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAg
ICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb1F1YWRXb3JkNjQ7Ci0gICAg
ICAgICAgICBkaXYgPSBYODZEaXY2NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChvcCA9PSBEaXYgfHwgb3Ag
PT0gTW9kKTsKLSAgICAgICAgWDg2UmVnaXN0ZXJzOjpSZWdpc3RlcklEIHJlc3VsdCA9IG9wID09
IERpdiA/IFg4NlJlZ2lzdGVyczo6ZWF4IDogWDg2UmVnaXN0ZXJzOjplZHg7Ci0KLSAgICAgICAg
YXBwZW5kKE1vdmUsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIGVheCk7Ci0gICAgICAgIGFwcGVu
ZChjb252ZXJ0VG9Eb3VibGVXb3JkLCBlYXgsIGVkeCk7Ci0gICAgICAgIGFwcGVuZChkaXYsIGVh
eCwgZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIFRt
cChyZXN1bHQpLCB0bXAobV92YWx1ZSkpOwotCi0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0o
b3ApOwotICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSNlbmRpZgotICAgIH0K
LQotICAgIHZvaWQgbG93ZXJYODZVRGl2KEIzOjpPcGNvZGUgb3ApCi0gICAgewotI2lmIENQVShY
ODYpIHx8IENQVShYODZfNjQpCi0gICAgICAgIFRtcCBlYXggPSBUbXAoWDg2UmVnaXN0ZXJzOjpl
YXgpOwotICAgICAgICBUbXAgZWR4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWR4KTsKLQotICAgICAg
ICBBaXI6Ok9wY29kZSBkaXYgPSBtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyBYODZVRGl2MzIg
OiBYODZVRGl2NjQ7Ci0KLSAgICAgICAgQVNTRVJUKG9wID09IFVEaXYgfHwgb3AgPT0gVU1vZCk7
Ci0gICAgICAgIFg4NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCByZXN1bHQgPSBvcCA9PSBVRGl2ID8g
WDg2UmVnaXN0ZXJzOjplYXggOiBYODZSZWdpc3RlcnM6OmVkeDsKLQotICAgICAgICBhcHBlbmQo
TW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgZWF4KTsKLSAgICAgICAgYXBwZW5kKFhvcjY0
LCBlZHgsIGVkeCk7Ci0gICAgICAgIGFwcGVuZChkaXYsIGVheCwgZWR4LCB0bXAobV92YWx1ZS0+
Y2hpbGQoMSkpKTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChyZXN1bHQpLCB0bXAobV92YWx1
ZSkpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgVU5SRUFDSEFC
TEVfRk9SX1BMQVRGT1JNKCk7Ci0jZW5kaWYKLSAgICB9Ci0KKyAgICAKICAgICBJbmRleFNldDxW
YWx1ZT4gbV9sb2NrZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1w
IGluIEFpci4KICAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBtX3ZhbHVlVG9UbXA7IC8vIFRoZXNl
IGFyZSB2YWx1ZXMgdGhhdCBtdXN0IGhhdmUgYSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBhIFZh
bHVlKiB3aXRoIGEgbm9uLW51bGwgVG1wIGlzICJwaW5uZWQiLgogICAgIEluZGV4TWFwPFZhbHVl
LCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBUbXAuCkBAIC0yODY0
LDcgKzMzNTQsNyBAQCBwcml2YXRlOgogCiAgICAgVmVjdG9yPFZlY3RvcjxJbnN0LCA0Pj4gbV9p
bnN0czsKICAgICBWZWN0b3I8SW5zdD4gbV9wcm9sb2d1ZTsKLQorICAgIAogICAgIEIzOjpCYXNp
Y0Jsb2NrKiBtX2Jsb2NrOwogICAgIGJvb2wgbV9pc1JhcmU7CiAgICAgdW5zaWduZWQgbV9pbmRl
eDsKQEAgLTI4NzUsNiArMzM2NSwxMiBAQCBwcml2YXRlOgogCiAgICAgUHJvY2VkdXJlJiBtX3By
b2NlZHVyZTsKICAgICBDb2RlJiBtX2NvZGU7CisKKyAgICBBaXI6OkJsb2NrSW5zZXJ0aW9uU2V0
IG1fYmxvY2tJbnNlcnRpb25TZXQ7CisKKyAgICBUbXAgbV9lYXg7CisgICAgVG1wIG1fZWN4Owor
ICAgIFRtcCBtX2VkeDsKIH07CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCwzMCArMzQsNDggQEAgTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgpCiB7
CiB9CiAKK1R5cGUgTWVtb3J5VmFsdWU6OmFjY2Vzc1R5cGUoKSBjb25zdAoreworICAgIGlmIChp
c0xvYWQob3Bjb2RlKCkpKQorICAgICAgICByZXR1cm4gdHlwZSgpOworICAgIC8vIFRoaXMgaGFw
cGVucyB0byB3b3JrIGZvciBhdG9taWNzLCB0b28uIFRoYXQncyB3aHkgQXRvbWljVmFsdWUgZG9l
cyBub3QgbmVlZCB0byBvdmVycmlkZSB0aGlzLgorICAgIHJldHVybiBjaGlsZCgwKS0+dHlwZSgp
OworfQorCitCYW5rIE1lbW9yeVZhbHVlOjphY2Nlc3NCYW5rKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gYmFua0ZvclR5cGUoYWNjZXNzVHlwZSgpKTsKK30KKwogc2l6ZV90IE1lbW9yeVZhbHVlOjph
Y2Nlc3NCeXRlU2l6ZSgpIGNvbnN0CiB7CisgICAgcmV0dXJuIGJ5dGVzKGFjY2Vzc1dpZHRoKCkp
OworfQorCitXaWR0aCBNZW1vcnlWYWx1ZTo6bG9hZFN0b3JlV2lkdGgoKSBjb25zdAorewogICAg
IHN3aXRjaCAob3Bjb2RlKCkpIHsKICAgICBjYXNlIExvYWQ4WjoKICAgICBjYXNlIExvYWQ4UzoK
ICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiBXaWR0
aDg7CiAgICAgY2FzZSBMb2FkMTZaOgogICAgIGNhc2UgTG9hZDE2UzoKICAgICBjYXNlIFN0b3Jl
MTY6Ci0gICAgICAgIHJldHVybiAyOworICAgICAgICByZXR1cm4gV2lkdGgxNjsKICAgICBjYXNl
IExvYWQ6Ci0gICAgICAgIHJldHVybiBzaXplb2ZUeXBlKHR5cGUoKSk7CisgICAgICAgIHJldHVy
biB3aWR0aEZvclR5cGUodHlwZSgpKTsKICAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXR1cm4g
c2l6ZW9mVHlwZShjaGlsZCgwKS0+dHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlw
ZShjaGlsZCgwKS0+dHlwZSgpKTsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIFdpZHRo
ODsKICAgICB9CiB9CiAKIFdpZHRoIE1lbW9yeVZhbHVlOjphY2Nlc3NXaWR0aCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHdpZHRoRm9yQnl0ZXMoYWNjZXNzQnl0ZVNpemUoKSk7CisgICAgcmV0dXJu
IGxvYWRTdG9yZVdpZHRoKCk7CiB9CiAKIHZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1h
UHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC02Nyw2ICs4NSw4IEBA
IHZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYKICAgICBpZiAoKGlzTG9h
ZCgpICYmIGVmZmVjdHMoKS5yZWFkcyAhPSByYW5nZSgpKQogICAgICAgICB8fCAoaXNTdG9yZSgp
ICYmIGVmZmVjdHMoKS53cml0ZXMgIT0gcmFuZ2UoKSkpCiAgICAgICAgIG91dC5wcmludChjb21t
YSwgInJhbmdlID0gIiwgcmFuZ2UoKSk7CisgICAgaWYgKHBoYW50b21SYW5nZSgpKQorICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJwaGFudG9tUmFuZ2UgPSAiLCBwaGFudG9tUmFuZ2UoKSk7CiB9
CiAKIFZhbHVlKiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKQEAgLTc0LDYgKzk0LDU4
IEBAIFZhbHVlKiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKICAgICByZXR1cm4gbmV3
IE1lbW9yeVZhbHVlKCp0aGlzKTsKIH0KIAorLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0
IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZm
aXggdGhhdAorLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KK01lbW9yeVZhbHVlOjpN
ZW1vcnlWYWx1ZShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBv
aW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtp
bmQsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAg
ICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkp
IHsKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAg
ICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3Rv
cmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZv
aWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMg
Zm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCitNZW1vcnlW
YWx1ZTo6TWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRl
ciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDogTWVtb3J5VmFsdWUoa2luZCwgSW50MzIsIG9y
aWdpbiwgcG9pbnRlciwgb2Zmc2V0KQoreworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Cisg
ICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAg
ICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBM
b2FkMTZTOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRo
aXMgZm9ybSBmb3Igc3RvcmVzLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZz
ZXQgPSAwKQorICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2
YWx1ZSwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAgICBBU1NFUlQoaXNT
dG9yZShraW5kLm9wY29kZSgpKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiAj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNDggKzI3LDE3IEBACiAK
ICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNCYW5rLmgiCiAjaW5jbHVkZSAiQjNI
ZWFwUmFuZ2UuaCIKICNpbmNsdWRlICJCM1ZhbHVlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewogCi0vLyBGSVhNRTogV2Ugd2FudCB0byBhbGxvdyBmZW5jZWQgbWVtb3J5IGFj
Y2Vzc2VzIG9uIEFSTS4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjIzNDkKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5VmFsdWUgOiBwdWJsaWMg
VmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQogICAg
IHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9hZDha
OgotICAgICAgICBjYXNlIExvYWQ4UzoKLSAgICAgICAgY2FzZSBMb2FkMTZaOgotICAgICAgICBj
YXNlIExvYWQxNlM6Ci0gICAgICAgIGNhc2UgTG9hZDoKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0g
ICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaXNTdG9yZShLaW5kIGtpbmQpCi0g
ICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgY2FzZSBTdG9y
ZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaXNMb2FkKEtpbmQga2lu
ZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhY2NlcHRzKGtpbmQpICYmICFpc1N0b3JlKGtpbmQp
OworICAgICAgICByZXR1cm4gaXNNZW1vcnkoa2luZC5vcGNvZGUoKSk7CiAgICAgfQogCiAgICAg
fk1lbW9yeVZhbHVlKCk7CkBAIC03OCw3NiArNDcsNTYgQEAgcHVibGljOgogCiAgICAgY29uc3Qg
SGVhcFJhbmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KICAgICB2b2lkIHNl
dFJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9yYW5nZSA9IHJhbmdlOyB9CisgICAg
CisgICAgLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgcmFuZ2UuCisgICAgY29uc3QgSGVhcFJhbmdl
JiBhY2Nlc3NSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHJhbmdlKCk7IH0KKyAgICB2b2lkIHNldEFj
Y2Vzc1JhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgc2V0UmFuZ2UocmFuZ2UpOyB9Cisg
ICAgCisgICAgY29uc3QgSGVhcFJhbmdlJiBmZW5jZVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9m
ZW5jZVJhbmdlOyB9CisgICAgdm9pZCBzZXRGZW5jZVJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFu
Z2UpIHsgbV9mZW5jZVJhbmdlID0gcmFuZ2U7IH0KKworICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0
IHsgcmV0dXJuIGlzU3RvcmUob3Bjb2RlKCkpOyB9CisgICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7
IHJldHVybiBpc0xvYWQob3Bjb2RlKCkpOyB9CiAKLSAgICBib29sIGlzU3RvcmUoKSBjb25zdCB7
IHJldHVybiB0eXBlKCkgPT0gVm9pZDsgfQotICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyByZXR1
cm4gdHlwZSgpICE9IFZvaWQ7IH0KKyAgICBib29sIGhhc0ZlbmNlKCkgY29uc3QgeyByZXR1cm4g
ISFmZW5jZVJhbmdlKCk7IH0KIAorICAgIFR5cGUgYWNjZXNzVHlwZSgpIGNvbnN0OworICAgIEJh
bmsgYWNjZXNzQmFuaygpIGNvbnN0OwogICAgIHNpemVfdCBhY2Nlc3NCeXRlU2l6ZSgpIGNvbnN0
OwotICAgIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2xpZ2h0bHkg
ZmFzdGVyIHZlcnNpb24gb2YgYWNjZXNzV2lkdGgsIGlmIHlvdSBrbm93IHRoYXQgeW91J3JlIHdv
cmtpbmcgd2l0aCBhIGxvYWQgb3Igc3RvcmUuCisgICAgV2lkdGggbG9hZFN0b3JlV2lkdGgoKSBj
b25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CiAKIHBy
b3RlY3RlZDoKLSAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3Ry
ZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNv
bnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7Ci0K
LSAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBv
ciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0Ci0gICAgLy8gZGVzY3Jp
YmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIFR5cGUg
dHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkK
LSAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIHBvaW50
ZXIpCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIE1lbW9y
eVZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIEtpbmQga2luZCwgVHlwZSB0eXBlLCBPcmlnaW4gb3Jp
Z2luLCBpbnQzMl90IG9mZnNldCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBW
YWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAg
ICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6OnRv
cCgpKQogICAgIHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAg
IHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBMb2FkOgotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMb2FkOFo6Ci0gICAgICAgICAgICBj
YXNlIExvYWQ4UzoKLSAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKLSAgICAgICAgICAgIGNhc2Ug
TG9hZDE2UzoKLSAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgICAgIGNh
c2UgU3RvcmUxNjoKLSAgICAgICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHR5cGUgPT0gVm9pZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9CiAgICAgfQorICAgIAorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExv
YWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZl
IGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgorICAg
IE1lbW9yeVZhbHVlKEtpbmQsIFR5cGUsIE9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qg
b2Zmc2V0ID0gMCk7CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUg
cmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDog
TWVtb3J5VmFsdWUoa2luZCwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KQotICAgIHsK
LSAgICB9CisgICAgTWVtb3J5VmFsdWUoS2luZCwgT3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50
MzJfdCBvZmZzZXQgPSAwKTsKIAogICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KLSAg
ICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFs
dWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAgOiBWYWx1ZShDaGVja2Vk
T3Bjb2RlLCBraW5kLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQotICAgICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKLSAgICAgICAgLCBtX3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCi0gICAg
ewotICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgc3dpdGNoIChr
aW5kLm9wY29kZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgICAgIGNh
c2UgU3RvcmUxNjoKLSAgICAgICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCisgICAgTWVtb3J5VmFsdWUoS2luZCwgT3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZh
bHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAgIAogICAgIGludDMyX3QgbV9v
ZmZzZXQgeyAwIH07Ci0gICAgSGVhcFJhbmdlIG1fcmFuZ2U7CisgICAgSGVhcFJhbmdlIG1fcmFu
Z2UgeyBIZWFwUmFuZ2U6OnRvcCgpIH07CisgICAgSGVhcFJhbmdlIG1fZmVuY2VSYW5nZSB7IEhl
YXBSYW5nZSgpIH07CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcg
QEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSAi
QjNXaWR0aC5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KIApAQCAtODIsNyArODMsNiBAQCBlbnVtIE9wY29kZSA6IGludDE2X3Qgewog
ICAgIE1vZCwgLy8gQWxsIGJldHMgYXJlIG9mZiBhcyB0byB3aGF0IHdpbGwgaGFwcGVuIHdoZW4g
eW91IGV4ZWN1dGUgdGhpcyBmb3IgLTJeMzElLTEgYW5kIHglMC4KICAgICBVTW9kLAogCi0KICAg
ICAvLyBQb2x5bW9ycGhpYyBuZWdhdGlvbi4gTm90ZSB0aGF0IHdlIG9ubHkgbmVlZCB0aGlzIGZv
ciBmbG9hdGluZyBwb2ludCwgc2luY2UgaW50ZWdlciBuZWdhdGlvbgogICAgIC8vIGlzIGV4YWN0
bHkgbGlrZSBTdWIoMCwgeCkuIEJ1dCB0aGF0J3Mgbm90IHRydWUgZm9yIGZsb2F0aW5nIHBvaW50
LiBTdWIoMCwgMCkgaXMgMCwgd2hpbGUKICAgICAvLyBOZWcoMCkgaXMgLTAuIEFsc28sIHdlIGNh
bm9uaWNhbGl6ZSBTdWIoMCwgeCkgaW50byBOZWcoeCkgaW4gY2FzZSBvZiBpbnRlZ2Vycy4KQEAg
LTE2Miw2ICsxNjIsMTA3IEBAIGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgU3RvcmUxNiwK
ICAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMgc3RvcmUgZm9yIEludDMyLCBJbnQ2NCwgRmxv
YXQsIGFuZCBEb3VibGUuCiAgICAgU3RvcmUsCisgICAgCisgICAgLy8gQXRvbWljIGNvbXBhcmUg
YW5kIHN3YXAgdGhhdCByZXR1cm5zIGEgYm9vbGVhbi4gTWF5IGNob29zZSB0byBkbyBub3RoaW5n
IGFuZCByZXR1cm4gZmFsc2UuIFlvdSBjYW4KKyAgICAvLyB1c3VhbGx5IGFzc3VtZSB0aGF0IHRo
aXMgaXMgZmFzdGVyIGFuZCByZXN1bHRzIGluIGxlc3MgY29kZSB0aGFuIEF0b21pY1N0cm9uZ0NB
UywgdGhvdWdoIHRoYXQncworICAgIC8vIG5vdCBuZWNlc3NhcmlseSB0cnVlIG9uIEludGVsLCBp
ZiBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gZG9lcyBpdHMgam9iLiBJbWFnaW5lIHRoYXQgdGhpcyBv
cGNvZGUgaXMKKyAgICAvLyBhcyBpZiB5b3UgZGlkIHRoaXMgYXRvbWljYWxseToKKyAgICAvLwor
ICAgIC8vIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgLy8gYm9vbCBBdG9taWNXZWFrQ0FTKFQg
ZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSwgVCogcHRyKQorICAgIC8vIHsKKyAgICAvLyAgICAg
aWYgKCFyYW5kKCkpCisgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFJlYWwgd29ybGQg
ZXhhbXBsZSBvZiB0aGlzOiBjb250ZXh0IHN3aXRjaCBvbiBBUk0gd2hpbGUgZG9pbmcgQ0FTLgor
ICAgIC8vICAgICBpZiAoKnB0ciAhPSBleHBlY3RlZFZhbHVlKQorICAgIC8vICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIC8vICAgICAqcHRyID0gbmV3VmFsdWU7CisgICAgLy8gICAgIHJldHVy
biB0cnVlOworICAgIC8vIH0KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBhbGwgYXRvbWljcyBw
dXQgdGhlIHBvaW50ZXIgbGFzdCB0byBiZSBjb25zaXN0ZW50IHdpdGggaG93IGxvYWRzIGFuZCBz
dG9yZXMgd29yay4gVGhpcworICAgIC8vIGlzIGEgZ29vZnkgdHJhZGl0aW9uLCBidXQgaXQncyBo
YXJtbGVzcywgYW5kIGJldHRlciB0aGFuIGJlaW5nIGluY29uc2lzdGVudC4KKyAgICAvLworICAg
IC8vIE5vdGUgdGhhdCB3ZWFrIENBUyBoYXMgbm8gZmVuY2luZyBndWFyYW50ZWVzIHdoZW4gaXQg
ZmFpbHMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nCisgICAgLy8gdHJhbnNmb3JtYXRp
b24gaXMgYWx3YXlzIHZhbGlkOgorICAgIC8vCisgICAgLy8gQmVmb3JlOgorICAgIC8vCisgICAg
Ly8gICAgICAgICBCcmFuY2goQXRvbWljV2Vha0NBUyhleHBlY3RlZCwgbmV3LCBwdHIpKQorICAg
IC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I3N1Y2Nlc3MsIEVsc2U6I2ZhaWwKKyAgICAvLwor
ICAgIC8vIEFmdGVyOgorICAgIC8vCisgICAgLy8gICAgICAgICBCcmFuY2goRXF1YWwoTG9hZChw
dHIpLCBleHBlY3RlZCkpCisgICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhlbjojYXR0ZW1wdCwg
RWxzZTojZmFpbAorICAgIC8vICAgICBCQiNhdHRlbXB0OgorICAgIC8vICAgICAgICAgQnJhbmNo
KEF0b21pY1dlYWtDQVMoZXhwZWN0ZWQsIG5ldywgcHRyKSkKKyAgICAvLyAgICAgICBTdWNjZXNz
b3JzOiBUaGVuOiNzdWNjZXNzLCBFbHNlOiNmYWlsCisgICAgLy8KKyAgICAvLyBCb3RoIGtpbmRz
IG9mIENBUyBmb3Igbm9uLWNhbm9uaWNhbCB3aWR0aHMgKFdpZHRoOCBhbmQgV2lkdGgxNikgaWdu
b3JlIHRoZSBpcnJlbGV2YW50IGJpdHMgb2YgdGhlCisgICAgLy8gaW5wdXQuCisgICAgQXRvbWlj
V2Vha0NBUywKKyAgICAKKyAgICAvLyBBdG9taWMgY29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVy
bnMgdGhlIG9sZCB2YWx1ZS4gRG9lcyBub3QgaGF2ZSB0aGUgbm9uZGV0ZXJtaW5pc20gb2YgV2Vh
a0NBUy4KKyAgICAvLyBUaGlzIGlzIGEgYml0IG1vcmUgY29kZSBhbmQgYSBiaXQgc2xvd2VyIGlu
IHNvbWUgY2FzZXMsIHRob3VnaCBub3QgYnkgYSBsb3QuIEltYWdpbmUgdGhhdCB0aGlzCisgICAg
Ly8gb3Bjb2RlIGlzIGFzIGlmIHlvdSBkaWQgdGhpcyBhdG9taWNhbGx5OgorICAgIC8vCisgICAg
Ly8gdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAvLyBUIEF0b21pY1N0cm9uZ0NBUyhUIGV4cGVj
dGVkVmFsdWUsIFQgbmV3VmFsdWUsIFQqIHB0cikKKyAgICAvLyB7CisgICAgLy8gICAgIFQgb2xk
VmFsdWUgPSAqcHRyOworICAgIC8vICAgICBpZiAob2xkVmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZSkK
KyAgICAvLyAgICAgICAgICpwdHIgPSBuZXdWYWx1ZTsKKyAgICAvLyAgICAgcmV0dXJuIG9sZFZh
bHVlCisgICAgLy8gfQorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IEF0b21pY1dlYWtDQVMgYW5k
IEF0b21pY1N0cm9uZ0NBUyBzb3J0IG9mIGhhdmUgdGhpcyBraW5kIG9mIGVxdWl2YWxlbmNlOgor
ICAgIC8vCisgICAgLy8gQXRvbWljV2Vha0NBUyhAZXhwLCBAbmV3LCBAcHRyKSA9PSBFcXVhbChB
dG9taWNTdHJvbmdDQVMoQGV4cCwgQG5ldywgQHB0ciksIEBleHApCisgICAgLy8KKyAgICAvLyBB
c3N1bWluZyB0aGF0IHRoZSBXZWFrQ0FTIGRvZXMgbm90IHNwdXJpb3VzbHkgZmFpbCwgb2YgY291
cnNlLgorICAgIEF0b21pY1N0cm9uZ0NBUywKKyAgICAKKyAgICAvLyBBdG9taWNhbGx5IF9fXyBh
IG1lbW9yeSBsb2NhdGlvbiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuIFN5bnRheDoKKyAgICAv
LworICAgIC8vIEBvbGRWYWx1ZSA9IEF0b21pY1hjaGdfX18oQG9wZXJhbmQsIEBwdHIpCisgICAg
Ly8KKyAgICAvLyBGb3Igbm9uLWNhbm9uaWNhbCB3aWR0aHMgKFdpZHRoOCBhbmQgV2lkdGgxNiks
IHRoZXNlIHJldHVybiBzaWduLWV4dGVuZGVkIHJlc3VsdHMgYW5kIGlnbm9yZSB0aGUKKyAgICAv
LyBpcnJlbGV2YW50IGJpdHMgb2YgdGhlaXIgaW5wdXRzLgorICAgIEF0b21pY1hjaGdBZGQsCisg
ICAgQXRvbWljWGNoZ0FuZCwKKyAgICBBdG9taWNYY2hnT3IsCisgICAgQXRvbWljWGNoZ1N1YiwK
KyAgICBBdG9taWNYY2hnWG9yLAorICAgIAorICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQg
aGF2ZSBBdG9taWNYY2hnTmVnIGFuZCBBdG9taWNYY2hnTm90LgorICAgIAorICAgIC8vIEF0b21p
Y2FsbHkgZXhjaGFuZ2UgYSB2YWx1ZSB3aXRoIGEgbWVtb3J5IGxvY2F0aW9uLiBTeW50YXg6Cisg
ICAgLy8KKyAgICAvLyBAb2xkVmFsdWUgPSBBdG9taWNYY2hnKEBuZXdWYWx1ZSwgQHB0cikKKyAg
ICBBdG9taWNYY2hnLAorICAgIAorICAgIC8vIEludHJvZHVjZSBhbiBpbnZpc2libGUgZGVwZW5k
ZW5jeSBmb3IgYmxvY2tpbmcgbW90aW9uIG9mIGxvYWRzIHdpdGggcmVzcGVjdCB0byBlYWNoIG90
aGVyLiBTeW50YXg6CisgICAgLy8KKyAgICAvLyBAcmVzdWx0ID0gRGVwZW5kKEBwaGFudG9tKQor
ICAgIC8vCisgICAgLy8gVGhpcyBpcyBldmVudHVhbGx5IGNvZGVnZW5lcmF0ZWQgdG8gaGF2ZSBs
b2NhbCBzZW1hbnRpY3MgYXMgaWYgd2UgZGlkOgorICAgIC8vCisgICAgLy8gQHJlc3VsdCA9ICQw
CisgICAgLy8KKyAgICAvLyBCdXQgaXQgZW5zdXJlcyB0aGF0IHRoZSB1c2VycyBvZiBAcmVzdWx0
IGNhbm5vdCBleGVjdXRlIHVudGlsIEBwaGFudG9tIGlzIGNvbXB1dGVkLgorICAgIC8vCisgICAg
Ly8gVGhlIGNvbXBpbGVyIGlzIG5vdCBhbGxvd2VkIHRvIHJlYXNvbiBhYm91dCB0aGUgZmFjdCB0
aGF0IERlcGVuZCBjb2RlZ2VuZXJhdGVzIHRoaXMgd2F5LiBBbnkga2luZAorICAgIC8vIG9mIHRy
YW5zZm9ybWF0aW9uIG9yIGFuYWx5c2lzIHRoYXQgcmVsaWVzIG9uIHRoZSBpbnNpZ2h0IHRoYXQg
RGVwZW5kIGlzIHJlYWxseSB6ZXJvIGlzIHVuc291bmQsCisgICAgLy8gYmVjYXVzZSBpdCB1bmxv
Y2tzIHJlb3JkZXJpbmcgb2YgdXNlcnMgb2YgQHJlc3VsdCBhbmQgQHBoYW50b20uCisgICAgLy8K
KyAgICAvLyBPbiBYODYsIHRoaXMgaXMgbG93ZXJlZCB0byBhIGxvYWQtbG9hZCBmZW5jZSBhbmQg
QHJlc3VsdCB1c2VzIEBwaGFudG9tIGRpcmVjdGx5LgorICAgIC8vCisgICAgLy8gT24gQVJNLCB0
aGlzIGlzIGxvd2VyZWQgYXMgaWYgbGlrZToKKyAgICAvLworICAgIC8vIEByZXN1bHQgPSBCaXRY
b3IoQHBoYW50b20sIEBwaGFudG9tKQorICAgIC8vCisgICAgLy8gRXhjZXB0IHRoYXQgdGhlIGNv
bXBpbGVyIG5ldmVyIGdldHMgYW4gb3Bwb3J0dW5pdHkgdG8gc2ltcGxpZnkgb3V0IHRoZSBCaXRY
b3IuCisgICAgRGVwZW5kLAogCiAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIGFj
dHVhbCBhZGRyZXNzIG9mIGEgV2FzbSBtZW1vcnkgb3BlcmF0aW9uLiBJdCB0YWtlcyBhbiBJbnRQ
dHIKICAgICAvLyBhbmQgYSBwaW5uZWQgcmVnaXN0ZXIgdGhlbiBjb21wdXRlcyB0aGUgYXBwcm9w
cmlhdGUgSW50UHRyIGFkZHJlc3MuIEZvciB0aGUgdXNlLWNhc2Ugb2YKQEAgLTMwMSw2ICs0MDIs
MTEwIEBAIGlubGluZSBib29sIGlzRGVmaW5pdGVseVRlcm1pbmFsKE9wY29kZSAKICAgICB9CiB9
CiAKK2lubGluZSBib29sIGlzTG9hZChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bj
b2RlKSB7CisgICAgY2FzZSBMb2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2Fk
MTZaOgorICAgIGNhc2UgTG9hZDE2UzoKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lu
bGluZSBib29sIGlzU3RvcmUoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkg
eworICAgIGNhc2UgU3RvcmU4OgorICAgIGNhc2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0xvYWRTdG9yZShPcGNvZGUgb3Bjb2RlKQorewor
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBMb2FkOFo6CisgICAgY2FzZSBMb2FkOFM6
CisgICAgY2FzZSBMb2FkMTZaOgorICAgIGNhc2UgTG9hZDE2UzoKKyAgICBjYXNlIExvYWQ6Cisg
ICAgY2FzZSBTdG9yZTg6CisgICAgY2FzZSBTdG9yZTE2OgorICAgIGNhc2UgU3RvcmU6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK2lubGluZSBib29sIGlzQXRvbWljKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dp
dGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNT
dHJvbmdDQVM6CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0Fu
ZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAg
Y2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
aW5saW5lIGJvb2wgaXNBdG9taWNDQVMoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9w
Y29kZSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NB
UzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNBdG9taWNYY2hnKE9wY29kZSBvcGNvZGUp
Cit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAg
Y2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRv
bWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hn
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc01lbW9yeUFjY2VzcyhPcGNvZGUgb3Bjb2Rl
KQoreworICAgIHJldHVybiBpc0F0b21pYyhvcGNvZGUpIHx8IGlzTG9hZFN0b3JlKG9wY29kZSk7
Cit9CisKK2lubGluZSBPcGNvZGUgc2lnbkV4dGVuZE9wY29kZShXaWR0aCB3aWR0aCkKK3sKKyAg
ICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgY2FzZSBXaWR0aDg6CisgICAgICAgIHJldHVybiBTRXh0
ODsKKyAgICBjYXNlIFdpZHRoMTY6CisgICAgICAgIHJldHVybiBTRXh0MTY7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IE9vcHM7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogbmFtZXNwYWNl
IFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw2ICsyMDIsOCBAQCB2b2lkIFByb2NlZHVyZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjCiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygiICAgICIs
IGRlZXBEdW1wKCp0aGlzLCB2YWx1ZSksICJcbiIpOwogICAgIH0KKyAgICBpZiAoaGFzUXVpcmtz
KCkpCisgICAgICAgIG91dC5wcmludCgiSGFzIFF1aXJrczogVHJ1ZVxuIik7CiAgICAgaWYgKHZh
cmlhYmxlcygpLnNpemUoKSkgewogICAgICAgICBvdXQucHJpbnQoIlZhcmlhYmxlczpcbiIpOwog
ICAgICAgICBmb3IgKFZhcmlhYmxlKiB2YXJpYWJsZSA6IHZhcmlhYmxlcygpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTcsNiArMTE3LDcgQEAgcHVibGljOgogICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChPcmlnaW4s
IFR5cGUsIGludDY0X3QgdmFsdWUpOwogICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChWYWx1ZSos
IGludDY0X3QgdmFsdWUpOwogCisgICAgLy8gWW91J3JlIGd1YXJhbnRlZWQgdGhhdCBib3R0b20g
aXMgemVyby4KICAgICBWYWx1ZSogYWRkQm90dG9tKE9yaWdpbiwgVHlwZSk7CiAgICAgVmFsdWUq
IGFkZEJvdHRvbShWYWx1ZSopOwogCkBAIC0xOTUsNiArMTk2LDEyIEBAIHB1YmxpYzoKICAgICAv
LyBhbGl2ZS4gR3JlYXQgZm9yIGNvbXBpbGVyLWdlbmVyYXRlZCBkYXRhIHNlY3Rpb25zLCBsaWtl
IHN3aXRjaCBqdW1wIHRhYmxlcyBhbmQgY29uc3RhbnQgcG9vbHMuCiAgICAgLy8gVGhpcyByZXR1
cm5zIG1lbW9yeSB0aGF0IGhhcyBiZWVuIHplcm8taW5pdGlhbGl6ZWQuCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogYWRkRGF0YVNlY3Rpb24oc2l6ZV90KTsKKyAgICAKKyAgICAvLyBTb21l
IG9wZXJhdGlvbnMgYXJlIHNwZWNpZmllZCBpbiBCMyBJUiB0byBiZWhhdmUgb25lIHdheSBidXQg
b24gdGhpcyBnaXZlbiBDUFUgdGhleSBiZWhhdmUgYQorICAgIC8vIGRpZmZlcmVudCB3YXkuIFdo
ZW4gdHJ1ZSwgdGhvc2UgQjMgSVIgb3BzIHN3aXRjaCB0byBiZWhhdmluZyB0aGUgQ1BVIHdheSwg
YW5kIHRoZSBvcHRpbWl6ZXIgbWF5CisgICAgLy8gc3RhcnQgdGFraW5nIGFkdmFudGFnZSBvZiBp
dC4KKyAgICBib29sIGhhc1F1aXJrcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUXVpcmtzOyB9Cisg
ICAgdm9pZCBzZXRIYXNRdWlya3MoYm9vbCB2YWx1ZSkgeyBtX2hhc1F1aXJrcyA9IHZhbHVlOyB9
CiAKICAgICBPcGFxdWVCeXByb2R1Y3RzJiBieXByb2R1Y3RzKCkgeyByZXR1cm4gKm1fYnlwcm9k
dWN0czsgfQogCkBAIC0yNTIsNiArMjU5LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKFByaW50U3RyZWFtJiwgT3JpZ2luKT4+IG1fb3JpZ2luUHJpbnRlcjsKICAgICBj
b25zdCB2b2lkKiBtX2Zyb250ZW5kRGF0YTsKICAgICBQQ1RvT3JpZ2luTWFwIG1fcGNUb09yaWdp
bk1hcDsKKyAgICBib29sIG1faGFzUXVpcmtzIHsgZmFsc2UgfTsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3Ry
ZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVj
ZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIE5lZzoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTmVn
KGNvbnN0YW50KQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiAtY29uc3RhbnQKQEAgLTEyOTUs
NiArMTI5NSwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICghbV9wcm9jLmhhc1F1aXJrcygpKSB7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBT
RXh0OChBdG9taWNYY2hnX19fKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQXRvbWlj
WGNoZ19fXworICAgICAgICAgICAgICAgIGlmIChpc0F0b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQo
MCktPm9wY29kZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+
YXM8QXRvbWljVmFsdWU+KCktPm9wZXJhdGlvbldpZHRoKCkgPT0gV2lkdGg4KSB7CisgICAgICAg
ICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNFeHQxNjoKQEAgLTEzNDMsNiAr
MTM1MywxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbV9wcm9jLmhhc1F1
aXJrcygpKSB7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoQXRvbWljWGNo
Z19fXykKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEF0b21pY1hjaGdfX18KKyAgICAg
ICAgICAgICAgICBpZiAoaXNBdG9taWNYY2hnKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVl
PigpLT5vcGVyYXRpb25XaWR0aCgpID09IFdpZHRoMTYpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIGNhc2UgU0V4dDMyOgpAQCAtMjEwMSwyMiArMjEyMSwyNSBAQCBw
cml2YXRlOgogICAgICAgICBBU1NFUlQobV92YWx1ZS0+bnVtQ2hpbGRyZW4oKSA+PSAyKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIExlYXZlIGl0IGFsb25lIGlmIHRoZSByaWdodCBjaGlsZCBpcyBh
IGNvbnN0YW50LgotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0NvbnN0YW50KCkKKyAgICAgICAgICAg
IHx8IG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkt
PmlzQ29uc3RhbnQoKSkgeworICAgICAgICBhdXRvIHN3YXAgPSBbJl0gKCkgewogICAgICAgICAg
ICAgc3RkOjpzd2FwKG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAg
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
aXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN3YXAoKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKQor
ICAgICAgICAgICAgcmV0dXJuIHN3YXAoKTsKKyAgICAgICAgCiAgICAgICAgIC8vIFNvcnQgdGhl
IG9wZXJhbmRzLiBUaGlzIGlzIGFuIGltcG9ydGFudCBjYW5vbmljYWxpemF0aW9uLiBXZSB1c2Ug
dGhlIGluZGV4IGluc3RlYWQgb2YKICAgICAgICAgLy8gdGhlIGFkZHJlc3MgdG8gbWFrZSB0aGlz
IGF0IGxlYXN0IHNsaWdodGx5IGRldGVybWluaXN0aWMuCi0gICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgwKS0+aW5kZXgoKSA+IG1fdmFsdWUtPmNoaWxkKDEpLT5pbmRleCgpKSB7Ci0gICAgICAg
ICAgICBzdGQ6OnN3YXAobV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pbmRleCgpID4gbV92YWx1ZS0+Y2hp
bGQoMSktPmluZGV4KCkpCisgICAgICAgICAgICByZXR1cm4gc3dhcCgpOwogICAgIH0KIAogICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgYmUgYSBmb3J3YXJkIGFuYWx5c2lzLiBJbnN0
ZWFkLCB3ZSB1c2VzIGEgYm91bmRlZC1zZWFyY2ggYmFja3dhcmRzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw2
ICszNDYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNo
aWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1
ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIExvYWQ6CkBAIC0zNTMsNiArMzU0LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEs
ICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxk
KDApLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgdmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAg
dmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIFN0b3JlODoKQEAgLTM2Miw2ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gSW50MzIsICgiQXQg
IiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50
eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgdmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRh
dGVTdGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIFN0b3JlOgpAQCAtMzY5LDggKzM3Miw0OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsK
ICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2lu
dGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2
YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNz
KHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXRvbWlj
V2Vha0NBUzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxs
KCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51
bUNoaWxkcmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDEp
LT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJ
bnQodmFsdWUtPmNoaWxkKDApLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgyKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCks
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUp
OworICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDMs
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUo
KSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgp
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVl
LT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5jaGlsZCgyKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOworICAgICAgICAgICAgICAg
IHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hn
QW5kOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgICAgICAgICBjYXNlIEF0
b21pY1hjaGdTdWI6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgICAgICAg
ICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5k
KCkuaXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+
dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgIHZhbGlkYXRlQXRvbWljKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB2
YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgRGVwZW5kOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2lu
ZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5
cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2
YWx1ZS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgV2FzbUFkZHJlc3M6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUo
IXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFs
dWUpKTsKQEAgLTUzNyw2ICs1ODEsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGVGZW5jZShWYWx1ZSogdmFs
dWUpCisgICAgeworICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpOworICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKQorICAgICAgICAgICAg
VkFMSURBVEUobWVtb3J0eS0+YWNjZXNzQmFuaygpID09IEdQLCAoIkZlbmNlIGF0ICIsICptZW1v
cnkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZUF0b21pYyhWYWx1ZSogdmFsdWUp
CisgICAgeworICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gdmFsdWUtPmFzPEF0b21pY1Zh
bHVlPigpOworICAgICAgICAKKyAgICAgICAgVkFMSURBVEUoYmVzdFR5cGUoYXRvbWljLT5vcGVy
YXRpb25XaWR0aCgpKSA9PSBhdG9taWMtPm9wZXJhdGlvblR5cGUoKSwgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICB9CiAKICAgICB2b2lkIHZhbGlkYXRlU3RhY2tBY2Nlc3MoVmFsdWUqIHZhbHVlKQog
ICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTEwLDYgKzUxMCw3IEBAIGJvb2wgVmFsdWU6OnJldHVybnNCb29sKCkgY29uc3QK
ICAgICBjYXNlIEFib3ZlRXF1YWw6CiAgICAgY2FzZSBCZWxvd0VxdWFsOgogICAgIGNhc2UgRXF1
YWxPclVub3JkZXJlZDoKKyAgICBjYXNlIEF0b21pY1dlYWtDQVM6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGNhc2UgUGhpOgogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSBz
dG9yeSBoZXJlLgpAQCAtNTg5LDYgKzU5MCw3IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBj
b25zdAogICAgIGNhc2UgQmVsb3dFcXVhbDoKICAgICBjYXNlIEVxdWFsT3JVbm9yZGVyZWQ6CiAg
ICAgY2FzZSBTZWxlY3Q6CisgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgRGl2OgogICAgIGNhc2UgVURpdjoKQEAgLTYwMCwxNiArNjAyLDQ0IEBAIEVmZmVjdHMgVmFs
dWU6OmVmZmVjdHMoKSBjb25zdAogICAgIGNhc2UgTG9hZDhTOgogICAgIGNhc2UgTG9hZDE2WjoK
ICAgICBjYXNlIExvYWQxNlM6Ci0gICAgY2FzZSBMb2FkOgotICAgICAgICByZXN1bHQucmVhZHMg
PSBhczxNZW1vcnlWYWx1ZT4oKS0+cmFuZ2UoKTsKKyAgICBjYXNlIExvYWQ6IHsKKyAgICAgICAg
TWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICByZXN1bHQu
cmVhZHMgPSBtZW1vcnktPnJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPnBoYW50b21SYW5n
ZSgpKSB7CisgICAgICAgICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5waGFudG9tUmFuZ2Uo
KTsKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAg
cmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICBicmVhazsKKyAgICB9CiAg
ICAgY2FzZSBTdG9yZTg6CiAgICAgY2FzZSBTdG9yZTE2OgotICAgIGNhc2UgU3RvcmU6Ci0gICAg
ICAgIHJlc3VsdC53cml0ZXMgPSBhczxNZW1vcnlWYWx1ZT4oKS0+cmFuZ2UoKTsKKyAgICBjYXNl
IFN0b3JlOiB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBhczxNZW1vcnlWYWx1ZT4o
KTsKKyAgICAgICAgcmVzdWx0LndyaXRlcyA9IG1lbW9yeS0+cmFuZ2UoKTsKKyAgICAgICAgaWYg
KG1lbW9yeS0+cGhhbnRvbVJhbmdlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5yZWFkcyA9IG1l
bW9yeS0+cGhhbnRvbVJhbmdlKCk7CisgICAgICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0b21p
Y1N0cm9uZ0NBUzoKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBBdG9taWNYY2hn
QW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAg
ICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hnOiB7CisgICAgICAgIE1l
bW9yeVZhbHVlKiBtZW1vcnkgPSBhczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LnJl
YWRzID0gbWVtb3J5LT5yYW5nZSgpIHwgbWVtb3J5LT5waGFudG9tUmFuZ2UoKTsKKyAgICAgICAg
cmVzdWx0LndyaXRlcyA9IG1lbW9yeS0+cmFuZ2UoKSB8IG1lbW9ydHktPnBoYW50b21SYW5nZSgp
OworICAgICAgICBpZiAobWVtb3J5LT5waGFudG9tUmFuZ2UoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC5mZW5jZSA9IHRydWU7CiAgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsK
ICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgV2FzbUFkZHJlc3M6CiAgICAgICAgIHJl
c3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwpAQCAtNjE3LDE4ICs2NDcs
NyBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICAgICAgY29uc3QgRmVuY2VW
YWx1ZSogZmVuY2UgPSBhczxGZW5jZVZhbHVlPigpOwogICAgICAgICByZXN1bHQucmVhZHMgPSBm
ZW5jZS0+cmVhZDsKICAgICAgICAgcmVzdWx0LndyaXRlcyA9IGZlbmNlLT53cml0ZTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIFByZXZlbnQga2lsbGluZyBvZiBmZW5jZXMgdGhhdCBjbGFpbSBub3Qg
dG8gd3JpdGUgYW55dGhpbmcuIEl0J3MgYSBiaXQgd2VpcmQgdGhhdCB3ZSB1c2UKLSAgICAgICAg
Ly8gbG9jYWwgc3RhdGUgYXMgdGhlIHdheSB0byBkbyB0aGlzLCBidXQgaXQgaGFwcGVucyB0byB3
b3JrOiB3ZSBtdXN0IGFzc3VtZSB0aGF0IHdlIGNhbm5vdAotICAgICAgICAvLyBraWxsIHdyaXRl
c0xvY2FsU3RhdGUgdW5sZXNzIHdlIHVuZGVyc3RhbmRzIGV4YWN0bHkgd2hhdCB0aGUgaW5zdHJ1
Y3Rpb24gaXMgZG9pbmcgKGxpa2UKLSAgICAgICAgLy8gdGhlIHdheSB0aGF0IGZpeFNTQSB1bmRl
cnN0YW5kcyBTZXQvR2V0IGFuZCB0aGUgd2F5IHRoYXQgcmVkdWNlU3RyZW5ndGggYW5kIG90aGVy
cwotICAgICAgICAvLyB1bmRlcnN0YW5kIFVwc2lsb24pLiBUaGlzIHdvdWxkIG9ubHkgYmVjb21l
IGEgcHJvYmxlbSBpZiB3ZSBoYWQgc29tZSBhbmFseXNpcyB0aGF0IHdhcwotICAgICAgICAvLyBs
b29raW5nIHRvIHVzZSB0aGUgd3JpdGVzTG9jYWxTdGF0ZSBiaXQgdG8gaW52YWxpZGF0ZSBhIENT
RSBvdmVyIGxvY2FsIHN0YXRlIG9wZXJhdGlvbnMuCi0gICAgICAgIC8vIFRoZW4gYSBGZW5jZSB3
b3VsZCBsb29rIGJsb2NrLCBzYXksIHRoZSBlbGltaW5hdGlvbiBvZiBhIHJlZHVuZGFudCBHZXQu
IEJ1dCBpdCBsaWtlCi0gICAgICAgIC8vIHRoYXQncyBub3QgYXQgYWxsIGhvdyBvdXIgb3B0aW1p
emF0aW9ucyBmb3IgU2V0L0dldC9VcHNpbG9uL1BoaSB3b3JrIC0gdGhleSBncm9rIHRoZWlyCi0g
ICAgICAgIC8vIG9wZXJhdGlvbnMgZGVlcGx5IGVub3VnaCB0aGF0IHRoZXkgaGF2ZSBubyBuZWVk
IHRvIGNoZWNrIHRoaXMgYml0IC0gc28gdGhpcyBjaGVhdCBpcwotICAgICAgICAvLyBmaW5lLgot
ICAgICAgICByZXN1bHQud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CisgICAgICAgIHJlc3VsdC5m
ZW5jZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENDYWxsOgpAQCAt
Njk0LDYgKzcxMyw3IEBAIFZhbHVlS2V5IFZhbHVlOjprZXkoKSBjb25zdAogICAgIGNhc2UgQ2hl
Y2s6CiAgICAgY2FzZSBCaXR3aXNlQ2FzdDoKICAgICBjYXNlIE5lZzoKKyAgICBjYXNlIERlcGVu
ZDoKICAgICAgICAgcmV0dXJuIFZhbHVlS2V5KGtpbmQoKSwgdHlwZSgpLCBjaGlsZCgwKSk7CiAg
ICAgY2FzZSBBZGQ6CiAgICAgY2FzZSBTdWI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDEwIEBAIHB1YmxpYzoKICAgICAKICAg
ICBPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4ga2luZCgpLm9wY29kZSgpOyB9CiAgICAg
CisgICAgLy8gTm90ZSB0aGF0IHRoZSBraW5kIGlzIG1lYW50IHRvIGJlIGltbXV0YWJsZS4gRG8g
dGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgdGhpcyBpcyBzYWZlLiBJdCdzIG5vdAorICAgIC8vIHVz
dWFsbHkgc2FmZS4KKyAgICB2b2lkIHNldEtpbmRVbnNhZmVseShLaW5kIGtpbmQpIHsgbV9raW5k
ID0ga2luZDsgfQorICAgIAogICAgIC8vIEl0J3MgZ29vZCBwcmFjdGljZSB0byBtaXJyb3IgS2lu
ZCBtZXRob2RzIGhlcmUsIHNvIHlvdSBjYW4gc2F5IHZhbHVlLT5pc0JsYWgoKQogICAgIC8vIGlu
c3RlYWQgb2YgdmFsdWUtPmtpbmQoKS5pc0JsYWgoKS4KICAgICBib29sIGlzQ2hpbGwoKSBjb25z
dCB7IHJldHVybiBraW5kKCkuaXNDaGlsbCgpOyB9CkBAIC0xMDcsNiArMTExLDggQEAgcHVibGlj
OgogICAgIC8vIHZhbHVlcyB3aXRoIElkZW50aXRpZXMgb24gYm90dG9tIGNvbnN0YW50cy4gRm9y
IHRoaXMgcmVhc29uLCB0aGlzIHRha2VzIGEgY2FsbGJhY2sgdGhhdCBpcwogICAgIC8vIHJlc3Bv
bnNpYmxlIGZvciBjcmVhdGluZyBib3R0b21zLiBUaGVyZSdzIGEgdXRpbGl0eSBmb3IgdGhpcywg
c2VlIEIzQm90dG9tUHJvdmlkZXIuaC4gWW91CiAgICAgLy8gY2FuIGFsc28gYWNjZXNzIHRoYXQg
dXRpbGl0eSB1c2luZyByZXBsYWNlV2l0aEJvdHRvbShJbnNlcnRpb25TZXQmLCBzaXplX3QpLgor
ICAgIC8vCisgICAgLy8gWW91J3JlIGd1YXJhbnRlZWQgdGhhdCBib3R0b20gaXMgemVyby4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBCb3R0b21Qcm92aWRlcj4KICAgICB2b2lkIHJlcGxhY2VXaXRo
Qm90dG9tKGNvbnN0IEJvdHRvbVByb3ZpZGVyJik7CiAgICAgCkBAIC0zMjEsNiArMzI3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBJVG9GOgogICAgICAgICBjYXNlIEJpdHdpc2VDYXN0Ogog
ICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkobnVtQXJncyAhPSAxKSkKICAgICAgICAgICAgICAgICBiYWRLaW5kKGtpbmQs
IG51bUFyZ3MpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNXaWR0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzV2lkdGguY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNXaWR0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDM4IEBACiAKICNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIAorbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK1R5cGUgYmVzdFR5cGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0aCkKK3sKKyAgICBzd2l0Y2gg
KHdpZHRoKSB7CisgICAgY2FzZSBXaWR0aDg6CisgICAgY2FzZSBXaWR0aDE2OgorICAgIGNhc2Ug
V2lkdGgzMjoKKyAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgIGNhc2UgR1A6CisgICAg
ICAgICAgICByZXR1cm4gSW50MzI7CisgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICByZXR1
cm4gRmxvYXQ7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICBzd2l0
Y2ggKGJhbmspIHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBJbnQ2NDsK
KyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBEb3VibGU7CisgICAgICAgIH0K
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZv
aWQ7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IFZvaWQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCiBuYW1lc3BhY2UgV1RGIHsK
IAogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6QjM6OldpZHRoIHdp
ZHRoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Miw2ICs2MiwxOCBAQCBpbmxpbmUgV2lkdGggd2lkdGhGb3JUeXBlKFR5cGUgdHlwZSkKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAoraW5saW5lIFdpZHRoIGNhbm9uaWNhbFdpZHRo
KFdpZHRoIHdpZHRoKQoreworICAgIHJldHVybiBzdGQ6Om1heChXaWR0aDMyLCB3aWR0aCk7Cit9
CisKK2lubGluZSBXaWR0aCBpc0Nhbm9uaWNhbFdpZHRoKFdpZHRoIHdpZHRoKQoreworICAgIHJl
dHVybiB3aWR0aCA+PSBXaWR0aDMyOworfQorCitUeXBlIGJlc3RUeXBlKEJhbmsgYmFuaywgV2lk
dGggd2lkdGgpOworCiBpbmxpbmUgV2lkdGggY29uc2VydmF0aXZlV2lkdGgoQmFuayBiYW5rKQog
ewogICAgIHJldHVybiBiYW5rID09IEdQID8gcG9pbnRlcldpZHRoKCkgOiBXaWR0aDY0OwpAQCAt
OTMsNiArMTA1LDIwIEBAIGlubGluZSBXaWR0aCB3aWR0aEZvckJ5dGVzKHVuc2lnbmVkIGJ5dGUK
ICAgICB9CiB9CiAKK2lubGluZSB1aW50NjRfdCBtYXNrKFdpZHRoIHdpZHRoKQoreworICAgIHN3
aXRjaCAod2lkdGgpIHsKKyAgICBjYXNlIFdpZHRoODoKKyAgICAgICAgcmV0dXJuIDB4MDAwMDAw
MDAwMDAwMDBmZmxsdTsKKyAgICBjYXNlIFdpZHRoMTY6CisgICAgICAgIHJldHVybiAweDAwMDAw
MDAwMDAwMGZmZmZsbHU7CisgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICByZXR1cm4gMHgwMDAw
MDAwMGZmZmZmZmZmbGx1OworICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgcmV0dXJuIDB4ZmZm
ZmZmZmZmZmZmZmZmZmxsdTsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwog
CiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBAIHVuc2lnbmVkIEFy
Zzo6anNIYXNoKCkgY29uc3QKICAgICBjYXNlIFJlbENvbmQ6CiAgICAgY2FzZSBSZXNDb25kOgog
ICAgIGNhc2UgRG91YmxlQ29uZDoKKyAgICBjYXNlIFN0YXR1c0NvbmQ6CiAgICAgY2FzZSBXaWR0
aEFyZzoKICAgICAgICAgcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29mZnNldCk7
CiAgICAgICAgIGJyZWFrOwpAQCAtMTgyLDYgKzE4Myw5IEBAIHZvaWQgQXJnOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAgICBvdXQucHJp
bnQoYXNEb3VibGVDb25kaXRpb24oKSk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YXR1
c0NvbmQ6CisgICAgICAgIG91dC5wcmludChhc1N0YXR1c0NvbmRpdGlvbigpKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgU3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1w
KHNwZWNpYWwoKSkpOwogICAgICAgICByZXR1cm47CkBAIC0yNDEsNiArMjQ1LDkgQEAgdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZwogICAgIGNhc2UgQXJnOjpEb3VibGVD
b25kOgogICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUNvbmQiKTsKICAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQXJnOjpTdGF0dXNDb25kOgorICAgICAgICBvdXQucHJpbnQoIlN0YXR1c0NvbmQi
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpTcGVjaWFsOgogICAgICAgICBvdXQu
cHJpbnQoIlNwZWNpYWwiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjg1LDYgKzI5Miw5IEBAIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFyZzo6RWFy
bHlEZWY6CiAgICAgICAgIG91dC5wcmludCgiRWFybHlEZWYiKTsKICAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQXJnOjpFYXJseVpEZWY6CisgICAgICAgIG91dC5wcmludCgiRWFybHlaRGVmIik7
CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6U2NyYXRjaDoKICAgICAgICAgb3V0LnBy
aW50KCJTY3JhdGNoIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIFJlbENvbmQsCiAgICAgICAgIFJlc0NvbmQsCiAgICAgICAgIERvdWJsZUNv
bmQsCisgICAgICAgIFN0YXR1c0NvbmQsCiAgICAgICAgIFNwZWNpYWwsCiAgICAgICAgIFdpZHRo
QXJnCiAgICAgfTsKQEAgLTE1MSw2ICsxNTIsOCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGFzIFVz
ZSBoYXMgdW5kZWZpbmVkIGJlaGF2aW9yOiB0aGUgdXNlIG1heSBoYXBwZW4gYmVmb3JlIHRoZSBk
ZWYsIG9yIGl0IG1heSBoYXBwZW4gYWZ0ZXIKICAgICAgICAgLy8gaXQuCiAgICAgICAgIEVhcmx5
RGVmLAorICAgICAgICAgICAgCisgICAgICAgIEVhcmx5WkRlZiwKIAogICAgICAgICAvLyBTb21l
IGluc3RydWN0aW9ucyBuZWVkIGEgc2NyYXRjaCByZWdpc3Rlci4gV2UgbW9kZWwgdGhpcyBieSBz
YXlpbmcgdGhhdCB0aGUgdGVtcG9yYXJ5IGlzCiAgICAgICAgIC8vIGRlZmluZWQgZWFybHkgYW5k
IHVzZWQgbGF0ZS4gVGhpcyByb2xlIGltcGxpZXMgdGhhdC4KQEAgLTE4Niw2ICsxODksNyBAQCBw
dWJsaWM6CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAg
ICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTIwNiw2ICsyMTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAg
Y2FzZSBTY3JhdGNoOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5
WkRlZjoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIyOCw2ICsyMzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNh
c2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICBjYXNlIEVhcmx5RGVm
OgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiByb2xlOwogICAg
ICAgICBjYXNlIFVzZToKICAgICAgICAgICAgIHJldHVybiBDb2xkVXNlOwpAQCAtMjUzLDYgKzI1
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKICAgICAgICAgY2FzZSBT
Y3JhdGNoOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTI3NCw2ICsyODEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgWkRl
ZjoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAg
ICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI5NCw2ICszMDIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VaRGVmOgogICAgICAgICBjYXNl
IEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgY2FzZSBTY3JhdGNo
OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTMxNSw2ICszMjQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgog
ICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQpAQCAtMzMwLDYgKzM0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAg
ICAgICBjYXNlIExhdGVVc2U6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2Ug
RWFybHlaRGVmOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgTGF0ZUNvbGRV
c2U6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNTgsNiArMzY5LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIFpEZWY6CiAgICAgICAg
IGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUz
Myw2ICs1NDUsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAor
ICAgIHN0YXRpYyBBcmcgc3RhdHVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6U3RhdHVzQ29uZGl0aW9u
IGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBTdGF0dXNDb25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgc3RhdGljIEFyZyBzcGVjaWFs
KEFpcjo6U3BlY2lhbCogc3BlY2lhbCkKICAgICB7CiAgICAgICAgIEFyZyByZXN1bHQ7CkBAIC02
NTgsMTIgKzY3OCwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gRG91Ymxl
Q29uZDsKICAgICB9CiAKKyAgICBib29sIGlzU3RhdHVzQ29uZCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4ga2luZCgpID09IFN0YXR1c0NvbmQ7CisgICAgfQorCiAgICAgYm9vbCBpc0Nv
bmRpdGlvbigpIGNvbnN0CiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewogICAgICAg
ICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3Vi
bGVDb25kOgorICAgICAgICBjYXNlIFN0YXR1c0NvbmQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg1MSw2
ICs4NzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBS
ZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29u
ZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC04NzIsNiArODk5LDcgQEAgcHVibGljOgogICAgICAgICBj
YXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVD
b25kOgorICAgICAgICBjYXNlIFN0YXR1c0NvbmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKICAg
ICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgY2FzZSBJbnZhbGlkOgpAQCAtMTA1OCw2ICsx
MDg2LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgUmVz
Q29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgorICAgICAgICBjYXNlIFN0YXR1c0NvbmQ6
CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKICAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtMTE3Nyw2ICsxMjA2LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24+KG1fb2Zm
c2V0KTsKICAgICB9CiAgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OlN0YXR1c0NvbmRpdGlvbiBh
c1N0YXR1c0NvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTdGF0dXND
b25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlN0YXR1
c0NvbmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKyAgICAKICAgICAvLyBUZWxscyB5b3UgaWYg
dGhlIEFyZyBpcyBpbnZlcnRpYmxlLiBPbmx5IGNvbmRpdGlvbiBhcmd1bWVudHMgYXJlIGludmVy
dGlibGUsIGFuZCBldmVuIGZvciB0aG9zZSwgdGhlcmUKICAgICAvLyBhcmUgYSBmZXcgZXhjZXB0
aW9ucyAtIG5vdGFibHkgT3ZlcmZsb3cgYW5kIFNpZ25lZC4KICAgICBib29sIGlzSW52ZXJ0aWJs
ZSgpIGNvbnN0CkBAIC0xMTg0LDYgKzEyMTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAo
a2luZCgpKSB7CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25k
OgorICAgICAgICBjYXNlIFN0YXR1c0NvbmQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpp
c0ludmVydGlibGUoYXNSZXN1bHRDb25kaXRpb24oKSk7CkBAIC0xMjA0LDYgKzEyNDAsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0
KGFzUmVzdWx0Q29uZGl0aW9uKCkpKTsKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAg
ICAgICAgcmV0dXJuIGRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc0RvdWJsZUNv
bmRpdGlvbigpKSk7CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKKyAgICAgICAgICAgIHJldHVy
biBzdGF0dXNDb25kKE1hY3JvQXNzZW1ibGVyOjppbnZlcnQoYXNTdGF0dXNDb25kaXRpb24oKSkp
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsMTkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZQogCiBjb25zdCBjaGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpkdW1wUHJlZml4ID0gIiMi
OwogCit2b2lkIEJhc2ljQmxvY2s6OnNldFN1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxvY2spCit7
CisgICAgbV9zdWNjZXNzb3JzLnJlc2l6ZSgxKTsKKyAgICBtX3N1Y2Nlc3NvcnNbMF0gPSB0YXJn
ZXQ7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sg
dGFrZW4sIEZyZXF1ZW50ZWRCbG9jayBub3RUYWtlbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMucmVz
aXplKDIpOworICAgIG1fc3VjY2Vzc29yc1swXSA9IHRha2VuOworICAgIG1fc3VjY2Vzc29yc1sx
XSA9IG5vdFRha2VuOworfQorCiBib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2lj
QmxvY2sqIGJsb2NrKQogewogICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxv
Y2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2Nr
LmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw5IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNj
ZXNzb3JzOyB9CiAgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3Vj
Y2Vzc29yczsgfQogCisgICAgdm9pZCBzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayk7Cisg
ICAgdm9pZCBzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jaywgRnJlcXVlbnRlZEJsb2NrKTsK
KwogICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7IH0KICAgICBCYXNpY0Jsb2NrKiYgc3Vj
Y2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxv
Y2soKTsgfQogICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlz
dD4gc3VjY2Vzc29yQmxvY2tzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJsb2Nr
SW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFz
aWNCbG9jay5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvQnViYmxlU29y
dC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChDb2RlICZjb2RlKQorICAgIDog
R2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0KGNvZGUubV9ibG9ja3MpCit7Cit9CisKK0Jsb2NrSW5z
ZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQoKQoreworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJ
bnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJpY0Jsb2NrSXNuZXJ0aW9uU2V0Lmgi
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY2xhc3MgSW5zZXJ0aW9uU2V0OworCit0eXBlZGVmIEdlbmVyaWNCbG9j
a0luc2VydGlvblNldDxCYXNpY0Jsb2NrPjo6QmxvY2tJbnNlcnRpb24gQmxvY2tJbnNlcnRpb247
CisKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0IDogcHVibGljIEdlbmVyaWNCbG9ja0luc2VydGlv
blNldDxCYXNpY0Jsb2NrPiB7CitwdWJsaWM6CisgICAgQmxvY2tJbnNlcnRpb25TZXQoQ29kZSYp
OworICAgIH5CbG9ja0luc2VydGlvblNldCgpOworICAgIAorICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgZXZlbnR1YWxseSBpbXBsZW1lbnQgQjM6OkJsb2NrSW5zZXJ0aW9uU2V0J3Mgc3BsaXRGb3J3
YXJkKCkuCit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw4IEBA
IHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKICAgICAgICAgZGF0YUxvZygi
SW5pdGlhbCBhaXI6XG4iKTsKICAgICAgICAgZGF0YUxvZyhjb2RlKTsKICAgICB9CisgICAgCisg
ICAgc2ltcGxpZnlDRkcoY29kZSk7CiAKICAgICBsb3dlck1hY3Jvcyhjb2RlKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5v
cGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykg
MjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjY4LDI4ICs2NjgsMzgwIEBAIExvYWQ4IFU6Rzo4LCBaRDpHOjMy
CiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxOCBVOkc6OCwgWkQ6Rzoz
MgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogU3RvcmU4IFU6Rzo4LCBEOkc6OAog
ICAgIFRtcCwgSW5kZXgKICAgICBUbXAsIEFkZHIKICAgICB4ODY6IEltbSwgSW5kZXgKICAgICB4
ODY6IEltbSwgQWRkcgogCitTdG9yZVJlbDggVTpHOjgsIEQ6Rzo4CisgICAgVG1wLCBJbmRleAor
ICAgIFRtcCwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorICAgIHg4NjogSW1tLCBBZGRyCisK
IExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiBVOkc6OCwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAg
IEluZGV4LCBUbXAKIAorTG9hZEFjcThTaWduZWRFeHRlbmRUbzMyIFU6Rzo4LCBaRDpHOjMyCisg
ICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBMb2FkMTYgVTpHOjE2LCBaRDpHOjMyCiAg
ICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxMTYgVTpHOjE2LCBaRDpHOjMy
CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBMb2FkMTZTaWduZWRFeHRlbmRUbzMy
IFU6RzoxNiwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9hZEFj
cTE2U2lnbmVkRXh0ZW5kVG8zMiBVOkc6MTYsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJ
bmRleCwgVG1wCisKIFN0b3JlMTYgVTpHOjE2LCBEOkc6MTYKICAgICBUbXAsIEluZGV4CiAgICAg
VG1wLCBBZGRyCiAKK1N0b3JlQWNxMTYgVTpHOjE2LCBEOkc6MTYKKyAgICBUbXAsIEluZGV4Cisg
ICAgVG1wLCBBZGRyCisKK0xvYWRBY3EzMiBVOkc6MzIgWkQ6RzozMgorICAgIFRtcCwgVG1wCisg
ICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCitTdG9yZVJlbDMyIFU6RzozMiBaRDpHOjMy
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorICAgIHg4NjogSW1tLCBBZGRyCisgICAg
eDg2OiBJbW0sIEluZGV4CisKKzY0OiBMb2FkQWNxNjQgVTpHOjY0IFpEOkc6NjQKKyAgICBUbXAs
IFRtcAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworNjQ6IFN0b3JlUmVsNjQgVTpH
OjY0IFpEOkc6NjQKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisgICAgeDg2OiBJbW0s
IEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKworIyBUaGUgZmlyc3Qgb3BlcmFuZCBpcyByYXgu
Cit4ODY6IEF0b21pY1N0cm9uZ0NBUzggVTpHOjMyLCBVRDpHOjgsIFU6Rzo4LCBVRDpHOjgsIFpE
Okc6OAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAgU3RhdHVzQ29u
ZCwgVG1wKiwgVG1wLCBJbmRleCwgVG1wCisKK3g4NjogQXRvbWljU3Ryb25nQ0FTMTYgVTpHOjMy
LCBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYsIFpEOkc6OAorICAgIFN0YXR1c0NvbmQsIFRtcCos
IFRtcCwgQWRkciwgVG1wCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRleCwgVG1wCisK
K3g4NjogQXRvbWljU3Ryb25nQ0FTMzIgVTpHOjMyLCBVRDpHOjMyLCBVOkc6MzIsIFVEOkc6MzIs
IFpEOkc6OAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAgU3RhdHVz
Q29uZCwgVG1wKiwgVG1wLCBJbmRleCwgVG1wCisKK3g4Nl82NDogQXRvbWljU3Ryb25nQ0FTNjQg
VTpHOjMyLCBVRDpHOjY0LCBVOkc6NjQsIFVEOkc6NjQsIFpEOkc6OAorICAgIFN0YXR1c0NvbmQs
IFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRleCwg
VG1wCisKK3g4NjogQXRvbWljU3Ryb25nQ0FTOCBVRDpHOjgsIFU6Rzo4LCBVRDpHOjgKKyAgICBU
bXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljU3Ryb25n
Q0FTMTYgVUQ6RzoxNiwgVTpHOjMyLCBVRDpHOjE2CisgICAgVG1wKiwgVG1wLCBBZGRyCisgICAg
VG1wKiwgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1N0cm9uZ0NBUzMyIFVEOkc6MzIsIFU6Rzoz
MiwgVUQ6RzozMgorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgKKwor
eDg2XzY0OiBBdG9taWNTdHJvbmdDQVM2NCBVRDpHOjY0LCBVOkc6NjQsIFVEOkc6NjQKKyAgICBU
bXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNoQXRvbWlj
U3Ryb25nQ0FTOCBVOkc6MzIsIFVEOkc6OCwgVTpHOjgsIFVEOkc6OCAvYnJhbmNoCisgICAgU3Rh
dHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRl
eAorCit4ODY6IEJyYW5jaEF0b21pY1N0cm9uZ0NBUzE2IFU6RzozMiwgVUQ6RzoxNiwgVTpHOjMy
LCBVRDpHOjE2IC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIKKyAgICBT
dGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNoQXRvbWljU3Ryb25nQ0FT
MzIgVTpHOjMyLCBVRDpHOjMyLCBVOkc6MzIsIFVEOkc6MzIgL2JyYW5jaAorICAgIFN0YXR1c0Nv
bmQsIFRtcCosIFRtcCwgQWRkcgorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgKKwor
eDg2XzY0OiBCcmFuY2hBdG9taWNTdHJvbmdDQVM2NCBVOkc6MzIsIFVEOkc6NjQsIFU6Rzo2NCwg
VUQ6Rzo2NCAvYnJhbmNoCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyCisgICAgU3Rh
dHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FkZDggVTpHOjgsIFVEOkc6
OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAs
IEluZGV4CisKK3g4NjogQXRvbWljQWRkMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRy
CisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBB
dG9taWNBZGQzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY0FkZDY0IFU6
Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljU3ViOCBVOkc6OCwgVUQ6Rzo4CisgICAg
SW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgK
KworeDg2OiBBdG9taWNTdWIxNiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJ
bW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1N1
YjMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljU3ViNjQgVTpHOjY0LCBV
RDpHOjY0CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAg
IFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNBbmQ4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFk
ZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6
IEF0b21pY0FuZDE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5k
ZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljQW5kMzIgVTpH
OjMyLCBVRDpHOjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRk
cgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNBbmQ2NCBVOkc6NjQsIFVEOkc6NjQK
KyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJ
bmRleAorCit4ODY6IEF0b21pY09yOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAg
SW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNP
cjE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljT3IzMiBVOkc6MzIsIFVEOkc6
MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1w
LCBJbmRleAorCit4ODZfNjQ6IEF0b21pY09yNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
OiBBdG9taWNYb3I4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hvcjE2IFU6Rzox
NiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIK
KyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljWG9yMzIgVTpHOjMyLCBVRDpHOjMyCisgICAg
SW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgK
KworeDg2XzY0OiBBdG9taWNYb3I2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAg
ICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21p
Y05lZzggVUQ6Rzo4CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogQXRvbWljTmVnMTYgVUQ6
RzoxNgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY05lZzMyIFVEOkc6MzIKKyAg
ICBBZGRyCisgICAgSW5kZXgKKworeDg2XzY0OiBBdG9taWNOZWc2NCBVRDpHOjY0CisgICAgQWRk
cgorICAgIEluZGV4CisKK3g4NjogQXRvbWljTm90OCBVRDpHOjgKKyAgICBBZGRyCisgICAgSW5k
ZXgKKworeDg2OiBBdG9taWNOb3QxNiBVRDpHOjE2CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4
NjogQXRvbWljTm90MzIgVUQ6RzozMgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODZfNjQ6IEF0
b21pY05vdDY0IFVEOkc6NjQKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNYY2hn
QWRkOCBVRDpHOjgsIFVEOkc6OAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
OiBBdG9taWNYY2hnQWRkMTYgVUQ6RzoxNiwgVUQ6RzoxNgorICAgIFRtcCwgQWRkcgorICAgIFRt
cCwgSW5kZXgKKworeDg2OiBBdG9taWNYY2hnQWRkMzIgVUQ6RzozMiwgVUQ6RzozMgorICAgIFRt
cCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNYY2hnQWRkNjQgVUQ6Rzo2
NCwgVUQ6Rzo2NAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNY
Y2hnOCBVRDpHOjgsIFVEOkc6OAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
OiBBdG9taWNYY2hnMTYgVUQ6RzoxNiwgVUQ6RzoxNgorICAgIFRtcCwgQWRkcgorICAgIFRtcCwg
SW5kZXgKKworeDg2OiBBdG9taWNYY2hnMzIgVUQ6RzozMiwgVUQ6RzozMgorICAgIFRtcCwgQWRk
cgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNYY2hnNjQgVUQ6Rzo2NCwgVUQ6Rzo2
NAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworYXJtNjQ6IExvYWRMaW5rOCBVOkc6
OCwgWkQ6Rzo4CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExp
bmtBY3E4IFU6Rzo4LCBaRDpHOjgKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKKyMg
U3VwZXIgY29uZnVzaW5nIGZhY3Q6IHRoaXMgcmV0dXJucyAwIHRvIG1lYW4gc3VjY2VzcywgMSB0
byBtZWFuIGZhaWx1cmUuCithcm02NDogU3RvcmVDb25kOCBVOkc6OCwgRDpHOjgsIEVaRDpHOjgK
KyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVD
b25kUmVsOCBVOkc6OCwgRDpHOjgsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRt
cCwgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmsxNiBVOkc6MTYsIFpEOkc6MTYKKyAgICBB
ZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTE2IFU6RzoxNiwg
WkQ6RzoxNgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29u
ZDE2IFU6RzoxNiwgRDpHOjE2LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAs
IEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDE2IFU6RzoxNiwgRDpHOjE2LCBFWkQ6
Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IExv
YWRMaW5rMzIgVTpHOjMyLCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAor
Cithcm02NDogTG9hZExpbmtBY3EzMiBVOkc6MzIsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAg
ICBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQzMiBVOkc6MzIsIEQ6RzozMiwgRVpEOkc6
OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9y
ZUNvbmRSZWwzMiBVOkc6MzIsIEQ6RzozMiwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisg
ICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGluazY0IFU6Rzo2NCwgWkQ6Rzo2NAor
ICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rQWNxNjQgVTpH
OjY0LCBaRDpHOjY0CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogU3Rv
cmVDb25kNjQgVTpHOjY0LCBEOkc6NjQsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAg
IFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kUmVsNjQgVTpHOjY0LCBEOkc6NjQs
IEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02
NDogRGVwZW5kMzIgVTpHOjMyLCBEOkc6MzIKKyAgICBUbXAsIFRtcAorCithcm02NDogRGVwZW5k
NjQgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcAorCiBDb21wYXJlMzIgVTpHOjMyLCBVOkc6
MzIsIFU6RzozMiwgWkQ6RzozMgogICAgIFJlbENvbmQsIFRtcCwgVG1wLCBUbXAKICAgICBSZWxD
b25kLCBUbXAsIEltbSwgVG1wCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wdGltaXplQmxvY2tPcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xNzcsNiArMTc3LDEwIEBAIHZvaWQgb3B0aW1pemVCbG9ja09y
ZGVyKENvZGUmIGNvZGUpCiAgICAgICAgIGNhc2UgQnJhbmNoU3ViNjQ6CiAgICAgICAgIGNhc2Ug
QnJhbmNoTmVnMzI6CiAgICAgICAgIGNhc2UgQnJhbmNoTmVnNjQ6CisgICAgICAgIGNhc2UgQnJh
bmNoQXRvbWljU3Ryb25nQ0FTODoKKyAgICAgICAgY2FzZSBCcmFuY2hBdG9taWNTdHJvbmdDQVMx
NjoKKyAgICAgICAgY2FzZSBCcmFuY2hBdG9taWNTdHJvbmdDQVMzMjoKKyAgICAgICAgY2FzZSBC
cmFuY2hBdG9taWNTdHJvbmdDQVM2NDoKICAgICAgICAgICAgIGlmIChjb2RlLmZpbmROZXh0Qmxv
Y2soYmxvY2spID09IGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSAmJiBicmFuY2guYXJnc1swXS5p
c0ludmVydGlibGUoKSkgewogICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChibG9jay0+c3VjY2Vz
c29yKDApLCBibG9jay0+c3VjY2Vzc29yKDEpKTsKICAgICAgICAgICAgICAgICBicmFuY2guYXJn
c1swXSA9IGJyYW5jaC5hcmdzWzBdLmludmVydGVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCShyZXZpc2lvbiAy
MTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBhZEludGVyZmVyZW5j
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgdm9pZCBwYWRJbnRlcmZlcmVu
Y2UoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICBbJl0gKEFyZyYsIEFyZzo6Um9sZSByb2xl
LCBCYW5rLCBXaWR0aCkgewogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6RWFybHlaRGVmOgogICAgICAgICAgICAgICAgICAgICAgICAgaGFzRWFybHlE
ZWYgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgQXJnOjpMYXRlVXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMjEyOTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29k
ZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkxhdGVDb2xkVXNlOgogICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U2NyYXRjaDoKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBcmc6OkVhcmx5RGVmOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHla
RGVmOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogY29kZS5yZWdzSW5Q
cmlvcml0eU9yZGVyKGJhbmspKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
ZXRCZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMjEy
OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJi
CSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDcgQEAgZGVmIGxleChzdHIsIGZpbGVOYW1l
KQogZW5kCiAKIGRlZiBpc1JvbGUodG9rZW4pCi0gICAgdG9rZW4gPX4gL1xBKChVKXwoRCl8KFVE
KXwoWkQpfChVWkQpfChVQSl8KFMpKVxaLworICAgIHRva2VuID1+IC9cQSgoVSl8KEQpfChVRCl8
KFpEKXwoVVpEKXwoVUEpfChTKXwoRUQpfChFWkQpfChMVSkpXFovCiBlbmQKIAogZGVmIGlzR0Yo
dG9rZW4pCkBAIC0xOTAsNyArMTkwLDcgQEAgZGVmIGlzR0YodG9rZW4pCiBlbmQKIAogZGVmIGlz
S2luZCh0b2tlbikKLSAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdElt
bSl8KEJpdEltbTY0KXwoQWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVD
b25kKSlcWi8KKyAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8
KEJpdEltbTY0KXwoQWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25k
KXwoU3RhdHVzQ29uZCkpXFovCiBlbmQKIAogZGVmIGlzQXJjaCh0b2tlbikKQEAgLTI2NCw3ICsy
NjQsNyBAQCBjbGFzcyBQYXJzZXIKIAogICAgIGRlZiBjb25zdW1lS2luZAogICAgICAgICByZXN1
bHQgPSB0b2tlbi5zdHJpbmcKLSAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1t
LCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIFJl
c0NvbmQsIG9yIERvdWJsZUNvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIHBh
cnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0LCBU
bXAsIEFkZHIsIEluZGV4LCBSZWxDb25kLCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBTdGF0dXND
b25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQogICAgICAgICBhZHZhbmNlCiAgICAgICAgIHJl
c3VsdAogICAgIGVuZApAQCAtNjUxLDYgKzY1MSwxMiBAQCB3cml0ZUgoIk9wY29kZVV0aWxzIikg
ewogICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZUFkZHIiCiAgICAgICAgICAgICAgICAg
d2hlbiAiUyIKICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJTY3JhdGNoIgorICAgICAgICAg
ICAgICAgIHdoZW4gIkVEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIkVhcmx5RGVmIgor
ICAgICAgICAgICAgICAgIHdoZW4gIkVaRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJF
YXJseVpEZWYiCisgICAgICAgICAgICAgICAgd2hlbiAiTFUiCisgICAgICAgICAgICAgICAgICAg
IHJvbGUgPSAiTGF0ZVVzZSIKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgZW5kCkBAIC04MTksNiArODI1LDcgQEAgd3JpdGVI
KCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29uZCIKICAg
ICAgICAgICAgICAgICB3aGVuICJSZXNDb25kIgogICAgICAgICAgICAgICAgIHdoZW4gIkRvdWJs
ZUNvbmQiCisgICAgICAgICAgICAgICAgd2hlbiAiU3RhdHVzQ29uZCIKICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlICJVbmV4cGVjdGVkIGtpbmQ6ICN7a2lu
ZC5uYW1lfSIKICAgICAgICAgICAgICAgICBlbmQKQEAgLTExMDUsNiArMTExMiw4IEBAIHdyaXRl
SCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJh
cmdzWyN7aW5kZXh9XS5hc1Jlc3VsdENvbmRpdGlvbigpIgogICAgICAgICAgICAgICAgIHdoZW4g
IkRvdWJsZUNvbmQiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRl
eH1dLmFzRG91YmxlQ29uZGl0aW9uKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiU3RhdHVzQ29u
ZCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNTdGF0
dXNDb25kaXRpb24oKSIKICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302941</attachid>
            <date>2017-02-28 09:35:07 -0800</date>
            <delta_ts>2017-02-28 10:48:03 -0800</delta_ts>
            <desc>so many x86 instructions</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>168871</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMiBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkwRjJDNjNCRTFFNjQ5REM0MDBDMTM4
MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCRDFFNjQ5REMyMDBDMTM4MzkgLyogQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAv
KiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkQ0RERCMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCAq
LzsgfTsKIAkJMEYyRDREREUxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERDMTk4MzJE
MzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRDRERTgxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhp
c1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJENERFNTE5ODMyREFDMDA3RDRCMTkgLyogVG9UaGlzU3RhdHVzLmNwcCAqLzsgfTsKQEAg
LTI3NjQsNiArMjc3MCwxMiBAQAogCQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5r
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmFuay5oOyBwYXRoID0gYjMv
QjNCYW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM2M0FEMUU2MEFFM0Mw
MEMxMzgzOSAvKiBCM1dpZHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzV2lkdGguY3BwOyBwYXRoID0gYjMvQjNXaWR0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzV2lkdGguaDsgcGF0aCA9IGIzL0IzV2lkdGgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjMxRTYzNDNFODAwQzEzODM5
IC8qIEIzQXRvbWljVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNBdG9taWNWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0F0b21pY1ZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjQxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNBdG9taWNWYWx1
ZS5oOyBwYXRoID0gYjMvQjNBdG9taWNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJDNjNCNTFFNjM0M0U4MDBDMTM4MzkgLyogQjNHZW5lcmljQmxvY2tJbnNlcnRpb25T
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmljQmxvY2tJbnNl
cnRpb25TZXQuaDsgcGF0aCA9IGIzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJC
bG9ja0luc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJCbG9ja0luc2VydGlvblNldC5jcHA7IHBhdGggPSBiMy9haXIvQWlyQmxvY2tJbnNlcnRp
b25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCQTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJCbG9j
a0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCRDFF
NjQ5REMyMDBDMTM4MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREIxOTgzMkQzNDAwN0Q0QjE5IC8qIERl
YnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVi
dWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkQ0RERDMTk4
MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNTI5Miw2ICs1MzA0LDggQEAKIAkJCQkwRkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyog
YWlyICovLAogCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFs
dWUuY3BwICovLAogCQkJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVn
VmFsdWUuaCAqLywKKwkJCQkwRjJDNjNCMzFFNjM0M0U4MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1
ZS5jcHAgKi8sCisJCQkJMEYyQzYzQjQxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUu
aCAqLywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJ
CQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi8sCiAJCQkJMEZFQzg0QjYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCkBAIC01MzU0LDYgKzUzNjgs
NyBAQAogCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5o
ICovLAogCQkJCTBGRUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywK
IAkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovLAorCQkJCTBG
MkM2M0I1MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oICov
LAogCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxv
Y2suaCAqLywKIAkJCQkwRkVDODVCRjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3Bw
ICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5oICovLApA
QCAtNTQ2OSw2ICs1NDg0LDggQEAKIAkJCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWly
QXJnSW5saW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNp
Y0Jsb2NrLmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNC
bG9jay5oICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2Vy
dGlvblNldC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJs
b2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC03MzI2LDYgKzczNDMsNyBAQAogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRjFGRTUxQjE5MjJBM0JDMDA2OTg3
QzUgLyogQWJvcnRSZWFzb24uaCAqLywKKwkJCQkwRjJDNjNCRDFFNjQ5REMyMDBDMTM4MzkgLyog
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8sCiAJCQkJODYwMTYxREYwRjNBODNDMTAwRjg0
NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCAqLywKIAkJCQkwRjM3MzA5MDFDMENENzBD
MDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggKi8sCiAJCQkJODY0
MDkyM0IxNTZFRUQzQjAwNTY2Q0IyIC8qIEFSTTY0QXNzZW1ibGVyLmggKi8sCkBAIC03MzU0LDgg
KzczNzIsOCBAQAogCQkJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxl
ck1JUFMuaCAqLywKIAkJCQlGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJs
ZXJQcmludGVyLmNwcCAqLywKIAkJCQlGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9B
c3NlbWJsZXJQcmludGVyLmggKi8sCi0JCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2XzY0LmggKi8sCisJCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJQTdBNEFFMDcxNzk3M0IyNjAwNTYxMkIxIC8q
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLywKIAkJCQk4NjAxNjFFMjBGM0E4M0MxMDBG
ODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3NzE4NUE4
RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywKQEAgLTc5
NTYsNiArNzk3NCw3IEBACiAJCQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3RDcxRDlEQzQ0MjAwMUI5ODI1IC8q
IEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2M0JDMUU2MzQ0MEMwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY4NEQ0MzgxQzAw
MTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUzNEMx
QTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQ3LDYgKzgwNjYsNyBAQAogCQkJCTQzNDIyQTYzMUMx
NThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUwRTFCRjAyNzZD
MDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzM0ZDRkMx
QzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2
QjhBRDkxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRlVGFpbHMuaCBpbiBIZWFkZXJzICov
LApAQCAtODM2Niw2ICs4Mzg2LDcgQEAKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyog
REZHT1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2
N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJDNjNCNzFFNjM0M0VEMDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjM3OTgxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50
b21JbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVGOTBBRjAw
QzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFQjE5RDBCQTdE
MDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBpbiBIZWFkZXJzICovLApAQCAtOTc5Miw2ICs5
ODEzLDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
IAkJCQkwRkZBNTQ5NzE2Qjg4MzUwMDBCM0E5ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjJDNjNCRTFFNjQ5REM0MDBDMTM4MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDQ5MzdDMzFEREJFNjE0MDA3N0M4MDcgLyog
QWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NUYwRjQxNEQx
MDYzOTAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM3MEI0
RjUxQkYyNjIwMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDI0OCw2ICsxMDI3MCw3IEBACiAJCQkJ
OUU3Mjk0MDcxOTBGMDFBNTAwMUE5MUI1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTUxM0U1QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmpl
Y3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQzYzQjYxRTYzNDNFQTAw
QzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTEx
ODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3Rl
ZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjY2LDYgKzEwMjg5LDcgQEAK
IAkJCQlFMzVFMDM1RjFCN0FCNDNFMDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0MzhCMTg1NjgzMzUwMDJFRDY5MiAv
KiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRC
NjExODgwOURENTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjJDNjNCQjFFNjM0NDBBMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25T
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1MTY1RDIxQkRGMEI5ODAwM0I3NUMxIC8qIElu
c3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NG
ODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIKKworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyOjpTdGF0dXNDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIHN3aXRj
aCAoY29uZGl0aW9uKSB7CisgICAgY2FzZSBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNz
OgorICAgICAgICBvdXQucHJpbnQoIlN1Y2Nlc3MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6RmFpbHVyZToKKyAgICAgICAgb3V0LnByaW50KCJG
YWlsdXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMiwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODksNiArODksMjMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gVGltZXNFaWdodDsKICAgICB9CiAgICAgCisgICAgZW51bSBTdGF0dXNDb25k
aXRpb24geworICAgICAgICBTdWNjZXNzLAorICAgICAgICBGYWlsdXJlCisgICAgfTsKKyAgICAK
KyAgICBzdGF0aWMgU3RhdHVzQ29uZGl0aW9uIGludmVydChTdGF0dXNDb25kaXRpb24gY29uZGl0
aW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICAgICAgY2FzZSBT
dWNjZXNzOgorICAgICAgICAgICAgcmV0dXJuIEZhaWx1cmU7CisgICAgICAgIGNhc2UgRmFpbHVy
ZToKKyAgICAgICAgICAgIHJldHVybiBTdWNjZXNzOworICAgICAgICB9CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBTdWNjZXNzOworICAgIH0K
KyAgICAKICAgICBzdHJ1Y3QgQmFzZUluZGV4OwogICAgIAogICAgIC8vIEFkZHJlc3M6CkBAIC0x
MTA4LDMgKzExMjUsMTYgQEAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlLCBN
YQogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQworCisj
aWYgRU5BQkxFKEFTU0VNQkxFUikKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3Ry
ZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkFic3RyYWN0TWFj
cm9Bc3NlbWJsZXI6OlN0YXR1c0NvbmRpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQzLDcgKzI3NDMsNjYxIEBA
IHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwogICAgICAgICBtX2Fzc2VtYmxl
ci5vcmxfaW0oMCwgMCwgWDg2UmVnaXN0ZXJzOjplc3ApOwogICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY1N0cm9uZ0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0
ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0
ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0
ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2Jfcm0obmV3VmFs
dWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICB2b2lk
IGF0b21pY1N0cm9uZ0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0
ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdp
c3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBl
Y3RlZEFuZFJlc3VsdCwgcmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdW
YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVz
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQg
bmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAg
ICAgICBhdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZd
IHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2KFN0YXR1
c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklE
IG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgewor
ICAgICAgICBhdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwg
WyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CisK
KyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJl
c3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNv
bmQsIGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGds
X3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQor
CisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFk
ZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FT
KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhj
aGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdD
QVM4KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFu
ZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0cm9u
Z0NBUzgoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0
ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1ZhbHVlLCBhZGRy
ZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsg
fSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVMxNihSZWdpc3RlcklEIGV4cGVj
dGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNz
ZW1ibGVyLmNtcHhjaGd3X3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
KTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVMxNihSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsg
bV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CisKKyAgICB2
b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0b21pY1N0
cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2xfcm0o
bmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAg
ICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJl
Z2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXRv
bWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hn
bF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRl
eCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ry
b25nQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3Vs
dCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJs
ZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzgoU3RhdHVzQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFs
dWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21p
Y1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21w
eGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
aW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CiAKKyAgICBKdW1wIGJyYW5jaEF0b21p
Y1N0cm9uZ0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5k
UmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0
LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25n
Q0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQs
IFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgWyZd
IHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdp
c3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQs
IGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnbF9ybShuZXdWYWx1
ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
ZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBl
Y3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2xfcm0obmV3VmFsdWUsIGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUp
OyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVM4KFN0YXR1c0NvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBB
ZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWlj
U3Ryb25nQ0FTOChjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MsIHJl
c3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FTOChTdGF0dXNDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwg
QmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRv
bWljU3Ryb25nQ0FTOChjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3Ms
IHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FTMTYoU3RhdHVzQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFs
dWUsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBh
dG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJl
c3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FTMTYoU3RhdHVzQ29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3
VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAg
ICAgIGF0b21pY1N0cm9uZ0NBUzE2KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwg
YWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVMzMihTdGF0
dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJ
RCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7Cisg
ICAgICAgIGF0b21pY1N0cm9uZ0NBUzMyKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1
ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVMzMihT
dGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0
ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAg
IHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMzIoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5l
d1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWlj
V2Vha0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVM4KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBu
ZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FT
OChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVn
aXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1
cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTOChjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFs
dWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljV2Vha0NBUzE2KFN0
YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3Rl
cklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJh
bmNoQXRvbWljU3Ryb25nQ0FTMTYoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBh
ZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVMxNihTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNo
QXRvbWljU3Ryb25nQ0FTMTYoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRy
ZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVMzMihTdGF0dXNDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdW
YWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21p
Y1N0cm9uZ0NBUzMyKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcyk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FTMzIoU3RhdHVzQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUs
IEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0
cm9uZ0NBUzMyKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFk
ZDgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ4KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBhZGQ4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljQWRkOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ4KHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkOChSZWdpc3RlcklEIHJlZywgQmFzZUlu
ZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IGFkZDgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQxNihU
cnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIGFkZDE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQWRkMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDE2KGltbSwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMTYoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgYWRkMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNBZGQxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDE2KHJlZywgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQz
MihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDMyKFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBhZGQzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY0FkZDMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKHJlZywgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMzIoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBhZGQzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1
YjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljU3ViOChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViOChpbW0s
IGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjgoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgc3ViOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y1N1YjgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI4KHJlZywgYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljU3ViMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWIxNihp
bW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjE2KFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBzdWIxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1N1YjE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjE2KHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMTYoUmVnaXN0ZXJJRCByZWcsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBzdWIxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjMy
KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBhdG9taWNTdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViMzIoaW1t
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWIzMihSZWdpc3RlcklE
IHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICBzdWIzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1N1YjMyKFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViMzIocmVnLCBhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQ4KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5k
OChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDgoVHJ1c3Rl
ZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIGFuZDgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNBbmQ4KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDgocmVnLCBhZGRyZXNzKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQ4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5k
ZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
YW5kOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDE2KFRy
dXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgYW5kMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNBbmQxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMTYoaW1tLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQxNihSZWdpc3RlcklEIHJl
ZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBhbmQxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y0FuZDE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQzMihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDMy
KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMzIoVHJ1c3Rl
ZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIGFuZDMyKGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljQW5kMzIoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIocmVnLCBhZGRyZXNz
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQzMihSZWdpc3RlcklEIHJlZywgQmFz
ZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIGFuZDMyKHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I4
KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljT3I4KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgoaW1tLCBhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjgoUmVnaXN0ZXJJRCByZWcsIEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAg
ICAgb3I4KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I4KFJl
Z2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgb3I4KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljT3IxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMTYoaW1tLCBhZGRyZXNz
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBvcjE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3Ix
NihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBvcjE2KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljT3IxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMTYocmVnLCBhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjMyKFRydXN0ZWRJbW0zMiBpbW0s
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgb3IzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09y
MzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNPcjMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMzIocmVnLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjMyKFJlZ2lzdGVySUQgcmVn
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgb3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y1hvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I4KGltbSwgYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljWG9yOChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yOChp
bW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjgoUmVnaXN0ZXJJ
RCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgeG9yOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1hvcjgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I4KHJlZywgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3Ix
NihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjE2KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3IxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hvcjE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KHJlZywgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMTYoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICB4b3IxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hv
cjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNYb3IzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yMzIo
aW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3IzMihSZWdpc3Rl
cklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICB4b3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY1hvcjMyKFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yMzIocmVnLCBhZGRyZXNzKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWc4KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnOChhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWc4KEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBuZWc4KGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzE2KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnMTYoYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMTYoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzE2KGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzMyKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnMzIoYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMzIoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzMyKGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDgoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3Q4KGFkZHJlc3MpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGF0b21pY05vdDgoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDgoYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljTm90MTYoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3QxNihhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNOb3QxNihCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90MTYoYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljTm90MzIoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3QzMihhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNOb3QzMihCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90MzIoYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljWGNoZ0FkZDgoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIueGFkZGJfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkOChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLnhhZGRiX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWlj
WGNoZ0FkZDE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhhZGR3X3JtKHJlZywg
YWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRv
bWljWGNoZ0FkZDE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZHdfcm0o
cmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkMzIoUmVnaXN0ZXJJ
RCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGxfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkMzIoUmVnaXN0
ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkbF9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY1hjaGc4KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LnhhZGRiX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljWGNoZzgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxl
ci54Y2hnYl9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5k
ZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGcxNihS
ZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnd19ybShyZWcsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGcxNihS
ZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGd3X3JtKHJlZywgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnhjaGdsX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzMyKFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXgg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIueGNoZ2xfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRy
ZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCiAgICAgLy8gV2UgdGFrZSB0
aGlzIHRvIG1lYW4gdGhhdCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9ybWFsIHN0b3Jlcy4gU28s
IGl0J3MgYSBuby1vcCBvbiB4ODYuCiAgICAgdm9pZCBzdG9yZUZlbmNlKCkKICAgICB7CkBAIC0y
ODMxLDYgKzM0ODUsMTggQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
WDg2QXNzZW1ibGVyOjpDb25kaXRpb24+KGNvbmQpOwogICAgIH0KIAorICAgIFg4NkFzc2VtYmxl
cjo6Q29uZGl0aW9uIHg4NkNvbmRpdGlvbihTdGF0dXNDb25kaXRpb24gY29uZCkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoY29uZCkgeworICAgICAgICBjYXNlIFN1Y2Nlc3M6CisgICAgICAgICAg
ICByZXR1cm4gWDg2QXNzZW1ibGVyOjpDb25kaXRpb25FOworICAgICAgICBjYXNlIEZhaWx1cmU6
CisgICAgICAgICAgICByZXR1cm4gWDg2QXNzZW1ibGVyOjpDb25kaXRpb25ORTsKKyAgICAgICAg
fQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
WDg2QXNzZW1ibGVyOjpDb25kaXRpb25FOworICAgIH0KKwogICAgIHZvaWQgc2V0MzIoWDg2QXNz
ZW1ibGVyOjpDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICNpZiBDUFUo
WDg2KQpAQCAtMjkyNSw2ICszNTkxLDM1IEBAIHByb3RlY3RlZDoKICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoc2l6ZU9mUmVnaXN0ZXIpLCBkc3QpOwogICAgICAgICBzcmNJc05vblplcm8ubGlu
ayh0aGlzKTsKICAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2
b2lkIGF0b21pY1N0cm9uZ0NBUyhTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBl
Y3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCByZXN1bHQsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAg
eworICAgICAgICBzd2FwKGV4cGVjdGVkQW5kUmVzdWx0LCBYODZSZWdpc3RlcnM6OmVheCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgZnVuYygpOworICAgICAgICBzd2Fw
KGV4cGVjdGVkQW5kUmVzdWx0LCBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgICAgIHNldDMyKHg4
NkNvbmRpdGlvbihjb25kKSwgcmVzdWx0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTKFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRS
ZXN1bHQsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBzd2FwKGV4cGVjdGVkQW5k
UmVzdWx0LCBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgZnVuYygpOworICAgICAgICBzd2FwKGV4cGVjdGVkQW5kUmVzdWx0LCBYODZSZWdp
c3RlcnM6OmVheCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBK
dW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBleHBlY3RlZEFuZFJlc3VsdCwgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3
YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBmdW5jKCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRS
ZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJs
ZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOworICAgIH0KIAogcHJpdmF0ZToKICAgICAvLyBP
bmx5IE1hY3JvQXNzZW1ibGVyWDg2IHNob3VsZCBiZSB1c2luZyB0aGUgZm9sbG93aW5nIG1ldGhv
ZDsgU1NFMiBpcyBhbHdheXMgYXZhaWxhYmxlIG9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lv
biAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOTQsNyArMTI5NCwyMTMgQEAgcHVibGlj
OgogICAgICAgICBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bW92ZShUcnVzdGVkSW1tUHRyKGFk
ZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoVGVzdDgoY29uZCwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0
ZXIoKSksIG1hc2s4KTsKICAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM2NChT
dGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0
ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7
CisgICAgICAgIGF0b21pY3NTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3Vs
dCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzY0
KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdp
c3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCisg
ICAgeworICAgICAgICBhdG9taWNzU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBy
ZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7Cisg
ICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM2NChSZWdpc3RlcklEIGV4cGVjdGVkQW5k
UmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBhdG9taWNzU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxl
ci5jbXB4Y2hncV9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0p
OworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTNjQoUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICBhdG9taWNzU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fz
c2VtYmxlci5jbXB4Y2hncV9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
ZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNzU3Ryb25nQ0FTKGNvbmQsIGV4cGVj
dGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hncV9ybShuZXdWYWx1ZSwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
QXRvbWljU3Ryb25nQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0
ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY3NTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRB
bmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7
CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNzU3Ry
b25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0
KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVM2NChTdGF0dXNDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFz
ZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWlj
c1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MsIHJl
c3VsdCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FTNjQoU3RhdHVzQ29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3
VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9t
aWNzU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcyk7
CisgICAgfQogCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FTNjQoU3RhdHVzQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUs
IEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY3NT
dHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAg
ICB9CisKKyAgICB2b2lkIGF0b21pY0FkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkNjQo
aW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ2NChUcnVzdGVk
SW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvY2soKTsKKyAgICAgICAgYWRkNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNBZGQ2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ2NChyZWcsIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDY0KFJlZ2lzdGVySUQgcmVnLCBCYXNl
SW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAg
ICAgYWRkNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWI2
NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljU3ViNjQoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjY0KGlt
bSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViNjQoUmVnaXN0ZXJJ
RCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgc3ViNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNTdWI2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjY0KHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBh
bmQ2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDY0KFRy
dXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhbmQ2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY0FuZDY0KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDY0KHJlZywgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQoUmVnaXN0ZXJJRCByZWcs
IEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBhbmQ2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y09yNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjY0KGltbSwgYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljT3I2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I2NChp
bW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yNjQoUmVnaXN0ZXJJ
RCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgb3I2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY09yNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjY0KHJlZywgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I2
NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjY0KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3I2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hvcjY0KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjY0KHJlZywgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yNjQoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICB4b3I2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05l
ZzY0KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgbmVnNjQoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVn
NjQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIG5lZzY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05v
dDY0KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgbm90NjQoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90
NjQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIG5vdDY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hj
aGdBZGQ2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkcV9ybShyZWcsIGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y1hjaGdBZGQ2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhhZGRxX3JtKHJl
ZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5z
Y2FsZSk7CisgICAgfQorICAgIAogICAgIHZvaWQgdHJ1bmNhdGVEb3VibGVUb1VpbnQzMihGUFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxl
ci5jdnR0c2Qyc2lxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyMyw2ICsyMjMsNyBAQCBwcml2YXRlOgogICAgICAgICBPUF9HUk9VUDFfRXZJYiAgICAg
ICAgICAgICAgICAgID0gMHg4MywKICAgICAgICAgT1BfVEVTVF9FYkdiICAgICAgICAgICAgICAg
ICAgICA9IDB4ODQsCiAgICAgICAgIE9QX1RFU1RfRXZHdiAgICAgICAgICAgICAgICAgICAgPSAw
eDg1LAorICAgICAgICBPUF9YQ0hHX0V2R2IgICAgICAgICAgICAgICAgICAgID0gMHg4NiwKICAg
ICAgICAgT1BfWENIR19Fdkd2ICAgICAgICAgICAgICAgICAgICA9IDB4ODcsCiAgICAgICAgIE9Q
X01PVl9FYkdiICAgICAgICAgICAgICAgICAgICAgPSAweDg4LAogICAgICAgICBPUF9NT1ZfRXZH
diAgICAgICAgICAgICAgICAgICAgID0gMHg4OSwKQEAgLTI5MCw2ICsyOTEsOCBAQCBwcml2YXRl
OgogICAgICAgICBPUF9TRVRDQyAgICAgICAgICAgID0gMHg5MCwKICAgICAgICAgT1AyXzNCWVRF
X0VTQ0FQRV9BRSA9IDB4QUUsCiAgICAgICAgIE9QMl9JTVVMX0d2RXYgICAgICAgPSAweEFGLAor
ICAgICAgICBPUDJfQ01QWENIR2IgICAgICAgID0gMHhCMCwKKyAgICAgICAgT1AyX0NNUFhDSEcg
ICAgICAgICA9IDB4QjEsCiAgICAgICAgIE9QMl9NT1ZaWF9HdkViICAgICAgPSAweEI2LAogICAg
ICAgICBPUDJfQlNGICAgICAgICAgICAgID0gMHhCQywKICAgICAgICAgT1AyX1RaQ05UICAgICAg
ICAgICA9IDB4QkMsCkBAIC0yOTgsNiArMzAxLDggQEAgcHJpdmF0ZToKICAgICAgICAgT1AyX01P
VlNYX0d2RWIgICAgICA9IDB4QkUsCiAgICAgICAgIE9QMl9NT1ZaWF9HdkV3ICAgICAgPSAweEI3
LAogICAgICAgICBPUDJfTU9WU1hfR3ZFdyAgICAgID0gMHhCRiwKKyAgICAgICAgT1AyX1hBRERi
ICAgICAgICAgICA9IDB4QzAsCisgICAgICAgIE9QMl9YQUREICAgICAgICAgICAgPSAweEMxLAog
ICAgICAgICBPUDJfUEVYVFJXX0dkVWRJYiAgID0gMHhDNSwKICAgICAgICAgT1AyX1BTTExRX1Vk
cUliICAgICA9IDB4NzMsCiAgICAgICAgIE9QMl9QU1JMUV9VZHFJYiAgICAgPSAweDczLApAQCAt
MTU4NiwxMSArMTU5MSwzOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGRzdCk7CiAgICAgfQogCisgICAgdm9pZCB4Y2hnYl9y
bShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdfRXZHYiwgc3JjLCBiYXNlLCBvZmZz
ZXQpOworICAgIH0KKworICAgIHZvaWQgeGNoZ2Jfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdfRXZHYiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCB4Y2hnd19ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAg
dm9pZCB4Y2hnd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0K
KwogICAgIHZvaWQgeGNoZ2xfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2
R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hH
X0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogI2lmIENQ
VShYODZfNjQpCiAgICAgdm9pZCB4Y2hncV9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
c3QpCiAgICAgewpAQCAtMjc3NSw2ICsyODA3LDkwIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3Jt
YXR0ZXIucHJlZml4KFBSRV9MT0NLKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjbXB4Y2hnYl9y
bShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfQ01QWENIR2IsIHNyYywgYmFzZSwgb2Zm
c2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnYl9ybShSZWdpc3RlcklEIHNyYywg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KE9QMl9DTVBYQ0hHYiwgc3Jj
LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY21w
eGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9DTVBYQ0hHLCBzcmMsIGJhc2UsIG9mZnNldCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY21weGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAg
ICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgaW5kZXgsIHNj
YWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdsX3JtKFJlZ2lzdGVy
SUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zv
cm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBjbXB4Y2hnbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfQ01QWENIRywgc3JjLCBiYXNlLCBvZmZzZXQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7
CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9DTVBYQ0hHLCBzcmMsIGJhc2Us
IGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkYl9ybShS
ZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfWEFERGIsIHNyYywgYmFzZSwgb2Zmc2V0KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KE9QMl9YQUREYiwgc3JjLCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZHdfcm0oUmVnaXN0
ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1f
Zm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
dHdvQnl0ZU9wKE9QMl9YQURELCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgeGFkZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0
ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRl
T3AoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHhhZGRsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX1hBREQs
IHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkbF9ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4
LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX1hB
REQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHhhZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Up
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfWEFERCwgc3JjLCBi
YXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRxX3JtKFJlZ2lzdGVySUQg
c3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBz
Y2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9YQURELCBz
cmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBt
ZmVuY2UoKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIudGhyZWVCeXRlT3AoT1AyXzNCWVRF
X0VTQ0FQRV9BRSwgT1AzX01GRU5DRSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNBdG9taWNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQXRvbWljVmFsdWUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzQXRvbWljVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBdG9taWNWYWx1ZTo6fkF0b21p
Y1ZhbHVlKCkKK3sKK30KKworV2lkdGggQXRvbWljVmFsdWU6OmFjY2Vzc1dpZHRoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV93aWR0aDsKK30KKwordm9pZCBBdG9taWNWYWx1ZTo6ZHVtcE1ldGEo
Q29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoY29tbWEsICJ3aWR0aCA9ICIsIG1fd2lkdGgpOworICAgIAorICAgIE1lbW9yeVZhbHVl
OjpkdW1wTWV0YShjb21tYSwgb3V0KTsKK30KKworVmFsdWUqIEF0b21pY1ZhbHVlOjpjbG9uZUlt
cGwoKSBjb25zdAoreworICAgIHJldHVybiBuZXcgQXRvbWljVmFsdWUoKnRoaXMpOworfQorCitB
dG9taWNWYWx1ZTo6QXRvbWljVmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBXaWR0aCB3
aWR0aCwgVmFsdWUqIG9wZXJhbmQsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDAp
CisgICAgOiBNZW1vcnlWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCBvcGVyYW5kLT50eXBlKCks
IG9yaWdpbiwgb2Zmc2V0LCBvcGVyYW5kLCBwb2ludGVyKQorICAgICwgbV93aWR0aCh3aWR0aCkK
K3sKKyAgICBzZXRGZW5jZVJhbmdlKEhlYXBSYW5nZTo6dG9wKCkpOworICAgIAorICAgIEFTU0VS
VChiZXN0VHlwZShvcGVyYXRpb25XaWR0aCgpKSA9PSBvcGVyYXRpb25UeXBlKCkpOworICAgIAor
ICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAg
ICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBB
dG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hj
aGc6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKworQXRvbWljVmFsdWU6OkF0b21pY1ZhbHVlKEtpbmQga2luZCwg
T3JpZ2luIG9yaWdpbiwgV2lkdGggd2lkdGgsIFZhbHVlKiBleHBlY3RlZFZhbHVlLCBWYWx1ZSog
bmV3VmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgOiBNZW1v
cnlWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCBraW5kLm9wY29kZSgpID09IEF0b21pY1dlYWtD
QVMgPyBJbnQzMiA6IGV4cGVjdGVkVmFsdWUtPnR5cGUoKSwgb3JpZ2luLCBvZmZzZXQsIGV4cGVj
dGVkVmFsdWUsIG5ld1ZhbHVlLCBwb2ludGVyKQorICAgICwgbV93aWR0aCh3aWR0aCkKK3sKKyAg
ICBzZXRGZW5jZVJhbmdlKEhlYXBSYW5nZTo6dG9wKCkpOworICAgIAorICAgIEFTU0VSVChiZXN0
VHlwZShvcGVyYXRpb25XaWR0aCgpKSA9PSBvcGVyYXRpb25UeXBlKCkpOworCisgICAgc3dpdGNo
IChraW5kLm9wY29kZSgpKSB7CisgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRv
bWljU3Ryb25nQ0FTOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQXRvbWljVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNBdG9taWNWYWx1ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0F0b21pY1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKyNpbmNs
dWRlICJCM1dpZHRoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBKU19FWFBPUlRfUFJJVkFURSBBdG9taWNWYWx1ZSA6IHB1YmxpYyBNZW1vcnlWYWx1ZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhLaW5kIGtpbmQpCisgICAgeworICAgICAg
ICByZXR1cm4gaXNBdG9taWMoa2luZC5vcGNvZGUoKSk7CisgICAgfQorICAgIAorICAgIH5BdG9t
aWNWYWx1ZSgpOworICAgIAorICAgIFR5cGUgb3BlcmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IGNoaWxkKDApLT50eXBlKCk7IH0KKyAgICAKKyAgICBXaWR0aCBvcGVyYXRpb25XaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICAKKyAgICAvLyBTeW5vbnltIGZvciB3aWR0aCgp
LCBpZiB5b3UncmUgYWNjZXNzaW5nIHZpYSBNZW1vcnlWYWx1ZS4KKyAgICBXaWR0aCBhY2Nlc3NX
aWR0aCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1l
dGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAg
ICBWYWx1ZSogY2xvbmVJbXBsKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgQXRvbWljVmFsdWUoS2luZCwgT3Jp
Z2luLCBXaWR0aCwgVmFsdWUqIG9wZXJhbmQsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNl
dCA9IDApOworICAgIAorICAgIEF0b21pY1ZhbHVlKEtpbmQsIE9yaWdpbiwgV2lkdGgsIFZhbHVl
KiBleHBlY3RlZFZhbHVlLCBWYWx1ZSogbmV3VmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90
IG9mZnNldCA9IDApOworICAgIAorICAgIFdpZHRoIG1fd2lkdGg7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAJKHJldmlz
aW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9u
U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwzNSArMzYsMTMgQEAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgewogCiBCbG9ja0luc2VydGlvblNldDo6QmxvY2tJbnNlcnRpb25TZXQoUHJv
Y2VkdXJlICZwcm9jKQotICAgIDogbV9wcm9jKHByb2MpCisgICAgOiBHZW5lcmljQmxvY2tJbnNl
cnRpb25TZXQocHJvYy5tX2Jsb2NrcykKKyAgICAsIG1fcHJvYyhwcm9jKQogewogfQogCiBCbG9j
a0luc2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0KCkgeyB9CiAKLXZvaWQgQmxvY2tJbnNl
cnRpb25TZXQ6Omluc2VydChCbG9ja0luc2VydGlvbiYmIGluc2VydGlvbikKLXsKLSAgICBtX2lu
c2VydGlvbnMuYXBwZW5kKFdURk1vdmUoaW5zZXJ0aW9uKSk7Ci19Ci0KLUJhc2ljQmxvY2sqIEJs
b2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kp
Ci17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2Nr
KFVJTlRfTUFYLCBmcmVxdWVuY3kpKTsKLSAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5n
ZXQoKTsKLSAgICBpbnNlcnQoQmxvY2tJbnNlcnRpb24oaW5kZXgsIFdURk1vdmUoYmxvY2spKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6
Omluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kpCi17Ci0g
ICAgcmV0dXJuIGluc2VydChiZWZvcmUtPmluZGV4KCksIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kg
PyBmcmVxdWVuY3kgOiBiZWZvcmUtPmZyZXF1ZW5jeSgpKTsKLX0KLQotQmFzaWNCbG9jayogQmxv
Y2tJbnNlcnRpb25TZXQ6Omluc2VydEFmdGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3VibGUgZnJl
cXVlbmN5KQotewotICAgIHJldHVybiBpbnNlcnQoYWZ0ZXItPmluZGV4KCkgKyAxLCBmcmVxdWVu
Y3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYWZ0ZXItPmZyZXF1ZW5jeSgpKTsKLX0KLQog
QmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6OnNwbGl0Rm9yd2FyZCgKICAgICBCYXNpY0Js
b2NrKiBibG9jaywgdW5zaWduZWQmIHZhbHVlSW5kZXgsIEluc2VydGlvblNldCogaW5zZXJ0aW9u
U2V0LCBkb3VibGUgZnJlcXVlbmN5KQogewpAQCAtMTAyLDMyICs4MCw2IEBAIEJhc2ljQmxvY2sq
IEJsb2NrSW5zZXJ0aW9uU2V0OjpzcGxpdEZvcncKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1i
b29sIEJsb2NrSW5zZXJ0aW9uU2V0OjpleGVjdXRlKCkKLXsKLSAgICBpZiAobV9pbnNlcnRpb25z
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIFdlIGFsbG93
IGluc2VydGlvbnMgdG8gYmUgZ2l2ZW4gdG8gdXMgaW4gYW55IG9yZGVyLiBTbywgd2UgbmVlZCB0
byBzb3J0IHRoZW0gYmVmb3JlCi0gICAgLy8gcnVubmluZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25z
LiBXZSBzdHJvbmdseSBwcmVmZXIgYSBzdGFibGUgc29ydCBhbmQgd2Ugd2FudCBpdCB0byBiZQot
ICAgIC8vIGZhc3QsIHNvIHdlIHVzZSBidWJibGUgc29ydC4KLSAgICBidWJibGVTb3J0KG1faW5z
ZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOwotCi0gICAgZXhlY3V0ZUluc2Vy
dGlvbnMobV9wcm9jLm1fYmxvY2tzLCBtX2luc2VydGlvbnMpOwotICAgIAotICAgIC8vIFBydW5l
IG91dCBlbXB0eSBlbnRyaWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQn
cwotICAgIC8vIGhlYWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCi0g
ICAgbV9wcm9jLm1fYmxvY2tzLnJlbW92ZUFsbE1hdGNoaW5nKAotICAgICAgICBbJl0gKHN0ZDo6
dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiYgYmxvY2tQdHIpIC0+IGJvb2wgewotICAgICAgICAgICAg
cmV0dXJuICFibG9ja1B0cjsKLSAgICAgICAgfSk7Ci0gICAgCi0gICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGhlIGJsb2NrcyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3Byb2MubV9ibG9ja3Muc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fcHJvYy5t
X2Jsb2Nrc1tpXS0+bV9pbmRleCA9IGk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuaAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRp
b25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKKyNpbmNsdWRlICJCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIgogI2luY2x1
ZGUgIkIzUHJvY2VkdXJlLmgiCiAjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KQEAgLTM1LDI2ICszNiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKIAogY2xhc3MgSW5zZXJ0aW9uU2V0OwogCi10eXBlZGVmIFdURjo6SW5zZXJ0aW9u
PHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gQmxvY2tJbnNlcnRpb247Cit0eXBlZGVmIEdl
bmVyaWNCbG9ja0luc2VydGlvblNldDxCYXNpY0Jsb2NrPjo6QmxvY2tJbnNlcnRpb24gQmxvY2tJ
bnNlcnRpb247CiAKLWNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0IHsKK2NsYXNzIEJsb2NrSW5zZXJ0
aW9uU2V0IDogcHVibGljIEdlbmVyaWNCbG9ja0luc2VydGlvblNldDxCYXNpY0Jsb2NrPiB7CiBw
dWJsaWM6CiAgICAgQmxvY2tJbnNlcnRpb25TZXQoUHJvY2VkdXJlJik7CiAgICAgfkJsb2NrSW5z
ZXJ0aW9uU2V0KCk7CiAgICAgCi0gICAgdm9pZCBpbnNlcnQoQmxvY2tJbnNlcnRpb24mJik7Ci0K
LSAgICAvLyBJbnNlcnQgYSBuZXcgYmxvY2sgYXQgYSBnaXZlbiBpbmRleC4KLSAgICBCYXNpY0Js
b2NrKiBpbnNlcnQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLQot
ICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYmVmb3JlIHRoZSBnaXZlbiBibG9jay4gVXN1YWxs
eSB5b3Ugd2lsbCBub3QgcGFzcyB0aGUgZnJlcXVlbmN5Ci0gICAgLy8gYXJndW1lbnQuIFBhc3Np
bmcgUE5hTiBjYXVzZXMgdXMgdG8ganVzdCB1c2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgJ2JlZm9y
ZScgYmxvY2suIFRoYXQncwotICAgIC8vIHVzdWFsbHkgd2hhdCB5b3Ugd2FudC4KLSAgICBCYXNp
Y0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5
ID0gUE5hTik7Ci0KLSAgICAvLyBJbnNlcnRzIGEgbmV3IGJsb2NrIGFmdGVyIHRoZSBnaXZlbiBi
bG9jay4KLSAgICBCYXNpY0Jsb2NrKiBpbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91
YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOwotCiAgICAgLy8gQSBoZWxwZXIgdG8gc3BsaXQgYSBibG9j
ayB3aGVuIGZvcndhcmQgaXRlcmF0aW5nIG92ZXIgaXQuIEl0IGNyZWF0ZXMgYSBuZXcgYmxvY2sg
dG8gaG9sZAogICAgIC8vIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBpbnN0cnVjdGlvbiBhdCB2YWx1
ZUluZGV4LiBUaGUgY3VycmVudCBibG9jayBpcyBsZWZ0IHdpdGgKICAgICAvLyBldmVyeXRoaW5n
IGF0IGFuZCBhZnRlciB2YWx1ZUluZGV4LiBJZiB0aGUgb3B0aW9uYWwgSW5zZXJ0aW9uU2V0IGlz
IHByb3ZpZGVkLCBpdCB3aWxsIGdldApAQCAtODAsMTIgKzY4LDkgQEAgcHVibGljOgogICAgIEJh
c2ljQmxvY2sqIHNwbGl0Rm9yd2FyZCgKICAgICAgICAgQmFzaWNCbG9jayosIHVuc2lnbmVkJiB2
YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqID0gbnVsbHB0ciwKICAgICAgICAgZG91YmxlIGZyZXF1
ZW5jeSA9IFBOYU4pOwotICAgIAotICAgIGJvb2wgZXhlY3V0ZSgpOwogCiBwcml2YXRlOgogICAg
IFByb2NlZHVyZSYgbV9wcm9jOwotICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNl
cnRpb25zOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNFZmZlY3RzLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgy
LDggQEAgYm9vbCBFZmZlY3RzOjppbnRlcmZlcmVzKGNvbnN0IEVmZmVjdHMmIAogICAgICAgICB8
fCBpbnRlcmZlcmVzV2l0aFdyaXRlc1Bpbm5lZChvdGhlciwgKnRoaXMpCiAgICAgICAgIHx8IHdy
aXRlcy5vdmVybGFwcyhvdGhlci53cml0ZXMpCiAgICAgICAgIHx8IHdyaXRlcy5vdmVybGFwcyhv
dGhlci5yZWFkcykKLSAgICAgICAgfHwgcmVhZHMub3ZlcmxhcHMob3RoZXIud3JpdGVzKTsKKyAg
ICAgICAgfHwgcmVhZHMub3ZlcmxhcHMob3RoZXIud3JpdGVzKQorICAgICAgICB8fCAoZmVuY2Ug
JiYgb3RoZXIuZmVuY2UpOwogfQogCiBib29sIEVmZmVjdHM6Om9wZXJhdG9yPT0oY29uc3QgRWZm
ZWN0cyYgb3RoZXIpIGNvbnN0CkBAIC05NSw3ICs5Niw4IEBAIGJvb2wgRWZmZWN0czo6b3BlcmF0
b3I9PShjb25zdCBFZmZlY3RzJiAKICAgICAgICAgJiYgd3JpdGVzUGlubmVkID09IG90aGVyLndy
aXRlc1Bpbm5lZAogICAgICAgICAmJiByZWFkc1Bpbm5lZCA9PSBvdGhlci5yZWFkc1Bpbm5lZAog
ICAgICAgICAmJiB3cml0ZXMgPT0gb3RoZXIud3JpdGVzCi0gICAgICAgICYmIHJlYWRzID09IG90
aGVyLnJlYWRzOworICAgICAgICAmJiByZWFkcyA9PSBvdGhlci5yZWFkcworICAgICAgICAmJiBm
ZW5jZSA9PSBvdGhlci5mZW5jZTsKIH0KIAogYm9vbCBFZmZlY3RzOjpvcGVyYXRvciE9KGNvbnN0
IEVmZmVjdHMmIG90aGVyKSBjb25zdApAQCAtMTIwLDYgKzEyMiw4IEBAIHZvaWQgRWZmZWN0czo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb24KICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiV3Jp
dGVzUGlubmVkIik7CiAgICAgaWYgKHJlYWRzUGlubmVkKQogICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJSZWFkc1Bpbm5lZCIpOworICAgIGlmIChmZW5jZSkKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiRmVuY2UiKTsKICAgICBpZiAod3JpdGVzKQogICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJXcml0ZXM6Iiwgd3JpdGVzKTsKICAgICBpZiAocmVhZHMpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNFZmZlY3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWZmZWN0cy5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNFZmZlY3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDEwIEBAIHN0
cnVjdCBFZmZlY3RzIHsKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYzMTczCiAgICAgYm9vbCByZWFkc1Bpbm5lZCB7IGZhbHNlIH07CiAgICAgYm9vbCB3
cml0ZXNQaW5uZWQgeyBmYWxzZSB9OworICAgIAorICAgIC8vIE1lbW9yeSBmZW5jZXMgY2Fubm90
IGJlIHJlb3JkZXJlZCBhcm91bmQgZWFjaCBvdGhlciByZWdhcmRsZXNzIG9mIHRoZWlyIGVmZmVj
dHMuIFRoaXMgaXMgZmxhZ2dlZAorICAgIC8vIGlmIHRoZSBvcGVyYXRpb24gaXMgYSBtZW1vcnkg
ZmVuY2UuCisgICAgYm9vbCBmZW5jZSB7IGZhbHNlIH07CiAKICAgICBIZWFwUmFuZ2Ugd3JpdGVz
OwogICAgIEhlYXBSYW5nZSByZWFkczsKQEAgLTg5LDYgKzkzLDcgQEAgc3RydWN0IEVmZmVjdHMg
ewogICAgICAgICByZXN1bHQucmVhZHMgPSBIZWFwUmFuZ2U6OnRvcCgpOwogICAgICAgICByZXN1
bHQucmVhZHNQaW5uZWQgPSB0cnVlOwogICAgICAgICByZXN1bHQud3JpdGVzUGlubmVkID0gdHJ1
ZTsKKyAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKQEAgLTEwMyw3ICsxMDgsNyBAQCBzdHJ1Y3QgRWZmZWN0cyB7CiAKICAgICBib29s
IG11c3RFeGVjdXRlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiB0ZXJtaW5hbCB8fCBl
eGl0c1NpZGV3YXlzIHx8IHdyaXRlc0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8IHdyaXRlc1Bpbm5l
ZDsKKyAgICAgICAgcmV0dXJuIHRlcm1pbmFsIHx8IGV4aXRzU2lkZXdheXMgfHwgd3JpdGVzTG9j
YWxTdGF0ZSB8fCB3cml0ZXMgfHwgd3JpdGVzUGlubmVkIHx8IGZlbmNlOwogICAgIH0KIAogICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiByZW9yZGVyaW5nIGluc3RydWN0aW9ucyB3aXRoIHRoZXNlIHJl
c3BlY3RpdmUgZWZmZWN0cyB3b3VsZCBjaGFuZ2UgcHJvZ3JhbQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Miw2
ICsxNDIsNyBAQCBzdHJ1Y3QgSW1wdXJlQmxvY2tEYXRhIHsKIAogICAgIFJhbmdlU2V0PEhlYXBS
YW5nZT4gcmVhZHM7IC8vIFRoaXMgb25seSBnZXRzIHVzZWQgZm9yIGZvcndhcmQgc3RvcmUgZWxp
bWluYXRpb24uCiAgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiB3cml0ZXM7IC8vIFRoaXMgZ2V0cyB1
c2VkIGZvciBib3RoIGxvYWQgYW5kIHN0b3JlIGVsaW1pbmF0aW9uLgorICAgIGJvb2wgZmVuY2U7
CiAKICAgICBNZW1vcnlWYWx1ZU1hcCBzdG9yZXNBdEhlYWQ7CiAgICAgTWVtb3J5VmFsdWVNYXAg
bWVtb3J5VmFsdWVzQXRUYWlsOwpAQCAtMTc0LDEyICsxNzUsMTQgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChtZW1vcnkgJiYgbWVtb3J5LT5pc1N0b3Jl
KCkKICAgICAgICAgICAgICAgICAgICAgJiYgIWRhdGEucmVhZHMub3ZlcmxhcHMobWVtb3J5LT5y
YW5nZSgpKQotICAgICAgICAgICAgICAgICAgICAmJiAhZGF0YS53cml0ZXMub3ZlcmxhcHMobWVt
b3J5LT5yYW5nZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWRhdGEud3JpdGVzLm92ZXJs
YXBzKG1lbW9yeS0+cmFuZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKCFkYXRhLmZlbmNl
IHx8ICFtZW1vcnktPmhhc0ZlbmNlKCkpKQogICAgICAgICAgICAgICAgICAgICBkYXRhLnN0b3Jl
c0F0SGVhZC5hZGQobWVtb3J5KTsKICAgICAgICAgICAgICAgICBkYXRhLnJlYWRzLmFkZChlZmZl
Y3RzLnJlYWRzKTsKIAogICAgICAgICAgICAgICAgIGlmIChIZWFwUmFuZ2Ugd3JpdGVzID0gZWZm
ZWN0cy53cml0ZXMpCiAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIoZGF0YSwgd3JpdGVzKTsK
KyAgICAgICAgICAgICAgICBkYXRhLmZlbmNlIHw9IGVmZmVjdHMuZmVuY2U7CiAKICAgICAgICAg
ICAgICAgICBpZiAobWVtb3J5KQogICAgICAgICAgICAgICAgICAgICBkYXRhLm1lbW9yeVZhbHVl
c0F0VGFpbC5hZGQobWVtb3J5KTsKQEAgLTQ3OCw2ICs0ODEsOSBAQCBwcml2YXRlOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZpbHRlcj4KICAgICBib29sIGZpbmRTdG9yZUFmdGVyQ2xvYmJlcihW
YWx1ZSogcHRyLCBIZWFwUmFuZ2UgcmFuZ2UsIGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHsK
KyAgICAgICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKICAgICAgICAgLy8gV2UgY2FuIGVsaW1p
bmF0ZSBhIHN0b3JlIGlmIGV2ZXJ5IGZvcndhcmQgcGF0aCBoaXRzIGEgc3RvcmUgdG8gdGhlIHNh
bWUgbG9jYXRpb24gYmVmb3JlCiAgICAgICAgIC8vIGhpdHRpbmcgYW55IG9wZXJhdGlvbiB0aGF0
IG9ic2VydmVzIHRoZSBzdG9yZS4gVGhpcyBzZWFyY2ggc2VlbXMgbGlrZSBpdCBzaG91bGQgYmUK
ICAgICAgICAgLy8gZXhwZW5zaXZlLCBidXQgaW4gdGhlIG92ZXJ3aGVsbWluZyBtYWpvcml0eSBv
ZiBjYXNlcyBpdCB3aWxsIGFsbW9zdCBpbW1lZGlhdGVseSBoaXQgYW4gCkBAIC02MTQsNiArNjIw
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxv
ZygqbV92YWx1ZSwgIjogbG9va2luZyBiYWNrd2FyZCBmb3IgIiwgKnB0ciwgIi4uLlxuIik7CiAg
ICAgICAgIAorICAgICAgICBpZiAobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNl
KCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBHaXZpbmcgdXAgYmVjYXVzZSBmZW5jZXMuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaWYgKE1lbW9yeVZhbHVlKiBtYXRj
aCA9IG1fZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuZmluZChwdHIsIGZpbHRlcikpIHsKICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBGb3VuZCAi
LCAqbWF0Y2gsICIgbG9jYWxseS5cbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw3IEBAIHZvaWQg
Z2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwKICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNwogICAgIH0KIAorICAgIC8vIFRo
aXMgcHV0cyB0aGUgSVIgaW4gcXVpcmtzIG1vZGUuCiAgICAgbG93ZXJNYWNyb3MocHJvY2VkdXJl
KTsKIAogICAgIGlmIChvcHRMZXZlbCA+PSAxKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljQmxvY2tJbnNlcnRpb25T
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgSW5zZXJ0aW9u
U2V0OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorY2xhc3MgR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPHN0ZDo6
dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gQmxvY2tJbnNlcnRpb247CisgICAgCisgICAgQmxvY2tJ
bnNlcnRpb25TZXQoVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4mIGJsb2NrcykK
KyAgICAgICAgOiBtX2Jsb2NrcyhibG9ja3MpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lk
IGluc2VydChCbG9ja0luc2VydGlvbiYmIGluc2VydGlvbikKKyAgICB7CisgICAgICAgIG1faW5z
ZXJ0aW9ucy5hcHBlbmQoV1RGTW92ZShpbnNlcnRpb24pKTsKKyAgICB9CisKKyAgICAvLyBJbnNl
cnQgYSBuZXcgYmxvY2sgYXQgYSBnaXZlbiBpbmRleC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnQo
dW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQorICAgIHsKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFY
LCBmcmVxdWVuY3kpKTsKKyAgICAgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7
CisgICAgICAgIGluc2VydChCbG9ja0luc2VydGlvbihpbmRleCwgV1RGTW92ZShibG9jaykpKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvLyBJbnNlcnRzIGEgbmV3IGJs
b2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVzdWFsbHkgeW91IHdpbGwgbm90IHBhc3MgdGhl
IGZyZXF1ZW5jeQorICAgIC8vIGFyZ3VtZW50LiBQYXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRvIGp1
c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdiZWZvcmUnIGJsb2NrLiBUaGF0J3MKKyAgICAv
LyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCisgICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJh
c2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pCisgICAgeworICAgICAg
ICByZXR1cm4gaW5zZXJ0KGJlZm9yZS0+aW5kZXgoKSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/
IGZyZXF1ZW5jeSA6IGJlZm9yZS0+ZnJlcXVlbmN5KCkpOworICAgIH0KKworICAgIC8vIEluc2Vy
dHMgYSBuZXcgYmxvY2sgYWZ0ZXIgdGhlIGdpdmVuIGJsb2NrLgorICAgIEJhc2ljQmxvY2sqIGlu
c2VydEFmdGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTikKKyAg
ICB7CisgICAgICAgIHJldHVybiBpbnNlcnQoYWZ0ZXItPmluZGV4KCkgKyAxLCBmcmVxdWVuY3kg
PT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYWZ0ZXItPmZyZXF1ZW5jeSgpKTsKKyAgICB9CisK
KyAgICBib29sIGV4ZWN1dGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1faW5zZXJ0aW9ucy5pc0Vt
cHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBX
ZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdl
IG5lZWQgdG8gc29ydCB0aGVtIGJlZm9yZQorICAgICAgICAvLyBydW5uaW5nIFdURjo6ZXhlY3V0
ZUluc2VydGlvbnMuIFdlIHN0cm9uZ2x5IHByZWZlciBhIHN0YWJsZSBzb3J0IGFuZCB3ZSB3YW50
IGl0IHRvIGJlCisgICAgICAgIC8vIGZhc3QsIHNvIHdlIHVzZSBidWJibGUgc29ydC4KKyAgICAg
ICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsK
KyAgICAgICAgCisgICAgICAgIGV4ZWN1dGVJbnNlcnRpb25zKG1fYmxvY2tzLCBtX2luc2VydGlv
bnMpOworICAgICAgICAKKyAgICAgICAgLy8gUHJ1bmUgb3V0IGVtcHR5IGVudHJpZXMuIFRoaXMg
aXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBpdCdzCisgICAgICAgIC8vIGhlYWx0aHkgdG8g
a2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCisgICAgICAgIG1fYmxvY2tzLnJlbW92
ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgWyZdIChzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9j
az4mIGJsb2NrUHRyKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIWJsb2NrUHRy
OworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMuCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fYmxvY2tzW2ld
LT5tX2luZGV4ID0gaTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiYgbV9ibG9j
a3M7CisgICAgVmVjdG9yPEJsb2NrSW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkocmV2aXNpb24gMjEyOTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg4LDYgKzg4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOwogICAgIH0KICAgICAKKyAgICBIZWFwUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IEhlYXBSYW5n
ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSGVhcFJhbmdlKAorICAgICAg
ICAgICAgc3RkOjptaW4obV9iZWdpbiwgb3RoZXIubV9iZWdpbiksCisgICAgICAgICAgICBzdGQ6
Om1heChtX2VuZCwgb3RoZXIubV9lbmQpKTsKKyAgICB9CisgICAgCiAgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW4gIT0gbV9lbmQ7IH0KIAogICAgIHVu
c2lnbmVkIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbjsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTgsNiArNTgsMTEgQEAgVmFsdWUqIEluc2VydGlvblNldDo6aW5zZXJ0Qm90dG9t
KHNpemVfdAogICAgIHJldHVybiBpbnNlcnRCb3R0b20oaW5kZXgsIGxpa2VWYWx1ZS0+b3JpZ2lu
KCksIGxpa2VWYWx1ZS0+dHlwZSgpKTsKIH0KIAorVmFsdWUqIEluc2VydGlvblNldDo6aW5zZXJ0
Q2xvbmUoc2l6ZV90IGluZGV4LCBWYWx1ZSogdmFsdWUpCit7CisgICAgcmV0dXJuIGluc2VydFZh
bHVlKGluZGV4LCBtX3Byb2NlZHVyZS5jbG9uZSh2YWx1ZSkpOworfQorCiB2b2lkIEluc2VydGlv
blNldDo6ZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykKIHsKICAgICBidWJibGVTb3J0KG1faW5z
ZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MSw2ICs3MSw4IEBAIHB1YmxpYzoKIAogICAgIFZhbHVlKiBpbnNlcnRCb3R0b20oc2l6ZV90IGlu
ZGV4LCBPcmlnaW4sIFR5cGUpOwogICAgIFZhbHVlKiBpbnNlcnRCb3R0b20oc2l6ZV90IGluZGV4
LCBWYWx1ZSopOworICAgIAorICAgIFZhbHVlKiBpbnNlcnRDbG9uZShzaXplX3QgaW5kZXgsIFZh
bHVlKik7CiAKICAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01OCwxMSArNTgsMTQgQEAgcHVibGljOgogICAgICAgICA6IG1fcHJvYyhwcm9jKQog
ICAgICAgICAsIG1fYmxvY2tJbnNlcnRpb25TZXQocHJvYykKICAgICAgICAgLCBtX2luc2VydGlv
blNldChwcm9jKQorICAgICAgICAsIG1fdXNlQ291bnRzKHByb2MpCiAgICAgewogICAgIH0KIAog
ICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Byb2MuaGFz
UXVpcmtzKCkpOworICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
cHJvYykgewogICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwogICAgICAgICAgICAgcHJvY2Vz
c0N1cnJlbnRCbG9jaygpOwpAQCAtNzIsNiArNzUsMTAgQEAgcHVibGljOgogICAgICAgICAgICAg
bV9wcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAgICAgICAgICAgICBtX3Byb2MuaW52YWxpZGF0
ZUNGRygpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGluZGljYXRlcyB0
aGF0IHdlJ3ZlIAorICAgICAgICBtX3Byb2Muc2V0SGFzUXVpcmtzKHRydWUpOworICAgICAgICAK
ICAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgICB9CiAgICAgCkBAIC0xODUsNyArMTkyLDk2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbG9hZC1sb2FkIGZlbmNlLiBUaGlzIGNvZGVnZW5z
IHRvIG5vdGhpbmcgb24gWDg2LiBXZSB1c2UgaXQgdG8gdGVsbCB0aGUKKyAgICAgICAgICAgICAg
ICAgICAgLy8gY29tcGlsZXIgbm90IHRvIGJsb2NrIGxvYWQgbW90aW9uLgorICAgICAgICAgICAg
ICAgICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxGZW5jZVZh
bHVlPihtX2luZGV4LCBtX29yaWdpbik7CisgICAgICAgICAgICAgICAgICAgIGZlbmNlLT5yZWFk
ID0gSGVhcFJhbmdlKCk7CisgICAgICAgICAgICAgICAgICAgIGZlbmNlLT53cml0ZSA9IEhlYXBS
YW5nZTo6dG9wKCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAv
LyBLaWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNob3VsZCB1bmxvY2sgYSBidW5jaCBvZiBjb2RlIHNp
bXBsaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoQm90
dG9tKG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICBjYXNlIEF0
b21pY1dlYWtDQVM6CisgICAgICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzogeworICAgICAg
ICAgICAgICAgIGlmIChpc1g4NigpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1
ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICAgICAgV2lkdGggd2lkdGggPSBhdG9t
aWMtPm9wZXJhdGlvbldpZHRoKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKGlzQ2Fub25pY2FsV2lkdGgod2lkdGgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYWx1ZSogZXhwZWN0ZWRWYWx1ZSA9
IGF0b21pYy0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
T24gQVJNLCB0aGUgbG9hZCBwYXJ0IG9mIHRoZSBDQVMgZG9lcyBhIGxvYWQgd2l0aCB6ZXJvIGV4
dGVuc2lvbi4gVGhlcmVmb3JlLCB3ZSBuZWVkCisgICAgICAgICAgICAgICAgLy8gdG8gemVyby1l
eHRlbmQgdGhlIGlucHV0LgorICAgICAgICAgICAgICAgIFZhbHVlKiBtYXNrZWRFeHBlY3RlZFZh
bHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAg
bV9pbmRleCwgQml0QW5kLCBtX29yaWdpbiwgZXhwZWN0ZWRWYWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0SW50Q29uc3RhbnQobV9pbmRleCwgZXhwZWN0ZWRW
YWx1ZSwgbWFzayh3aWR0aCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBh
dG9taWMtPmNoaWxkKDApID0gbWFza2VkRXhwZWN0ZWRWYWx1ZTsKKyAgICAgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgICAg
ICAgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnT3I6
CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgICAgICAgICBjYXNlIEF0b21p
Y1hjaGdYb3I6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGc6IHsKKyAgICAgICAgICAgICAg
ICAvLyBPbiBYODYsIHRoZXNlIG1heSBhY3R1YWxseSByZXR1cm4gZ2FyYmFnZSBpbiB0aGUgaGln
aCBiaXRzLiBPbiBBUk02NCwgdGhlc2Ugc29ydGEKKyAgICAgICAgICAgICAgICAvLyB6ZXJvLWV4
dGVuZCB0aGVpciBoaWdoIGJpdHMsIGV4Y2VwdCB0aGF0IHRoZSBoaWdoIGJpdHMgbWlnaHQgZ2V0
IHBvbGx1dGVkIGJ5IGhpZ2gKKyAgICAgICAgICAgICAgICAvLyBiaXRzIGluIHRoZSBvcGVyYW5k
LiAuIFNvLCBlaXRoZXIgd2F5LCB3ZSBuZWVkIHRvIHRocm93IGEgc2lnbi1leHRlbmQgb24gdGhl
c2UKKyAgICAgICAgICAgICAgICAvLyB0aGluZ3MuCisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUt
Pm9wY29kZSgpID09IEF0b21pY1hjaGdTdWIgJiYgbV91c2VDb3VudHMubnVtVXNlcyhtX3ZhbHVl
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gT24geDg2LCB4Y2hnYWRkIGlzIGJldHRl
ciB0aGFuIHhjaGdzdWIgaWYgaXQgaGFzIGFueSB1c2Vycy4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWUtPnNldEtpbmRVbnNhZmVseShBdG9taWNYY2hnQWRkKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBOZWcsIG1fb3JpZ2lu
LCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhlbXB0ID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEF0
b21pY1hjaGdPcjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgICAgICAgICAgICAgICAg
ICAgICBleGVtcHQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoZXhlbXB0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVl
LT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgICAgICBXaWR0aCB3aWR0aCA9IGF0b21p
Yy0+b3BlcmF0aW9uV2lkdGgoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAoaXNDYW5vbmljYWxXaWR0aCh3aWR0aCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdWYWx1ZSA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIHNp
Z25FeHRlbmRPcGNvZGUod2lkdGgpLCBtX29yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Q2xvbmUobV9pbmRleCwgbV92YWx1ZSkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3VmFs
dWUpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNDcwLDYgKzU2
Niw3IEBAIHByaXZhdGU6CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgQmxvY2tJbnNlcnRp
b25TZXQgbV9ibG9ja0luc2VydGlvblNldDsKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25T
ZXQ7CisgICAgVXNlQ291bnRzIG1fdXNlQ291bnRzOwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7
CiAgICAgdW5zaWduZWQgbV9pbmRleDsKICAgICBWYWx1ZSogbV92YWx1ZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVy
T3B0aW1pemF0aW9ucy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU2LDE1ICsxNTYsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUm90TDog
ewogICAgICAgICAgICAgICAgIC8vIEFSTTY0IGRvZXNuJ3QgaGF2ZSBhIHJvdGF0ZSBsZWZ0Lgog
ICAgICAgICAgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGlzQVJNNjQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld1NoaWZ0ID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBOZWcsIG1fdmFsdWUtPm9yaWdp
bigpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSog
cm90YXRlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBSb3RSLCBtX3Zh
bHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG5ld1NoaWZ0KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocm90YXRlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIFZhbHVlKiBuZXdTaGlmdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1
ZT4obV9pbmRleCwgTmVnLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwor
ICAgICAgICAgICAgICAgICAgICBWYWx1ZSogcm90YXRlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
PFZhbHVlPihtX2luZGV4LCBSb3RSLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQo
MCksIG5ld1NoaWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJ
ZGVudGl0eShyb3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxNCBAQCBuYW1lc3BhY2Ugewog
CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAorLy8gRklYTUU6IFdlIHdvdWxkbid0IG5l
ZWQgdGhpcyBpZiBBaXIgc3VwcG9ydGVkIFdpZHRoIG1vZGlmaWVycyBpbiBBaXI6OktpbmQuCisv
LyBPT1BTISEhIChuZWVkIGEgYnVnIFVSTCkKKyNkZWZpbmUgT1BDT0RFX0ZPUl9XSURUSChvcGNv
ZGUsIHdpZHRoKSAoIFwKKyAgICAod2lkdGgpID09IFdpZHRoOCA/IG9wY29kZSAjIyA4IDogXAor
ICAgICh3aWR0aCkgPT0gV2lkdGgxNiA/IG9wY29kZSAjIyAxNiA6IFwKKyAgICAod2lkdGgpID09
IFdpZHRoMzIgPyBvcGNvZGUgIyMgMzIgOiBcCisgICAgb3Bjb2RlICMjIDY0KQorCiBjbGFzcyBM
b3dlclRvQWlyIHsKIHB1YmxpYzoKICAgICBMb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJl
KQpAQCAtODMsNiArOTEsMTIgQEAgcHVibGljOgogICAgICAgICAsIG1fZG9taW5hdG9ycyhwcm9j
ZWR1cmUuZG9taW5hdG9ycygpKQogICAgICAgICAsIG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKICAg
ICAgICAgLCBtX2NvZGUocHJvY2VkdXJlLmNvZGUoKSkKKyAgICAgICAgLCBtX2Jsb2NrSW5zZXJ0
aW9uU2V0KG1fY29kZSkKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAgICAgICAsIG1f
ZWF4KFg4NlJlZ2lzdGVyczo6ZWF4KQorICAgICAgICAsIG1fZWN4KFg4NlJlZ2lzdGVyczo6ZWN4
KQorICAgICAgICAsIG1fZWR4KFg4NlJlZ2lzdGVyczo6ZWR4KQorI2VuZGlmCiAgICAgewogICAg
IH0KIApAQCAtMTI0LDE0ICsxMzgsMTggQEAgcHVibGljOgogICAgICAgICAvLyBob2lzdGVkIGFk
ZHJlc3MgZXhwcmVzc2lvbiBiZWZvcmUgd2UgZHVwbGljYXRlIGl0IGJhY2sgaW50byB0aGUgbG9v
cC4KICAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2NlZHVyZS5ibG9j
a3NJblByZU9yZGVyKCkpIHsKICAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKLSAgICAgICAg
ICAgIC8vIFJlc2V0IHNvbWUgc3RhdGUuCi0gICAgICAgICAgICBtX2luc3RzLnJlc2l6ZSgwKTsK
IAogICAgICAgICAgICAgbV9pc1JhcmUgPSAhbV9mYXN0V29ya2xpc3Quc2F3KGJsb2NrKTsKIAog
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiTG93ZXJp
bmcgQmxvY2sgIiwgKmJsb2NrLCAiOlxuIik7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IHRoZSBzdWNjZXNzb3JzIGFyZSBzZXQgdXAgY29ycmVjdGx5LgorICAg
ICAgICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNj
ZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrVG9CbG9ja1tibG9ja10tPnN1Y2Nl
c3NvcnMoKS5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIEFpcjo6RnJlcXVlbnRlZEJsb2Nr
KG1fYmxvY2tUb0Jsb2NrW3N1Y2Nlc3Nvci5ibG9jaygpXSwgc3VjY2Vzc29yLmZyZXF1ZW5jeSgp
KSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIFByb2Nlc3MgYmxvY2tzIGluIHJl
dmVyc2Ugb3JkZXIgc28gd2Ugc2VlIHVzZXMgYmVmb3JlIGRlZnMuIFRoYXQncyB3aGF0IGFsbG93
cyB1cwogICAgICAgICAgICAgLy8gdG8gbWF0Y2ggcGF0dGVybnMgZWZmZWN0aXZlbHkuCiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7CkBAIC0xNDks
MTkgKzE2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBpbnN0cnVjdGlvbnMuIG1faW5zdHMgY29u
dGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCi0gICAgICAgICAgICAv
LyBpdCBpbiByZXZlcnNlLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbnN0cy5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBtX2luc3Rz
W2ldKQotICAgICAgICAgICAgICAgICAgICBtX2Jsb2NrVG9CbG9ja1tibG9ja10tPmFwcGVuZElu
c3QoV1RGTW92ZShpbnN0KSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHRoZSBzdWNjZXNzb3JzIGFyZSBzZXQgdXAgY29ycmVjdGx5LgotICAgICAgICAg
ICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3Jz
KCkpIHsKLSAgICAgICAgICAgICAgICBtX2Jsb2NrVG9CbG9ja1tibG9ja10tPnN1Y2Nlc3NvcnMo
KS5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIEFpcjo6RnJlcXVlbnRlZEJsb2NrKG1fYmxv
Y2tUb0Jsb2NrW3N1Y2Nlc3Nvci5ibG9jaygpXSwgc3VjY2Vzc29yLmZyZXF1ZW5jeSgpKSk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5pc2hBcHBlbmRpbmdJbnN0cnVjdGlvbnMobV9i
bG9ja1RvQmxvY2tbYmxvY2tdKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9ibG9j
a0luc2VydGlvblNldC5leGVjdXRlKCk7CiAKICAgICAgICAgQWlyOjpJbnNlcnRpb25TZXQgaW5z
ZXJ0aW9uU2V0KG1fY29kZSk7CiAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IG1fcHJvbG9ndWUp
CkBAIC01MzgsNyArNTQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsK
IAogICAgICAgICBpbnQzMl90IG9mZnNldCA9IHZhbHVlLT5vZmZzZXQoKTsKLSAgICAgICAgV2lk
dGggd2lkdGggPSB2YWx1ZS0+YWNjZXNzV2lkdGgoKTsKKyAgICAgICAgV2lkdGggd2lkdGggPSB2
YWx1ZS0+bG9hZFN0b3JlV2lkdGgoKTsKIAogICAgICAgICBBcmcgcmVzdWx0ID0gZWZmZWN0aXZl
QWRkcih2YWx1ZS0+bGFzdENoaWxkKCksIG9mZnNldCwgd2lkdGgpOwogICAgICAgICBBU1NFUlQo
cmVzdWx0LmlzVmFsaWRGb3JtKHdpZHRoKSk7CkBAIC01NjIsMTEgKzU3MSwxNiBAQCBwcml2YXRl
OgogICAgIAogICAgIEFyZ1Byb21pc2UgbG9hZFByb21pc2VBbnlPcGNvZGUoVmFsdWUqIGxvYWRW
YWx1ZSkKICAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvYWRWYWx1ZS0+YXM8TWVtb3J5
VmFsdWU+KCkpOwogICAgICAgICBpZiAoIWNhbkJlSW50ZXJuYWwobG9hZFZhbHVlKSkKICAgICAg
ICAgICAgIHJldHVybiBBcmcoKTsKICAgICAgICAgaWYgKGNyb3NzZXNJbnRlcmZlcmVuY2UobG9h
ZFZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKLSAgICAgICAgQXJnUHJvbWlzZSBy
ZXN1bHQoYWRkcihsb2FkVmFsdWUpLCBsb2FkVmFsdWUpOworICAgICAgICBpZiAobG9hZFZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBBcmco
KTsKKyAgICAgICAgQXJnIGxvYWRBZGRyID0gYWRkcihsb2FkVmFsdWUpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChsb2FkQWRkcik7CisgICAgICAgIEFyZ1Byb21pc2UgcmVzdWx0KGxvYWRBZGRy
LCBsb2FkVmFsdWUpOwogICAgICAgICBpZiAobG9hZFZhbHVlLT50cmFwcygpKQogICAgICAgICAg
ICAgcmVzdWx0LnNldFRyYXBzKHRydWUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODk4
LDExICs5MTIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQogICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKHZh
bHVlKSwgdG1wKG1fdmFsdWUpKTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChhbW91bnQpLCBU
bXAoWDg2UmVnaXN0ZXJzOjplY3gpKTsKLSAgICAgICAgYXBwZW5kKG9wY29kZSwgVG1wKFg4NlJl
Z2lzdGVyczo6ZWN4KSwgdG1wKG1fdmFsdWUpKTsKLSNlbmRpZgorICAgICAgICBhcHBlbmQoTW92
ZSwgdG1wKGFtb3VudCksIG1fZWN4KTsKKyAgICAgICAgYXBwZW5kKG9wY29kZSwgbV9lY3gsIHRt
cChtX3ZhbHVlKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlMzIs
IEFpcjo6T3Bjb2RlIG9wY29kZTY0PgpAQCAtOTMxLDEwICs5NDMsMTUgQEAgcHJpdmF0ZToKICAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlMzIsIEFpcjo6T3Bjb2RlIG9wY29kZTY0LCBDb21tdXRh
dGl2aXR5IGNvbW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KICAgICBib29sIHRyeUFwcGVu
ZFN0b3JlQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKICAgICB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpKTsKKyAgICAgICAgCiAgICAg
ICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUob3Bjb2RlMzIsIG9wY29k
ZTY0LCBsZWZ0LT50eXBlKCkpOwogICAgICAgICBpZiAob3Bjb2RlID09IEFpcjo6T29wcykKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVlLT5h
czxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCiAgICAgICAgIEFyZyBzdG9yZUFkZHIgPSBhZGRyKG1fdmFsdWUpOwogICAgICAg
ICBBU1NFUlQoc3RvcmVBZGRyKTsKIApAQCAtOTk0LDEwICsxMDExLDQ4IEBAIHByaXZhdGU6CiAK
ICAgICAgICAgcmV0dXJuIEluc3QobW92ZSwgbV92YWx1ZSwgdG1wKHZhbHVlKSwgZGVzdCk7CiAg
ICAgfQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlKFdpZHRoIHdpZHRoLCBCYW5r
IGJhbmssIGJvb2wgcmVsZWFzZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAg
ICAgICAgY2FzZSBXaWR0aDg6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChiYW5rID09IEdQ
KTsKKyAgICAgICAgICAgIHJldHVybiByZWxlYXNlID8gU3RvcmVSZWw4IDogU3RvcmU4OworICAg
ICAgICBjYXNlIFdpZHRoMTY6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChiYW5rID09IEdQ
KTsKKyAgICAgICAgICAgIHJldHVybiByZWxlYXNlID8gU3RvcmVSZWwxNiA6IFN0b3JlMTY7Cisg
ICAgICAgIGNhc2UgV2lkdGgzMjoKKyAgICAgICAgICAgIHN3aXRjaCAoYmFuaykgeworICAgICAg
ICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVs
MzIgOiBNb3ZlMzI7CisgICAgICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFyZWxlYXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW92ZUZsb2F0Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2lkdGg2NDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzNjRCaXQoKSk7CisgICAgICAgICAgICBzd2l0
Y2ggKGJhbmspIHsKKyAgICAgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlbGVhc2UgPyBTdG9yZVJlbDY0IDogTW92ZTsKKyAgICAgICAgICAgIGNhc2UgRlA6CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlbGVhc2UpOworICAgICAgICAgICAgICAgIHJl
dHVybiBNb3ZlRG91YmxlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAg
CisgICAgQWlyOjpPcGNvZGUgc3RvcmVPcGNvZGUoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAg
ICAgcmV0dXJuIHN0b3JlT3Bjb2RlKG1lbW9yeS0+bG9hZFN0b3JlV2lkdGgoKSwgbWVtb3J5LT5h
Y2Nlc3NCYW5rKCksIG1lbW9yeS0+aGFzRmVuY2UoKSk7CisgICAgfQogCiAgICAgSW5zdCBjcmVh
dGVTdG9yZShWYWx1ZSogdmFsdWUsIGNvbnN0IEFyZyYgZGVzdCkKICAgICB7Ci0gICAgICAgIEFp
cjo6T3Bjb2RlIG1vdmVPcGNvZGUgPSBtb3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgpKTsKKyAgICAg
ICAgQWlyOjpPcGNvZGUgbW92ZU9wY29kZSA9IHN0b3JlT3Bjb2RlKHZhbHVlKTsKICAgICAgICAg
cmV0dXJuIGNyZWF0ZVN0b3JlKG1vdmVPcGNvZGUsIHZhbHVlLCBkZXN0KTsKICAgICB9CiAKQEAg
LTEwMDYsNyArMTA2MSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBhcHBlbmQodHJhcHBp
bmdJbnN0KG1fdmFsdWUsIGNyZWF0ZVN0b3JlKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikp
KTsKICAgICB9Ci0KKyAgICAKICAgICBBaXI6Ok9wY29kZSBtb3ZlRm9yVHlwZShUeXBlIHR5cGUp
CiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTEwNzMsNyArMTEyOCw0MSBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKGluc3QpOwogICAg
IH0KKyAgICAKKyAgICB2b2lkIGZpbmlzaEFwcGVuZGluZ0luc3RydWN0aW9ucyhBaXI6OkJhc2lj
QmxvY2sqIHRhcmdldCkKKyAgICB7CisgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGluc3RydWN0
aW9ucy4gbV9pbnN0cyBjb250YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIsIHNvIHdlIHByb2Nl
c3MKKyAgICAgICAgLy8gaXQgaW4gcmV2ZXJzZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9pbnN0cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IG1f
aW5zdHNbaV0pCisgICAgICAgICAgICAgICAgdGFyZ2V0LT5hcHBlbmRJbnN0KFdURk1vdmUoaW5z
dCkpOworICAgICAgICB9CisgICAgICAgIG1faW5zdHMucmVzaXplKDApOworICAgIH0KKyAgICAK
KyAgICBBaXI6OkJhc2ljQmxvY2sqIG5ld0Jsb2NrKCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEFmdGVyKG1fYmxvY2tUb0Jsb2NrW21fYmxvY2tdKTsK
KyAgICB9CiAKKyAgICAvLyBOT1RFOiBUaGlzIHdpbGwgY3JlYXRlIGEgY29udGludWF0aW9uIGJs
b2NrIChgbmV4dEJsb2NrYCkgKmFmdGVyKiBhbnkgYmxvY2tzIHlvdSd2ZSBjcmVhdGVkIHVzaW5n
CisgICAgLy8gbmV3QmxvY2soKS4gU28sIGl0J3MgcHJlZmVyYWJsZSB0byBjcmVhdGUgYWxsIG9m
IHlvdXIgYmxvY2tzIHVwZnJvbnQgdXNpbmcgbmV3QmxvY2soKS4gQWxzbyBub3RlCisgICAgLy8g
dGhhdCBhbnkgY29kZSB5b3UgZW1pdCBiZWZvcmUgdGhpcyB3aWxsIGJlIHByZXBlbmRlZCB0byB0
aGUgY29udGludWF0aW9uLCBhbmQgYW55IGNvZGUgeW91IGVtaXQKKyAgICAvLyBhZnRlciB0aGlz
IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHByZXZpb3VzIGJsb2NrLgorICAgIHZvaWQgc3BsaXRC
bG9jayhBaXI6OkJhc2ljQmxvY2sqJiBwcmV2aW91c0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqJiBu
ZXh0QmxvY2spCisgICAgeworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9j
a1RvQmxvY2tbbV9ibG9ja107CisgICAgICAgIAorICAgICAgICBwcmV2aW91c0Jsb2NrID0gYmxv
Y2s7CisgICAgICAgIG5leHRCbG9jayA9IG1fYmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0QWZ0ZXIo
YmxvY2spOworICAgICAgICAKKyAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKG5l
eHRCbG9jayk7CisgICAgICAgIG5leHRCbG9jay0+c3VjY2Vzc29ycygpID0gYmxvY2stPnN1Y2Nl
c3NvcnMoKTsKKyAgICAgICAgYmxvY2stPnN1Y2Nlc3NvcnMoKS5jbGVhcigpOworICAgICAgICAK
KyAgICAgICAgbV9pbnN0cy5hcHBlbmQoVmVjdG9yPEluc3Q+KCkpOworICAgIH0KKyAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgVCogZW5z
dXJlU3BlY2lhbChUKiYgZmllbGQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKICAgICB7CkBA
IC0xMTIzLDcgKzEyMTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKICAgICAgICAgICAgICAgICBh
cmcgPSBBcmc6OmNhbGxBcmcodmFsdWUucmVwKCkub2Zmc2V0RnJvbVNQKCkpOwotICAgICAgICAg
ICAgICAgIGFwcGVuZFN0b3JlKHZhbHVlLnZhbHVlKCksIGFyZyk7CisgICAgICAgICAgICAgICAg
YXBwZW5kU3RvcmUobW92ZUZvclR5cGUodmFsdWUudmFsdWUoKSksIGFyZyk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xOTYxLDYgKzIwNTAsMzA4IEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHZvaWQgYXBwZW5kWDg2RGl2KEIz
OjpPcGNvZGUgb3ApCisgICAgeworICAgICAgICBBaXI6Ok9wY29kZSBjb252ZXJ0VG9Eb3VibGVX
b3JkOworICAgICAgICBBaXI6Ok9wY29kZSBkaXY7CisgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+
dHlwZSgpKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBjb252ZXJ0VG9Eb3Vi
bGVXb3JkID0gWDg2Q29udmVydFRvRG91YmxlV29yZDMyOworICAgICAgICAgICAgZGl2ID0gWDg2
RGl2MzI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAg
ICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBYODZDb252ZXJ0VG9RdWFkV29yZDY0OworICAgICAg
ICAgICAgZGl2ID0gWDg2RGl2NjQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQob3AgPT0gRGl2IHx8IG9wID09
IE1vZCk7CisgICAgICAgIFRtcCByZXN1bHQgPSBvcCA9PSBEaXYgPyBtX2VheCA6IG1fZWR4Owor
CisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBtX2VheCk7Cisg
ICAgICAgIGFwcGVuZChjb252ZXJ0VG9Eb3VibGVXb3JkLCBtX2VheCwgbV9lZHgpOworICAgICAg
ICBhcHBlbmQoZGl2LCBtX2VheCwgbV9lZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkpOworICAg
ICAgICBhcHBlbmQoTW92ZSwgcmVzdWx0LCB0bXAobV92YWx1ZSkpOworICAgIH0KKworICAgIHZv
aWQgYXBwZW5kWDg2VURpdihCMzo6T3Bjb2RlIG9wKQorICAgIHsKKyAgICAgICAgQWlyOjpPcGNv
ZGUgZGl2ID0gbV92YWx1ZS0+dHlwZSgpID09IEludDMyID8gWDg2VURpdjMyIDogWDg2VURpdjY0
OworCisgICAgICAgIEFTU0VSVChvcCA9PSBVRGl2IHx8IG9wID09IFVNb2QpOworICAgICAgICBU
bXAgcmVzdWx0ID0gb3AgPT0gVURpdiA/IG1fZWF4IDogbV9lZHg7CisKKyAgICAgICAgYXBwZW5k
KE1vdmUsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIG1fZWF4KTsKKyAgICAgICAgYXBwZW5kKFhv
cjY0LCBtX2VkeCwgbV9lZHgpOworICAgICAgICBhcHBlbmQoZGl2LCBtX2VheCwgbV9lZHgsIHRt
cChtX3ZhbHVlLT5jaGlsZCgxKSkpOworICAgICAgICBhcHBlbmQoTW92ZSwgcmVzdWx0LCB0bXAo
bV92YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBBaXI6Ok9wY29kZSBsb2FkTGlua09wY29kZShX
aWR0aCB3aWR0aCwgYm9vbCBmZW5jZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmZW5jZSA/IE9Q
Q09ERV9GT1JfV0lEVEgoTG9hZExpbmtBY3EsIHdpZHRoKSA6IE9QQ09ERV9GT1JfV0lEVEgoTG9h
ZExpbmssIHdpZHRoKTsKKyAgICB9CisgICAgCisgICAgQWlyOjpPcGNvZGUgc3RvcmVDb25kT3Bj
b2RlKFdpZHRoIHdpZHRoLCBib29sIGZlbmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZlbmNl
ID8gT1BDT0RFX0ZPUl9XSURUSChTdG9yZUNvbmRSZWwsIHdpZHRoKSA6IE9QQ09ERV9GT1JfV0lE
VEgoU3RvcmVDb25kLCB3aWR0aCk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgY2FuIGVtaXQg
Y29kZSBmb3IgdGhlIGZvbGxvd2luZyBwYXR0ZXJuczoKKyAgICAvLyBBdG9taWNXZWFrQ0FTCisg
ICAgLy8gQml0WG9yKEF0b21pY1dlYWtDQVMsIDEpCisgICAgLy8gQXRvbWljU3Ryb25nQ0FTCisg
ICAgLy8gRXF1YWwoQXRvbWljU3Ryb25nQ0FTLCBleHBlY3RlZCkKKyAgICAvLyBOb3RFcXVhbChB
dG9taWNTdHJvbmdDQVMsIGV4cGVjdGVkKQorICAgIC8vIEJyYW5jaChBdG9taWNXZWFrQ0FTKQor
ICAgIC8vIEJyYW5jaChFcXVhbChBdG9taWNTdHJvbmdDQVMsIGV4cGVjdGVkKSkKKyAgICAvLyBC
cmFuY2goTm90RXF1YWwoQXRvbWljU3Ryb25nQ0FTLCBleHBlY3RlZCkpCisgICAgLy8KKyAgICAv
LyBJdCBhc3N1bWVzIHRoYXQgYXRvbWljVmFsdWUgcG9pbnRzIHRvIHRoZSBDQVMsIGFuZCBtX3Zh
bHVlIHBvaW50cyB0byB0aGUgaW5zdHJ1Y3Rpb24gYmVpbmcKKyAgICAvLyBnZW5lcmF0ZWQuIEl0
IGFzc3VtZXMgdGhhdCB5b3UndmUgY29uc3VtZWQgZXZlcnl0aGluZyB0aGF0IG5lZWRzIHRvIGJl
IGNvbnN1bWVkLgorICAgIHZvaWQgYXBwZW5kQ0FTKFZhbHVlKiBhdG9taWNWYWx1ZSwgYm9vbCBp
bnZlcnQpCisgICAgeworICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gYXRvbWljVmFsdWUt
PmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChhdG9taWMpOworICAg
ICAgICAKKyAgICAgICAgYm9vbCBpc0JyYW5jaCA9IG1fdmFsdWUtPm9wKCkgPT0gQnJhbmNoOwor
ICAgICAgICBib29sIGlzU3Ryb25nID0gYXRvbWljLT5vcCgpID09IEF0b21pY1N0cm9uZ0NBUzsK
KyAgICAgICAgYm9vbCByZXR1cm5zT2xkVmFsdWUgPSBtX3ZhbHVlLT5vcCgpID09IEF0b21pY1N0
cm9uZ0NBUzsKKyAgICAgICAgCisgICAgICAgIFdpZHRoIHdpZHRoID0gYXRvbWljLT5vcGVyYXRp
b25XaWR0aCgpOworICAgICAgICBBcmcgYWRkcmVzcyA9IGFkZHIoYXRvbWljKTsKKworICAgICAg
ICBUbXAgdmFsdWVSZXN1bHRUbXA7CisgICAgICAgIFRtcCBib29sUmVzdWx0VG1wOworICAgICAg
ICBpZiAocmV0dXJuc09sZFZhbHVlKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW52
ZXJ0KTsKKyAgICAgICAgICAgIHZhbHVlUmVzdWx0VG1wID0gdG1wKG1fdmFsdWUpOworICAgICAg
ICAgICAgYm9vbFJlc3VsdFRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICB9IGVsc2Ug
aWYgKGlzQnJhbmNoKSB7CisgICAgICAgICAgICB2YWx1ZVJlc3VsdFRtcCA9IG1fY29kZS5uZXdU
bXAoR1ApOworICAgICAgICAgICAgYm9vbFJlc3VsdFRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVSZXN1bHRUbXAgPSBtX2NvZGUubmV3
VG1wKEdQKTsKKyAgICAgICAgICAgIGJvb2xSZXN1bHRUbXAgPSB0bXAobV92YWx1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFRtcCBzdWNjZXNzQm9vbFJlc3VsdFRtcDsKKyAgICAg
ICAgaWYgKGlzU3Ryb25nICYmICFpc0JyYW5jaCkKKyAgICAgICAgICAgIHN1Y2Nlc3NCb29sUmVz
dWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1
Y2Nlc3NCb29sUmVzdWx0VG1wID0gYm9vbFJlc3VsdFRtcDsKKworICAgICAgICBUbXAgZXhwZWN0
ZWRWYWx1ZVRtcCA9IHRtcChhdG9taWMtPmNoaWxkKDApKTsKKyAgICAgICAgVG1wIG5ld1ZhbHVl
VG1wID0gdG1wKGF0b21pYy0+Y2hpbGQoMSkpOworICAgICAgICAKKyAgICAgICAgRnJlcXVlbnRl
ZEJsb2NrIHN1Y2Nlc3M7CisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayBmYWlsdXJlOworICAgICAg
ICBpZiAoaXNCcmFuY2gpIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBtX2Jsb2NrVG9CbG9ja1tt
X2Jsb2NrXS0+c3VjY2Vzc29yKGludmVydCk7CisgICAgICAgICAgICBmYWlsdXJlID0gbV9ibG9j
a1RvQmxvY2tbbV9ibG9ja10tPnN1Y2Nlc3NvcighaW52ZXJ0KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92
ZUZvclR5cGUoYXRvbWljLT5vcGVyYXRpb25UeXBlKCkpLCBpbW1PclRtcChhdG9taWMtPmNoaWxk
KDApKSwgbV9lYXgpOworICAgICAgICAgICAgaWYgKHJldHVybnNPbGRWYWx1ZSkgeworICAgICAg
ICAgICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKEF0b21pY1N0cm9uZ0NBUywgd2lkdGgp
LCBtX2VheCwgbmV3VmFsdWVUbXAsIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIGFwcGVuZChy
ZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT5vcGVyYXRpb25UeXBlKCkpLCBtX2VheCwgdmFsdWVS
ZXN1bHRUbXApOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0JyYW5jaCkgeworICAgICAgICAg
ICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKEJyYW5jaEF0b21pY1N0cm9uZ0NBUywgd2lk
dGgpLCBBcmc6OnN0YXR1c0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlN1Y2Nlc3MpLCBtX2VheCwgbmV3
VmFsdWVUbXAsIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Jsb2NrW21fYmxv
Y2tdLT5zZXRTdWNjZXNzb3JzKHN1Y2Nlc3MsIGZhaWx1cmUpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgYXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljU3Ryb25nQ0FT
LCB3aWR0aCksIEFyZzo6c3RhdHVzQ29uZChpbnZlcnQgPyBNYWNyb0Fzc2VtYmxlcjo6RmFpbHVy
ZSA6IE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNzKSwgbV9lYXgsIHRtcChhdG9taWMtPmNoaWxkKDEp
KSwgYWRkcmVzcywgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7CisgICAgICAg
IC8vIFdlIHdpc2ggdG8gZW1pdDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQmxvY2sgI3JlbG9v
cDoKKyAgICAgICAgLy8gICAgIExvYWRMaW5rCisgICAgICAgIC8vICAgICBCcmFuY2ggTm90RXF1
YWwKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiBUaGVuOiNmYWlsLCBFbHNlOiAjc3RvcmUKKyAg
ICAgICAgLy8gQmxvY2sgI3N0b3JlOgorICAgICAgICAvLyAgICAgU3RvcmVDb25kCisgICAgICAg
IC8vICAgICBYb3IgJDEsICVyZXN1bHQgICAgPC0tLSBvbmx5IGlmICFpbnZlcnQKKyAgICAgICAg
Ly8gICAgIEp1bXAKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiAjZG9uZQorICAgICAgICAvLyBC
bG9jayAjZmFpbDoKKyAgICAgICAgLy8gICAgIE1vdmUgJGludmVydCwgJXJlc3VsdAorICAgICAg
ICAvLyAgICAgSnVtcAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6ICNkb25lCisgICAgICAgIC8v
IEJsb2NrICNkb25lOgorICAgICAgICAKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiByZWxvb3BC
bG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3RvcmVCbG9jayA9
IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3VjY2Vzc0Jsb2NrID0gbnVs
bHB0cjsKKyAgICAgICAgaWYgKCFpc0JyYW5jaCAmJiBpc1N0cm9uZykKKyAgICAgICAgICAgIHN1
Y2Nlc3NCbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogZmFpbEJs
b2NrID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKCFpc0JyYW5jaCkKKyAgICAgICAgICAgIGZhaWxC
bG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3Ryb25nRmFpbEJs
b2NrOworICAgICAgICBpZiAoaXNTdHJvbmcpCisgICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2sg
PSBuZXdCbG9jaygpOworICAgICAgICBGcmVxdWVudGVkQmxvY2sgY29tcGFyaXNvbkZhaWw7Cisg
ICAgICAgIEZyZXF1ZW50ZWRCbG9jayB3ZWFrRmFpbDsKKyAgICAgICAgaWYgKGlzU3Ryb25nKSB7
CisgICAgICAgICAgICBjb21wYXJpc29uRmFpbCA9IHN0cm9uZ0ZhaWxCbG9jazsKKyAgICAgICAg
ICAgIHdlYWtGYWlsID0gcmVsb29wQmxvY2s7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpZiAoaXNCcmFuY2gpCisgICAgICAgICAgICAgICAgY29tcGFyaXNvbkZhaWwgPSBmYWlsdXJl
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBhcmlzb25GYWlsID0gZmFp
bEJsb2NrOworICAgICAgICAgICAgd2Vha0ZhaWwgPSBmYWlsdXJlOworICAgICAgICB9CisgICAg
ICAgIEFpcjo6QmFzaWNCbG9jayogYmVnaW5CbG9jazsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2Nr
KiBkb25lQmxvY2s7CisgICAgICAgIHNwbGl0QmxvY2soYmVnaW5CbG9jaywgZG9uZUJsb2NrKTsK
KyAgICAgICAgCisgICAgICAgIGFwcGVuZChKdW1wKTsKKyAgICAgICAgYmVnaW5CbG9jay0+c2V0
U3VjY2Vzc29ycyhyZWxvb3BCbG9jayk7CisgICAgICAgIAorICAgICAgICByZWxvb3BCbG9jay0+
YXBwZW5kKGxvYWRMaW5rT3Bjb2RlKHdpZHRoLCBhdG9taWMtPmhhc0ZlbmNlKCkpLCBtX3ZhbHVl
LCB2YWx1ZVJlc3VsdFRtcCwgYWRkcmVzcyk7CisgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQo
T1BDT0RFX0ZPUl9XSURUSChCcmFuY2gsIGNhbm9uaWNhbFdpZHRoKHdpZHRoKSksIG1fdmFsdWUs
IEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpIHZhbHVlUmVzdWx0VG1wLCBl
eHBlY3RlZFZhbHVlVG1wKTsKKyAgICAgICAgcmVsb29wQmxvY2stPnNldFN1Y2Nlc3NvcnMoY29t
cGFyaXNvbkZhaWwsIHN0b3JlQmxvY2spOworICAgICAgICAKKyAgICAgICAgc3RvcmVCbG9jay0+
YXBwZW5kKHN0b3JlQ29uZE9wY29kZSh3aWR0aCwgYXRvbWljLT5oYXNGZW5jZSgpKSwgbV92YWx1
ZSwgbmV3VmFsdWVUbXAsIGFkZHJlc3MsIHN1Y2Nlc3NCb29sUmVzdWx0VG1wKTsKKyAgICAgICAg
aWYgKGlzQnJhbmNoKSB7CisgICAgICAgICAgICBzdG9yZUJsb2NrLT5hcHBlbmQoQnJhbmNoVGVz
dDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBib29sUmVzdWx0VG1wLCBB
cmc6OmJpdEltbSgtMSkpOworICAgICAgICAgICAgc3RvcmVCbG9jay0+c2V0U3VjY2Vzc29ycyhz
dWNjZXNzLCB3ZWFrRmFpbCk7CisgICAgICAgICAgICBkb25lQmxvY2stPnN1Y2Nlc3NvcnMoKS5j
bGVhcigpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRvbmVCbG9jay0+c2l6ZSgpKTsK
KyAgICAgICAgICAgIGRvbmVCbG9jay0+YXBwZW5kKE9vcHMsIG1fdmFsdWUpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKGlzU3Ryb25nKSB7CisgICAgICAgICAgICAgICAgc3Rv
cmVCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVy
OjpaZXJvKSwgc3VjY2Vzc0Jvb2xSZXN1bHRUbXAsIEFyZzo6Yml0SW1tKC0xKSk7CisgICAgICAg
ICAgICAgICAgc3RvcmVCbG9jay0+c2V0U3VjY2Vzc29ycyhzdWNjZXNzQmxvY2ssIHJlbG9vcEJs
b2NrKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdWNjZXNzQmxvY2stPmFw
cGVuZChNb3ZlLCBtX3ZhbHVlLCBBcmc6OmltbSghaW52ZXJ0KSwgYm9vbFJlc3VsdFRtcCk7Cisg
ICAgICAgICAgICAgICAgc3VjY2Vzc0Jsb2NrLT5hcHBlbmQoSnVtcCwgbV92YWx1ZSk7CisgICAg
ICAgICAgICAgICAgc3VjY2Vzc0Jsb2NrLT5zZXRTdWNjZXNzb3JzKGRvbmVCbG9jayk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghaW52ZXJ0KQorICAgICAgICAg
ICAgICAgICAgICBzdG9yZUJsb2NrLT5hcHBlbmQoWG9yMzIsIG1fdmFsdWUsIEFyZzo6Yml0SW1t
KDEpLCBib29sUmVzdWx0VG1wLCBib29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBzdG9yZUJsb2NrLT5hcHBlbmQoSnVtcCwgbV92YWx1ZSk7CisgICAgICAg
ICAgICAgICAgc3RvcmVCbG9jay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2spOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmYWlsQmxvY2stPmFwcGVuZChNb3ZlLCBt
X3ZhbHVlLCBBcmc6OmltbShpbnZlcnQpLCBib29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgIGZh
aWxCbG9jay0+YXBwZW5kKEp1bXAsIG1fdmFsdWUpOworICAgICAgICAgICAgZmFpbEJsb2NrLT5z
ZXRTdWNjZXNzb3JzKGRvbmVCbG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChpc1N0cm9uZykgeworICAgICAgICAgICAgVG1wIHRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOwor
ICAgICAgICAgICAgc3Ryb25nRmFpbEJsb2NrLT5hcHBlbmQoc3RvcmVDb25kT3Bjb2RlKHdpZHRo
LCBhdG9taWMtPmhhc0ZlbmNlKCkpLCBtX3ZhbHVlLCB2YWx1ZVJlc3VsdFRtcCwgYWRkcmVzcywg
dG1wKTsKKyAgICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwg
QXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgdG1wLCBBcmc6OmJpdEltbSgtMSkp
OworICAgICAgICAgICAgc3Ryb25nRmFpbEJsb2NrLT5zZXRTdWNjZXNzb3JzKGZhaWxCbG9jaywg
cmVsb29wQmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgYXBwZW5kVm9p
ZEF0b21pYyhBaXI6Ok9wY29kZSBhdG9taWNPcGNvZGUpCisgICAgeworICAgICAgICBpZiAobV91
c2VDb3VudHMubnVtVXNlcyhtX3ZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihtX3ZhbHVlKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChpc1ZhbGlkRm9ybShhdG9taWNPcGNvZGUsIEFyZzo6SW1tLCBhZGRyZXNzLmtp
bmQoKSkgJiYgaW1tKG1fdmFsdWUtPmNoaWxkKDApKSkgeworICAgICAgICAgICAgYXBwZW5kKGF0
b21pY09wY29kZSwgaW1tKG1fdmFsdWUtPmNoaWxkKDApKSwgYWRkcmVzcyk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzVmFsaWRG
b3JtKGF0b21pY09wY29kZSwgQXJnOjpUbXAsIGFkZHJlc3Mua2luZCgpKSkgeworICAgICAgICAg
ICAgYXBwZW5kKGF0b21pY09wY29kZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgYWRkcmVzcyk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kR2VuZXJhbEF0b21pYyhB
aXI6Ok9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0g
bV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgIAorICAgICAgICBBcmcgYWRkcmVz
cyA9IGFkZHIobV92YWx1ZSk7CisgICAgICAgIFRtcCBvbGRWYWx1ZSA9IG1fY29kZS5uZXdUbXAo
R1ApOworICAgICAgICBUbXAgbmV3VmFsdWUgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFdlIG5lZWQgYSBDQVMgbG9vcCBvciBhIExML1NDIGxvb3AuIFVzaW5nIHBy
ZXBhcmUvYXR0ZW1wdCBqYXJnb24sIHdlIHdhbnQ6CisgICAgICAgIC8vCisgICAgICAgIC8vIEJs
b2NrICNyZWxvb3A6CisgICAgICAgIC8vICAgICBQcmVwYXJlCisgICAgICAgIC8vICAgICBvcGNv
ZGUKKyAgICAgICAgLy8gICAgIEF0dGVtcHQKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiBUaGVu
OiNkb25lLCBFbHNlOiNyZWxvb3AKKyAgICAgICAgLy8gQmxvY2sgI2RvbmU6CisgICAgICAgIC8v
ICAgICBNb3ZlIG9sZFZhbHVlLCByZXN1bHQKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChyZWxh
eGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCBvbGRWYWx1ZSwgdG1wKGF0b21pYykpOwor
ICAgICAgICAKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiByZWxvb3BCbG9jayA9IG5ld0Jsb2Nr
KCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogYmVnaW5CbG9jazsKKyAgICAgICAgQWlyOjpC
YXNpY0Jsb2NrKiBkb25lQmxvY2s7CisgICAgICAgIHNwbGl0QmxvY2soYmVnaW5CbG9jaywgZG9u
ZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChKdW1wKTsKKyAgICAgICAgYmVnaW5C
bG9jay0+c2V0U3VjY2Vzc29ycyhyZWxvb3BCbG9jayk7CisgICAgICAgIAorICAgICAgICBBaXI6
Ok9wY29kZSBwcmVwYXJlT3Bjb2RlOworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAg
ICAgc3dpdGNoIChhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
V2lkdGg4OgorICAgICAgICAgICAgICAgIHByZXBhcmVPcGNvZGUgPSBMb2FkOFNpZ25lZEV4dGVu
ZFRvMzI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdpZHRoMTY6
CisgICAgICAgICAgICAgICAgcHJlcGFyZU9wY29kZSA9IExvYWQxNlNpZ25lZEV4dGVuZFRvMzI7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdpZHRoMzI6CisgICAg
ICAgICAgICAgICAgcHJlcGFyZU9wY29kZSA9IE1vdmUzMjsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bj
b2RlID0gTW92ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7CisgICAg
ICAgICAgICBvcGNvZGUgPSBsb2FkTGlua09wY29kZShhdG9taWMtPm9wZXJhdGlvbldpZHRoKCks
IGF0b21pYy0+aGFzRmVuY2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVsb29wQmxvY2stPmFw
cGVuZChwcmVwYXJlT3Bjb2RlLCBtX3ZhbHVlLCBhZGRyZXNzLCBvbGRWYWx1ZSk7CisgICAgICAg
IAorICAgICAgICBpZiAob3Bjb2RlICE9IE5vcCkgeworICAgICAgICAgICAgaWYgKGltbShhdG9t
aWMtPmNoaWxkKDApKSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1tLCBBcmc6OlRtcCwg
QXJnOjpUbXApKQorICAgICAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQob3Bjb2RlLCBt
X3ZhbHVlLCBpbW0oYXRvbWljLT5jaGlsZCgwKSksIG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAg
ICAgICAgICBlbHNlIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwg
QXJnOjpUbXApKQorICAgICAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQob3Bjb2RlLCBt
X3ZhbHVlLCB0bXAoYXRvbWljLT5jaGlsZCgwKSksIG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKHJlbGF4
ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUoKSksIG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgaWYgKGltbShhdG9taWMtPmNoaWxkKDApKSAmJiBpc1ZhbGlkRm9ybShvcGNv
ZGUsIEFyZzo6SW1tLCBBcmc6OlRtcCkpCisgICAgICAgICAgICAgICAgICAgIHJlbG9vcEJsb2Nr
LT5hcHBlbmQob3Bjb2RlLCBtX3ZhbHVlLCBpbW0oYXRvbWljLT5jaGlsZCgwKSksIG5ld1ZhbHVl
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlbG9vcEJsb2Nr
LT5hcHBlbmQob3Bjb2RlLCBtX3ZhbHVlLCB0bXAoYXRvbWljLT5jaGlsZCgwKSksIG5ld1ZhbHVl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1g4NigpKSB7Cisg
ICAgICAgICAgICBBaXI6Ok9wY29kZSBjYXNPcGNvZGUgPSBPUENPREVfRk9SX1dJRFRIKEJyYW5j
aEF0b21pY1N0cm9uZ0NBUywgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKTsKKyAgICAgICAgICAg
IHJlbG9vcEJsb2NrLT5hcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwg
b2xkVmFsdWUsIG1fZWF4KTsKKyAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQoY2FzT3Bj
b2RlLCBtX3ZhbHVlLCBBcmc6OnN0YXR1c0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlN1Y2Nlc3MpLCBt
X2VheCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsKKyAgICAgICAgICAgIFRtcCBib29sUmVzdWx0ID0g
bV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKHN0b3Jl
Q29uZE9wY29kZShhdG9taWMtPm9wZXJhdGlvbldpZHRoKCksIGF0b21pYy0+aGFzRmVuY2UoKSks
IG5ld1ZhbHVlLCBhZGRyZXNzLCBib29sUmVzdWx0KTsKKyAgICAgICAgICAgIHJlbG9vcEJsb2Nr
LT5hcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8p
LCBib29sUmVzdWx0LCBBcmc6OmJpdEltbSgtMSkpOworICAgICAgICB9CisgICAgICAgIHJlbG9v
cEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRvbmVCbG9jaywgcmVsb29wQmxvY2spOworICAgIH0KKyAg
ICAKICAgICB2b2lkIGxvd2VyKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bj
b2RlKCkpIHsKQEAgLTE5NzEsMzAgKzIzNjIsNTAgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgTG9hZDogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBw
aW5nSW5zdChtX3ZhbHVlLCBtb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLCBtX3ZhbHVlLCBh
ZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgICAgIEFpcjo6T3Bj
b2RlIG9wY29kZSA9IEFpcjo6T29wczsKKyAgICAgICAgICAgIGlmIChtZW1vcnktPmhhc0ZlbmNl
KCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1lbW9yeS0+dHlwZSgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gTG9hZEFj
cTMyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIElu
dDY0OgorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBMb2FkQWNxNjQ7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIG9wY29kZSA9IG1vdmVGb3JUeXBlKG1lbW9yeS0+dHlwZSgpKTsKKyAgICAgICAgICAg
IGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFs
dWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgTG9hZDhTOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJh
cHBpbmdJbnN0KG1fdmFsdWUsIExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiwgbV92YWx1ZSwgYWRkciht
X3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUg
PSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3E4U2lnbmVk
RXh0ZW5kVG8zMiA6IExvYWQ4U2lnbmVkRXh0ZW5kVG8zMjsKKyAgICAgICAgICAgIGFwcGVuZCh0
cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAo
bV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2UgTG9hZDhaOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExv
YWQ4LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAg
IEFpcjo6T3Bjb2RlIG9wY29kZSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5j
ZSgpID8gTG9hZEFjcTggOiBMb2FkODsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3Qo
bV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDE2Uzog
ewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkMTZTaWduZWRF
eHRlbmRUbzMyLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAg
ICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5o
YXNGZW5jZSgpID8gTG9hZEFjcTE2U2lnbmVkRXh0ZW5kVG8zMiA6IExvYWQxNlNpZ25lZEV4dGVu
ZFRvMzI7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwg
bV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIExvYWQxNlo6IHsKLSAgICAgICAgICAgIGFw
cGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9hZDE2LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUp
LCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG1fdmFs
dWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpID8gTG9hZEFjcTE2IDogTG9hZDE2Owor
ICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUs
IGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFkZDogewogICAgICAgICAgICAg
aWYgKHRyeUFwcGVuZExlYSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTIwOTIsNyAr
MjUwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNDaGlsbCgpKQog
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7CiAgICAgICAgICAgICBp
ZiAoaXNJbnQobV92YWx1ZS0+dHlwZSgpKSAmJiBpc1g4NigpKSB7Ci0gICAgICAgICAgICAgICAg
bG93ZXJYODZEaXYoRGl2KTsKKyAgICAgICAgICAgICAgICBhcHBlbmRYODZEaXYoRGl2KTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQo
IWlzWDg2KCkgfHwgaXNGbG9hdChtX3ZhbHVlLT50eXBlKCkpKTsKQEAgLTIxMDMsNyArMjUxNCw3
IEBAIHByaXZhdGU6CiAKICAgICAgICAgY2FzZSBVRGl2OiB7CiAgICAgICAgICAgICBpZiAoaXNJ
bnQobV92YWx1ZS0+dHlwZSgpKSAmJiBpc1g4NigpKSB7Ci0gICAgICAgICAgICAgICAgbG93ZXJY
ODZVRGl2KFVEaXYpOworICAgICAgICAgICAgICAgIGFwcGVuZFg4NlVEaXYoVURpdik7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0yMTE3LDEzICsyNTI4LDEz
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW9kOiB7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChpc1g4NigpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3ZhbHVlLT5pc0No
aWxsKCkpOwotICAgICAgICAgICAgbG93ZXJYODZEaXYoTW9kKTsKKyAgICAgICAgICAgIGFwcGVu
ZFg4NkRpdihNb2QpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAg
Y2FzZSBVTW9kOiB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKLSAgICAg
ICAgICAgIGxvd2VyWDg2VURpdihVTW9kKTsKKyAgICAgICAgICAgIGFwcGVuZFg4NlVEaXYoVU1v
ZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjE2MiwxMCArMjU3Mywy
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGFwcGVuZFVuT3A8Tm90MzIsIE5vdDY0Piht
X3ZhbHVlLT5jaGlsZCgwKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIHBhdHRlcm4gaXMgc3VwZXIgdXNl
ZnVsIG9uIGJvdGggeDg2IGFuZCBBUk02NCwgc2luY2UgdGhlIGludmVyc2lvbiBvZiB0aGUgQ0FT
IHJlc3VsdAorICAgICAgICAgICAgLy8gY2FuIGJlIGRvbmUgd2l0aCB6ZXJvIGNvc3Qgb24geDg2
IChqdXN0IGZsaXAgdGhlIHNldCBmcm9tIEUgdG8gTkUpIGFuZCBpdCdzIGEgcHJvZ3Jlc3Npb24K
KyAgICAgICAgICAgIC8vIG9uIEFSTTY0IChzaW5jZSBTVFggcmV0dXJucyAwIG9uIHN1Y2Nlc3Ms
IHNvIG9yZGluYXJpbHkgd2UgaGF2ZSB0byBmbGlwIGl0KS4KKyAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgxKS0+aXNJbnQoMSkKKyAgICAgICAgICAgICAgICAmJiBpc0F0b21pY0NBUyht
X3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpCisgICAgICAgICAgICAgICAgJiYgY2FuQmVJbnRl
cm5hbChtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKKyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5h
bChtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kQ0FTKG1fdmFsdWUt
PmNoaWxkKDApLCB0cnVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPFhvcjMyLCBYb3I2NCwgWG9y
RG91YmxlLCBYb3JGbG9hdCwgQ29tbXV0YXRpdmU+KAogICAgICAgICAgICAgICAgIG1fdmFsdWUt
PmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERlcGVuZDogeworICAgICAgICAgICAg
YXBwZW5kVW5PcDxEZXBlbmQzMiwgRGVwZW5kNjQ+KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU2hsOiB7CiAgICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMSkpIHsKQEAgLTIyNjYsNyArMjY5
NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBhcHBlbmRTdG9yZSh2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpOworICAgICAg
ICAgICAgYXBwZW5kU3RvcmUobV92YWx1ZSwgYWRkcihtX3ZhbHVlKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjI4Nyw3ICsyNzE1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGFwcGVuZFN0b3JlKEFpcjo6U3RvcmU4LCB2YWx1ZVRvU3RvcmUsIGFkZHIo
bV92YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kU3RvcmUobV92YWx1ZSwgdmFsdWVUb1N0b3Jl
LCBhZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0y
MzA4LDcgKzI3MzYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kU3RvcmUo
QWlyOjpTdG9yZTE2LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpOworICAgICAgICAgICAg
YXBwZW5kU3RvcmUobV92YWx1ZSwgdmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yNDE2LDcgKzI4NDQsMjIgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgRXF1YWw6Ci0gICAgICAgIGNhc2UgTm90RXF1
YWw6CisgICAgICAgIGNhc2UgTm90RXF1YWw6IHsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgwKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTCisgICAgICAgICAgICAgICAgJiYg
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpCisgICAgICAg
ICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5zKG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgxKSkpOworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9sb2NrZWQuY29udGFpbnMobV92YWx1
ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb21taXRJ
bnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kQ0FTKG1f
dmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5vcGNvZGUoKSA9PSBOb3RFcXVhbCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUobV92YWx1ZSkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBM
ZXNzVGhhbjoKICAgICAgICAgY2FzZSBHcmVhdGVyVGhhbjoKICAgICAgICAgY2FzZSBMZXNzRXF1
YWw6CkBAIC0yNzI3LDYgKzMxNzAsMzkgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2UgQnJhbmNoOiB7CisgICAgICAgICAgICBpZiAoY2FuQmVJbnRlcm5hbChtX3ZhbHVlLT5j
aGlsZCgwKSkpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogYnJhbmNoQ2hpbGQgPSBtX3ZhbHVl
LT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGJyYW5jaENoaWxkLT5vcGNvZGUo
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwoYnJhbmNoQ2hpbGQpOworICAgICAgICAgICAgICAgICAgICBh
cHBlbmRDQVMoYnJhbmNoQ2hpbGQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1N0cm9u
Z0NBUzoKKyAgICAgICAgICAgICAgICAgICAgLy8gQSBicmFuY2ggaXMgYSBjb21wYXJpc29uIHRv
IHplcm8uCisgICAgICAgICAgICAgICAgICAgIGlmIChicmFuY2hDaGlsZC0+Y2hpbGQoMCktPmlz
SW50KDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChicmFuY2hD
aGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRDQVMoYnJhbmNoQ2hpbGQsIHRy
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBjYXNlIEVxdWFsOgorICAgICAgICAgICAgICAgIGNhc2UgTm90RXF1YWw6
CisgICAgICAgICAgICAgICAgICAgIGlmIChicmFuY2hDaGlsZC0+Y2hpbGQoMCktPm9wY29kZSgp
ID09IEF0b21pY1N0cm9uZ0NBUworICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2FuQmVJbnRl
cm5hbChicmFuY2hDaGlsZC0+b3Bjb2RlKDApKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYg
YnJhbmNoQ2hpbGQtPmNoaWxkKDApLT5jaGlsZCgwKSA9PSBicmFuY2hDaGlsZC0+Y2hpbGQoMSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkLT5jaGls
ZCgwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRDQVMoYnJhbmNoQ2hpbGQtPmNo
aWxkKDApLCBicmFuY2hDaGlsZC0+b3Bjb2RlKCkgPT0gTm90RXF1YWwpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAg
ICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUJyYW5jaChtX3ZhbHVlLT5jaGls
ZCgwKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNzg0LDcgKzMyNjAs
ODEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFwcGVuZChBaXI6OkVudHJ5U3dpdGNoKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
QXRvbWljV2Vha0NBUzoKKyAgICAgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6IHsKKyAgICAgICAg
ICAgIGFwcGVuZENBUyhtX3ZhbHVlLCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6IHsKKyAgICAg
ICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsK
KyAgICAgICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWlj
QWRkLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihhdG9taWMpOwor
ICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gT1BDT0RFX0ZPUl9XSURUSChBdG9taWNY
Y2hnQWRkLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpOworICAgICAgICAgICAgaWYgKGlzVmFs
aWRPcGNvZGUob3Bjb2RlLCBBcmc6OlRtcCwgYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBh
cHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgdG1wKGF0b21pYy0+Y2hp
bGQoMCkpLCB0bXAoYXRvbWljKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1w
KGF0b21pYyksIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEFk
ZCwgY2Fub25pY2FsV2lkdGgoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBBdG9taWNYY2hnU3ViOiB7Cisg
ICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+
KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0
b21pY1N1YiwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09E
RV9GT1JfV0lEVEgoU3ViLCBjYW5vbmljYWxXaWR0aChhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkp
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEF0b21pY1hjaGdBbmQ6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMg
PSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRWb2lk
QXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljQW5kLCBhdG9taWMtPm9wZXJhdGlvbldpZHRo
KCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChBbmQsIGNhbm9uaWNhbFdpZHRo
KGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljWGNoZ09yOiB7CisgICAgICAg
ICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7Cisg
ICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY09y
LCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9X
SURUSChPciwgY2Fub25pY2FsV2lkdGgoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBB
dG9taWNYY2hnWG9yOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1
ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0b21pYyhP
UENPREVfRk9SX1dJRFRIKEF0b21pY1hvciwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBhcHBlbmRH
ZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoWG9yLCBjYW5vbmljYWxXaWR0aChhdG9taWMt
Pm9wZXJhdGlvbldpZHRoKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hjaGc6IHsKKyAgICAgICAgICAgIEF0b21p
Y1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisgICAgICAgICAgICBB
aXI6Ok9wY29kZSBvcGNvZGUgPSBPUENPREVfRk9SX1dJRFRIKEF0b21pY1hjaGcsIGF0b21pYy0+
b3BlcmF0aW9uV2lkdGgoKSk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZE9wY29kZShvcGNvZGUs
IEFyZzo6VG1wLCBhZGRyZXNzKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92
ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCB0bXAoYXRvbWljLT5jaGlsZCgwKSksIHRtcChhdG9t
aWMpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoYXRvbWljKSwgYWRkcmVz
cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoWG9yLCBj
YW5vbmljYWxXaWR0aChhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI3OTIsNjQgKzMzNDIsNyBAQCBwcml2YXRlOgog
ICAgICAgICBkYXRhTG9nKCJGQVRBTDogY291bGQgbm90IGxvd2VyICIsIGRlZXBEdW1wKG1fcHJv
Y2VkdXJlLCBtX3ZhbHVlKSwgIlxuIik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQotCi0gICAgdm9pZCBsb3dlclg4NkRpdihCMzo6T3Bjb2RlIG9wKQotICAg
IHsKLSNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQotICAgICAgICBUbXAgZWF4ID0gVG1wKFg4
NlJlZ2lzdGVyczo6ZWF4KTsKLSAgICAgICAgVG1wIGVkeCA9IFRtcChYODZSZWdpc3RlcnM6OmVk
eCk7Ci0KLSAgICAgICAgQWlyOjpPcGNvZGUgY29udmVydFRvRG91YmxlV29yZDsKLSAgICAgICAg
QWlyOjpPcGNvZGUgZGl2OwotICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPnR5cGUoKSkgewotICAg
ICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNv
bnZlcnRUb0RvdWJsZVdvcmQzMjsKLSAgICAgICAgICAgIGRpdiA9IFg4NkRpdjMyOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICBjb252ZXJ0VG9E
b3VibGVXb3JkID0gWDg2Q29udmVydFRvUXVhZFdvcmQ2NDsKLSAgICAgICAgICAgIGRpdiA9IFg4
NkRpdjY0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKG9wID09IERpdiB8fCBvcCA9PSBNb2QpOwotICAgICAg
ICBYODZSZWdpc3RlcnM6OlJlZ2lzdGVySUQgcmVzdWx0ID0gb3AgPT0gRGl2ID8gWDg2UmVnaXN0
ZXJzOjplYXggOiBYODZSZWdpc3RlcnM6OmVkeDsKLQotICAgICAgICBhcHBlbmQoTW92ZSwgdG1w
KG1fdmFsdWUtPmNoaWxkKDApKSwgZWF4KTsKLSAgICAgICAgYXBwZW5kKGNvbnZlcnRUb0RvdWJs
ZVdvcmQsIGVheCwgZWR4KTsKLSAgICAgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHRtcChtX3Zh
bHVlLT5jaGlsZCgxKSkpOwotICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKHJlc3VsdCksIHRtcCht
X3ZhbHVlKSk7Ci0KLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIFVO
UkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdm9pZCBsb3dl
clg4NlVEaXYoQjM6Ok9wY29kZSBvcCkKLSAgICB7Ci0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82
NCkKLSAgICAgICAgVG1wIGVheCA9IFRtcChYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgICAgIFRt
cCBlZHggPSBUbXAoWDg2UmVnaXN0ZXJzOjplZHgpOwotCi0gICAgICAgIEFpcjo6T3Bjb2RlIGRp
diA9IG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IFg4NlVEaXYzMiA6IFg4NlVEaXY2NDsKLQot
ICAgICAgICBBU1NFUlQob3AgPT0gVURpdiB8fCBvcCA9PSBVTW9kKTsKLSAgICAgICAgWDg2UmVn
aXN0ZXJzOjpSZWdpc3RlcklEIHJlc3VsdCA9IG9wID09IFVEaXYgPyBYODZSZWdpc3RlcnM6OmVh
eCA6IFg4NlJlZ2lzdGVyczo6ZWR4OwotCi0gICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobV92YWx1
ZS0+Y2hpbGQoMCkpLCBlYXgpOwotICAgICAgICBhcHBlbmQoWG9yNjQsIGVkeCwgZWR4KTsKLSAg
ICAgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkpOwotICAg
ICAgICBhcHBlbmQoTW92ZSwgVG1wKHJlc3VsdCksIHRtcChtX3ZhbHVlKSk7Ci0jZWxzZQotICAg
ICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0o
KTsKLSNlbmRpZgotICAgIH0KLQorICAgIAogICAgIEluZGV4U2V0PFZhbHVlPiBtX2xvY2tlZDsg
Ly8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgogICAgIElu
ZGV4TWFwPFZhbHVlLCBUbXA+IG1fdmFsdWVUb1RtcDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0
IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNheSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24t
bnVsbCBUbXAgaXMgInBpbm5lZCIuCiAgICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV9waGlUb1Rt
cDsgLy8gRWFjaCBQaGkgZ2V0cyBpdHMgb3duIFRtcC4KQEAgLTI4NjQsNyArMzM1Nyw3IEBAIHBy
aXZhdGU6CiAKICAgICBWZWN0b3I8VmVjdG9yPEluc3QsIDQ+PiBtX2luc3RzOwogICAgIFZlY3Rv
cjxJbnN0PiBtX3Byb2xvZ3VlOwotCisgICAgCiAgICAgQjM6OkJhc2ljQmxvY2sqIG1fYmxvY2s7
CiAgICAgYm9vbCBtX2lzUmFyZTsKICAgICB1bnNpZ25lZCBtX2luZGV4OwpAQCAtMjg3NSw2ICsz
MzY4LDEyIEBAIHByaXZhdGU6CiAKICAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOwogICAgIENv
ZGUmIG1fY29kZTsKKworICAgIEFpcjo6QmxvY2tJbnNlcnRpb25TZXQgbV9ibG9ja0luc2VydGlv
blNldDsKKworICAgIFRtcCBtX2VheDsKKyAgICBUbXAgbV9lY3g7CisgICAgVG1wIG1fZWR4Owog
fTsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDMw
ICszNCw0OCBAQCBNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVlKCkKIHsKIH0KIAorVHlwZSBNZW1v
cnlWYWx1ZTo6YWNjZXNzVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZChvcGNvZGUoKSkp
CisgICAgICAgIHJldHVybiB0eXBlKCk7CisgICAgLy8gVGhpcyBoYXBwZW5zIHRvIHdvcmsgZm9y
IGF0b21pY3MsIHRvby4gVGhhdCdzIHdoeSBBdG9taWNWYWx1ZSBkb2VzIG5vdCBuZWVkIHRvIG92
ZXJyaWRlIHRoaXMuCisgICAgcmV0dXJuIGNoaWxkKDApLT50eXBlKCk7Cit9CisKK0JhbmsgTWVt
b3J5VmFsdWU6OmFjY2Vzc0JhbmsoKSBjb25zdAoreworICAgIHJldHVybiBiYW5rRm9yVHlwZShh
Y2Nlc3NUeXBlKCkpOworfQorCiBzaXplX3QgTWVtb3J5VmFsdWU6OmFjY2Vzc0J5dGVTaXplKCkg
Y29uc3QKIHsKKyAgICByZXR1cm4gYnl0ZXMoYWNjZXNzV2lkdGgoKSk7Cit9CisKK1dpZHRoIE1l
bW9yeVZhbHVlOjpsb2FkU3RvcmVXaWR0aCgpIGNvbnN0Cit7CiAgICAgc3dpdGNoIChvcGNvZGUo
KSkgewogICAgIGNhc2UgTG9hZDhaOgogICAgIGNhc2UgTG9hZDhTOgogICAgIGNhc2UgU3RvcmU4
OgotICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIFdpZHRoODsKICAgICBjYXNlIExv
YWQxNlo6CiAgICAgY2FzZSBMb2FkMTZTOgogICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgcmV0
dXJuIDI7CisgICAgICAgIHJldHVybiBXaWR0aDE2OwogICAgIGNhc2UgTG9hZDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZlR5cGUodHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlwZSh0
eXBlKCkpOwogICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgIHJldHVybiBzaXplb2ZUeXBlKGNoaWxk
KDApLT50eXBlKCkpOworICAgICAgICByZXR1cm4gd2lkdGhGb3JUeXBlKGNoaWxkKDApLT50eXBl
KCkpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gV2lkdGg4OwogICAgIH0KIH0KIAog
V2lkdGggTWVtb3J5VmFsdWU6OmFjY2Vzc1dpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gd2lk
dGhGb3JCeXRlcyhhY2Nlc3NCeXRlU2l6ZSgpKTsKKyAgICByZXR1cm4gbG9hZFN0b3JlV2lkdGgo
KTsKIH0KIAogdm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwg
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTY3LDYgKzg1LDggQEAgdm9pZCBNZW1vcnlWYWx1
ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJgogICAgIGlmICgoaXNMb2FkKCkgJiYgZWZmZWN0cygp
LnJlYWRzICE9IHJhbmdlKCkpCiAgICAgICAgIHx8IChpc1N0b3JlKCkgJiYgZWZmZWN0cygpLndy
aXRlcyAhPSByYW5nZSgpKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAicmFuZ2UgPSAiLCBy
YW5nZSgpKTsKKyAgICBpZiAocGhhbnRvbVJhbmdlKCkpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgInBoYW50b21SYW5nZSA9ICIsIHBoYW50b21SYW5nZSgpKTsKIH0KIAogVmFsdWUqIE1lbW9y
eVZhbHVlOjpjbG9uZUltcGwoKSBjb25zdApAQCAtNzQsNiArOTQsNTggQEAgVmFsdWUqIE1lbW9y
eVZhbHVlOjpjbG9uZUltcGwoKSBjb25zdAogICAgIHJldHVybiBuZXcgTWVtb3J5VmFsdWUoKnRo
aXMpOwogfQogCisvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9h
ZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisvLyBkZXNj
cmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQg
a2luZCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBv
ZmZzZXQgPSAwKQorICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgdHlwZSwgb3JpZ2lu
LCBwb2ludGVyKQorICAgICwgbV9vZmZzZXQob2Zmc2V0KQoreworICAgIGlmICghQVNTRVJUX0RJ
U0FCTEVEKSB7CisgICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgICAgICBjYXNl
IExvYWQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAg
IGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2
UzoKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMyKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBj
YXNlIFN0b3JlOgorICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVm9pZCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgfQorfQorCisvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3
aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KK01lbW9yeVZhbHVlOjpNZW1vcnlWYWx1
ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNl
dCA9IDApCisgICAgOiBNZW1vcnlWYWx1ZShraW5kLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBv
ZmZzZXQpCit7CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgc3dpdGNoIChr
aW5kLm9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4
UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisgICAgfQorfQorCisvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9y
ZXMuCitNZW1vcnlWYWx1ZTo6TWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgOiBW
YWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQor
ICAgICwgbV9vZmZzZXQob2Zmc2V0KQoreworICAgIEFTU0VSVChpc1N0b3JlKGtpbmQub3Bjb2Rl
KCkpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKICNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw0OCArMjcsMTcgQEAKIAogI2lmIEVOQUJMRShCM19K
SVQpCiAKKyNpbmNsdWRlICJCM0JhbmsuaCIKICNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgogI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKLS8v
IEZJWE1FOiBXZSB3YW50IHRvIGFsbG93IGZlbmNlZCBtZW1vcnkgYWNjZXNzZXMgb24gQVJNLgot
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjM0OQotCiBjbGFz
cyBKU19FWFBPUlRfUFJJVkFURSBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhLaW5kIGtpbmQpCiAgICAgewotICAgICAgICBzd2l0
Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgY2FzZSBMb2FkOFo6Ci0gICAgICAgIGNhc2Ug
TG9hZDhTOgotICAgICAgICBjYXNlIExvYWQxNlo6Ci0gICAgICAgIGNhc2UgTG9hZDE2UzoKLSAg
ICAgICAgY2FzZSBMb2FkOgotICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgY2FzZSBTdG9y
ZTE2OgotICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1N0b3JlKEtpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIHN3
aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgY2Fz
ZSBTdG9yZTE2OgotICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0xvYWQoS2luZCBraW5kKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFjY2VwdHMoa2luZCkgJiYgIWlzU3RvcmUoa2luZCk7CisgICAgICAgIHJldHVy
biBpc01lbW9yeShraW5kLm9wY29kZSgpKTsKICAgICB9CiAKICAgICB+TWVtb3J5VmFsdWUoKTsK
QEAgLTc4LDc2ICs0Nyw1NiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBIZWFwUmFuZ2UmIHJhbmdl
KCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZTsgfQogICAgIHZvaWQgc2V0UmFuZ2UoY29uc3QgSGVh
cFJhbmdlJiByYW5nZSkgeyBtX3JhbmdlID0gcmFuZ2U7IH0KKyAgICAKKyAgICAvLyBUaGlzIGlz
IGFuIGFsaWFzIGZvciByYW5nZS4KKyAgICBjb25zdCBIZWFwUmFuZ2UmIGFjY2Vzc1JhbmdlKCkg
Y29uc3QgeyByZXR1cm4gcmFuZ2UoKTsgfQorICAgIHZvaWQgc2V0QWNjZXNzUmFuZ2UoY29uc3Qg
SGVhcFJhbmdlJiByYW5nZSkgeyBzZXRSYW5nZShyYW5nZSk7IH0KKyAgICAKKyAgICBjb25zdCBI
ZWFwUmFuZ2UmIGZlbmNlUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2ZlbmNlUmFuZ2U7IH0KKyAg
ICB2b2lkIHNldEZlbmNlUmFuZ2UoY29uc3QgSGVhcFJhbmdlJiByYW5nZSkgeyBtX2ZlbmNlUmFu
Z2UgPSByYW5nZTsgfQorCisgICAgYm9vbCBpc1N0b3JlKCkgY29uc3QgeyByZXR1cm4gaXNTdG9y
ZShvcGNvZGUoKSk7IH0KKyAgICBib29sIGlzTG9hZCgpIGNvbnN0IHsgcmV0dXJuIGlzTG9hZChv
cGNvZGUoKSk7IH0KIAotICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9
PSBWb2lkOyB9Ci0gICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgIT0gVm9p
ZDsgfQorICAgIGJvb2wgaGFzRmVuY2UoKSBjb25zdCB7IHJldHVybiAhIWZlbmNlUmFuZ2UoKTsg
fQogCisgICAgVHlwZSBhY2Nlc3NUeXBlKCkgY29uc3Q7CisgICAgQmFuayBhY2Nlc3NCYW5rKCkg
Y29uc3Q7CiAgICAgc2l6ZV90IGFjY2Vzc0J5dGVTaXplKCkgY29uc3Q7Ci0gICAgV2lkdGggYWNj
ZXNzV2lkdGgoKSBjb25zdDsKKyAgICAKKyAgICAvLyBTbGlnaHRseSBmYXN0ZXIgdmVyc2lvbiBv
ZiBhY2Nlc3NXaWR0aCwgaWYgeW91IGtub3cgdGhhdCB5b3UncmUgd29ya2luZyB3aXRoIGEgbG9h
ZCBvciBzdG9yZS4KKyAgICBXaWR0aCBsb2FkU3RvcmVXaWR0aCgpIGNvbnN0OworICAgIAorICAg
IHZpcnR1YWwgV2lkdGggYWNjZXNzV2lkdGgoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZv
aWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBWYWx1ZSogY2xvbmVJbXBsKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKLQotICAgIC8vIFVzZSB0aGlz
IGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9h
ZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKLSAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVk
IHR5cGUpLgotICAgIE1lbW9yeVZhbHVlKEtpbmQga2luZCwgVHlwZSB0eXBlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAgICA6IFZhbHVl
KENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgTWVtb3J5VmFsdWUoQ2hlY2tlZE9w
Y29kZVRhZywgS2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGludDMyX3Qgb2Zm
c2V0LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNv
ZGUsIGtpbmQsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQogICAgICAgICAsIG1fb2Zmc2V0
KG9mZnNldCkKLSAgICAgICAgLCBtX3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCiAgICAgewotICAg
ICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgc3dpdGNoIChraW5kLm9w
Y29kZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIExvYWQ4WjoKLSAgICAgICAgICAgIGNhc2UgTG9hZDhTOgotICAg
ICAgICAgICAgY2FzZSBMb2FkMTZaOgotICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgotICAgICAg
ICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMyKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgU3RvcmU4OgotICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgotICAg
ICAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBWb2lk
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
ICAgICB9CisgICAgCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2Fk
OFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAor
ICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCisgICAgTWVtb3J5VmFsdWUoS2lu
ZCwgVHlwZSwgT3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKTsKIAog
ICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBp
bXBsaWVkLgotICAgIE1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUq
IHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAgOiBNZW1vcnlWYWx1ZShraW5k
LCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpCi0gICAgewotICAgIH0KKyAgICBNZW1v
cnlWYWx1ZShLaW5kLCBPcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDAp
OwogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVzLgotICAgIE1lbW9yeVZhbHVlKEtp
bmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50
MzJfdCBvZmZzZXQgPSAwKQotICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIFZv
aWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIpCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQot
ICAgICAgICAsIG1fcmFuZ2UoSGVhcFJhbmdlOjp0b3AoKSkKLSAgICB7Ci0gICAgICAgIGlmICgh
QVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsK
LSAgICAgICAgICAgIGNhc2UgU3RvcmU4OgotICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgotICAg
ICAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KKyAgICBN
ZW1vcnlWYWx1ZShLaW5kLCBPcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGlu
dDMyX3Qgb2Zmc2V0ID0gMCk7CisgICAgCiAgICAgaW50MzJfdCBtX29mZnNldCB7IDAgfTsKLSAg
ICBIZWFwUmFuZ2UgbV9yYW5nZTsKKyAgICBIZWFwUmFuZ2UgbV9yYW5nZSB7IEhlYXBSYW5nZTo6
dG9wKCkgfTsKKyAgICBIZWFwUmFuZ2UgbV9mZW5jZVJhbmdlIHsgSGVhcFJhbmdlKCkgfTsKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3Bjb2RlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShC
M19KSVQpCiAKICNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlICJCM1dpZHRoLmgiCiAjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBA
IC04Miw3ICs4Myw2IEBAIGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgTW9kLCAvLyBBbGwg
YmV0cyBhcmUgb2ZmIGFzIHRvIHdoYXQgd2lsbCBoYXBwZW4gd2hlbiB5b3UgZXhlY3V0ZSB0aGlz
IGZvciAtMl4zMSUtMSBhbmQgeCUwLgogICAgIFVNb2QsCiAKLQogICAgIC8vIFBvbHltb3JwaGlj
IG5lZ2F0aW9uLiBOb3RlIHRoYXQgd2Ugb25seSBuZWVkIHRoaXMgZm9yIGZsb2F0aW5nIHBvaW50
LCBzaW5jZSBpbnRlZ2VyIG5lZ2F0aW9uCiAgICAgLy8gaXMgZXhhY3RseSBsaWtlIFN1YigwLCB4
KS4gQnV0IHRoYXQncyBub3QgdHJ1ZSBmb3IgZmxvYXRpbmcgcG9pbnQuIFN1YigwLCAwKSBpcyAw
LCB3aGlsZQogICAgIC8vIE5lZygwKSBpcyAtMC4gQWxzbywgd2UgY2Fub25pY2FsaXplIFN1Yigw
LCB4KSBpbnRvIE5lZyh4KSBpbiBjYXNlIG9mIGludGVnZXJzLgpAQCAtMTYyLDYgKzE2MiwxMDcg
QEAgZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKICAgICBTdG9yZTE2LAogICAgIC8vIFRoaXMgaXMg
YSBwb2x5bW9ycGhpYyBzdG9yZSBmb3IgSW50MzIsIEludDY0LCBGbG9hdCwgYW5kIERvdWJsZS4K
ICAgICBTdG9yZSwKKyAgICAKKyAgICAvLyBBdG9taWMgY29tcGFyZSBhbmQgc3dhcCB0aGF0IHJl
dHVybnMgYSBib29sZWFuLiBNYXkgY2hvb3NlIHRvIGRvIG5vdGhpbmcgYW5kIHJldHVybiBmYWxz
ZS4gWW91IGNhbgorICAgIC8vIHVzdWFsbHkgYXNzdW1lIHRoYXQgdGhpcyBpcyBmYXN0ZXIgYW5k
IHJlc3VsdHMgaW4gbGVzcyBjb2RlIHRoYW4gQXRvbWljU3Ryb25nQ0FTLCB0aG91Z2ggdGhhdCdz
CisgICAgLy8gbm90IG5lY2Vzc2FyaWx5IHRydWUgb24gSW50ZWwsIGlmIGluc3RydWN0aW9uIHNl
bGVjdGlvbiBkb2VzIGl0cyBqb2IuIEltYWdpbmUgdGhhdCB0aGlzIG9wY29kZSBpcworICAgIC8v
IGFzIGlmIHlvdSBkaWQgdGhpcyBhdG9taWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICAvLyBib29sIEF0b21pY1dlYWtDQVMoVCBleHBlY3RlZFZhbHVlLCBU
IG5ld1ZhbHVlLCBUKiBwdHIpCisgICAgLy8geworICAgIC8vICAgICBpZiAoIXJhbmQoKSkKKyAg
ICAvLyAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gUmVhbCB3b3JsZCBleGFtcGxlIG9mIHRoaXM6
IGNvbnRleHQgc3dpdGNoIG9uIEFSTSB3aGlsZSBkb2luZyBDQVMuCisgICAgLy8gICAgIGlmICgq
cHRyICE9IGV4cGVjdGVkVmFsdWUpCisgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Ly8gICAgICpwdHIgPSBuZXdWYWx1ZTsKKyAgICAvLyAgICAgcmV0dXJuIHRydWU7CisgICAgLy8g
fQorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGFsbCBhdG9taWNzIHB1dCB0aGUgcG9pbnRlciBs
YXN0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cgbG9hZHMgYW5kIHN0b3JlcyB3b3JrLiBUaGlz
CisgICAgLy8gaXMgYSBnb29meSB0cmFkaXRpb24sIGJ1dCBpdCdzIGhhcm1sZXNzLCBhbmQgYmV0
dGVyIHRoYW4gYmVpbmcgaW5jb25zaXN0ZW50LgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHdl
YWsgQ0FTIGhhcyBubyBmZW5jaW5nIGd1YXJhbnRlZXMgd2hlbiBpdCBmYWlscy4gVGhpcyBtZWFu
cyB0aGF0IHRoZSBmb2xsb3dpbmcKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbiBpcyBhbHdheXMgdmFs
aWQ6CisgICAgLy8KKyAgICAvLyBCZWZvcmU6CisgICAgLy8KKyAgICAvLyAgICAgICAgIEJyYW5j
aChBdG9taWNXZWFrQ0FTKGV4cGVjdGVkLCBuZXcsIHB0cikpCisgICAgLy8gICAgICAgU3VjY2Vz
c29yczogVGhlbjojc3VjY2VzcywgRWxzZTojZmFpbAorICAgIC8vCisgICAgLy8gQWZ0ZXI6Cisg
ICAgLy8KKyAgICAvLyAgICAgICAgIEJyYW5jaChFcXVhbChMb2FkKHB0ciksIGV4cGVjdGVkKSkK
KyAgICAvLyAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiNhdHRlbXB0LCBFbHNlOiNmYWlsCisgICAg
Ly8gICAgIEJCI2F0dGVtcHQ6CisgICAgLy8gICAgICAgICBCcmFuY2goQXRvbWljV2Vha0NBUyhl
eHBlY3RlZCwgbmV3LCBwdHIpKQorICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I3N1Y2Nl
c3MsIEVsc2U6I2ZhaWwKKyAgICAvLworICAgIC8vIEJvdGgga2luZHMgb2YgQ0FTIGZvciBub24t
Y2Fub25pY2FsIHdpZHRocyAoV2lkdGg4IGFuZCBXaWR0aDE2KSBpZ25vcmUgdGhlIGlycmVsZXZh
bnQgYml0cyBvZiB0aGUKKyAgICAvLyBpbnB1dC4KKyAgICBBdG9taWNXZWFrQ0FTLAorICAgIAor
ICAgIC8vIEF0b21pYyBjb21wYXJlIGFuZCBzd2FwIHRoYXQgcmV0dXJucyB0aGUgb2xkIHZhbHVl
LiBEb2VzIG5vdCBoYXZlIHRoZSBub25kZXRlcm1pbmlzbSBvZiBXZWFrQ0FTLgorICAgIC8vIFRo
aXMgaXMgYSBiaXQgbW9yZSBjb2RlIGFuZCBhIGJpdCBzbG93ZXIgaW4gc29tZSBjYXNlcywgdGhv
dWdoIG5vdCBieSBhIGxvdC4gSW1hZ2luZSB0aGF0IHRoaXMKKyAgICAvLyBvcGNvZGUgaXMgYXMg
aWYgeW91IGRpZCB0aGlzIGF0b21pY2FsbHk6CisgICAgLy8KKyAgICAvLyB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIC8vIFQgQXRvbWljU3Ryb25nQ0FTKFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdW
YWx1ZSwgVCogcHRyKQorICAgIC8vIHsKKyAgICAvLyAgICAgVCBvbGRWYWx1ZSA9ICpwdHI7Cisg
ICAgLy8gICAgIGlmIChvbGRWYWx1ZSA9PSBleHBlY3RlZFZhbHVlKQorICAgIC8vICAgICAgICAg
KnB0ciA9IG5ld1ZhbHVlOworICAgIC8vICAgICByZXR1cm4gb2xkVmFsdWUKKyAgICAvLyB9Cisg
ICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgQXRvbWljV2Vha0NBUyBhbmQgQXRvbWljU3Ryb25nQ0FT
IHNvcnQgb2YgaGF2ZSB0aGlzIGtpbmQgb2YgZXF1aXZhbGVuY2U6CisgICAgLy8KKyAgICAvLyBB
dG9taWNXZWFrQ0FTKEBleHAsIEBuZXcsIEBwdHIpID09IEVxdWFsKEF0b21pY1N0cm9uZ0NBUyhA
ZXhwLCBAbmV3LCBAcHRyKSwgQGV4cCkKKyAgICAvLworICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhl
IFdlYWtDQVMgZG9lcyBub3Qgc3B1cmlvdXNseSBmYWlsLCBvZiBjb3Vyc2UuCisgICAgQXRvbWlj
U3Ryb25nQ0FTLAorICAgIAorICAgIC8vIEF0b21pY2FsbHkgX19fIGEgbWVtb3J5IGxvY2F0aW9u
IGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQG9sZFZh
bHVlID0gQXRvbWljWGNoZ19fXyhAb3BlcmFuZCwgQHB0cikKKyAgICAvLworICAgIC8vIEZvciBu
b24tY2Fub25pY2FsIHdpZHRocyAoV2lkdGg4IGFuZCBXaWR0aDE2KSwgdGhlc2UgcmV0dXJuIHNp
Z24tZXh0ZW5kZWQgcmVzdWx0cyBhbmQgaWdub3JlIHRoZQorICAgIC8vIGlycmVsZXZhbnQgYml0
cyBvZiB0aGVpciBpbnB1dHMuCisgICAgQXRvbWljWGNoZ0FkZCwKKyAgICBBdG9taWNYY2hnQW5k
LAorICAgIEF0b21pY1hjaGdPciwKKyAgICBBdG9taWNYY2hnU3ViLAorICAgIEF0b21pY1hjaGdY
b3IsCisgICAgCisgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBoYXZlIEF0b21pY1hjaGdO
ZWcgYW5kIEF0b21pY1hjaGdOb3QuCisgICAgCisgICAgLy8gQXRvbWljYWxseSBleGNoYW5nZSBh
IHZhbHVlIHdpdGggYSBtZW1vcnkgbG9jYXRpb24uIFN5bnRheDoKKyAgICAvLworICAgIC8vIEBv
bGRWYWx1ZSA9IEF0b21pY1hjaGcoQG5ld1ZhbHVlLCBAcHRyKQorICAgIEF0b21pY1hjaGcsCisg
ICAgCisgICAgLy8gSW50cm9kdWNlIGFuIGludmlzaWJsZSBkZXBlbmRlbmN5IGZvciBibG9ja2lu
ZyBtb3Rpb24gb2YgbG9hZHMgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3RoZXIuIFN5bnRheDoKKyAg
ICAvLworICAgIC8vIEByZXN1bHQgPSBEZXBlbmQoQHBoYW50b20pCisgICAgLy8KKyAgICAvLyBU
aGlzIGlzIGV2ZW50dWFsbHkgY29kZWdlbmVyYXRlZCB0byBoYXZlIGxvY2FsIHNlbWFudGljcyBh
cyBpZiB3ZSBkaWQ6CisgICAgLy8KKyAgICAvLyBAcmVzdWx0ID0gJDAKKyAgICAvLworICAgIC8v
IEJ1dCBpdCBlbnN1cmVzIHRoYXQgdGhlIHVzZXJzIG9mIEByZXN1bHQgY2Fubm90IGV4ZWN1dGUg
dW50aWwgQHBoYW50b20gaXMgY29tcHV0ZWQuCisgICAgLy8KKyAgICAvLyBUaGUgY29tcGlsZXIg
aXMgbm90IGFsbG93ZWQgdG8gcmVhc29uIGFib3V0IHRoZSBmYWN0IHRoYXQgRGVwZW5kIGNvZGVn
ZW5lcmF0ZXMgdGhpcyB3YXkuIEFueSBraW5kCisgICAgLy8gb2YgdHJhbnNmb3JtYXRpb24gb3Ig
YW5hbHlzaXMgdGhhdCByZWxpZXMgb24gdGhlIGluc2lnaHQgdGhhdCBEZXBlbmQgaXMgcmVhbGx5
IHplcm8gaXMgdW5zb3VuZCwKKyAgICAvLyBiZWNhdXNlIGl0IHVubG9ja3MgcmVvcmRlcmluZyBv
ZiB1c2VycyBvZiBAcmVzdWx0IGFuZCBAcGhhbnRvbS4KKyAgICAvLworICAgIC8vIE9uIFg4Niwg
dGhpcyBpcyBsb3dlcmVkIHRvIGEgbG9hZC1sb2FkIGZlbmNlIGFuZCBAcmVzdWx0IHVzZXMgQHBo
YW50b20gZGlyZWN0bHkuCisgICAgLy8KKyAgICAvLyBPbiBBUk0sIHRoaXMgaXMgbG93ZXJlZCBh
cyBpZiBsaWtlOgorICAgIC8vCisgICAgLy8gQHJlc3VsdCA9IEJpdFhvcihAcGhhbnRvbSwgQHBo
YW50b20pCisgICAgLy8KKyAgICAvLyBFeGNlcHQgdGhhdCB0aGUgY29tcGlsZXIgbmV2ZXIgZ2V0
cyBhbiBvcHBvcnR1bml0eSB0byBzaW1wbGlmeSBvdXQgdGhlIEJpdFhvci4KKyAgICBEZXBlbmQs
CiAKICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsIGFkZHJlc3Mgb2Yg
YSBXYXNtIG1lbW9yeSBvcGVyYXRpb24uIEl0IHRha2VzIGFuIEludFB0cgogICAgIC8vIGFuZCBh
IHBpbm5lZCByZWdpc3RlciB0aGVuIGNvbXB1dGVzIHRoZSBhcHByb3ByaWF0ZSBJbnRQdHIgYWRk
cmVzcy4gRm9yIHRoZSB1c2UtY2FzZSBvZgpAQCAtMzAxLDYgKzQwMiwxMTAgQEAgaW5saW5lIGJv
b2wgaXNEZWZpbml0ZWx5VGVybWluYWwoT3Bjb2RlIAogICAgIH0KIH0KIAoraW5saW5lIGJvb2wg
aXNMb2FkKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNl
IExvYWQ4WjoKKyAgICBjYXNlIExvYWQ4UzoKKyAgICBjYXNlIExvYWQxNlo6CisgICAgY2FzZSBM
b2FkMTZTOgorICAgIGNhc2UgTG9hZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNTdG9y
ZShPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBTdG9y
ZTg6CisgICAgY2FzZSBTdG9yZTE2OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lu
bGluZSBib29sIGlzTG9hZFN0b3JlKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICBjYXNlIExvYWQ4UzoKKyAgICBjYXNlIExvYWQx
Nlo6CisgICAgY2FzZSBMb2FkMTZTOgorICAgIGNhc2UgTG9hZDoKKyAgICBjYXNlIFN0b3JlODoK
KyAgICBjYXNlIFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5l
IGJvb2wgaXNBdG9taWMoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgewor
ICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICBj
YXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRv
bWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdY
b3I6CisgICAgY2FzZSBBdG9taWNYY2hnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0F0
b21pY0NBUyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2Fz
ZSBBdG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
CitpbmxpbmUgYm9vbCBpc0F0b21pY1hjaGcoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2gg
KG9wY29kZSkgeworICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdB
bmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAg
IGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K2lubGluZSBib29sIGlzTWVtb3J5QWNjZXNzKE9wY29kZSBvcGNvZGUpCit7CisgICAgcmV0dXJu
IGlzQXRvbWljKG9wY29kZSkgfHwgaXNMb2FkU3RvcmUob3Bjb2RlKTsKK30KKworaW5saW5lIE9w
Y29kZSBzaWduRXh0ZW5kT3Bjb2RlKFdpZHRoIHdpZHRoKQoreworICAgIHN3aXRjaCAod2lkdGgp
IHsKKyAgICBjYXNlIFdpZHRoODoKKyAgICAgICAgcmV0dXJuIFNFeHQ4OworICAgIGNhc2UgV2lk
dGgxNjoKKyAgICAgICAgcmV0dXJuIFNFeHQxNjsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gT29wczsKKyAgICB9Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMjEyOTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjAyLDYgKzIwMiw4IEBAIHZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGMKICAgICAgICAgfQogICAgICAgICBkYXRhTG9nKCIgICAgIiwgZGVlcER1bXAoKnRoaXMs
IHZhbHVlKSwgIlxuIik7CiAgICAgfQorICAgIGlmIChoYXNRdWlya3MoKSkKKyAgICAgICAgb3V0
LnByaW50KCJIYXMgUXVpcmtzOiBUcnVlXG4iKTsKICAgICBpZiAodmFyaWFibGVzKCkuc2l6ZSgp
KSB7CiAgICAgICAgIG91dC5wcmludCgiVmFyaWFibGVzOlxuIik7CiAgICAgICAgIGZvciAoVmFy
aWFibGUqIHZhcmlhYmxlIDogdmFyaWFibGVzKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNyBAQCBw
dWJsaWM6CiAgICAgVmFsdWUqIGFkZEludENvbnN0YW50KE9yaWdpbiwgVHlwZSwgaW50NjRfdCB2
YWx1ZSk7CiAgICAgVmFsdWUqIGFkZEludENvbnN0YW50KFZhbHVlKiwgaW50NjRfdCB2YWx1ZSk7
CiAKKyAgICAvLyBZb3UncmUgZ3VhcmFudGVlZCB0aGF0IGJvdHRvbSBpcyB6ZXJvLgogICAgIFZh
bHVlKiBhZGRCb3R0b20oT3JpZ2luLCBUeXBlKTsKICAgICBWYWx1ZSogYWRkQm90dG9tKFZhbHVl
Kik7CiAKQEAgLTE5NSw2ICsxOTYsMTIgQEAgcHVibGljOgogICAgIC8vIGFsaXZlLiBHcmVhdCBm
b3IgY29tcGlsZXItZ2VuZXJhdGVkIGRhdGEgc2VjdGlvbnMsIGxpa2Ugc3dpdGNoIGp1bXAgdGFi
bGVzIGFuZCBjb25zdGFudCBwb29scy4KICAgICAvLyBUaGlzIHJldHVybnMgbWVtb3J5IHRoYXQg
aGFzIGJlZW4gemVyby1pbml0aWFsaXplZC4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBh
ZGREYXRhU2VjdGlvbihzaXplX3QpOworICAgIAorICAgIC8vIFNvbWUgb3BlcmF0aW9ucyBhcmUg
c3BlY2lmaWVkIGluIEIzIElSIHRvIGJlaGF2ZSBvbmUgd2F5IGJ1dCBvbiB0aGlzIGdpdmVuIENQ
VSB0aGV5IGJlaGF2ZSBhCisgICAgLy8gZGlmZmVyZW50IHdheS4gV2hlbiB0cnVlLCB0aG9zZSBC
MyBJUiBvcHMgc3dpdGNoIHRvIGJlaGF2aW5nIHRoZSBDUFUgd2F5LCBhbmQgdGhlIG9wdGltaXpl
ciBtYXkKKyAgICAvLyBzdGFydCB0YWtpbmcgYWR2YW50YWdlIG9mIGl0LgorICAgIGJvb2wgaGFz
UXVpcmtzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNRdWlya3M7IH0KKyAgICB2b2lkIHNldEhhc1F1
aXJrcyhib29sIHZhbHVlKSB7IG1faGFzUXVpcmtzID0gdmFsdWU7IH0KIAogICAgIE9wYXF1ZUJ5
cHJvZHVjdHMmIGJ5cHJvZHVjdHMoKSB7IHJldHVybiAqbV9ieXByb2R1Y3RzOyB9CiAKQEAgLTI1
Miw2ICsyNTksNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoUHJpbnRT
dHJlYW0mLCBPcmlnaW4pPj4gbV9vcmlnaW5QcmludGVyOwogICAgIGNvbnN0IHZvaWQqIG1fZnJv
bnRlbmREYXRhOwogICAgIFBDVG9PcmlnaW5NYXAgbV9wY1RvT3JpZ2luTWFwOworICAgIGJvb2wg
bV9oYXNRdWlya3MgeyBmYWxzZSB9OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJl
bmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMiw3ICs2MDIsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBicmVhazsKLQorICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgTmVnOgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBOZWcoY29uc3RhbnQpCiAgICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IC1jb25zdGFudApAQCAtMTI5NSw2ICsxMjk1LDE2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX3Byb2MuaGFzUXVp
cmtzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQ4KEF0b21pY1hjaGdf
X18pCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBdG9taWNYY2hnX19fCisgICAgICAg
ICAgICAgICAgaWYgKGlzQXRvbWljWGNoZyhtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpCisg
ICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5hczxBdG9taWNWYWx1ZT4o
KS0+b3BlcmF0aW9uV2lkdGgoKSA9PSBXaWR0aDgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgIGNhc2UgU0V4dDE2OgpAQCAtMTM0Myw2ICsxMzUzLDE2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihBdG9taWNYY2hnX19fKQorICAgICAgICAg
ICAgICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXworICAgICAgICAgICAgICAgIGlmIChp
c0F0b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpKQorICAgICAgICAgICAgICAg
ICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRvbWljVmFsdWU+KCktPm9wZXJhdGlvbldp
ZHRoKCkgPT0gV2lkdGgxNikgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50
aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgY2FzZSBTRXh0MzI6CkBAIC0yMTAxLDIyICsyMTIxLDI1IEBAIHByaXZhdGU6CiAgICAgICAg
IEFTU0VSVChtX3ZhbHVlLT5udW1DaGlsZHJlbigpID49IDIpOwogICAgICAgICAKICAgICAgICAg
Ly8gTGVhdmUgaXQgYWxvbmUgaWYgdGhlIHJpZ2h0IGNoaWxkIGlzIGEgY29uc3RhbnQuCi0gICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNDb25zdGFudCgpKQorICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMSktPmlzQ29uc3RhbnQoKQorICAgICAgICAgICAgfHwgbV92YWx1ZS0+Y2hp
bGQoMCktPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUykKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCi0gICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNDb25zdGFudCgpKSB7
CisgICAgICAgIGF1dG8gc3dhcCA9IFsmXSAoKSB7CiAgICAgICAgICAgICBzdGQ6OnN3YXAobV92
YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQorICAgICAgICB9Owor
ICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gc3dhcCgpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMpCisgICAgICAgICAgICByZXR1
cm4gc3dhcCgpOworICAgICAgICAKICAgICAgICAgLy8gU29ydCB0aGUgb3BlcmFuZHMuIFRoaXMg
aXMgYW4gaW1wb3J0YW50IGNhbm9uaWNhbGl6YXRpb24uIFdlIHVzZSB0aGUgaW5kZXggaW5zdGVh
ZCBvZgogICAgICAgICAvLyB0aGUgYWRkcmVzcyB0byBtYWtlIHRoaXMgYXQgbGVhc3Qgc2xpZ2h0
bHkgZGV0ZXJtaW5pc3RpYy4KLSAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pbmRleCgp
ID4gbV92YWx1ZS0+Y2hpbGQoMSktPmluZGV4KCkpIHsKLSAgICAgICAgICAgIHN0ZDo6c3dhcCht
X3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPmluZGV4KCkgPiBtX3ZhbHVlLT5jaGlsZCgxKS0+aW5kZXgoKSkK
KyAgICAgICAgICAgIHJldHVybiBzd2FwKCk7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHJlYWxseSBiZSBhIGZvcndhcmQgYW5hbHlzaXMuIEluc3RlYWQsIHdlIHVzZXMgYSBi
b3VuZGVkLXNlYXJjaCBiYWNrd2FyZHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDYgKzM0Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAo
IkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgw
KS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2
YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgTG9hZDoKQEAgLTM1Myw2ICszNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUp
KTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBw
b2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT50eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNj
ZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU3Rv
cmU4OgpAQCAtMzYyLDYgKzM2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKICAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVy
VHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVl
LT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxp
ZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZh
bHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU3RvcmU6CkBA
IC0zNjksOCArMzcyLDQ5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQg
IiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBW
b2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFs
dWUpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAg
ICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAz
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBl
KCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQo
MCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgICAgICAgICBWQUxJREFU
RSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGls
ZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVl
KSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPnR5cGUoKSksICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50
eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0Fj
Y2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0
b21pY1hjaGdBZGQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAg
ICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAg
ICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNo
ZzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxk
cmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlw
ZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
dmFsaWRhdGVBdG9taWModmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nl
c3ModmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEZXBl
bmQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRz
KCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51
bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2
YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBXYXNtQWRkcmVzczoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5o
YXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwpAQCAtNTM3LDYg
KzU4MSwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9
CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZUZlbmNlKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAg
ICAgIGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICBWQUxJREFURShtZW1vcnR5
LT5hY2Nlc3NCYW5rKCkgPT0gR1AsICgiRmVuY2UgYXQgIiwgKm1lbW9yeSkpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHZhbGlkYXRlQXRvbWljKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEF0b21pY1ZhbHVlKiBhdG9taWMgPSB2YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAg
IAorICAgICAgICBWQUxJREFURShiZXN0VHlwZShhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpID09
IGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgIH0KIAogICAg
IHZvaWQgdmFsaWRhdGVTdGFja0FjY2VzcyhWYWx1ZSogdmFsdWUpCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTAsNiAr
NTEwLDcgQEAgYm9vbCBWYWx1ZTo6cmV0dXJuc0Jvb2woKSBjb25zdAogICAgIGNhc2UgQWJvdmVF
cXVhbDoKICAgICBjYXNlIEJlbG93RXF1YWw6CiAgICAgY2FzZSBFcXVhbE9yVW5vcmRlcmVkOgor
ICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBQ
aGk6CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHN0b3J5IGhlcmUuCkBAIC01
ODksNiArNTkwLDcgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgY2FzZSBC
ZWxvd0VxdWFsOgogICAgIGNhc2UgRXF1YWxPclVub3JkZXJlZDoKICAgICBjYXNlIFNlbGVjdDoK
KyAgICBjYXNlIERlcGVuZDoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBEaXY6CiAgICAgY2Fz
ZSBVRGl2OgpAQCAtNjAwLDE2ICs2MDIsNDQgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNv
bnN0CiAgICAgY2FzZSBMb2FkOFM6CiAgICAgY2FzZSBMb2FkMTZaOgogICAgIGNhc2UgTG9hZDE2
UzoKLSAgICBjYXNlIExvYWQ6Ci0gICAgICAgIHJlc3VsdC5yZWFkcyA9IGFzPE1lbW9yeVZhbHVl
PigpLT5yYW5nZSgpOworICAgIGNhc2UgTG9hZDogeworICAgICAgICBNZW1vcnlWYWx1ZSogbWVt
b3J5ID0gYXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+
cmFuZ2UoKTsKKyAgICAgICAgaWYgKG1lbW9yeS0+cGhhbnRvbVJhbmdlKCkpIHsKKyAgICAgICAg
ICAgIHJlc3VsdC53cml0ZXMgPSBtZW1vcnktPnBoYW50b21SYW5nZSgpOworICAgICAgICAgICAg
cmVzdWx0LmZlbmNlID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICByZXN1bHQuY29udHJvbERl
cGVuZGVudCA9IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIFN0b3JlODoK
ICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgY2FzZSBTdG9yZToKLSAgICAgICAgcmVzdWx0LndyaXRl
cyA9IGFzPE1lbW9yeVZhbHVlPigpLT5yYW5nZSgpOworICAgIGNhc2UgU3RvcmU6IHsKKyAgICAg
ICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICByZXN1
bHQud3JpdGVzID0gbWVtb3J5LT5yYW5nZSgpOworICAgICAgICBpZiAobWVtb3J5LT5waGFudG9t
UmFuZ2UoKSkgeworICAgICAgICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5LT5waGFudG9tUmFu
Z2UoKTsKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAg
IGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBB
dG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNo
Z1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9y
eSA9IGFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICByZXN1bHQucmVhZHMgPSBtZW1vcnktPnJh
bmdlKCkgfCBtZW1vcnktPnBoYW50b21SYW5nZSgpOworICAgICAgICByZXN1bHQud3JpdGVzID0g
bWVtb3J5LT5yYW5nZSgpIHwgbWVtb3J0eS0+cGhhbnRvbVJhbmdlKCk7CisgICAgICAgIGlmICht
ZW1vcnktPnBoYW50b21SYW5nZSgpKQorICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsK
ICAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICBicmVhazsK
KyAgICB9CiAgICAgY2FzZSBXYXNtQWRkcmVzczoKICAgICAgICAgcmVzdWx0LnJlYWRzUGlubmVk
ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CkBAIC02MTcsMTggKzY0Nyw3IEBAIEVmZmVjdHMgVmFs
dWU6OmVmZmVjdHMoKSBjb25zdAogICAgICAgICBjb25zdCBGZW5jZVZhbHVlKiBmZW5jZSA9IGFz
PEZlbmNlVmFsdWU+KCk7CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IGZlbmNlLT5yZWFkOwogICAg
ICAgICByZXN1bHQud3JpdGVzID0gZmVuY2UtPndyaXRlOwotICAgICAgICAKLSAgICAgICAgLy8g
UHJldmVudCBraWxsaW5nIG9mIGZlbmNlcyB0aGF0IGNsYWltIG5vdCB0byB3cml0ZSBhbnl0aGlu
Zy4gSXQncyBhIGJpdCB3ZWlyZCB0aGF0IHdlIHVzZQotICAgICAgICAvLyBsb2NhbCBzdGF0ZSBh
cyB0aGUgd2F5IHRvIGRvIHRoaXMsIGJ1dCBpdCBoYXBwZW5zIHRvIHdvcms6IHdlIG11c3QgYXNz
dW1lIHRoYXQgd2UgY2Fubm90Ci0gICAgICAgIC8vIGtpbGwgd3JpdGVzTG9jYWxTdGF0ZSB1bmxl
c3Mgd2UgdW5kZXJzdGFuZHMgZXhhY3RseSB3aGF0IHRoZSBpbnN0cnVjdGlvbiBpcyBkb2luZyAo
bGlrZQotICAgICAgICAvLyB0aGUgd2F5IHRoYXQgZml4U1NBIHVuZGVyc3RhbmRzIFNldC9HZXQg
YW5kIHRoZSB3YXkgdGhhdCByZWR1Y2VTdHJlbmd0aCBhbmQgb3RoZXJzCi0gICAgICAgIC8vIHVu
ZGVyc3RhbmQgVXBzaWxvbikuIFRoaXMgd291bGQgb25seSBiZWNvbWUgYSBwcm9ibGVtIGlmIHdl
IGhhZCBzb21lIGFuYWx5c2lzIHRoYXQgd2FzCi0gICAgICAgIC8vIGxvb2tpbmcgdG8gdXNlIHRo
ZSB3cml0ZXNMb2NhbFN0YXRlIGJpdCB0byBpbnZhbGlkYXRlIGEgQ1NFIG92ZXIgbG9jYWwgc3Rh
dGUgb3BlcmF0aW9ucy4KLSAgICAgICAgLy8gVGhlbiBhIEZlbmNlIHdvdWxkIGxvb2sgYmxvY2ss
IHNheSwgdGhlIGVsaW1pbmF0aW9uIG9mIGEgcmVkdW5kYW50IEdldC4gQnV0IGl0IGxpa2UKLSAg
ICAgICAgLy8gdGhhdCdzIG5vdCBhdCBhbGwgaG93IG91ciBvcHRpbWl6YXRpb25zIGZvciBTZXQv
R2V0L1Vwc2lsb24vUGhpIHdvcmsgLSB0aGV5IGdyb2sgdGhlaXIKLSAgICAgICAgLy8gb3BlcmF0
aW9ucyBkZWVwbHkgZW5vdWdoIHRoYXQgdGhleSBoYXZlIG5vIG5lZWQgdG8gY2hlY2sgdGhpcyBi
aXQgLSBzbyB0aGlzIGNoZWF0IGlzCi0gICAgICAgIC8vIGZpbmUuCi0gICAgICAgIHJlc3VsdC53
cml0ZXNMb2NhbFN0YXRlID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ0NhbGw6CkBAIC02OTQsNiArNzEzLDcgQEAg
VmFsdWVLZXkgVmFsdWU6OmtleSgpIGNvbnN0CiAgICAgY2FzZSBDaGVjazoKICAgICBjYXNlIEJp
dHdpc2VDYXN0OgogICAgIGNhc2UgTmVnOgorICAgIGNhc2UgRGVwZW5kOgogICAgICAgICByZXR1
cm4gVmFsdWVLZXkoa2luZCgpLCB0eXBlKCksIGNoaWxkKDApKTsKICAgICBjYXNlIEFkZDoKICAg
ICBjYXNlIFN1YjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24g
MjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgsNiArNjgsMTAgQEAgcHVibGljOgogICAgIAogICAgIE9wY29kZSBvcGNvZGUo
KSBjb25zdCB7IHJldHVybiBraW5kKCkub3Bjb2RlKCk7IH0KICAgICAKKyAgICAvLyBOb3RlIHRo
YXQgdGhlIGtpbmQgaXMgbWVhbnQgdG8gYmUgaW1tdXRhYmxlLiBEbyB0aGlzIHdoZW4geW91IGtu
b3cgdGhhdCB0aGlzIGlzIHNhZmUuIEl0J3Mgbm90CisgICAgLy8gdXN1YWxseSBzYWZlLgorICAg
IHZvaWQgc2V0S2luZFVuc2FmZWx5KEtpbmQga2luZCkgeyBtX2tpbmQgPSBraW5kOyB9CisgICAg
CiAgICAgLy8gSXQncyBnb29kIHByYWN0aWNlIHRvIG1pcnJvciBLaW5kIG1ldGhvZHMgaGVyZSwg
c28geW91IGNhbiBzYXkgdmFsdWUtPmlzQmxhaCgpCiAgICAgLy8gaW5zdGVhZCBvZiB2YWx1ZS0+
a2luZCgpLmlzQmxhaCgpLgogICAgIGJvb2wgaXNDaGlsbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQo
KS5pc0NoaWxsKCk7IH0KQEAgLTEwNyw2ICsxMTEsOCBAQCBwdWJsaWM6CiAgICAgLy8gdmFsdWVz
IHdpdGggSWRlbnRpdGllcyBvbiBib3R0b20gY29uc3RhbnRzLiBGb3IgdGhpcyByZWFzb24sIHRo
aXMgdGFrZXMgYSBjYWxsYmFjayB0aGF0IGlzCiAgICAgLy8gcmVzcG9uc2libGUgZm9yIGNyZWF0
aW5nIGJvdHRvbXMuIFRoZXJlJ3MgYSB1dGlsaXR5IGZvciB0aGlzLCBzZWUgQjNCb3R0b21Qcm92
aWRlci5oLiBZb3UKICAgICAvLyBjYW4gYWxzbyBhY2Nlc3MgdGhhdCB1dGlsaXR5IHVzaW5nIHJl
cGxhY2VXaXRoQm90dG9tKEluc2VydGlvblNldCYsIHNpemVfdCkuCisgICAgLy8KKyAgICAvLyBZ
b3UncmUgZ3VhcmFudGVlZCB0aGF0IGJvdHRvbSBpcyB6ZXJvLgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJvdHRvbVByb3ZpZGVyPgogICAgIHZvaWQgcmVwbGFjZVdpdGhCb3R0b20oY29uc3QgQm90
dG9tUHJvdmlkZXImKTsKICAgICAKQEAgLTMyMSw2ICszMjcsNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIElUb0Y6CiAgICAgICAgIGNhc2UgQml0d2lzZUNhc3Q6CiAgICAgICAgIGNhc2UgQnJh
bmNoOgorICAgICAgICBjYXNlIERlcGVuZDoKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShudW1B
cmdzICE9IDEpKQogICAgICAgICAgICAgICAgIGJhZEtpbmQoa2luZCwgbnVtQXJncyk7CiAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMzggQEAKIAogI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgogCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVHlwZSBiZXN0VHlw
ZShCYW5rIGJhbmssIFdpZHRoIHdpZHRoKQoreworICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICBj
YXNlIFdpZHRoODoKKyAgICBjYXNlIFdpZHRoMTY6CisgICAgY2FzZSBXaWR0aDMyOgorICAgICAg
ICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBJ
bnQzMjsKKyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBGbG9hdDsKKyAgICAg
ICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gVm9pZDsKKyAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgIHN3aXRjaCAoYmFuaykgeworICAg
ICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIEludDY0OworICAgICAgICBjYXNlIEZQ
OgorICAgICAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVm9pZDsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVm9pZDsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKIG5hbWVzcGFjZSBXVEYgewogCiB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpCMzo6V2lkdGggd2lkdGgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDE4IEBA
IGlubGluZSBXaWR0aCB3aWR0aEZvclR5cGUoVHlwZSB0eXBlKQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCitpbmxpbmUgV2lkdGggY2Fub25pY2FsV2lkdGgoV2lkdGggd2lkdGgpCit7
CisgICAgcmV0dXJuIHN0ZDo6bWF4KFdpZHRoMzIsIHdpZHRoKTsKK30KKworaW5saW5lIFdpZHRo
IGlzQ2Fub25pY2FsV2lkdGgoV2lkdGggd2lkdGgpCit7CisgICAgcmV0dXJuIHdpZHRoID49IFdp
ZHRoMzI7Cit9CisKK1R5cGUgYmVzdFR5cGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0aCk7CisKIGlu
bGluZSBXaWR0aCBjb25zZXJ2YXRpdmVXaWR0aChCYW5rIGJhbmspCiB7CiAgICAgcmV0dXJuIGJh
bmsgPT0gR1AgPyBwb2ludGVyV2lkdGgoKSA6IFdpZHRoNjQ7CkBAIC05Myw2ICsxMDUsMjAgQEAg
aW5saW5lIFdpZHRoIHdpZHRoRm9yQnl0ZXModW5zaWduZWQgYnl0ZQogICAgIH0KIH0KIAoraW5s
aW5lIHVpbnQ2NF90IG1hc2soV2lkdGggd2lkdGgpCit7CisgICAgc3dpdGNoICh3aWR0aCkgewor
ICAgIGNhc2UgV2lkdGg4OgorICAgICAgICByZXR1cm4gMHgwMDAwMDAwMDAwMDAwMGZmbGx1Owor
ICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgcmV0dXJuIDB4MDAwMDAwMDAwMDAwZmZmZmxsdTsK
KyAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgIHJldHVybiAweDAwMDAwMDAwZmZmZmZmZmZsbHU7
CisgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICByZXR1cm4gMHhmZmZmZmZmZmZmZmZmZmZmbGx1
OworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVzcGFjZSBXVEYg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24g
MjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDcgQEAgdW5zaWduZWQgQXJnOjpqc0hhc2goKSBjb25z
dAogICAgIGNhc2UgUmVsQ29uZDoKICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgY2FzZSBEb3VibGVD
b25kOgorICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICBy
ZXN1bHQgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb2Zmc2V0KTsKICAgICAgICAgYnJlYWs7
CkBAIC0xODIsNiArMTgzLDkgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAgIG91dC5wcmludChhc0RvdWJsZUNvbmRp
dGlvbigpKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhdHVzQ29uZDoKKyAgICAgICAg
b3V0LnByaW50KGFzU3RhdHVzQ29uZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBTcGVjaWFsOgogICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTI0MSw2ICsyNDUsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgQXJnCiAgICAgY2FzZSBBcmc6OkRvdWJsZUNvbmQ6CiAgICAgICAgIG91
dC5wcmludCgiRG91YmxlQ29uZCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OlN0
YXR1c0NvbmQ6CisgICAgICAgIG91dC5wcmludCgiU3RhdHVzQ29uZCIpOworICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBBcmc6OlNwZWNpYWw6CiAgICAgICAgIG91dC5wcmludCgiU3BlY2lhbCIp
OwogICAgICAgICByZXR1cm47CkBAIC0yODUsNiArMjkyLDkgQEAgdm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIEFyZwogICAgIGNhc2UgQXJnOjpFYXJseURlZjoKICAgICAgICAg
b3V0LnByaW50KCJFYXJseURlZiIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkVh
cmx5WkRlZjoKKyAgICAgICAgb3V0LnByaW50KCJFYXJseVpEZWYiKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgQXJnOjpTY3JhdGNoOgogICAgICAgICBvdXQucHJpbnQoIlNjcmF0Y2giKTsK
ICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5o
CShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgUmVs
Q29uZCwKICAgICAgICAgUmVzQ29uZCwKICAgICAgICAgRG91YmxlQ29uZCwKKyAgICAgICAgU3Rh
dHVzQ29uZCwKICAgICAgICAgU3BlY2lhbCwKICAgICAgICAgV2lkdGhBcmcKICAgICB9OwpAQCAt
MTUxLDYgKzE1Miw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gYXMgVXNlIGhhcyB1bmRlZmluZWQg
YmVoYXZpb3I6IHRoZSB1c2UgbWF5IGhhcHBlbiBiZWZvcmUgdGhlIGRlZiwgb3IgaXQgbWF5IGhh
cHBlbiBhZnRlcgogICAgICAgICAvLyBpdC4KICAgICAgICAgRWFybHlEZWYsCisgICAgICAgICAg
ICAKKyAgICAgICAgRWFybHlaRGVmLAogCiAgICAgICAgIC8vIFNvbWUgaW5zdHJ1Y3Rpb25zIG5l
ZWQgYSBzY3JhdGNoIHJlZ2lzdGVyLiBXZSBtb2RlbCB0aGlzIGJ5IHNheWluZyB0aGF0IHRoZSB0
ZW1wb3JhcnkgaXMKICAgICAgICAgLy8gZGVmaW5lZCBlYXJseSBhbmQgdXNlZCBsYXRlLiBUaGlz
IHJvbGUgaW1wbGllcyB0aGF0LgpAQCAtMTg2LDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAg
Y2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6
CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjA2LDYgKzIxMCw3IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAg
ICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMjI4LDYgKzIzMyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAg
ICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2Ug
RWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIHJvbGU7CiAgICAgICAgIGNhc2UgVXNlOgog
ICAgICAgICAgICAgcmV0dXJuIENvbGRVc2U7CkBAIC0yNTMsNiArMjU5LDcgQEAgcHVibGljOgog
ICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAg
IGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
Mjc0LDYgKzI4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNl
IFVzZUFkZHI6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVm
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMjk0LDYgKzMwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBa
RGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAg
ICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzE1LDYgKzMyNCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgY2FzZSBMYXRlQ29sZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Y2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgIGNhc2UgU2Ny
YXRjaDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMzAsNiArMzQw
LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgTGF0ZVVz
ZToKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAg
ICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTM1OCw2ICszNjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VaRGVmOgor
ICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTMzLDYgKzU0NSwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgc3RhdGljIEFyZyBz
dGF0dXNDb25kKE1hY3JvQXNzZW1ibGVyOjpTdGF0dXNDb25kaXRpb24gY29uZGl0aW9uKQorICAg
IHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YXR1c0Nv
bmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKICAgICBzdGF0aWMgQXJnIHNwZWNpYWwoQWlyOjpTcGVjaWFsKiBz
cGVjaWFsKQogICAgIHsKICAgICAgICAgQXJnIHJlc3VsdDsKQEAgLTY1OCwxMiArNjc4LDE4IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBEb3VibGVDb25kOwogICAgIH0KIAor
ICAgIGJvb2wgaXNTdGF0dXNDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5k
KCkgPT0gU3RhdHVzQ29uZDsKKyAgICB9CisKICAgICBib29sIGlzQ29uZGl0aW9uKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CiAgICAgICAgIGNhc2UgUmVsQ29uZDoK
ICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAg
IGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODUxLDYgKzg3Nyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAg
IGNhc2UgRG91YmxlQ29uZDoKKyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgogICAgICAgICBjYXNl
IFNwZWNpYWw6CiAgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTg3Miw2ICs4OTksNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAg
ICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNh
c2UgU3RhdHVzQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBjYXNlIFdpZHRo
QXJnOgogICAgICAgICBjYXNlIEludmFsaWQ6CkBAIC0xMDU4LDYgKzEwODYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBj
YXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgY2FzZSBT
cGVjaWFsOgogICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0xMTc3LDYgKzEyMDYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbj4obV9vZmZzZXQpOwogICAgIH0KICAg
ICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6U3RhdHVzQ29uZGl0aW9uIGFzU3RhdHVzQ29uZGl0aW9u
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1N0YXR1c0NvbmQoKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6U3RhdHVzQ29uZGl0aW9uPihtX29m
ZnNldCk7CisgICAgfQorICAgIAogICAgIC8vIFRlbGxzIHlvdSBpZiB0aGUgQXJnIGlzIGludmVy
dGlibGUuIE9ubHkgY29uZGl0aW9uIGFyZ3VtZW50cyBhcmUgaW52ZXJ0aWJsZSwgYW5kIGV2ZW4g
Zm9yIHRob3NlLCB0aGVyZQogICAgIC8vIGFyZSBhIGZldyBleGNlcHRpb25zIC0gbm90YWJseSBP
dmVyZmxvdyBhbmQgU2lnbmVkLgogICAgIGJvb2wgaXNJbnZlcnRpYmxlKCkgY29uc3QKQEAgLTEx
ODQsNiArMTIxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKICAgICAg
ICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2Ug
U3RhdHVzQ29uZDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFJlc0Nv
bmQ6CiAgICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OmlzSW52ZXJ0aWJsZShhc1Jl
c3VsdENvbmRpdGlvbigpKTsKQEAgLTEyMDQsNiArMTI0MCw4IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiByZXNDb25kKE1hY3JvQXNzZW1ibGVyOjppbnZlcnQoYXNSZXN1bHRDb25kaXRp
b24oKSkpOwogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAgICAgICByZXR1cm4gZG91
YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0KGFzRG91YmxlQ29uZGl0aW9uKCkpKTsKKyAg
ICAgICAgY2FzZSBTdGF0dXNDb25kOgorICAgICAgICAgICAgcmV0dXJuIHN0YXR1c0NvbmQoTWFj
cm9Bc3NlbWJsZXI6OmludmVydChhc1N0YXR1c0NvbmRpdGlvbigpKSk7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgcmV0dXJuIEFyZygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICsz
NSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlCiAKIGNvbnN0
IGNoYXIqIGNvbnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CiAKK3ZvaWQgQmFzaWNC
bG9jazo6c2V0U3VjY2Vzc29ycyhCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBtX3N1Y2Nlc3Nv
cnMucmVzaXplKDEpOworICAgIG1fc3VjY2Vzc29yc1swXSA9IHRhcmdldDsKK30KKwordm9pZCBC
YXNpY0Jsb2NrOjpzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayB0YWtlbiwgRnJlcXVlbnRl
ZEJsb2NrIG5vdFRha2VuKQoreworICAgIG1fc3VjY2Vzc29ycy5yZXNpemUoMik7CisgICAgbV9z
dWNjZXNzb3JzWzBdID0gdGFrZW47CisgICAgbV9zdWNjZXNzb3JzWzFdID0gbm90VGFrZW47Cit9
CisKIGJvb2wgQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCiB7
CiAgICAgcmV0dXJuIEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMjEy
OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDkgQEAgcHVibGljOgogICAgIGNvbnN0IFN1Y2Nlc3Nv
ckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KICAgICBT
dWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CiAKKyAg
ICB2b2lkIHNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKTsKKyAgICB2b2lkIHNldFN1Y2Nl
c3NvcnMoRnJlcXVlbnRlZEJsb2NrLCBGcmVxdWVudGVkQmxvY2spOworCiAgICAgQmFzaWNCbG9j
ayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3Nv
cihpbmRleCkuYmxvY2soKTsgfQogICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1bnNp
Z25lZCBpbmRleCkgeyByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CiAgICAgU3Vj
Y2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9j
a3MoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlv
blNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJC
bG9ja0luc2VydGlvblNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQmxvY2tJbnNlcnRpb25TZXQuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5j
bHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9CdWJibGVTb3J0Lmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQmxvY2tJbnNlcnRpb25T
ZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KENvZGUgJmNvZGUpCisgICAgOiBHZW5lcmljQmxvY2tJbnNl
cnRpb25TZXQoY29kZS5tX2Jsb2NrcykKK3sKK30KKworQmxvY2tJbnNlcnRpb25TZXQ6On5CbG9j
a0luc2VydGlvblNldCgpCit7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNHZW5lcmljQmxvY2tJc25lcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJD
b2RlLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBJbnNlcnRpb25TZXQ7CisKK3R5cGVkZWYgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJh
c2ljQmxvY2s+OjpCbG9ja0luc2VydGlvbiBCbG9ja0luc2VydGlvbjsKKworY2xhc3MgQmxvY2tJ
bnNlcnRpb25TZXQgOiBwdWJsaWMgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+
IHsKK3B1YmxpYzoKKyAgICBCbG9ja0luc2VydGlvblNldChDb2RlJik7CisgICAgfkJsb2NrSW5z
ZXJ0aW9uU2V0KCk7CisgICAgCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IGlt
cGxlbWVudCBCMzo6QmxvY2tJbnNlcnRpb25TZXQncyBzcGxpdEZvcndhcmQoKS4KK307CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5l
cmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDggQEAgdm9pZCBwcmVwYXJlRm9y
R2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAgICAgICBkYXRhTG9nKCJJbml0aWFsIGFpcjpcbiIp
OwogICAgICAgICBkYXRhTG9nKGNvZGUpOwogICAgIH0KKyAgICAKKyAgICBzaW1wbGlmeUNGRyhj
b2RlKTsKIAogICAgIGxvd2VyTWFjcm9zKGNvZGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02NjgsMjggKzY2OCwzODAgQEAgTG9hZDggVTpHOjgsIFpEOkc6MzIKICAgICBBZGRyLCBUbXAK
ICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3E4IFU6Rzo4LCBaRDpHOjMyCisgICAgQWRkciwgVG1w
CisgICAgSW5kZXgsIFRtcAorCiBTdG9yZTggVTpHOjgsIEQ6Rzo4CiAgICAgVG1wLCBJbmRleAog
ICAgIFRtcCwgQWRkcgogICAgIHg4NjogSW1tLCBJbmRleAogICAgIHg4NjogSW1tLCBBZGRyCiAK
K1N0b3JlUmVsOCBVOkc6OCwgRDpHOjgKKyAgICBUbXAsIEluZGV4CisgICAgVG1wLCBBZGRyCisg
ICAgeDg2OiBJbW0sIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKwogTG9hZDhTaWduZWRFeHRl
bmRUbzMyIFU6Rzo4LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitM
b2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIgVTpHOjgsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAg
ICBJbmRleCwgVG1wCisKIExvYWQxNiBVOkc6MTYsIFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAg
ICBJbmRleCwgVG1wCiAKK0xvYWRBY3ExNiBVOkc6MTYsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAK
KyAgICBJbmRleCwgVG1wCisKIExvYWQxNlNpZ25lZEV4dGVuZFRvMzIgVTpHOjE2LCBaRDpHOjMy
CiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxMTZTaWduZWRFeHRlbmRU
bzMyIFU6RzoxNiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogU3Rv
cmUxNiBVOkc6MTYsIEQ6RzoxNgogICAgIFRtcCwgSW5kZXgKICAgICBUbXAsIEFkZHIKIAorU3Rv
cmVBY3ExNiBVOkc6MTYsIEQ6RzoxNgorICAgIFRtcCwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKwor
TG9hZEFjcTMyIFU6RzozMiBaRDpHOjMyCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAg
ICBJbmRleCwgVG1wCisKK1N0b3JlUmVsMzIgVTpHOjMyIFpEOkc6MzIKKyAgICBUbXAsIEFkZHIK
KyAgICBUbXAsIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgK
KworNjQ6IExvYWRBY3E2NCBVOkc6NjQgWkQ6Rzo2NAorICAgIFRtcCwgVG1wCisgICAgQWRkciwg
VG1wCisgICAgSW5kZXgsIFRtcAorCis2NDogU3RvcmVSZWw2NCBVOkc6NjQgWkQ6Rzo2NAorICAg
IFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKyAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4Njog
SW1tLCBJbmRleAorCisjIFRoZSBmaXJzdCBvcGVyYW5kIGlzIHJheC4KK3g4NjogQXRvbWljU3Ry
b25nQ0FTOCBVOkc6MzIsIFVEOkc6OCwgVTpHOjgsIFVEOkc6OCwgWkQ6Rzo4CisgICAgU3RhdHVz
Q29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIElu
ZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVMxNiBVOkc6MzIsIFVEOkc6MTYsIFU6Rzoz
MiwgVUQ6RzoxNiwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAK
KyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJv
bmdDQVMzMiBVOkc6MzIsIFVEOkc6MzIsIFU6RzozMiwgVUQ6RzozMiwgWkQ6Rzo4CisgICAgU3Rh
dHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAs
IEluZGV4LCBUbXAKKworeDg2XzY0OiBBdG9taWNTdHJvbmdDQVM2NCBVOkc6MzIsIFVEOkc6NjQs
IFU6Rzo2NCwgVUQ6Rzo2NCwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRy
LCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9t
aWNTdHJvbmdDQVM4IFVEOkc6OCwgVTpHOjgsIFVEOkc6OAorICAgIFRtcCosIFRtcCwgQWRkcgor
ICAgIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNTdHJvbmdDQVMxNiBVRDpHOjE2LCBV
Okc6MzIsIFVEOkc6MTYKKyAgICBUbXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4
CisKK3g4NjogQXRvbWljU3Ryb25nQ0FTMzIgVUQ6RzozMiwgVTpHOjMyLCBVRDpHOjMyCisgICAg
VG1wKiwgVG1wLCBBZGRyCisgICAgVG1wKiwgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1N0
cm9uZ0NBUzY0IFVEOkc6NjQsIFU6Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCosIFRtcCwgQWRkcgor
ICAgIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBCcmFuY2hBdG9taWNTdHJvbmdDQVM4IFU6Rzoz
MiwgVUQ6Rzo4LCBVOkc6OCwgVUQ6Rzo4IC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBU
bXAsIEFkZHIKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNo
QXRvbWljU3Ryb25nQ0FTMTYgVTpHOjMyLCBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYgL2JyYW5j
aAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkcgorICAgIFN0YXR1c0NvbmQsIFRtcCos
IFRtcCwgSW5kZXgKKworeDg2OiBCcmFuY2hBdG9taWNTdHJvbmdDQVMzMiBVOkc6MzIsIFVEOkc6
MzIsIFU6RzozMiwgVUQ6RzozMiAvYnJhbmNoCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBB
ZGRyCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRleAorCit4ODZfNjQ6IEJyYW5jaEF0
b21pY1N0cm9uZ0NBUzY0IFU6RzozMiwgVUQ6Rzo2NCwgVTpHOjY0LCBVRDpHOjY0IC9icmFuY2gK
KyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBU
bXAsIEluZGV4CisKK3g4NjogQXRvbWljQWRkOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRy
CisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBB
dG9taWNBZGQxNiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FkZDMyIFU6Rzoz
MiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIK
KyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljQWRkNjQgVTpHOjY0LCBVRDpHOjY0Cisg
ICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5k
ZXgKKworeDg2OiBBdG9taWNTdWI4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJ
bW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1N1
YjE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljU3ViMzIgVTpHOjMyLCBVRDpH
OjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRt
cCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNTdWI2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0s
IEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4
ODY6IEF0b21pY0FuZDggVTpHOjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5k
ZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljQW5kMTYgVTpH
OjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRk
cgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNBbmQzMiBVOkc6MzIsIFVEOkc6MzIKKyAg
ICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCit4ODZfNjQ6IEF0b21pY0FuZDY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgor
ICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRv
bWljT3I4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY09yMTYgVTpHOjE2LCBVRDpH
OjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRt
cCwgSW5kZXgKKworeDg2OiBBdG9taWNPcjMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRk
cgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82
NDogQXRvbWljT3I2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIElu
ZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hvcjggVTpH
OjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIK
KyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljWG9yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAg
SW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgK
KworeDg2OiBBdG9taWNYb3IzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJ
bW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21p
Y1hvcjY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAg
ICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljTmVnOCBVRDpHOjgKKyAg
ICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOZWcxNiBVRDpHOjE2CisgICAgQWRkcgor
ICAgIEluZGV4CisKK3g4NjogQXRvbWljTmVnMzIgVUQ6RzozMgorICAgIEFkZHIKKyAgICBJbmRl
eAorCit4ODZfNjQ6IEF0b21pY05lZzY0IFVEOkc6NjQKKyAgICBBZGRyCisgICAgSW5kZXgKKwor
eDg2OiBBdG9taWNOb3Q4IFVEOkc6OAorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21p
Y05vdDE2IFVEOkc6MTYKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOb3QzMiBV
RDpHOjMyCisgICAgQWRkcgorICAgIEluZGV4CisKK3g4Nl82NDogQXRvbWljTm90NjQgVUQ6Rzo2
NAorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQ4IFVEOkc6OCwgVUQ6
Rzo4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQx
NiBVRDpHOjE2LCBVRDpHOjE2CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6
IEF0b21pY1hjaGdBZGQzMiBVRDpHOjMyLCBVRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1w
LCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1hjaGdBZGQ2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGc4IFVEOkc6OCwgVUQ6
Rzo4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGcxNiBV
RDpHOjE2LCBVRDpHOjE2CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0
b21pY1hjaGczMiBVRDpHOjMyLCBVRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCit4ODZfNjQ6IEF0b21pY1hjaGc2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBBZGRy
CisgICAgVG1wLCBJbmRleAorCithcm02NDogTG9hZExpbms4IFU6Rzo4LCBaRDpHOjgKKyAgICBB
ZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTggVTpHOjgsIFpE
Okc6OAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworIyBTdXBlciBjb25mdXNpbmcg
ZmFjdDogdGhpcyByZXR1cm5zIDAgdG8gbWVhbiBzdWNjZXNzLCAxIHRvIG1lYW4gZmFpbHVyZS4K
K2FybTY0OiBTdG9yZUNvbmQ4IFU6Rzo4LCBEOkc6OCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwg
VG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmRSZWw4IFU6Rzo4LCBE
Okc6OCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisK
K2FybTY0OiBMb2FkTGluazE2IFU6RzoxNiwgWkQ6RzoxNgorICAgIEFkZHIsIFRtcAorICAgIElu
ZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rQWNxMTYgVTpHOjE2LCBaRDpHOjE2CisgICAgQWRk
ciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kMTYgVTpHOjE2LCBEOkc6
MTYsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCith
cm02NDogU3RvcmVDb25kUmVsMTYgVTpHOjE2LCBEOkc6MTYsIEVaRDpHOjgKKyAgICBUbXAsIEFk
ZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmszMiBVOkc6MzIs
IFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlu
a0FjcTMyIFU6RzozMiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwor
YXJtNjQ6IFN0b3JlQ29uZDMyIFU6RzozMiwgRDpHOjMyLCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRy
LCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDMyIFU6Rzoz
MiwgRDpHOjMyLCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBU
bXAKKworYXJtNjQ6IExvYWRMaW5rNjQgVTpHOjY0LCBaRDpHOjY0CisgICAgQWRkciwgVG1wCisg
ICAgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmtBY3E2NCBVOkc6NjQsIFpEOkc6NjQKKyAg
ICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQ2NCBVOkc6NjQs
IEQ6Rzo2NCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1w
CisKK2FybTY0OiBTdG9yZUNvbmRSZWw2NCBVOkc6NjQsIEQ6Rzo2NCwgRVpEOkc6OAorICAgIFRt
cCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBEZXBlbmQzMiBVOkc6
MzIsIEQ6RzozMgorICAgIFRtcCwgVG1wCisKK2FybTY0OiBEZXBlbmQ2NCBVOkc6NjQsIEQ6Rzo2
NAorICAgIFRtcCwgVG1wCisKIENvbXBhcmUzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpH
OjMyCiAgICAgUmVsQ29uZCwgVG1wLCBUbXAsIFRtcAogICAgIFJlbENvbmQsIFRtcCwgSW1tLCBU
bXAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09y
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9w
dGltaXplQmxvY2tPcmRlci5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTE3Nyw2ICsxNzcsMTAgQEAgdm9pZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkK
ICAgICAgICAgY2FzZSBCcmFuY2hTdWI2NDoKICAgICAgICAgY2FzZSBCcmFuY2hOZWczMjoKICAg
ICAgICAgY2FzZSBCcmFuY2hOZWc2NDoKKyAgICAgICAgY2FzZSBCcmFuY2hBdG9taWNTdHJvbmdD
QVM4OgorICAgICAgICBjYXNlIEJyYW5jaEF0b21pY1N0cm9uZ0NBUzE2OgorICAgICAgICBjYXNl
IEJyYW5jaEF0b21pY1N0cm9uZ0NBUzMyOgorICAgICAgICBjYXNlIEJyYW5jaEF0b21pY1N0cm9u
Z0NBUzY0OgogICAgICAgICAgICAgaWYgKGNvZGUuZmluZE5leHRCbG9jayhibG9jaykgPT0gYmxv
Y2stPnN1Y2Nlc3NvckJsb2NrKDApICYmIGJyYW5jaC5hcmdzWzBdLmlzSW52ZXJ0aWJsZSgpKSB7
CiAgICAgICAgICAgICAgICAgc3RkOjpzd2FwKGJsb2NrLT5zdWNjZXNzb3IoMCksIGJsb2NrLT5z
dWNjZXNzb3IoMSkpOwogICAgICAgICAgICAgICAgIGJyYW5jaC5hcmdzWzBdID0gYnJhbmNoLmFy
Z3NbMF0uaW52ZXJ0ZWQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
UGFkSW50ZXJmZXJlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNiArNDgsNyBAQCB2b2lkIHBhZEludGVyZmVyZW5jZShDb2RlJiBjb2RlKQog
ICAgICAgICAgICAgICAgIFsmXSAoQXJnJiwgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7
CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6RWFybHlEZWY6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJs
eVpEZWY6CiAgICAgICAgICAgICAgICAgICAgICAgICBoYXNFYXJseURlZiA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6
OkxhdGVVc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZl
cnl0aGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1NSw2ICsxNTUsNyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZUNvbGRVc2U6CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpTY3JhdGNoOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlE
ZWY6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJseVpEZWY6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBjb2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoYmFu
aykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVn
KSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L29wY29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkK
QEAgLTE4Miw3ICsxODIsNyBAQCBkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCiBlbmQKIAogZGVmIGlz
Um9sZSh0b2tlbikKLSAgICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpfChaRCl8KFVaRCl8KFVB
KXwoUykpXFovCisgICAgdG9rZW4gPX4gL1xBKChVKXwoRCl8KFVEKXwoWkQpfChVWkQpfChVQSl8
KFMpfChFRCl8KEVaRCl8KExVKSlcWi8KIGVuZAogCiBkZWYgaXNHRih0b2tlbikKQEAgLTE5MCw3
ICsxOTAsNyBAQCBkZWYgaXNHRih0b2tlbikKIGVuZAogCiBkZWYgaXNLaW5kKHRva2VuKQotICAg
IHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQpfChB
ZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpKVxaLworICAgIHRv
a2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQpfChBZGRy
KXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlc
Wi8KIGVuZAogCiBkZWYgaXNBcmNoKHRva2VuKQpAQCAtMjY0LDcgKzI2NCw3IEBAIGNsYXNzIFBh
cnNlcgogCiAgICAgZGVmIGNvbnN1bWVLaW5kCiAgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmlu
ZwotICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1t
LCBCaXRJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgb3IgRG91Ymxl
Q29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0
ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFRtcCwgQWRkciwgSW5kZXgs
IFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1c0NvbmQpIikgdW5sZXNzIGlz
S2luZChyZXN1bHQpCiAgICAgICAgIGFkdmFuY2UKICAgICAgICAgcmVzdWx0CiAgICAgZW5kCkBA
IC02NTEsNiArNjUxLDEyIEBAIHdyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHJvbGUgPSAiVXNlQWRkciIKICAgICAgICAgICAgICAgICB3aGVuICJTIgogICAgICAg
ICAgICAgICAgICAgICByb2xlID0gIlNjcmF0Y2giCisgICAgICAgICAgICAgICAgd2hlbiAiRUQi
CisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiRWFybHlEZWYiCisgICAgICAgICAgICAgICAg
d2hlbiAiRVpEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIkVhcmx5WkRlZiIKKyAgICAg
ICAgICAgICAgICB3aGVuICJMVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJMYXRlVXNl
IgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAg
ICAgICAgICAgICBlbmQKQEAgLTgxOSw2ICs4MjUsNyBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRl
ZCIpIHsKICAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAgIHdo
ZW4gIlJlc0NvbmQiCiAgICAgICAgICAgICAgICAgd2hlbiAiRG91YmxlQ29uZCIKKyAgICAgICAg
ICAgICAgICB3aGVuICJTdGF0dXNDb25kIgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgcmFpc2UgIlVuZXhwZWN0ZWQga2luZDogI3traW5kLm5hbWV9IgogICAgICAg
ICAgICAgICAgIGVuZApAQCAtMTEwNSw2ICsxMTEyLDggQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0
ZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFz
UmVzdWx0Q29uZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiRG91YmxlQ29uZCIKICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNEb3VibGVDb25k
aXRpb24oKSIKKyAgICAgICAgICAgICAgICB3aGVuICJTdGF0dXNDb25kIgorICAgICAgICAgICAg
ICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1N0YXR1c0NvbmRpdGlvbigpIgog
ICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302949</attachid>
            <date>2017-02-28 10:48:03 -0800</date>
            <delta_ts>2017-02-28 11:47:27 -0800</delta_ts>
            <desc>just when I thought I was done with x86</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>206588</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMSBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OwogCQkwRjJENERERDE5ODMyRDM0MDA3RDRC
MTkgLyogRGVidWdnZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJENEREQjE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5j
cHAgKi87IH07CiAJCTBGMkQ0RERFMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJENEREQzE5
ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkQ0REU4MTk4MzJEQUMwMDdENEIxOSAvKiBU
b1RoaXNTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyRDRERTUxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5jcHAgKi87IH07
CkBAIC0yNzY0LDYgKzI3NjksMTEgQEAKIAkJMEYyQzYzQUMxRTYwQUUzQzAwQzEzODM5IC8qIEIz
QmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhbmsuaDsgcGF0aCA9
IGIzL0IzQmFuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNjNBRDFFNjBB
RTNDMDBDMTM4MzkgLyogQjNXaWR0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM1dpZHRoLmNwcDsgcGF0aCA9IGIzL0IzV2lkdGguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjJDNjNBRTFFNjBBRTNEMDBDMTM4MzkgLyogQjNXaWR0aC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dpZHRoLmg7IHBhdGggPSBiMy9CM1dp
ZHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0IzMUU2MzQzRTgwMEMx
MzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzQXRvbWljVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBdG9taWNWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBC
M0F0b21pY1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQXRvbWlj
VmFsdWUuaDsgcGF0aCA9IGIzL0IzQXRvbWljVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0
aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCOTFFNjM0NDA4MDBDMTM4MzkgLyog
QWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0FpckJsb2NrSW5z
ZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQkExRTYz
NDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWly
QmxvY2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDRE
REIxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVidWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkQ0RERDMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQ
cm9maWxlckxvZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTI5Miw2ICs1MzAyLDggQEAKIAkJCQkwRkVD
ODRCMzFCREFDRDg4MDA4MEZGNzQgLyogYWlyICovLAogCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovLAogCQkJCTBGRUM4NEI1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCAqLywKKwkJCQkwRjJDNjNCMzFFNjM0M0U4
MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5jcHAgKi8sCisJCQkJMEYyQzYzQjQxRTYzNDNFODAw
QzEzODM5IC8qIEIzQXRvbWljVmFsdWUuaCAqLywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4
MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJCQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNC
YW5rLmggKi8sCiAJCQkJMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5j
cHAgKi8sCkBAIC01MzU0LDYgKzUzNjYsNyBAQAogCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4NENFMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyog
QjNHZW5lcmF0ZS5oICovLAorCQkJCTBGMkM2M0I1MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0dlbmVy
aWNCbG9ja0luc2VydGlvblNldC5oICovLAogCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCAqLywKIAkJCQkwRkVDODVCRjFCRTE2N0EwMDA4
MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3BwICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3
NCAvKiBCM0hlYXBSYW5nZS5oICovLApAQCAtNTQ2OSw2ICs1NDgyLDggQEAKIAkJCQkwRjY0RUFG
MjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFD
REM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgw
MEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYz
NDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIx
QkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYx
ODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC03
MzU0LDggKzczNjksOCBAQAogCQkJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fz
c2VtYmxlck1JUFMuaCAqLywKIAkJCQlGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9B
c3NlbWJsZXJQcmludGVyLmNwcCAqLywKIAkJCQlGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyog
TWFjcm9Bc3NlbWJsZXJQcmludGVyLmggKi8sCi0JCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi8sCisJCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0
NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJQTdBNEFFMDcxNzk3M0IyNjAwNTYx
MkIxIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLywKIAkJCQk4NjAxNjFFMjBGM0E4
M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3
NzE4NUE4RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywK
QEAgLTc5NTYsNiArNzk3MSw3IEBACiAJCQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckluc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3RDcxRDlEQzQ0MjAwMUI5
ODI1IC8qIEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2M0JDMUU2MzQ0MEMwMEMx
MzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY4NEQ0
MzgxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJS
ZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQ3LDYgKzgwNjMsNyBAQAogCQkJCTQzNDIy
QTYzMUMxNThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIz
R2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUwRTFC
RjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
M0ZDRkMxQzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2QjhBRDkxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRlVGFpbHMuaCBpbiBIZWFk
ZXJzICovLApAQCAtODM2Niw2ICs4MzgzLDcgQEAKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3
MjggLyogREZHT1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEz
QjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJDNjNCNzFFNjM0M0VEMDBDMTM4MzkgLyogQjNBdG9taWNW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjM3OTgxQUU0NUNBNzAwRDQwMkVBIC8qIERG
R1BoYW50b21JbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVG
OTBBRjAwQzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFQjE5
RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBpbiBIZWFkZXJzICovLApAQCAtMTAy
NDgsNiArMTAyNjYsNyBAQAogCQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFs
aXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdF
OTVBRCAvKiBJbmplY3RlZFNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4
NUE2ODQ0MDBGM0M3Q0IgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGMkM2M0I2MUU2MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1OEUzNTkxMTg2MERFQ0YwMDFGMjRGRSAvKiBJbmplY3RlZFNjcmlwdEhv
c3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1Q0ExODVGOTYyNDAwN0U5NUFEIC8qIElu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTg0MEUyMDE4N0I3
Qjg2MDA4NDNCMTAgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0xMDI2Niw2ICsxMDI4NSw3IEBACiAJCQkJRTM1RTAzNUYxQjdBQjQzRTAwNzNBRDJBIC8qIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMy
NDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50
aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQzYzQkIxRTYzNDQwQTAwQzEzODM5
IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NTE2NUQy
MUJERjBCOTgwMDNCNzVDMSAvKiBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1OTNDRjgyMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0YxMDdFQzM3NjAwNDI3QTQ4IC8qIElu
dGVybmFsRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw2
ICszNSw3IEBACiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFw
aGljYWxseVJhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAj
aW5jbHVkZSA8d3RmL1dlYWtSYW5kb20uaD4KIApAQCAtODksNiArOTAsMjMgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gVGltZXNFaWdodDsKICAgICB9CiAgICAgCisgICAgZW51bSBTdGF0dXND
b25kaXRpb24geworICAgICAgICBTdWNjZXNzLAorICAgICAgICBGYWlsdXJlCisgICAgfTsKKyAg
ICAKKyAgICBzdGF0aWMgU3RhdHVzQ29uZGl0aW9uIGludmVydChTdGF0dXNDb25kaXRpb24gY29u
ZGl0aW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICAgICAgY2Fz
ZSBTdWNjZXNzOgorICAgICAgICAgICAgcmV0dXJuIEZhaWx1cmU7CisgICAgICAgIGNhc2UgRmFp
bHVyZToKKyAgICAgICAgICAgIHJldHVybiBTdWNjZXNzOworICAgICAgICB9CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBTdWNjZXNzOworICAg
IH0KKyAgICAKICAgICBzdHJ1Y3QgQmFzZUluZGV4OwogICAgIAogICAgIC8vIEFkZHJlc3M6CkBA
IC0xMTA4LDMgKzExMjYsMjYgQEAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBl
LCBNYQogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwor
CisjaWYgRU5BQkxFKEFTU0VNQkxFUikKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDxj
bGFzcyBBc3NlbWJsZXJUeXBlLCBjbGFzcyBNYWNyb0Fzc2VtYmxlclR5cGU+Cit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgdHlwZW5hbWUgSlNDOjpBYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyPEFzc2VtYmxlclR5cGUsIE1hY3JvQXNzZW1ibGVyVHlwZT46OlN0YXR1c0NvbmRpdGlv
biBjb25kaXRpb24pCit7CisgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICBjYXNlIEpTQzo6
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlLCBNYWNyb0Fzc2VtYmxlclR5cGU+
OjpTdWNjZXNzOgorICAgICAgICBvdXQucHJpbnQoIlN1Y2Nlc3MiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGUsIE1h
Y3JvQXNzZW1ibGVyVHlwZT46OkZhaWx1cmU6CisgICAgICAgIG91dC5wcmludCgiRmFpbHVyZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxF
UikKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTEsMTYgKzI1MSw3MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1i
bGVyLmFuZGxfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2
b2lkIGFuZDMyKFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmFuZGxfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0Lmlu
ZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDE2KFJlZ2lzdGVySUQgc3Jj
LCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X3JtKHNyYywg
ZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQxNihSZWdpc3Rl
cklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmR3
X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7
CisgICAgfQorCisgICAgdm9pZCBhbmQ4KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ4KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGJfcm0oc3JjLCBkZXN0Lm9mZnNl
dCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lk
IGFuZDMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fz
c2VtYmxlci5hbmRsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAg
ICB2b2lkIGFuZDMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFuZGxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwg
c3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIGFuZDMyKFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfaW0o
aW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAg
IHZvaWQgYW5kMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFuZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFuZHdfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UpOworICAgIH0KKworICAgIHZvaWQgYW5kMTYoVHJ1c3RlZEltbTMyIGltbSwg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X2ltKGlt
bS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBh
ZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDgoVHJ1c3RlZEltbTMyIGltbSwg
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kYl9pbShpbW0u
bV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmQ4KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYW5kYl9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9p
ZCBhbmQzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpAQCAtNjU0LDE2ICs3MDksNzEgQEAgcHVi
bGljOgogICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjE2KFRydXN0ZWRJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1Yndf
aW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKwor
ICAgIHZvaWQgc3ViOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFRydXN0ZWRJbW0zMiBpbW0s
IEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9pbShp
bW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwg
YWRkcmVzcy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBzdWIxNihUcnVzdGVkSW1tMzIgaW1t
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YndfaW0o
c3RhdGljX2Nhc3Q8aW50MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lk
IHN1YjgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5zdWJiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBh
ZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxl
KTsKKyAgICB9CisKICAgICB2b2lkIHN1YjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNl
LCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfbXIoc3JjLm9mZnNldCwg
c3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lk
IHN1YjMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fz
c2VtYmxlci5zdWJsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisg
ICAgdm9pZCBzdWIxNihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuc3Vid19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAg
IH0KKworICAgIHZvaWQgc3ViOChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc3ViYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2Up
OworICAgIH0KKworICAgIHZvaWQgc3ViMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBk
ZXN0LmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZv
aWQgc3ViMTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuc3Vid19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGFkZHJlc3Mu
aW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgc3ViOChSZWdpc3RlcklE
IHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX3Jt
KHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2Fs
ZSk7CisgICAgfQorCiAgICAgdm9pZCB4b3IzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
ZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9ycihzcmMsIGRlc3QpOwpAQCAt
Njc3LDYgKzc4Nyw1MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JsX2lt
KGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lk
IHhvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAg
aWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm90bF9tKGRl
c3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JsX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2
b2lkIHhvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAg
IGltbS5tX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50MTZfdD4oaW1tLm1fdmFsdWUpOworICAgICAg
ICBpZiAoaW1tLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3R3X20o
ZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnhvcndfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAg
IH0KKworICAgIHZvaWQgeG9yMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisg
ICAgeworICAgICAgICBpbW0ubV92YWx1ZSA9IHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3Zh
bHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2Nh
bGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3J3X2ltKGltbS5t
X3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsK
KyAgICB9CisKKyAgICB2b2lkIHhvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBkZXN0KQor
ICAgIHsKKyAgICAgICAgaW1tLm1fdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3Zh
bHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubm90Yl9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci54b3JiX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVz
dC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUlu
ZGV4IGRlc3QpCisgICAgeworICAgICAgICBpbW0ubV92YWx1ZSA9IHN0YXRpY19jYXN0PGludDhf
dD4oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gLTEpCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5ub3RiX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRl
eCwgZGVzdC5zY2FsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhv
cmJfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRl
c3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgeG9yMzIoVHJ1c3RlZEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQpAQCAt
NjkwLDExICs4NDQsNDEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci54b3JsX3JtKHNy
YywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCB4b3IzMihSZWdp
c3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54
b3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2Fs
ZSk7CisgICAgfQorCisgICAgdm9pZCB4b3IxNihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yd19ybShzcmMsIGRlc3Qub2Zmc2V0LCBk
ZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9yMTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJ
bmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yd19ybShzcmMsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAg
IHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIueG9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0K
KworICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci54b3JiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwg
ZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCB4b3IzMihBZGRyZXNz
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9t
cihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgeG9y
MzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIueG9ybF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUs
IGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIHhvcjMyKFJlZ2lzdGVySUQgb3AxLCBSZWdp
c3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBv
cDIpCkBAIC0yNzQzLDE4NyArMjkyNyw4ODIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9pbSgwLCAwLCBYODZSZWdpc3RlcnM6
OmVzcCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTOChTdGF0dXNDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdW
YWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAg
IGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgcmVzdWx0LCBbJl0geyBt
X2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSk7IH0pOworICAgIH0KIAotICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQg
cHJldmVudHMgbW90aW9uIG9mIG5vcm1hbCBzdG9yZXMuIFNvLCBpdCdzIGEgbm8tb3Agb24geDg2
LgotICAgIHZvaWQgc3RvcmVGZW5jZSgpCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM4KFN0YXR1
c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklE
IG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgewor
ICAgICAgICBhdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwg
WyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9CiAK
LSAgICAvLyBXZSB0YWtlIHRoaXMgdG8gbWVhbiB0aGF0IGl0IHByZXZlbnRzIG1vdGlvbiBvZiBu
b3JtYWwgbG9hZHMuIFNvLCBpdCdzIGEgbm8tb3Agb24geDg2LgotICAgIHZvaWQgbG9hZEZlbmNl
KCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdp
c3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFk
ZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FT
KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhj
aGd3X3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGlu
c3RydWN0aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHZvaWQg
YXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0
ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdp
c3RlcklEIHJlc3VsdCkKICAgICB7Ci0gICAgICAgIFg4NkFzc2VtYmxlcjo6cmVwbGFjZVdpdGhK
dW1wKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGVzdGluYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3Rl
ZEFuZFJlc3VsdCwgcmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1
ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5z
Y2FsZSk7IH0pOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG1heEp1bXBSZXBs
YWNlbWVudFNpemUoKQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVMzMihTdGF0dXNDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1
ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBYODZBc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKTsKKyAgICAgICAgYXRv
bWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNz
ZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
KTsgfSk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBwYXRjaGFibGVKdW1wU2l6ZSgp
CisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFk
ZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIFg4NkFzc2Vt
Ymxlcjo6cGF0Y2hhYmxlSnVtcFNpemUoKTsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQs
IGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdsX3Jt
KG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBh
ZGRyZXNzLnNjYWxlKTsgfSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGbG9h
dGluZ1BvaW50Um91bmRpbmcoKQorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTOChSZWdpc3RlcklE
IGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3Mp
CiAgICAgewotICAgICAgICBpZiAoc19zc2U0XzFDaGVja1N0YXRlID09IENQVUlEQ2hlY2tTdGF0
ZTo6Tm90Q2hlY2tlZCkKLSAgICAgICAgICAgIHVwZGF0ZUVheDFFY3hGbGFncygpOwotICAgICAg
ICByZXR1cm4gc19zc2U0XzFDaGVja1N0YXRlID09IENQVUlEQ2hlY2tTdGF0ZTo6U2V0OworICAg
ICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVy
LmNtcHhjaGdiX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7
CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNBVlgoKQorICAgIHZvaWQgYXRvbWlj
U3Ryb25nQ0FTOChSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1Zh
bHVlLCBCYXNlSW5kZXggYWRkcmVzcykKICAgICB7Ci0gICAgICAgIC8vIEFWWCBzdGlsbCBjYXVz
ZXMgbXlzdGVyaW91cyByZWdyZXNzaW9ucyBhbmQgdGhvc2UgcmVncmVzc2lvbnMgY2FuIGJlIG1h
c3NpdmUuCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4
cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwg
YWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2Fs
ZSk7IH0pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUVheDFFY3hGbGFncygpCisg
ICAgdm9pZCBhdG9taWNTdHJvbmdDQVMxNihSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBS
ZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewotICAgICAgICBpbnQg
ZmxhZ3MgPSAwOwotI2lmIENPTVBJTEVSKE1TVkMpCi0gICAgICAgIGludCBjcHVJbmZvWzRdOwot
ICAgICAgICBfX2NwdWlkKGNwdUluZm8sIDB4MSk7Ci0gICAgICAgIGZsYWdzID0gY3B1SW5mb1sy
XTsKLSNlbGlmIENPTVBJTEVSKEdDQ19PUl9DTEFORykKLSNpZiBDUFUoWDg2XzY0KQotICAgICAg
ICBhc20gKAotICAgICAgICAgICAgIm1vdmwgJDB4MSwgJSVlYXg7IgotICAgICAgICAgICAgImNw
dWlkOyIKLSAgICAgICAgICAgICJtb3ZsICUlZWN4LCAlMDsiCi0gICAgICAgICAgICA6ICI9ZyIg
KGZsYWdzKQotICAgICAgICAgICAgOgotICAgICAgICAgICAgOiAiJWVheCIsICIlZWJ4IiwgIiVl
Y3giLCAiJWVkeCIKLSAgICAgICAgICAgICk7Ci0jZWxzZQotICAgICAgICBhc20gKAotICAgICAg
ICAgICAgIm1vdmwgJDB4MSwgJSVlYXg7IgotICAgICAgICAgICAgInB1c2hsICUlZWJ4OyIKLSAg
ICAgICAgICAgICJjcHVpZDsiCi0gICAgICAgICAgICAicG9wbCAlJWVieDsiCi0gICAgICAgICAg
ICAibW92bCAlJWVjeCwgJTA7IgotICAgICAgICAgICAgOiAiPWciIChmbGFncykKLSAgICAgICAg
ICAgIDoKLSAgICAgICAgICAgIDogIiVlYXgiLCAiJWVjeCIsICIlZWR4IgotICAgICAgICAgICAg
KTsKLSNlbmRpZgotI2VuZGlmIC8vIENPTVBJTEVSKEdDQ19PUl9DTEFORykKLSAgICAgICAgc19z
c2U0XzFDaGVja1N0YXRlID0gKGZsYWdzICYgKDEgPDwgMTkpKSA/IENQVUlEQ2hlY2tTdGF0ZTo6
U2V0IDogQ1BVSURDaGVja1N0YXRlOjpDbGVhcjsKLSAgICAgICAgc19hdnhDaGVja1N0YXRlID0g
KGZsYWdzICYgKDEgPDwgMjgpKSA/IENQVUlEQ2hlY2tTdGF0ZTo6U2V0IDogQ1BVSURDaGVja1N0
YXRlOjpDbGVhcjsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBb
Jl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSk7IH0pOwogICAgIH0KIAotI2lmIEVOQUJMRShNQVNNX1BST0JFKQotICAgIHZv
aWQgcHJvYmUoUHJvYmVGdW5jdGlvbiwgdm9pZCogYXJnMSwgdm9pZCogYXJnMik7Ci0jZW5kaWYg
Ly8gRU5BQkxFKE1BU01fUFJPQkUpCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVMxNihSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwg
WyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CiAK
LXByb3RlY3RlZDoKLSAgICBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbiB4ODZDb25kaXRpb24oUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kKQorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMzIoUmVnaXN0
ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRy
ZXNzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFg4NkFzc2VtYmxlcjo6Q29u
ZGl0aW9uPihjb25kKTsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0
LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSk7IH0pOwogICAgIH0KIAotICAgIFg4NkFzc2VtYmxlcjo6Q29uZGl0aW9u
IHg4NkNvbmRpdGlvbihSZXN1bHRDb25kaXRpb24gY29uZCkKKyAgICB2b2lkIGF0b21pY1N0cm9u
Z0NBUzMyKFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUs
IEJhc2VJbmRleCBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFg4
NkFzc2VtYmxlcjo6Q29uZGl0aW9uPihjb25kKTsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4
cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwg
YWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2Fs
ZSk7IH0pOwogICAgIH0KIAotICAgIHZvaWQgc2V0MzIoWDg2QXNzZW1ibGVyOjpDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTOChT
dGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0
ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKLSNpZiBDUFUoWDg2KQotICAg
ICAgICAvLyBPbiAzMi1iaXQgeDg2IHdlIGNhbiBvbmx5IHNldCB0aGUgZmlyc3QgNCByZWdpc3Rl
cnM7Ci0gICAgICAgIC8vIGVzcC4uZWRpIGFyZSBtYXBwZWQgdG8gdGhlICdoJyByZWdpc3RlcnMh
Ci0gICAgICAgIGlmIChkZXN0ID49IDQpIHsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhjaGds
X3JyKGRlc3QsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNl
dENDX3IoY29uZCwgWDg2UmVnaXN0ZXJzOjplYXgpOwotICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bW92emJsX3JyKFg4NlJlZ2lzdGVyczo6ZWF4LCBYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgICAg
ICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ycihkZXN0LCBYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBtX2Fzc2VtYmxlci5z
ZXRDQ19yKGNvbmQsIGRlc3QpOwotICAgICAgICBtX2Fzc2VtYmxlci5tb3Z6YmxfcnIoZGVzdCwg
ZGVzdCk7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0
ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1ZhbHVlLCBhZGRy
ZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CiAgICAgfQogCi0gICAgdm9pZCBjbW92KFg4
NkFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNl
SW5kZXggYWRkcmVzcykKICAgICB7Ci0jaWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgbV9hc3NlbWJs
ZXIuY21vdnFfcnIoY29uZCwgc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgIG1fYXNzZW1ibGVy
LmNtb3ZsX3JyKGNvbmQsIHNyYywgZGVzdCk7Ci0jZW5kaWYKKyAgICAgICAgcmV0dXJuIGJyYW5j
aEF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJs
ZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9v
bCBzdXBwb3J0c0xaQ05UKCkKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzE2KFN0YXR1
c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklE
IG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewotICAgICAgICBpZiAoc19semNudENo
ZWNrU3RhdGUgPT0gQ1BVSURDaGVja1N0YXRlOjpOb3RDaGVja2VkKSB7Ci0gICAgICAgICAgICBp
bnQgZmxhZ3MgPSAwOwotI2lmIENPTVBJTEVSKE1TVkMpCi0gICAgICAgICAgICBpbnQgY3B1SW5m
b1s0XTsKLSAgICAgICAgICAgIF9fY3B1aWQoY3B1SW5mbywgMHg4MDAwMDAwMSk7Ci0gICAgICAg
ICAgICBmbGFncyA9IGNwdUluZm9bMl07Ci0jZWxpZiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCi0j
aWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgICAgIGFzbSAoCi0gICAgICAgICAgICAgICAgIm1vdmwg
JDB4ODAwMDAwMDEsICUlZWF4OyIKLSAgICAgICAgICAgICAgICAiY3B1aWQ7IgotICAgICAgICAg
ICAgICAgICJtb3ZsICUlZWN4LCAlMDsiCi0gICAgICAgICAgICAgICAgOiAiPWciIChmbGFncykK
LSAgICAgICAgICAgICAgICA6Ci0gICAgICAgICAgICAgICAgOiAiJWVheCIsICIlZWJ4IiwgIiVl
Y3giLCAiJWVkeCIKLSAgICAgICAgICAgICAgICApOwotI2Vsc2UKLSAgICAgICAgICAgIGFzbSAo
Ci0gICAgICAgICAgICAgICAgIm1vdmwgJDB4ODAwMDAwMDEsICUlZWF4OyIKLSAgICAgICAgICAg
ICAgICAicHVzaGwgJSVlYng7IgotICAgICAgICAgICAgICAgICJjcHVpZDsiCi0gICAgICAgICAg
ICAgICAgInBvcGwgJSVlYng7IgotICAgICAgICAgICAgICAgICJtb3ZsICUlZWN4LCAlMDsiCi0g
ICAgICAgICAgICAgICAgOiAiPWciIChmbGFncykKLSAgICAgICAgICAgICAgICA6Ci0gICAgICAg
ICAgICAgICAgOiAiJWVheCIsICIlZWN4IiwgIiVlZHgiCi0gICAgICAgICAgICAgICAgKTsKLSNl
bmRpZgotI2VuZGlmIC8vIENPTVBJTEVSKEdDQ19PUl9DTEFORykKLSAgICAgICAgICAgIHNfbHpj
bnRDaGVja1N0YXRlID0gKGZsYWdzICYgMHgyMCkgPyBDUFVJRENoZWNrU3RhdGU6OlNldCA6IENQ
VUlEQ2hlY2tTdGF0ZTo6Q2xlYXI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNfbHpjbnRD
aGVja1N0YXRlID09IENQVUlEQ2hlY2tTdGF0ZTo6U2V0OworICAgICAgICByZXR1cm4gYnJhbmNo
QXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxl
ci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0p
OwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQk1JMSgpCisgICAgSnVtcCBicmFu
Y2hBdG9taWNTdHJvbmdDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBl
Y3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCiAg
ICAgewotICAgICAgICBpZiAoc19ibWkxQ2hlY2tTdGF0ZSA9PSBDUFVJRENoZWNrU3RhdGU6Ok5v
dENoZWNrZWQpIHsKLSAgICAgICAgICAgIGludCBmbGFncyA9IDA7Ci0jaWYgQ09NUElMRVIoTVNW
QykKLSAgICAgICAgICAgIGludCBjcHVJbmZvWzRdOwotICAgICAgICAgICAgX19jcHVpZChjcHVJ
bmZvLCAweDgwMDAwMDAxKTsKLSAgICAgICAgICAgIGZsYWdzID0gY3B1SW5mb1syXTsKLSNlbGlm
IENPTVBJTEVSKEdDQ19PUl9DTEFORykKLSAgICAgICAgICAgIGFzbSAoCi0gICAgICAgICAgICAg
ICAgICJtb3ZsICQweDcsICUlZWF4OyIKLSAgICAgICAgICAgICAgICAgIm1vdmwgJDB4MCwgJSVl
Y3g7IgotICAgICAgICAgICAgICAgICAiY3B1aWQ7IgotICAgICAgICAgICAgICAgICAibW92bCAl
JWVieCwgJTA7IgotICAgICAgICAgICAgICAgICA6ICI9ZyIgKGZsYWdzKQotICAgICAgICAgICAg
ICAgICA6Ci0gICAgICAgICAgICAgICAgIDogIiVlYXgiLCAiJWVieCIsICIlZWN4IiwgIiVlZHgi
Ci0gICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLy8gQ09NUElMRVIoR0NDX09SX0NMQU5HKQot
ICAgICAgICAgICAgc3RhdGljIGludCBCTUkxRmVhdHVyZUJpdCA9IDEgPDwgMzsKLSAgICAgICAg
ICAgIHNfYm1pMUNoZWNrU3RhdGUgPSAoZmxhZ3MgJiBCTUkxRmVhdHVyZUJpdCkgPyBDUFVJRENo
ZWNrU3RhdGU6OlNldCA6IENQVUlEQ2hlY2tTdGF0ZTo6Q2xlYXI7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHNfYm1pMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVja1N0YXRlOjpTZXQ7CisgICAg
ICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQs
IFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7CiAgICAgfQog
Ci0gICAgdGVtcGxhdGU8aW50IHNpemVPZlJlZ2lzdGVyPgotICAgIHZvaWQgY3R6QWZ0ZXJCc2Yo
UmVnaXN0ZXJJRCBkc3QpCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVMzMihTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgSnVtcCBzcmNJc05vblpl
cm8gPSBtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKE5vblplcm8pKTsKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoc2l6ZU9mUmVnaXN0ZXIpLCBkc3QpOwotICAgICAgICBzcmNJc05vblpl
cm8ubGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25k
LCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2xfcm0obmV3VmFs
dWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaEF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwgZXhw
ZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1ZhbHVlLCBh
ZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxl
KTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FTOChTdGF0dXNDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwg
QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21p
Y1N0cm9uZ0NBUzgoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCBy
ZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgYXRvbWljV2Vha0NBUzgoU3RhdHVzQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUs
IEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0
b21pY1N0cm9uZ0NBUzgoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNz
LCByZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgYXRvbWljV2Vha0NBUzE2KFN0YXR1c0NvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1Zh
bHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAg
YXRvbWljU3Ryb25nQ0FTMTYoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRy
ZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgYXRvbWljV2Vha0NBUzE2KFN0YXR1c0Nv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5l
d1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAg
ICAgICBhdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUs
IGFkZHJlc3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FTMzIoU3Rh
dHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVy
SUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgewor
ICAgICAgICBhdG9taWNTdHJvbmdDQVMzMihjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFs
dWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FTMzIo
U3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAg
ICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzMyKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBu
ZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21p
Y1dlYWtDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVz
dWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTOChjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwg
bmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljV2Vha0NB
UzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJl
Z2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzgoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1Zh
bHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVMxNihT
dGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0
ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaEF0b21pY1N0cm9uZ0NBUzE2KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwg
YWRkcmVzcyk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FTMTYoU3RhdHVz
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQg
bmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aEF0b21pY1N0cm9uZ0NBUzE2KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRk
cmVzcyk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FTMzIoU3RhdHVzQ29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3
VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9t
aWNTdHJvbmdDQVMzMihjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3Mp
OworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVl
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNT
dHJvbmdDQVMzMihjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBh
ZGQ4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkOChUcnVz
dGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY0FkZDgoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChyZWcsIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBhZGQ4KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMTYo
VHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhZGQxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY0FkZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQxNihpbW0s
IGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDE2KFJlZ2lzdGVySUQg
cmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIGFkZDE2KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRv
bWljQWRkMTYoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQxNihyZWcsIGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRk
MzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQzMihUcnVz
dGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgYWRkMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNBZGQzMihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQzMihyZWcsIGFkZHJl
c3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDMyKFJlZ2lzdGVySUQgcmVnLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgYWRkMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNT
dWI4KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY1N1YjgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjgoaW1t
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWI4KFJlZ2lzdGVySUQg
cmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIHN1YjgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNTdWI4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViOChyZWcsIGFkZHJlc3MpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViMTYo
aW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWIxNihUcnVzdGVk
SW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvY2soKTsKKyAgICAgICAgc3ViMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNTdWIxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWIxNihyZWcsIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjE2KFJlZ2lzdGVySUQgcmVnLCBCYXNl
SW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAg
ICAgc3ViMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWIz
MihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjMyKGltbSwgYWRkcmVzcyk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljU3ViMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjMyKGlt
bSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMzIoUmVnaXN0ZXJJ
RCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgc3ViMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNTdWIzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjMyKHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFu
ZDgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQ4KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBhbmQ4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljQW5kOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ4KHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kOChSZWdpc3RlcklEIHJlZywgQmFzZUlu
ZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IGFuZDgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQxNihU
cnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIGFuZDE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQW5kMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDE2KGltbSwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMTYoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgYW5kMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNBbmQxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDE2KHJlZywgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQz
MihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDMyKFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBhbmQzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY0FuZDMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDMyKHJlZywgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMzIoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBhbmQzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09y
OChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY09yOChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I4KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I4KFJlZ2lzdGVySUQgcmVnLCBB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIG9yOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yOChS
ZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIG9yOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY09yMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjE2KGltbSwgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3IxNihUcnVzdGVkSW1tMzIgaW1tLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgb3IxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09y
MTYoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3IxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY09yMTYoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjE2KHJlZywgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3IzMihUcnVzdGVkSW1tMzIgaW1t
LCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIG9yMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNP
cjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjMyKGltbSwgYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljT3IzMihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjMyKHJlZywg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3IzMihSZWdpc3RlcklEIHJl
ZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIG9yMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNYb3I4KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yOChpbW0sIGFkZHJlc3MpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjgo
aW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3I4KFJlZ2lzdGVy
SUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIHhvcjgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNYb3I4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yOChyZWcsIGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9y
MTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3IxNihUcnVz
dGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgeG9yMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNYb3IxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3IxNihyZWcsIGFkZHJl
c3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjE2KFJlZ2lzdGVySUQgcmVnLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgeG9yMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNY
b3IzMihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjMyKGltbSwgYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljWG9yMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjMy
KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMzIoUmVnaXN0
ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgeG9yMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNYb3IzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjMyKHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnOChBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzgoYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnOChCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnOChhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWcxNihBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzE2KGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzE2KEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBuZWcxNihhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWczMihBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzMyKGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzMyKEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBuZWczMihhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3Q4KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90OChhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNOb3Q4KEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3Q4KGFkZHJlc3MpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGF0b21pY05vdDE2KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90MTYoYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljTm90MTYoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDE2KGFkZHJlc3MpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGF0b21pY05vdDMyKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90MzIoYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljTm90MzIoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDMyKGFkZHJlc3MpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGdBZGQ4KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnhhZGRiX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZ0FkZDgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRl
eCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBt
X2Fzc2VtYmxlci54YWRkYl9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y1hjaGdBZGQxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkd19ybShyZWcs
IGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1hjaGdBZGQxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhhZGR3X3Jt
KHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZ0FkZDMyKFJlZ2lzdGVy
SUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhhZGRsX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZ0FkZDMyKFJlZ2lz
dGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGxfcm0ocmVnLCBhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNYY2hnOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxl
ci54YWRkYl9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY1hjaGc4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIueGNoZ2Jfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnMTYo
UmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3dfcm0ocmVnLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnMTYo
UmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnd19ybShyZWcsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGczMihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fz
c2VtYmxlci54Y2hnbF9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGczMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLnhjaGdsX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIC8vIFdlIHRha2Ug
dGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVudHMgbW90aW9uIG9mIG5vcm1hbCBzdG9yZXMuIFNv
LCBpdCdzIGEgbm8tb3Agb24geDg2LgorICAgIHZvaWQgc3RvcmVGZW5jZSgpCisgICAgeworICAg
IH0KKworICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVudHMgbW90aW9u
IG9mIG5vcm1hbCBsb2Fkcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4ODYuCisgICAgdm9pZCBsb2Fk
RmVuY2UoKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAo
Q29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVz
dGluYXRpb24pCisgICAgeworICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChp
bnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG1heEp1bXBS
ZXBsYWNlbWVudFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFg4NkFzc2VtYmxlcjo6bWF4
SnVtcFJlcGxhY2VtZW50U2l6ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3QgcGF0
Y2hhYmxlSnVtcFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFg4NkFzc2VtYmxlcjo6cGF0
Y2hhYmxlSnVtcFNpemUoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0
aW5nUG9pbnRSb3VuZGluZygpCisgICAgeworICAgICAgICBpZiAoc19zc2U0XzFDaGVja1N0YXRl
ID09IENQVUlEQ2hlY2tTdGF0ZTo6Tm90Q2hlY2tlZCkKKyAgICAgICAgICAgIHVwZGF0ZUVheDFF
Y3hGbGFncygpOworICAgICAgICByZXR1cm4gc19zc2U0XzFDaGVja1N0YXRlID09IENQVUlEQ2hl
Y2tTdGF0ZTo6U2V0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQVZYKCkKKyAg
ICB7CisgICAgICAgIC8vIEFWWCBzdGlsbCBjYXVzZXMgbXlzdGVyaW91cyByZWdyZXNzaW9ucyBh
bmQgdGhvc2UgcmVncmVzc2lvbnMgY2FuIGJlIG1hc3NpdmUuCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVFYXgxRWN4RmxhZ3MoKQorICAgIHsK
KyAgICAgICAgaW50IGZsYWdzID0gMDsKKyNpZiBDT01QSUxFUihNU1ZDKQorICAgICAgICBpbnQg
Y3B1SW5mb1s0XTsKKyAgICAgICAgX19jcHVpZChjcHVJbmZvLCAweDEpOworICAgICAgICBmbGFn
cyA9IGNwdUluZm9bMl07CisjZWxpZiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCisjaWYgQ1BVKFg4
Nl82NCkKKyAgICAgICAgYXNtICgKKyAgICAgICAgICAgICJtb3ZsICQweDEsICUlZWF4OyIKKyAg
ICAgICAgICAgICJjcHVpZDsiCisgICAgICAgICAgICAibW92bCAlJWVjeCwgJTA7IgorICAgICAg
ICAgICAgOiAiPWciIChmbGFncykKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgIDogIiVlYXgi
LCAiJWVieCIsICIlZWN4IiwgIiVlZHgiCisgICAgICAgICAgICApOworI2Vsc2UKKyAgICAgICAg
YXNtICgKKyAgICAgICAgICAgICJtb3ZsICQweDEsICUlZWF4OyIKKyAgICAgICAgICAgICJwdXNo
bCAlJWVieDsiCisgICAgICAgICAgICAiY3B1aWQ7IgorICAgICAgICAgICAgInBvcGwgJSVlYng7
IgorICAgICAgICAgICAgIm1vdmwgJSVlY3gsICUwOyIKKyAgICAgICAgICAgIDogIj1nIiAoZmxh
Z3MpCisgICAgICAgICAgICA6CisgICAgICAgICAgICA6ICIlZWF4IiwgIiVlY3giLCAiJWVkeCIK
KyAgICAgICAgICAgICk7CisjZW5kaWYKKyNlbmRpZiAvLyBDT01QSUxFUihHQ0NfT1JfQ0xBTkcp
CisgICAgICAgIHNfc3NlNF8xQ2hlY2tTdGF0ZSA9IChmbGFncyAmICgxIDw8IDE5KSkgPyBDUFVJ
RENoZWNrU3RhdGU6OlNldCA6IENQVUlEQ2hlY2tTdGF0ZTo6Q2xlYXI7CisgICAgICAgIHNfYXZ4
Q2hlY2tTdGF0ZSA9IChmbGFncyAmICgxIDw8IDI4KSkgPyBDUFVJRENoZWNrU3RhdGU6OlNldCA6
IENQVUlEQ2hlY2tTdGF0ZTo6Q2xlYXI7CisgICAgfQorCisjaWYgRU5BQkxFKE1BU01fUFJPQkUp
CisgICAgdm9pZCBwcm9iZShQcm9iZUZ1bmN0aW9uLCB2b2lkKiBhcmcxLCB2b2lkKiBhcmcyKTsK
KyNlbmRpZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKKworcHJvdGVjdGVkOgorICAgIFg4NkFzc2Vt
Ymxlcjo6Q29uZGl0aW9uIHg4NkNvbmRpdGlvbihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8WDg2QXNzZW1ibGVyOjpDb25kaXRpb24+
KGNvbmQpOworICAgIH0KKworICAgIFg4NkFzc2VtYmxlcjo6Q29uZGl0aW9uIHg4NkNvbmRpdGlv
bihSZXN1bHRDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxYODZBc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CisgICAgfQorCisgICAgWDg2QXNzZW1i
bGVyOjpDb25kaXRpb24geDg2Q29uZGl0aW9uKFN0YXR1c0NvbmRpdGlvbiBjb25kKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChjb25kKSB7CisgICAgICAgIGNhc2UgU3VjY2VzczoKKyAgICAgICAg
ICAgIHJldHVybiBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbkU7CisgICAgICAgIGNhc2UgRmFpbHVy
ZToKKyAgICAgICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbk5FOworICAgICAg
ICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbkU7CisgICAgfQorCisgICAgdm9pZCBzZXQzMihYODZB
c3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworI2lmIENQ
VShYODYpCisgICAgICAgIC8vIE9uIDMyLWJpdCB4ODYgd2UgY2FuIG9ubHkgc2V0IHRoZSBmaXJz
dCA0IHJlZ2lzdGVyczsKKyAgICAgICAgLy8gZXNwLi5lZGkgYXJlIG1hcHBlZCB0byB0aGUgJ2gn
IHJlZ2lzdGVycyEKKyAgICAgICAgaWYgKGRlc3QgPj0gNCkgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIueGNoZ2xfcnIoZGVzdCwgWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc2V0Q0Nfcihjb25kLCBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5tb3Z6YmxfcnIoWDg2UmVnaXN0ZXJzOjplYXgsIFg4NlJlZ2lzdGVyczo6ZWF4
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdsX3JyKGRlc3QsIFg4NlJlZ2lzdGVyczo6
ZWF4KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIG1f
YXNzZW1ibGVyLnNldENDX3IoY29uZCwgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdnpi
bF9ycihkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGNtb3YoWDg2QXNzZW1ibGVyOjpD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisj
aWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgbV9hc3NlbWJsZXIuY21vdnFfcnIoY29uZCwgc3JjLCBk
ZXN0KTsKKyNlbHNlCisgICAgICAgIG1fYXNzZW1ibGVyLmNtb3ZsX3JyKGNvbmQsIHNyYywgZGVz
dCk7CisjZW5kaWYKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0xaQ05UKCkKKyAg
ICB7CisgICAgICAgIGlmIChzX2x6Y250Q2hlY2tTdGF0ZSA9PSBDUFVJRENoZWNrU3RhdGU6Ok5v
dENoZWNrZWQpIHsKKyAgICAgICAgICAgIGludCBmbGFncyA9IDA7CisjaWYgQ09NUElMRVIoTVNW
QykKKyAgICAgICAgICAgIGludCBjcHVJbmZvWzRdOworICAgICAgICAgICAgX19jcHVpZChjcHVJ
bmZvLCAweDgwMDAwMDAxKTsKKyAgICAgICAgICAgIGZsYWdzID0gY3B1SW5mb1syXTsKKyNlbGlm
IENPTVBJTEVSKEdDQ19PUl9DTEFORykKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICAgICAgYXNt
ICgKKyAgICAgICAgICAgICAgICAibW92bCAkMHg4MDAwMDAwMSwgJSVlYXg7IgorICAgICAgICAg
ICAgICAgICJjcHVpZDsiCisgICAgICAgICAgICAgICAgIm1vdmwgJSVlY3gsICUwOyIKKyAgICAg
ICAgICAgICAgICA6ICI9ZyIgKGZsYWdzKQorICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAg
ICAgICA6ICIlZWF4IiwgIiVlYngiLCAiJWVjeCIsICIlZWR4IgorICAgICAgICAgICAgICAgICk7
CisjZWxzZQorICAgICAgICAgICAgYXNtICgKKyAgICAgICAgICAgICAgICAibW92bCAkMHg4MDAw
MDAwMSwgJSVlYXg7IgorICAgICAgICAgICAgICAgICJwdXNobCAlJWVieDsiCisgICAgICAgICAg
ICAgICAgImNwdWlkOyIKKyAgICAgICAgICAgICAgICAicG9wbCAlJWVieDsiCisgICAgICAgICAg
ICAgICAgIm1vdmwgJSVlY3gsICUwOyIKKyAgICAgICAgICAgICAgICA6ICI9ZyIgKGZsYWdzKQor
ICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICA6ICIlZWF4IiwgIiVlY3giLCAiJWVk
eCIKKyAgICAgICAgICAgICAgICApOworI2VuZGlmCisjZW5kaWYgLy8gQ09NUElMRVIoR0NDX09S
X0NMQU5HKQorICAgICAgICAgICAgc19semNudENoZWNrU3RhdGUgPSAoZmxhZ3MgJiAweDIwKSA/
IENQVUlEQ2hlY2tTdGF0ZTo6U2V0IDogQ1BVSURDaGVja1N0YXRlOjpDbGVhcjsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gc19semNudENoZWNrU3RhdGUgPT0gQ1BVSURDaGVja1N0YXRlOjpT
ZXQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNCTUkxKCkKKyAgICB7CisgICAg
ICAgIGlmIChzX2JtaTFDaGVja1N0YXRlID09IENQVUlEQ2hlY2tTdGF0ZTo6Tm90Q2hlY2tlZCkg
eworICAgICAgICAgICAgaW50IGZsYWdzID0gMDsKKyNpZiBDT01QSUxFUihNU1ZDKQorICAgICAg
ICAgICAgaW50IGNwdUluZm9bNF07CisgICAgICAgICAgICBfX2NwdWlkKGNwdUluZm8sIDB4ODAw
MDAwMDEpOworICAgICAgICAgICAgZmxhZ3MgPSBjcHVJbmZvWzJdOworI2VsaWYgQ09NUElMRVIo
R0NDX09SX0NMQU5HKQorICAgICAgICAgICAgYXNtICgKKyAgICAgICAgICAgICAgICAgIm1vdmwg
JDB4NywgJSVlYXg7IgorICAgICAgICAgICAgICAgICAibW92bCAkMHgwLCAlJWVjeDsiCisgICAg
ICAgICAgICAgICAgICJjcHVpZDsiCisgICAgICAgICAgICAgICAgICJtb3ZsICUlZWJ4LCAlMDsi
CisgICAgICAgICAgICAgICAgIDogIj1nIiAoZmxhZ3MpCisgICAgICAgICAgICAgICAgIDoKKyAg
ICAgICAgICAgICAgICAgOiAiJWVheCIsICIlZWJ4IiwgIiVlY3giLCAiJWVkeCIKKyAgICAgICAg
ICAgICAgICAgKTsKKyNlbmRpZiAvLyBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCisgICAgICAgICAg
ICBzdGF0aWMgaW50IEJNSTFGZWF0dXJlQml0ID0gMSA8PCAzOworICAgICAgICAgICAgc19ibWkx
Q2hlY2tTdGF0ZSA9IChmbGFncyAmIEJNSTFGZWF0dXJlQml0KSA/IENQVUlEQ2hlY2tTdGF0ZTo6
U2V0IDogQ1BVSURDaGVja1N0YXRlOjpDbGVhcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
c19ibWkxQ2hlY2tTdGF0ZSA9PSBDUFVJRENoZWNrU3RhdGU6OlNldDsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTxpbnQgc2l6ZU9mUmVnaXN0ZXI+CisgICAgdm9pZCBjdHpBZnRlckJzZihSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIEp1bXAgc3JjSXNOb25aZXJvID0gbV9hc3NlbWJsZXIu
akNDKHg4NkNvbmRpdGlvbihOb25aZXJvKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKHNp
emVPZlJlZ2lzdGVyKSwgZHN0KTsKKyAgICAgICAgc3JjSXNOb25aZXJvLmxpbmsodGhpcyk7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBhdG9taWNT
dHJvbmdDQVMoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgcmVzdWx0LCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAg
c3dhcChleHBlY3RlZEFuZFJlc3VsdCwgWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIGZ1bmMoKTsKKyAgICAgICAgc3dhcChleHBlY3RlZEFu
ZFJlc3VsdCwgWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBzZXQzMih4ODZDb25kaXRpb24o
Y29uZCksIHJlc3VsdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAg
ICB2b2lkIGF0b21pY1N0cm9uZ0NBUyhSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBjb25z
dCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgc3dhcChleHBlY3RlZEFuZFJlc3VsdCwgWDg2
UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGZ1
bmMoKTsKKyAgICAgICAgc3dhcChleHBlY3RlZEFuZFJlc3VsdCwgWDg2UmVnaXN0ZXJzOjplYXgp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgSnVtcCBicmFuY2hB
dG9taWNTdHJvbmdDQVMoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRB
bmRSZXN1bHQsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBzd2FwKGV4cGVjdGVk
QW5kUmVzdWx0LCBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgZnVuYygpOworICAgICAgICBzd2FwKGV4cGVjdGVkQW5kUmVzdWx0LCBYODZS
ZWdpc3RlcnM6OmVheCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZD
b25kaXRpb24oY29uZCkpKTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0MiwxMSArMzQyLDQxIEBAIHB1
YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9ycihzcmMsIGRlc3QpOwogICAgIH0KIAor
ICAgIHZvaWQgYW5kNjQoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFuZHFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFuZDY0KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDY0KEFk
ZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5h
bmRxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFu
ZDY0KEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmFuZHFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxl
LCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lz
dGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfaXIoaW1tLm1f
dmFsdWUsIHNyY0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgYW5kNjQoVHJ1c3RlZEltbTMyIGlt
bSwgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9pbShpbW0u
bV92YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ2
NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmFuZHFfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3Qu
aW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgYW5kNjQoVHJ1c3RlZEltbVB0
ciBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIGludHB0cl90IGludFZh
bHVlID0gaW1tLmFzSW50cHRyKCk7CkBAIC02MTksMTEgKzY0OSwyMSBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fYXNzZW1ibGVyLnN1YnFfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3ViNjQoVHJ1c3RlZEltbTMyIGltbSwgQmFz
ZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX2ltKGltbS5t
X3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHN1YjY0KEFkZHJlc3Mgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX21yKHNyYy5vZmZzZXQs
IHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjY0KEJhc2VJbmRleCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfbXIoc3Jj
Lm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisK
ICAgICB2b2lkIHN1YjY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAg
ICAgICBtX2Fzc2VtYmxlci5zdWJxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CkBA
IC02NTEsNiArNjkxLDMxIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIueG9ycV9ybShz
cmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgeG9yNjQoUmVn
aXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
eG9ycV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2Nh
bGUpOworICAgIH0KKworICAgIHZvaWQgeG9yNjQoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfbXIoc3JjLm9mZnNldCwgc3JjLmJh
c2UsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgeG9yNjQoQmFzZUluZGV4IHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9ycV9tcihzcmMub2Zmc2V0
LCBzcmMuYmFzZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUsIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgeG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIueG9ycV9pbShpbW0ubV92YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7
CisgICAgfQorCisgICAgdm9pZCB4b3I2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfaW0oaW1tLm1fdmFsdWUsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAg
IHZvaWQgeG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIueG9ycV9pcihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CkBAIC0x
Mjk0LDcgKzEzNTksMjI1IEBAIHB1YmxpYzoKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJYODZDb21t
b246Om1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkp
OwogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmJyYW5jaFRlc3Q4KGNv
bmQsIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpLCBtYXNrOCk7CiAgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljU3Ryb25nQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
ZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywg
UmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNzU3Ryb25nQ0FTKGNvbmQs
IGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3Jt
KG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisg
ICAgdm9pZCBhdG9taWNTdHJvbmdDQVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJl
c3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljc1N0cm9uZ0NBUyhj
b25kLCBleHBlY3RlZEFuZFJlc3VsdCwgcmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hn
cV9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRl
eCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FT
NjQoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXRvbWljc1N0cm9uZ0NBUyhleHBlY3RlZEFu
ZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFsdWUsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0cm9u
Z0NBUzY0KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUs
IEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXRvbWljc1N0cm9uZ0NBUyhleHBl
Y3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFsdWUsIGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUp
OyB9KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0Nv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5l
d1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRv
bWljc1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIu
Y21weGNoZ3Ffcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVl
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNz
U3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4
Y2hncV9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWljV2Vha0NB
UzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBS
ZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQor
ICAgIHsKKyAgICAgICAgYXRvbWljc1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwg
bmV3VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFr
Q0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQs
IFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3Vs
dCkKKyAgICB7CisgICAgICAgIGF0b21pY3NTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1
bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KIAorICAgIEp1bXAgYnJhbmNo
QXRvbWljV2Vha0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVk
QW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljc1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJl
c3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWlj
V2Vha0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVz
dWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIHJldHVybiBicmFuY2hBdG9taWNzU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0
LCBuZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNBZGQ2NChUcnVz
dGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIGFkZDY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljQWRkNjQoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDY0KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkNjQoUmVnaXN0ZXJJRCByZWcs
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgYWRkNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNB
ZGQ2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDY0KHJlZywgYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljU3ViNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI2NChp
bW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjY0KFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBzdWI2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1N1YjY0KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjY0KHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBzdWI2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDY0
KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBhdG9taWNBbmQ2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kNjQoaW1t
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQ2NChSZWdpc3RlcklE
IHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICBhbmQ2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY0FuZDY0KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kNjQocmVnLCBhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I2
NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yNjQoVHJ1c3Rl
ZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIG9yNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNPcjY0KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yNjQocmVnLCBhZGRyZXNzKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjY0KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5k
ZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
b3I2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjY0KFRy
dXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgeG9yNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNYb3I2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yNjQoaW1tLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3I2NChSZWdpc3RlcklEIHJl
ZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICB4b3I2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y1hvcjY0KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNOZWc2NChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzY0KGFkZHJlc3MpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGF0b21pY05lZzY0KEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBuZWc2NChhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNOb3Q2NChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDY0KGFkZHJlc3MpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGF0b21pY05vdDY0KEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3Q2NChhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIueGFkZHFfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBtX2Fzc2VtYmxlci54YWRkcV9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Us
IGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1hjaGc2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54Y2hncV9ybShyZWcs
IGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1hjaGc2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JtKHJl
ZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5z
Y2FsZSk7CisgICAgfQorICAgIAogICAgIHZvaWQgdHJ1bmNhdGVEb3VibGVUb1VpbnQzMihGUFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxl
ci5jdnR0c2Qyc2lxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xOTYsMTAgKzE5NiwxMiBAQCBwcml2YXRlOgogICAgICAgICBPUF8yQllURV9F
U0NBUEUgICAgICAgICAgICAgICAgID0gMHgwRiwKICAgICAgICAgT1BfQU5EX0V2R3YgICAgICAg
ICAgICAgICAgICAgICA9IDB4MjEsCiAgICAgICAgIE9QX0FORF9HdkV2ICAgICAgICAgICAgICAg
ICAgICAgPSAweDIzLAorICAgICAgICBPUF9TVUJfRXZHYiAgICAgICAgICAgICAgICAgICAgID0g
MHgyOCwKICAgICAgICAgT1BfU1VCX0V2R3YgICAgICAgICAgICAgICAgICAgICA9IDB4MjksCiAg
ICAgICAgIE9QX1NVQl9HdkV2ICAgICAgICAgICAgICAgICAgICAgPSAweDJCLAogICAgICAgICBP
UF9TVUJfRUFYSXYgICAgICAgICAgICAgICAgICAgID0gMHgyRCwKICAgICAgICAgUFJFX1BSRURJ
Q1RfQlJBTkNIX05PVF9UQUtFTiAgICA9IDB4MkUsCisgICAgICAgIE9QX1hPUl9FdkdiICAgICAg
ICAgICAgICAgICAgICAgPSAweDMwLAogICAgICAgICBPUF9YT1JfRXZHdiAgICAgICAgICAgICAg
ICAgICAgID0gMHgzMSwKICAgICAgICAgT1BfWE9SX0d2RXYgICAgICAgICAgICAgICAgICAgICA9
IDB4MzMsCiAgICAgICAgIE9QX1hPUl9FQVhJdiAgICAgICAgICAgICAgICAgICAgPSAweDM1LApA
QCAtMjIzLDYgKzIyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIE9QX0dST1VQMV9FdkliICAgICAg
ICAgICAgICAgICAgPSAweDgzLAogICAgICAgICBPUF9URVNUX0ViR2IgICAgICAgICAgICAgICAg
ICAgID0gMHg4NCwKICAgICAgICAgT1BfVEVTVF9Fdkd2ICAgICAgICAgICAgICAgICAgICA9IDB4
ODUsCisgICAgICAgIE9QX1hDSEdfRXZHYiAgICAgICAgICAgICAgICAgICAgPSAweDg2LAogICAg
ICAgICBPUF9YQ0hHX0V2R3YgICAgICAgICAgICAgICAgICAgID0gMHg4NywKICAgICAgICAgT1Bf
TU9WX0ViR2IgICAgICAgICAgICAgICAgICAgICA9IDB4ODgsCiAgICAgICAgIE9QX01PVl9Fdkd2
ICAgICAgICAgICAgICAgICAgICAgPSAweDg5LApAQCAtMjkwLDYgKzI5Myw4IEBAIHByaXZhdGU6
CiAgICAgICAgIE9QX1NFVENDICAgICAgICAgICAgPSAweDkwLAogICAgICAgICBPUDJfM0JZVEVf
RVNDQVBFX0FFID0gMHhBRSwKICAgICAgICAgT1AyX0lNVUxfR3ZFdiAgICAgICA9IDB4QUYsCisg
ICAgICAgIE9QMl9DTVBYQ0hHYiAgICAgICAgPSAweEIwLAorICAgICAgICBPUDJfQ01QWENIRyAg
ICAgICAgID0gMHhCMSwKICAgICAgICAgT1AyX01PVlpYX0d2RWIgICAgICA9IDB4QjYsCiAgICAg
ICAgIE9QMl9CU0YgICAgICAgICAgICAgPSAweEJDLAogICAgICAgICBPUDJfVFpDTlQgICAgICAg
ICAgID0gMHhCQywKQEAgLTI5OCw2ICszMDMsOCBAQCBwcml2YXRlOgogICAgICAgICBPUDJfTU9W
U1hfR3ZFYiAgICAgID0gMHhCRSwKICAgICAgICAgT1AyX01PVlpYX0d2RXcgICAgICA9IDB4Qjcs
CiAgICAgICAgIE9QMl9NT1ZTWF9HdkV3ICAgICAgPSAweEJGLAorICAgICAgICBPUDJfWEFERGIg
ICAgICAgICAgID0gMHhDMCwKKyAgICAgICAgT1AyX1hBREQgICAgICAgICAgICA9IDB4QzEsCiAg
ICAgICAgIE9QMl9QRVhUUldfR2RVZEliICAgPSAweEM1LAogICAgICAgICBPUDJfUFNMTFFfVWRx
SWIgICAgID0gMHg3MywKICAgICAgICAgT1AyX1BTUkxRX1VkcUliICAgICA9IDB4NzMsCkBAIC02
MTQsMTEgKzYyMSw0MyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChP
UF9BTkRfR3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgYW5kbF9t
cihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2Fs
ZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3Ao
T1BfQU5EX0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwog
ICAgIHZvaWQgYW5kbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9Fdkd2LCBz
cmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBhbmRsX3JtKFJlZ2lzdGVySUQg
c3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBz
Y2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfRXZHdiwg
c3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBhbmR3
X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIGFu
ZGxfcm0oc3JjLCBvZmZzZXQsIGJhc2UpOworICAgIH0KKworICAgIHZvaWQgYW5kd19ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4
LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJB
TkRfU0laRSk7CisgICAgICAgIGFuZGxfcm0oc3JjLCBvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2Fs
ZSk7CisgICAgfQorCisgICAgdm9pZCBhbmRiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3Ao
T1BfQU5EX0V2R2IsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZGJf
cm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0FORF9FdkdiLCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisK
ICAgICB2b2lkIGFuZGxfaXIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAg
ICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgewpAQCAtNjQxLDYgKzY4MCw0MSBAQCBw
dWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIGFuZGxfaW0oaW50IGltbSwgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQU5ELCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1l
ZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3AoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9BTkQsIGJhc2UsIGluZGV4LCBzY2Fs
ZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGFuZHdfaW0oaW50IGltbSwgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9P
UEVSQU5EX1NJWkUpOworICAgICAgICBhbmRsX2ltKGltbSwgb2Zmc2V0LCBiYXNlKTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZHdfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIGFuZGxfaW0oaW1tLCBvZmZzZXQs
IGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBhbmRiX2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwgR1JPVVAxX09QX0FORCwgYmFzZSwgb2Zmc2V0KTsK
KyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKworICAgIHZvaWQg
YW5kYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQg
aW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChP
UF9HUk9VUDFfRWJJYiwgR1JPVVAxX09QX0FORCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCiAjaWYgQ1BV
KFg4Nl82NCkKICAgICB2b2lkIGFuZHFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0
KQogICAgIHsKQEAgLTY1Nyw2ICs3MzEsNDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3Jt
YXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHZvaWQgYW5k
cV9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQU5EX0d2RXYsIGRzdCwgYmFzZSwg
b2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQU5EX0d2RXYsIGRzdCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgYW5kcV9ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsK
KyAgICB9CisKKyAgICB2b2lkIGFuZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgYW5kcV9pbShpbnQgaW1tLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhU
RU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1Bf
R1JPVVAxX0V2SWIsIEdST1VQMV9PUF9BTkQsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX0FORCwg
YmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGFuZHFfaW0oaW50IGltbSwgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9BTkQsIGJhc2Us
IGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUs
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAg
ICAgICB9CisgICAgfQogI2Vsc2UKICAgICB2b2lkIGFuZGxfaW0oaW50IGltbSwgY29uc3Qgdm9p
ZCogYWRkcikKICAgICB7CkBAIC04MzEsMTEgKzk0Nyw0MyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfR3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwogICAg
IH0KIAorICAgIHZvaWQgc3VibF9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgc3VibF9ybShSZWdpc3RlcklEIHNyYywgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wKE9QX1NVQl9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9p
ZCBzdWJsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7Cisg
ICAgfQorCisgICAgdm9pZCBzdWJ3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJB
TkRfU0laRSk7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHdiwgc3Jj
LCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgc3Vid19ybShSZWdpc3RlcklEIHNy
YywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBzdWJiX3JtKFJlZ2lzdGVy
SUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0V2R2IsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9
CisKKyAgICB2b2lkIHN1YmJfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9FdkdiLCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwg
b2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIHN1YmxfaXIoaW50IGltbSwgUmVnaXN0ZXJJRCBk
c3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgewpAQCAt
ODYxLDYgKzEwMDksNDEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBz
dWJsX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBp
bmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMy
KGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJ
YiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAg
ICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfU1VC
LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5p
bW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWJ3X2ltKGlu
dCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgc3VibF9pbShpbW0sIG9m
ZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBzdWJ3X2ltKGludCBpbW0sIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBz
dWJsX2ltKGltbSwgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAgIHZv
aWQgc3ViYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQMV9PUF9T
VUIsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsK
KyAgICB9CisKKyAgICB2b2lkIHN1YmJfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQMV9PUF9TVUIsIGJhc2UsIGlu
ZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0p
OworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBzdWJxX3JyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC04NzIsMTEgKzEwNTUsMjEgQEAgcHVibGlj
OgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9TVUJfR3ZFdiwgZHN0LCBiYXNl
LCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgc3VicV9tcihpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9TVUJfR3ZFdiwgZHN0LCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBzdWJxX3JtKFJl
Z2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQp
OwogICAgIH0KIAorICAgIHZvaWQgc3VicV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBzdWJxX2lyKGludCBpbW0sIFJl
Z2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGlt
bSkpIHsKQEAgLTkwMSw2ICsxMDk0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0
dGVyLmltbWVkaWF0ZTMyKGltbSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICB2b2lkIHN1YnFf
aW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4
LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1t
KSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIs
IEdST1VQMV9PUF9TVUIsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfU1VC
LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5p
bW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQogI2Vsc2UKICAgICB2b2lkIHN1Ymxf
aW0oaW50IGltbSwgY29uc3Qgdm9pZCogYWRkcikKICAgICB7CkBAIC05MjQsMTEgKzExMjgsMjEg
QEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWE9SX0d2RXYsIGRz
dCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHhvcmxfbXIoaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hPUl9HdkV2LCBk
c3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIHhvcmxf
cm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YT1JfRXZHdiwgc3JjLCBiYXNlLCBvZmZz
ZXQpOwogICAgIH0KIAorICAgIHZvaWQgeG9ybF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwgaW5k
ZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgeG9ybF9pbShpbnQgaW1tLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05f
RVhURU5EXzhfMzIoaW1tKSkgewpAQCAtOTQwLDYgKzExNTQsNjMgQEAgcHVibGljOgogICAgICAg
ICB9CiAgICAgfQogCisgICAgdm9pZCB4b3JsX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
aWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgaW5kZXgsIHNj
YWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dS
T1VQMV9Fdkl6LCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7Cisg
ICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCB4b3J3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRf
U0laRSk7CisgICAgICAgIHhvcmxfcm0oc3JjLCBvZmZzZXQsIGJhc2UpOworICAgIH0KKworICAg
IHZvaWQgeG9yd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIHhvcmxfcm0oc3JjLCBvZmZzZXQs
IGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9pZCB4b3J3X2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
LnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgeG9ybF9pbShpbW0sIG9mZnNldCwg
YmFzZSk7CisgICAgfQorCisgICAgdm9pZCB4b3J3X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICB4b3JsX2lt
KGltbSwgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgeG9y
Yl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hPUl9FdkdiLCBzcmMsIGJhc2UsIG9m
ZnNldCk7CisgICAgfQorCisgICAgdm9pZCB4b3JiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7
CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YT1JfRXZHYiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCB4b3JiX2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgb2Zmc2V0KTsK
KyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKworICAgIHZvaWQg
eG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQg
aW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChP
UF9HUk9VUDFfRWJJYiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCiAgICAgdm9p
ZCB4b3JsX2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENB
Tl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTk3NCwxMSArMTI0NSw0NyBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9pZCB4b3JxX2ltKGludCBpbW0sIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRF
TkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9H
Uk9VUDFfRXZJYiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1f
Zm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfWE9SLCBi
YXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHhvcnFfaW0oaW50IGltbSwgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9YT1IsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVk
aWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOwor
ICAgICAgICB9CisgICAgfQorICAgIAogICAgIHZvaWQgeG9ycV9ybShSZWdpc3RlcklEIHNyYywg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAg
ICB2b2lkIHhvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wNjQoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZz
ZXQpOworICAgIH0KKworICAgIHZvaWQgeG9ycV9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cDY0KE9QX1hPUl9HdkV2LCBkZXN0LCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQg
eG9ycV9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGlu
dCBzY2FsZSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfWE9SX0d2RXYsIGRlc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsK
KyAgICB9CiAjZW5kaWYKIAogICAgIHZvaWQgbHpjbnRfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQpAQCAtMTU4NiwxMSArMTg5MywzOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGRzdCk7CiAgICAgfQogCisg
ICAgdm9pZCB4Y2hnYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdfRXZHYiwg
c3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgeGNoZ2Jfcm0oUmVnaXN0ZXJJ
RCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50
IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdfRXZH
Yiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCB4
Y2hnd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7
CisgICAgfQorCisgICAgdm9pZCB4Y2hnd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG1fZm9y
bWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgeGNoZ2xfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lk
IHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOwor
ICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCB4Y2hncV9ycihSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewpAQCAtMTYwNiw2ICsxOTQwLDExIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwgc3Jj
LCBiYXNlLCBvZmZzZXQpOwogICAgIH0KKworICAgIHZvaWQgeGNoZ3Ffcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNj
YWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfWENIR19Fdkd2
LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYKIAogICAg
IHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCkBAIC0yNzc1LDYg
KzMxMTQsOTAgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX0xPQ0sp
OwogICAgIH0KICAgICAKKyAgICB2b2lkIGNtcHhjaGdiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29C
eXRlT3A4KE9QMl9DTVBYQ0hHYiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNtcHhjaGdiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLnR3b0J5dGVPcDgoT1AyX0NNUFhDSEdiLCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwg
b2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnd19ybShSZWdpc3RlcklEIHNy
YywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0
ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRl
T3AoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbXB4Y2hnd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVP
cChPUDJfQ01QWENIRywgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY21weGNoZ2xfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJf
Q01QWENIRywgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhj
aGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5
dGVPcChPUDJfQ01QWENIRywgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgY21weGNoZ3Ffcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0
KE9QMl9DTVBYQ0hHLCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y21weGNoZ3Ffcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
dHdvQnl0ZU9wNjQoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRl
T3A4KE9QMl9YQUREYiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHhhZGRiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3
b0J5dGVPcDgoT1AyX1hBRERiLCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCB4YWRkd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9P
UEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX1hBREQsIHNy
YywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkd19ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBp
bnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRf
U0laRSk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfWEFERCwgc3JjLCBiYXNl
LCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZGxfcm0o
UmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfWEFERCwgc3JjLCBiYXNlLCBvZmZzZXQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfWEFERCwgc3JjLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZHFfcm0oUmVnaXN0ZXJJ
RCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9YQURELCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgeGFkZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIudHdvQnl0ZU9wNjQoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KKyAgICAKICAgICB2b2lkIG1mZW5jZSgpCiAgICAgewogICAgICAg
ICBtX2Zvcm1hdHRlci50aHJlZUJ5dGVPcChPUDJfM0JZVEVfRVNDQVBFX0FFLCBPUDNfTUZFTkNF
KTsKQEAgLTM3NTEsNiArNDE3NCwyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgd3JpdGVyLnJl
Z2lzdGVyTW9kUk0oZ3JvdXBPcCwgcm0pOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCB0d29C
eXRlT3A4KFR3b0J5dGVPcGNvZGVJRCBvcGNvZGUsIGludCByZWcsIFJlZ2lzdGVySUQgYmFzZSwg
aW50IG9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgU2luZ2xlSW5zdHJ1Y3Rpb25CdWZm
ZXJXcml0ZXIgd3JpdGVyKG1fYnVmZmVyKTsKKyAgICAgICAgICAgIHdyaXRlci5lbWl0UmV4SWYo
Ynl0ZVJlZ1JlcXVpcmVzUmV4KHJlZywgYmFzZSksIHJlZywgMCwgYmFzZSk7CisgICAgICAgICAg
ICB3cml0ZXIucHV0Qnl0ZVVuY2hlY2tlZChPUF8yQllURV9FU0NBUEUpOworICAgICAgICAgICAg
d3JpdGVyLnB1dEJ5dGVVbmNoZWNrZWQob3Bjb2RlKTsKKyAgICAgICAgICAgIHdyaXRlci5tZW1v
cnlNb2RSTShyZWcsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHR3
b0J5dGVPcDgoVHdvQnl0ZU9wY29kZUlEIG9wY29kZSwgaW50IHJlZywgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIGludCBvZmZzZXQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFNpbmdsZUluc3RydWN0aW9uQnVmZmVyV3JpdGVyIHdyaXRlcihtX2J1ZmZlcik7
CisgICAgICAgICAgICB3cml0ZXIuZW1pdFJleElmKGJ5dGVSZWdSZXF1aXJlc1JleChyZWcpIHx8
IHJlZ1JlcXVpcmVzUmV4KGluZGV4LCBiYXNlKSwgcmVnLCBpbmRleCwgYmFzZSk7CisgICAgICAg
ICAgICB3cml0ZXIucHV0Qnl0ZVVuY2hlY2tlZChPUF8yQllURV9FU0NBUEUpOworICAgICAgICAg
ICAgd3JpdGVyLnB1dEJ5dGVVbmNoZWNrZWQob3Bjb2RlKTsKKyAgICAgICAgICAgIHdyaXRlci5t
ZW1vcnlNb2RSTShyZWcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgfQor
CiAgICAgICAgIC8vIEltbWVkaWF0ZXM6CiAgICAgICAgIC8vCiAgICAgICAgIC8vIEFuIGltbWVk
YWl0ZSBzaG91bGQgYmUgYXBwZW5kZWQgd2hlcmUgYXBwcm9wcmlhdGUgYWZ0ZXIgYW4gb3AgaGFz
IGJlZW4gZW1pdHRlZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1Zh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNW
YWx1ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRv
bWljVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0F0b21pY1ZhbHVlOjp+QXRvbWljVmFsdWUoKQor
eworfQorCitXaWR0aCBBdG9taWNWYWx1ZTo6YWNjZXNzV2lkdGgoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3dpZHRoOworfQorCit2b2lkIEF0b21pY1ZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50
ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChjb21t
YSwgIndpZHRoID0gIiwgbV93aWR0aCk7CisgICAgCisgICAgTWVtb3J5VmFsdWU6OmR1bXBNZXRh
KGNvbW1hLCBvdXQpOworfQorCitWYWx1ZSogQXRvbWljVmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG5ldyBBdG9taWNWYWx1ZSgqdGhpcyk7Cit9CisKK0F0b21pY1ZhbHVl
OjpBdG9taWNWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFdpZHRoIHdpZHRoLCBWYWx1
ZSogb3BlcmFuZCwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1l
bW9yeVZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIG9wZXJhbmQtPnR5cGUoKSwgb3JpZ2luLCBv
ZmZzZXQsIG9wZXJhbmQsIHBvaW50ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIHNl
dEZlbmNlUmFuZ2UoSGVhcFJhbmdlOjp0b3AoKSk7CisgICAgCisgICAgQVNTRVJUKGJlc3RUeXBl
KG9wZXJhdGlvbldpZHRoKCkpID09IG9wZXJhdGlvblR5cGUoKSk7CisgICAgCisgICAgc3dpdGNo
IChraW5kLm9wY29kZSgpKSB7CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRv
bWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdT
dWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorfQorCitBdG9taWNWYWx1ZTo6QXRvbWljVmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3Jp
Z2luLCBXaWR0aCB3aWR0aCwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBuZXdWYWx1ZSwg
VmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKENo
ZWNrZWRPcGNvZGUsIGtpbmQsIGtpbmQub3Bjb2RlKCkgPT0gQXRvbWljV2Vha0NBUyA/IEludDMy
IDogZXhwZWN0ZWRWYWx1ZS0+dHlwZSgpLCBvcmlnaW4sIG9mZnNldCwgZXhwZWN0ZWRWYWx1ZSwg
bmV3VmFsdWUsIHBvaW50ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIHNldEZlbmNl
UmFuZ2UoSGVhcFJhbmdlOjp0b3AoKSk7CisgICAgCisgICAgQVNTRVJUKGJlc3RUeXBlKG9wZXJh
dGlvbldpZHRoKCkpID09IG9wZXJhdGlvblR5cGUoKSk7CisKKyAgICBzd2l0Y2ggKGtpbmQub3Bj
b2RlKCkpIHsKKyAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdD
QVM6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9t
aWNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21p
Y1ZhbHVlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRv
bWljVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIzV2lk
dGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEpTX0VYUE9S
VF9QUklWQVRFIEF0b21pY1ZhbHVlIDogcHVibGljIE1lbW9yeVZhbHVlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgYm9vbCBhY2NlcHRzKEtpbmQga2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiBp
c0F0b21pYyhraW5kLm9wY29kZSgpKTsKKyAgICB9CisgICAgCisgICAgfkF0b21pY1ZhbHVlKCk7
CisgICAgCisgICAgVHlwZSBvcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gY2hpbGQoMCkt
PnR5cGUoKTsgfQorICAgIAorICAgIFdpZHRoIG9wZXJhdGlvbldpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV93aWR0aDsgfQorICAgIAorICAgIC8vIFN5bm9ueW0gZm9yIG9wZXJhdGlvbldpZHRoKCks
IGlmIHlvdSdyZSBhY2Nlc3NpbmcgdmlhIE1lbW9yeVZhbHVlLgorICAgIFdpZHRoIGFjY2Vzc1dp
ZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0
YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAg
IFZhbHVlKiBjbG9uZUltcGwoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICBBdG9taWNWYWx1ZShLaW5kLCBPcmln
aW4sIFdpZHRoLCBWYWx1ZSogb3BlcmFuZCwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0
ID0gMCk7CisgICAgCisgICAgQXRvbWljVmFsdWUoS2luZCwgT3JpZ2luLCBXaWR0aCwgVmFsdWUq
IGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBuZXdWYWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qg
b2Zmc2V0ID0gMCk7CisgICAgCisgICAgV2lkdGggbV93aWR0aDsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNp
b24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25T
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDM1ICszNiwxMyBAQAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIEJsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChQcm9j
ZWR1cmUgJnByb2MpCi0gICAgOiBtX3Byb2MocHJvYykKKyAgICA6IEdlbmVyaWNCbG9ja0luc2Vy
dGlvblNldChwcm9jLm1fYmxvY2tzKQorICAgICwgbV9wcm9jKHByb2MpCiB7CiB9CiAKIEJsb2Nr
SW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQoKSB7IH0KIAotdm9pZCBCbG9ja0luc2Vy
dGlvblNldDo6aW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYgaW5zZXJ0aW9uKQotewotICAgIG1faW5z
ZXJ0aW9ucy5hcHBlbmQoV1RGTW92ZShpbnNlcnRpb24pKTsKLX0KLQotQmFzaWNCbG9jayogQmxv
Y2tJbnNlcnRpb25TZXQ6Omluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkK
LXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2so
VUlOVF9NQVgsIGZyZXF1ZW5jeSkpOwotICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdl
dCgpOwotICAgIGluc2VydChCbG9ja0luc2VydGlvbihpbmRleCwgV1RGTW92ZShibG9jaykpKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1CYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6
aW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSkKLXsKLSAg
ICByZXR1cm4gaW5zZXJ0KGJlZm9yZS0+aW5kZXgoKSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/
IGZyZXF1ZW5jeSA6IGJlZm9yZS0+ZnJlcXVlbmN5KCkpOwotfQotCi1CYXNpY0Jsb2NrKiBCbG9j
a0luc2VydGlvblNldDo6aW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBmcmVx
dWVuY3kpCi17Ci0gICAgcmV0dXJuIGluc2VydChhZnRlci0+aW5kZXgoKSArIDEsIGZyZXF1ZW5j
eSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBhZnRlci0+ZnJlcXVlbmN5KCkpOwotfQotCiBC
YXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6c3BsaXRGb3J3YXJkKAogICAgIEJhc2ljQmxv
Y2sqIGJsb2NrLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwgSW5zZXJ0aW9uU2V0KiBpbnNlcnRpb25T
ZXQsIGRvdWJsZSBmcmVxdWVuY3kpCiB7CkBAIC0xMDIsMzIgKzgwLDYgQEAgQmFzaWNCbG9jayog
QmxvY2tJbnNlcnRpb25TZXQ6OnNwbGl0Rm9ydwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJv
b2wgQmxvY2tJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoKQotewotICAgIGlmIChtX2luc2VydGlvbnMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gV2UgYWxsb3cg
aW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVkIHRv
IHNvcnQgdGhlbSBiZWZvcmUKLSAgICAvLyBydW5uaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMu
IFdlIHN0cm9uZ2x5IHByZWZlciBhIHN0YWJsZSBzb3J0IGFuZCB3ZSB3YW50IGl0IHRvIGJlCi0g
ICAgLy8gZmFzdCwgc28gd2UgdXNlIGJ1YmJsZSBzb3J0LgotICAgIGJ1YmJsZVNvcnQobV9pbnNl
cnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7Ci0KLSAgICBleGVjdXRlSW5zZXJ0
aW9ucyhtX3Byb2MubV9ibG9ja3MsIG1faW5zZXJ0aW9ucyk7Ci0gICAgCi0gICAgLy8gUHJ1bmUg
b3V0IGVtcHR5IGVudHJpZXMuIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBpdCdz
Ci0gICAgLy8gaGVhbHRoeSB0byBrZWVwIHRoZSBibG9jayBsaXN0IGZyb20gZ3Jvd2luZy4KLSAg
ICBtX3Byb2MubV9ibG9ja3MucmVtb3ZlQWxsTWF0Y2hpbmcoCi0gICAgICAgIFsmXSAoc3RkOjp1
bmlxdWVfcHRyPEJhc2ljQmxvY2s+JiBibG9ja1B0cikgLT4gYm9vbCB7Ci0gICAgICAgICAgICBy
ZXR1cm4gIWJsb2NrUHRyOwotICAgICAgICB9KTsKLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhh
dCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMuCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fcHJvYy5tX2Jsb2Nrcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9wcm9jLm1f
YmxvY2tzW2ldLT5tX2luZGV4ID0gaTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlv
blNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEIz
X0pJVCkKIAorI2luY2x1ZGUgIkIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVk
ZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgpAQCAtMzUsMjYgKzM2LDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgewogCiBjbGFzcyBJbnNlcnRpb25TZXQ7CiAKLXR5cGVkZWYgV1RGOjpJbnNlcnRpb248
c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBCbG9ja0luc2VydGlvbjsKK3R5cGVkZWYgR2Vu
ZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+OjpCbG9ja0luc2VydGlvbiBCbG9ja0lu
c2VydGlvbjsKIAotY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgeworY2xhc3MgQmxvY2tJbnNlcnRp
b25TZXQgOiBwdWJsaWMgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+IHsKIHB1
YmxpYzoKICAgICBCbG9ja0luc2VydGlvblNldChQcm9jZWR1cmUmKTsKICAgICB+QmxvY2tJbnNl
cnRpb25TZXQoKTsKICAgICAKLSAgICB2b2lkIGluc2VydChCbG9ja0luc2VydGlvbiYmKTsKLQot
ICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBhIGdpdmVuIGluZGV4LgotICAgIEJhc2ljQmxv
Y2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOwotCi0g
ICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBiZWZvcmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5
IHlvdSB3aWxsIG5vdCBwYXNzIHRoZSBmcmVxdWVuY3kKLSAgICAvLyBhcmd1bWVudC4gUGFzc2lu
ZyBQTmFOIGNhdXNlcyB1cyB0byBqdXN0IHVzZSB0aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3Jl
JyBibG9jay4gVGhhdCdzCi0gICAgLy8gdXN1YWxseSB3aGF0IHlvdSB3YW50LgotICAgIEJhc2lj
QmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kg
PSBQTmFOKTsKLQotICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYWZ0ZXIgdGhlIGdpdmVuIGJs
b2NrLgotICAgIEJhc2ljQmxvY2sqIGluc2VydEFmdGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3Vi
bGUgZnJlcXVlbmN5ID0gUE5hTik7Ci0KICAgICAvLyBBIGhlbHBlciB0byBzcGxpdCBhIGJsb2Nr
IHdoZW4gZm9yd2FyZCBpdGVyYXRpbmcgb3ZlciBpdC4gSXQgY3JlYXRlcyBhIG5ldyBibG9jayB0
byBob2xkCiAgICAgLy8gZXZlcnl0aGluZyBiZWZvcmUgdGhlIGluc3RydWN0aW9uIGF0IHZhbHVl
SW5kZXguIFRoZSBjdXJyZW50IGJsb2NrIGlzIGxlZnQgd2l0aAogICAgIC8vIGV2ZXJ5dGhpbmcg
YXQgYW5kIGFmdGVyIHZhbHVlSW5kZXguIElmIHRoZSBvcHRpb25hbCBJbnNlcnRpb25TZXQgaXMg
cHJvdmlkZWQsIGl0IHdpbGwgZ2V0CkBAIC04MCwxMiArNjgsOSBAQCBwdWJsaWM6CiAgICAgQmFz
aWNCbG9jayogc3BsaXRGb3J3YXJkKAogICAgICAgICBCYXNpY0Jsb2NrKiwgdW5zaWduZWQmIHZh
bHVlSW5kZXgsIEluc2VydGlvblNldCogPSBudWxscHRyLAogICAgICAgICBkb3VibGUgZnJlcXVl
bmN5ID0gUE5hTik7Ci0gICAgCi0gICAgYm9vbCBleGVjdXRlKCk7CiAKIHByaXZhdGU6CiAgICAg
UHJvY2VkdXJlJiBtX3Byb2M7Ci0gICAgVmVjdG9yPEJsb2NrSW5zZXJ0aW9uLCA4PiBtX2luc2Vy
dGlvbnM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIs
OCBAQCBib29sIEVmZmVjdHM6OmludGVyZmVyZXMoY29uc3QgRWZmZWN0cyYgCiAgICAgICAgIHx8
IGludGVyZmVyZXNXaXRoV3JpdGVzUGlubmVkKG90aGVyLCAqdGhpcykKICAgICAgICAgfHwgd3Jp
dGVzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90
aGVyLnJlYWRzKQotICAgICAgICB8fCByZWFkcy5vdmVybGFwcyhvdGhlci53cml0ZXMpOworICAg
ICAgICB8fCByZWFkcy5vdmVybGFwcyhvdGhlci53cml0ZXMpCisgICAgICAgIHx8IChmZW5jZSAm
JiBvdGhlci5mZW5jZSk7CiB9CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3I9PShjb25zdCBFZmZl
Y3RzJiBvdGhlcikgY29uc3QKQEAgLTk1LDcgKzk2LDggQEAgYm9vbCBFZmZlY3RzOjpvcGVyYXRv
cj09KGNvbnN0IEVmZmVjdHMmIAogICAgICAgICAmJiB3cml0ZXNQaW5uZWQgPT0gb3RoZXIud3Jp
dGVzUGlubmVkCiAgICAgICAgICYmIHJlYWRzUGlubmVkID09IG90aGVyLnJlYWRzUGlubmVkCiAg
ICAgICAgICYmIHdyaXRlcyA9PSBvdGhlci53cml0ZXMKLSAgICAgICAgJiYgcmVhZHMgPT0gb3Ro
ZXIucmVhZHM7CisgICAgICAgICYmIHJlYWRzID09IG90aGVyLnJlYWRzCisgICAgICAgICYmIGZl
bmNlID09IG90aGVyLmZlbmNlOwogfQogCiBib29sIEVmZmVjdHM6Om9wZXJhdG9yIT0oY29uc3Qg
RWZmZWN0cyYgb3RoZXIpIGNvbnN0CkBAIC0xMjAsNiArMTIyLDggQEAgdm9pZCBFZmZlY3RzOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbgogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXcml0
ZXNQaW5uZWQiKTsKICAgICBpZiAocmVhZHNQaW5uZWQpCiAgICAgICAgIG91dC5wcmludChjb21t
YSwgIlJlYWRzUGlubmVkIik7CisgICAgaWYgKGZlbmNlKQorICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJGZW5jZSIpOwogICAgIGlmICh3cml0ZXMpCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
IldyaXRlczoiLCB3cml0ZXMpOwogICAgIGlmIChyZWFkcykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0VmZmVjdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNFZmZlY3RzLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0VmZmVjdHMuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgc3Ry
dWN0IEVmZmVjdHMgewogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjMxNzMKICAgICBib29sIHJlYWRzUGlubmVkIHsgZmFsc2UgfTsKICAgICBib29sIHdy
aXRlc1Bpbm5lZCB7IGZhbHNlIH07CisgICAgCisgICAgLy8gTWVtb3J5IGZlbmNlcyBjYW5ub3Qg
YmUgcmVvcmRlcmVkIGFyb3VuZCBlYWNoIG90aGVyIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgZWZmZWN0
cy4gVGhpcyBpcyBmbGFnZ2VkCisgICAgLy8gaWYgdGhlIG9wZXJhdGlvbiBpcyBhIG1lbW9yeSBm
ZW5jZS4KKyAgICBib29sIGZlbmNlIHsgZmFsc2UgfTsKIAogICAgIEhlYXBSYW5nZSB3cml0ZXM7
CiAgICAgSGVhcFJhbmdlIHJlYWRzOwpAQCAtODksNiArOTMsNyBAQCBzdHJ1Y3QgRWZmZWN0cyB7
CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IEhlYXBSYW5nZTo6dG9wKCk7CiAgICAgICAgIHJlc3Vs
dC5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgIHJlc3VsdC53cml0ZXNQaW5uZWQgPSB0cnVl
OworICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIApAQCAtMTAzLDcgKzEwOCw3IEBAIHN0cnVjdCBFZmZlY3RzIHsKIAogICAgIGJvb2wg
bXVzdEV4ZWN1dGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHRlcm1pbmFsIHx8IGV4
aXRzU2lkZXdheXMgfHwgd3JpdGVzTG9jYWxTdGF0ZSB8fCB3cml0ZXMgfHwgd3JpdGVzUGlubmVk
OworICAgICAgICByZXR1cm4gdGVybWluYWwgfHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2Nh
bFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQaW5uZWQgfHwgZmVuY2U7CiAgICAgfQogCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHJlb3JkZXJpbmcgaW5zdHJ1Y3Rpb25zIHdpdGggdGhlc2UgcmVz
cGVjdGl2ZSBlZmZlY3RzIHdvdWxkIGNoYW5nZSBwcm9ncmFtCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVz
c2lvbnMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQyLDYg
KzE0Miw3IEBAIHN0cnVjdCBJbXB1cmVCbG9ja0RhdGEgewogCiAgICAgUmFuZ2VTZXQ8SGVhcFJh
bmdlPiByZWFkczsgLy8gVGhpcyBvbmx5IGdldHMgdXNlZCBmb3IgZm9yd2FyZCBzdG9yZSBlbGlt
aW5hdGlvbi4KICAgICBSYW5nZVNldDxIZWFwUmFuZ2U+IHdyaXRlczsgLy8gVGhpcyBnZXRzIHVz
ZWQgZm9yIGJvdGggbG9hZCBhbmQgc3RvcmUgZWxpbWluYXRpb24uCisgICAgYm9vbCBmZW5jZTsK
IAogICAgIE1lbW9yeVZhbHVlTWFwIHN0b3Jlc0F0SGVhZDsKICAgICBNZW1vcnlWYWx1ZU1hcCBt
ZW1vcnlWYWx1ZXNBdFRhaWw7CkBAIC0xNzQsMTIgKzE3NSwxNCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG1lbW9yeSAmJiBtZW1vcnktPmlzU3RvcmUo
KQogICAgICAgICAgICAgICAgICAgICAmJiAhZGF0YS5yZWFkcy5vdmVybGFwcyhtZW1vcnktPnJh
bmdlKCkpCi0gICAgICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRlcy5vdmVybGFwcyhtZW1v
cnktPnJhbmdlKCkpKQorICAgICAgICAgICAgICAgICAgICAmJiAhZGF0YS53cml0ZXMub3Zlcmxh
cHMobWVtb3J5LT5yYW5nZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiAoIWRhdGEuZmVuY2Ug
fHwgIW1lbW9yeS0+aGFzRmVuY2UoKSkpCiAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3RvcmVz
QXRIZWFkLmFkZChtZW1vcnkpOwogICAgICAgICAgICAgICAgIGRhdGEucmVhZHMuYWRkKGVmZmVj
dHMucmVhZHMpOwogCiAgICAgICAgICAgICAgICAgaWYgKEhlYXBSYW5nZSB3cml0ZXMgPSBlZmZl
Y3RzLndyaXRlcykKICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihkYXRhLCB3cml0ZXMpOwor
ICAgICAgICAgICAgICAgIGRhdGEuZmVuY2UgfD0gZWZmZWN0cy5mZW5jZTsKIAogICAgICAgICAg
ICAgICAgIGlmIChtZW1vcnkpCiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVtb3J5VmFsdWVz
QXRUYWlsLmFkZChtZW1vcnkpOwpAQCAtNDc4LDYgKzQ4MSw5IEBAIHByaXZhdGU6CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRmlsdGVyPgogICAgIGJvb2wgZmluZFN0b3JlQWZ0ZXJDbG9iYmVyKFZh
bHVlKiBwdHIsIEhlYXBSYW5nZSByYW5nZSwgY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgewor
ICAgICAgICBpZiAobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAogICAgICAgICAvLyBXZSBjYW4gZWxpbWlu
YXRlIGEgc3RvcmUgaWYgZXZlcnkgZm9yd2FyZCBwYXRoIGhpdHMgYSBzdG9yZSB0byB0aGUgc2Ft
ZSBsb2NhdGlvbiBiZWZvcmUKICAgICAgICAgLy8gaGl0dGluZyBhbnkgb3BlcmF0aW9uIHRoYXQg
b2JzZXJ2ZXMgdGhlIHN0b3JlLiBUaGlzIHNlYXJjaCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZQog
ICAgICAgICAvLyBleHBlbnNpdmUsIGJ1dCBpbiB0aGUgb3ZlcndoZWxtaW5nIG1ham9yaXR5IG9m
IGNhc2VzIGl0IHdpbGwgYWxtb3N0IGltbWVkaWF0ZWx5IGhpdCBhbiAKQEAgLTYxNCw2ICs2MjAs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9n
KCptX3ZhbHVlLCAiOiBsb29raW5nIGJhY2t3YXJkIGZvciAiLCAqcHRyLCAiLi4uXG4iKTsKICAg
ICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2Uo
KSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgIEdpdmluZyB1cCBiZWNhdXNlIGZlbmNlcy5cbiIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAoTWVtb3J5VmFsdWUqIG1hdGNo
ID0gbV9kYXRhLm1lbW9yeVZhbHVlc0F0VGFpbC5maW5kKHB0ciwgZmlsdGVyKSkgewogICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEZvdW5kICIs
ICptYXRjaCwgIiBsb2NhbGx5LlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
R2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDcgQEAgdm9pZCBn
ZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CiAgICAgfQogCisgICAgLy8gVGhp
cyBwdXRzIHRoZSBJUiBpbiBxdWlya3MgbW9kZS4KICAgICBsb3dlck1hY3Jvcyhwcm9jZWR1cmUp
OwogCiAgICAgaWYgKG9wdExldmVsID49IDEpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBJbnNlcnRpb25T
ZXQ7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CitjbGFzcyBHZW5lcmljQmxvY2tJ
bnNlcnRpb25TZXQgeworcHVibGljOgorICAgIHR5cGVkZWYgV1RGOjpJbnNlcnRpb248c3RkOjp1
bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBCbG9ja0luc2VydGlvbjsKKyAgICAKKyAgICBCbG9ja0lu
c2VydGlvblNldChWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiYgYmxvY2tzKQor
ICAgICAgICA6IG1fYmxvY2tzKGJsb2NrcykKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQg
aW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYgaW5zZXJ0aW9uKQorICAgIHsKKyAgICAgICAgbV9pbnNl
cnRpb25zLmFwcGVuZChXVEZNb3ZlKGluc2VydGlvbikpOworICAgIH0KKworICAgIC8vIEluc2Vy
dCBhIG5ldyBibG9jayBhdCBhIGdpdmVuIGluZGV4LgorICAgIEJhc2ljQmxvY2sqIGluc2VydCh1
bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pCisgICAgeworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgs
IGZyZXF1ZW5jeSkpOworICAgICAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsK
KyAgICAgICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2NrKSkpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIEluc2VydHMgYSBuZXcgYmxv
Y2sgYmVmb3JlIHRoZSBnaXZlbiBibG9jay4gVXN1YWxseSB5b3Ugd2lsbCBub3QgcGFzcyB0aGUg
ZnJlcXVlbmN5CisgICAgLy8gYXJndW1lbnQuIFBhc3NpbmcgUE5hTiBjYXVzZXMgdXMgdG8ganVz
dCB1c2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgJ2JlZm9yZScgYmxvY2suIFRoYXQncworICAgIC8v
IHVzdWFsbHkgd2hhdCB5b3Ugd2FudC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFz
aWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTikKKyAgICB7CisgICAgICAg
IHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8g
ZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVuY3koKSk7CisgICAgfQorCisgICAgLy8gSW5zZXJ0
cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2ZW4gYmxvY2suCisgICAgQmFzaWNCbG9jayogaW5z
ZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGluc2VydChhZnRlci0+aW5kZXgoKSArIDEsIGZyZXF1ZW5jeSA9
PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBhZnRlci0+ZnJlcXVlbmN5KCkpOworICAgIH0KKwor
ICAgIGJvb2wgZXhlY3V0ZSgpCisgICAgeworICAgICAgICBpZiAobV9pbnNlcnRpb25zLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdl
IGFsbG93IGluc2VydGlvbnMgdG8gYmUgZ2l2ZW4gdG8gdXMgaW4gYW55IG9yZGVyLiBTbywgd2Ug
bmVlZCB0byBzb3J0IHRoZW0gYmVmb3JlCisgICAgICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRl
SW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQg
aXQgdG8gYmUKKyAgICAgICAgLy8gZmFzdCwgc28gd2UgdXNlIGJ1YmJsZSBzb3J0LgorICAgICAg
ICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOwor
ICAgICAgICAKKyAgICAgICAgZXhlY3V0ZUluc2VydGlvbnMobV9ibG9ja3MsIG1faW5zZXJ0aW9u
cyk7CisgICAgICAgIAorICAgICAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBp
c24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0J3MKKyAgICAgICAgLy8gaGVhbHRoeSB0byBr
ZWVwIHRoZSBibG9jayBsaXN0IGZyb20gZ3Jvd2luZy4KKyAgICAgICAgbV9ibG9ja3MucmVtb3Zl
QWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2Nr
PiYgYmxvY2tQdHIpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRo
ZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9ibG9ja3NbaV0t
Pm1faW5kZXggPSBpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitw
cml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBtX2Jsb2Nr
czsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtODgsNiArODgsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CiAgICAgfQogICAgIAorICAgIEhlYXBSYW5nZSBvcGVyYXRvcnwoY29uc3QgSGVhcFJhbmdl
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBIZWFwUmFuZ2UoCisgICAgICAg
ICAgICBzdGQ6Om1pbihtX2JlZ2luLCBvdGhlci5tX2JlZ2luKSwKKyAgICAgICAgICAgIHN0ZDo6
bWF4KG1fZW5kLCBvdGhlci5tX2VuZCkpOworICAgIH0KKyAgICAKICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsgfQogCiAgICAgdW5z
aWduZWQgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01OCw2ICs1OCwxMSBAQCBWYWx1ZSogSW5zZXJ0aW9uU2V0OjppbnNlcnRCb3R0b20o
c2l6ZV90CiAgICAgcmV0dXJuIGluc2VydEJvdHRvbShpbmRleCwgbGlrZVZhbHVlLT5vcmlnaW4o
KSwgbGlrZVZhbHVlLT50eXBlKCkpOwogfQogCitWYWx1ZSogSW5zZXJ0aW9uU2V0OjppbnNlcnRD
bG9uZShzaXplX3QgaW5kZXgsIFZhbHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gaW5zZXJ0VmFs
dWUoaW5kZXgsIG1fcHJvY2VkdXJlLmNsb25lKHZhbHVlKSk7Cit9CisKIHZvaWQgSW5zZXJ0aW9u
U2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIGJ1YmJsZVNvcnQobV9pbnNl
cnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcx
LDYgKzcxLDggQEAgcHVibGljOgogCiAgICAgVmFsdWUqIGluc2VydEJvdHRvbShzaXplX3QgaW5k
ZXgsIE9yaWdpbiwgVHlwZSk7CiAgICAgVmFsdWUqIGluc2VydEJvdHRvbShzaXplX3QgaW5kZXgs
IFZhbHVlKik7CisgICAgCisgICAgVmFsdWUqIGluc2VydENsb25lKHNpemVfdCBpbmRleCwgVmFs
dWUqKTsKIAogICAgIHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2NrKik7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTU4LDExICs1OCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9wcm9jKHByb2MpCiAg
ICAgICAgICwgbV9ibG9ja0luc2VydGlvblNldChwcm9jKQogICAgICAgICAsIG1faW5zZXJ0aW9u
U2V0KHByb2MpCisgICAgICAgICwgbV91c2VDb3VudHMocHJvYykKICAgICB7CiAgICAgfQogCiAg
ICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcHJvYy5oYXNR
dWlya3MoKSk7CisgICAgICAgIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAgICAgICAgICAgICBwcm9jZXNz
Q3VycmVudEJsb2NrKCk7CkBAIC03Miw2ICs3NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBt
X3Byb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKICAgICAgICAgICAgIG1fcHJvYy5pbnZhbGlkYXRl
Q0ZHKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaW5kaWNhdGVzIHRo
YXQgd2UndmUgCisgICAgICAgIG1fcHJvYy5zZXRIYXNRdWlya3ModHJ1ZSk7CisgICAgICAgIAog
ICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0KICAgICAKQEAgLTE4NSw3ICsxOTIsOTYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBEZXBlbmQ6IHsKKyAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBsb2FkLWxvYWQgZmVuY2UuIFRoaXMgY29kZWdlbnMg
dG8gbm90aGluZyBvbiBYODYuIFdlIHVzZSBpdCB0byB0ZWxsIHRoZQorICAgICAgICAgICAgICAg
ICAgICAvLyBjb21waWxlciBub3QgdG8gYmxvY2sgbG9hZCBtb3Rpb24uCisgICAgICAgICAgICAg
ICAgICAgIEZlbmNlVmFsdWUqIGZlbmNlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PEZlbmNlVmFs
dWU+KG1faW5kZXgsIG1fb3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgZmVuY2UtPnJlYWQg
PSBIZWFwUmFuZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgZmVuY2UtPndyaXRlID0gSGVhcFJh
bmdlOjp0b3AoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8v
IEtpbGwgdGhlIERlcGVuZCwgd2hpY2ggc2hvdWxkIHVubG9jayBhIGJ1bmNoIG9mIGNvZGUgc2lt
cGxpZmljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGhCb3R0
b20obV9pbnNlcnRpb25TZXQsIG1faW5kZXgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGNhc2UgQXRv
bWljV2Vha0NBUzoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOiB7CisgICAgICAg
ICAgICAgICAgaWYgKGlzWDg2KCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVl
LT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgICAgICBXaWR0aCB3aWR0aCA9IGF0b21p
Yy0+b3BlcmF0aW9uV2lkdGgoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAoaXNDYW5vbmljYWxXaWR0aCh3aWR0aCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZhbHVlKiBleHBlY3RlZFZhbHVlID0g
YXRvbWljLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBP
biBBUk0sIHRoZSBsb2FkIHBhcnQgb2YgdGhlIENBUyBkb2VzIGEgbG9hZCB3aXRoIHplcm8gZXh0
ZW5zaW9uLiBUaGVyZWZvcmUsIHdlIG5lZWQKKyAgICAgICAgICAgICAgICAvLyB0byB6ZXJvLWV4
dGVuZCB0aGUgaW5wdXQuCisgICAgICAgICAgICAgICAgVmFsdWUqIG1hc2tlZEV4cGVjdGVkVmFs
dWUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBt
X2luZGV4LCBCaXRBbmQsIG1fb3JpZ2luLCBleHBlY3RlZFZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnRJbnRDb25zdGFudChtX2luZGV4LCBleHBlY3RlZFZh
bHVlLCBtYXNrKHdpZHRoKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGF0
b21pYy0+Y2hpbGQoMCkgPSBtYXNrZWRFeHBlY3RlZFZhbHVlOworICAgICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgICAg
ICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoK
KyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWlj
WGNoZ1hvcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZzogeworICAgICAgICAgICAgICAg
IC8vIE9uIFg4NiwgdGhlc2UgbWF5IGFjdHVhbGx5IHJldHVybiBnYXJiYWdlIGluIHRoZSBoaWdo
IGJpdHMuIE9uIEFSTTY0LCB0aGVzZSBzb3J0YQorICAgICAgICAgICAgICAgIC8vIHplcm8tZXh0
ZW5kIHRoZWlyIGhpZ2ggYml0cywgZXhjZXB0IHRoYXQgdGhlIGhpZ2ggYml0cyBtaWdodCBnZXQg
cG9sbHV0ZWQgYnkgaGlnaAorICAgICAgICAgICAgICAgIC8vIGJpdHMgaW4gdGhlIG9wZXJhbmQu
IC4gU28sIGVpdGhlciB3YXksIHdlIG5lZWQgdG8gdGhyb3cgYSBzaWduLWV4dGVuZCBvbiB0aGVz
ZQorICAgICAgICAgICAgICAgIC8vIHRoaW5ncy4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+
b3Bjb2RlKCkgPT0gQXRvbWljWGNoZ1N1YiAmJiBtX3VzZUNvdW50cy5udW1Vc2VzKG1fdmFsdWUp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbiB4ODYsIHhjaGdhZGQgaXMgYmV0dGVy
IHRoYW4geGNoZ3N1YiBpZiBpdCBoYXMgYW55IHVzZXJzLgorICAgICAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZS0+c2V0S2luZFVuc2FmZWx5KEF0b21pY1hjaGdBZGQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFs
dWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIE5lZywgbV9vcmlnaW4s
IG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBleGVtcHQgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRv
bWljWGNoZ09yOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGV4ZW1wdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChleGVtcHQpCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUt
PmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgICAgIFdpZHRoIHdpZHRoID0gYXRvbWlj
LT5vcGVyYXRpb25XaWR0aCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
IChpc0Nhbm9uaWNhbFdpZHRoKHdpZHRoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFsdWUqIG5ld1ZhbHVlID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgc2ln
bkV4dGVuZE9wY29kZSh3aWR0aCksIG1fb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnRDbG9uZShtX2luZGV4LCBtX3ZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdWYWx1
ZSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00NzAsNiArNTY2
LDcgQEAgcHJpdmF0ZToKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKICAgICBCbG9ja0luc2VydGlv
blNldCBtX2Jsb2NrSW5zZXJ0aW9uU2V0OwogICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNl
dDsKKyAgICBVc2VDb3VudHMgbV91c2VDb3VudHM7CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsK
ICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zQWZ0ZXJP
cHRpbWl6YXRpb25zLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTYsMTUgKzE1NiwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBSb3RMOiB7
CiAgICAgICAgICAgICAgICAgLy8gQVJNNjQgZG9lc24ndCBoYXZlIGEgcm90YXRlIGxlZnQuCiAg
ICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
aXNBUk02NCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbmV3U2hpZnQgPSBt
X2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIE5lZywgbV92YWx1ZS0+b3JpZ2lu
KCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBy
b3RhdGUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIFJvdFIsIG1fdmFs
dWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbmV3U2hpZnQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyb3RhdGUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgVmFsdWUqIG5ld1NoaWZ0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PihtX2luZGV4LCBOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Cisg
ICAgICAgICAgICAgICAgICAgIFZhbHVlKiByb3RhdGUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KG1faW5kZXgsIFJvdFIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgw
KSwgbmV3U2hpZnQpOworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElk
ZW50aXR5KHJvdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNw
cAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDE0IEBAIG5hbWVzcGFjZSB7CiAK
IGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCisvLyBGSVhNRTogV2Ugd291bGRuJ3QgbmVl
ZCB0aGlzIGlmIEFpciBzdXBwb3J0ZWQgV2lkdGggbW9kaWZpZXJzIGluIEFpcjo6S2luZC4KKy8v
IE9PUFMhISEgKG5lZWQgYSBidWcgVVJMKQorI2RlZmluZSBPUENPREVfRk9SX1dJRFRIKG9wY29k
ZSwgd2lkdGgpICggXAorICAgICh3aWR0aCkgPT0gV2lkdGg4ID8gb3Bjb2RlICMjIDggOiBcCisg
ICAgKHdpZHRoKSA9PSBXaWR0aDE2ID8gb3Bjb2RlICMjIDE2IDogXAorICAgICh3aWR0aCkgPT0g
V2lkdGgzMiA/IG9wY29kZSAjIyAzMiA6IFwKKyAgICBvcGNvZGUgIyMgNjQpCisKIGNsYXNzIExv
d2VyVG9BaXIgewogcHVibGljOgogICAgIExvd2VyVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUp
CkBAIC04Myw2ICs5MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kb21pbmF0b3JzKHByb2Nl
ZHVyZS5kb21pbmF0b3JzKCkpCiAgICAgICAgICwgbV9wcm9jZWR1cmUocHJvY2VkdXJlKQogICAg
ICAgICAsIG1fY29kZShwcm9jZWR1cmUuY29kZSgpKQorICAgICAgICAsIG1fYmxvY2tJbnNlcnRp
b25TZXQobV9jb2RlKQorI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgICAgICwgbV9l
YXgoWDg2UmVnaXN0ZXJzOjplYXgpCisgICAgICAgICwgbV9lY3goWDg2UmVnaXN0ZXJzOjplY3gp
CisgICAgICAgICwgbV9lZHgoWDg2UmVnaXN0ZXJzOjplZHgpCisjZW5kaWYKICAgICB7CiAgICAg
fQogCkBAIC0xMjQsMTQgKzEzOCwxOCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGhvaXN0ZWQgYWRk
cmVzcyBleHByZXNzaW9uIGJlZm9yZSB3ZSBkdXBsaWNhdGUgaXQgYmFjayBpbnRvIHRoZSBsb29w
LgogICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvY2VkdXJlLmJsb2Nr
c0luUHJlT3JkZXIoKSkgewogICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwotICAgICAgICAg
ICAgLy8gUmVzZXQgc29tZSBzdGF0ZS4KLSAgICAgICAgICAgIG1faW5zdHMucmVzaXplKDApOwog
CiAgICAgICAgICAgICBtX2lzUmFyZSA9ICFtX2Zhc3RXb3JrbGlzdC5zYXcoYmxvY2spOwogCiAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmlu
ZyBCbG9jayAiLCAqYmxvY2ssICI6XG4iKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoYXQgdGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1cCBjb3JyZWN0bHkuCisgICAg
ICAgICAgICBmb3IgKEIzOjpGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nl
c3NvcnMoKSkgeworICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vz
c29ycygpLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgQWlyOjpGcmVxdWVudGVkQmxvY2so
bV9ibG9ja1RvQmxvY2tbc3VjY2Vzc29yLmJsb2NrKCldLCBzdWNjZXNzb3IuZnJlcXVlbmN5KCkp
KTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gUHJvY2VzcyBibG9ja3MgaW4gcmV2
ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4gVGhhdCdzIHdoYXQgYWxsb3dz
IHVzCiAgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBlZmZlY3RpdmVseS4KICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsKQEAgLTE0OSwx
OSArMTY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGluc3RydWN0aW9ucy4gbV9pbnN0cyBjb250
YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIsIHNvIHdlIHByb2Nlc3MKLSAgICAgICAgICAgIC8v
IGl0IGluIHJldmVyc2UuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luc3RzLnNp
emUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IG1faW5zdHNb
aV0pCi0gICAgICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+YXBwZW5kSW5z
dChXVEZNb3ZlKGluc3QpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgdGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1cCBjb3JyZWN0bHkuCi0gICAgICAgICAg
ICBmb3IgKEIzOjpGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMo
KSkgewotICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vzc29ycygp
LmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgQWlyOjpGcmVxdWVudGVkQmxvY2sobV9ibG9j
a1RvQmxvY2tbc3VjY2Vzc29yLmJsb2NrKCldLCBzdWNjZXNzb3IuZnJlcXVlbmN5KCkpKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmlzaEFwcGVuZGluZ0luc3RydWN0aW9ucyhtX2Js
b2NrVG9CbG9ja1tibG9ja10pOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2Jsb2Nr
SW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKIAogICAgICAgICBBaXI6Okluc2VydGlvblNldCBpbnNl
cnRpb25TZXQobV9jb2RlKTsKICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9wcm9sb2d1ZSkK
QEAgLTUzOCw3ICs1NDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwog
CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gdmFsdWUtPm9mZnNldCgpOwotICAgICAgICBXaWR0
aCB3aWR0aCA9IHZhbHVlLT5hY2Nlc3NXaWR0aCgpOworICAgICAgICBXaWR0aCB3aWR0aCA9IHZh
bHVlLT5sb2FkU3RvcmVXaWR0aCgpOwogCiAgICAgICAgIEFyZyByZXN1bHQgPSBlZmZlY3RpdmVB
ZGRyKHZhbHVlLT5sYXN0Q2hpbGQoKSwgb2Zmc2V0LCB3aWR0aCk7CiAgICAgICAgIEFTU0VSVChy
ZXN1bHQuaXNWYWxpZEZvcm0od2lkdGgpKTsKQEAgLTU2MiwxMSArNTcxLDE2IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgQXJnUHJvbWlzZSBsb2FkUHJvbWlzZUFueU9wY29kZShWYWx1ZSogbG9hZFZh
bHVlKQogICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobG9hZFZhbHVlLT5hczxNZW1vcnlW
YWx1ZT4oKSk7CiAgICAgICAgIGlmICghY2FuQmVJbnRlcm5hbChsb2FkVmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuIEFyZygpOwogICAgICAgICBpZiAoY3Jvc3Nlc0ludGVyZmVyZW5jZShsb2Fk
VmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwotICAgICAgICBBcmdQcm9taXNlIHJl
c3VsdChhZGRyKGxvYWRWYWx1ZSksIGxvYWRWYWx1ZSk7CisgICAgICAgIGlmIChsb2FkVmFsdWUt
PmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygp
OworICAgICAgICBBcmcgbG9hZEFkZHIgPSBhZGRyKGxvYWRWYWx1ZSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGxvYWRBZGRyKTsKKyAgICAgICAgQXJnUHJvbWlzZSByZXN1bHQobG9hZEFkZHIs
IGxvYWRWYWx1ZSk7CiAgICAgICAgIGlmIChsb2FkVmFsdWUtPnRyYXBzKCkpCiAgICAgICAgICAg
ICByZXN1bHQuc2V0VHJhcHModHJ1ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC04OTgs
MTEgKzkxMiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
I2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCiAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAodmFs
dWUpLCB0bXAobV92YWx1ZSkpOwotICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGFtb3VudCksIFRt
cChYODZSZWdpc3RlcnM6OmVjeCkpOwotICAgICAgICBhcHBlbmQob3Bjb2RlLCBUbXAoWDg2UmVn
aXN0ZXJzOjplY3gpLCB0bXAobV92YWx1ZSkpOwotI2VuZGlmCisgICAgICAgIGFwcGVuZChNb3Zl
LCB0bXAoYW1vdW50KSwgbV9lY3gpOworICAgICAgICBhcHBlbmQob3Bjb2RlLCBtX2VjeCwgdG1w
KG1fdmFsdWUpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGUzMiwg
QWlyOjpPcGNvZGUgb3Bjb2RlNjQ+CkBAIC05MzEsMTAgKzk0MywxNSBAQCBwcml2YXRlOgogICAg
ICAgICBBaXI6Ok9wY29kZSBvcGNvZGUzMiwgQWlyOjpPcGNvZGUgb3Bjb2RlNjQsIENvbW11dGF0
aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgogICAgIGJvb2wgdHJ5QXBwZW5k
U3RvcmVCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQogICAgIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpOworICAgICAgICAKICAgICAg
ICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShvcGNvZGUzMiwgb3Bjb2Rl
NjQsIGxlZnQtPnR5cGUoKSk7CiAgICAgICAgIGlmIChvcGNvZGUgPT0gQWlyOjpPb3BzKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmFz
PE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKICAgICAgICAgQXJnIHN0b3JlQWRkciA9IGFkZHIobV92YWx1ZSk7CiAgICAgICAg
IEFTU0VSVChzdG9yZUFkZHIpOwogCkBAIC05OTQsMTAgKzEwMTEsNDggQEAgcHJpdmF0ZToKIAog
ICAgICAgICByZXR1cm4gSW5zdChtb3ZlLCBtX3ZhbHVlLCB0bXAodmFsdWUpLCBkZXN0KTsKICAg
ICB9CisgICAgCisgICAgQWlyOjpPcGNvZGUgc3RvcmVPcGNvZGUoV2lkdGggd2lkdGgsIEJhbmsg
YmFuaywgYm9vbCByZWxlYXNlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAg
ICAgICBjYXNlIFdpZHRoODoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhbmsgPT0gR1Ap
OworICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBTdG9yZVJlbDggOiBTdG9yZTg7CisgICAg
ICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhbmsgPT0gR1Ap
OworICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBTdG9yZVJlbDE2IDogU3RvcmUxNjsKKyAg
ICAgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAg
ICAgICBjYXNlIEdQOgorICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlID8gU3RvcmVSZWwz
MiA6IE1vdmUzMjsKKyAgICAgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIXJlbGVhc2UpOworICAgICAgICAgICAgICAgIHJldHVybiBNb3ZlRmxvYXQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXaWR0aDY0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXM2NEJpdCgpKTsKKyAgICAgICAgICAgIHN3aXRj
aCAoYmFuaykgeworICAgICAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVsZWFzZSA/IFN0b3JlUmVsNjQgOiBNb3ZlOworICAgICAgICAgICAgY2FzZSBGUDoKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVsZWFzZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIE1vdmVEb3VibGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAK
KyAgICBBaXI6Ok9wY29kZSBzdG9yZU9wY29kZShWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAg
ICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAg
ICByZXR1cm4gc3RvcmVPcGNvZGUobWVtb3J5LT5sb2FkU3RvcmVXaWR0aCgpLCBtZW1vcnktPmFj
Y2Vzc0JhbmsoKSwgbWVtb3J5LT5oYXNGZW5jZSgpKTsKKyAgICB9CiAKICAgICBJbnN0IGNyZWF0
ZVN0b3JlKFZhbHVlKiB2YWx1ZSwgY29uc3QgQXJnJiBkZXN0KQogICAgIHsKLSAgICAgICAgQWly
OjpPcGNvZGUgbW92ZU9wY29kZSA9IG1vdmVGb3JUeXBlKHZhbHVlLT50eXBlKCkpOworICAgICAg
ICBBaXI6Ok9wY29kZSBtb3ZlT3Bjb2RlID0gc3RvcmVPcGNvZGUodmFsdWUpOwogICAgICAgICBy
ZXR1cm4gY3JlYXRlU3RvcmUobW92ZU9wY29kZSwgdmFsdWUsIGRlc3QpOwogICAgIH0KIApAQCAt
MTAwNiw3ICsxMDYxLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGFwcGVuZCh0cmFwcGlu
Z0luc3QobV92YWx1ZSwgY3JlYXRlU3RvcmUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSkp
OwogICAgIH0KLQorICAgIAogICAgIEFpcjo6T3Bjb2RlIG1vdmVGb3JUeXBlKFR5cGUgdHlwZSkK
ICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMTA3Myw3ICsxMTI4LDQxIEBAIHBy
aXZhdGU6CiAgICAgewogICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoaW5zdCk7CiAgICAg
fQorICAgIAorICAgIHZvaWQgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKEFpcjo6QmFzaWNC
bG9jayogdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rp
b25zLiBtX2luc3RzIGNvbnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2Vz
cworICAgICAgICAvLyBpdCBpbiByZXZlcnNlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2luc3RzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9p
bnN0c1tpXSkKKyAgICAgICAgICAgICAgICB0YXJnZXQtPmFwcGVuZEluc3QoV1RGTW92ZShpbnN0
KSk7CisgICAgICAgIH0KKyAgICAgICAgbV9pbnN0cy5yZXNpemUoMCk7CisgICAgfQorICAgIAor
ICAgIEFpcjo6QmFzaWNCbG9jayogbmV3QmxvY2soKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
YmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0QWZ0ZXIobV9ibG9ja1RvQmxvY2tbbV9ibG9ja10pOwor
ICAgIH0KIAorICAgIC8vIE5PVEU6IFRoaXMgd2lsbCBjcmVhdGUgYSBjb250aW51YXRpb24gYmxv
Y2sgKGBuZXh0QmxvY2tgKSAqYWZ0ZXIqIGFueSBibG9ja3MgeW91J3ZlIGNyZWF0ZWQgdXNpbmcK
KyAgICAvLyBuZXdCbG9jaygpLiBTbywgaXQncyBwcmVmZXJhYmxlIHRvIGNyZWF0ZSBhbGwgb2Yg
eW91ciBibG9ja3MgdXBmcm9udCB1c2luZyBuZXdCbG9jaygpLiBBbHNvIG5vdGUKKyAgICAvLyB0
aGF0IGFueSBjb2RlIHlvdSBlbWl0IGJlZm9yZSB0aGlzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRo
ZSBjb250aW51YXRpb24sIGFuZCBhbnkgY29kZSB5b3UgZW1pdAorICAgIC8vIGFmdGVyIHRoaXMg
d2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgcHJldmlvdXMgYmxvY2suCisgICAgdm9pZCBzcGxpdEJs
b2NrKEFpcjo6QmFzaWNCbG9jayomIHByZXZpb3VzQmxvY2ssIEFpcjo6QmFzaWNCbG9jayomIG5l
eHRCbG9jaykKKyAgICB7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nr
VG9CbG9ja1ttX2Jsb2NrXTsKKyAgICAgICAgCisgICAgICAgIHByZXZpb3VzQmxvY2sgPSBibG9j
azsKKyAgICAgICAgbmV4dEJsb2NrID0gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRBZnRlcihi
bG9jayk7CisgICAgICAgIAorICAgICAgICBmaW5pc2hBcHBlbmRpbmdJbnN0cnVjdGlvbnMobmV4
dEJsb2NrKTsKKyAgICAgICAgbmV4dEJsb2NrLT5zdWNjZXNzb3JzKCkgPSBibG9jay0+c3VjY2Vz
c29ycygpOworICAgICAgICBibG9jay0+c3VjY2Vzc29ycygpLmNsZWFyKCk7CisgICAgICAgIAor
ICAgICAgICBtX2luc3RzLmFwcGVuZChWZWN0b3I8SW5zdD4oKSk7CisgICAgfQorICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICBUKiBlbnN1
cmVTcGVjaWFsKFQqJiBmaWVsZCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQogICAgIHsKQEAg
LTExMjMsNyArMTIxMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgogICAgICAgICAgICAgICAgIGFy
ZyA9IEFyZzo6Y2FsbEFyZyh2YWx1ZS5yZXAoKS5vZmZzZXRGcm9tU1AoKSk7Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kU3RvcmUodmFsdWUudmFsdWUoKSwgYXJnKTsKKyAgICAgICAgICAgICAgICBh
cHBlbmRTdG9yZShtb3ZlRm9yVHlwZSh2YWx1ZS52YWx1ZSgpKSwgYXJnKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE5NjEsNiArMjA1MCwzMDggQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgdm9pZCBhcHBlbmRYODZEaXYoQjM6
Ok9wY29kZSBvcCkKKyAgICB7CisgICAgICAgIEFpcjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJsZVdv
cmQ7CisgICAgICAgIEFpcjo6T3Bjb2RlIGRpdjsKKyAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT50
eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJs
ZVdvcmQgPSBYODZDb252ZXJ0VG9Eb3VibGVXb3JkMzI7CisgICAgICAgICAgICBkaXYgPSBYODZE
aXYzMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAg
ICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb1F1YWRXb3JkNjQ7CisgICAgICAg
ICAgICBkaXYgPSBYODZEaXY2NDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChvcCA9PSBEaXYgfHwgb3AgPT0g
TW9kKTsKKyAgICAgICAgVG1wIHJlc3VsdCA9IG9wID09IERpdiA/IG1fZWF4IDogbV9lZHg7CisK
KyAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIG1fZWF4KTsKKyAg
ICAgICAgYXBwZW5kKGNvbnZlcnRUb0RvdWJsZVdvcmQsIG1fZWF4LCBtX2VkeCk7CisgICAgICAg
IGFwcGVuZChkaXYsIG1fZWF4LCBtX2VkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAg
ICAgIGFwcGVuZChNb3ZlLCByZXN1bHQsIHRtcChtX3ZhbHVlKSk7CisgICAgfQorCisgICAgdm9p
ZCBhcHBlbmRYODZVRGl2KEIzOjpPcGNvZGUgb3ApCisgICAgeworICAgICAgICBBaXI6Ok9wY29k
ZSBkaXYgPSBtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyBYODZVRGl2MzIgOiBYODZVRGl2NjQ7
CisKKyAgICAgICAgQVNTRVJUKG9wID09IFVEaXYgfHwgb3AgPT0gVU1vZCk7CisgICAgICAgIFRt
cCByZXN1bHQgPSBvcCA9PSBVRGl2ID8gbV9lYXggOiBtX2VkeDsKKworICAgICAgICBhcHBlbmQo
TW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgbV9lYXgpOworICAgICAgICBhcHBlbmQoWG9y
NjQsIG1fZWR4LCBtX2VkeCk7CisgICAgICAgIGFwcGVuZChkaXYsIG1fZWF4LCBtX2VkeCwgdG1w
KG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCByZXN1bHQsIHRtcCht
X3ZhbHVlKSk7CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bjb2RlIGxvYWRMaW5rT3Bjb2RlKFdp
ZHRoIHdpZHRoLCBib29sIGZlbmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZlbmNlID8gT1BD
T0RFX0ZPUl9XSURUSChMb2FkTGlua0FjcSwgd2lkdGgpIDogT1BDT0RFX0ZPUl9XSURUSChMb2Fk
TGluaywgd2lkdGgpOworICAgIH0KKyAgICAKKyAgICBBaXI6Ok9wY29kZSBzdG9yZUNvbmRPcGNv
ZGUoV2lkdGggd2lkdGgsIGJvb2wgZmVuY2UpCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2Ug
PyBPUENPREVfRk9SX1dJRFRIKFN0b3JlQ29uZFJlbCwgd2lkdGgpIDogT1BDT0RFX0ZPUl9XSURU
SChTdG9yZUNvbmQsIHdpZHRoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBjYW4gZW1pdCBj
b2RlIGZvciB0aGUgZm9sbG93aW5nIHBhdHRlcm5zOgorICAgIC8vIEF0b21pY1dlYWtDQVMKKyAg
ICAvLyBCaXRYb3IoQXRvbWljV2Vha0NBUywgMSkKKyAgICAvLyBBdG9taWNTdHJvbmdDQVMKKyAg
ICAvLyBFcXVhbChBdG9taWNTdHJvbmdDQVMsIGV4cGVjdGVkKQorICAgIC8vIE5vdEVxdWFsKEF0
b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpCisgICAgLy8gQnJhbmNoKEF0b21pY1dlYWtDQVMpCisg
ICAgLy8gQnJhbmNoKEVxdWFsKEF0b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpKQorICAgIC8vIEJy
YW5jaChOb3RFcXVhbChBdG9taWNTdHJvbmdDQVMsIGV4cGVjdGVkKSkKKyAgICAvLworICAgIC8v
IEl0IGFzc3VtZXMgdGhhdCBhdG9taWNWYWx1ZSBwb2ludHMgdG8gdGhlIENBUywgYW5kIG1fdmFs
dWUgcG9pbnRzIHRvIHRoZSBpbnN0cnVjdGlvbiBiZWluZworICAgIC8vIGdlbmVyYXRlZC4gSXQg
YXNzdW1lcyB0aGF0IHlvdSd2ZSBjb25zdW1lZCBldmVyeXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUg
Y29uc3VtZWQuCisgICAgdm9pZCBhcHBlbmRDQVMoVmFsdWUqIGF0b21pY1ZhbHVlLCBib29sIGlu
dmVydCkKKyAgICB7CisgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBhdG9taWNWYWx1ZS0+
YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGF0b21pYyk7CisgICAg
ICAgIAorICAgICAgICBib29sIGlzQnJhbmNoID0gbV92YWx1ZS0+b3AoKSA9PSBCcmFuY2g7Cisg
ICAgICAgIGJvb2wgaXNTdHJvbmcgPSBhdG9taWMtPm9wKCkgPT0gQXRvbWljU3Ryb25nQ0FTOwor
ICAgICAgICBib29sIHJldHVybnNPbGRWYWx1ZSA9IG1fdmFsdWUtPm9wKCkgPT0gQXRvbWljU3Ry
b25nQ0FTOworICAgICAgICAKKyAgICAgICAgV2lkdGggd2lkdGggPSBhdG9taWMtPm9wZXJhdGlv
bldpZHRoKCk7CisgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihhdG9taWMpOworCisgICAgICAg
IFRtcCB2YWx1ZVJlc3VsdFRtcDsKKyAgICAgICAgVG1wIGJvb2xSZXN1bHRUbXA7CisgICAgICAg
IGlmIChyZXR1cm5zT2xkVmFsdWUpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbnZl
cnQpOworICAgICAgICAgICAgdmFsdWVSZXN1bHRUbXAgPSB0bXAobV92YWx1ZSk7CisgICAgICAg
ICAgICBib29sUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgIH0gZWxzZSBp
ZiAoaXNCcmFuY2gpIHsKKyAgICAgICAgICAgIHZhbHVlUmVzdWx0VG1wID0gbV9jb2RlLm5ld1Rt
cChHUCk7CisgICAgICAgICAgICBib29sUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVJlc3VsdFRtcCA9IG1fY29kZS5uZXdU
bXAoR1ApOworICAgICAgICAgICAgYm9vbFJlc3VsdFRtcCA9IHRtcChtX3ZhbHVlKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgVG1wIHN1Y2Nlc3NCb29sUmVzdWx0VG1wOworICAgICAg
ICBpZiAoaXNTdHJvbmcgJiYgIWlzQnJhbmNoKQorICAgICAgICAgICAgc3VjY2Vzc0Jvb2xSZXN1
bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3Vj
Y2Vzc0Jvb2xSZXN1bHRUbXAgPSBib29sUmVzdWx0VG1wOworCisgICAgICAgIFRtcCBleHBlY3Rl
ZFZhbHVlVG1wID0gdG1wKGF0b21pYy0+Y2hpbGQoMCkpOworICAgICAgICBUbXAgbmV3VmFsdWVU
bXAgPSB0bXAoYXRvbWljLT5jaGlsZCgxKSk7CisgICAgICAgIAorICAgICAgICBGcmVxdWVudGVk
QmxvY2sgc3VjY2VzczsKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrIGZhaWx1cmU7CisgICAgICAg
IGlmIChpc0JyYW5jaCkgeworICAgICAgICAgICAgc3VjY2VzcyA9IG1fYmxvY2tUb0Jsb2NrW21f
YmxvY2tdLT5zdWNjZXNzb3IoaW52ZXJ0KTsKKyAgICAgICAgICAgIGZhaWx1cmUgPSBtX2Jsb2Nr
VG9CbG9ja1ttX2Jsb2NrXS0+c3VjY2Vzc29yKCFpbnZlcnQpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3Zl
Rm9yVHlwZShhdG9taWMtPm9wZXJhdGlvblR5cGUoKSksIGltbU9yVG1wKGF0b21pYy0+Y2hpbGQo
MCkpLCBtX2VheCk7CisgICAgICAgICAgICBpZiAocmV0dXJuc09sZFZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgYXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljU3Ryb25nQ0FTLCB3aWR0aCks
IG1fZWF4LCBuZXdWYWx1ZVRtcCwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgYXBwZW5kKHJl
bGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPm9wZXJhdGlvblR5cGUoKSksIG1fZWF4LCB2YWx1ZVJl
c3VsdFRtcCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQnJhbmNoKSB7CisgICAgICAgICAg
ICAgICAgYXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoQnJhbmNoQXRvbWljU3Ryb25nQ0FTLCB3aWR0
aCksIEFyZzo6c3RhdHVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6U3VjY2VzcyksIG1fZWF4LCBuZXdW
YWx1ZVRtcCwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbbV9ibG9j
a10tPnNldFN1Y2Nlc3NvcnMoc3VjY2VzcywgZmFpbHVyZSk7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNTdHJvbmdDQVMs
IHdpZHRoKSwgQXJnOjpzdGF0dXNDb25kKGludmVydCA/IE1hY3JvQXNzZW1ibGVyOjpGYWlsdXJl
IDogTWFjcm9Bc3NlbWJsZXI6OlN1Y2Nlc3MpLCBtX2VheCwgdG1wKGF0b21pYy0+Y2hpbGQoMSkp
LCBhZGRyZXNzLCBib29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsKKyAgICAgICAg
Ly8gV2Ugd2lzaCB0byBlbWl0OgorICAgICAgICAvLworICAgICAgICAvLyBCbG9jayAjcmVsb29w
OgorICAgICAgICAvLyAgICAgTG9hZExpbmsKKyAgICAgICAgLy8gICAgIEJyYW5jaCBOb3RFcXVh
bAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6IFRoZW46I2ZhaWwsIEVsc2U6ICNzdG9yZQorICAg
ICAgICAvLyBCbG9jayAjc3RvcmU6CisgICAgICAgIC8vICAgICBTdG9yZUNvbmQKKyAgICAgICAg
Ly8gICAgIFhvciAkMSwgJXJlc3VsdCAgICA8LS0tIG9ubHkgaWYgIWludmVydAorICAgICAgICAv
LyAgICAgSnVtcAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6ICNkb25lCisgICAgICAgIC8vIEJs
b2NrICNmYWlsOgorICAgICAgICAvLyAgICAgTW92ZSAkaW52ZXJ0LCAlcmVzdWx0CisgICAgICAg
IC8vICAgICBKdW1wCisgICAgICAgIC8vICAgU3VjY2Vzc29yczogI2RvbmUKKyAgICAgICAgLy8g
QmxvY2sgI2RvbmU6CisgICAgICAgIAorICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHJlbG9vcEJs
b2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBzdG9yZUJsb2NrID0g
bmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBzdWNjZXNzQmxvY2sgPSBudWxs
cHRyOworICAgICAgICBpZiAoIWlzQnJhbmNoICYmIGlzU3Ryb25nKQorICAgICAgICAgICAgc3Vj
Y2Vzc0Jsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBmYWlsQmxv
Y2sgPSBudWxscHRyOworICAgICAgICBpZiAoIWlzQnJhbmNoKQorICAgICAgICAgICAgZmFpbEJs
b2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBzdHJvbmdGYWlsQmxv
Y2s7CisgICAgICAgIGlmIChpc1N0cm9uZykKKyAgICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9jayA9
IG5ld0Jsb2NrKCk7CisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayBjb21wYXJpc29uRmFpbDsKKyAg
ICAgICAgRnJlcXVlbnRlZEJsb2NrIHdlYWtGYWlsOworICAgICAgICBpZiAoaXNTdHJvbmcpIHsK
KyAgICAgICAgICAgIGNvbXBhcmlzb25GYWlsID0gc3Ryb25nRmFpbEJsb2NrOworICAgICAgICAg
ICAgd2Vha0ZhaWwgPSByZWxvb3BCbG9jazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmIChpc0JyYW5jaCkKKyAgICAgICAgICAgICAgICBjb21wYXJpc29uRmFpbCA9IGZhaWx1cmU7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGFyaXNvbkZhaWwgPSBmYWls
QmxvY2s7CisgICAgICAgICAgICB3ZWFrRmFpbCA9IGZhaWx1cmU7CisgICAgICAgIH0KKyAgICAg
ICAgQWlyOjpCYXNpY0Jsb2NrKiBiZWdpbkJsb2NrOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sq
IGRvbmVCbG9jazsKKyAgICAgICAgc3BsaXRCbG9jayhiZWdpbkJsb2NrLCBkb25lQmxvY2spOwor
ICAgICAgICAKKyAgICAgICAgYXBwZW5kKEp1bXApOworICAgICAgICBiZWdpbkJsb2NrLT5zZXRT
dWNjZXNzb3JzKHJlbG9vcEJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIHJlbG9vcEJsb2NrLT5h
cHBlbmQobG9hZExpbmtPcGNvZGUod2lkdGgsIGF0b21pYy0+aGFzRmVuY2UoKSksIG1fdmFsdWUs
IHZhbHVlUmVzdWx0VG1wLCBhZGRyZXNzKTsKKyAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChP
UENPREVfRk9SX1dJRFRIKEJyYW5jaCwgY2Fub25pY2FsV2lkdGgod2lkdGgpKSwgbV92YWx1ZSwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCkgdmFsdWVSZXN1bHRUbXAsIGV4
cGVjdGVkVmFsdWVUbXApOworICAgICAgICByZWxvb3BCbG9jay0+c2V0U3VjY2Vzc29ycyhjb21w
YXJpc29uRmFpbCwgc3RvcmVCbG9jayk7CisgICAgICAgIAorICAgICAgICBzdG9yZUJsb2NrLT5h
cHBlbmQoc3RvcmVDb25kT3Bjb2RlKHdpZHRoLCBhdG9taWMtPmhhc0ZlbmNlKCkpLCBtX3ZhbHVl
LCBuZXdWYWx1ZVRtcCwgYWRkcmVzcywgc3VjY2Vzc0Jvb2xSZXN1bHRUbXApOworICAgICAgICBp
ZiAoaXNCcmFuY2gpIHsKKyAgICAgICAgICAgIHN0b3JlQmxvY2stPmFwcGVuZChCcmFuY2hUZXN0
MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGJvb2xSZXN1bHRUbXAsIEFy
Zzo6Yml0SW1tKC0xKSk7CisgICAgICAgICAgICBzdG9yZUJsb2NrLT5zZXRTdWNjZXNzb3JzKHN1
Y2Nlc3MsIHdlYWtGYWlsKTsKKyAgICAgICAgICAgIGRvbmVCbG9jay0+c3VjY2Vzc29ycygpLmNs
ZWFyKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghZG9uZUJsb2NrLT5zaXplKCkpOwor
ICAgICAgICAgICAgZG9uZUJsb2NrLT5hcHBlbmQoT29wcywgbV92YWx1ZSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNTdHJvbmcpIHsKKyAgICAgICAgICAgICAgICBzdG9y
ZUJsb2NrLT5hcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6
Olplcm8pLCBzdWNjZXNzQm9vbFJlc3VsdFRtcCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAg
ICAgICAgICBzdG9yZUJsb2NrLT5zZXRTdWNjZXNzb3JzKHN1Y2Nlc3NCbG9jaywgcmVsb29wQmxv
Y2spOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN1Y2Nlc3NCbG9jay0+YXBw
ZW5kKE1vdmUsIG1fdmFsdWUsIEFyZzo6aW1tKCFpbnZlcnQpLCBib29sUmVzdWx0VG1wKTsKKyAg
ICAgICAgICAgICAgICBzdWNjZXNzQmxvY2stPmFwcGVuZChKdW1wLCBtX3ZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBzdWNjZXNzQmxvY2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFpbnZlcnQpCisgICAgICAgICAg
ICAgICAgICAgIHN0b3JlQmxvY2stPmFwcGVuZChYb3IzMiwgbV92YWx1ZSwgQXJnOjpiaXRJbW0o
MSksIGJvb2xSZXN1bHRUbXAsIGJvb2xSZXN1bHRUbXApOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHN0b3JlQmxvY2stPmFwcGVuZChKdW1wLCBtX3ZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBzdG9yZUJsb2NrLT5zZXRTdWNjZXNzb3JzKGRvbmVCbG9jayk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZhaWxCbG9jay0+YXBwZW5kKE1vdmUsIG1f
dmFsdWUsIEFyZzo6aW1tKGludmVydCksIGJvb2xSZXN1bHRUbXApOworICAgICAgICAgICAgZmFp
bEJsb2NrLT5hcHBlbmQoSnVtcCwgbV92YWx1ZSk7CisgICAgICAgICAgICBmYWlsQmxvY2stPnNl
dFN1Y2Nlc3NvcnMoZG9uZUJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KGlzU3Ryb25nKSB7CisgICAgICAgICAgICBUbXAgdG1wID0gbV9jb2RlLm5ld1RtcChHUCk7Cisg
ICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2stPmFwcGVuZChzdG9yZUNvbmRPcGNvZGUod2lkdGgs
IGF0b21pYy0+aGFzRmVuY2UoKSksIG1fdmFsdWUsIHZhbHVlUmVzdWx0VG1wLCBhZGRyZXNzLCB0
bXApOworICAgICAgICAgICAgc3Ryb25nRmFpbEJsb2NrLT5hcHBlbmQoQnJhbmNoVGVzdDMyLCBB
cmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCB0bXAsIEFyZzo6Yml0SW1tKC0xKSk7
CisgICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2stPnNldFN1Y2Nlc3NvcnMoZmFpbEJsb2NrLCBy
ZWxvb3BCbG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBhcHBlbmRWb2lk
QXRvbWljKEFpcjo6T3Bjb2RlIGF0b21pY09wY29kZSkKKyAgICB7CisgICAgICAgIGlmIChtX3Vz
ZUNvdW50cy5udW1Vc2VzKG1fdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAKKyAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKG1fdmFsdWUpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGlzVmFsaWRGb3JtKGF0b21pY09wY29kZSwgQXJnOjpJbW0sIGFkZHJlc3Mua2lu
ZCgpKSAmJiBpbW0obV92YWx1ZS0+Y2hpbGQoMCkpKSB7CisgICAgICAgICAgICBhcHBlbmQoYXRv
bWljT3Bjb2RlLCBpbW0obV92YWx1ZS0+Y2hpbGQoMCkpLCBhZGRyZXNzKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXNWYWxpZEZv
cm0oYXRvbWljT3Bjb2RlLCBBcmc6OlRtcCwgYWRkcmVzcy5raW5kKCkpKSB7CisgICAgICAgICAg
ICBhcHBlbmQoYXRvbWljT3Bjb2RlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBhZGRyZXNzKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmRHZW5lcmFsQXRvbWljKEFp
cjo6T3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBt
X3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgCisgICAgICAgIEFyZyBhZGRyZXNz
ID0gYWRkcihtX3ZhbHVlKTsKKyAgICAgICAgVG1wIG9sZFZhbHVlID0gbV9jb2RlLm5ld1RtcChH
UCk7CisgICAgICAgIFRtcCBuZXdWYWx1ZSA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAK
KyAgICAgICAgLy8gV2UgbmVlZCBhIENBUyBsb29wIG9yIGEgTEwvU0MgbG9vcC4gVXNpbmcgcHJl
cGFyZS9hdHRlbXB0IGphcmdvbiwgd2Ugd2FudDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQmxv
Y2sgI3JlbG9vcDoKKyAgICAgICAgLy8gICAgIFByZXBhcmUKKyAgICAgICAgLy8gICAgIG9wY29k
ZQorICAgICAgICAvLyAgICAgQXR0ZW1wdAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6IFRoZW46
I2RvbmUsIEVsc2U6I3JlbG9vcAorICAgICAgICAvLyBCbG9jayAjZG9uZToKKyAgICAgICAgLy8g
ICAgIE1vdmUgb2xkVmFsdWUsIHJlc3VsdAorICAgICAgICAKKyAgICAgICAgYXBwZW5kKHJlbGF4
ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUoKSksIG9sZFZhbHVlLCB0bXAoYXRvbWljKSk7Cisg
ICAgICAgIAorICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHJlbG9vcEJsb2NrID0gbmV3QmxvY2so
KTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBiZWdpbkJsb2NrOworICAgICAgICBBaXI6OkJh
c2ljQmxvY2sqIGRvbmVCbG9jazsKKyAgICAgICAgc3BsaXRCbG9jayhiZWdpbkJsb2NrLCBkb25l
QmxvY2spOworICAgICAgICAKKyAgICAgICAgYXBwZW5kKEp1bXApOworICAgICAgICBiZWdpbkJs
b2NrLT5zZXRTdWNjZXNzb3JzKHJlbG9vcEJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIEFpcjo6
T3Bjb2RlIHByZXBhcmVPcGNvZGU7CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkgeworICAgICAgICAgICAgY2FzZSBX
aWR0aDg6CisgICAgICAgICAgICAgICAgcHJlcGFyZU9wY29kZSA9IExvYWQ4U2lnbmVkRXh0ZW5k
VG8zMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2lkdGgxNjoK
KyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2lkdGgzMjoKKyAgICAg
ICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTW92ZTMyOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAgICAgICAgIHByZXBhcmVPcGNv
ZGUgPSBNb3ZlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsKKyAgICAg
ICAgICAgIG9wY29kZSA9IGxvYWRMaW5rT3Bjb2RlKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSwg
YXRvbWljLT5oYXNGZW5jZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZWxvb3BCbG9jay0+YXBw
ZW5kKHByZXBhcmVPcGNvZGUsIG1fdmFsdWUsIGFkZHJlc3MsIG9sZFZhbHVlKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChvcGNvZGUgIT0gTm9wKSB7CisgICAgICAgICAgICBpZiAoaW1tKGF0b21p
Yy0+Y2hpbGQoMCkpICYmIGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIEFyZzo6VG1wLCBB
cmc6OlRtcCkpCisgICAgICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChvcGNvZGUsIG1f
dmFsdWUsIGltbShhdG9taWMtPmNoaWxkKDApKSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBB
cmc6OlRtcCkpCisgICAgICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChvcGNvZGUsIG1f
dmFsdWUsIHRtcChhdG9taWMtPmNoaWxkKDApKSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQocmVsYXhl
ZE1vdmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaW1tKGF0b21pYy0+Y2hpbGQoMCkpICYmIGlzVmFsaWRGb3JtKG9wY29k
ZSwgQXJnOjpJbW0sIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICAgICAgcmVsb29wQmxvY2st
PmFwcGVuZChvcGNvZGUsIG1fdmFsdWUsIGltbShhdG9taWMtPmNoaWxkKDApKSwgbmV3VmFsdWUp
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVsb29wQmxvY2st
PmFwcGVuZChvcGNvZGUsIG1fdmFsdWUsIHRtcChhdG9taWMtPmNoaWxkKDApKSwgbmV3VmFsdWUp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAg
ICAgICAgICAgIEFpcjo6T3Bjb2RlIGNhc09wY29kZSA9IE9QQ09ERV9GT1JfV0lEVEgoQnJhbmNo
QXRvbWljU3Ryb25nQ0FTLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpOworICAgICAgICAgICAg
cmVsb29wQmxvY2stPmFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCBv
bGRWYWx1ZSwgbV9lYXgpOworICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChjYXNPcGNv
ZGUsIG1fdmFsdWUsIEFyZzo6c3RhdHVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6U3VjY2VzcyksIG1f
ZWF4LCBuZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOworICAgICAgICAgICAgVG1wIGJvb2xSZXN1bHQgPSBt
X2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQoc3RvcmVD
b25kT3Bjb2RlKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSwgYXRvbWljLT5oYXNGZW5jZSgpKSwg
bmV3VmFsdWUsIGFkZHJlc3MsIGJvb2xSZXN1bHQpOworICAgICAgICAgICAgcmVsb29wQmxvY2st
PmFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyks
IGJvb2xSZXN1bHQsIEFyZzo6Yml0SW1tKC0xKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVsb29w
QmxvY2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrLCByZWxvb3BCbG9jayk7CisgICAgfQorICAg
IAogICAgIHZvaWQgbG93ZXIoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNv
ZGUoKSkgewpAQCAtMTk3MSwzMCArMjM2Miw1MCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBMb2FkOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBp
bmdJbnN0KG1fdmFsdWUsIG1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksIG1fdmFsdWUsIGFk
ZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1l
bW9yeSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICAgICAgQWlyOjpPcGNv
ZGUgb3Bjb2RlID0gQWlyOjpPb3BzOworICAgICAgICAgICAgaWYgKG1lbW9yeS0+aGFzRmVuY2Uo
KSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobWVtb3J5LT50eXBlKCkpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBMb2FkQWNx
MzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW50
NjQ6CisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IExvYWRBY3E2NDsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgb3Bjb2RlID0gbW92ZUZvclR5cGUobWVtb3J5LT50eXBlKCkpOworICAgICAgICAgICAg
YXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1
ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBMb2FkOFM6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFw
cGluZ0luc3QobV92YWx1ZSwgTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBtX3ZhbHVlLCBhZGRyKG1f
dmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9
IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpID8gTG9hZEFjcThTaWduZWRF
eHRlbmRUbzMyIDogTG9hZDhTaWduZWRFeHRlbmRUbzMyOworICAgICAgICAgICAgYXBwZW5kKHRy
YXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcCht
X3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBMb2FkOFo6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9h
ZDgsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAg
QWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNl
KCkgPyBMb2FkQWNxOCA6IExvYWQ4OworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdCht
X3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBMb2FkMTZTOiB7
Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQxNlNpZ25lZEV4
dGVuZFRvMzIsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhh
c0ZlbmNlKCkgPyBMb2FkQWNxMTZTaWduZWRFeHRlbmRUbzMyIDogTG9hZDE2U2lnbmVkRXh0ZW5k
VG8zMjsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBt
X3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDE2WjogewotICAgICAgICAgICAgYXBw
ZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkMTYsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSks
IHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxMTYgOiBMb2FkMTY7Cisg
ICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwg
YWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQWRkOiB7CiAgICAgICAgICAgICBp
ZiAodHJ5QXBwZW5kTGVhKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjA5Miw3ICsy
NTAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0NoaWxsKCkpCiAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsKICAgICAgICAgICAgIGlm
IChpc0ludChtX3ZhbHVlLT50eXBlKCkpICYmIGlzWDg2KCkpIHsKLSAgICAgICAgICAgICAgICBs
b3dlclg4NkRpdihEaXYpOworICAgICAgICAgICAgICAgIGFwcGVuZFg4NkRpdihEaXYpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVCgh
aXNYODYoKSB8fCBpc0Zsb2F0KG1fdmFsdWUtPnR5cGUoKSkpOwpAQCAtMjEwMyw3ICsyNTE0LDcg
QEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNlIFVEaXY6IHsKICAgICAgICAgICAgIGlmIChpc0lu
dChtX3ZhbHVlLT50eXBlKCkpICYmIGlzWDg2KCkpIHsKLSAgICAgICAgICAgICAgICBsb3dlclg4
NlVEaXYoVURpdik7CisgICAgICAgICAgICAgICAgYXBwZW5kWDg2VURpdihVRGl2KTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAgLTIxMTcsMTMgKzI1MjgsMTMg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBNb2Q6IHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGlzWDg2KCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdmFsdWUtPmlzQ2hp
bGwoKSk7Ci0gICAgICAgICAgICBsb3dlclg4NkRpdihNb2QpOworICAgICAgICAgICAgYXBwZW5k
WDg2RGl2KE1vZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIFVNb2Q6IHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOwotICAgICAg
ICAgICAgbG93ZXJYODZVRGl2KFVNb2QpOworICAgICAgICAgICAgYXBwZW5kWDg2VURpdihVTW9k
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMTYyLDEwICsyNTczLDI3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYXBwZW5kVW5PcDxOb3QzMiwgTm90NjQ+KG1f
dmFsdWUtPmNoaWxkKDApKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgcGF0dGVybiBpcyBzdXBlciB1c2Vm
dWwgb24gYm90aCB4ODYgYW5kIEFSTTY0LCBzaW5jZSB0aGUgaW52ZXJzaW9uIG9mIHRoZSBDQVMg
cmVzdWx0CisgICAgICAgICAgICAvLyBjYW4gYmUgZG9uZSB3aXRoIHplcm8gY29zdCBvbiB4ODYg
KGp1c3QgZmxpcCB0aGUgc2V0IGZyb20gRSB0byBORSkgYW5kIGl0J3MgYSBwcm9ncmVzc2lvbgor
ICAgICAgICAgICAgLy8gb24gQVJNNjQgKHNpbmNlIFNUWCByZXR1cm5zIDAgb24gc3VjY2Vzcywg
c28gb3JkaW5hcmlseSB3ZSBoYXZlIHRvIGZsaXAgaXQpLgorICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDEpLT5pc0ludCgxKQorICAgICAgICAgICAgICAgICYmIGlzQXRvbWljQ0FTKG1f
dmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKKyAgICAgICAgICAgICAgICAmJiBjYW5CZUludGVy
bmFsKG1fdmFsdWUtPmNoaWxkKDApKSkgeworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFs
KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRDQVMobV92YWx1ZS0+
Y2hpbGQoMCksIHRydWUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAogICAgICAgICAgICAgYXBwZW5kQmluT3A8WG9yMzIsIFhvcjY0LCBYb3JE
b3VibGUsIFhvckZsb2F0LCBDb21tdXRhdGl2ZT4oCiAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICBh
cHBlbmRVbk9wPERlcGVuZDMyLCBEZXBlbmQ2ND4obV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTaGw6IHsKICAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigxKSkgewpAQCAtMjI2Niw3ICsyNjk0
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGFwcGVuZFN0b3JlKHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAgICAg
ICAgICBhcHBlbmRTdG9yZShtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCkBAIC0yMjg3LDcgKzI3MTUsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYXBwZW5kU3RvcmUoQWlyOjpTdG9yZTgsIHZhbHVlVG9TdG9yZSwgYWRkciht
X3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBlbmRTdG9yZShtX3ZhbHVlLCB2YWx1ZVRvU3RvcmUs
IGFkZHIobV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIz
MDgsNyArMjczNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBlbmRTdG9yZShB
aXI6OlN0b3JlMTYsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAgICAgICAgICBh
cHBlbmRTdG9yZShtX3ZhbHVlLCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTI0MTYsNyArMjg0NCwyMiBAQCBwcml2YXRl
OgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBFcXVhbDoKLSAgICAgICAgY2FzZSBOb3RFcXVh
bDoKKyAgICAgICAgY2FzZSBOb3RFcXVhbDogeworICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMKKyAgICAgICAgICAgICAgICAmJiBt
X3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkKKyAgICAgICAg
ICAgICAgICAmJiBjYW5CZUludGVybmFsKG1fdmFsdWUtPmNoaWxkKDApKSkgeworICAgICAgICAg
ICAgICAgIEFTU0VSVCghbV9sb2NrZWQuY29udGFpbnMobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2xvY2tlZC5jb250YWlucyhtX3ZhbHVl
LT5jaGlsZCgxKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbW1pdElu
dGVybmFsKG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRDQVMobV92
YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPm9wY29kZSgpID09IE5vdEVxdWFsKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFyZShtX3ZhbHVlKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIExl
c3NUaGFuOgogICAgICAgICBjYXNlIEdyZWF0ZXJUaGFuOgogICAgICAgICBjYXNlIExlc3NFcXVh
bDoKQEAgLTI3MjcsNiArMzE3MCwzOSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAg
Y2FzZSBCcmFuY2g6IHsKKyAgICAgICAgICAgIGlmIChjYW5CZUludGVybmFsKG1fdmFsdWUtPmNo
aWxkKDApKSkgeworICAgICAgICAgICAgICAgIFZhbHVlKiBicmFuY2hDaGlsZCA9IG1fdmFsdWUt
PmNoaWxkKDApOworICAgICAgICAgICAgICAgIHN3aXRjaCAoYnJhbmNoQ2hpbGQtPm9wY29kZSgp
KSB7CisgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgICAg
ICAgICBjb21taXRJbnRlcm5hbChicmFuY2hDaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIGFw
cGVuZENBUyhicmFuY2hDaGlsZCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljU3Ryb25n
Q0FTOgorICAgICAgICAgICAgICAgICAgICAvLyBBIGJyYW5jaCBpcyBhIGNvbXBhcmlzb24gdG8g
emVyby4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGJyYW5jaENoaWxkLT5jaGlsZCgwKS0+aXNJ
bnQoMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENo
aWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENBUyhicmFuY2hDaGlsZCwgdHJ1
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgICAgICAgICAgY2FzZSBOb3RFcXVhbDoK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGJyYW5jaENoaWxkLT5jaGlsZCgwKS0+b3Bjb2RlKCkg
PT0gQXRvbWljU3Ryb25nQ0FTCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBjYW5CZUludGVy
bmFsKGJyYW5jaENoaWxkLT5vcGNvZGUoMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBi
cmFuY2hDaGlsZC0+Y2hpbGQoMCktPmNoaWxkKDApID09IGJyYW5jaENoaWxkLT5jaGlsZCgxKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwoYnJhbmNoQ2hpbGQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwoYnJhbmNoQ2hpbGQtPmNoaWxk
KDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENBUyhicmFuY2hDaGlsZC0+Y2hp
bGQoMCksIGJyYW5jaENoaWxkLT5vcGNvZGUoKSA9PSBOb3RFcXVhbCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAg
ICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQnJhbmNoKG1fdmFsdWUtPmNoaWxk
KDApKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI3ODQsNyArMzI2MCw4
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYXBwZW5kKEFpcjo6RW50cnlTd2l0Y2gpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBB
dG9taWNXZWFrQ0FTOgorICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzogeworICAgICAgICAg
ICAgYXBwZW5kQ0FTKG1fdmFsdWUsIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FkZDogeworICAgICAg
ICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOwor
ICAgICAgICAgICAgaWYgKGFwcGVuZFZvaWRBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNB
ZGQsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7Cisg
ICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBPUENPREVfRk9SX1dJRFRIKEF0b21pY1hj
aGdBZGQsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSk7CisgICAgICAgICAgICBpZiAoaXNWYWxp
ZE9wY29kZShvcGNvZGUsIEFyZzo6VG1wLCBhZGRyZXNzKSkgeworICAgICAgICAgICAgICAgIGFw
cGVuZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCB0bXAoYXRvbWljLT5jaGls
ZCgwKSksIHRtcChhdG9taWMpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAo
YXRvbWljKSwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQWRk
LCBjYW5vbmljYWxXaWR0aChhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KIAorICAgICAgICBjYXNlIEF0b21pY1hjaGdTdWI6IHsKKyAg
ICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4o
KTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRv
bWljU3ViLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RF
X0ZPUl9XSURUSChTdWIsIGNhbm9uaWNhbFdpZHRoKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXRvbWljWGNoZ0FuZDogeworICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9
IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgaWYgKGFwcGVuZFZvaWRB
dG9taWMoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNBbmQsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgo
KSkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
YXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEFuZCwgY2Fub25pY2FsV2lkdGgo
YXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNYY2hnT3I6IHsKKyAgICAgICAg
ICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAg
ICAgICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljT3Is
IGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX1dJ
RFRIKE9yLCBjYW5vbmljYWxXaWR0aChhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0
b21pY1hjaGdYb3I6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVl
LT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWljKE9Q
Q09ERV9GT1JfV0lEVEgoQXRvbWljWG9yLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdl
bmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChYb3IsIGNhbm9uaWNhbFdpZHRoKGF0b21pYy0+
b3BlcmF0aW9uV2lkdGgoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljWGNoZzogeworICAgICAgICAgICAgQXRvbWlj
VmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBBcmcgYWRkcmVzcyA9IGFkZHIoYXRvbWljKTsKKyAgICAgICAgICAgIEFp
cjo6T3Bjb2RlIG9wY29kZSA9IE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljWGNoZywgYXRvbWljLT5v
cGVyYXRpb25XaWR0aCgpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkT3Bjb2RlKG9wY29kZSwg
QXJnOjpUbXAsIGFkZHJlc3MpKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3Zl
Rm9yVHlwZShhdG9taWMtPnR5cGUoKSksIHRtcChhdG9taWMtPmNoaWxkKDApKSwgdG1wKGF0b21p
YykpOworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChhdG9taWMpLCBhZGRyZXNz
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChYb3IsIGNh
bm9uaWNhbFdpZHRoKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjc5Miw2NCArMzM0Miw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGRhdGFMb2coIkZBVEFMOiBjb3VsZCBub3QgbG93ZXIgIiwgZGVlcER1bXAobV9wcm9j
ZWR1cmUsIG1fdmFsdWUpLCAiXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICB9Ci0KLSAgICB2b2lkIGxvd2VyWDg2RGl2KEIzOjpPcGNvZGUgb3ApCi0gICAg
ewotI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCi0gICAgICAgIFRtcCBlYXggPSBUbXAoWDg2
UmVnaXN0ZXJzOjplYXgpOwotICAgICAgICBUbXAgZWR4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWR4
KTsKLQotICAgICAgICBBaXI6Ok9wY29kZSBjb252ZXJ0VG9Eb3VibGVXb3JkOwotICAgICAgICBB
aXI6Ok9wY29kZSBkaXY7Ci0gICAgICAgIHN3aXRjaCAobV92YWx1ZS0+dHlwZSgpKSB7Ci0gICAg
ICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2Q29u
dmVydFRvRG91YmxlV29yZDMyOwotICAgICAgICAgICAgZGl2ID0gWDg2RGl2MzI7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIGNvbnZlcnRUb0Rv
dWJsZVdvcmQgPSBYODZDb252ZXJ0VG9RdWFkV29yZDY0OwotICAgICAgICAgICAgZGl2ID0gWDg2
RGl2NjQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBBU1NFUlQob3AgPT0gRGl2IHx8IG9wID09IE1vZCk7Ci0gICAgICAg
IFg4NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCByZXN1bHQgPSBvcCA9PSBEaXYgPyBYODZSZWdpc3Rl
cnM6OmVheCA6IFg4NlJlZ2lzdGVyczo6ZWR4OwotCi0gICAgICAgIGFwcGVuZChNb3ZlLCB0bXAo
bV92YWx1ZS0+Y2hpbGQoMCkpLCBlYXgpOwotICAgICAgICBhcHBlbmQoY29udmVydFRvRG91Ymxl
V29yZCwgZWF4LCBlZHgpOwotICAgICAgICBhcHBlbmQoZGl2LCBlYXgsIGVkeCwgdG1wKG1fdmFs
dWUtPmNoaWxkKDEpKSk7Ci0gICAgICAgIGFwcGVuZChNb3ZlLCBUbXAocmVzdWx0KSwgdG1wKG1f
dmFsdWUpKTsKLQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgVU5S
RUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICB2b2lkIGxvd2Vy
WDg2VURpdihCMzo6T3Bjb2RlIG9wKQotICAgIHsKLSNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KQotICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4KTsKLSAgICAgICAgVG1w
IGVkeCA9IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7Ci0KLSAgICAgICAgQWlyOjpPcGNvZGUgZGl2
ID0gbV92YWx1ZS0+dHlwZSgpID09IEludDMyID8gWDg2VURpdjMyIDogWDg2VURpdjY0OwotCi0g
ICAgICAgIEFTU0VSVChvcCA9PSBVRGl2IHx8IG9wID09IFVNb2QpOwotICAgICAgICBYODZSZWdp
c3RlcnM6OlJlZ2lzdGVySUQgcmVzdWx0ID0gb3AgPT0gVURpdiA/IFg4NlJlZ2lzdGVyczo6ZWF4
IDogWDg2UmVnaXN0ZXJzOjplZHg7Ci0KLSAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChtX3ZhbHVl
LT5jaGlsZCgwKSksIGVheCk7Ci0gICAgICAgIGFwcGVuZChYb3I2NCwgZWR4LCBlZHgpOwotICAg
ICAgICBhcHBlbmQoZGl2LCBlYXgsIGVkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7Ci0gICAg
ICAgIGFwcGVuZChNb3ZlLCBUbXAocmVzdWx0KSwgdG1wKG1fdmFsdWUpKTsKLSNlbHNlCi0gICAg
ICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgp
OwotI2VuZGlmCi0gICAgfQotCisgICAgCiAgICAgSW5kZXhTZXQ8VmFsdWU+IG1fbG9ja2VkOyAv
LyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBBaXIuCiAgICAgSW5k
ZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQg
bXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSogd2l0aCBhIG5vbi1u
dWxsIFRtcCBpcyAicGlubmVkIi4KICAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBtX3BoaVRvVG1w
OyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgpAQCAtMjg2NCw3ICszMzU3LDcgQEAgcHJp
dmF0ZToKIAogICAgIFZlY3RvcjxWZWN0b3I8SW5zdCwgND4+IG1faW5zdHM7CiAgICAgVmVjdG9y
PEluc3Q+IG1fcHJvbG9ndWU7Ci0KKyAgICAKICAgICBCMzo6QmFzaWNCbG9jayogbV9ibG9jazsK
ICAgICBib29sIG1faXNSYXJlOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CkBAIC0yODc1LDYgKzMz
NjgsMTIgQEAgcHJpdmF0ZToKIAogICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CiAgICAgQ29k
ZSYgbV9jb2RlOworCisgICAgQWlyOjpCbG9ja0luc2VydGlvblNldCBtX2Jsb2NrSW5zZXJ0aW9u
U2V0OworCisgICAgVG1wIG1fZWF4OworICAgIFRtcCBtX2VjeDsKKyAgICBUbXAgbV9lZHg7CiB9
OwogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMzAg
KzM0LDQ4IEBAIE1lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQogewogfQogCitUeXBlIE1lbW9y
eVZhbHVlOjphY2Nlc3NUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAoaXNMb2FkKG9wY29kZSgpKSkK
KyAgICAgICAgcmV0dXJuIHR5cGUoKTsKKyAgICAvLyBUaGlzIGhhcHBlbnMgdG8gd29yayBmb3Ig
YXRvbWljcywgdG9vLiBUaGF0J3Mgd2h5IEF0b21pY1ZhbHVlIGRvZXMgbm90IG5lZWQgdG8gb3Zl
cnJpZGUgdGhpcy4KKyAgICByZXR1cm4gY2hpbGQoMCktPnR5cGUoKTsKK30KKworQmFuayBNZW1v
cnlWYWx1ZTo6YWNjZXNzQmFuaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJhbmtGb3JUeXBlKGFj
Y2Vzc1R5cGUoKSk7Cit9CisKIHNpemVfdCBNZW1vcnlWYWx1ZTo6YWNjZXNzQnl0ZVNpemUoKSBj
b25zdAogeworICAgIHJldHVybiBieXRlcyhhY2Nlc3NXaWR0aCgpKTsKK30KKworV2lkdGggTWVt
b3J5VmFsdWU6OmxvYWRTdG9yZVdpZHRoKCkgY29uc3QKK3sKICAgICBzd2l0Y2ggKG9wY29kZSgp
KSB7CiAgICAgY2FzZSBMb2FkOFo6CiAgICAgY2FzZSBMb2FkOFM6CiAgICAgY2FzZSBTdG9yZTg6
Ci0gICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4gV2lkdGg4OwogICAgIGNhc2UgTG9h
ZDE2WjoKICAgICBjYXNlIExvYWQxNlM6CiAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICByZXR1
cm4gMjsKKyAgICAgICAgcmV0dXJuIFdpZHRoMTY7CiAgICAgY2FzZSBMb2FkOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mVHlwZSh0eXBlKCkpOworICAgICAgICByZXR1cm4gd2lkdGhGb3JUeXBlKHR5
cGUoKSk7CiAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgcmV0dXJuIHNpemVvZlR5cGUoY2hpbGQo
MCktPnR5cGUoKSk7CisgICAgICAgIHJldHVybiB3aWR0aEZvclR5cGUoY2hpbGQoMCktPnR5cGUo
KSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBXaWR0aDg7CiAgICAgfQogfQogCiBX
aWR0aCBNZW1vcnlWYWx1ZTo6YWNjZXNzV2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiB3aWR0
aEZvckJ5dGVzKGFjY2Vzc0J5dGVTaXplKCkpOworICAgIHJldHVybiBsb2FkU3RvcmVXaWR0aCgp
OwogfQogCiB2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQ
cmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtNjcsNiArODUsOCBAQCB2b2lkIE1lbW9yeVZhbHVl
OjpkdW1wTWV0YShDb21tYVByaW50ZXImCiAgICAgaWYgKChpc0xvYWQoKSAmJiBlZmZlY3RzKCku
cmVhZHMgIT0gcmFuZ2UoKSkKICAgICAgICAgfHwgKGlzU3RvcmUoKSAmJiBlZmZlY3RzKCkud3Jp
dGVzICE9IHJhbmdlKCkpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJyYW5nZSA9ICIsIHJh
bmdlKCkpOworICAgIGlmIChwaGFudG9tUmFuZ2UoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAicGhhbnRvbVJhbmdlID0gIiwgcGhhbnRvbVJhbmdlKCkpOwogfQogCiBWYWx1ZSogTWVtb3J5
VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CkBAIC03NCw2ICs5NCw1OCBAQCBWYWx1ZSogTWVtb3J5
VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CiAgICAgcmV0dXJuIG5ldyBNZW1vcnlWYWx1ZSgqdGhp
cyk7CiB9CiAKKy8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2Fk
OFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKy8vIGRlc2Ny
aWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCitNZW1vcnlWYWx1ZTo6TWVtb3J5VmFsdWUoS2luZCBr
aW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9m
ZnNldCA9IDApCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4s
IHBvaW50ZXIpCisgICAgLCBtX29mZnNldChvZmZzZXQpCit7CisgICAgaWYgKCFBU1NFUlRfRElT
QUJMRUQpIHsKKyAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7CisgICAgICAgIGNhc2Ug
TG9hZDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAg
Y2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZT
OgorICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNh
c2UgU3RvcmU6CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBWb2lkKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdo
ZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVl
KEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0
ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKGtpbmQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9m
ZnNldCkKK3sKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICBzd2l0Y2ggKGtp
bmQub3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhT
OgorICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jl
cy4KK01lbW9yeVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IFZh
bHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIpCisg
ICAgLCBtX29mZnNldChvZmZzZXQpCit7CisgICAgQVNTRVJUKGlzU3RvcmUoa2luZC5vcGNvZGUo
KSkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDQ4ICsyNywxNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJ
VCkKIAorI2luY2x1ZGUgIkIzQmFuay5oIgogI2luY2x1ZGUgIkIzSGVhcFJhbmdlLmgiCiAjaW5j
bHVkZSAiQjNWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotLy8g
RklYTUU6IFdlIHdhbnQgdG8gYWxsb3cgZmVuY2VkIG1lbW9yeSBhY2Nlc3NlcyBvbiBBUk0uCi0v
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyMzQ5Ci0KIGNsYXNz
IEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeVZhbHVlIDogcHVibGljIFZhbHVlIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKEtpbmQga2luZCkKICAgICB7Ci0gICAgICAgIHN3aXRj
aCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICBjYXNlIExvYWQ4WjoKLSAgICAgICAgY2FzZSBM
b2FkOFM6Ci0gICAgICAgIGNhc2UgTG9hZDE2WjoKLSAgICAgICAgY2FzZSBMb2FkMTZTOgotICAg
ICAgICBjYXNlIExvYWQ6Ci0gICAgICAgIGNhc2UgU3RvcmU4OgotICAgICAgICBjYXNlIFN0b3Jl
MTY6Ci0gICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHN0YXRpYyBib29sIGlzU3RvcmUoS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgc3dp
dGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgU3RvcmU4OgotICAgICAgICBjYXNl
IFN0b3JlMTY6Ci0gICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzTG9hZChLaW5kIGtpbmQpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWNjZXB0cyhraW5kKSAmJiAhaXNTdG9yZShraW5kKTsKKyAgICAgICAgcmV0dXJu
IGlzTWVtb3J5KGtpbmQub3Bjb2RlKCkpOwogICAgIH0KIAogICAgIH5NZW1vcnlWYWx1ZSgpOwpA
QCAtNzgsNzYgKzQ3LDU2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2Uo
KSBjb25zdCB7IHJldHVybiBtX3JhbmdlOyB9CiAgICAgdm9pZCBzZXRSYW5nZShjb25zdCBIZWFw
UmFuZ2UmIHJhbmdlKSB7IG1fcmFuZ2UgPSByYW5nZTsgfQorICAgIAorICAgIC8vIFRoaXMgaXMg
YW4gYWxpYXMgZm9yIHJhbmdlLgorICAgIGNvbnN0IEhlYXBSYW5nZSYgYWNjZXNzUmFuZ2UoKSBj
b25zdCB7IHJldHVybiByYW5nZSgpOyB9CisgICAgdm9pZCBzZXRBY2Nlc3NSYW5nZShjb25zdCBI
ZWFwUmFuZ2UmIHJhbmdlKSB7IHNldFJhbmdlKHJhbmdlKTsgfQorICAgIAorICAgIGNvbnN0IEhl
YXBSYW5nZSYgZmVuY2VSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmVuY2VSYW5nZTsgfQorICAg
IHZvaWQgc2V0RmVuY2VSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKSB7IG1fZmVuY2VSYW5n
ZSA9IHJhbmdlOyB9CisKKyAgICBib29sIGlzU3RvcmUoKSBjb25zdCB7IHJldHVybiBpc1N0b3Jl
KG9wY29kZSgpKTsgfQorICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyByZXR1cm4gaXNMb2FkKG9w
Y29kZSgpKTsgfQogCi0gICAgYm9vbCBpc1N0b3JlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09
IFZvaWQ7IH0KLSAgICBib29sIGlzTG9hZCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSAhPSBWb2lk
OyB9CisgICAgYm9vbCBoYXNGZW5jZSgpIGNvbnN0IHsgcmV0dXJuICEhZmVuY2VSYW5nZSgpOyB9
CiAKKyAgICBUeXBlIGFjY2Vzc1R5cGUoKSBjb25zdDsKKyAgICBCYW5rIGFjY2Vzc0JhbmsoKSBj
b25zdDsKICAgICBzaXplX3QgYWNjZXNzQnl0ZVNpemUoKSBjb25zdDsKLSAgICBXaWR0aCBhY2Nl
c3NXaWR0aCgpIGNvbnN0OworICAgIAorICAgIC8vIFNsaWdodGx5IGZhc3RlciB2ZXJzaW9uIG9m
IGFjY2Vzc1dpZHRoLCBpZiB5b3Uga25vdyB0aGF0IHlvdSdyZSB3b3JraW5nIHdpdGggYSBsb2Fk
IG9yIHN0b3JlLgorICAgIFdpZHRoIGxvYWRTdG9yZVdpZHRoKCkgY29uc3Q7CisgICAgCisgICAg
dmlydHVhbCBXaWR0aCBhY2Nlc3NXaWR0aCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9p
ZCBkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIFZhbHVlKiBjbG9uZUltcGwoKSBjb25zdCBvdmVycmlkZTsKIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwotCi0gICAgLy8gVXNlIHRoaXMg
Zm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2Fk
cyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAotICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQg
dHlwZSkuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDogVmFsdWUo
Q2hlY2tlZE9wY29kZSwga2luZCwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBNZW1vcnlWYWx1ZShDaGVja2VkT3Bj
b2RlVGFnLCBLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgaW50MzJfdCBvZmZz
ZXQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29k
ZSwga2luZCwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCiAgICAgICAgICwgbV9vZmZzZXQo
b2Zmc2V0KQotICAgICAgICAsIG1fcmFuZ2UoSGVhcFJhbmdlOjp0b3AoKSkKICAgICB7Ci0gICAg
ICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGtpbmQub3Bj
b2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgTG9hZDoKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgTG9hZDhaOgotICAgICAgICAgICAgY2FzZSBMb2FkOFM6Ci0gICAg
ICAgICAgICBjYXNlIExvYWQxNlo6Ci0gICAgICAgICAgICBjYXNlIExvYWQxNlM6Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAg
ICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQog
ICAgIH0KKyAgICAKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4
WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0Cisg
ICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KKyAgICBNZW1vcnlWYWx1ZShLaW5k
LCBUeXBlLCBPcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOwogCiAg
ICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGlt
cGxpZWQuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
cG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAgICA6IE1lbW9yeVZhbHVlKGtpbmQs
IEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCkKLSAgICB7Ci0gICAgfQorICAgIE1lbW9y
eVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7
CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCi0gICAgTWVtb3J5VmFsdWUoS2lu
ZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQz
Ml90IG9mZnNldCA9IDApCi0gICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgVm9p
ZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKLSAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0g
ICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6OnRvcCgpKQotICAgIHsKLSAgICAgICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewot
ICAgICAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAg
ICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQorICAgIE1l
bW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50
MzJfdCBvZmZzZXQgPSAwKTsKKyAgICAKICAgICBpbnQzMl90IG1fb2Zmc2V0IHsgMCB9OwotICAg
IEhlYXBSYW5nZSBtX3JhbmdlOworICAgIEhlYXBSYW5nZSBtX3JhbmdlIHsgSGVhcFJhbmdlOjp0
b3AoKSB9OworICAgIEhlYXBSYW5nZSBtX2ZlbmNlUmFuZ2UgeyBIZWFwUmFuZ2UoKSB9OwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGNvZGUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEIz
X0pJVCkKIAogI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgIkIzV2lkdGguaCIKICNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAg
LTgyLDcgKzgzLDYgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKICAgICBNb2QsIC8vIEFsbCBi
ZXRzIGFyZSBvZmYgYXMgdG8gd2hhdCB3aWxsIGhhcHBlbiB3aGVuIHlvdSBleGVjdXRlIHRoaXMg
Zm9yIC0yXjMxJS0xIGFuZCB4JTAuCiAgICAgVU1vZCwKIAotCiAgICAgLy8gUG9seW1vcnBoaWMg
bmVnYXRpb24uIE5vdGUgdGhhdCB3ZSBvbmx5IG5lZWQgdGhpcyBmb3IgZmxvYXRpbmcgcG9pbnQs
IHNpbmNlIGludGVnZXIgbmVnYXRpb24KICAgICAvLyBpcyBleGFjdGx5IGxpa2UgU3ViKDAsIHgp
LiBCdXQgdGhhdCdzIG5vdCB0cnVlIGZvciBmbG9hdGluZyBwb2ludC4gU3ViKDAsIDApIGlzIDAs
IHdoaWxlCiAgICAgLy8gTmVnKDApIGlzIC0wLiBBbHNvLCB3ZSBjYW5vbmljYWxpemUgU3ViKDAs
IHgpIGludG8gTmVnKHgpIGluIGNhc2Ugb2YgaW50ZWdlcnMuCkBAIC0xNjIsNiArMTYyLDEwNyBA
QCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIFN0b3JlMTYsCiAgICAgLy8gVGhpcyBpcyBh
IHBvbHltb3JwaGljIHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIEZsb2F0LCBhbmQgRG91YmxlLgog
ICAgIFN0b3JlLAorICAgIAorICAgIC8vIEF0b21pYyBjb21wYXJlIGFuZCBzd2FwIHRoYXQgcmV0
dXJucyBhIGJvb2xlYW4uIE1heSBjaG9vc2UgdG8gZG8gbm90aGluZyBhbmQgcmV0dXJuIGZhbHNl
LiBZb3UgY2FuCisgICAgLy8gdXN1YWxseSBhc3N1bWUgdGhhdCB0aGlzIGlzIGZhc3RlciBhbmQg
cmVzdWx0cyBpbiBsZXNzIGNvZGUgdGhhbiBBdG9taWNTdHJvbmdDQVMsIHRob3VnaCB0aGF0J3MK
KyAgICAvLyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSBvbiBJbnRlbCwgaWYgaW5zdHJ1Y3Rpb24gc2Vs
ZWN0aW9uIGRvZXMgaXRzIGpvYi4gSW1hZ2luZSB0aGF0IHRoaXMgb3Bjb2RlIGlzCisgICAgLy8g
YXMgaWYgeW91IGRpZCB0aGlzIGF0b21pY2FsbHk6CisgICAgLy8KKyAgICAvLyB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIC8vIGJvb2wgQXRvbWljV2Vha0NBUyhUIGV4cGVjdGVkVmFsdWUsIFQg
bmV3VmFsdWUsIFQqIHB0cikKKyAgICAvLyB7CisgICAgLy8gICAgIGlmICghcmFuZCgpKQorICAg
IC8vICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBSZWFsIHdvcmxkIGV4YW1wbGUgb2YgdGhpczog
Y29udGV4dCBzd2l0Y2ggb24gQVJNIHdoaWxlIGRvaW5nIENBUy4KKyAgICAvLyAgICAgaWYgKCpw
dHIgIT0gZXhwZWN0ZWRWYWx1ZSkKKyAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAv
LyAgICAgKnB0ciA9IG5ld1ZhbHVlOworICAgIC8vICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyB9
CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgYWxsIGF0b21pY3MgcHV0IHRoZSBwb2ludGVyIGxh
c3QgdG8gYmUgY29uc2lzdGVudCB3aXRoIGhvdyBsb2FkcyBhbmQgc3RvcmVzIHdvcmsuIFRoaXMK
KyAgICAvLyBpcyBhIGdvb2Z5IHRyYWRpdGlvbiwgYnV0IGl0J3MgaGFybWxlc3MsIGFuZCBiZXR0
ZXIgdGhhbiBiZWluZyBpbmNvbnNpc3RlbnQuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgd2Vh
ayBDQVMgaGFzIG5vIGZlbmNpbmcgZ3VhcmFudGVlcyB3aGVuIGl0IGZhaWxzLiBUaGlzIG1lYW5z
IHRoYXQgdGhlIGZvbGxvd2luZworICAgIC8vIHRyYW5zZm9ybWF0aW9uIGlzIGFsd2F5cyB2YWxp
ZDoKKyAgICAvLworICAgIC8vIEJlZm9yZToKKyAgICAvLworICAgIC8vICAgICAgICAgQnJhbmNo
KEF0b21pY1dlYWtDQVMoZXhwZWN0ZWQsIG5ldywgcHRyKSkKKyAgICAvLyAgICAgICBTdWNjZXNz
b3JzOiBUaGVuOiNzdWNjZXNzLCBFbHNlOiNmYWlsCisgICAgLy8KKyAgICAvLyBBZnRlcjoKKyAg
ICAvLworICAgIC8vICAgICAgICAgQnJhbmNoKEVxdWFsKExvYWQocHRyKSwgZXhwZWN0ZWQpKQor
ICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I2F0dGVtcHQsIEVsc2U6I2ZhaWwKKyAgICAv
LyAgICAgQkIjYXR0ZW1wdDoKKyAgICAvLyAgICAgICAgIEJyYW5jaChBdG9taWNXZWFrQ0FTKGV4
cGVjdGVkLCBuZXcsIHB0cikpCisgICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhlbjojc3VjY2Vz
cywgRWxzZTojZmFpbAorICAgIC8vCisgICAgLy8gQm90aCBraW5kcyBvZiBDQVMgZm9yIG5vbi1j
YW5vbmljYWwgd2lkdGhzIChXaWR0aDggYW5kIFdpZHRoMTYpIGlnbm9yZSB0aGUgaXJyZWxldmFu
dCBiaXRzIG9mIHRoZQorICAgIC8vIGlucHV0LgorICAgIEF0b21pY1dlYWtDQVMsCisgICAgCisg
ICAgLy8gQXRvbWljIGNvbXBhcmUgYW5kIHN3YXAgdGhhdCByZXR1cm5zIHRoZSBvbGQgdmFsdWUu
IERvZXMgbm90IGhhdmUgdGhlIG5vbmRldGVybWluaXNtIG9mIFdlYWtDQVMuCisgICAgLy8gVGhp
cyBpcyBhIGJpdCBtb3JlIGNvZGUgYW5kIGEgYml0IHNsb3dlciBpbiBzb21lIGNhc2VzLCB0aG91
Z2ggbm90IGJ5IGEgbG90LiBJbWFnaW5lIHRoYXQgdGhpcworICAgIC8vIG9wY29kZSBpcyBhcyBp
ZiB5b3UgZGlkIHRoaXMgYXRvbWljYWxseToKKyAgICAvLworICAgIC8vIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgLy8gVCBBdG9taWNTdHJvbmdDQVMoVCBleHBlY3RlZFZhbHVlLCBUIG5ld1Zh
bHVlLCBUKiBwdHIpCisgICAgLy8geworICAgIC8vICAgICBUIG9sZFZhbHVlID0gKnB0cjsKKyAg
ICAvLyAgICAgaWYgKG9sZFZhbHVlID09IGV4cGVjdGVkVmFsdWUpCisgICAgLy8gICAgICAgICAq
cHRyID0gbmV3VmFsdWU7CisgICAgLy8gICAgIHJldHVybiBvbGRWYWx1ZQorICAgIC8vIH0KKyAg
ICAvLworICAgIC8vIE5vdGUgdGhhdCBBdG9taWNXZWFrQ0FTIGFuZCBBdG9taWNTdHJvbmdDQVMg
c29ydCBvZiBoYXZlIHRoaXMga2luZCBvZiBlcXVpdmFsZW5jZToKKyAgICAvLworICAgIC8vIEF0
b21pY1dlYWtDQVMoQGV4cCwgQG5ldywgQHB0cikgPT0gRXF1YWwoQXRvbWljU3Ryb25nQ0FTKEBl
eHAsIEBuZXcsIEBwdHIpLCBAZXhwKQorICAgIC8vCisgICAgLy8gQXNzdW1pbmcgdGhhdCB0aGUg
V2Vha0NBUyBkb2VzIG5vdCBzcHVyaW91c2x5IGZhaWwsIG9mIGNvdXJzZS4KKyAgICBBdG9taWNT
dHJvbmdDQVMsCisgICAgCisgICAgLy8gQXRvbWljYWxseSBfX18gYSBtZW1vcnkgbG9jYXRpb24g
YW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiBTeW50YXg6CisgICAgLy8KKyAgICAvLyBAb2xkVmFs
dWUgPSBBdG9taWNYY2hnX19fKEBvcGVyYW5kLCBAcHRyKQorICAgIC8vCisgICAgLy8gRm9yIG5v
bi1jYW5vbmljYWwgd2lkdGhzIChXaWR0aDggYW5kIFdpZHRoMTYpLCB0aGVzZSByZXR1cm4gc2ln
bi1leHRlbmRlZCByZXN1bHRzIGFuZCBpZ25vcmUgdGhlCisgICAgLy8gaXJyZWxldmFudCBiaXRz
IG9mIHRoZWlyIGlucHV0cy4KKyAgICBBdG9taWNYY2hnQWRkLAorICAgIEF0b21pY1hjaGdBbmQs
CisgICAgQXRvbWljWGNoZ09yLAorICAgIEF0b21pY1hjaGdTdWIsCisgICAgQXRvbWljWGNoZ1hv
ciwKKyAgICAKKyAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGhhdmUgQXRvbWljWGNoZ05l
ZyBhbmQgQXRvbWljWGNoZ05vdC4KKyAgICAKKyAgICAvLyBBdG9taWNhbGx5IGV4Y2hhbmdlIGEg
dmFsdWUgd2l0aCBhIG1lbW9yeSBsb2NhdGlvbi4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQG9s
ZFZhbHVlID0gQXRvbWljWGNoZyhAbmV3VmFsdWUsIEBwdHIpCisgICAgQXRvbWljWGNoZywKKyAg
ICAKKyAgICAvLyBJbnRyb2R1Y2UgYW4gaW52aXNpYmxlIGRlcGVuZGVuY3kgZm9yIGJsb2NraW5n
IG1vdGlvbiBvZiBsb2FkcyB3aXRoIHJlc3BlY3QgdG8gZWFjaCBvdGhlci4gU3ludGF4OgorICAg
IC8vCisgICAgLy8gQHJlc3VsdCA9IERlcGVuZChAcGhhbnRvbSkKKyAgICAvLworICAgIC8vIFRo
aXMgaXMgZXZlbnR1YWxseSBjb2RlZ2VuZXJhdGVkIHRvIGhhdmUgbG9jYWwgc2VtYW50aWNzIGFz
IGlmIHdlIGRpZDoKKyAgICAvLworICAgIC8vIEByZXN1bHQgPSAkMAorICAgIC8vCisgICAgLy8g
QnV0IGl0IGVuc3VyZXMgdGhhdCB0aGUgdXNlcnMgb2YgQHJlc3VsdCBjYW5ub3QgZXhlY3V0ZSB1
bnRpbCBAcGhhbnRvbSBpcyBjb21wdXRlZC4KKyAgICAvLworICAgIC8vIFRoZSBjb21waWxlciBp
cyBub3QgYWxsb3dlZCB0byByZWFzb24gYWJvdXQgdGhlIGZhY3QgdGhhdCBEZXBlbmQgY29kZWdl
bmVyYXRlcyB0aGlzIHdheS4gQW55IGtpbmQKKyAgICAvLyBvZiB0cmFuc2Zvcm1hdGlvbiBvciBh
bmFseXNpcyB0aGF0IHJlbGllcyBvbiB0aGUgaW5zaWdodCB0aGF0IERlcGVuZCBpcyByZWFsbHkg
emVybyBpcyB1bnNvdW5kLAorICAgIC8vIGJlY2F1c2UgaXQgdW5sb2NrcyByZW9yZGVyaW5nIG9m
IHVzZXJzIG9mIEByZXN1bHQgYW5kIEBwaGFudG9tLgorICAgIC8vCisgICAgLy8gT24gWDg2LCB0
aGlzIGlzIGxvd2VyZWQgdG8gYSBsb2FkLWxvYWQgZmVuY2UgYW5kIEByZXN1bHQgdXNlcyBAcGhh
bnRvbSBkaXJlY3RseS4KKyAgICAvLworICAgIC8vIE9uIEFSTSwgdGhpcyBpcyBsb3dlcmVkIGFz
IGlmIGxpa2U6CisgICAgLy8KKyAgICAvLyBAcmVzdWx0ID0gQml0WG9yKEBwaGFudG9tLCBAcGhh
bnRvbSkKKyAgICAvLworICAgIC8vIEV4Y2VwdCB0aGF0IHRoZSBjb21waWxlciBuZXZlciBnZXRz
IGFuIG9wcG9ydHVuaXR5IHRvIHNpbXBsaWZ5IG91dCB0aGUgQml0WG9yLgorICAgIERlcGVuZCwK
IAogICAgIC8vIFRoaXMgaXMgdXNlZCB0byBjb21wdXRlIHRoZSBhY3R1YWwgYWRkcmVzcyBvZiBh
IFdhc20gbWVtb3J5IG9wZXJhdGlvbi4gSXQgdGFrZXMgYW4gSW50UHRyCiAgICAgLy8gYW5kIGEg
cGlubmVkIHJlZ2lzdGVyIHRoZW4gY29tcHV0ZXMgdGhlIGFwcHJvcHJpYXRlIEludFB0ciBhZGRy
ZXNzLiBGb3IgdGhlIHVzZS1jYXNlIG9mCkBAIC0zMDEsNiArNDAyLDExMCBAQCBpbmxpbmUgYm9v
bCBpc0RlZmluaXRlbHlUZXJtaW5hbChPcGNvZGUgCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBp
c0xvYWQoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2Ug
TG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2WjoKKyAgICBjYXNlIExv
YWQxNlM6CisgICAgY2FzZSBMb2FkOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc1N0b3Jl
KE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIFN0b3Jl
ODoKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5s
aW5lIGJvb2wgaXNMb2FkU3RvcmUoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29k
ZSkgeworICAgIGNhc2UgTG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2
WjoKKyAgICBjYXNlIExvYWQxNlM6CisgICAgY2FzZSBMb2FkOgorICAgIGNhc2UgU3RvcmU4Ogor
ICAgIGNhc2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUg
Ym9vbCBpc0F0b21pYyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgIGNh
c2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9t
aWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hv
cjoKKyAgICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzQXRv
bWljQ0FTKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNl
IEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K2lubGluZSBib29sIGlzQXRvbWljWGNoZyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0Fu
ZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAg
Y2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
aW5saW5lIGJvb2wgaXNNZW1vcnlBY2Nlc3MoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICByZXR1cm4g
aXNBdG9taWMob3Bjb2RlKSB8fCBpc0xvYWRTdG9yZShvcGNvZGUpOworfQorCitpbmxpbmUgT3Bj
b2RlIHNpZ25FeHRlbmRPcGNvZGUoV2lkdGggd2lkdGgpCit7CisgICAgc3dpdGNoICh3aWR0aCkg
eworICAgIGNhc2UgV2lkdGg4OgorICAgICAgICByZXR1cm4gU0V4dDg7CisgICAgY2FzZSBXaWR0
aDE2OgorICAgICAgICByZXR1cm4gU0V4dDE2OworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBPb3BzOworICAgIH0KK30K
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDIsNiArMjAyLDggQEAgdm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgYwogICAgICAgICB9CiAgICAgICAgIGRhdGFMb2coIiAgICAiLCBkZWVwRHVtcCgqdGhpcywg
dmFsdWUpLCAiXG4iKTsKICAgICB9CisgICAgaWYgKGhhc1F1aXJrcygpKQorICAgICAgICBvdXQu
cHJpbnQoIkhhcyBRdWlya3M6IFRydWVcbiIpOwogICAgIGlmICh2YXJpYWJsZXMoKS5zaXplKCkp
IHsKICAgICAgICAgb3V0LnByaW50KCJWYXJpYWJsZXM6XG4iKTsKICAgICAgICAgZm9yIChWYXJp
YWJsZSogdmFyaWFibGUgOiB2YXJpYWJsZXMoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3IEBAIHB1
YmxpYzoKICAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoT3JpZ2luLCBUeXBlLCBpbnQ2NF90IHZh
bHVlKTsKICAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoVmFsdWUqLCBpbnQ2NF90IHZhbHVlKTsK
IAorICAgIC8vIFlvdSdyZSBndWFyYW50ZWVkIHRoYXQgYm90dG9tIGlzIHplcm8uCiAgICAgVmFs
dWUqIGFkZEJvdHRvbShPcmlnaW4sIFR5cGUpOwogICAgIFZhbHVlKiBhZGRCb3R0b20oVmFsdWUq
KTsKIApAQCAtMTk1LDYgKzE5NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gYWxpdmUuIEdyZWF0IGZv
ciBjb21waWxlci1nZW5lcmF0ZWQgZGF0YSBzZWN0aW9ucywgbGlrZSBzd2l0Y2gganVtcCB0YWJs
ZXMgYW5kIGNvbnN0YW50IHBvb2xzLgogICAgIC8vIFRoaXMgcmV0dXJucyBtZW1vcnkgdGhhdCBo
YXMgYmVlbiB6ZXJvLWluaXRpYWxpemVkLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFk
ZERhdGFTZWN0aW9uKHNpemVfdCk7CisgICAgCisgICAgLy8gU29tZSBvcGVyYXRpb25zIGFyZSBz
cGVjaWZpZWQgaW4gQjMgSVIgdG8gYmVoYXZlIG9uZSB3YXkgYnV0IG9uIHRoaXMgZ2l2ZW4gQ1BV
IHRoZXkgYmVoYXZlIGEKKyAgICAvLyBkaWZmZXJlbnQgd2F5LiBXaGVuIHRydWUsIHRob3NlIEIz
IElSIG9wcyBzd2l0Y2ggdG8gYmVoYXZpbmcgdGhlIENQVSB3YXksIGFuZCB0aGUgb3B0aW1pemVy
IG1heQorICAgIC8vIHN0YXJ0IHRha2luZyBhZHZhbnRhZ2Ugb2YgaXQuCisgICAgYm9vbCBoYXNR
dWlya3MoKSBjb25zdCB7IHJldHVybiBtX2hhc1F1aXJrczsgfQorICAgIHZvaWQgc2V0SGFzUXVp
cmtzKGJvb2wgdmFsdWUpIHsgbV9oYXNRdWlya3MgPSB2YWx1ZTsgfQogCiAgICAgT3BhcXVlQnlw
cm9kdWN0cyYgYnlwcm9kdWN0cygpIHsgcmV0dXJuICptX2J5cHJvZHVjdHM7IH0KIApAQCAtMjUy
LDYgKzI1OSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChQcmludFN0
cmVhbSYsIE9yaWdpbik+PiBtX29yaWdpblByaW50ZXI7CiAgICAgY29uc3Qgdm9pZCogbV9mcm9u
dGVuZERhdGE7CiAgICAgUENUb09yaWdpbk1hcCBtX3BjVG9PcmlnaW5NYXA7CisgICAgYm9vbCBt
X2hhc1F1aXJrcyB7IGZhbHNlIH07CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAyLDcgKzYwMiw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGJyZWFrOwotCisgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBOZWc6CiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE5lZyhjb25zdGFudCkKICAgICAg
ICAgICAgIC8vIEludG8gdGhpczogLWNvbnN0YW50CkBAIC0xMjk1LDYgKzEyOTUsMTYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fcHJvYy5oYXNRdWly
a3MoKSkgeworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDgoQXRvbWljWGNoZ19f
XykKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEF0b21pY1hjaGdfX18KKyAgICAgICAg
ICAgICAgICBpZiAoaXNBdG9taWNYY2hnKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVlPigp
LT5vcGVyYXRpb25XaWR0aCgpID09IFdpZHRoOCkgeworICAgICAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgY2FzZSBTRXh0MTY6CkBAIC0xMzQzLDYgKzEzNTMsMTYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIW1fcHJvYy5oYXNRdWlya3MoKSkgeworICAgICAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KEF0b21pY1hjaGdfX18pCisgICAgICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBBdG9taWNYY2hnX19fCisgICAgICAgICAgICAgICAgaWYgKGlz
QXRvbWljWGNoZyhtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpCisgICAgICAgICAgICAgICAg
ICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5hczxBdG9taWNWYWx1ZT4oKS0+b3BlcmF0aW9uV2lk
dGgoKSA9PSBXaWR0aDE2KSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRp
dHkobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBjYXNlIFNFeHQzMjoKQEAgLTIxMDEsMjIgKzIxMjEsMjUgQEAgcHJpdmF0ZToKICAgICAgICAg
QVNTRVJUKG1fdmFsdWUtPm51bUNoaWxkcmVuKCkgPj0gMik7CiAgICAgICAgIAogICAgICAgICAv
LyBMZWF2ZSBpdCBhbG9uZSBpZiB0aGUgcmlnaHQgY2hpbGQgaXMgYSBjb25zdGFudC4KLSAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0NvbnN0YW50KCkpCisgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgxKS0+aXNDb25zdGFudCgpCisgICAgICAgICAgICB8fCBtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKLSAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pc0NvbnN0YW50KCkpIHsK
KyAgICAgICAgYXV0byBzd2FwID0gWyZdICgpIHsKICAgICAgICAgICAgIHN0ZDo6c3dhcChtX3Zh
bHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCisgICAgICAgIH07Cisg
ICAgICAgIAorICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzd2FwKCk7CisgICAgICAgIAorICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMSktPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUykKKyAgICAgICAgICAgIHJldHVy
biBzd2FwKCk7CisgICAgICAgIAogICAgICAgICAvLyBTb3J0IHRoZSBvcGVyYW5kcy4gVGhpcyBp
cyBhbiBpbXBvcnRhbnQgY2Fub25pY2FsaXphdGlvbi4gV2UgdXNlIHRoZSBpbmRleCBpbnN0ZWFk
IG9mCiAgICAgICAgIC8vIHRoZSBhZGRyZXNzIHRvIG1ha2UgdGhpcyBhdCBsZWFzdCBzbGlnaHRs
eSBkZXRlcm1pbmlzdGljLgotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmluZGV4KCkg
PiBtX3ZhbHVlLT5jaGlsZCgxKS0+aW5kZXgoKSkgewotICAgICAgICAgICAgc3RkOjpzd2FwKG1f
dmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgwKS0+aW5kZXgoKSA+IG1fdmFsdWUtPmNoaWxkKDEpLT5pbmRleCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHN3YXAoKTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgcmVhbGx5IGJlIGEgZm9yd2FyZCBhbmFseXNpcy4gSW5zdGVhZCwgd2UgdXNlcyBhIGJv
dW5kZWQtc2VhcmNoIGJhY2t3YXJkcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bGlkYXRlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNiArMzQ2LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgi
QXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDAp
LT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAgICAgIHZh
bGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBMb2FkOgpAQCAtMzUzLDYgKzM1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHBv
aW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nl
c3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTdG9y
ZTg6CkBAIC0zNjIsNiArMzY0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOwogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJU
eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUt
PnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlk
YXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFs
dWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTdG9yZToKQEAg
LTM2OSw4ICszNzIsNDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVl
LT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAi
LCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZv
aWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVGZW5jZSh2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDMs
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUo
KSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT5jaGlsZCgw
KS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+Y2hpbGQoMiktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIHZhbGlkYXRlQXRvbWljKHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAgICAgICAgICAgIFZBTElEQVRF
KCF2YWx1ZS0+a2luZCgpLmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAzLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxk
KDApLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+dHlwZSgpKSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMiktPnR5
cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IHZhbGlkYXRlQXRvbWljKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNj
ZXNzKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXRv
bWljWGNoZ0FkZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAgICAgICAg
IGNhc2UgQXRvbWljWGNoZ09yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAg
ICAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hn
OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmlzQ2hpbGwoKSwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRy
ZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDApLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBl
KCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2
YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vz
cyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERlcGVu
ZDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMo
KSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVt
Q2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDApLT50eXBlKCksICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPnR5cGUoKSksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IFdhc21BZGRyZXNzOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmhh
c0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CkBAIC01MzcsNiAr
NTgxLDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0K
KyAgICAKKyAgICB2b2lkIHZhbGlkYXRlRmVuY2UoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAg
ICAgaWYgKG1lbW9yeS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIFZBTElEQVRFKG1lbW9ydHkt
PmFjY2Vzc0JhbmsoKSA9PSBHUCwgKCJGZW5jZSBhdCAiLCAqbWVtb3J5KSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgdmFsaWRhdGVBdG9taWMoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAg
QXRvbWljVmFsdWUqIGF0b21pYyA9IHZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAg
CisgICAgICAgIFZBTElEQVRFKGJlc3RUeXBlKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkgPT0g
YXRvbWljLT5vcGVyYXRpb25UeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgfQogCiAgICAg
dm9pZCB2YWxpZGF0ZVN0YWNrQWNjZXNzKFZhbHVlKiB2YWx1ZSkKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsy
OSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1
ZS5oIgorI2luY2x1ZGUgIkIzQXRvbWljVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNCb3R0b21Qcm92aWRlci5oIgogI2luY2x1ZGUgIkIzQ0Nh
bGxWYWx1ZS5oIgpAQCAtNTEwLDYgKzUxMSw3IEBAIGJvb2wgVmFsdWU6OnJldHVybnNCb29sKCkg
Y29uc3QKICAgICBjYXNlIEFib3ZlRXF1YWw6CiAgICAgY2FzZSBCZWxvd0VxdWFsOgogICAgIGNh
c2UgRXF1YWxPclVub3JkZXJlZDoKKyAgICBjYXNlIEF0b21pY1dlYWtDQVM6CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIGNhc2UgUGhpOgogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhh
dmUgYSBzdG9yeSBoZXJlLgpAQCAtNTg5LDYgKzU5MSw3IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVj
dHMoKSBjb25zdAogICAgIGNhc2UgQmVsb3dFcXVhbDoKICAgICBjYXNlIEVxdWFsT3JVbm9yZGVy
ZWQ6CiAgICAgY2FzZSBTZWxlY3Q6CisgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRGl2OgogICAgIGNhc2UgVURpdjoKQEAgLTYwMCwxNiArNjAzLDQ0IEBAIEVmZmVj
dHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgIGNhc2UgTG9hZDhTOgogICAgIGNhc2UgTG9h
ZDE2WjoKICAgICBjYXNlIExvYWQxNlM6Ci0gICAgY2FzZSBMb2FkOgotICAgICAgICByZXN1bHQu
cmVhZHMgPSBhczxNZW1vcnlWYWx1ZT4oKS0+cmFuZ2UoKTsKKyAgICBjYXNlIExvYWQ6IHsKKyAg
ICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICBy
ZXN1bHQucmVhZHMgPSBtZW1vcnktPnJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0Zl
bmNlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC53cml0ZXMgPSBtZW1vcnktPmZlbmNlUmFuZ2Uo
KTsKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAg
cmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICBicmVhazsKKyAgICB9CiAg
ICAgY2FzZSBTdG9yZTg6CiAgICAgY2FzZSBTdG9yZTE2OgotICAgIGNhc2UgU3RvcmU6Ci0gICAg
ICAgIHJlc3VsdC53cml0ZXMgPSBhczxNZW1vcnlWYWx1ZT4oKS0+cmFuZ2UoKTsKKyAgICBjYXNl
IFN0b3JlOiB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBhczxNZW1vcnlWYWx1ZT4o
KTsKKyAgICAgICAgcmVzdWx0LndyaXRlcyA9IG1lbW9yeS0+cmFuZ2UoKTsKKyAgICAgICAgaWYg
KG1lbW9yeS0+aGFzRmVuY2UoKSkgeworICAgICAgICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5
LT5mZW5jZVJhbmdlKCk7CisgICAgICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0b21pY1N0cm9u
Z0NBUzoKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgor
ICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNl
IEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hnOiB7CisgICAgICAgIEF0b21pY1Zh
bHVlKiBhdG9taWMgPSBhczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LnJlYWRzID0g
YXRvbWljLT5yYW5nZSgpIHwgYXRvbWljLT5mZW5jZVJhbmdlKCk7CisgICAgICAgIHJlc3VsdC53
cml0ZXMgPSBhdG9taWMtPnJhbmdlKCkgfCBhdG9taWMtPmZlbmNlUmFuZ2UoKTsKKyAgICAgICAg
aWYgKG1lbW9yeS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7
CiAgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7
CisgICAgfQogICAgIGNhc2UgV2FzbUFkZHJlc3M6CiAgICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5l
ZCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwpAQCAtNjE3LDE4ICs2NDgsNyBAQCBFZmZlY3RzIFZh
bHVlOjplZmZlY3RzKCkgY29uc3QKICAgICAgICAgY29uc3QgRmVuY2VWYWx1ZSogZmVuY2UgPSBh
czxGZW5jZVZhbHVlPigpOwogICAgICAgICByZXN1bHQucmVhZHMgPSBmZW5jZS0+cmVhZDsKICAg
ICAgICAgcmVzdWx0LndyaXRlcyA9IGZlbmNlLT53cml0ZTsKLSAgICAgICAgCi0gICAgICAgIC8v
IFByZXZlbnQga2lsbGluZyBvZiBmZW5jZXMgdGhhdCBjbGFpbSBub3QgdG8gd3JpdGUgYW55dGhp
bmcuIEl0J3MgYSBiaXQgd2VpcmQgdGhhdCB3ZSB1c2UKLSAgICAgICAgLy8gbG9jYWwgc3RhdGUg
YXMgdGhlIHdheSB0byBkbyB0aGlzLCBidXQgaXQgaGFwcGVucyB0byB3b3JrOiB3ZSBtdXN0IGFz
c3VtZSB0aGF0IHdlIGNhbm5vdAotICAgICAgICAvLyBraWxsIHdyaXRlc0xvY2FsU3RhdGUgdW5s
ZXNzIHdlIHVuZGVyc3RhbmRzIGV4YWN0bHkgd2hhdCB0aGUgaW5zdHJ1Y3Rpb24gaXMgZG9pbmcg
KGxpa2UKLSAgICAgICAgLy8gdGhlIHdheSB0aGF0IGZpeFNTQSB1bmRlcnN0YW5kcyBTZXQvR2V0
IGFuZCB0aGUgd2F5IHRoYXQgcmVkdWNlU3RyZW5ndGggYW5kIG90aGVycwotICAgICAgICAvLyB1
bmRlcnN0YW5kIFVwc2lsb24pLiBUaGlzIHdvdWxkIG9ubHkgYmVjb21lIGEgcHJvYmxlbSBpZiB3
ZSBoYWQgc29tZSBhbmFseXNpcyB0aGF0IHdhcwotICAgICAgICAvLyBsb29raW5nIHRvIHVzZSB0
aGUgd3JpdGVzTG9jYWxTdGF0ZSBiaXQgdG8gaW52YWxpZGF0ZSBhIENTRSBvdmVyIGxvY2FsIHN0
YXRlIG9wZXJhdGlvbnMuCi0gICAgICAgIC8vIFRoZW4gYSBGZW5jZSB3b3VsZCBsb29rIGJsb2Nr
LCBzYXksIHRoZSBlbGltaW5hdGlvbiBvZiBhIHJlZHVuZGFudCBHZXQuIEJ1dCBpdCBsaWtlCi0g
ICAgICAgIC8vIHRoYXQncyBub3QgYXQgYWxsIGhvdyBvdXIgb3B0aW1pemF0aW9ucyBmb3IgU2V0
L0dldC9VcHNpbG9uL1BoaSB3b3JrIC0gdGhleSBncm9rIHRoZWlyCi0gICAgICAgIC8vIG9wZXJh
dGlvbnMgZGVlcGx5IGVub3VnaCB0aGF0IHRoZXkgaGF2ZSBubyBuZWVkIHRvIGNoZWNrIHRoaXMg
Yml0IC0gc28gdGhpcyBjaGVhdCBpcwotICAgICAgICAvLyBmaW5lLgotICAgICAgICByZXN1bHQu
d3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CisgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENDYWxsOgpAQCAtNjk0LDYgKzcxNCw3IEBA
IFZhbHVlS2V5IFZhbHVlOjprZXkoKSBjb25zdAogICAgIGNhc2UgQ2hlY2s6CiAgICAgY2FzZSBC
aXR3aXNlQ2FzdDoKICAgICBjYXNlIE5lZzoKKyAgICBjYXNlIERlcGVuZDoKICAgICAgICAgcmV0
dXJuIFZhbHVlS2V5KGtpbmQoKSwgdHlwZSgpLCBjaGlsZCgwKSk7CiAgICAgY2FzZSBBZGQ6CiAg
ICAgY2FzZSBTdWI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDYgKzY4LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBPcGNvZGUgb3Bjb2Rl
KCkgY29uc3QgeyByZXR1cm4ga2luZCgpLm9wY29kZSgpOyB9CiAgICAgCisgICAgLy8gTm90ZSB0
aGF0IHRoZSBraW5kIGlzIG1lYW50IHRvIGJlIGltbXV0YWJsZS4gRG8gdGhpcyB3aGVuIHlvdSBr
bm93IHRoYXQgdGhpcyBpcyBzYWZlLiBJdCdzIG5vdAorICAgIC8vIHVzdWFsbHkgc2FmZS4KKyAg
ICB2b2lkIHNldEtpbmRVbnNhZmVseShLaW5kIGtpbmQpIHsgbV9raW5kID0ga2luZDsgfQorICAg
IAogICAgIC8vIEl0J3MgZ29vZCBwcmFjdGljZSB0byBtaXJyb3IgS2luZCBtZXRob2RzIGhlcmUs
IHNvIHlvdSBjYW4gc2F5IHZhbHVlLT5pc0JsYWgoKQogICAgIC8vIGluc3RlYWQgb2YgdmFsdWUt
PmtpbmQoKS5pc0JsYWgoKS4KICAgICBib29sIGlzQ2hpbGwoKSBjb25zdCB7IHJldHVybiBraW5k
KCkuaXNDaGlsbCgpOyB9CkBAIC0xMDcsNiArMTExLDggQEAgcHVibGljOgogICAgIC8vIHZhbHVl
cyB3aXRoIElkZW50aXRpZXMgb24gYm90dG9tIGNvbnN0YW50cy4gRm9yIHRoaXMgcmVhc29uLCB0
aGlzIHRha2VzIGEgY2FsbGJhY2sgdGhhdCBpcwogICAgIC8vIHJlc3BvbnNpYmxlIGZvciBjcmVh
dGluZyBib3R0b21zLiBUaGVyZSdzIGEgdXRpbGl0eSBmb3IgdGhpcywgc2VlIEIzQm90dG9tUHJv
dmlkZXIuaC4gWW91CiAgICAgLy8gY2FuIGFsc28gYWNjZXNzIHRoYXQgdXRpbGl0eSB1c2luZyBy
ZXBsYWNlV2l0aEJvdHRvbShJbnNlcnRpb25TZXQmLCBzaXplX3QpLgorICAgIC8vCisgICAgLy8g
WW91J3JlIGd1YXJhbnRlZWQgdGhhdCBib3R0b20gaXMgemVyby4KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBCb3R0b21Qcm92aWRlcj4KICAgICB2b2lkIHJlcGxhY2VXaXRoQm90dG9tKGNvbnN0IEJv
dHRvbVByb3ZpZGVyJik7CiAgICAgCkBAIC0zMjEsNiArMzI3LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBJVG9GOgogICAgICAgICBjYXNlIEJpdHdpc2VDYXN0OgogICAgICAgICBjYXNlIEJy
YW5jaDoKKyAgICAgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobnVt
QXJncyAhPSAxKSkKICAgICAgICAgICAgICAgICBiYWRLaW5kKGtpbmQsIG51bUFyZ3MpOwogICAg
ICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDM4IEBACiAKICNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KIAorbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1R5cGUgYmVzdFR5
cGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0aCkKK3sKKyAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAg
Y2FzZSBXaWR0aDg6CisgICAgY2FzZSBXaWR0aDE2OgorICAgIGNhc2UgV2lkdGgzMjoKKyAgICAg
ICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICByZXR1cm4g
SW50MzI7CisgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICByZXR1cm4gRmxvYXQ7CisgICAg
ICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIFZvaWQ7CisgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAg
ICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBJbnQ2NDsKKyAgICAgICAgY2FzZSBG
UDoKKyAgICAgICAgICAgIHJldHVybiBEb3VibGU7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFZvaWQ7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCiBuYW1lc3BhY2UgV1RGIHsKIAogdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6QjM6OldpZHRoIHdpZHRoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2MiwxOCBA
QCBpbmxpbmUgV2lkdGggd2lkdGhGb3JUeXBlKFR5cGUgdHlwZSkKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAoraW5saW5lIFdpZHRoIGNhbm9uaWNhbFdpZHRoKFdpZHRoIHdpZHRoKQor
eworICAgIHJldHVybiBzdGQ6Om1heChXaWR0aDMyLCB3aWR0aCk7Cit9CisKK2lubGluZSBXaWR0
aCBpc0Nhbm9uaWNhbFdpZHRoKFdpZHRoIHdpZHRoKQoreworICAgIHJldHVybiB3aWR0aCA+PSBX
aWR0aDMyOworfQorCitUeXBlIGJlc3RUeXBlKEJhbmsgYmFuaywgV2lkdGggd2lkdGgpOworCiBp
bmxpbmUgV2lkdGggY29uc2VydmF0aXZlV2lkdGgoQmFuayBiYW5rKQogewogICAgIHJldHVybiBi
YW5rID09IEdQID8gcG9pbnRlcldpZHRoKCkgOiBXaWR0aDY0OwpAQCAtOTMsNiArMTA1LDIwIEBA
IGlubGluZSBXaWR0aCB3aWR0aEZvckJ5dGVzKHVuc2lnbmVkIGJ5dGUKICAgICB9CiB9CiAKK2lu
bGluZSB1aW50NjRfdCBtYXNrKFdpZHRoIHdpZHRoKQoreworICAgIHN3aXRjaCAod2lkdGgpIHsK
KyAgICBjYXNlIFdpZHRoODoKKyAgICAgICAgcmV0dXJuIDB4MDAwMDAwMDAwMDAwMDBmZmxsdTsK
KyAgICBjYXNlIFdpZHRoMTY6CisgICAgICAgIHJldHVybiAweDAwMDAwMDAwMDAwMGZmZmZsbHU7
CisgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICByZXR1cm4gMHgwMDAwMDAwMGZmZmZmZmZmbGx1
OworICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgcmV0dXJuIDB4ZmZmZmZmZmZmZmZmZmZmZmxs
dTsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiBuYW1lc3BhY2UgV1RG
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBAIHVuc2lnbmVkIEFyZzo6anNIYXNoKCkgY29u
c3QKICAgICBjYXNlIFJlbENvbmQ6CiAgICAgY2FzZSBSZXNDb25kOgogICAgIGNhc2UgRG91Ymxl
Q29uZDoKKyAgICBjYXNlIFN0YXR1c0NvbmQ6CiAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAg
cmVzdWx0ICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29mZnNldCk7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTgyLDYgKzE4Myw5IEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAgICBvdXQucHJpbnQoYXNEb3VibGVDb25k
aXRpb24oKSk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YXR1c0NvbmQ6CisgICAgICAg
IG91dC5wcmludChhc1N0YXR1c0NvbmRpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgU3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKHNwZWNpYWwoKSkpOwog
ICAgICAgICByZXR1cm47CkBAIC0yNDEsNiArMjQ1LDkgQEAgdm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIEFyZwogICAgIGNhc2UgQXJnOjpEb3VibGVDb25kOgogICAgICAgICBv
dXQucHJpbnQoIkRvdWJsZUNvbmQiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpT
dGF0dXNDb25kOgorICAgICAgICBvdXQucHJpbnQoIlN0YXR1c0NvbmQiKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQXJnOjpTcGVjaWFsOgogICAgICAgICBvdXQucHJpbnQoIlNwZWNpYWwi
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjg1LDYgKzI5Miw5IEBAIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFyZzo6RWFybHlEZWY6CiAgICAgICAg
IG91dC5wcmludCgiRWFybHlEZWYiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpF
YXJseVpEZWY6CisgICAgICAgIG91dC5wcmludCgiRWFybHlaRGVmIik7CisgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEFyZzo6U2NyYXRjaDoKICAgICAgICAgb3V0LnByaW50KCJTY3JhdGNoIik7
CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
aAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJl
bENvbmQsCiAgICAgICAgIFJlc0NvbmQsCiAgICAgICAgIERvdWJsZUNvbmQsCisgICAgICAgIFN0
YXR1c0NvbmQsCiAgICAgICAgIFNwZWNpYWwsCiAgICAgICAgIFdpZHRoQXJnCiAgICAgfTsKQEAg
LTE1MSw2ICsxNTIsOCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGFzIFVzZSBoYXMgdW5kZWZpbmVk
IGJlaGF2aW9yOiB0aGUgdXNlIG1heSBoYXBwZW4gYmVmb3JlIHRoZSBkZWYsIG9yIGl0IG1heSBo
YXBwZW4gYWZ0ZXIKICAgICAgICAgLy8gaXQuCiAgICAgICAgIEVhcmx5RGVmLAorICAgICAgICAg
ICAgCisgICAgICAgIEVhcmx5WkRlZiwKIAogICAgICAgICAvLyBTb21lIGluc3RydWN0aW9ucyBu
ZWVkIGEgc2NyYXRjaCByZWdpc3Rlci4gV2UgbW9kZWwgdGhpcyBieSBzYXlpbmcgdGhhdCB0aGUg
dGVtcG9yYXJ5IGlzCiAgICAgICAgIC8vIGRlZmluZWQgZWFybHkgYW5kIHVzZWQgbGF0ZS4gVGhp
cyByb2xlIGltcGxpZXMgdGhhdC4KQEAgLTE4Niw2ICsxODksNyBAQCBwdWJsaWM6CiAgICAgICAg
IGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIEVhcmx5RGVm
OgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIwNiw2ICsyMTAsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBTY3JhdGNoOgog
ICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTIyOCw2ICsyMzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAg
ICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNl
IEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiByb2xlOwogICAgICAgICBjYXNlIFVzZToK
ICAgICAgICAgICAgIHJldHVybiBDb2xkVXNlOwpAQCAtMjUzLDYgKzI1OSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKICAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAg
ICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTI3NCw2ICsyODEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2Fz
ZSBVc2VBZGRyOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRl
ZjoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTI5NCw2ICszMDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
WkRlZjoKICAgICAgICAgY2FzZSBVc2VaRGVmOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAg
ICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTMxNSw2ICszMjQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgTGF0ZUNvbGRVc2U6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICBjYXNlIFNj
cmF0Y2g6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzMwLDYgKzM0
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIExhdGVV
c2U6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAg
ICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0zNTgsNiArMzY5LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIFpEZWY6CiAgICAgICAgIGNhc2UgVXNlWkRlZjoK
KyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUzMyw2ICs1NDUsMTQgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBBcmcg
c3RhdHVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6U3RhdHVzQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAg
ICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGF0dXND
b25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCiAgICAgc3RhdGljIEFyZyBzcGVjaWFsKEFpcjo6U3BlY2lhbCog
c3BlY2lhbCkKICAgICB7CiAgICAgICAgIEFyZyByZXN1bHQ7CkBAIC02NTgsMTIgKzY3OCwxOCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gRG91YmxlQ29uZDsKICAgICB9CiAK
KyAgICBib29sIGlzU3RhdHVzQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2lu
ZCgpID09IFN0YXR1c0NvbmQ7CisgICAgfQorCiAgICAgYm9vbCBpc0NvbmRpdGlvbigpIGNvbnN0
CiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewogICAgICAgICBjYXNlIFJlbENvbmQ6
CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgorICAgICAg
ICBjYXNlIFN0YXR1c0NvbmQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg1MSw2ICs4NzcsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAg
ICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgY2Fz
ZSBTcGVjaWFsOgogICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC04NzIsNiArODk5LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlbENvbmQ6CiAg
ICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgorICAgICAgICBj
YXNlIFN0YXR1c0NvbmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKICAgICAgICAgY2FzZSBXaWR0
aEFyZzoKICAgICAgICAgY2FzZSBJbnZhbGlkOgpAQCAtMTA1OCw2ICsxMDg2LDcgQEAgcHVibGlj
OgogICAgICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAg
Y2FzZSBEb3VibGVDb25kOgorICAgICAgICBjYXNlIFN0YXR1c0NvbmQ6CiAgICAgICAgIGNhc2Ug
U3BlY2lhbDoKICAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMTE3Nyw2ICsxMjA2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24+KG1fb2Zmc2V0KTsKICAgICB9CiAg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OlN0YXR1c0NvbmRpdGlvbiBhc1N0YXR1c0NvbmRpdGlv
bigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTdGF0dXNDb25kKCkpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlN0YXR1c0NvbmRpdGlvbj4obV9v
ZmZzZXQpOworICAgIH0KKyAgICAKICAgICAvLyBUZWxscyB5b3UgaWYgdGhlIEFyZyBpcyBpbnZl
cnRpYmxlLiBPbmx5IGNvbmRpdGlvbiBhcmd1bWVudHMgYXJlIGludmVydGlibGUsIGFuZCBldmVu
IGZvciB0aG9zZSwgdGhlcmUKICAgICAvLyBhcmUgYSBmZXcgZXhjZXB0aW9ucyAtIG5vdGFibHkg
T3ZlcmZsb3cgYW5kIFNpZ25lZC4KICAgICBib29sIGlzSW52ZXJ0aWJsZSgpIGNvbnN0CkBAIC0x
MTg0LDYgKzEyMTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CiAgICAg
ICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgorICAgICAgICBjYXNl
IFN0YXR1c0NvbmQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBSZXND
b25kOgogICAgICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjppc0ludmVydGlibGUoYXNS
ZXN1bHRDb25kaXRpb24oKSk7CkBAIC0xMjA0LDYgKzEyNDAsOCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0KGFzUmVzdWx0Q29uZGl0
aW9uKCkpKTsKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAgICAgICAgcmV0dXJuIGRv
dWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc0RvdWJsZUNvbmRpdGlvbigpKSk7Cisg
ICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXNDb25kKE1h
Y3JvQXNzZW1ibGVyOjppbnZlcnQoYXNTdGF0dXNDb25kaXRpb24oKSkpOwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIHJldHVybiBBcmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiAr
MzUsMTkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogCiBjb25z
dCBjaGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpkdW1wUHJlZml4ID0gIiMiOwogCit2b2lkIEJhc2lj
QmxvY2s6OnNldFN1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgbV9zdWNjZXNz
b3JzLnJlc2l6ZSgxKTsKKyAgICBtX3N1Y2Nlc3NvcnNbMF0gPSB0YXJnZXQ7Cit9CisKK3ZvaWQg
QmFzaWNCbG9jazo6c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sgdGFrZW4sIEZyZXF1ZW50
ZWRCbG9jayBub3RUYWtlbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMucmVzaXplKDIpOworICAgIG1f
c3VjY2Vzc29yc1swXSA9IHRha2VuOworICAgIG1fc3VjY2Vzc29yc1sxXSA9IG5vdFRha2VuOwor
fQorCiBib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQog
ewogICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdWNjZXNz
b3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CiAgICAg
U3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQogCisg
ICAgdm9pZCBzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayk7CisgICAgdm9pZCBzZXRTdWNj
ZXNzb3JzKEZyZXF1ZW50ZWRCbG9jaywgRnJlcXVlbnRlZEJsb2NrKTsKKwogICAgIEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBzdWNjZXNz
b3IoaW5kZXgpLmJsb2NrKCk7IH0KICAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yQmxvY2sodW5z
aWduZWQgaW5kZXgpIHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsgfQogICAgIFN1
Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxv
Y2tzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRp
b25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QmxvY2tJbnNlcnRpb25TZXQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0Lmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvQnViYmxlU29ydC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK0Jsb2NrSW5zZXJ0aW9u
U2V0OjpCbG9ja0luc2VydGlvblNldChDb2RlICZjb2RlKQorICAgIDogR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0KGNvZGUubV9ibG9ja3MpCit7Cit9CisKK0Jsb2NrSW5zZXJ0aW9uU2V0Ojp+Qmxv
Y2tJbnNlcnRpb25TZXQoKQoreworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzR2VuZXJpY0Jsb2NrSXNuZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWly
Q29kZS5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwor
Y2xhc3MgSW5zZXJ0aW9uU2V0OworCit0eXBlZGVmIEdlbmVyaWNCbG9ja0luc2VydGlvblNldDxC
YXNpY0Jsb2NrPjo6QmxvY2tJbnNlcnRpb24gQmxvY2tJbnNlcnRpb247CisKK2NsYXNzIEJsb2Nr
SW5zZXJ0aW9uU2V0IDogcHVibGljIEdlbmVyaWNCbG9ja0luc2VydGlvblNldDxCYXNpY0Jsb2Nr
PiB7CitwdWJsaWM6CisgICAgQmxvY2tJbnNlcnRpb25TZXQoQ29kZSYpOworICAgIH5CbG9ja0lu
c2VydGlvblNldCgpOworICAgIAorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXZlbnR1YWxseSBp
bXBsZW1lbnQgQjM6OkJsb2NrSW5zZXJ0aW9uU2V0J3Mgc3BsaXRGb3J3YXJkKCkuCit9OworCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw4IEBAIHZvaWQgcHJlcGFyZUZv
ckdlbmVyYXRpb24oQ29kZSYgY29kZSkKICAgICAgICAgZGF0YUxvZygiSW5pdGlhbCBhaXI6XG4i
KTsKICAgICAgICAgZGF0YUxvZyhjb2RlKTsKICAgICB9CisgICAgCisgICAgc2ltcGxpZnlDRkco
Y29kZSk7CiAKICAgICBsb3dlck1hY3Jvcyhjb2RlKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTY2LDkgKzE2NiwxMiBAQCB4ODY6IEFkZEZsb2F0IFU6RjozMiwgVUQ6RjozMgogU3ViMzIg
VTpHOjMyLCBVWkQ6RzozMgogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4
ODY6IEltbSwgQmFzZUluZGV4CiAgICAgSW1tLCBUbXAKICAgICB4ODY6IEFkZHIsIFRtcAorICAg
IHg4NjogQmFzZUluZGV4LCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgorICAgIHg4NjogVG1wLCBC
YXNlSW5kZXgKIAogYXJtNjQ6IFN1YjMyIFU6RzozMiwgVTpHOjMyLCBEOkc6MzIKICAgICBUbXAs
IFRtcCwgVG1wCkBAIC0xNzYsOSArMTc5LDEyIEBAIGFybTY0OiBTdWIzMiBVOkc6MzIsIFU6Rzoz
MiwgRDpHOjMyCiA2NDogU3ViNjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKICAgICB4
ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBCYXNlSW5kZXgKICAgICBJbW0sIFRtcAogICAg
IHg4NjogQWRkciwgVG1wCisgICAgeDg2OiBCYXNlSW5kZXgsIFRtcAogICAgIHg4NjogVG1wLCBB
ZGRyCisgICAgeDg2OiBUbXAsIEJhc2VJbmRleAogCiBhcm02NDogU3ViNjQgVTpHOjY0LCBVOkc6
NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBUbXAKQEAgLTMzMCw4ICszMzYsMTEgQEAgQW5kMzIg
VTpHOjMyLCBVWkQ6RzozMgogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIFRtcAogICAgIHg4
NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAsIEJhc2VJbmRleAogICAgIHg4NjogQWRkciwgVG1w
CisgICAgeDg2OiBCYXNlSW5kZXgsIFRtcAogICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJ
bW0sIEJhc2VJbmRleAogCiA2NDogQW5kNjQgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRt
cCwgVG1wLCBUbXAKQEAgLTMzOSw3ICszNDgsMTMgQEAgQW5kMzIgVTpHOjMyLCBVWkQ6RzozMgog
CiB4ODZfNjQ6IEFuZDY0IFU6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCi0gICAgeDg2OiBJ
bW0sIFRtcAorICAgIEltbSwgVG1wCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBCYXNlSW5kZXgK
KyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEJhc2VJbmRleAorICAgIEFkZHIsIFRtcAorICAgIEJh
c2VJbmRleCwgVG1wCiAKIEFuZERvdWJsZSBVOkY6NjQsIFU6Rjo2NCwgRDpGOjY0CiAgICAgVG1w
LCBUbXAsIFRtcApAQCAtNDgwLDggKzQ5NSwxMSBAQCBYb3IzMiBVOkc6MzIsIFVaRDpHOjMyCiAg
ICAgVG1wLCBUbXAKICAgICB4ODY6IEltbSwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4
ODY6IFRtcCwgQmFzZUluZGV4CiAgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IEJhc2VJbmRl
eCwgVG1wCiAgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgQmFzZUluZGV4CiAKIDY0
OiBYb3I2NCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcApAQCAtNDkw
LDYgKzUwOCwxMSBAQCBYb3IzMiBVOkc6MzIsIFVaRDpHOjMyCiA2NDogWG9yNjQgVTpHOjY0LCBV
RDpHOjY0CiAgICAgVG1wLCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgorICAgIHg4NjogVG1wLCBC
YXNlSW5kZXgKKyAgICB4ODY6IEFkZHIsIFRtcAorICAgIHg4NjogQmFzZUluZGV4LCBUbXAKKyAg
ICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBCYXNlSW5kZXgKICAgICB4ODY6IEltbSwg
VG1wCiAKIGFybTY0OiBOb3QzMiBVOkc6MzIsIFpEOkc6MzIKQEAgLTY2OCwyOCArNjkxLDM4MCBA
QCBMb2FkOCBVOkc6OCwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAor
TG9hZEFjcTggVTpHOjgsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisK
IFN0b3JlOCBVOkc6OCwgRDpHOjgKICAgICBUbXAsIEluZGV4CiAgICAgVG1wLCBBZGRyCiAgICAg
eDg2OiBJbW0sIEluZGV4CiAgICAgeDg2OiBJbW0sIEFkZHIKIAorU3RvcmVSZWw4IFU6Rzo4LCBE
Okc6OAorICAgIFRtcCwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgK
KyAgICB4ODY6IEltbSwgQWRkcgorCiBMb2FkOFNpZ25lZEV4dGVuZFRvMzIgVTpHOjgsIFpEOkc6
MzIKICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3E4U2lnbmVkRXh0ZW5k
VG8zMiBVOkc6OCwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogTG9h
ZDE2IFU6RzoxNiwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9h
ZEFjcTE2IFU6RzoxNiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwog
TG9hZDE2U2lnbmVkRXh0ZW5kVG8zMiBVOkc6MTYsIFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAg
ICBJbmRleCwgVG1wCiAKK0xvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIgVTpHOjE2LCBaRDpHOjMy
CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBTdG9yZTE2IFU6RzoxNiwgRDpHOjE2
CiAgICAgVG1wLCBJbmRleAogICAgIFRtcCwgQWRkcgogCitTdG9yZUFjcTE2IFU6RzoxNiwgRDpH
OjE2CisgICAgVG1wLCBJbmRleAorICAgIFRtcCwgQWRkcgorCitMb2FkQWNxMzIgVTpHOjMyLCBa
RDpHOjMyCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK1N0
b3JlUmVsMzIgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAor
ICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisKKzY0OiBMb2FkQWNxNjQg
VTpHOjY0LCBaRDpHOjY0CisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwg
VG1wCisKKzY0OiBTdG9yZVJlbDY0IFU6Rzo2NCwgWkQ6Rzo2NAorICAgIFRtcCwgQWRkcgorICAg
IFRtcCwgSW5kZXgKKyAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorCisj
IFRoZSBmaXJzdCBvcGVyYW5kIGlzIHJheC4KK3g4NjogQXRvbWljU3Ryb25nQ0FTOCBVOkc6MzIs
IFVEOkc6OCwgVTpHOjgsIFVEOkc6OCwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1w
LCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2
OiBBdG9taWNTdHJvbmdDQVMxNiBVOkc6MzIsIFVEOkc6MTYsIFU6RzozMiwgVUQ6RzoxNiwgWkQ6
Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25k
LCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVMzMiBVOkc6MzIs
IFVEOkc6MzIsIFU6RzozMiwgVUQ6RzozMiwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwg
VG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKwor
eDg2XzY0OiBBdG9taWNTdHJvbmdDQVM2NCBVOkc6MzIsIFVEOkc6NjQsIFU6Rzo2NCwgVUQ6Rzo2
NCwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0
dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVM4IFVE
Okc6OCwgVTpHOjgsIFVEOkc6OAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwg
SW5kZXgKKworeDg2OiBBdG9taWNTdHJvbmdDQVMxNiBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYK
KyAgICBUbXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQXRvbWlj
U3Ryb25nQ0FTMzIgVUQ6RzozMiwgVTpHOjMyLCBVRDpHOjMyCisgICAgVG1wKiwgVG1wLCBBZGRy
CisgICAgVG1wKiwgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1N0cm9uZ0NBUzY0IFVEOkc6
NjQsIFU6Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwg
SW5kZXgKKworeDg2OiBCcmFuY2hBdG9taWNTdHJvbmdDQVM4IFU6RzozMiwgVUQ6Rzo4LCBVOkc6
OCwgVUQ6Rzo4IC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIKKyAgICBT
dGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNoQXRvbWljU3Ryb25nQ0FT
MTYgVTpHOjMyLCBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYgL2JyYW5jaAorICAgIFN0YXR1c0Nv
bmQsIFRtcCosIFRtcCwgQWRkcgorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgKKwor
eDg2OiBCcmFuY2hBdG9taWNTdHJvbmdDQVMzMiBVOkc6MzIsIFVEOkc6MzIsIFU6RzozMiwgVUQ6
RzozMiAvYnJhbmNoCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyCisgICAgU3RhdHVz
Q29uZCwgVG1wKiwgVG1wLCBJbmRleAorCit4ODZfNjQ6IEJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0
IFU6RzozMiwgVUQ6Rzo2NCwgVTpHOjY0LCBVRDpHOjY0IC9icmFuY2gKKyAgICBTdGF0dXNDb25k
LCBUbXAqLCBUbXAsIEFkZHIKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4
NjogQXRvbWljQWRkOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRl
eAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNBZGQxNiBVOkc6
MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRy
CisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FkZDMyIFU6RzozMiwgVUQ6RzozMgorICAg
IEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4
CisKK3g4Nl82NDogQXRvbWljQWRkNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisg
ICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9t
aWNTdWI4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1N1YjE2IFU6RzoxNiwgVUQ6
RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBU
bXAsIEluZGV4CisKK3g4NjogQXRvbWljU3ViMzIgVTpHOjMyLCBVRDpHOjMyCisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
XzY0OiBBdG9taWNTdWI2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0s
IEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FuZDgg
VTpHOjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljQW5kMTYgVTpHOjE2LCBVRDpHOjE2Cisg
ICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5k
ZXgKKworeDg2OiBBdG9taWNBbmQzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAg
ICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0
b21pY0FuZDY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgK
KyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljT3I4IFU6Rzo4LCBV
RDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAg
VG1wLCBJbmRleAorCit4ODY6IEF0b21pY09yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
OiBBdG9taWNPcjMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5k
ZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljT3I2NCBV
Okc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hvcjggVTpHOjgsIFVEOkc6OAorICAg
IEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4
CisKK3g4NjogQXRvbWljWG9yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAg
SW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNY
b3IzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1hvcjY0IFU6Rzo2NCwg
VUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljTmVnOCBVRDpHOjgKKyAgICBBZGRyCisgICAgSW5k
ZXgKKworeDg2OiBBdG9taWNOZWcxNiBVRDpHOjE2CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4
NjogQXRvbWljTmVnMzIgVUQ6RzozMgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODZfNjQ6IEF0
b21pY05lZzY0IFVEOkc6NjQKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOb3Q4
IFVEOkc6OAorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY05vdDE2IFVEOkc6MTYK
KyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOb3QzMiBVRDpHOjMyCisgICAgQWRk
cgorICAgIEluZGV4CisKK3g4Nl82NDogQXRvbWljTm90NjQgVUQ6Rzo2NAorICAgIEFkZHIKKyAg
ICBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQ4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQxNiBVRDpHOjE2LCBVRDpH
OjE2CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQz
MiBVRDpHOjMyLCBVRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZf
NjQ6IEF0b21pY1hjaGdBZGQ2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAg
VG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGc4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGcxNiBVRDpHOjE2LCBVRDpHOjE2
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGczMiBVRDpH
OjMyLCBVRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0
b21pY1hjaGc2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCithcm02NDogTG9hZExpbms4IFU6Rzo4LCBaRDpHOjgKKyAgICBBZGRyLCBUbXAKKyAgICBJ
bmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTggVTpHOjgsIFpEOkc6OAorICAgIEFkZHIs
IFRtcAorICAgIEluZGV4LCBUbXAKKworIyBTdXBlciBjb25mdXNpbmcgZmFjdDogdGhpcyByZXR1
cm5zIDAgdG8gbWVhbiBzdWNjZXNzLCAxIHRvIG1lYW4gZmFpbHVyZS4KK2FybTY0OiBTdG9yZUNv
bmQ4IFU6Rzo4LCBEOkc6OCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJ
bmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmRSZWw4IFU6Rzo4LCBEOkc6OCwgRVpEOkc6OAor
ICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlu
azE2IFU6RzoxNiwgWkQ6RzoxNgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJt
NjQ6IExvYWRMaW5rQWNxMTYgVTpHOjE2LCBaRDpHOjE2CisgICAgQWRkciwgVG1wCisgICAgSW5k
ZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kMTYgVTpHOjE2LCBEOkc6MTYsIEVaRDpHOjgKKyAg
ICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25k
UmVsMTYgVTpHOjE2LCBEOkc6MTYsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRt
cCwgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmszMiBVOkc6MzIsIFpEOkc6MzIKKyAgICBB
ZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTMyIFU6RzozMiwg
WkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29u
ZDMyIFU6RzozMiwgRDpHOjMyLCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAs
IEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDMyIFU6RzozMiwgRDpHOjMyLCBFWkQ6
Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IExv
YWRMaW5rNjQgVTpHOjY0LCBaRDpHOjY0CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAor
Cithcm02NDogTG9hZExpbmtBY3E2NCBVOkc6NjQsIFpEOkc6NjQKKyAgICBBZGRyLCBUbXAKKyAg
ICBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQ2NCBVOkc6NjQsIEQ6Rzo2NCwgRVpEOkc6
OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9y
ZUNvbmRSZWw2NCBVOkc6NjQsIEQ6Rzo2NCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisg
ICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBEZXBlbmQzMiBVOkc6MzIsIEQ6RzozMgorICAg
IFRtcCwgVG1wCisKK2FybTY0OiBEZXBlbmQ2NCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1w
CisKIENvbXBhcmUzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCiAgICAgUmVsQ29u
ZCwgVG1wLCBUbXAsIFRtcAogICAgIFJlbENvbmQsIFRtcCwgSW1tLCBUbXAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRl
ci5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Nyw2ICsxNzcs
MTAgQEAgdm9pZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKICAgICAgICAgY2FzZSBC
cmFuY2hTdWI2NDoKICAgICAgICAgY2FzZSBCcmFuY2hOZWczMjoKICAgICAgICAgY2FzZSBCcmFu
Y2hOZWc2NDoKKyAgICAgICAgY2FzZSBCcmFuY2hBdG9taWNTdHJvbmdDQVM4OgorICAgICAgICBj
YXNlIEJyYW5jaEF0b21pY1N0cm9uZ0NBUzE2OgorICAgICAgICBjYXNlIEJyYW5jaEF0b21pY1N0
cm9uZ0NBUzMyOgorICAgICAgICBjYXNlIEJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0OgogICAgICAg
ICAgICAgaWYgKGNvZGUuZmluZE5leHRCbG9jayhibG9jaykgPT0gYmxvY2stPnN1Y2Nlc3NvckJs
b2NrKDApICYmIGJyYW5jaC5hcmdzWzBdLmlzSW52ZXJ0aWJsZSgpKSB7CiAgICAgICAgICAgICAg
ICAgc3RkOjpzd2FwKGJsb2NrLT5zdWNjZXNzb3IoMCksIGJsb2NrLT5zdWNjZXNzb3IoMSkpOwog
ICAgICAgICAgICAgICAgIGJyYW5jaC5hcmdzWzBdID0gYnJhbmNoLmFyZ3NbMF0uaW52ZXJ0ZWQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBhZElu
dGVyZmVyZW5jZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiAr
NDgsNyBAQCB2b2lkIHBhZEludGVyZmVyZW5jZShDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAg
IFsmXSAoQXJnJiwgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFy
bHlEZWY6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJseVpEZWY6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBoYXNFYXJseURlZiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkxhdGVVc2U6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUsNyBA
QCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6TGF0ZUNvbGRVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTY3Jh
dGNoOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlEZWY6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpFYXJseVpEZWY6CiAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKFJlZyByZWcgOiBjb2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoYmFuaykpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIu
Z2V0KHJlZykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0
KHJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0
b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVf
Z2VuZXJhdG9yLnJiCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE0ICs1MSw0
OSBAQCBjbGFzcyBBcmcKICAgICAgICAgQGJhbmsgPSBiYW5rCiAgICAgICAgIEB3aWR0aCA9IHdp
ZHRoCiAgICAgZW5kCi0KLSAgICBkZWYgd2lkdGhDb2RlCisgICAgCisgICAgZGVmIHNlbGYud2lk
dGhDb2RlKHdpZHRoKQogICAgICAgICBpZiB3aWR0aCA9PSAiUHRyIgogICAgICAgICAgICAgInBv
aW50ZXJXaWR0aCgpIgogICAgICAgICBlbHNlCiAgICAgICAgICAgICAiV2lkdGgje3dpZHRofSIK
ICAgICAgICAgZW5kCiAgICAgZW5kCisKKyAgICBkZWYgd2lkdGhDb2RlCisgICAgICAgIEFyZy53
aWR0aENvZGUod2lkdGgpCisgICAgZW5kCisgICAgCisgICAgZGVmIHNlbGYucm9sZUNvZGUocm9s
ZSkKKyAgICAgICAgY2FzZSByb2xlCisgICAgICAgIHdoZW4gIlUiCisgICAgICAgICAgICAiVXNl
IgorICAgICAgICB3aGVuICJEIgorICAgICAgICAgICAgIkRlZiIKKyAgICAgICAgd2hlbiAiWkQi
CisgICAgICAgICAgICAiWkRlZiIKKyAgICAgICAgd2hlbiAiVUQiCisgICAgICAgICAgICAiVXNl
RGVmIgorICAgICAgICB3aGVuICJVWkQiCisgICAgICAgICAgICAiVXNlWkRlZiIKKyAgICAgICAg
d2hlbiAiVUEiCisgICAgICAgICAgICAiVXNlQWRkciIKKyAgICAgICAgd2hlbiAiUyIKKyAgICAg
ICAgICAgICJTY3JhdGNoIgorICAgICAgICB3aGVuICJFRCIKKyAgICAgICAgICAgICJFYXJseURl
ZiIKKyAgICAgICAgd2hlbiAiRVpEIgorICAgICAgICAgICAgIkVhcmx5WkRlZiIKKyAgICAgICAg
d2hlbiAiTFUiCisgICAgICAgICAgICAiTGF0ZVVzZSIKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmFpc2UKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgCisgICAgZGVmIHJvbGVDb2RlCisg
ICAgICAgIEFyZy5yb2xlQ29kZShyb2xlKQorICAgIGVuZAogZW5kCiAKIGNsYXNzIE92ZXJsb2Fk
CkBAIC0xODIsNyArMjE3LDcgQEAgZGVmIGxleChzdHIsIGZpbGVOYW1lKQogZW5kCiAKIGRlZiBp
c1JvbGUodG9rZW4pCi0gICAgdG9rZW4gPX4gL1xBKChVKXwoRCl8KFVEKXwoWkQpfChVWkQpfChV
QSl8KFMpKVxaLworICAgIHRva2VuID1+IC9cQSgoVSl8KEQpfChVRCl8KFpEKXwoVVpEKXwoVUEp
fChTKXwoRUQpfChFWkQpfChMVSkpXFovCiBlbmQKIAogZGVmIGlzR0YodG9rZW4pCkBAIC0xOTAs
NyArMjI1LDcgQEAgZGVmIGlzR0YodG9rZW4pCiBlbmQKIAogZGVmIGlzS2luZCh0b2tlbikKLSAg
ICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwo
QWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25kKSlcWi8KKyAgICB0
b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoQWRk
cil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25kKXwoU3RhdHVzQ29uZCkp
XFovCiBlbmQKIAogZGVmIGlzQXJjaCh0b2tlbikKQEAgLTI2NCw3ICsyOTksNyBAQCBjbGFzcyBQ
YXJzZXIKIAogICAgIGRlZiBjb25zdW1lS2luZAogICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJp
bmcKLSAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdElt
bSwgQml0SW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIG9yIERvdWJs
ZUNvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVj
dGVkIGtpbmQgKEltbSwgQmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0LCBUbXAsIEFkZHIsIEluZGV4
LCBSZWxDb25kLCBSZXNDb25kLCBEb3VibGVDb25kLCBvciBTdGF0dXNDb25kKSIpIHVubGVzcyBp
c0tpbmQocmVzdWx0KQogICAgICAgICBhZHZhbmNlCiAgICAgICAgIHJlc3VsdAogICAgIGVuZApA
QCAtNjM0LDI4ICs2NjksNyBAQCB3cml0ZUgoIk9wY29kZVV0aWxzIikgewogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUuZWFjaF93aXRoX2luZGV4IHsKICAgICAg
ICAgICAgICAgICB8IGFyZywgaW5kZXggfAotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHJvbGUgPSBuaWwKLSAgICAgICAgICAgICAgICBjYXNlIGFyZy5yb2xlCi0gICAgICAgICAg
ICAgICAgd2hlbiAiVSIKLSAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2UiCi0gICAgICAg
ICAgICAgICAgd2hlbiAiRCIKLSAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJEZWYiCi0gICAg
ICAgICAgICAgICAgd2hlbiAiWkQiCi0gICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiWkRlZiIK
LSAgICAgICAgICAgICAgICB3aGVuICJVRCIKLSAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJV
c2VEZWYiCi0gICAgICAgICAgICAgICAgd2hlbiAiVVpEIgotICAgICAgICAgICAgICAgICAgICBy
b2xlID0gIlVzZVpEZWYiCi0gICAgICAgICAgICAgICAgd2hlbiAiVUEiCi0gICAgICAgICAgICAg
ICAgICAgIHJvbGUgPSAiVXNlQWRkciIKLSAgICAgICAgICAgICAgICB3aGVuICJTIgotICAgICAg
ICAgICAgICAgICAgICByb2xlID0gIlNjcmF0Y2giCi0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgIGVuZAotCi0gICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRleH1dLCBBcmc6OiN7cm9sZX0sICN7
YXJnLmJhbmt9UCwgI3thcmcud2lkdGhDb2RlfSk7IgorICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiZnVuY3RvcihhcmdzWyN7aW5kZXh9XSwgQXJnOjoje2FyZy5yb2xlQ29kZX0sICN7YXJnLmJh
bmt9UCwgI3thcmcud2lkdGhDb2RlfSk7IgogICAgICAgICAgICAgfQogICAgICAgICBlbmQKICAg
ICB9CkBAIC04MTksNiArODMzLDcgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAg
ICAgICAgICAgICAgd2hlbiAiUmVsQ29uZCIKICAgICAgICAgICAgICAgICB3aGVuICJSZXNDb25k
IgogICAgICAgICAgICAgICAgIHdoZW4gIkRvdWJsZUNvbmQiCisgICAgICAgICAgICAgICAgd2hl
biAiU3RhdHVzQ29uZCIKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IHJhaXNlICJVbmV4cGVjdGVkIGtpbmQ6ICN7a2luZC5uYW1lfSIKICAgICAgICAgICAgICAgICBl
bmQKQEAgLTExMDUsNiArMTEyMCw4IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAg
ICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Jlc3VsdENvbmRp
dGlvbigpIgogICAgICAgICAgICAgICAgIHdoZW4gIkRvdWJsZUNvbmQiCiAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzRG91YmxlQ29uZGl0aW9uKCkiCisg
ICAgICAgICAgICAgICAgd2hlbiAiU3RhdHVzQ29uZCIKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNTdGF0dXNDb25kaXRpb24oKSIKICAgICAgICAgICAg
ICAgICBlbmQKICAgICAgICAgICAgIH0KIApAQCAtMTE0OCwyNyArMTE2NSw3IEBAIEZpbGUub3Bl
bigiSlNBaXJfb3Bjb2RlLmpzIiwgInciKSB7CiAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJj
YXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gK
ICAgICAgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUuZWFjaF93aXRoX2luZGV4IHsKICAg
ICAgICAgICAgICAgICAgICAgfCBhcmcsIGluZGV4IHwKLSAgICAgICAgICAgICAgICAgICAgcm9s
ZSA9IG5pbAotICAgICAgICAgICAgICAgICAgICBjYXNlIGFyZy5yb2xlCi0gICAgICAgICAgICAg
ICAgICAgIHdoZW4gIlUiCi0gICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZSIKLSAg
ICAgICAgICAgICAgICAgICAgd2hlbiAiRCIKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvbGUg
PSAiRGVmIgotICAgICAgICAgICAgICAgICAgICB3aGVuICJaRCIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJvbGUgPSAiWkRlZiIKLSAgICAgICAgICAgICAgICAgICAgd2hlbiAiVUQiCi0gICAg
ICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZURlZiIKLSAgICAgICAgICAgICAgICAgICAg
d2hlbiAiVVpEIgotICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VaRGVmIgotICAg
ICAgICAgICAgICAgICAgICB3aGVuICJVQSIKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvbGUg
PSAiVXNlQWRkciIKLSAgICAgICAgICAgICAgICAgICAgd2hlbiAiUyIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJvbGUgPSAiU2NyYXRjaCIKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImluc3Qudmlz
aXRBcmcoI3tpbmRleH0sIGZ1bmMsIEFyZy4je3JvbGV9LCAje2FyZy5iYW5rfVAsICN7YXJnLndp
ZHRofSk7IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImluc3QudmlzaXRBcmcoI3tp
bmRleH0sIGZ1bmMsIEFyZy4je2FyZy5yb2xlQ29kZX0sICN7YXJnLmJhbmt9UCwgI3thcmcud2lk
dGh9KTsiCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IgogICAgICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302960</attachid>
            <date>2017-02-28 11:47:27 -0800</date>
            <delta_ts>2017-02-28 12:08:11 -0800</delta_ts>
            <desc>more x86</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>217347</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMSBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OwogCQkwRjJENERERDE5ODMyRDM0MDA3RDRC
MTkgLyogRGVidWdnZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJENEREQjE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5j
cHAgKi87IH07CiAJCTBGMkQ0RERFMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJENEREQzE5
ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkQ0REU4MTk4MzJEQUMwMDdENEIxOSAvKiBU
b1RoaXNTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyRDRERTUxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5jcHAgKi87IH07
CkBAIC0yNzY0LDYgKzI3NjksMTEgQEAKIAkJMEYyQzYzQUMxRTYwQUUzQzAwQzEzODM5IC8qIEIz
QmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhbmsuaDsgcGF0aCA9
IGIzL0IzQmFuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNjNBRDFFNjBB
RTNDMDBDMTM4MzkgLyogQjNXaWR0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM1dpZHRoLmNwcDsgcGF0aCA9IGIzL0IzV2lkdGguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjJDNjNBRTFFNjBBRTNEMDBDMTM4MzkgLyogQjNXaWR0aC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dpZHRoLmg7IHBhdGggPSBiMy9CM1dp
ZHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0IzMUU2MzQzRTgwMEMx
MzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzQXRvbWljVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBdG9taWNWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBC
M0F0b21pY1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQXRvbWlj
VmFsdWUuaDsgcGF0aCA9IGIzL0IzQXRvbWljVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0
aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCOTFFNjM0NDA4MDBDMTM4MzkgLyog
QWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0FpckJsb2NrSW5z
ZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQkExRTYz
NDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWly
QmxvY2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDRE
REIxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVidWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkQ0RERDMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQ
cm9maWxlckxvZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTI5Miw2ICs1MzAyLDggQEAKIAkJCQkwRkVD
ODRCMzFCREFDRDg4MDA4MEZGNzQgLyogYWlyICovLAogCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovLAogCQkJCTBGRUM4NEI1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCAqLywKKwkJCQkwRjJDNjNCMzFFNjM0M0U4
MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5jcHAgKi8sCisJCQkJMEYyQzYzQjQxRTYzNDNFODAw
QzEzODM5IC8qIEIzQXRvbWljVmFsdWUuaCAqLywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4
MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJCQkwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNC
YW5rLmggKi8sCiAJCQkJMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5j
cHAgKi8sCkBAIC01MzU0LDYgKzUzNjYsNyBAQAogCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4NENFMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyog
QjNHZW5lcmF0ZS5oICovLAorCQkJCTBGMkM2M0I1MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0dlbmVy
aWNCbG9ja0luc2VydGlvblNldC5oICovLAogCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCAqLywKIAkJCQkwRkVDODVCRjFCRTE2N0EwMDA4
MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3BwICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3
NCAvKiBCM0hlYXBSYW5nZS5oICovLApAQCAtNTQ2OSw2ICs1NDgyLDggQEAKIAkJCQkwRjY0RUFG
MjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFD
REM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgw
MEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYz
NDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIx
QkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYx
ODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC03
MzU0LDggKzczNjksOCBAQAogCQkJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fz
c2VtYmxlck1JUFMuaCAqLywKIAkJCQlGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9B
c3NlbWJsZXJQcmludGVyLmNwcCAqLywKIAkJCQlGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyog
TWFjcm9Bc3NlbWJsZXJQcmludGVyLmggKi8sCi0JCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi8sCisJCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0
NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJQTdBNEFFMDcxNzk3M0IyNjAwNTYx
MkIxIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLywKIAkJCQk4NjAxNjFFMjBGM0E4
M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3
NzE4NUE4RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywK
QEAgLTc5NTYsNiArNzk3MSw3IEBACiAJCQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckluc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3RDcxRDlEQzQ0MjAwMUI5
ODI1IC8qIEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2M0JDMUU2MzQ0MEMwMEMx
MzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY4NEQ0
MzgxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJS
ZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQ3LDYgKzgwNjMsNyBAQAogCQkJCTQzNDIy
QTYzMUMxNThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIz
R2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUwRTFC
RjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
M0ZDRkMxQzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2QjhBRDkxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRlVGFpbHMuaCBpbiBIZWFk
ZXJzICovLApAQCAtODM2Niw2ICs4MzgzLDcgQEAKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3
MjggLyogREZHT1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEz
QjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJDNjNCNzFFNjM0M0VEMDBDMTM4MzkgLyogQjNBdG9taWNW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjM3OTgxQUU0NUNBNzAwRDQwMkVBIC8qIERG
R1BoYW50b21JbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVG
OTBBRjAwQzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFQjE5
RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBpbiBIZWFkZXJzICovLApAQCAtMTAy
NDgsNiArMTAyNjYsNyBAQAogCQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFs
aXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdF
OTVBRCAvKiBJbmplY3RlZFNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4
NUE2ODQ0MDBGM0M3Q0IgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGMkM2M0I2MUU2MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1OEUzNTkxMTg2MERFQ0YwMDFGMjRGRSAvKiBJbmplY3RlZFNjcmlwdEhv
c3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1Q0ExODVGOTYyNDAwN0U5NUFEIC8qIElu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTg0MEUyMDE4N0I3
Qjg2MDA4NDNCMTAgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0xMDI2Niw2ICsxMDI4NSw3IEBACiAJCQkJRTM1RTAzNUYxQjdBQjQzRTAwNzNBRDJBIC8qIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMy
NDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50
aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQzYzQkIxRTYzNDQwQTAwQzEzODM5
IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NTE2NUQy
MUJERjBCOTgwMDNCNzVDMSAvKiBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1OTNDRjgyMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0YxMDdFQzM3NjAwNDI3QTQ4IC8qIElu
dGVybmFsRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw2
ICszNSw3IEBACiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFw
aGljYWxseVJhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAj
aW5jbHVkZSA8d3RmL1dlYWtSYW5kb20uaD4KIApAQCAtODksNiArOTAsMjMgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gVGltZXNFaWdodDsKICAgICB9CiAgICAgCisgICAgZW51bSBTdGF0dXND
b25kaXRpb24geworICAgICAgICBTdWNjZXNzLAorICAgICAgICBGYWlsdXJlCisgICAgfTsKKyAg
ICAKKyAgICBzdGF0aWMgU3RhdHVzQ29uZGl0aW9uIGludmVydChTdGF0dXNDb25kaXRpb24gY29u
ZGl0aW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICAgICAgY2Fz
ZSBTdWNjZXNzOgorICAgICAgICAgICAgcmV0dXJuIEZhaWx1cmU7CisgICAgICAgIGNhc2UgRmFp
bHVyZToKKyAgICAgICAgICAgIHJldHVybiBTdWNjZXNzOworICAgICAgICB9CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBTdWNjZXNzOworICAg
IH0KKyAgICAKICAgICBzdHJ1Y3QgQmFzZUluZGV4OwogICAgIAogICAgIC8vIEFkZHJlc3M6CkBA
IC0xMTA4LDMgKzExMjYsMjYgQEAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBl
LCBNYQogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwor
CisjaWYgRU5BQkxFKEFTU0VNQkxFUikKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDxj
bGFzcyBBc3NlbWJsZXJUeXBlLCBjbGFzcyBNYWNyb0Fzc2VtYmxlclR5cGU+Cit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgdHlwZW5hbWUgSlNDOjpBYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyPEFzc2VtYmxlclR5cGUsIE1hY3JvQXNzZW1ibGVyVHlwZT46OlN0YXR1c0NvbmRpdGlv
biBjb25kaXRpb24pCit7CisgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICBjYXNlIEpTQzo6
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlLCBNYWNyb0Fzc2VtYmxlclR5cGU+
OjpTdWNjZXNzOgorICAgICAgICBvdXQucHJpbnQoIlN1Y2Nlc3MiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGUsIE1h
Y3JvQXNzZW1ibGVyVHlwZT46OkZhaWx1cmU6CisgICAgICAgIG91dC5wcmludCgiRmFpbHVyZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxF
UikKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTEsMTYgKzI1MSw3MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1i
bGVyLmFuZGxfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2
b2lkIGFuZDMyKFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmFuZGxfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0Lmlu
ZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDE2KFJlZ2lzdGVySUQgc3Jj
LCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X3JtKHNyYywg
ZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQxNihSZWdpc3Rl
cklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmR3
X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7
CisgICAgfQorCisgICAgdm9pZCBhbmQ4KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ4KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGJfcm0oc3JjLCBkZXN0Lm9mZnNl
dCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lk
IGFuZDMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fz
c2VtYmxlci5hbmRsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAg
ICB2b2lkIGFuZDMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFuZGxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwg
c3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIGFuZDMyKFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfaW0o
aW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAg
IHZvaWQgYW5kMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFuZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFuZHdfaW0oc3RhdGljX2Nhc3Q8aW50MTZfdD4oaW1tLm1fdmFs
dWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFu
ZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuYW5kd19pbShzdGF0aWNfY2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUp
OworICAgIH0KKworICAgIHZvaWQgYW5kOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRiX2ltKHN0YXRpY19jYXN0PGludDhf
dD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisK
KyAgICB2b2lkIGFuZDgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5hbmRiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1f
dmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgb3AxLCBSZWdp
c3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBv
cDIpCkBAIC00NTYsNiArNTExLDMxIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubmVn
bF9tKHNyY0Rlc3Qub2Zmc2V0LCBzcmNEZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgbmVn
MzIoQmFzZUluZGV4IHNyY0Rlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWdsX20o
c3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3QuYmFzZSwgc3JjRGVzdC5pbmRleCwgc3JjRGVzdC5zY2Fs
ZSk7CisgICAgfQorCisgICAgdm9pZCBuZWcxNihBZGRyZXNzIHNyY0Rlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5uZWd3X20oc3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3QuYmFzZSk7Cisg
ICAgfQorCisgICAgdm9pZCBuZWcxNihCYXNlSW5kZXggc3JjRGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5lZ3dfbShzcmNEZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlLCBzcmNEZXN0
LmluZGV4LCBzcmNEZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIG5lZzgoQWRkcmVzcyBz
cmNEZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubmVnYl9tKHNyY0Rlc3Qub2Zmc2V0
LCBzcmNEZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgbmVnOChCYXNlSW5kZXggc3JjRGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZ2JfbShzcmNEZXN0Lm9mZnNldCwgc3Jj
RGVzdC5iYXNlLCBzcmNEZXN0LmluZGV4LCBzcmNEZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2
b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLm9ybF9ycihzcmMsIGRlc3QpOwpAQCAtNDcxLDE2ICs1NTEsNzEgQEAgcHVi
bGljOgogICAgICAgICBtX2Fzc2VtYmxlci5vcmxfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlKTsKICAgICB9CiAKKyAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBk
ZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JsX3JtKHNyYywgZGVzdC5vZmZzZXQs
IGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBv
cjE2KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5vcndfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2
b2lkIG9yMTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIub3J3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRl
eCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFk
ZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgb3I4KFJlZ2lzdGVySUQgc3Jj
LCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMs
IGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0K
KwogICAgIHZvaWQgb3IzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAg
ICAgICAgbV9hc3NlbWJsZXIub3JsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAg
ICB9CiAKKyAgICB2b2lkIG9yMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMu
aW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBvcjMyKFRydXN0ZWRJ
bW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9y
bF9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQog
CisgICAgdm9pZCBvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisK
KyAgICB2b2lkIG9yMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIub3J3X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3Zh
bHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBv
cjE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIub3J3X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7
CisgICAgfQorCisgICAgdm9pZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JiX2ltKHN0YXRpY19jYXN0PGludDhfdD4o
aW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShzdGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVl
KSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5z
Y2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBvcjMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklE
IG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBA
IC02NTQsMTYgKzc4OSw3MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfaW0o
aW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAg
IHZvaWQgc3ViMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuc3Vid19pbShzdGF0aWNfY2FzdDxpbnQxNl90PihpbW0ubV92YWx1
ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKworICAgIHZvaWQgc3Vi
OChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5zdWJiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c3VibF9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVz
cy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBzdWIxNihUcnVzdGVk
SW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LnN1YndfaW0oc3RhdGljX2Nhc3Q8aW50MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisK
KyAgICB2b2lkIHN1YjgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1f
dmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHN1YjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX21yKHNyYy5vZmZzZXQs
IHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjMyKEJhc2VJbmRleCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfbXIoc3Jj
Lm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisK
ICAgICB2b2lkIHN1YjMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAg
ICAgICBtX2Fzc2VtYmxlci5zdWJsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAg
ICAgfQogCisgICAgdm9pZCBzdWIxNihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UpOworICAgIH0KKworICAgIHZvaWQgc3ViOChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3ViYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBk
ZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJ
bmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9ybShzcmMsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0K
KworICAgIHZvaWQgc3ViMTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2Us
IGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgc3ViOChS
ZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5zdWJiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRk
cmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCB4b3IzMihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9ycihzcmMsIGRl
c3QpOwpAQCAtNjc3LDYgKzg2Nyw1MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Fzc2VtYmxl
ci54b3JsX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAK
KyAgICB2b2lkIHhvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsK
KyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bm90bF9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JsX2ltKGltbS5tX3ZhbHVl
LCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9
CisKKyAgICB2b2lkIHhvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgZGVzdCkKKyAgICB7
CisgICAgICAgIGltbS5tX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50MTZfdD4oaW1tLm1fdmFsdWUp
OworICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5ub3R3X20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnhvcndfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UpOworICAgIH0KKworICAgIHZvaWQgeG9yMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4
IGRlc3QpCisgICAgeworICAgICAgICBpbW0ubV92YWx1ZSA9IHN0YXRpY19jYXN0PGludDE2X3Q+
KGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgs
IGRlc3Quc2NhbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3J3
X2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0
LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVz
cyBkZXN0KQorICAgIHsKKyAgICAgICAgaW1tLm1fdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+
KGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubm90Yl9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JiX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgoVHJ1c3RlZEltbTMyIGlt
bSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBpbW0ubV92YWx1ZSA9IHN0YXRpY19j
YXN0PGludDhfdD4oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gLTEp
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3RiX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwg
ZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnhvcmJfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3Qu
aW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgeG9yMzIoVHJ1c3RlZEltbTMy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09
IC0xKQpAQCAtNjkwLDExICs5MjQsNDEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci54
b3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCB4
b3IzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54b3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwg
ZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCB4b3IxNihSZWdpc3RlcklEIHNyYywgQWRk
cmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yd19ybShzcmMsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9yMTYoUmVnaXN0ZXJJRCBz
cmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yd19ybShz
cmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAg
IH0KKworICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIueG9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2Up
OworICAgIH0KKworICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRl
c3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCB4b3Iz
MihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJs
ZXIueG9ybF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CiAgICAgfQogICAgIAorICAg
IHZvaWQgeG9yMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIueG9ybF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgc3JjLmluZGV4LCBz
cmMuc2NhbGUsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIHhvcjMyKFJlZ2lzdGVySUQg
b3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYg
KG9wMSA9PSBvcDIpCkBAIC03NDEsNiArMTAwNSwzMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNz
ZW1ibGVyLm5vdGxfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lk
IG5vdDMyKEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm90bF9t
KGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0K
KworICAgIHZvaWQgbm90MTYoQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgbm90
MTYoQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ub3R3X20oZGVz
dC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisg
ICAgdm9pZCBub3Q4KEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5v
dGJfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG5vdDgoQmFz
ZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ub3RiX20oZGVzdC5vZmZz
ZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9p
ZCBzcXJ0RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCiAgICAgewog
ICAgICAgICBtX2Fzc2VtYmxlci5zcXJ0c2RfcnIoc3JjLCBkc3QpOwpAQCAtMjc0MywxMjEgKzMw
MzIsNzg3IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwogICAgICAgICBt
X2Fzc2VtYmxlci5vcmxfaW0oMCwgMCwgWDg2UmVnaXN0ZXJzOjplc3ApOwogICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy
SUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVz
cywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMoY29u
ZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2Jf
cm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CiAK
LSAgICAvLyBXZSB0YWtlIHRoaXMgdG8gbWVhbiB0aGF0IGl0IHByZXZlbnRzIG1vdGlvbiBvZiBu
b3JtYWwgc3RvcmVzLiBTbywgaXQncyBhIG5vLW9wIG9uIHg4Ni4KLSAgICB2b2lkIHN0b3JlRmVu
Y2UoKQorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4
IGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25n
Q0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNt
cHhjaGdiX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7CiAgICAgfQogCi0gICAgLy8gV2UgdGFrZSB0aGlz
IHRvIG1lYW4gdGhhdCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9ybWFsIGxvYWRzLiBTbywgaXQn
cyBhIG5vLW9wIG9uIHg4Ni4KLSAgICB2b2lkIGxvYWRGZW5jZSgpCisgICAgdm9pZCBhdG9taWNT
dHJvbmdDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJl
c3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJl
c3VsdCkKICAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJl
c3VsdCwgcmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2Rl
TG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2KFN0
YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3Rl
cklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAg
ewotICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0
LmV4ZWN1dGFibGVBZGRyZXNzKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwor
ICAgICAgICBhdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwg
WyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9Ci0g
ICAgCi0gICAgc3RhdGljIHB0cmRpZmZfdCBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKKworICAg
IHZvaWQgYXRvbWljU3Ryb25nQ0FTMzIoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
ZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywg
UmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgewotICAgICAgICByZXR1cm4gWDg2QXNzZW1ibGVyOjpt
YXhKdW1wUmVwbGFjZW1lbnRTaXplKCk7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBl
eHBlY3RlZEFuZFJlc3VsdCwgcmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnbF9ybShu
ZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOwogICAgIH0KIAotICAg
IHN0YXRpYyBwdHJkaWZmX3QgcGF0Y2hhYmxlSnVtcFNpemUoKQorICAgIHZvaWQgYXRvbWljU3Ry
b25nQ0FTMzIoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJl
c3VsdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6OnBhdGNoYWJsZUp1bXBT
aXplKCk7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwg
cmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOwog
ICAgIH0KIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFJvdW5kaW5nKCkK
KyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzgoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwg
UmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgaWYg
KHNfc3NlNF8xQ2hlY2tTdGF0ZSA9PSBDUFVJRENoZWNrU3RhdGU6Ok5vdENoZWNrZWQpCi0gICAg
ICAgICAgICB1cGRhdGVFYXgxRWN4RmxhZ3MoKTsKLSAgICAgICAgcmV0dXJuIHNfc3NlNF8xQ2hl
Y2tTdGF0ZSA9PSBDUFVJRENoZWNrU3RhdGU6OlNldDsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FT
KGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1
ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOwogICAgIH0KIAotICAgIHN0YXRp
YyBib29sIHN1cHBvcnRzQVZYKCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzgoUmVnaXN0ZXJJ
RCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJl
c3MpCiAgICAgewotICAgICAgICAvLyBBVlggc3RpbGwgY2F1c2VzIG15c3RlcmlvdXMgcmVncmVz
c2lvbnMgYW5kIHRob3NlIHJlZ3Jlc3Npb25zIGNhbiBiZSBtYXNzaXZlLgotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZd
IHsgbV9hc3NlbWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCB1cGRhdGVFYXgxRWN4RmxhZ3MoKQorICAgIHZvaWQgYXRvbWljU3Ryb25n
Q0FTMTYoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwg
QWRkcmVzcyBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgaW50IGZsYWdzID0gMDsKLSNpZiBDT01Q
SUxFUihNU1ZDKQotICAgICAgICBpbnQgY3B1SW5mb1s0XTsKLSAgICAgICAgX19jcHVpZChjcHVJ
bmZvLCAweDEpOwotICAgICAgICBmbGFncyA9IGNwdUluZm9bMl07Ci0jZWxpZiBDT01QSUxFUihH
Q0NfT1JfQ0xBTkcpCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgYXNtICgKLSAgICAgICAgICAg
ICJtb3ZsICQweDEsICUlZWF4OyIKLSAgICAgICAgICAgICJjcHVpZDsiCi0gICAgICAgICAgICAi
bW92bCAlJWVjeCwgJTA7IgotICAgICAgICAgICAgOiAiPWciIChmbGFncykKLSAgICAgICAgICAg
IDoKLSAgICAgICAgICAgIDogIiVlYXgiLCAiJWVieCIsICIlZWN4IiwgIiVlZHgiCi0gICAgICAg
ICAgICApOwotI2Vsc2UKLSAgICAgICAgYXNtICgKLSAgICAgICAgICAgICJtb3ZsICQweDEsICUl
ZWF4OyIKLSAgICAgICAgICAgICJwdXNobCAlJWVieDsiCi0gICAgICAgICAgICAiY3B1aWQ7Igot
ICAgICAgICAgICAgInBvcGwgJSVlYng7IgotICAgICAgICAgICAgIm1vdmwgJSVlY3gsICUwOyIK
LSAgICAgICAgICAgIDogIj1nIiAoZmxhZ3MpCi0gICAgICAgICAgICA6Ci0gICAgICAgICAgICA6
ICIlZWF4IiwgIiVlY3giLCAiJWVkeCIKLSAgICAgICAgICAgICk7Ci0jZW5kaWYKLSNlbmRpZiAv
LyBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCi0gICAgICAgIHNfc3NlNF8xQ2hlY2tTdGF0ZSA9IChm
bGFncyAmICgxIDw8IDE5KSkgPyBDUFVJRENoZWNrU3RhdGU6OlNldCA6IENQVUlEQ2hlY2tTdGF0
ZTo6Q2xlYXI7Ci0gICAgICAgIHNfYXZ4Q2hlY2tTdGF0ZSA9IChmbGFncyAmICgxIDw8IDI4KSkg
PyBDUFVJRENoZWNrU3RhdGU6OlNldCA6IENQVUlEQ2hlY2tTdGF0ZTo6Q2xlYXI7CisgICAgICAg
IGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21w
eGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKICAg
ICB9CiAKLSNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLSAgICB2b2lkIHByb2JlKFByb2JlRnVuY3Rp
b24sIHZvaWQqIGFyZzEsIHZvaWQqIGFyZzIpOwotI2VuZGlmIC8vIEVOQUJMRShNQVNNX1BST0JF
KQorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMTYoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3Vs
dCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNt
cHhjaGd3X3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7CisgICAgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgWDg2
QXNzZW1ibGVyOjpDb25kaXRpb24geDg2Q29uZGl0aW9uKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxYODZBc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CisgICAg
ICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIu
Y21weGNoZ2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsK
ICAgICB9CiAKLSAgICBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbiB4ODZDb25kaXRpb24oUmVzdWx0
Q29uZGl0aW9uIGNvbmQpCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVMzMihSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxYODZBc3NlbWJsZXI6OkNvbmRpdGlv
bj4oY29uZCk7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZd
IHsgbV9hc3NlbWJsZXIuY21weGNoZ2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9CiAKLSAg
ICB2b2lkIHNldDMyKFg4NkFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJl
c3MgYWRkcmVzcykKICAgICB7Ci0jaWYgQ1BVKFg4NikKLSAgICAgICAgLy8gT24gMzItYml0IHg4
NiB3ZSBjYW4gb25seSBzZXQgdGhlIGZpcnN0IDQgcmVnaXN0ZXJzOwotICAgICAgICAvLyBlc3Au
LmVkaSBhcmUgbWFwcGVkIHRvIHRoZSAnaCcgcmVnaXN0ZXJzIQotICAgICAgICBpZiAoZGVzdCA+
PSA0KSB7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ycihkZXN0LCBYODZSZWdpc3Rl
cnM6OmVheCk7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5zZXRDQ19yKGNvbmQsIFg4NlJlZ2lz
dGVyczo6ZWF4KTsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnpibF9ycihYODZSZWdpc3Rl
cnM6OmVheCwgWDg2UmVnaXN0ZXJzOjplYXgpOwotICAgICAgICAgICAgbV9hc3NlbWJsZXIueGNo
Z2xfcnIoZGVzdCwgWDg2UmVnaXN0ZXJzOjplYXgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0jZW5kaWYKLSAgICAgICAgbV9hc3NlbWJsZXIuc2V0Q0Nfcihjb25kLCBkZXN0KTsK
LSAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3JyKGRlc3QsIGRlc3QpOworICAgICAgICByZXR1
cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBt
X2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSk7IH0pOwogICAgIH0KIAotICAgIHZvaWQgY21vdihYODZBc3NlbWJsZXI6OkNvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIEp1bXAgYnJhbmNo
QXRvbWljU3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCiAgICAg
ewotI2lmIENQVShYODZfNjQpCi0gICAgICAgIG1fYXNzZW1ibGVyLmNtb3ZxX3JyKGNvbmQsIHNy
YywgZGVzdCk7Ci0jZWxzZQotICAgICAgICBtX2Fzc2VtYmxlci5jbW92bF9ycihjb25kLCBzcmMs
IGRlc3QpOwotI2VuZGlmCisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMoY29u
ZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1Zh
bHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsgfSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNMWkNOVCgpCisg
ICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25k
LCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFs
dWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaEF0b21pY1N0cm9uZ0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwgZXhw
ZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3JtKG5ld1ZhbHVlLCBh
ZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxl
KTsgfSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVMzMihTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0
b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIu
Y21weGNoZ2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0NvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVl
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNT
dHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhj
aGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FT
OChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVn
aXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAg
ICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzgoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5l
d1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgYXRvbWljV2Vha0NB
UzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJl
Z2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkK
KyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzgoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQs
IG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgYXRvbWljV2Vh
a0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0
LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0
KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMTYoY29uZCwgZXhwZWN0ZWRBbmRSZXN1
bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgYXRvbWlj
V2Vha0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVz
dWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBy
ZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBlY3RlZEFu
ZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBh
dG9taWNXZWFrQ0FTMzIoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRB
bmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJ
RCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMzMihjb25kLCBleHBlY3Rl
ZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgdm9p
ZCBhdG9taWNXZWFrQ0FTMzIoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0
ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdp
c3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzMyKGNvbmQsIGV4
cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTOChjb25kLCBl
eHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoQXRvbWljV2Vha0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhw
ZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzgoY29uZCwgZXhwZWN0
ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aEF0b21pY1dlYWtDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzE2KGNvbmQsIGV4cGVjdGVkQW5k
UmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9t
aWNXZWFrQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRS
ZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzE2KGNvbmQsIGV4cGVjdGVkQW5kUmVz
dWx0LCBuZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNX
ZWFrQ0FTMzIoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMzMihjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwg
bmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljV2Vha0NB
UzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBS
ZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJl
dHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMzMihjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3
VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDgoVHJ1c3Rl
ZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBhZGQ4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgYXRvbWljQWRkOChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChpbW0sIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDgoUmVnaXN0ZXJJRCByZWcsIEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
YWRkOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDgoUmVn
aXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBhZGQ4KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljQWRkMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQxNihpbW0sIGFkZHJl
c3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDE2KFRydXN0ZWRJbW0zMiBpbW0s
IEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBhZGQxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y0FkZDE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDE2KHJlZywgYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljQWRkMTYoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQxNihy
ZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDMyKFRydXN0ZWRJ
bW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgYWRkMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNBZGQzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkMzIoaW1tLCBhZGRyZXNz
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQzMihSZWdpc3RlcklEIHJlZywgQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBhZGQzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDMy
KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBhdG9taWNTdWI4KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViOChpbW0sIGFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjgoVHJ1c3RlZEltbTMyIGlt
bSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIHN1YjgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNTdWI4KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjgocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNTdWI4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViOChyZWcs
IGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjE2KFRydXN0ZWRJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgc3ViMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNTdWIxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViMTYoaW1tLCBhZGRyZXNzKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWIxNihSZWdpc3RlcklEIHJlZywgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBz
dWIxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjE2KFJl
Z2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgc3ViMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNTdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjMyKGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMzIoVHJ1c3RlZEltbTMyIGlt
bSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIHN1YjMyKGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRv
bWljU3ViMzIoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNTdWIzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjMy
KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kOChUcnVzdGVk
SW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIGFuZDgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNBbmQ4KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ4KGltbSwgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kOChSZWdpc3RlcklEIHJlZywgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBh
bmQ4KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kOChSZWdp
c3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIGFuZDgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNBbmQxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDE2KGltbSwgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMTYoVHJ1c3RlZEltbTMyIGltbSwg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIGFuZDE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWlj
QW5kMTYoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNBbmQxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDE2KHJl
ZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMzIoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBhbmQzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY0FuZDMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQzMihpbW0sIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDMyKFJlZ2lzdGVySUQgcmVnLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IGFuZDMyKHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMzIo
UmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhbmQzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY09yOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yOChpbW0sIGFkZHJl
c3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yOChUcnVzdGVkSW1tMzIgaW1tLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgb3I4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I4
KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIG9yOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY09yOChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yOChyZWcsIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBvcjE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3IxNihU
cnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3IxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY09yMTYoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3IxNihyZWcsIGFkZHJl
c3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yMTYoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBvcjE2KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3Iz
MihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBhdG9taWNPcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjMyKGltbSwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3IzMihSZWdpc3RlcklEIHJl
ZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBvcjMyKHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWlj
T3IzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNYb3I4KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yOChpbW0s
IGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjgoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIHhvcjgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNYb3I4KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjgocmVnLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNYb3I4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yOChy
ZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjE2KFRydXN0ZWRJ
bW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgeG9yMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNYb3IxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yMTYoaW1tLCBhZGRyZXNz
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3IxNihSZWdpc3RlcklEIHJlZywgQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICB4b3IxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjE2
KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBhdG9taWNYb3IzMihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjMyKGltbSwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMzIoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIHhvcjMyKGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQg
YXRvbWljWG9yMzIoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yMzIocmVnLCBhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3IzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhv
cjMyKHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnOChBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG5lZzgoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnOChCYXNlSW5k
ZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
bmVnOChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWcxNihBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5l
ZzE2KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzE2KEJhc2VJbmRl
eCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBu
ZWcxNihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWczMihBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5l
ZzMyKGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzMyKEJhc2VJbmRl
eCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBu
ZWczMihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3Q4KEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90
OChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3Q4KEJhc2VJbmRleCBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3Q4
KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDE2KEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90MTYo
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90MTYoQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDE2
KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDMyKEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90MzIo
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90MzIoQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDMy
KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGdBZGQ4KFJlZ2lzdGVy
SUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhhZGRiX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZ0FkZDgoUmVnaXN0
ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkYl9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY1hjaGdBZGQxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2Vt
Ymxlci54YWRkd19ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGdBZGQxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLnhhZGR3X3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWlj
WGNoZ0FkZDMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhhZGRsX3JtKHJlZywg
YWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRv
bWljWGNoZ0FkZDMyKFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGxfcm0o
cmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnOChSZWdpc3RlcklEIHJl
ZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBtX2Fzc2VtYmxlci54YWRkYl9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGc4KFJlZ2lzdGVySUQgcmVn
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2Jfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNYY2hnMTYoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3df
cm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNYY2hnMTYoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54Y2hn
d19ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFk
ZHJlc3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGczMihSZWdpc3Rl
cklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGczMihSZWdpc3Rl
cklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdsX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAg
IAorICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVudHMgbW90aW9uIG9m
IG5vcm1hbCBzdG9yZXMuIFNvLCBpdCdzIGEgbm8tb3Agb24geDg2LgorICAgIHZvaWQgc3RvcmVG
ZW5jZSgpCisgICAgeworICAgIH0KKworICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQg
aXQgcHJldmVudHMgbW90aW9uIG9mIG5vcm1hbCBsb2Fkcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4
ODYuCisgICAgdm9pZCBsb2FkRmVuY2UoKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29k
ZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBYODZBc3NlbWJsZXI6
OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIGRl
c3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG1heEp1bXBSZXBsYWNlbWVudFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFg4NkFzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpOworICAgIH0KKworICAgIHN0
YXRpYyBwdHJkaWZmX3QgcGF0Y2hhYmxlSnVtcFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFg4NkFzc2VtYmxlcjo6cGF0Y2hhYmxlSnVtcFNpemUoKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRSb3VuZGluZygpCisgICAgeworICAgICAgICBpZiAo
c19zc2U0XzFDaGVja1N0YXRlID09IENQVUlEQ2hlY2tTdGF0ZTo6Tm90Q2hlY2tlZCkKKyAgICAg
ICAgICAgIHVwZGF0ZUVheDFFY3hGbGFncygpOworICAgICAgICByZXR1cm4gc19zc2U0XzFDaGVj
a1N0YXRlID09IENQVUlEQ2hlY2tTdGF0ZTo6U2V0OworICAgIH0KKworICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzQVZYKCkKKyAgICB7CisgICAgICAgIC8vIEFWWCBzdGlsbCBjYXVzZXMgbXlzdGVy
aW91cyByZWdyZXNzaW9ucyBhbmQgdGhvc2UgcmVncmVzc2lvbnMgY2FuIGJlIG1hc3NpdmUuCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVFYXgx
RWN4RmxhZ3MoKQorICAgIHsKKyAgICAgICAgaW50IGZsYWdzID0gMDsKKyNpZiBDT01QSUxFUihN
U1ZDKQorICAgICAgICBpbnQgY3B1SW5mb1s0XTsKKyAgICAgICAgX19jcHVpZChjcHVJbmZvLCAw
eDEpOworICAgICAgICBmbGFncyA9IGNwdUluZm9bMl07CisjZWxpZiBDT01QSUxFUihHQ0NfT1Jf
Q0xBTkcpCisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgYXNtICgKKyAgICAgICAgICAgICJtb3Zs
ICQweDEsICUlZWF4OyIKKyAgICAgICAgICAgICJjcHVpZDsiCisgICAgICAgICAgICAibW92bCAl
JWVjeCwgJTA7IgorICAgICAgICAgICAgOiAiPWciIChmbGFncykKKyAgICAgICAgICAgIDoKKyAg
ICAgICAgICAgIDogIiVlYXgiLCAiJWVieCIsICIlZWN4IiwgIiVlZHgiCisgICAgICAgICAgICAp
OworI2Vsc2UKKyAgICAgICAgYXNtICgKKyAgICAgICAgICAgICJtb3ZsICQweDEsICUlZWF4OyIK
KyAgICAgICAgICAgICJwdXNobCAlJWVieDsiCisgICAgICAgICAgICAiY3B1aWQ7IgorICAgICAg
ICAgICAgInBvcGwgJSVlYng7IgorICAgICAgICAgICAgIm1vdmwgJSVlY3gsICUwOyIKKyAgICAg
ICAgICAgIDogIj1nIiAoZmxhZ3MpCisgICAgICAgICAgICA6CisgICAgICAgICAgICA6ICIlZWF4
IiwgIiVlY3giLCAiJWVkeCIKKyAgICAgICAgICAgICk7CisjZW5kaWYKKyNlbmRpZiAvLyBDT01Q
SUxFUihHQ0NfT1JfQ0xBTkcpCisgICAgICAgIHNfc3NlNF8xQ2hlY2tTdGF0ZSA9IChmbGFncyAm
ICgxIDw8IDE5KSkgPyBDUFVJRENoZWNrU3RhdGU6OlNldCA6IENQVUlEQ2hlY2tTdGF0ZTo6Q2xl
YXI7CisgICAgICAgIHNfYXZ4Q2hlY2tTdGF0ZSA9IChmbGFncyAmICgxIDw8IDI4KSkgPyBDUFVJ
RENoZWNrU3RhdGU6OlNldCA6IENQVUlEQ2hlY2tTdGF0ZTo6Q2xlYXI7CisgICAgfQorCisjaWYg
RU5BQkxFKE1BU01fUFJPQkUpCisgICAgdm9pZCBwcm9iZShQcm9iZUZ1bmN0aW9uLCB2b2lkKiBh
cmcxLCB2b2lkKiBhcmcyKTsKKyNlbmRpZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKKworcHJvdGVj
dGVkOgorICAgIFg4NkFzc2VtYmxlcjo6Q29uZGl0aW9uIHg4NkNvbmRpdGlvbihSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8WDg2QXNz
ZW1ibGVyOjpDb25kaXRpb24+KGNvbmQpOworICAgIH0KKworICAgIFg4NkFzc2VtYmxlcjo6Q29u
ZGl0aW9uIHg4NkNvbmRpdGlvbihSZXN1bHRDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxYODZBc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CisgICAg
fQorCisgICAgWDg2QXNzZW1ibGVyOjpDb25kaXRpb24geDg2Q29uZGl0aW9uKFN0YXR1c0NvbmRp
dGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kKSB7CisgICAgICAgIGNhc2Ug
U3VjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbkU7Cisg
ICAgICAgIGNhc2UgRmFpbHVyZToKKyAgICAgICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6OkNv
bmRpdGlvbk5FOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbkU7CisgICAgfQorCisg
ICAgdm9pZCBzZXQzMihYODZBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworI2lmIENQVShYODYpCisgICAgICAgIC8vIE9uIDMyLWJpdCB4ODYgd2UgY2Fu
IG9ubHkgc2V0IHRoZSBmaXJzdCA0IHJlZ2lzdGVyczsKKyAgICAgICAgLy8gZXNwLi5lZGkgYXJl
IG1hcHBlZCB0byB0aGUgJ2gnIHJlZ2lzdGVycyEKKyAgICAgICAgaWYgKGRlc3QgPj0gNCkgewor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcnIoZGVzdCwgWDg2UmVnaXN0ZXJzOjplYXgp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2V0Q0Nfcihjb25kLCBYODZSZWdpc3RlcnM6OmVh
eCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z6YmxfcnIoWDg2UmVnaXN0ZXJzOjplYXgs
IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdsX3JyKGRl
c3QsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
I2VuZGlmCisgICAgICAgIG1fYXNzZW1ibGVyLnNldENDX3IoY29uZCwgZGVzdCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdnpibF9ycihkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGNt
b3YoWDg2QXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgbV9hc3NlbWJsZXIuY21v
dnFfcnIoY29uZCwgc3JjLCBkZXN0KTsKKyNlbHNlCisgICAgICAgIG1fYXNzZW1ibGVyLmNtb3Zs
X3JyKGNvbmQsIHNyYywgZGVzdCk7CisjZW5kaWYKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBz
dXBwb3J0c0xaQ05UKCkKICAgICB7CiAgICAgICAgIGlmIChzX2x6Y250Q2hlY2tTdGF0ZSA9PSBD
UFVJRENoZWNrU3RhdGU6Ok5vdENoZWNrZWQpIHsKICAgICAgICAgICAgIGludCBmbGFncyA9IDA7
CkBAIC0yOTI1LDYgKzM4ODAsMzUgQEAgcHJvdGVjdGVkOgogICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihzaXplT2ZSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIHNyY0lzTm9uWmVyby5saW5rKHRo
aXMpOwogICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQg
YXRvbWljU3Ryb25nQ0FTKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVk
QW5kUmVzdWx0LCBSZWdpc3RlcklEIHJlc3VsdCwgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7Cisg
ICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBmdW5jKCk7CisgICAgICAgIHN3YXAoZXhw
ZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgc2V0MzIoeDg2Q29u
ZGl0aW9uKGNvbmQpLCByZXN1bHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVMoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3Vs
dCwgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1
bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBmdW5jKCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVy
czo6ZWF4KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIEp1bXAg
YnJhbmNoQXRvbWljU3Ryb25nQ0FTKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgc3dhcChl
eHBlY3RlZEFuZFJlc3VsdCwgWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIGZ1bmMoKTsKKyAgICAgICAgc3dhcChleHBlY3RlZEFuZFJlc3Vs
dCwgWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5q
Q0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIC8vIE9ubHkg
TWFjcm9Bc3NlbWJsZXJYODYgc2hvdWxkIGJlIHVzaW5nIHRoZSBmb2xsb3dpbmcgbWV0aG9kOyBT
U0UyIGlzIGFsd2F5cyBhdmFpbGFibGUgb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQyLDExICszNDIsNDEgQEAgcHVibGljOgogICAg
ICAgICBtX2Fzc2VtYmxlci5hbmRxX3JyKHNyYywgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBh
bmQ2NChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYW5kcV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAg
IHZvaWQgYW5kNjQoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYW5kcV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3Qu
aW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoQWRkcmVzcyBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfbXIoc3Jj
Lm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoQmFzZUlu
ZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5k
cV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUsIGRlc3QpOwor
ICAgIH0KKwogICAgIHZvaWQgYW5kNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNE
ZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9pcihpbW0ubV92YWx1ZSwgc3Jj
RGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX2ltKGltbS5tX3ZhbHVlLCBk
ZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDY0KFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5k
cV9pbShpbW0ubV92YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVz
dC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tUHRyIGltbSwgUmVn
aXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgaW50cHRyX3QgaW50VmFsdWUgPSBpbW0u
YXNJbnRwdHIoKTsKQEAgLTU1MiwxMSArNTgyLDUxIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3Nl
bWJsZXIubmVncV9yKGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbmVnNjQoQWRkcmVzcyBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubmVncV9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UpOworICAgIH0KKworICAgIHZvaWQgbmVnNjQoQmFzZUluZGV4IGRlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5uZWdxX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRl
eCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5vcnFfcnIoc3JjLCBk
ZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIG9yNjQoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBk
ZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgb3I2NChSZWdpc3RlcklEIHNyYywgQmFzZUlu
ZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnFfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2
b2lkIG9yNjQoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLm9ycV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CisgICAgfQorCisg
ICAgdm9pZCBvcjY0KEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm9ycV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgc3JjLmluZGV4LCBz
cmMuc2NhbGUsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3I2NChUcnVzdGVkSW1tMzIgaW1t
LCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnFfaW0oaW1tLm1f
dmFsdWUsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgb3I2NChU
cnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLm9ycV9pbShpbW0ubV92YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRl
eCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBvcjY0KFRydXN0ZWRJbW02NCBpbW0s
IFJlZ2lzdGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIGlmIChpbW0ubV92YWx1ZSA8PSBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKQpAQCAtNjE5LDExICs2ODksMjEgQEAg
cHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjY0KFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c3VicV9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVz
cy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBzdWI2NChBZGRyZXNz
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc3VicV9t
cihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBzdWI2NChC
YXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5zdWJxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVz
dCk7CisgICAgfQorCiAgICAgdm9pZCBzdWI2NChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0
KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc3VicV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBk
ZXN0LmJhc2UpOwpAQCAtNjUxLDYgKzczMSwzMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1i
bGVyLnhvcnFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2
b2lkIHhvcjY0KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLnhvcnFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0Lmlu
ZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjY0KEFkZHJlc3Mgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JxX21yKHNyYy5v
ZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjY0KEJhc2VJbmRl
eCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFf
bXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAg
ICB9CisKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0
LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9yNjQoVHJ1c3RlZEltbTMyIGltbSwg
QmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JxX2ltKGltbS5t
X3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsK
KyAgICB9CisKICAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3Jj
RGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfaXIoaW1tLm1fdmFsdWUsIHNy
Y0Rlc3QpOwpAQCAtNjY2LDYgKzc3MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVy
Lm5vdHFfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIG5vdDY0
KEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm90cV9tKGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAg
IHZvaWQgbG9hZDY0KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX21yKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIGRlc3QpOwpAQCAtMTI5NCw3ICsxNDA0LDIyNSBAQCBwdWJsaWM6CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uOjptb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciks
IHNjcmF0Y2hSZWdpc3RlcigpKTsKICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uOjpicmFuY2hUZXN0OChjb25kLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSwgbWFzazgp
OwogICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVl
LCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRv
bWljc1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgcmVzdWx0LCBbJl0geyBtX2Fz
c2VtYmxlci5jbXB4Y2hncV9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSk7IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTNjQoU3RhdHVzQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFs
dWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAg
IGF0b21pY3NTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsg
bV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CisKKyAgICB2
b2lkIGF0b21pY1N0cm9uZ0NBUzY0KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0b21pY3NT
dHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3Jt
KG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisg
ICAgdm9pZCBhdG9taWNTdHJvbmdDQVM2NChSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBS
ZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0
b21pY3NTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhj
aGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNT
dHJvbmdDQVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJl
c3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaEF0b21pY3NTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQs
IFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdD
QVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwg
UmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBy
ZXR1cm4gYnJhbmNoQXRvbWljc1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgWyZd
IHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CisKKyAg
ICB2b2lkIGF0b21pY1dlYWtDQVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBl
eHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBS
ZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21pY3NTdHJvbmdDQVMoY29uZCwg
ZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKwor
ICAgIHZvaWQgYXRvbWljV2Vha0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVz
cywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNzU3Ryb25nQ0FTKGNv
bmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9
CiAKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY3NTdHJvbmdDQVMo
Y29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljc1N0cm9uZ0NBUyhjb25k
LCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIHZv
aWQgYXRvbWljQWRkNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ2NChpbW0sIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBhZGQ2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0Fk
ZDY0KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljQWRkNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ2NChyZWcs
IGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjY0KFRydXN0ZWRJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgc3ViNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNTdWI2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViNjQoaW1tLCBhZGRyZXNzKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWI2NChSZWdpc3RlcklEIHJlZywgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBz
dWI2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjY0KFJl
Z2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgc3ViNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNBbmQ2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDY0KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQoVHJ1c3RlZEltbTMyIGlt
bSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIGFuZDY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRv
bWljQW5kNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQ2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDY0
KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I2NChUcnVzdGVk
SW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIG9yNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNPcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjY0KGltbSwgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I2NChSZWdpc3RlcklEIHJlZywgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBv
cjY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I2NChSZWdp
c3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIG9yNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNYb3I2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjY0KGltbSwgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yNjQoVHJ1c3RlZEltbTMyIGltbSwg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIHhvcjY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWlj
WG9yNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNYb3I2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjY0KHJl
ZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnNjQoQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBuZWc2
NChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWc2NChCYXNlSW5kZXgg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVn
NjQoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90NjQoQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3Q2
NChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3Q2NChCYXNlSW5kZXgg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90
NjQoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZ0FkZDY0KFJlZ2lz
dGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhhZGRxX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZ0FkZDY0KFJl
Z2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZHFfcm0ocmVnLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIueGNoZ3Ffcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fz
c2VtYmxlci54Y2hncV9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJl
c3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAgICAKICAgICB2b2lkIHRydW5jYXRl
RG91YmxlVG9VaW50MzIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuY3Z0dHNkMnNpcV9ycihzcmMsIGRlc3QpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lv
biAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTkwLDE2ICsxOTAsMTkgQEAgcHJpdmF0ZToK
ICAgICAgICAgT1BfQUREX0V2R3YgICAgICAgICAgICAgICAgICAgICA9IDB4MDEsCiAgICAgICAg
IE9QX0FERF9HdkV2ICAgICAgICAgICAgICAgICAgICAgPSAweDAzLAogICAgICAgICBPUF9BRERf
RUFYSXYgICAgICAgICAgICAgICAgICAgID0gMHgwNSwKKyAgICAgICAgT1BfT1JfRXZHYiAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDgsCiAgICAgICAgIE9QX09SX0V2R3YgICAgICAgICAgICAg
ICAgICAgICAgPSAweDA5LAogICAgICAgICBPUF9PUl9HdkV2ICAgICAgICAgICAgICAgICAgICAg
ID0gMHgwQiwKICAgICAgICAgT1BfT1JfRUFYSXYgICAgICAgICAgICAgICAgICAgICA9IDB4MEQs
CiAgICAgICAgIE9QXzJCWVRFX0VTQ0FQRSAgICAgICAgICAgICAgICAgPSAweDBGLAogICAgICAg
ICBPUF9BTkRfRXZHdiAgICAgICAgICAgICAgICAgICAgID0gMHgyMSwKICAgICAgICAgT1BfQU5E
X0d2RXYgICAgICAgICAgICAgICAgICAgICA9IDB4MjMsCisgICAgICAgIE9QX1NVQl9FdkdiICAg
ICAgICAgICAgICAgICAgICAgPSAweDI4LAogICAgICAgICBPUF9TVUJfRXZHdiAgICAgICAgICAg
ICAgICAgICAgID0gMHgyOSwKICAgICAgICAgT1BfU1VCX0d2RXYgICAgICAgICAgICAgICAgICAg
ICA9IDB4MkIsCiAgICAgICAgIE9QX1NVQl9FQVhJdiAgICAgICAgICAgICAgICAgICAgPSAweDJE
LAogICAgICAgICBQUkVfUFJFRElDVF9CUkFOQ0hfTk9UX1RBS0VOICAgID0gMHgyRSwKKyAgICAg
ICAgT1BfWE9SX0V2R2IgICAgICAgICAgICAgICAgICAgICA9IDB4MzAsCiAgICAgICAgIE9QX1hP
Ul9Fdkd2ICAgICAgICAgICAgICAgICAgICAgPSAweDMxLAogICAgICAgICBPUF9YT1JfR3ZFdiAg
ICAgICAgICAgICAgICAgICAgID0gMHgzMywKICAgICAgICAgT1BfWE9SX0VBWEl2ICAgICAgICAg
ICAgICAgICAgICA9IDB4MzUsCkBAIC0yMjMsNiArMjI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
T1BfR1JPVVAxX0V2SWIgICAgICAgICAgICAgICAgICA9IDB4ODMsCiAgICAgICAgIE9QX1RFU1Rf
RWJHYiAgICAgICAgICAgICAgICAgICAgPSAweDg0LAogICAgICAgICBPUF9URVNUX0V2R3YgICAg
ICAgICAgICAgICAgICAgID0gMHg4NSwKKyAgICAgICAgT1BfWENIR19FdkdiICAgICAgICAgICAg
ICAgICAgICA9IDB4ODYsCiAgICAgICAgIE9QX1hDSEdfRXZHdiAgICAgICAgICAgICAgICAgICAg
PSAweDg3LAogICAgICAgICBPUF9NT1ZfRWJHYiAgICAgICAgICAgICAgICAgICAgID0gMHg4OCwK
ICAgICAgICAgT1BfTU9WX0V2R3YgICAgICAgICAgICAgICAgICAgICA9IDB4ODksCkBAIC0yNTIs
NiArMjU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgUFJFX1NTRV9GMiAgICAgICAgICAgICAgICAg
ICAgICA9IDB4RjIsCiAgICAgICAgIFBSRV9TU0VfRjMgICAgICAgICAgICAgICAgICAgICAgPSAw
eEYzLAogICAgICAgICBPUF9ITFQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhGNCwKKyAg
ICAgICAgT1BfR1JPVVAzX0ViICAgICAgICAgICAgICAgICAgICA9IDB4RjYsCiAgICAgICAgIE9Q
X0dST1VQM19FYkliICAgICAgICAgICAgICAgICAgPSAweEY2LAogICAgICAgICBPUF9HUk9VUDNf
RXYgICAgICAgICAgICAgICAgICAgID0gMHhGNywKICAgICAgICAgT1BfR1JPVVAzX0V2SXogICAg
ICAgICAgICAgICAgICA9IDB4RjcsIC8vIE9QX0dST1VQM19FdiBoYXMgYW4gaW1tZWRpYXRlLCB3
aGVuIGluc3RydWN0aW9uIGlzIGEgdGVzdC4gCkBAIC0yOTAsNiArMjk1LDggQEAgcHJpdmF0ZToK
ICAgICAgICAgT1BfU0VUQ0MgICAgICAgICAgICA9IDB4OTAsCiAgICAgICAgIE9QMl8zQllURV9F
U0NBUEVfQUUgPSAweEFFLAogICAgICAgICBPUDJfSU1VTF9HdkV2ICAgICAgID0gMHhBRiwKKyAg
ICAgICAgT1AyX0NNUFhDSEdiICAgICAgICA9IDB4QjAsCisgICAgICAgIE9QMl9DTVBYQ0hHICAg
ICAgICAgPSAweEIxLAogICAgICAgICBPUDJfTU9WWlhfR3ZFYiAgICAgID0gMHhCNiwKICAgICAg
ICAgT1AyX0JTRiAgICAgICAgICAgICA9IDB4QkMsCiAgICAgICAgIE9QMl9UWkNOVCAgICAgICAg
ICAgPSAweEJDLApAQCAtMjk4LDYgKzMwNSw4IEBAIHByaXZhdGU6CiAgICAgICAgIE9QMl9NT1ZT
WF9HdkViICAgICAgPSAweEJFLAogICAgICAgICBPUDJfTU9WWlhfR3ZFdyAgICAgID0gMHhCNywK
ICAgICAgICAgT1AyX01PVlNYX0d2RXcgICAgICA9IDB4QkYsCisgICAgICAgIE9QMl9YQUREYiAg
ICAgICAgICAgPSAweEMwLAorICAgICAgICBPUDJfWEFERCAgICAgICAgICAgID0gMHhDMSwKICAg
ICAgICAgT1AyX1BFWFRSV19HZFVkSWIgICA9IDB4QzUsCiAgICAgICAgIE9QMl9QU0xMUV9VZHFJ
YiAgICAgPSAweDczLAogICAgICAgICBPUDJfUFNSTFFfVWRxSWIgICAgID0gMHg3MywKQEAgLTYx
NCwxMSArNjIzLDQzIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9Q
X0FORF9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBhbmRsX21y
KGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChP
UF9BTkRfR3ZFdiwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAg
ICAgdm9pZCBhbmRsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0V2R3YsIHNy
YywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZGxfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNj
YWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9Fdkd2LCBz
cmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZHdf
cm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgYW5k
bF9ybShzcmMsIG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBhbmR3X3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFO
RF9TSVpFKTsKKyAgICAgICAgYW5kbF9ybShzcmMsIG9mZnNldCwgYmFzZSwgaW5kZXgsIHNjYWxl
KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZGJfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChP
UF9BTkRfRXZHYiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgYW5kYl9y
bShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklE
IGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3Ao
T1BfQU5EX0V2R2IsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwog
ICAgIHZvaWQgYW5kbF9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAg
IGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC02NDEsNiArNjgyLDQxIEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgYW5kbF9pbShpbnQgaW1tLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9BTkQsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVk
aWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX0FORCwgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYW5kd19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09Q
RVJBTkRfU0laRSk7CisgICAgICAgIGFuZGxfaW0oaW1tLCBvZmZzZXQsIGJhc2UpOworICAgIH0K
KworICAgIHZvaWQgYW5kd19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Us
IFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
LnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgYW5kbF9pbShpbW0sIG9mZnNldCwg
YmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZGJfaW0oaW50IGltbSwg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQMV9FYkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBvZmZzZXQpOwor
ICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCisgICAgdm9pZCBh
bmRiX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBp
bmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9Q
X0dST1VQMV9FYkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7
CisgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKICNpZiBDUFUo
WDg2XzY0KQogICAgIHZvaWQgYW5kcV9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CiAgICAgewpAQCAtNjU3LDYgKzczMyw0OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGUzMihpbW0pOwogICAgICAgICB9CiAgICAgfQorCisgICAgdm9pZCBhbmRx
X21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9BTkRfR3ZFdiwgZHN0LCBiYXNlLCBv
ZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgYW5kcV9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9BTkRfR3ZFdiwgZHN0LCBiYXNl
LCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBhbmRxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9BTkRfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOwor
ICAgIH0KKworICAgIHZvaWQgYW5kcV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVn
aXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9BTkRfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBhbmRxX2ltKGludCBpbW0sIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRF
TkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9H
Uk9VUDFfRXZJYiwgR1JPVVAxX09QX0FORCwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1f
Zm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfQU5ELCBi
YXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYW5kcV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7Cisg
ICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX0FORCwgYmFzZSwg
aW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRl
OChpbW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wNjQoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9BTkQsIGJhc2UsIGluZGV4LCBzY2FsZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAg
ICAgIH0KKyAgICB9CiAjZWxzZQogICAgIHZvaWQgYW5kbF9pbShpbnQgaW1tLCBjb25zdCB2b2lk
KiBhZGRyKQogICAgIHsKQEAgLTcxNSw2ICs4MzMsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1BfTkVHLCBk
c3QpOwogICAgIH0KKworICAgIHZvaWQgbmVncV9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19Fdiwg
R1JPVVAzX09QX05FRywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG5lZ3FfbShp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JP
VVAzX09QX05FRywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KICNlbmRpZgog
CiAgICAgdm9pZCBuZWdsX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQpAQCAtNzIyLDYg
Kzg1MCwzMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9V
UDNfRXYsIEdST1VQM19PUF9ORUcsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBu
ZWdsX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0V2
LCBHUk9VUDNfT1BfTkVHLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisg
ICAgdm9pZCBuZWd3X20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBuZWdsX20o
b2Zmc2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG5lZ3dfbShpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbmVnbF9tKG9m
ZnNldCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIG5lZ2JfbShpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfR1JPVVAzX0ViLCBHUk9VUDNfT1BfTkVHLCBiYXNlLCBvZmZzZXQpOworICAgIH0K
KworICAgIHZvaWQgbmVnYl9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0dST1VQM19FYiwgR1JPVVAzX09QX05FRywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKwogICAgIHZvaWQgbm90bF9yKFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQM19FdiwgR1JPVVAzX09QX05PVCwgZHN0
KTsKQEAgLTczMiw2ICs4ODcsMzMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1BfTk9ULCBiYXNlLCBvZmZzZXQpOwogICAgIH0K
IAorICAgIHZvaWQgbm90bF9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0dST1VQM19FdiwgR1JPVVAzX09QX05PVCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKworICAgIHZvaWQgbm90d19tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAg
ICAgICAgbm90bF9tKG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBub3R3X20oaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAg
ICAgIG5vdGxfbShvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9p
ZCBub3RiX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQM19FYiwgR1JPVVAzX09QX05PVCwgYmFzZSwgb2Zm
c2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG5vdGJfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRWIsIEdST1VQM19PUF9OT1QsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0KQogICAgIHZvaWQgbm90cV9y
KFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTc0Miw2ICs5MjQsMTEgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAzX0V2LCBHUk9VUDNf
T1BfTk9ULCBiYXNlLCBvZmZzZXQpOwogICAgIH0KKworICAgIHZvaWQgbm90cV9tKGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1Bf
Tk9ULCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAgICB2
b2lkIG9ybF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCkBAIC03NTQsMTEgKzk0
MSw0MyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9PUl9HdkV2
LCBkc3QsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBvcmxfbXIoaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0d2RXYs
IGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgb3Js
X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewog
ICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfRXZHdiwgc3JjLCBiYXNlLCBvZmZz
ZXQpOwogICAgIH0KIAorICAgIHZvaWQgb3JsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9PUl9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4
LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yd19ybShSZWdpc3RlcklEIHNy
YywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0
ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBvcmxfcm0oc3JjLCBpbmRleCwg
YmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcndfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBv
cmxfcm0oc3JjLCBpbmRleCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lk
IG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R2IsIHNyYywgYmFzZSwg
b2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfRXZHYiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBvcmxfaXIoaW50IGltbSwg
UmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIo
aW1tKSkgewpAQCAtNzg0LDEyICsxMDAzLDg5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0K
IAorICAgIHZvaWQgb3JsX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdO
X0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChP
UF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX09SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7
CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SXosIEdS
T1VQMV9PUF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9m
b3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
b3J3X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgb3JsX2lt
KGltbSwgaW5kZXgsIGJhc2UpOworICAgIH0KKworICAgIHZvaWQgb3J3X2ltKGludCBpbW0sIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAg
ICAgICBvcmxfaW0oaW1tLCBpbmRleCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQMV9P
UF9PUiwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0p
OworICAgIH0KKworICAgIHZvaWQgb3JiX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FYkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIGlu
ZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0p
OworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBvcnFfcnIoUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
NjQoT1BfT1JfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgb3JxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9PUl9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7Cisg
ICAgfQorCisgICAgdm9pZCBvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfT1JfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBvcnFfaW0oaW50IGltbSwgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84
XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQ
MV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX09SLCBiYXNlLCBv
ZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgb3JxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
aWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9Q
X0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2b2lkIG9ybF9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0d2
RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG9ybF9tcihpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfR3ZF
diwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBv
cnFfaXIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJ
R05fRVhURU5EXzhfMzIoaW1tKSkgewpAQCAtODMxLDExICsxMTI3LDQzIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9HdkV2LCBkc3QsIGJhc2UsIG9mZnNl
dCk7CiAgICAgfQogCisgICAgdm9pZCBzdWJsX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfR3ZFdiwgZHN0LCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBzdWJsX3JtKFJlZ2lzdGVySUQg
c3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3AoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAK
KyAgICB2b2lkIHN1Ymxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1Yndfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQ
UkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9F
dkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBzdWJ3X3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFO
RF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9Fdkd2LCBzcmMs
IGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YmJfcm0o
UmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHYiwgc3JjLCBiYXNlLCBvZmZzZXQp
OworICAgIH0KKworICAgIHZvaWQgc3ViYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0V2R2IsIHNyYywgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgc3VibF9pcihpbnQgaW1tLCBSZWdp
c3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0p
KSB7CkBAIC04NjEsNiArMTE4OSw0MSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAg
ICB2b2lkIHN1YmxfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdp
c3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhU
RU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dS
T1VQMV9FdkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7Cisg
ICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SXosIEdST1VQ
MV9PUF9TVUIsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9y
bWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHN1
YndfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBzdWJsX2lt
KGltbSwgb2Zmc2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YndfaW0oaW50IGltbSwg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7Cisg
ICAgICAgIHN1YmxfaW0oaW1tLCBvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQor
CisgICAgdm9pZCBzdWJiX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwgR1JP
VVAxX09QX1NVQiwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRl
OChpbW0pOworICAgIH0KKworICAgIHZvaWQgc3ViYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwgR1JPVVAxX09QX1NVQiwg
YmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlh
dGU4KGltbSk7CisgICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2b2lkIHN1YnFfcnIoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTg3MiwxMSArMTIzNSwyMSBA
QCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1NVQl9HdkV2LCBk
c3QsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBzdWJxX21yKGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1NVQl9HdkV2
LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIHN1
YnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7
CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1NVQl9Fdkd2LCBzcmMsIGJhc2Us
IG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBzdWJxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1NVQl9Fdkd2LCBzcmMsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIHN1YnFfaXIoaW50
IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5E
XzhfMzIoaW1tKSkgewpAQCAtOTAxLDYgKzEyNzQsMTcgQEAgcHVibGljOgogICAgICAgICAgICAg
bV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHZv
aWQgc3VicV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVy
SUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRf
OF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9V
UDFfRXZJYiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SXosIEdST1VQ
MV9PUF9TVUIsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9y
bWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CiAjZWxzZQogICAgIHZv
aWQgc3VibF9pbShpbnQgaW1tLCBjb25zdCB2b2lkKiBhZGRyKQogICAgIHsKQEAgLTkyNCwxMSAr
MTMwOCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YT1Jf
R3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgeG9ybF9tcihpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWE9S
X0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZv
aWQgeG9ybF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQog
ICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hPUl9Fdkd2LCBzcmMsIGJh
c2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCB4b3JsX3JtKFJlZ2lzdGVySUQgc3JjLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YT1JfRXZHdiwgc3JjLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCB4b3JsX2ltKGlu
dCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAgIGlmIChD
QU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC05NDAsNiArMTMzNCw2MyBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHhvcmxfaW0oaW50IGltbSwgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4
KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3AoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9YT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB2b2lkIHhvcndfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVf
T1BFUkFORF9TSVpFKTsKKyAgICAgICAgeG9ybF9ybShzcmMsIG9mZnNldCwgYmFzZSk7CisgICAg
fQorCisgICAgdm9pZCB4b3J3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1f
Zm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgeG9ybF9ybShzcmMs
IG9mZnNldCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcndfaW0o
aW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICB4b3JsX2ltKGltbSwg
b2Zmc2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcndfaW0oaW50IGltbSwgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAg
IHhvcmxfaW0oaW1tLCBvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAg
dm9pZCB4b3JiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Up
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWE9SX0V2R2IsIHNyYywg
YmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcmJfcm0oUmVnaXN0ZXJJRCBzcmMs
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hPUl9FdkdiLCBzcmMs
IGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcmJfaW0o
aW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FYkliLCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBv
ZmZzZXQpOworICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCisg
ICAgdm9pZCB4b3JiX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVn
aXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wKE9QX0dST1VQMV9FYkliLCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBpbmRleCwgc2NhbGUs
IG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICB9CisK
ICAgICB2b2lkIHhvcmxfaXIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAg
ICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgewpAQCAtOTc0LDExICsxNDI1LDQ3IEBA
IHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICB2b2lkIHhvcnFfaW0oaW50IGlt
bSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9T
SUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBvZmZzZXQpOworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9P
UF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUz
MihpbW0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgeG9ycV9pbShpbnQgaW1t
LCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2Fs
ZSkKKyAgICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAg
ICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJYiwgR1JPVVAxX09Q
X1hPUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0
ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9YT1IsIGJhc2UsIGlu
ZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMy
KGltbSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgdm9pZCB4b3JxX3JtKFJlZ2lzdGVy
SUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9YT1JfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOwogICAg
IH0KIAorICAgIHZvaWQgeG9ycV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0
ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YT1JfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCB4b3JxX21yKGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfWE9SX0d2RXYsIGRlc3QsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisg
ICAgdm9pZCB4b3JxX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBp
bmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3A2NChPUF9YT1JfR3ZFdiwgZGVzdCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgIH0KICNlbmRpZgogCiAgICAgdm9pZCBsemNudF9ycihSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkc3QpCkBAIC0xNTg2LDExICsyMDczLDM4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgZHN0KTsKICAg
ICB9CiAKKyAgICB2b2lkIHhjaGdiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENI
R19FdkdiLCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCB4Y2hnYl9ybShS
ZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGlu
ZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1Bf
WENIR19FdkdiLCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAg
ICB2b2lkIHhjaGd3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwg
b2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHhjaGd3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCB4Y2hnbF9ybShSZWdpc3RlcklEIHNy
YywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wKE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAor
ICAgIHZvaWQgeGNoZ2xfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2b2lkIHhjaGdxX3JyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC0xNjA2LDYgKzIxMjAsMTEgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfWENIR19F
dkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQorCisgICAgdm9pZCB4Y2hncV9ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4
LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9Y
Q0hHX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KICNlbmRp
ZgogCiAgICAgdm9pZCBtb3ZsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKQEAg
LTI3NzUsNiArMzI5NCw5MCBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQ
UkVfTE9DSyk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY21weGNoZ2Jfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLnR3b0J5dGVPcDgoT1AyX0NNUFhDSEdiLCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY21weGNoZ2Jfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfQ01QWENIR2IsIHNyYywgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGd3X3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG1fZm9ybWF0dGVy
LnR3b0J5dGVPcChPUDJfQ01QWENIRywgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGNtcHhjaGd3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1f
Zm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
dHdvQnl0ZU9wKE9QMl9DTVBYQ0hHLCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0
ZU9wKE9QMl9DTVBYQ0hHLCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgY21weGNoZ2xfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0
ZXIudHdvQnl0ZU9wKE9QMl9DTVBYQ0hHLCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hncV9ybShSZWdpc3RlcklEIHNyYywgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdv
Qnl0ZU9wNjQoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjbXB4Y2hncV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zv
cm1hdHRlci50d29CeXRlT3A2NChPUDJfQ01QWENIRywgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUs
IG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZGJfcm0oUmVnaXN0ZXJJRCBzcmMs
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
LnR3b0J5dGVPcDgoT1AyX1hBRERiLCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgeGFkZGJfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIudHdvQnl0ZU9wOChPUDJfWEFERGIsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZz
ZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGR3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVm
aXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJf
WEFERCwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGR3X3Jt
KFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQg
aW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVf
T1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9YQURELCBz
cmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4
YWRkbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9YQURELCBzcmMsIGJhc2UsIG9m
ZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZGxfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9YQURELCBzcmMsIGJhc2Us
IGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkcV9ybShS
ZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wNjQoT1AyX1hBREQsIHNyYywgYmFzZSwgb2Zmc2V0KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkcV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfWEFERCwgc3JjLCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAogICAgIHZvaWQgbWZlbmNlKCkKICAgICB7
CiAgICAgICAgIG1fZm9ybWF0dGVyLnRocmVlQnl0ZU9wKE9QMl8zQllURV9FU0NBUEVfQUUsIE9Q
M19NRkVOQ0UpOwpAQCAtMzc1MSw2ICs0MzU0LDI0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB3
cml0ZXIucmVnaXN0ZXJNb2RSTShncm91cE9wLCBybSk7CiAgICAgICAgIH0KIAorICAgICAgICB2
b2lkIHR3b0J5dGVPcDgoVHdvQnl0ZU9wY29kZUlEIG9wY29kZSwgaW50IHJlZywgUmVnaXN0ZXJJ
RCBiYXNlLCBpbnQgb2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBTaW5nbGVJbnN0cnVj
dGlvbkJ1ZmZlcldyaXRlciB3cml0ZXIobV9idWZmZXIpOworICAgICAgICAgICAgd3JpdGVyLmVt
aXRSZXhJZihieXRlUmVnUmVxdWlyZXNSZXgocmVnLCBiYXNlKSwgcmVnLCAwLCBiYXNlKTsKKyAg
ICAgICAgICAgIHdyaXRlci5wdXRCeXRlVW5jaGVja2VkKE9QXzJCWVRFX0VTQ0FQRSk7CisgICAg
ICAgICAgICB3cml0ZXIucHV0Qnl0ZVVuY2hlY2tlZChvcGNvZGUpOworICAgICAgICAgICAgd3Jp
dGVyLm1lbW9yeU1vZFJNKHJlZywgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgdHdvQnl0ZU9wOChUd29CeXRlT3Bjb2RlSUQgb3Bjb2RlLCBpbnQgcmVnLCBSZWdpc3Rl
cklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgaW50IG9mZnNldCkKKyAgICAg
ICAgeworICAgICAgICAgICAgU2luZ2xlSW5zdHJ1Y3Rpb25CdWZmZXJXcml0ZXIgd3JpdGVyKG1f
YnVmZmVyKTsKKyAgICAgICAgICAgIHdyaXRlci5lbWl0UmV4SWYoYnl0ZVJlZ1JlcXVpcmVzUmV4
KHJlZykgfHwgcmVnUmVxdWlyZXNSZXgoaW5kZXgsIGJhc2UpLCByZWcsIGluZGV4LCBiYXNlKTsK
KyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRlVW5jaGVja2VkKE9QXzJCWVRFX0VTQ0FQRSk7Cisg
ICAgICAgICAgICB3cml0ZXIucHV0Qnl0ZVVuY2hlY2tlZChvcGNvZGUpOworICAgICAgICAgICAg
d3JpdGVyLm1lbW9yeU1vZFJNKHJlZywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAg
ICAgICB9CisKICAgICAgICAgLy8gSW1tZWRpYXRlczoKICAgICAgICAgLy8KICAgICAgICAgLy8g
QW4gaW1tZWRhaXRlIHNob3VsZCBiZSBhcHBlbmRlZCB3aGVyZSBhcHByb3ByaWF0ZSBhZnRlciBh
biBvcCBoYXMgYmVlbiBlbWl0dGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXRvbWljVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0F0b21pY1ZhbHVlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNBdG9taWNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQXRvbWljVmFsdWU6On5BdG9taWNW
YWx1ZSgpCit7Cit9CisKK1dpZHRoIEF0b21pY1ZhbHVlOjphY2Nlc3NXaWR0aCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fd2lkdGg7Cit9CisKK3ZvaWQgQXRvbWljVmFsdWU6OmR1bXBNZXRhKENv
bW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KGNvbW1hLCAid2lkdGggPSAiLCBtX3dpZHRoKTsKKyAgICAKKyAgICBNZW1vcnlWYWx1ZTo6
ZHVtcE1ldGEoY29tbWEsIG91dCk7Cit9CisKK1ZhbHVlKiBBdG9taWNWYWx1ZTo6Y2xvbmVJbXBs
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IEF0b21pY1ZhbHVlKCp0aGlzKTsKK30KKworQXRv
bWljVmFsdWU6OkF0b21pY1ZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgV2lkdGggd2lk
dGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQor
ICAgIDogTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgb3BlcmFuZC0+dHlwZSgpLCBv
cmlnaW4sIG9mZnNldCwgb3BlcmFuZCwgcG9pbnRlcikKKyAgICAsIG1fd2lkdGgod2lkdGgpCit7
CisgICAgc2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBBU1NFUlQo
YmVzdFR5cGUob3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKyAgICAKKyAg
ICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAg
Y2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRv
bWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hn
OgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9Cit9CisKK0F0b21pY1ZhbHVlOjpBdG9taWNWYWx1ZShLaW5kIGtpbmQsIE9y
aWdpbiBvcmlnaW4sIFdpZHRoIHdpZHRoLCBWYWx1ZSogZXhwZWN0ZWRWYWx1ZSwgVmFsdWUqIG5l
d1ZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDogTWVtb3J5
VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwga2luZC5vcGNvZGUoKSA9PSBBdG9taWNXZWFrQ0FT
ID8gSW50MzIgOiBleHBlY3RlZFZhbHVlLT50eXBlKCksIG9yaWdpbiwgb2Zmc2V0LCBleHBlY3Rl
ZFZhbHVlLCBuZXdWYWx1ZSwgcG9pbnRlcikKKyAgICAsIG1fd2lkdGgod2lkdGgpCit7CisgICAg
c2V0RmVuY2VSYW5nZShIZWFwUmFuZ2U6OnRvcCgpKTsKKyAgICAKKyAgICBBU1NFUlQoYmVzdFR5
cGUob3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKworICAgIHN3aXRjaCAo
a2luZC5vcGNvZGUoKSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0b21p
Y1N0cm9uZ0NBUzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0F0b21pY1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQXRvbWljVmFsdWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNBdG9taWNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5jbHVk
ZSAiQjNXaWR0aC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
SlNfRVhQT1JUX1BSSVZBVEUgQXRvbWljVmFsdWUgOiBwdWJsaWMgTWVtb3J5VmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzQXRvbWljKGtpbmQub3Bjb2RlKCkpOworICAgIH0KKyAgICAKKyAgICB+QXRvbWlj
VmFsdWUoKTsKKyAgICAKKyAgICBUeXBlIG9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBj
aGlsZCgwKS0+dHlwZSgpOyB9CisgICAgCisgICAgV2lkdGggb3BlcmF0aW9uV2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgCisgICAgLy8gU3lub255bSBmb3Igb3BlcmF0aW9u
V2lkdGgoKSwgaWYgeW91J3JlIGFjY2Vzc2luZyB2aWEgTWVtb3J5VmFsdWUuCisgICAgV2lkdGgg
YWNjZXNzV2lkdGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgCisgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIEF0b21pY1ZhbHVlKEtp
bmQsIE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50MzJf
dCBvZmZzZXQgPSAwKTsKKyAgICAKKyAgICBBdG9taWNWYWx1ZShLaW5kLCBPcmlnaW4sIFdpZHRo
LCBWYWx1ZSogZXhwZWN0ZWRWYWx1ZSwgVmFsdWUqIG5ld1ZhbHVlLCBWYWx1ZSogcG9pbnRlciwg
aW50MzJfdCBvZmZzZXQgPSAwKTsKKyAgICAKKyAgICBXaWR0aCBtX3dpZHRoOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3Bw
CShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0lu
c2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMzUgKzM2LDEzIEBACiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9u
U2V0KFByb2NlZHVyZSAmcHJvYykKLSAgICA6IG1fcHJvYyhwcm9jKQorICAgIDogR2VuZXJpY0Js
b2NrSW5zZXJ0aW9uU2V0KHByb2MubV9ibG9ja3MpCisgICAgLCBtX3Byb2MocHJvYykKIHsKIH0K
IAogQmxvY2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsgfQogCi12b2lkIEJs
b2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCi17Ci0g
ICAgbV9pbnNlcnRpb25zLmFwcGVuZChXVEZNb3ZlKGluc2VydGlvbikpOwotfQotCi1CYXNpY0Js
b2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJl
cXVlbmN5KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFz
aWNCbG9jayhVSU5UX01BWCwgZnJlcXVlbmN5KSk7Ci0gICAgQmFzaWNCbG9jayogcmVzdWx0ID0g
YmxvY2suZ2V0KCk7Ci0gICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJs
b2NrKSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0
aW9uU2V0OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5
KQotewotICAgIHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJl
cXVlbmN5ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVuY3koKSk7Ci19Ci0KLUJhc2ljQmxv
Y2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91
YmxlIGZyZXF1ZW5jeSkKLXsKLSAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwg
ZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7
Ci19Ci0KIEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjpzcGxpdEZvcndhcmQoCiAgICAg
QmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqIGlu
c2VydGlvblNldCwgZG91YmxlIGZyZXF1ZW5jeSkKIHsKQEAgLTEwMiwzMiArODAsNiBAQCBCYXNp
Y0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6c3BsaXRGb3J3CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgpCi17Ci0gICAgaWYgKG1faW5z
ZXJ0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBX
ZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdl
IG5lZWQgdG8gc29ydCB0aGVtIGJlZm9yZQotICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5z
ZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQg
dG8gYmUKLSAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCi0gICAgYnViYmxlU29y
dChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKLQotICAgIGV4ZWN1
dGVJbnNlcnRpb25zKG1fcHJvYy5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKLSAgICAKLSAgICAv
LyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3Nhcnkg
YnV0IGl0J3MKLSAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93
aW5nLgotICAgIG1fcHJvYy5tX2Jsb2Nrcy5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgWyZd
IChzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4mIGJsb2NrUHRyKSAtPiBib29sIHsKLSAgICAg
ICAgICAgIHJldHVybiAhYmxvY2tQdHI7Ci0gICAgICAgIH0pOwotICAgIAotICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9jLm1fYmxvY2tzLnNpemUoKTsgKytpKQotICAgICAgICBt
X3Byb2MubV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOwotICAgIAotICAgIHJldHVybiB0cnVlOwot
fQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0
LmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2Nr
SW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBF
TkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zNSwyNiArMzYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CiAKIGNsYXNzIEluc2VydGlvblNldDsKIAotdHlwZWRlZiBXVEY6Oklu
c2VydGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOwordHlw
ZWRlZiBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz46OkJsb2NrSW5zZXJ0aW9u
IEJsb2NrSW5zZXJ0aW9uOwogCi1jbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitjbGFzcyBCbG9j
a0luc2VydGlvblNldCA6IHB1YmxpYyBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9j
az4gewogcHVibGljOgogICAgIEJsb2NrSW5zZXJ0aW9uU2V0KFByb2NlZHVyZSYpOwogICAgIH5C
bG9ja0luc2VydGlvblNldCgpOwogICAgIAotICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9u
JiYpOwotCi0gICAgLy8gSW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCi0gICAg
QmFzaWNCbG9jayogaW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5h
Tik7Ci0KLSAgICAvLyBJbnNlcnRzIGEgbmV3IGJsb2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2su
IFVzdWFsbHkgeW91IHdpbGwgbm90IHBhc3MgdGhlIGZyZXF1ZW5jeQotICAgIC8vIGFyZ3VtZW50
LiBQYXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRvIGp1c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhl
ICdiZWZvcmUnIGJsb2NrLiBUaGF0J3MKLSAgICAvLyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCi0g
ICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZy
ZXF1ZW5jeSA9IFBOYU4pOwotCi0gICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0aGUg
Z2l2ZW4gYmxvY2suCi0gICAgQmFzaWNCbG9jayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0
ZXIsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLQogICAgIC8vIEEgaGVscGVyIHRvIHNwbGl0
IGEgYmxvY2sgd2hlbiBmb3J3YXJkIGl0ZXJhdGluZyBvdmVyIGl0LiBJdCBjcmVhdGVzIGEgbmV3
IGJsb2NrIHRvIGhvbGQKICAgICAvLyBldmVyeXRoaW5nIGJlZm9yZSB0aGUgaW5zdHJ1Y3Rpb24g
YXQgdmFsdWVJbmRleC4gVGhlIGN1cnJlbnQgYmxvY2sgaXMgbGVmdCB3aXRoCiAgICAgLy8gZXZl
cnl0aGluZyBhdCBhbmQgYWZ0ZXIgdmFsdWVJbmRleC4gSWYgdGhlIG9wdGlvbmFsIEluc2VydGlv
blNldCBpcyBwcm92aWRlZCwgaXQgd2lsbCBnZXQKQEAgLTgwLDEyICs2OCw5IEBAIHB1YmxpYzoK
ICAgICBCYXNpY0Jsb2NrKiBzcGxpdEZvcndhcmQoCiAgICAgICAgIEJhc2ljQmxvY2sqLCB1bnNp
Z25lZCYgdmFsdWVJbmRleCwgSW5zZXJ0aW9uU2V0KiA9IG51bGxwdHIsCiAgICAgICAgIGRvdWJs
ZSBmcmVxdWVuY3kgPSBQTmFOKTsKLSAgICAKLSAgICBib29sIGV4ZWN1dGUoKTsKIAogcHJpdmF0
ZToKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKLSAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+
IG1faW5zZXJ0aW9uczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Miw3ICs4Miw4IEBAIGJvb2wgRWZmZWN0czo6aW50ZXJmZXJlcyhjb25zdCBFZmZlY3RzJiAKICAg
ICAgICAgfHwgaW50ZXJmZXJlc1dpdGhXcml0ZXNQaW5uZWQob3RoZXIsICp0aGlzKQogICAgICAg
ICB8fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIud3JpdGVzKQogICAgICAgICB8fCB3cml0ZXMub3Zl
cmxhcHMob3RoZXIucmVhZHMpCi0gICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRl
cyk7CisgICAgICAgIHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKKyAgICAgICAgfHwg
KGZlbmNlICYmIG90aGVyLmZlbmNlKTsKIH0KIAogYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNv
bnN0IEVmZmVjdHMmIG90aGVyKSBjb25zdApAQCAtOTUsNyArOTYsOCBAQCBib29sIEVmZmVjdHM6
Om9wZXJhdG9yPT0oY29uc3QgRWZmZWN0cyYgCiAgICAgICAgICYmIHdyaXRlc1Bpbm5lZCA9PSBv
dGhlci53cml0ZXNQaW5uZWQKICAgICAgICAgJiYgcmVhZHNQaW5uZWQgPT0gb3RoZXIucmVhZHNQ
aW5uZWQKICAgICAgICAgJiYgd3JpdGVzID09IG90aGVyLndyaXRlcwotICAgICAgICAmJiByZWFk
cyA9PSBvdGhlci5yZWFkczsKKyAgICAgICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHMKKyAgICAg
ICAgJiYgZmVuY2UgPT0gb3RoZXIuZmVuY2U7CiB9CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3Ih
PShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAgLTEyMCw2ICsxMjIsOCBAQCB2b2lkIEVm
ZmVjdHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uCiAgICAgICAgIG91dC5wcmludChjb21t
YSwgIldyaXRlc1Bpbm5lZCIpOwogICAgIGlmIChyZWFkc1Bpbm5lZCkKICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiUmVhZHNQaW5uZWQiKTsKKyAgICBpZiAoZmVuY2UpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgIkZlbmNlIik7CiAgICAgaWYgKHdyaXRlcykKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiV3JpdGVzOiIsIHdyaXRlcyk7CiAgICAgaWYgKHJlYWRzKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwx
MCBAQCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MzE3MwogICAgIGJvb2wgcmVhZHNQaW5uZWQgeyBmYWxzZSB9OwogICAg
IGJvb2wgd3JpdGVzUGlubmVkIHsgZmFsc2UgfTsKKyAgICAKKyAgICAvLyBNZW1vcnkgZmVuY2Vz
IGNhbm5vdCBiZSByZW9yZGVyZWQgYXJvdW5kIGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVp
ciBlZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQKKyAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEg
bWVtb3J5IGZlbmNlLgorICAgIGJvb2wgZmVuY2UgeyBmYWxzZSB9OwogCiAgICAgSGVhcFJhbmdl
IHdyaXRlczsKICAgICBIZWFwUmFuZ2UgcmVhZHM7CkBAIC04OSw2ICs5Myw3IEBAIHN0cnVjdCBF
ZmZlY3RzIHsKICAgICAgICAgcmVzdWx0LnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKICAgICAg
ICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LndyaXRlc1Bpbm5l
ZCA9IHRydWU7CisgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCkBAIC0xMDMsNyArMTA4LDcgQEAgc3RydWN0IEVmZmVjdHMgewogCiAg
ICAgYm9vbCBtdXN0RXhlY3V0ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gdGVybWlu
YWwgfHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0
ZXNQaW5uZWQ7CisgICAgICAgIHJldHVybiB0ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdy
aXRlc0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8IHdyaXRlc1Bpbm5lZCB8fCBmZW5jZTsKICAgICB9
CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0
aGVzZSByZXNwZWN0aXZlIGVmZmVjdHMgd291bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xNDIsNiArMTQyLDcgQEAgc3RydWN0IEltcHVyZUJsb2NrRGF0YSB7CiAKICAgICBSYW5nZVNl
dDxIZWFwUmFuZ2U+IHJlYWRzOyAvLyBUaGlzIG9ubHkgZ2V0cyB1c2VkIGZvciBmb3J3YXJkIHN0
b3JlIGVsaW1pbmF0aW9uLgogICAgIFJhbmdlU2V0PEhlYXBSYW5nZT4gd3JpdGVzOyAvLyBUaGlz
IGdldHMgdXNlZCBmb3IgYm90aCBsb2FkIGFuZCBzdG9yZSBlbGltaW5hdGlvbi4KKyAgICBib29s
IGZlbmNlOwogCiAgICAgTWVtb3J5VmFsdWVNYXAgc3RvcmVzQXRIZWFkOwogICAgIE1lbW9yeVZh
bHVlTWFwIG1lbW9yeVZhbHVlc0F0VGFpbDsKQEAgLTE3NCwxMiArMTc1LDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobWVtb3J5ICYmIG1lbW9yeS0+
aXNTdG9yZSgpCiAgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLnJlYWRzLm92ZXJsYXBzKG1l
bW9yeS0+cmFuZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIWRhdGEud3JpdGVzLm92ZXJs
YXBzKG1lbW9yeS0+cmFuZ2UoKSkpCisgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRl
cy5vdmVybGFwcyhtZW1vcnktPnJhbmdlKCkpCisgICAgICAgICAgICAgICAgICAgICYmICghZGF0
YS5mZW5jZSB8fCAhbWVtb3J5LT5oYXNGZW5jZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGF0
YS5zdG9yZXNBdEhlYWQuYWRkKG1lbW9yeSk7CiAgICAgICAgICAgICAgICAgZGF0YS5yZWFkcy5h
ZGQoZWZmZWN0cy5yZWFkcyk7CiAKICAgICAgICAgICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRl
cyA9IGVmZmVjdHMud3JpdGVzKQogICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGRhdGEsIHdy
aXRlcyk7CisgICAgICAgICAgICAgICAgZGF0YS5mZW5jZSB8PSBlZmZlY3RzLmZlbmNlOwogCiAg
ICAgICAgICAgICAgICAgaWYgKG1lbW9yeSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZW1v
cnlWYWx1ZXNBdFRhaWwuYWRkKG1lbW9yeSk7CkBAIC00NzgsNiArNDgxLDkgQEAgcHJpdmF0ZToK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CiAgICAgYm9vbCBmaW5kU3RvcmVBZnRlckNs
b2JiZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikK
ICAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2Uo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIC8vIFdlIGNh
biBlbGltaW5hdGUgYSBzdG9yZSBpZiBldmVyeSBmb3J3YXJkIHBhdGggaGl0cyBhIHN0b3JlIHRv
IHRoZSBzYW1lIGxvY2F0aW9uIGJlZm9yZQogICAgICAgICAvLyBoaXR0aW5nIGFueSBvcGVyYXRp
b24gdGhhdCBvYnNlcnZlcyB0aGUgc3RvcmUuIFRoaXMgc2VhcmNoIHNlZW1zIGxpa2UgaXQgc2hv
dWxkIGJlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSwgYnV0IGluIHRoZSBvdmVyd2hlbG1pbmcgbWFq
b3JpdHkgb2YgY2FzZXMgaXQgd2lsbCBhbG1vc3QgaW1tZWRpYXRlbHkgaGl0IGFuIApAQCAtNjE0
LDYgKzYyMCwxMiBAQCBwcml2YXRlOgogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
IGRhdGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcgYmFja3dhcmQgZm9yICIsICpwdHIsICIuLi5c
biIpOwogICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5o
YXNGZW5jZSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgR2l2aW5nIHVwIGJlY2F1c2UgZmVuY2VzLlxuIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmIChNZW1vcnlWYWx1
ZSogbWF0Y2ggPSBtX2RhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmZpbmQocHRyLCBmaWx0ZXIpKSB7
CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
Rm91bmQgIiwgKm1hdGNoLCAiIGxvY2FsbHkuXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNyBA
QCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MDcKICAgICB9CiAKKyAg
ICAvLyBUaGlzIHB1dHMgdGhlIElSIGluIHF1aXJrcyBtb2RlLgogICAgIGxvd2VyTWFjcm9zKHBy
b2NlZHVyZSk7CiAKICAgICBpZiAob3B0TGV2ZWwgPj0gMSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIElu
c2VydGlvblNldDsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2NsYXNzIEdlbmVy
aWNCbG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBXVEY6Okluc2VydGlv
bjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOworICAgIAorICAg
IEJsb2NrSW5zZXJ0aW9uU2V0KFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBi
bG9ja3MpCisgICAgICAgIDogbV9ibG9ja3MoYmxvY2tzKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBpbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCisgICAgeworICAgICAg
ICBtX2luc2VydGlvbnMuYXBwZW5kKFdURk1vdmUoaW5zZXJ0aW9uKSk7CisgICAgfQorCisgICAg
Ly8gSW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCisgICAgQmFzaWNCbG9jayog
aW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTikKKyAgICB7Cisg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhV
SU5UX01BWCwgZnJlcXVlbmN5KSk7CisgICAgICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2Nr
LmdldCgpOworICAgICAgICBpbnNlcnQoQmxvY2tJbnNlcnRpb24oaW5kZXgsIFdURk1vdmUoYmxv
Y2spKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gSW5zZXJ0cyBh
IG5ldyBibG9jayBiZWZvcmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBw
YXNzIHRoZSBmcmVxdWVuY3kKKyAgICAvLyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1
cyB0byBqdXN0IHVzZSB0aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdz
CisgICAgLy8gdXN1YWxseSB3aGF0IHlvdSB3YW50LgorICAgIEJhc2ljQmxvY2sqIGluc2VydEJl
Zm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGluc2VydChiZWZvcmUtPmluZGV4KCksIGZyZXF1ZW5jeSA9PSBmcmVx
dWVuY3kgPyBmcmVxdWVuY3kgOiBiZWZvcmUtPmZyZXF1ZW5jeSgpKTsKKyAgICB9CisKKyAgICAv
LyBJbnNlcnRzIGEgbmV3IGJsb2NrIGFmdGVyIHRoZSBnaXZlbiBibG9jay4KKyAgICBCYXNpY0Js
b2NrKiBpbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSA9IFBO
YU4pCisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJl
cXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7Cisg
ICAgfQorCisgICAgYm9vbCBleGVjdXRlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2luc2VydGlv
bnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgLy8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3JkZXIu
IFNvLCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBiZWZvcmUKKyAgICAgICAgLy8gcnVubmluZyBXVEY6
OmV4ZWN1dGVJbnNlcnRpb25zLiBXZSBzdHJvbmdseSBwcmVmZXIgYSBzdGFibGUgc29ydCBhbmQg
d2Ugd2FudCBpdCB0byBiZQorICAgICAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQu
CisgICAgICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5l
bmQoKSk7CisgICAgICAgIAorICAgICAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX2Jsb2NrcywgbV9p
bnNlcnRpb25zKTsKKyAgICAgICAgCisgICAgICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRyaWVz
LiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgICAgICAvLyBoZWFs
dGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgICAgICBtX2Jsb2Nr
cy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEJh
c2ljQmxvY2s+JiBibG9ja1B0cikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFi
bG9ja1B0cjsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIGJsb2NrcyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2Js
b2Nrc1tpXS0+bV9pbmRleCA9IGk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4m
IG1fYmxvY2tzOworICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04OCw2ICs4OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKICAgICB9CiAgICAgCisgICAgSGVhcFJhbmdlIG9wZXJhdG9yfChjb25zdCBI
ZWFwUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgK
KyAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAgICAgICAg
ICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAogICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9CiAK
ICAgICB1bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMjEy
OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU4LDYgKzU4LDExIEBAIFZhbHVlKiBJbnNlcnRpb25TZXQ6Omluc2Vy
dEJvdHRvbShzaXplX3QKICAgICByZXR1cm4gaW5zZXJ0Qm90dG9tKGluZGV4LCBsaWtlVmFsdWUt
Pm9yaWdpbigpLCBsaWtlVmFsdWUtPnR5cGUoKSk7CiB9CiAKK1ZhbHVlKiBJbnNlcnRpb25TZXQ6
Omluc2VydENsb25lKHNpemVfdCBpbmRleCwgVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBp
bnNlcnRWYWx1ZShpbmRleCwgbV9wcm9jZWR1cmUuY2xvbmUodmFsdWUpKTsKK30KKwogdm9pZCBJ
bnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgYnViYmxlU29y
dChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtNzEsNiArNzEsOCBAQCBwdWJsaWM6CiAKICAgICBWYWx1ZSogaW5zZXJ0Qm90dG9tKHNp
emVfdCBpbmRleCwgT3JpZ2luLCBUeXBlKTsKICAgICBWYWx1ZSogaW5zZXJ0Qm90dG9tKHNpemVf
dCBpbmRleCwgVmFsdWUqKTsKKyAgICAKKyAgICBWYWx1ZSogaW5zZXJ0Q2xvbmUoc2l6ZV90IGlu
ZGV4LCBWYWx1ZSopOwogCiAgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMjEy
OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTgsMTEgKzU4LDE0IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3Byb2Mo
cHJvYykKICAgICAgICAgLCBtX2Jsb2NrSW5zZXJ0aW9uU2V0KHByb2MpCiAgICAgICAgICwgbV9p
bnNlcnRpb25TZXQocHJvYykKKyAgICAgICAgLCBtX3VzZUNvdW50cyhwcm9jKQogICAgIHsKICAg
ICB9CiAKICAgICBib29sIHJ1bigpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9w
cm9jLmhhc1F1aXJrcygpKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKICAgICAgICAgICAg
IHByb2Nlc3NDdXJyZW50QmxvY2soKTsKQEAgLTcyLDYgKzc1LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIG1fcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOwogICAgICAgICAgICAgbV9wcm9jLmlu
dmFsaWRhdGVDRkcoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpbmRp
Y2F0ZXMgdGhhdCB3ZSd2ZSAKKyAgICAgICAgbV9wcm9jLnNldEhhc1F1aXJrcyh0cnVlKTsKKyAg
ICAgICAgCiAgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CiAgICAgfQogICAgIApAQCAtMTg1LDcg
KzE5Miw5NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYXNlIERlcGVuZDogeworICAgICAgICAgICAgICAgIGlmIChpc1g4NigpKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGxvYWQtbG9hZCBmZW5jZS4gVGhpcyBj
b2RlZ2VucyB0byBub3RoaW5nIG9uIFg4Ni4gV2UgdXNlIGl0IHRvIHRlbGwgdGhlCisgICAgICAg
ICAgICAgICAgICAgIC8vIGNvbXBpbGVyIG5vdCB0byBibG9jayBsb2FkIG1vdGlvbi4KKyAgICAg
ICAgICAgICAgICAgICAgRmVuY2VWYWx1ZSogZmVuY2UgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
RmVuY2VWYWx1ZT4obV9pbmRleCwgbV9vcmlnaW4pOworICAgICAgICAgICAgICAgICAgICBmZW5j
ZS0+cmVhZCA9IEhlYXBSYW5nZSgpOworICAgICAgICAgICAgICAgICAgICBmZW5jZS0+d3JpdGUg
PSBIZWFwUmFuZ2U6OnRvcCgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgLy8gS2lsbCB0aGUgRGVwZW5kLCB3aGljaCBzaG91bGQgdW5sb2NrIGEgYnVuY2ggb2Yg
Y29kZSBzaW1wbGlmaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNl
V2l0aEJvdHRvbShtX2luc2VydGlvblNldCwgbV9pbmRleCk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAg
Y2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6IHsK
KyAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9
IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgICAgIFdpZHRoIHdpZHRo
ID0gYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChpc0Nhbm9uaWNhbFdpZHRoKHdpZHRoKSkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFsdWUqIGV4cGVjdGVk
VmFsdWUgPSBhdG9taWMtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8vIE9uIEFSTSwgdGhlIGxvYWQgcGFydCBvZiB0aGUgQ0FTIGRvZXMgYSBsb2FkIHdpdGgg
emVybyBleHRlbnNpb24uIFRoZXJlZm9yZSwgd2UgbmVlZAorICAgICAgICAgICAgICAgIC8vIHRv
IHplcm8tZXh0ZW5kIHRoZSBpbnB1dC4KKyAgICAgICAgICAgICAgICBWYWx1ZSogbWFza2VkRXhw
ZWN0ZWRWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgICAgIG1faW5kZXgsIEJpdEFuZCwgbV9vcmlnaW4sIGV4cGVjdGVkVmFsdWUsCisgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENvbnN0YW50KG1faW5kZXgsIGV4
cGVjdGVkVmFsdWUsIG1hc2sod2lkdGgpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgYXRvbWljLT5jaGlsZCgwKSA9IG1hc2tlZEV4cGVjdGVkVmFsdWU7CisgICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoK
KyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWlj
WGNoZ09yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgICAgICAgICAgY2Fz
ZSBBdG9taWNYY2hnWG9yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnOiB7CisgICAgICAg
ICAgICAgICAgLy8gT24gWDg2LCB0aGVzZSBtYXkgYWN0dWFsbHkgcmV0dXJuIGdhcmJhZ2UgaW4g
dGhlIGhpZ2ggYml0cy4gT24gQVJNNjQsIHRoZXNlIHNvcnRhCisgICAgICAgICAgICAgICAgLy8g
emVyby1leHRlbmQgdGhlaXIgaGlnaCBiaXRzLCBleGNlcHQgdGhhdCB0aGUgaGlnaCBiaXRzIG1p
Z2h0IGdldCBwb2xsdXRlZCBieSBoaWdoCisgICAgICAgICAgICAgICAgLy8gYml0cyBpbiB0aGUg
b3BlcmFuZC4gLiBTbywgZWl0aGVyIHdheSwgd2UgbmVlZCB0byB0aHJvdyBhIHNpZ24tZXh0ZW5k
IG9uIHRoZXNlCisgICAgICAgICAgICAgICAgLy8gdGhpbmdzLgorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICht
X3ZhbHVlLT5vcGNvZGUoKSA9PSBBdG9taWNYY2hnU3ViICYmIG1fdXNlQ291bnRzLm51bVVzZXMo
bV92YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9uIHg4NiwgeGNoZ2FkZCBp
cyBiZXR0ZXIgdGhhbiB4Y2hnc3ViIGlmIGl0IGhhcyBhbnkgdXNlcnMuCisgICAgICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlLT5zZXRLaW5kVW5zYWZlbHkoQXRvbWljWGNoZ0FkZCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgTmVnLCBt
X29yaWdpbiwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBib29sIGV4ZW1wdCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBdG9taWNYY2hnT3I6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1N1
YjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICAgICAg
ICAgICAgICAgICAgZXhlbXB0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4
ZW1wdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0g
bV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICAgICAgV2lkdGggd2lkdGgg
PSBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKGlzQ2Fub25pY2FsV2lkdGgod2lkdGgpKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYWx1ZSogbmV3VmFsdWUg
PSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX2lu
ZGV4LCBzaWduRXh0ZW5kT3Bjb2RlKHdpZHRoKSwgbV9vcmlnaW4sCisgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENsb25lKG1faW5kZXgsIG1fdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5
KG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTQ3
MCw2ICs1NjYsNyBAQCBwcml2YXRlOgogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAgIEJsb2Nr
SW5zZXJ0aW9uU2V0IG1fYmxvY2tJbnNlcnRpb25TZXQ7CiAgICAgSW5zZXJ0aW9uU2V0IG1faW5z
ZXJ0aW9uU2V0OworICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBCYXNpY0Jsb2NrKiBt
X2Jsb2NrOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgVmFsdWUqIG1fdmFsdWU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNy
b3NBZnRlck9wdGltaXphdGlvbnMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1NiwxNSArMTU2LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNl
IFJvdEw6IHsKICAgICAgICAgICAgICAgICAvLyBBUk02NCBkb2Vzbid0IGhhdmUgYSByb3RhdGUg
bGVmdC4KICAgICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChpc0FSTTY0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdT
aGlmdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgTmVnLCBtX3ZhbHVl
LT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
VmFsdWUqIHJvdGF0ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgUm90
UiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBuZXdTaGlmdCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KHJvdGF0ZSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbmV3U2hpZnQgPSBtX2luc2VydGlvblNldC5pbnNl
cnQ8VmFsdWU+KG1faW5kZXgsIE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxk
KDEpKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHJvdGF0ZSA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgUm90UiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUt
PmNoaWxkKDApLCBuZXdTaGlmdCk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxh
Y2VXaXRoSWRlbnRpdHkocm90YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsMTQgQEAgbmFtZXNw
YWNlIHsKIAogY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKKy8vIEZJWE1FOiBXZSB3b3Vs
ZG4ndCBuZWVkIHRoaXMgaWYgQWlyIHN1cHBvcnRlZCBXaWR0aCBtb2RpZmllcnMgaW4gQWlyOjpL
aW5kLgorLy8gT09QUyEhISAobmVlZCBhIGJ1ZyBVUkwpCisjZGVmaW5lIE9QQ09ERV9GT1JfV0lE
VEgob3Bjb2RlLCB3aWR0aCkgKCBcCisgICAgKHdpZHRoKSA9PSBXaWR0aDggPyBvcGNvZGUgIyMg
OCA6IFwKKyAgICAod2lkdGgpID09IFdpZHRoMTYgPyBvcGNvZGUgIyMgMTYgOiBcCisgICAgKHdp
ZHRoKSA9PSBXaWR0aDMyID8gb3Bjb2RlICMjIDMyIDogXAorICAgIG9wY29kZSAjIyA2NCkKKwog
Y2xhc3MgTG93ZXJUb0FpciB7CiBwdWJsaWM6CiAgICAgTG93ZXJUb0FpcihQcm9jZWR1cmUmIHBy
b2NlZHVyZSkKQEAgLTgzLDYgKzkxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2RvbWluYXRv
cnMocHJvY2VkdXJlLmRvbWluYXRvcnMoKSkKICAgICAgICAgLCBtX3Byb2NlZHVyZShwcm9jZWR1
cmUpCiAgICAgICAgICwgbV9jb2RlKHByb2NlZHVyZS5jb2RlKCkpCisgICAgICAgICwgbV9ibG9j
a0luc2VydGlvblNldChtX2NvZGUpCisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICAg
ICAgLCBtX2VheChYODZSZWdpc3RlcnM6OmVheCkKKyAgICAgICAgLCBtX2VjeChYODZSZWdpc3Rl
cnM6OmVjeCkKKyAgICAgICAgLCBtX2VkeChYODZSZWdpc3RlcnM6OmVkeCkKKyNlbmRpZgogICAg
IHsKICAgICB9CiAKQEAgLTEyNCwxNCArMTM4LDE4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gaG9p
c3RlZCBhZGRyZXNzIGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8g
dGhlIGxvb3AuCiAgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1
cmUuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7Ci0g
ICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgotICAgICAgICAgICAgbV9pbnN0cy5yZXNp
emUoMCk7CiAKICAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9j
ayk7CiAKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
Ikxvd2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3Rs
eS4KKyAgICAgICAgICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2td
LT5zdWNjZXNzb3JzKCkuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50
ZWRCbG9jayhtX2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVx
dWVuY3koKSkpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2Nr
cyBpbiByZXZlcnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hh
dCBhbGxvd3MgdXMKICAgICAgICAgICAgIC8vIHRvIG1hdGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5
LgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgewpA
QCAtMTQ5LDE5ICsxNjcsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBtX2lu
c3RzIGNvbnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcwotICAgICAg
ICAgICAgLy8gaXQgaW4gcmV2ZXJzZS4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
aW5zdHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDog
bV9pbnN0c1tpXSkKLSAgICAgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5h
cHBlbmRJbnN0KFdURk1vdmUoaW5zdCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KLSAg
ICAgICAgICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3Vj
Y2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNj
ZXNzb3JzKCkuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9j
ayhtX2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3ko
KSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rp
b25zKG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IG1fYmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwogCiAgICAgICAgIEFpcjo6SW5zZXJ0aW9u
U2V0IGluc2VydGlvblNldChtX2NvZGUpOwogICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBtX3By
b2xvZ3VlKQpAQCAtNTM4LDcgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4g
QXJnKCk7CiAKICAgICAgICAgaW50MzJfdCBvZmZzZXQgPSB2YWx1ZS0+b2Zmc2V0KCk7Ci0gICAg
ICAgIFdpZHRoIHdpZHRoID0gdmFsdWUtPmFjY2Vzc1dpZHRoKCk7CisgICAgICAgIFdpZHRoIHdp
ZHRoID0gdmFsdWUtPmxvYWRTdG9yZVdpZHRoKCk7CiAKICAgICAgICAgQXJnIHJlc3VsdCA9IGVm
ZmVjdGl2ZUFkZHIodmFsdWUtPmxhc3RDaGlsZCgpLCBvZmZzZXQsIHdpZHRoKTsKICAgICAgICAg
QVNTRVJUKHJlc3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpOwpAQCAtNTYyLDExICs1NzEsMTYgQEAg
cHJpdmF0ZToKICAgICAKICAgICBBcmdQcm9taXNlIGxvYWRQcm9taXNlQW55T3Bjb2RlKFZhbHVl
KiBsb2FkVmFsdWUpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2FkVmFsdWUtPmFz
PE1lbW9yeVZhbHVlPigpKTsKICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKGxvYWRWYWx1ZSkp
CiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7CiAgICAgICAgIGlmIChjcm9zc2VzSW50ZXJmZXJl
bmNlKGxvYWRWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7Ci0gICAgICAgIEFyZ1By
b21pc2UgcmVzdWx0KGFkZHIobG9hZFZhbHVlKSwgbG9hZFZhbHVlKTsKKyAgICAgICAgaWYgKGxv
YWRWYWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1
cm4gQXJnKCk7CisgICAgICAgIEFyZyBsb2FkQWRkciA9IGFkZHIobG9hZFZhbHVlKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobG9hZEFkZHIpOworICAgICAgICBBcmdQcm9taXNlIHJlc3VsdChs
b2FkQWRkciwgbG9hZFZhbHVlKTsKICAgICAgICAgaWYgKGxvYWRWYWx1ZS0+dHJhcHMoKSkKICAg
ICAgICAgICAgIHJlc3VsdC5zZXRUcmFwcyh0cnVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
QEAgLTg5OCwxMSArOTEyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKICAgICAgICAgYXBwZW5kKE1vdmUs
IHRtcCh2YWx1ZSksIHRtcChtX3ZhbHVlKSk7Ci0gICAgICAgIGFwcGVuZChNb3ZlLCB0bXAoYW1v
dW50KSwgVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KSk7Ci0gICAgICAgIGFwcGVuZChvcGNvZGUsIFRt
cChYODZSZWdpc3RlcnM6OmVjeCksIHRtcChtX3ZhbHVlKSk7Ci0jZW5kaWYKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIHRtcChhbW91bnQpLCBtX2VjeCk7CisgICAgICAgIGFwcGVuZChvcGNvZGUsIG1f
ZWN4LCB0bXAobV92YWx1ZSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9w
Y29kZTMyLCBBaXI6Ok9wY29kZSBvcGNvZGU2ND4KQEAgLTkzMSwxMCArOTQzLDE1IEBAIHByaXZh
dGU6CiAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZTMyLCBBaXI6Ok9wY29kZSBvcGNvZGU2NCwg
Q29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU+CiAgICAgYm9vbCB0
cnlBcHBlbmRTdG9yZUJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCiAgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSk7CisgICAgICAg
IAogICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNvZGVGb3JUeXBlKG9wY29kZTMy
LCBvcGNvZGU2NCwgbGVmdC0+dHlwZSgpKTsKICAgICAgICAgaWYgKG9wY29kZSA9PSBBaXI6Ok9v
cHMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAorICAgICAgICBpZiAobV92
YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAogICAgICAgICBBcmcgc3RvcmVBZGRyID0gYWRkcihtX3ZhbHVlKTsK
ICAgICAgICAgQVNTRVJUKHN0b3JlQWRkcik7CiAKQEAgLTk5NCwxMCArMTAxMSw0OCBAQCBwcml2
YXRlOgogCiAgICAgICAgIHJldHVybiBJbnN0KG1vdmUsIG1fdmFsdWUsIHRtcCh2YWx1ZSksIGRl
c3QpOwogICAgIH0KKyAgICAKKyAgICBBaXI6Ok9wY29kZSBzdG9yZU9wY29kZShXaWR0aCB3aWR0
aCwgQmFuayBiYW5rLCBib29sIHJlbGVhc2UpCisgICAgeworICAgICAgICBzd2l0Y2ggKHdpZHRo
KSB7CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFu
ayA9PSBHUCk7CisgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVsOCA6IFN0b3Jl
ODsKKyAgICAgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFu
ayA9PSBHUCk7CisgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVsMTYgOiBTdG9y
ZTE2OworICAgICAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgICAgICBzd2l0Y2ggKGJhbmspIHsK
KyAgICAgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBT
dG9yZVJlbDMyIDogTW92ZTMyOworICAgICAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghcmVsZWFzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1vdmVG
bG9hdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdp
ZHRoNjQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpczY0Qml0KCkpOworICAgICAgICAg
ICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgICAg
IHJldHVybiByZWxlYXNlID8gU3RvcmVSZWw2NCA6IE1vdmU7CisgICAgICAgICAgICBjYXNlIEZQ
OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWxlYXNlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTW92ZURvdWJsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlT3Bjb2RlKFZhbHVlKiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7
CisgICAgICAgIHJldHVybiBzdG9yZU9wY29kZShtZW1vcnktPmxvYWRTdG9yZVdpZHRoKCksIG1l
bW9yeS0+YWNjZXNzQmFuaygpLCBtZW1vcnktPmhhc0ZlbmNlKCkpOworICAgIH0KIAogICAgIElu
c3QgY3JlYXRlU3RvcmUoVmFsdWUqIHZhbHVlLCBjb25zdCBBcmcmIGRlc3QpCiAgICAgewotICAg
ICAgICBBaXI6Ok9wY29kZSBtb3ZlT3Bjb2RlID0gbW92ZUZvclR5cGUodmFsdWUtPnR5cGUoKSk7
CisgICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVPcGNvZGUgPSBzdG9yZU9wY29kZSh2YWx1ZSk7CiAg
ICAgICAgIHJldHVybiBjcmVhdGVTdG9yZShtb3ZlT3Bjb2RlLCB2YWx1ZSwgZGVzdCk7CiAgICAg
fQogCkBAIC0xMDA2LDcgKzEwNjEsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgYXBwZW5k
KHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBjcmVhdGVTdG9yZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJn
cykuLi4pKSk7CiAgICAgfQotCisgICAgCiAgICAgQWlyOjpPcGNvZGUgbW92ZUZvclR5cGUoVHlw
ZSB0eXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xMDczLDcgKzExMjgs
NDEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChpbnN0
KTsKICAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2hBcHBlbmRpbmdJbnN0cnVjdGlvbnMoQWly
OjpCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgeworICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBp
bnN0cnVjdGlvbnMuIG1faW5zdHMgY29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3
ZSBwcm9jZXNzCisgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1faW5zdHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBmb3IgKEluc3QmIGlu
c3QgOiBtX2luc3RzW2ldKQorICAgICAgICAgICAgICAgIHRhcmdldC0+YXBwZW5kSW5zdChXVEZN
b3ZlKGluc3QpKTsKKyAgICAgICAgfQorICAgICAgICBtX2luc3RzLnJlc2l6ZSgwKTsKKyAgICB9
CisgICAgCisgICAgQWlyOjpCYXNpY0Jsb2NrKiBuZXdCbG9jaygpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRBZnRlcihtX2Jsb2NrVG9CbG9ja1ttX2Js
b2NrXSk7CisgICAgfQogCisgICAgLy8gTk9URTogVGhpcyB3aWxsIGNyZWF0ZSBhIGNvbnRpbnVh
dGlvbiBibG9jayAoYG5leHRCbG9ja2ApICphZnRlciogYW55IGJsb2NrcyB5b3UndmUgY3JlYXRl
ZCB1c2luZworICAgIC8vIG5ld0Jsb2NrKCkuIFNvLCBpdCdzIHByZWZlcmFibGUgdG8gY3JlYXRl
IGFsbCBvZiB5b3VyIGJsb2NrcyB1cGZyb250IHVzaW5nIG5ld0Jsb2NrKCkuIEFsc28gbm90ZQor
ICAgIC8vIHRoYXQgYW55IGNvZGUgeW91IGVtaXQgYmVmb3JlIHRoaXMgd2lsbCBiZSBwcmVwZW5k
ZWQgdG8gdGhlIGNvbnRpbnVhdGlvbiwgYW5kIGFueSBjb2RlIHlvdSBlbWl0CisgICAgLy8gYWZ0
ZXIgdGhpcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBwcmV2aW91cyBibG9jay4KKyAgICB2b2lk
IHNwbGl0QmxvY2soQWlyOjpCYXNpY0Jsb2NrKiYgcHJldmlvdXNCbG9jaywgQWlyOjpCYXNpY0Js
b2NrKiYgbmV4dEJsb2NrKQorICAgIHsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBibG9jayA9
IG1fYmxvY2tUb0Jsb2NrW21fYmxvY2tdOworICAgICAgICAKKyAgICAgICAgcHJldmlvdXNCbG9j
ayA9IGJsb2NrOworICAgICAgICBuZXh0QmxvY2sgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2Vy
dEFmdGVyKGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZpbmlzaEFwcGVuZGluZ0luc3RydWN0
aW9ucyhuZXh0QmxvY2spOworICAgICAgICBuZXh0QmxvY2stPnN1Y2Nlc3NvcnMoKSA9IGJsb2Nr
LT5zdWNjZXNzb3JzKCk7CisgICAgICAgIGJsb2NrLT5zdWNjZXNzb3JzKCkuY2xlYXIoKTsKKyAg
ICAgICAgCisgICAgICAgIG1faW5zdHMuYXBwZW5kKFZlY3RvcjxJbnN0PigpKTsKKyAgICB9Cisg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAg
IFQqIGVuc3VyZVNwZWNpYWwoVComIGZpZWxkLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCiAg
ICAgewpAQCAtMTEyMyw3ICsxMjEyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CiAgICAgICAgICAg
ICAgICAgYXJnID0gQXJnOjpjYWxsQXJnKHZhbHVlLnJlcCgpLm9mZnNldEZyb21TUCgpKTsKLSAg
ICAgICAgICAgICAgICBhcHBlbmRTdG9yZSh2YWx1ZS52YWx1ZSgpLCBhcmcpOworICAgICAgICAg
ICAgICAgIGFwcGVuZFN0b3JlKG1vdmVGb3JUeXBlKHZhbHVlLnZhbHVlKCkpLCBhcmcpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTk2MSw2ICsyMDUwLDMwOCBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICB2b2lkIGFwcGVuZFg4
NkRpdihCMzo6T3Bjb2RlIG9wKQorICAgIHsKKyAgICAgICAgQWlyOjpPcGNvZGUgY29udmVydFRv
RG91YmxlV29yZDsKKyAgICAgICAgQWlyOjpPcGNvZGUgZGl2OworICAgICAgICBzd2l0Y2ggKG1f
dmFsdWUtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgY29udmVy
dFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMjsKKyAgICAgICAgICAgIGRp
diA9IFg4NkRpdjMyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50NjQ6Cisg
ICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2Q29udmVydFRvUXVhZFdvcmQ2NDsK
KyAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKG9wID09IERpdiB8
fCBvcCA9PSBNb2QpOworICAgICAgICBUbXAgcmVzdWx0ID0gb3AgPT0gRGl2ID8gbV9lYXggOiBt
X2VkeDsKKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgbV9l
YXgpOworICAgICAgICBhcHBlbmQoY29udmVydFRvRG91YmxlV29yZCwgbV9lYXgsIG1fZWR4KTsK
KyAgICAgICAgYXBwZW5kKGRpdiwgbV9lYXgsIG1fZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkp
KTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIHJlc3VsdCwgdG1wKG1fdmFsdWUpKTsKKyAgICB9CisK
KyAgICB2b2lkIGFwcGVuZFg4NlVEaXYoQjM6Ok9wY29kZSBvcCkKKyAgICB7CisgICAgICAgIEFp
cjo6T3Bjb2RlIGRpdiA9IG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IFg4NlVEaXYzMiA6IFg4
NlVEaXY2NDsKKworICAgICAgICBBU1NFUlQob3AgPT0gVURpdiB8fCBvcCA9PSBVTW9kKTsKKyAg
ICAgICAgVG1wIHJlc3VsdCA9IG9wID09IFVEaXYgPyBtX2VheCA6IG1fZWR4OworCisgICAgICAg
IGFwcGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBtX2VheCk7CisgICAgICAgIGFw
cGVuZChYb3I2NCwgbV9lZHgsIG1fZWR4KTsKKyAgICAgICAgYXBwZW5kKGRpdiwgbV9lYXgsIG1f
ZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIHJlc3Vs
dCwgdG1wKG1fdmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgQWlyOjpPcGNvZGUgbG9hZExpbmtP
cGNvZGUoV2lkdGggd2lkdGgsIGJvb2wgZmVuY2UpCisgICAgeworICAgICAgICByZXR1cm4gZmVu
Y2UgPyBPUENPREVfRk9SX1dJRFRIKExvYWRMaW5rQWNxLCB3aWR0aCkgOiBPUENPREVfRk9SX1dJ
RFRIKExvYWRMaW5rLCB3aWR0aCk7CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3Jl
Q29uZE9wY29kZShXaWR0aCB3aWR0aCwgYm9vbCBmZW5jZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmZW5jZSA/IE9QQ09ERV9GT1JfV0lEVEgoU3RvcmVDb25kUmVsLCB3aWR0aCkgOiBPUENPREVf
Rk9SX1dJRFRIKFN0b3JlQ29uZCwgd2lkdGgpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGNh
biBlbWl0IGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgcGF0dGVybnM6CisgICAgLy8gQXRvbWljV2Vh
a0NBUworICAgIC8vIEJpdFhvcihBdG9taWNXZWFrQ0FTLCAxKQorICAgIC8vIEF0b21pY1N0cm9u
Z0NBUworICAgIC8vIEVxdWFsKEF0b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpCisgICAgLy8gTm90
RXF1YWwoQXRvbWljU3Ryb25nQ0FTLCBleHBlY3RlZCkKKyAgICAvLyBCcmFuY2goQXRvbWljV2Vh
a0NBUykKKyAgICAvLyBCcmFuY2goRXF1YWwoQXRvbWljU3Ryb25nQ0FTLCBleHBlY3RlZCkpCisg
ICAgLy8gQnJhbmNoKE5vdEVxdWFsKEF0b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpKQorICAgIC8v
CisgICAgLy8gSXQgYXNzdW1lcyB0aGF0IGF0b21pY1ZhbHVlIHBvaW50cyB0byB0aGUgQ0FTLCBh
bmQgbV92YWx1ZSBwb2ludHMgdG8gdGhlIGluc3RydWN0aW9uIGJlaW5nCisgICAgLy8gZ2VuZXJh
dGVkLiBJdCBhc3N1bWVzIHRoYXQgeW91J3ZlIGNvbnN1bWVkIGV2ZXJ5dGhpbmcgdGhhdCBuZWVk
cyB0byBiZSBjb25zdW1lZC4KKyAgICB2b2lkIGFwcGVuZENBUyhWYWx1ZSogYXRvbWljVmFsdWUs
IGJvb2wgaW52ZXJ0KQorICAgIHsKKyAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IGF0b21p
Y1ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXRvbWlj
KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNCcmFuY2ggPSBtX3ZhbHVlLT5vcCgpID09IEJy
YW5jaDsKKyAgICAgICAgYm9vbCBpc1N0cm9uZyA9IGF0b21pYy0+b3AoKSA9PSBBdG9taWNTdHJv
bmdDQVM7CisgICAgICAgIGJvb2wgcmV0dXJuc09sZFZhbHVlID0gbV92YWx1ZS0+b3AoKSA9PSBB
dG9taWNTdHJvbmdDQVM7CisgICAgICAgIAorICAgICAgICBXaWR0aCB3aWR0aCA9IGF0b21pYy0+
b3BlcmF0aW9uV2lkdGgoKTsKKyAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisK
KyAgICAgICAgVG1wIHZhbHVlUmVzdWx0VG1wOworICAgICAgICBUbXAgYm9vbFJlc3VsdFRtcDsK
KyAgICAgICAgaWYgKHJldHVybnNPbGRWYWx1ZSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWludmVydCk7CisgICAgICAgICAgICB2YWx1ZVJlc3VsdFRtcCA9IHRtcChtX3ZhbHVlKTsK
KyAgICAgICAgICAgIGJvb2xSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAg
fSBlbHNlIGlmIChpc0JyYW5jaCkgeworICAgICAgICAgICAgdmFsdWVSZXN1bHRUbXAgPSBtX2Nv
ZGUubmV3VG1wKEdQKTsKKyAgICAgICAgICAgIGJvb2xSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1w
KEdQKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlUmVzdWx0VG1wID0gbV9j
b2RlLm5ld1RtcChHUCk7CisgICAgICAgICAgICBib29sUmVzdWx0VG1wID0gdG1wKG1fdmFsdWUp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBUbXAgc3VjY2Vzc0Jvb2xSZXN1bHRUbXA7
CisgICAgICAgIGlmIChpc1N0cm9uZyAmJiAhaXNCcmFuY2gpCisgICAgICAgICAgICBzdWNjZXNz
Qm9vbFJlc3VsdFRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzdWNjZXNzQm9vbFJlc3VsdFRtcCA9IGJvb2xSZXN1bHRUbXA7CisKKyAgICAgICAgVG1w
IGV4cGVjdGVkVmFsdWVUbXAgPSB0bXAoYXRvbWljLT5jaGlsZCgwKSk7CisgICAgICAgIFRtcCBu
ZXdWYWx1ZVRtcCA9IHRtcChhdG9taWMtPmNoaWxkKDEpKTsKKyAgICAgICAgCisgICAgICAgIEZy
ZXF1ZW50ZWRCbG9jayBzdWNjZXNzOworICAgICAgICBGcmVxdWVudGVkQmxvY2sgZmFpbHVyZTsK
KyAgICAgICAgaWYgKGlzQnJhbmNoKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gbV9ibG9ja1Rv
QmxvY2tbbV9ibG9ja10tPnN1Y2Nlc3NvcihpbnZlcnQpOworICAgICAgICAgICAgZmFpbHVyZSA9
IG1fYmxvY2tUb0Jsb2NrW21fYmxvY2tdLT5zdWNjZXNzb3IoIWludmVydCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBhcHBlbmQocmVs
YXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpKSwgaW1tT3JUbXAoYXRvbWlj
LT5jaGlsZCgwKSksIG1fZWF4KTsKKyAgICAgICAgICAgIGlmIChyZXR1cm5zT2xkVmFsdWUpIHsK
KyAgICAgICAgICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNTdHJvbmdDQVMs
IHdpZHRoKSwgbV9lYXgsIG5ld1ZhbHVlVG1wLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBh
cHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpKSwgbV9lYXgs
IHZhbHVlUmVzdWx0VG1wKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNCcmFuY2gpIHsKKyAg
ICAgICAgICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChCcmFuY2hBdG9taWNTdHJvbmdD
QVMsIHdpZHRoKSwgQXJnOjpzdGF0dXNDb25kKE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNzKSwgbV9l
YXgsIG5ld1ZhbHVlVG1wLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrVG9CbG9j
a1ttX2Jsb2NrXS0+c2V0U3VjY2Vzc29ycyhzdWNjZXNzLCBmYWlsdXJlKTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKEF0b21pY1N0
cm9uZ0NBUywgd2lkdGgpLCBBcmc6OnN0YXR1c0NvbmQoaW52ZXJ0ID8gTWFjcm9Bc3NlbWJsZXI6
OkZhaWx1cmUgOiBNYWNyb0Fzc2VtYmxlcjo6U3VjY2VzcyksIG1fZWF4LCB0bXAoYXRvbWljLT5j
aGlsZCgxKSksIGFkZHJlc3MsIGJvb2xSZXN1bHRUbXApOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOwor
ICAgICAgICAvLyBXZSB3aXNoIHRvIGVtaXQ6CisgICAgICAgIC8vCisgICAgICAgIC8vIEJsb2Nr
ICNyZWxvb3A6CisgICAgICAgIC8vICAgICBMb2FkTGluaworICAgICAgICAvLyAgICAgQnJhbmNo
IE5vdEVxdWFsCisgICAgICAgIC8vICAgU3VjY2Vzc29yczogVGhlbjojZmFpbCwgRWxzZTogI3N0
b3JlCisgICAgICAgIC8vIEJsb2NrICNzdG9yZToKKyAgICAgICAgLy8gICAgIFN0b3JlQ29uZAor
ICAgICAgICAvLyAgICAgWG9yICQxLCAlcmVzdWx0ICAgIDwtLS0gb25seSBpZiAhaW52ZXJ0Cisg
ICAgICAgIC8vICAgICBKdW1wCisgICAgICAgIC8vICAgU3VjY2Vzc29yczogI2RvbmUKKyAgICAg
ICAgLy8gQmxvY2sgI2ZhaWw6CisgICAgICAgIC8vICAgICBNb3ZlICRpbnZlcnQsICVyZXN1bHQK
KyAgICAgICAgLy8gICAgIEp1bXAKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiAjZG9uZQorICAg
ICAgICAvLyBCbG9jayAjZG9uZToKKyAgICAgICAgCisgICAgICAgIEFpcjo6QmFzaWNCbG9jayog
cmVsb29wQmxvY2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHN0b3Jl
QmxvY2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHN1Y2Nlc3NCbG9j
ayA9IG51bGxwdHI7CisgICAgICAgIGlmICghaXNCcmFuY2ggJiYgaXNTdHJvbmcpCisgICAgICAg
ICAgICBzdWNjZXNzQmxvY2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sq
IGZhaWxCbG9jayA9IG51bGxwdHI7CisgICAgICAgIGlmICghaXNCcmFuY2gpCisgICAgICAgICAg
ICBmYWlsQmxvY2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHN0cm9u
Z0ZhaWxCbG9jazsKKyAgICAgICAgaWYgKGlzU3Ryb25nKQorICAgICAgICAgICAgc3Ryb25nRmFp
bEJsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrIGNvbXBhcmlzb25G
YWlsOworICAgICAgICBGcmVxdWVudGVkQmxvY2sgd2Vha0ZhaWw7CisgICAgICAgIGlmIChpc1N0
cm9uZykgeworICAgICAgICAgICAgY29tcGFyaXNvbkZhaWwgPSBzdHJvbmdGYWlsQmxvY2s7Cisg
ICAgICAgICAgICB3ZWFrRmFpbCA9IHJlbG9vcEJsb2NrOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKGlzQnJhbmNoKQorICAgICAgICAgICAgICAgIGNvbXBhcmlzb25GYWlsID0g
ZmFpbHVyZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wYXJpc29uRmFp
bCA9IGZhaWxCbG9jazsKKyAgICAgICAgICAgIHdlYWtGYWlsID0gZmFpbHVyZTsKKyAgICAgICAg
fQorICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGJlZ2luQmxvY2s7CisgICAgICAgIEFpcjo6QmFz
aWNCbG9jayogZG9uZUJsb2NrOworICAgICAgICBzcGxpdEJsb2NrKGJlZ2luQmxvY2ssIGRvbmVC
bG9jayk7CisgICAgICAgIAorICAgICAgICBhcHBlbmQoSnVtcCk7CisgICAgICAgIGJlZ2luQmxv
Y2stPnNldFN1Y2Nlc3NvcnMocmVsb29wQmxvY2spOworICAgICAgICAKKyAgICAgICAgcmVsb29w
QmxvY2stPmFwcGVuZChsb2FkTGlua09wY29kZSh3aWR0aCwgYXRvbWljLT5oYXNGZW5jZSgpKSwg
bV92YWx1ZSwgdmFsdWVSZXN1bHRUbXAsIGFkZHJlc3MpOworICAgICAgICByZWxvb3BCbG9jay0+
YXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoQnJhbmNoLCBjYW5vbmljYWxXaWR0aCh3aWR0aCkpLCBt
X3ZhbHVlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSB2YWx1ZVJlc3Vs
dFRtcCwgZXhwZWN0ZWRWYWx1ZVRtcCk7CisgICAgICAgIHJlbG9vcEJsb2NrLT5zZXRTdWNjZXNz
b3JzKGNvbXBhcmlzb25GYWlsLCBzdG9yZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIHN0b3Jl
QmxvY2stPmFwcGVuZChzdG9yZUNvbmRPcGNvZGUod2lkdGgsIGF0b21pYy0+aGFzRmVuY2UoKSks
IG1fdmFsdWUsIG5ld1ZhbHVlVG1wLCBhZGRyZXNzLCBzdWNjZXNzQm9vbFJlc3VsdFRtcCk7Cisg
ICAgICAgIGlmIChpc0JyYW5jaCkgeworICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKEJy
YW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYm9vbFJlc3Vs
dFRtcCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgICAgIHN0b3JlQmxvY2stPnNldFN1Y2Nl
c3NvcnMoc3VjY2Vzcywgd2Vha0ZhaWwpOworICAgICAgICAgICAgZG9uZUJsb2NrLT5zdWNjZXNz
b3JzKCkuY2xlYXIoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkb25lQmxvY2stPnNp
emUoKSk7CisgICAgICAgICAgICBkb25lQmxvY2stPmFwcGVuZChPb3BzLCBtX3ZhbHVlKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc1N0cm9uZykgeworICAgICAgICAgICAg
ICAgIHN0b3JlQmxvY2stPmFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fz
c2VtYmxlcjo6WmVybyksIHN1Y2Nlc3NCb29sUmVzdWx0VG1wLCBBcmc6OmJpdEltbSgtMSkpOwor
ICAgICAgICAgICAgICAgIHN0b3JlQmxvY2stPnNldFN1Y2Nlc3NvcnMoc3VjY2Vzc0Jsb2NrLCBy
ZWxvb3BCbG9jayk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3VjY2Vzc0Js
b2NrLT5hcHBlbmQoTW92ZSwgbV92YWx1ZSwgQXJnOjppbW0oIWludmVydCksIGJvb2xSZXN1bHRU
bXApOworICAgICAgICAgICAgICAgIHN1Y2Nlc3NCbG9jay0+YXBwZW5kKEp1bXAsIG1fdmFsdWUp
OworICAgICAgICAgICAgICAgIHN1Y2Nlc3NCbG9jay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2sp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWludmVydCkKKyAg
ICAgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKFhvcjMyLCBtX3ZhbHVlLCBBcmc6
OmJpdEltbSgxKSwgYm9vbFJlc3VsdFRtcCwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKEp1bXAsIG1fdmFsdWUpOwor
ICAgICAgICAgICAgICAgIHN0b3JlQmxvY2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmFpbEJsb2NrLT5hcHBlbmQo
TW92ZSwgbV92YWx1ZSwgQXJnOjppbW0oaW52ZXJ0KSwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAg
ICAgICBmYWlsQmxvY2stPmFwcGVuZChKdW1wLCBtX3ZhbHVlKTsKKyAgICAgICAgICAgIGZhaWxC
bG9jay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoaXNTdHJvbmcpIHsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBtX2NvZGUubmV3VG1w
KEdQKTsKKyAgICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9jay0+YXBwZW5kKHN0b3JlQ29uZE9wY29k
ZSh3aWR0aCwgYXRvbWljLT5oYXNGZW5jZSgpKSwgbV92YWx1ZSwgdmFsdWVSZXN1bHRUbXAsIGFk
ZHJlc3MsIHRtcCk7CisgICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2stPmFwcGVuZChCcmFuY2hU
ZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIHRtcCwgQXJnOjpiaXRJ
bW0oLTEpKTsKKyAgICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9jay0+c2V0U3VjY2Vzc29ycyhmYWls
QmxvY2ssIHJlbG9vcEJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGFw
cGVuZFZvaWRBdG9taWMoQWlyOjpPcGNvZGUgYXRvbWljT3Bjb2RlKQorICAgIHsKKyAgICAgICAg
aWYgKG1fdXNlQ291bnRzLm51bVVzZXMobV92YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBBcmcgYWRkcmVzcyA9IGFkZHIobV92YWx1ZSk7CisgICAg
ICAgIAorICAgICAgICBpZiAoaXNWYWxpZEZvcm0oYXRvbWljT3Bjb2RlLCBBcmc6OkltbSwgYWRk
cmVzcy5raW5kKCkpICYmIGltbShtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKKyAgICAgICAgICAgIGFw
cGVuZChhdG9taWNPcGNvZGUsIGltbShtX3ZhbHVlLT5jaGlsZCgwKSksIGFkZHJlc3MpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChp
c1ZhbGlkRm9ybShhdG9taWNPcGNvZGUsIEFyZzo6VG1wLCBhZGRyZXNzLmtpbmQoKSkpIHsKKyAg
ICAgICAgICAgIGFwcGVuZChhdG9taWNPcGNvZGUsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIGFk
ZHJlc3MpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZEdlbmVyYWxB
dG9taWMoQWlyOjpPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQXRvbWljVmFsdWUqIGF0
b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAKKyAgICAgICAgQXJn
IGFkZHJlc3MgPSBhZGRyKG1fdmFsdWUpOworICAgICAgICBUbXAgb2xkVmFsdWUgPSBtX2NvZGUu
bmV3VG1wKEdQKTsKKyAgICAgICAgVG1wIG5ld1ZhbHVlID0gbV9jb2RlLm5ld1RtcChHUCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBXZSBuZWVkIGEgQ0FTIGxvb3Agb3IgYSBMTC9TQyBsb29wLiBV
c2luZyBwcmVwYXJlL2F0dGVtcHQgamFyZ29uLCB3ZSB3YW50OgorICAgICAgICAvLworICAgICAg
ICAvLyBCbG9jayAjcmVsb29wOgorICAgICAgICAvLyAgICAgUHJlcGFyZQorICAgICAgICAvLyAg
ICAgb3Bjb2RlCisgICAgICAgIC8vICAgICBBdHRlbXB0CisgICAgICAgIC8vICAgU3VjY2Vzc29y
czogVGhlbjojZG9uZSwgRWxzZTojcmVsb29wCisgICAgICAgIC8vIEJsb2NrICNkb25lOgorICAg
ICAgICAvLyAgICAgTW92ZSBvbGRWYWx1ZSwgcmVzdWx0CisgICAgICAgIAorICAgICAgICBhcHBl
bmQocmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgb2xkVmFsdWUsIHRtcChhdG9t
aWMpKTsKKyAgICAgICAgCisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogcmVsb29wQmxvY2sgPSBu
ZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGJlZ2luQmxvY2s7CisgICAgICAg
IEFpcjo6QmFzaWNCbG9jayogZG9uZUJsb2NrOworICAgICAgICBzcGxpdEJsb2NrKGJlZ2luQmxv
Y2ssIGRvbmVCbG9jayk7CisgICAgICAgIAorICAgICAgICBhcHBlbmQoSnVtcCk7CisgICAgICAg
IGJlZ2luQmxvY2stPnNldFN1Y2Nlc3NvcnMocmVsb29wQmxvY2spOworICAgICAgICAKKyAgICAg
ICAgQWlyOjpPcGNvZGUgcHJlcGFyZU9wY29kZTsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSB7CisgICAgICAgICAg
ICBjYXNlIFdpZHRoODoKKyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTG9hZDhTaWdu
ZWRFeHRlbmRUbzMyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBX
aWR0aDE2OgorICAgICAgICAgICAgICAgIHByZXBhcmVPcGNvZGUgPSBMb2FkMTZTaWduZWRFeHRl
bmRUbzMyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXaWR0aDMy
OgorICAgICAgICAgICAgICAgIHByZXBhcmVPcGNvZGUgPSBNb3ZlMzI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICAgICAgcHJl
cGFyZU9wY29kZSA9IE1vdmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkp
OworICAgICAgICAgICAgb3Bjb2RlID0gbG9hZExpbmtPcGNvZGUoYXRvbWljLT5vcGVyYXRpb25X
aWR0aCgpLCBhdG9taWMtPmhhc0ZlbmNlKCkpOworICAgICAgICB9CisgICAgICAgIHJlbG9vcEJs
b2NrLT5hcHBlbmQocHJlcGFyZU9wY29kZSwgbV92YWx1ZSwgYWRkcmVzcywgb2xkVmFsdWUpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG9wY29kZSAhPSBOb3ApIHsKKyAgICAgICAgICAgIGlmIChp
bW0oYXRvbWljLT5jaGlsZCgwKSkgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJn
OjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKG9w
Y29kZSwgbV92YWx1ZSwgaW1tKGF0b21pYy0+Y2hpbGQoMCkpLCBvbGRWYWx1ZSwgbmV3VmFsdWUp
OworICAgICAgICAgICAgZWxzZSBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJn
OjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKG9w
Y29kZSwgbV92YWx1ZSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCBvbGRWYWx1ZSwgbmV3VmFsdWUp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVu
ZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCBvbGRWYWx1ZSwgbmV3VmFsdWUp
OworICAgICAgICAgICAgICAgIGlmIChpbW0oYXRvbWljLT5jaGlsZCgwKSkgJiYgaXNWYWxpZEZv
cm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgICAgICByZWxv
b3BCbG9jay0+YXBwZW5kKG9wY29kZSwgbV92YWx1ZSwgaW1tKGF0b21pYy0+Y2hpbGQoMCkpLCBu
ZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZWxv
b3BCbG9jay0+YXBwZW5kKG9wY29kZSwgbV92YWx1ZSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCBu
ZXdWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNYODYo
KSkgeworICAgICAgICAgICAgQWlyOjpPcGNvZGUgY2FzT3Bjb2RlID0gT1BDT0RFX0ZPUl9XSURU
SChCcmFuY2hBdG9taWNTdHJvbmdDQVMsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSk7CisgICAg
ICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5
cGUoKSksIG9sZFZhbHVlLCBtX2VheCk7CisgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5k
KGNhc09wY29kZSwgbV92YWx1ZSwgQXJnOjpzdGF0dXNDb25kKE1hY3JvQXNzZW1ibGVyOjpTdWNj
ZXNzKSwgbV9lYXgsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7CisgICAgICAgICAgICBUbXAgYm9vbFJl
c3VsdCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVu
ZChzdG9yZUNvbmRPcGNvZGUoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpLCBhdG9taWMtPmhhc0Zl
bmNlKCkpLCBuZXdWYWx1ZSwgYWRkcmVzcywgYm9vbFJlc3VsdCk7CisgICAgICAgICAgICByZWxv
b3BCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVy
OjpaZXJvKSwgYm9vbFJlc3VsdCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgfQorICAgICAg
ICByZWxvb3BCbG9jay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2ssIHJlbG9vcEJsb2NrKTsKKyAg
ICB9CisgICAgCiAgICAgdm9pZCBsb3dlcigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFs
dWUtPm9wY29kZSgpKSB7CkBAIC0xOTcxLDMwICsyMzYyLDUwIEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExvYWQ6IHsKLSAgICAgICAgICAgIGFwcGVu
ZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgbW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgbV92
YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBNZW1vcnlW
YWx1ZSogbWVtb3J5ID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgICAgICBB
aXI6Ok9wY29kZSBvcGNvZGUgPSBBaXI6Ok9vcHM7CisgICAgICAgICAgICBpZiAobWVtb3J5LT5o
YXNGZW5jZSgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtZW1vcnktPnR5cGUoKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9
IExvYWRBY3EzMjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gTG9hZEFjcTY0OworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBvcGNvZGUgPSBtb3ZlRm9yVHlwZShtZW1vcnktPnR5cGUoKSk7CisgICAg
ICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRk
cihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExvYWQ4UzogewotICAgICAgICAgICAgYXBw
ZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIG1fdmFsdWUs
IGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUg
b3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNx
OFNpZ25lZEV4dGVuZFRvMzIgOiBMb2FkOFNpZ25lZEV4dGVuZFRvMzI7CisgICAgICAgICAgICBh
cHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVl
KSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIExvYWQ4WjogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3Zh
bHVlLCBMb2FkOCwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAg
ICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+
aGFzRmVuY2UoKSA/IExvYWRBY3E4IDogTG9hZDg7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBp
bmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFs
dWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIExv
YWQxNlM6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9hZDE2
U2lnbmVkRXh0ZW5kVG8zMiwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7
CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1
ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIgOiBMb2FkMTZTaWdu
ZWRFeHRlbmRUbzMyOworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBv
cGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBMb2FkMTZaOiB7Ci0gICAgICAg
ICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQxNiwgbV92YWx1ZSwgYWRkciht
X3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUg
PSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3ExNiA6IExv
YWQxNjsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBt
X3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotCisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBZGQ6IHsKICAgICAg
ICAgICAgIGlmICh0cnlBcHBlbmRMZWEoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0y
MDkyLDcgKzI1MDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzQ2hp
bGwoKSkKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOwogICAgICAg
ICAgICAgaWYgKGlzSW50KG1fdmFsdWUtPnR5cGUoKSkgJiYgaXNYODYoKSkgewotICAgICAgICAg
ICAgICAgIGxvd2VyWDg2RGl2KERpdik7CisgICAgICAgICAgICAgICAgYXBwZW5kWDg2RGl2KERp
dik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
QVNTRVJUKCFpc1g4NigpIHx8IGlzRmxvYXQobV92YWx1ZS0+dHlwZSgpKSk7CkBAIC0yMTAzLDcg
KzI1MTQsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGNhc2UgVURpdjogewogICAgICAgICAgICAg
aWYgKGlzSW50KG1fdmFsdWUtPnR5cGUoKSkgJiYgaXNYODYoKSkgewotICAgICAgICAgICAgICAg
IGxvd2VyWDg2VURpdihVRGl2KTsKKyAgICAgICAgICAgICAgICBhcHBlbmRYODZVRGl2KFVEaXYp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMjExNywxMyAr
MjUyOCwxMyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vZDogewogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaXNYODYoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV92YWx1
ZS0+aXNDaGlsbCgpKTsKLSAgICAgICAgICAgIGxvd2VyWDg2RGl2KE1vZCk7CisgICAgICAgICAg
ICBhcHBlbmRYODZEaXYoTW9kKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2UgVU1vZDogewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7
Ci0gICAgICAgICAgICBsb3dlclg4NlVEaXYoVU1vZCk7CisgICAgICAgICAgICBhcHBlbmRYODZV
RGl2KFVNb2QpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIxNjIsMTAg
KzI1NzMsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBhcHBlbmRVbk9wPE5vdDMyLCBO
b3Q2ND4obV92YWx1ZS0+Y2hpbGQoMCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBwYXR0ZXJuIGlzIHN1
cGVyIHVzZWZ1bCBvbiBib3RoIHg4NiBhbmQgQVJNNjQsIHNpbmNlIHRoZSBpbnZlcnNpb24gb2Yg
dGhlIENBUyByZXN1bHQKKyAgICAgICAgICAgIC8vIGNhbiBiZSBkb25lIHdpdGggemVybyBjb3N0
IG9uIHg4NiAoanVzdCBmbGlwIHRoZSBzZXQgZnJvbSBFIHRvIE5FKSBhbmQgaXQncyBhIHByb2dy
ZXNzaW9uCisgICAgICAgICAgICAvLyBvbiBBUk02NCAoc2luY2UgU1RYIHJldHVybnMgMCBvbiBz
dWNjZXNzLCBzbyBvcmRpbmFyaWx5IHdlIGhhdmUgdG8gZmxpcCBpdCkuCisgICAgICAgICAgICBp
ZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDEpCisgICAgICAgICAgICAgICAgJiYgaXNBdG9t
aWNDQVMobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpKQorICAgICAgICAgICAgICAgICYmIGNh
bkJlSW50ZXJuYWwobV92YWx1ZS0+Y2hpbGQoMCkpKSB7CisgICAgICAgICAgICAgICAgY29tbWl0
SW50ZXJuYWwobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIGFwcGVuZENBUyht
X3ZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBhcHBlbmRCaW5PcDxYb3IzMiwgWG9y
NjQsIFhvckRvdWJsZSwgWG9yRmxvYXQsIENvbW11dGF0aXZlPigKICAgICAgICAgICAgICAgICBt
X3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEZXBlbmQ6IHsKKyAgICAg
ICAgICAgIGFwcGVuZFVuT3A8RGVwZW5kMzIsIERlcGVuZDY0PihtX3ZhbHVlLT5jaGlsZCgwKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICBjYXNlIFNobDogewog
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7CkBAIC0yMjY2
LDcgKzI2OTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgYXBwZW5kU3RvcmUodmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsK
KyAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUsIGFkZHIobV92YWx1ZSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIyODcsNyArMjcxNSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBhcHBlbmRTdG9yZShBaXI6OlN0b3JlOCwgdmFsdWVUb1N0b3Jl
LCBhZGRyKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUsIHZhbHVl
VG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IApAQCAtMjMwOCw3ICsyNzM2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVu
ZFN0b3JlKEFpcjo6U3RvcmUxNiwgdmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAgICAg
ICAgICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjQxNiw3ICsyODQ0LDIyIEBA
IHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEVxdWFsOgotICAgICAgICBjYXNl
IE5vdEVxdWFsOgorICAgICAgICBjYXNlIE5vdEVxdWFsOiB7CisgICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUworICAgICAgICAgICAg
ICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKQor
ICAgICAgICAgICAgICAgICYmIGNhbkJlSW50ZXJuYWwobV92YWx1ZS0+Y2hpbGQoMCkpKSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKCFtX2xvY2tlZC5jb250YWlucyhtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5z
KG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Y29tbWl0SW50ZXJuYWwobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIGFwcGVu
ZENBUyhtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+b3Bjb2RlKCkgPT0gTm90RXF1YWwpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKG1fdmFsdWUp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgTGVzc1RoYW46CiAgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CiAgICAgICAgIGNhc2Ug
TGVzc0VxdWFsOgpAQCAtMjcyNyw2ICszMTcwLDM5IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIEJyYW5jaDogeworICAgICAgICAgICAgaWYgKGNhbkJlSW50ZXJuYWwobV92
YWx1ZS0+Y2hpbGQoMCkpKSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIGJyYW5jaENoaWxkID0g
bV92YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChicmFuY2hDaGlsZC0+
b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAg
ICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkKTsKKyAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kQ0FTKGJyYW5jaENoaWxkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBBdG9t
aWNTdHJvbmdDQVM6CisgICAgICAgICAgICAgICAgICAgIC8vIEEgYnJhbmNoIGlzIGEgY29tcGFy
aXNvbiB0byB6ZXJvLgorICAgICAgICAgICAgICAgICAgICBpZiAoYnJhbmNoQ2hpbGQtPmNoaWxk
KDApLT5pc0ludCgwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwo
YnJhbmNoQ2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ0FTKGJyYW5jaENo
aWxkLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgICAgICAgICBjYXNlIE5v
dEVxdWFsOgorICAgICAgICAgICAgICAgICAgICBpZiAoYnJhbmNoQ2hpbGQtPmNoaWxkKDApLT5v
cGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGNh
bkJlSW50ZXJuYWwoYnJhbmNoQ2hpbGQtPm9wY29kZSgwKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICYmIGJyYW5jaENoaWxkLT5jaGlsZCgwKS0+Y2hpbGQoMCkgPT0gYnJhbmNoQ2hpbGQtPmNo
aWxkKDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChicmFuY2hD
aGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChicmFuY2hDaGls
ZC0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ0FTKGJyYW5jaENo
aWxkLT5jaGlsZCgwKSwgYnJhbmNoQ2hpbGQtPm9wY29kZSgpID09IE5vdEVxdWFsKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKICAgICAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVCcmFuY2gobV92YWx1
ZS0+Y2hpbGQoMCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjc4NCw3
ICszMjYwLDgxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhcHBlbmQoQWlyOjpFbnRyeVN3aXRj
aCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOiB7Cisg
ICAgICAgICAgICBhcHBlbmRDQVMobV92YWx1ZSwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNYY2hnQWRkOiB7
CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFs
dWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9SX1dJRFRI
KEF0b21pY0FkZCwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBBcmcgYWRkcmVzcyA9IGFkZHIoYXRv
bWljKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IE9QQ09ERV9GT1JfV0lEVEgo
QXRvbWljWGNoZ0FkZCwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKTsKKyAgICAgICAgICAgIGlm
IChpc1ZhbGlkT3Bjb2RlKG9wY29kZSwgQXJnOjpUbXAsIGFkZHJlc3MpKSB7CisgICAgICAgICAg
ICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUoKSksIHRtcChhdG9t
aWMtPmNoaWxkKDApKSwgdG1wKGF0b21pYykpOworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNv
ZGUsIHRtcChhdG9taWMpLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9X
SURUSChBZGQsIGNhbm9uaWNhbFdpZHRoKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCisgICAgICAgIGNhc2UgQXRvbWljWGNoZ1N1
YjogeworICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21p
Y1ZhbHVlPigpOworICAgICAgICAgICAgaWYgKGFwcGVuZFZvaWRBdG9taWMoT1BDT0RFX0ZPUl9X
SURUSChBdG9taWNTdWIsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXBwZW5kR2VuZXJhbEF0b21p
YyhPUENPREVfRk9SX1dJRFRIKFN1YiwgY2Fub25pY2FsV2lkdGgoYXRvbWljLT5vcGVyYXRpb25X
aWR0aCgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBBdG9taWNYY2hnQW5kOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSog
YXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBw
ZW5kVm9pZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY0FuZCwgYXRvbWljLT5vcGVyYXRp
b25XaWR0aCgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQW5kLCBjYW5vbmlj
YWxXaWR0aChhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjogewor
ICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVl
PigpOworICAgICAgICAgICAgaWYgKGFwcGVuZFZvaWRBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChB
dG9taWNPciwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09E
RV9GT1JfV0lEVEgoT3IsIGNhbm9uaWNhbFdpZHRoKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXRvbWljWGNoZ1hvcjogeworICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9
IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgaWYgKGFwcGVuZFZvaWRB
dG9taWMoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNYb3IsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgo
KSkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
YXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX1dJRFRIKFhvciwgY2Fub25pY2FsV2lkdGgo
YXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNYY2hnOiB7CisgICAgICAgICAg
ICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihhdG9taWMpOworICAgICAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gT1BDT0RFX0ZPUl9XSURUSChBdG9taWNYY2hnLCBh
dG9taWMtPm9wZXJhdGlvbldpZHRoKCkpOworICAgICAgICAgICAgaWYgKGlzVmFsaWRPcGNvZGUo
b3Bjb2RlLCBBcmc6OlRtcCwgYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmVs
YXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCB0
bXAoYXRvbWljKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGF0b21pYyks
IGFkZHJlc3MpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgYXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX1dJRFRI
KFhvciwgY2Fub25pY2FsV2lkdGgoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNzkyLDY0ICszMzQyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgZGF0YUxvZygiRkFUQUw6IGNvdWxkIG5vdCBsb3dlciAiLCBkZWVwRHVt
cChtX3Byb2NlZHVyZSwgbV92YWx1ZSksICJcbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIHZvaWQgbG93ZXJYODZEaXYoQjM6Ok9wY29kZSBv
cCkKLSAgICB7Ci0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKLSAgICAgICAgVG1wIGVheCA9
IFRtcChYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgICAgIFRtcCBlZHggPSBUbXAoWDg2UmVnaXN0
ZXJzOjplZHgpOwotCi0gICAgICAgIEFpcjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJsZVdvcmQ7Ci0g
ICAgICAgIEFpcjo6T3Bjb2RlIGRpdjsKLSAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT50eXBlKCkp
IHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQg
PSBYODZDb252ZXJ0VG9Eb3VibGVXb3JkMzI7Ci0gICAgICAgICAgICBkaXYgPSBYODZEaXYzMjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAgY29u
dmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb1F1YWRXb3JkNjQ7Ci0gICAgICAgICAgICBk
aXYgPSBYODZEaXY2NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChvcCA9PSBEaXYgfHwgb3AgPT0gTW9kKTsK
LSAgICAgICAgWDg2UmVnaXN0ZXJzOjpSZWdpc3RlcklEIHJlc3VsdCA9IG9wID09IERpdiA/IFg4
NlJlZ2lzdGVyczo6ZWF4IDogWDg2UmVnaXN0ZXJzOjplZHg7Ci0KLSAgICAgICAgYXBwZW5kKE1v
dmUsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIGVheCk7Ci0gICAgICAgIGFwcGVuZChjb252ZXJ0
VG9Eb3VibGVXb3JkLCBlYXgsIGVkeCk7Ci0gICAgICAgIGFwcGVuZChkaXYsIGVheCwgZWR4LCB0
bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChyZXN1bHQp
LCB0bXAobV92YWx1ZSkpOwotCi0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAg
ICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHZv
aWQgbG93ZXJYODZVRGl2KEIzOjpPcGNvZGUgb3ApCi0gICAgewotI2lmIENQVShYODYpIHx8IENQ
VShYODZfNjQpCi0gICAgICAgIFRtcCBlYXggPSBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpOwotICAg
ICAgICBUbXAgZWR4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWR4KTsKLQotICAgICAgICBBaXI6Ok9w
Y29kZSBkaXYgPSBtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyBYODZVRGl2MzIgOiBYODZVRGl2
NjQ7Ci0KLSAgICAgICAgQVNTRVJUKG9wID09IFVEaXYgfHwgb3AgPT0gVU1vZCk7Ci0gICAgICAg
IFg4NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCByZXN1bHQgPSBvcCA9PSBVRGl2ID8gWDg2UmVnaXN0
ZXJzOjplYXggOiBYODZSZWdpc3RlcnM6OmVkeDsKLQotICAgICAgICBhcHBlbmQoTW92ZSwgdG1w
KG1fdmFsdWUtPmNoaWxkKDApKSwgZWF4KTsKLSAgICAgICAgYXBwZW5kKFhvcjY0LCBlZHgsIGVk
eCk7Ci0gICAgICAgIGFwcGVuZChkaXYsIGVheCwgZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkp
KTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChyZXN1bHQpLCB0bXAobV92YWx1ZSkpOwotI2Vs
c2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BM
QVRGT1JNKCk7Ci0jZW5kaWYKLSAgICB9Ci0KKyAgICAKICAgICBJbmRleFNldDxWYWx1ZT4gbV9s
b2NrZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4K
ICAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBtX3ZhbHVlVG9UbXA7IC8vIFRoZXNlIGFyZSB2YWx1
ZXMgdGhhdCBtdXN0IGhhdmUgYSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBhIFZhbHVlKiB3aXRo
IGEgbm9uLW51bGwgVG1wIGlzICJwaW5uZWQiLgogICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IG1f
cGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBUbXAuCkBAIC0yODY0LDcgKzMzNTcs
NyBAQCBwcml2YXRlOgogCiAgICAgVmVjdG9yPFZlY3RvcjxJbnN0LCA0Pj4gbV9pbnN0czsKICAg
ICBWZWN0b3I8SW5zdD4gbV9wcm9sb2d1ZTsKLQorICAgIAogICAgIEIzOjpCYXNpY0Jsb2NrKiBt
X2Jsb2NrOwogICAgIGJvb2wgbV9pc1JhcmU7CiAgICAgdW5zaWduZWQgbV9pbmRleDsKQEAgLTI4
NzUsNiArMzM2OCwxMiBAQCBwcml2YXRlOgogCiAgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsK
ICAgICBDb2RlJiBtX2NvZGU7CisKKyAgICBBaXI6OkJsb2NrSW5zZXJ0aW9uU2V0IG1fYmxvY2tJ
bnNlcnRpb25TZXQ7CisKKyAgICBUbXAgbV9lYXg7CisgICAgVG1wIG1fZWN4OworICAgIFRtcCBt
X2VkeDsKIH07CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCwzMCArMzQsNDggQEAgTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgpCiB7CiB9CiAKK1R5
cGUgTWVtb3J5VmFsdWU6OmFjY2Vzc1R5cGUoKSBjb25zdAoreworICAgIGlmIChpc0xvYWQob3Bj
b2RlKCkpKQorICAgICAgICByZXR1cm4gdHlwZSgpOworICAgIC8vIFRoaXMgaGFwcGVucyB0byB3
b3JrIGZvciBhdG9taWNzLCB0b28uIFRoYXQncyB3aHkgQXRvbWljVmFsdWUgZG9lcyBub3QgbmVl
ZCB0byBvdmVycmlkZSB0aGlzLgorICAgIHJldHVybiBjaGlsZCgwKS0+dHlwZSgpOworfQorCitC
YW5rIE1lbW9yeVZhbHVlOjphY2Nlc3NCYW5rKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYmFua0Zv
clR5cGUoYWNjZXNzVHlwZSgpKTsKK30KKwogc2l6ZV90IE1lbW9yeVZhbHVlOjphY2Nlc3NCeXRl
U2l6ZSgpIGNvbnN0CiB7CisgICAgcmV0dXJuIGJ5dGVzKGFjY2Vzc1dpZHRoKCkpOworfQorCitX
aWR0aCBNZW1vcnlWYWx1ZTo6bG9hZFN0b3JlV2lkdGgoKSBjb25zdAorewogICAgIHN3aXRjaCAo
b3Bjb2RlKCkpIHsKICAgICBjYXNlIExvYWQ4WjoKICAgICBjYXNlIExvYWQ4UzoKICAgICBjYXNl
IFN0b3JlODoKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiBXaWR0aDg7CiAgICAg
Y2FzZSBMb2FkMTZaOgogICAgIGNhc2UgTG9hZDE2UzoKICAgICBjYXNlIFN0b3JlMTY6Ci0gICAg
ICAgIHJldHVybiAyOworICAgICAgICByZXR1cm4gV2lkdGgxNjsKICAgICBjYXNlIExvYWQ6Ci0g
ICAgICAgIHJldHVybiBzaXplb2ZUeXBlKHR5cGUoKSk7CisgICAgICAgIHJldHVybiB3aWR0aEZv
clR5cGUodHlwZSgpKTsKICAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXR1cm4gc2l6ZW9mVHlw
ZShjaGlsZCgwKS0+dHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlwZShjaGlsZCgw
KS0+dHlwZSgpKTsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIFdpZHRoODsKICAgICB9
CiB9CiAKIFdpZHRoIE1lbW9yeVZhbHVlOjphY2Nlc3NXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHdpZHRoRm9yQnl0ZXMoYWNjZXNzQnl0ZVNpemUoKSk7CisgICAgcmV0dXJuIGxvYWRTdG9y
ZVdpZHRoKCk7CiB9CiAKIHZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYg
Y29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC02Nyw2ICs4NSw4IEBAIHZvaWQgTWVt
b3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYKICAgICBpZiAoKGlzTG9hZCgpICYmIGVm
ZmVjdHMoKS5yZWFkcyAhPSByYW5nZSgpKQogICAgICAgICB8fCAoaXNTdG9yZSgpICYmIGVmZmVj
dHMoKS53cml0ZXMgIT0gcmFuZ2UoKSkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgInJhbmdl
ID0gIiwgcmFuZ2UoKSk7CisgICAgaWYgKHBoYW50b21SYW5nZSgpKQorICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJwaGFudG9tUmFuZ2UgPSAiLCBwaGFudG9tUmFuZ2UoKSk7CiB9CiAKIFZhbHVl
KiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKQEAgLTc0LDYgKzk0LDU4IEBAIFZhbHVl
KiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKICAgICByZXR1cm4gbmV3IE1lbW9yeVZh
bHVlKCp0aGlzKTsKIH0KIAorLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2Fk
OFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAor
Ly8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KK01lbW9yeVZhbHVlOjpNZW1vcnlWYWx1
ZShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGlu
dDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUs
IG9yaWdpbiwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkgeworICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICAg
ICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZDhaOgor
ICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBjYXNl
IExvYWQxNlM6CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAg
ICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
bG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCitNZW1vcnlWYWx1ZTo6TWVt
b3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIDogTWVtb3J5VmFsdWUoa2luZCwgSW50MzIsIG9yaWdpbiwgcG9p
bnRlciwgb2Zmc2V0KQoreworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIHN3
aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2Fz
ZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9ybSBm
b3Igc3RvcmVzLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQor
ICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9p
bnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAgICBBU1NFUlQoaXNTdG9yZShraW5k
Lm9wY29kZSgpKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiAjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFs
dWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVt
b3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNDggKzI3LDE3IEBACiAKICNpZiBFTkFC
TEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNCYW5rLmgiCiAjaW5jbHVkZSAiQjNIZWFwUmFuZ2Uu
aCIKICNpbmNsdWRlICJCM1ZhbHVlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
ewogCi0vLyBGSVhNRTogV2Ugd2FudCB0byBhbGxvdyBmZW5jZWQgbWVtb3J5IGFjY2Vzc2VzIG9u
IEFSTS4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzNDkK
LQogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgewog
cHVibGljOgogICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQogICAgIHsKLSAgICAg
ICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9hZDhaOgotICAgICAg
ICBjYXNlIExvYWQ4UzoKLSAgICAgICAgY2FzZSBMb2FkMTZaOgotICAgICAgICBjYXNlIExvYWQx
NlM6Ci0gICAgICAgIGNhc2UgTG9hZDoKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNh
c2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaXNTdG9yZShLaW5kIGtpbmQpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAg
ICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaXNMb2FkKEtpbmQga2luZCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhY2NlcHRzKGtpbmQpICYmICFpc1N0b3JlKGtpbmQpOworICAgICAg
ICByZXR1cm4gaXNNZW1vcnkoa2luZC5vcGNvZGUoKSk7CiAgICAgfQogCiAgICAgfk1lbW9yeVZh
bHVlKCk7CkBAIC03OCw3NiArNDcsNTYgQEAgcHVibGljOgogCiAgICAgY29uc3QgSGVhcFJhbmdl
JiByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KICAgICB2b2lkIHNldFJhbmdlKGNv
bnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9yYW5nZSA9IHJhbmdlOyB9CisgICAgCisgICAgLy8g
VGhpcyBpcyBhbiBhbGlhcyBmb3IgcmFuZ2UuCisgICAgY29uc3QgSGVhcFJhbmdlJiBhY2Nlc3NS
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIHJhbmdlKCk7IH0KKyAgICB2b2lkIHNldEFjY2Vzc1Jhbmdl
KGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgc2V0UmFuZ2UocmFuZ2UpOyB9CisgICAgCisgICAg
Y29uc3QgSGVhcFJhbmdlJiBmZW5jZVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9mZW5jZVJhbmdl
OyB9CisgICAgdm9pZCBzZXRGZW5jZVJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9m
ZW5jZVJhbmdlID0gcmFuZ2U7IH0KKworICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJu
IGlzU3RvcmUob3Bjb2RlKCkpOyB9CisgICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7IHJldHVybiBp
c0xvYWQob3Bjb2RlKCkpOyB9CiAKLSAgICBib29sIGlzU3RvcmUoKSBjb25zdCB7IHJldHVybiB0
eXBlKCkgPT0gVm9pZDsgfQotICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyByZXR1cm4gdHlwZSgp
ICE9IFZvaWQ7IH0KKyAgICBib29sIGhhc0ZlbmNlKCkgY29uc3QgeyByZXR1cm4gISFmZW5jZVJh
bmdlKCk7IH0KIAorICAgIFR5cGUgYWNjZXNzVHlwZSgpIGNvbnN0OworICAgIEJhbmsgYWNjZXNz
QmFuaygpIGNvbnN0OwogICAgIHNpemVfdCBhY2Nlc3NCeXRlU2l6ZSgpIGNvbnN0OwotICAgIFdp
ZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CisgICAgCisgICAgLy8gU2xpZ2h0bHkgZmFzdGVyIHZl
cnNpb24gb2YgYWNjZXNzV2lkdGgsIGlmIHlvdSBrbm93IHRoYXQgeW91J3JlIHdvcmtpbmcgd2l0
aCBhIGxvYWQgb3Igc3RvcmUuCisgICAgV2lkdGggbG9hZFN0b3JlV2lkdGgoKSBjb25zdDsKKyAg
ICAKKyAgICB2aXJ0dWFsIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoK
LSAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJy
aWRlOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7Ci0KLSAgICAvLyBV
c2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2Yg
dGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0Ci0gICAgLy8gZGVzY3JpYmVzIHRoZSBy
ZXR1cm5lZCB0eXBlKS4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAg
OiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIE1lbW9yeVZhbHVlKENo
ZWNrZWRPcGNvZGVUYWcsIEtpbmQga2luZCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBpbnQz
Ml90IG9mZnNldCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVj
a2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAgICAgICAgLCBt
X29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6OnRvcCgpKQogICAg
IHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAo
a2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBMb2FkOgotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMb2FkOFo6Ci0gICAgICAgICAgICBjYXNlIExvYWQ4
UzoKLSAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKLSAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoK
LSAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgICAgIGNhc2UgU3RvcmUx
NjoKLSAgICAgICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUg
PT0gVm9pZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9CiAgICAgfQorICAgIAorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBu
b3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4
IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgorICAgIE1lbW9yeVZh
bHVlKEtpbmQsIFR5cGUsIE9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0g
MCk7CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5
cGUgaXMgaW1wbGllZC4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDogTWVtb3J5VmFs
dWUoa2luZCwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KQotICAgIHsKLSAgICB9Cisg
ICAgTWVtb3J5VmFsdWUoS2luZCwgT3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZz
ZXQgPSAwKTsKIAogICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KLSAgICBNZW1vcnlW
YWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50
ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBr
aW5kLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQotICAgICAgICAsIG1fb2Zmc2V0KG9m
ZnNldCkKLSAgICAgICAgLCBtX3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCi0gICAgewotICAgICAg
ICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgc3dpdGNoIChraW5kLm9wY29k
ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgICAgIGNhc2UgU3RvcmUx
NjoKLSAgICAgICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
CisgICAgTWVtb3J5VmFsdWUoS2luZCwgT3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2lu
dGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAgIAogICAgIGludDMyX3QgbV9vZmZzZXQgeyAw
IH07Ci0gICAgSGVhcFJhbmdlIG1fcmFuZ2U7CisgICAgSGVhcFJhbmdlIG1fcmFuZ2UgeyBIZWFw
UmFuZ2U6OnRvcCgpIH07CisgICAgSGVhcFJhbmdlIG1fZmVuY2VSYW5nZSB7IEhlYXBSYW5nZSgp
IH07CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBF
TkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSAiQjNXaWR0aC5o
IgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KIApAQCAtODIsNyArODMsNiBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIE1vZCwg
Ly8gQWxsIGJldHMgYXJlIG9mZiBhcyB0byB3aGF0IHdpbGwgaGFwcGVuIHdoZW4geW91IGV4ZWN1
dGUgdGhpcyBmb3IgLTJeMzElLTEgYW5kIHglMC4KICAgICBVTW9kLAogCi0KICAgICAvLyBQb2x5
bW9ycGhpYyBuZWdhdGlvbi4gTm90ZSB0aGF0IHdlIG9ubHkgbmVlZCB0aGlzIGZvciBmbG9hdGlu
ZyBwb2ludCwgc2luY2UgaW50ZWdlciBuZWdhdGlvbgogICAgIC8vIGlzIGV4YWN0bHkgbGlrZSBT
dWIoMCwgeCkuIEJ1dCB0aGF0J3Mgbm90IHRydWUgZm9yIGZsb2F0aW5nIHBvaW50LiBTdWIoMCwg
MCkgaXMgMCwgd2hpbGUKICAgICAvLyBOZWcoMCkgaXMgLTAuIEFsc28sIHdlIGNhbm9uaWNhbGl6
ZSBTdWIoMCwgeCkgaW50byBOZWcoeCkgaW4gY2FzZSBvZiBpbnRlZ2Vycy4KQEAgLTE2Miw2ICsx
NjIsMTA3IEBAIGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgU3RvcmUxNiwKICAgICAvLyBU
aGlzIGlzIGEgcG9seW1vcnBoaWMgc3RvcmUgZm9yIEludDMyLCBJbnQ2NCwgRmxvYXQsIGFuZCBE
b3VibGUuCiAgICAgU3RvcmUsCisgICAgCisgICAgLy8gQXRvbWljIGNvbXBhcmUgYW5kIHN3YXAg
dGhhdCByZXR1cm5zIGEgYm9vbGVhbi4gTWF5IGNob29zZSB0byBkbyBub3RoaW5nIGFuZCByZXR1
cm4gZmFsc2UuIFlvdSBjYW4KKyAgICAvLyB1c3VhbGx5IGFzc3VtZSB0aGF0IHRoaXMgaXMgZmFz
dGVyIGFuZCByZXN1bHRzIGluIGxlc3MgY29kZSB0aGFuIEF0b21pY1N0cm9uZ0NBUywgdGhvdWdo
IHRoYXQncworICAgIC8vIG5vdCBuZWNlc3NhcmlseSB0cnVlIG9uIEludGVsLCBpZiBpbnN0cnVj
dGlvbiBzZWxlY3Rpb24gZG9lcyBpdHMgam9iLiBJbWFnaW5lIHRoYXQgdGhpcyBvcGNvZGUgaXMK
KyAgICAvLyBhcyBpZiB5b3UgZGlkIHRoaXMgYXRvbWljYWxseToKKyAgICAvLworICAgIC8vIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgLy8gYm9vbCBBdG9taWNXZWFrQ0FTKFQgZXhwZWN0ZWRW
YWx1ZSwgVCBuZXdWYWx1ZSwgVCogcHRyKQorICAgIC8vIHsKKyAgICAvLyAgICAgaWYgKCFyYW5k
KCkpCisgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFJlYWwgd29ybGQgZXhhbXBsZSBv
ZiB0aGlzOiBjb250ZXh0IHN3aXRjaCBvbiBBUk0gd2hpbGUgZG9pbmcgQ0FTLgorICAgIC8vICAg
ICBpZiAoKnB0ciAhPSBleHBlY3RlZFZhbHVlKQorICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIC8vICAgICAqcHRyID0gbmV3VmFsdWU7CisgICAgLy8gICAgIHJldHVybiB0cnVlOwor
ICAgIC8vIH0KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBhbGwgYXRvbWljcyBwdXQgdGhlIHBv
aW50ZXIgbGFzdCB0byBiZSBjb25zaXN0ZW50IHdpdGggaG93IGxvYWRzIGFuZCBzdG9yZXMgd29y
ay4gVGhpcworICAgIC8vIGlzIGEgZ29vZnkgdHJhZGl0aW9uLCBidXQgaXQncyBoYXJtbGVzcywg
YW5kIGJldHRlciB0aGFuIGJlaW5nIGluY29uc2lzdGVudC4KKyAgICAvLworICAgIC8vIE5vdGUg
dGhhdCB3ZWFrIENBUyBoYXMgbm8gZmVuY2luZyBndWFyYW50ZWVzIHdoZW4gaXQgZmFpbHMuIFRo
aXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nCisgICAgLy8gdHJhbnNmb3JtYXRpb24gaXMgYWx3
YXlzIHZhbGlkOgorICAgIC8vCisgICAgLy8gQmVmb3JlOgorICAgIC8vCisgICAgLy8gICAgICAg
ICBCcmFuY2goQXRvbWljV2Vha0NBUyhleHBlY3RlZCwgbmV3LCBwdHIpKQorICAgIC8vICAgICAg
IFN1Y2Nlc3NvcnM6IFRoZW46I3N1Y2Nlc3MsIEVsc2U6I2ZhaWwKKyAgICAvLworICAgIC8vIEFm
dGVyOgorICAgIC8vCisgICAgLy8gICAgICAgICBCcmFuY2goRXF1YWwoTG9hZChwdHIpLCBleHBl
Y3RlZCkpCisgICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhlbjojYXR0ZW1wdCwgRWxzZTojZmFp
bAorICAgIC8vICAgICBCQiNhdHRlbXB0OgorICAgIC8vICAgICAgICAgQnJhbmNoKEF0b21pY1dl
YWtDQVMoZXhwZWN0ZWQsIG5ldywgcHRyKSkKKyAgICAvLyAgICAgICBTdWNjZXNzb3JzOiBUaGVu
OiNzdWNjZXNzLCBFbHNlOiNmYWlsCisgICAgLy8KKyAgICAvLyBCb3RoIGtpbmRzIG9mIENBUyBm
b3Igbm9uLWNhbm9uaWNhbCB3aWR0aHMgKFdpZHRoOCBhbmQgV2lkdGgxNikgaWdub3JlIHRoZSBp
cnJlbGV2YW50IGJpdHMgb2YgdGhlCisgICAgLy8gaW5wdXQuCisgICAgQXRvbWljV2Vha0NBUywK
KyAgICAKKyAgICAvLyBBdG9taWMgY29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgdGhlIG9s
ZCB2YWx1ZS4gRG9lcyBub3QgaGF2ZSB0aGUgbm9uZGV0ZXJtaW5pc20gb2YgV2Vha0NBUy4KKyAg
ICAvLyBUaGlzIGlzIGEgYml0IG1vcmUgY29kZSBhbmQgYSBiaXQgc2xvd2VyIGluIHNvbWUgY2Fz
ZXMsIHRob3VnaCBub3QgYnkgYSBsb3QuIEltYWdpbmUgdGhhdCB0aGlzCisgICAgLy8gb3Bjb2Rl
IGlzIGFzIGlmIHlvdSBkaWQgdGhpcyBhdG9taWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICAvLyBUIEF0b21pY1N0cm9uZ0NBUyhUIGV4cGVjdGVkVmFsdWUs
IFQgbmV3VmFsdWUsIFQqIHB0cikKKyAgICAvLyB7CisgICAgLy8gICAgIFQgb2xkVmFsdWUgPSAq
cHRyOworICAgIC8vICAgICBpZiAob2xkVmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZSkKKyAgICAvLyAg
ICAgICAgICpwdHIgPSBuZXdWYWx1ZTsKKyAgICAvLyAgICAgcmV0dXJuIG9sZFZhbHVlCisgICAg
Ly8gfQorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IEF0b21pY1dlYWtDQVMgYW5kIEF0b21pY1N0
cm9uZ0NBUyBzb3J0IG9mIGhhdmUgdGhpcyBraW5kIG9mIGVxdWl2YWxlbmNlOgorICAgIC8vCisg
ICAgLy8gQXRvbWljV2Vha0NBUyhAZXhwLCBAbmV3LCBAcHRyKSA9PSBFcXVhbChBdG9taWNTdHJv
bmdDQVMoQGV4cCwgQG5ldywgQHB0ciksIEBleHApCisgICAgLy8KKyAgICAvLyBBc3N1bWluZyB0
aGF0IHRoZSBXZWFrQ0FTIGRvZXMgbm90IHNwdXJpb3VzbHkgZmFpbCwgb2YgY291cnNlLgorICAg
IEF0b21pY1N0cm9uZ0NBUywKKyAgICAKKyAgICAvLyBBdG9taWNhbGx5IF9fXyBhIG1lbW9yeSBs
b2NhdGlvbiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuIFN5bnRheDoKKyAgICAvLworICAgIC8v
IEBvbGRWYWx1ZSA9IEF0b21pY1hjaGdfX18oQG9wZXJhbmQsIEBwdHIpCisgICAgLy8KKyAgICAv
LyBGb3Igbm9uLWNhbm9uaWNhbCB3aWR0aHMgKFdpZHRoOCBhbmQgV2lkdGgxNiksIHRoZXNlIHJl
dHVybiBzaWduLWV4dGVuZGVkIHJlc3VsdHMgYW5kIGlnbm9yZSB0aGUKKyAgICAvLyBpcnJlbGV2
YW50IGJpdHMgb2YgdGhlaXIgaW5wdXRzLgorICAgIEF0b21pY1hjaGdBZGQsCisgICAgQXRvbWlj
WGNoZ0FuZCwKKyAgICBBdG9taWNYY2hnT3IsCisgICAgQXRvbWljWGNoZ1N1YiwKKyAgICBBdG9t
aWNYY2hnWG9yLAorICAgIAorICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgaGF2ZSBBdG9t
aWNYY2hnTmVnIGFuZCBBdG9taWNYY2hnTm90LgorICAgIAorICAgIC8vIEF0b21pY2FsbHkgZXhj
aGFuZ2UgYSB2YWx1ZSB3aXRoIGEgbWVtb3J5IGxvY2F0aW9uLiBTeW50YXg6CisgICAgLy8KKyAg
ICAvLyBAb2xkVmFsdWUgPSBBdG9taWNYY2hnKEBuZXdWYWx1ZSwgQHB0cikKKyAgICBBdG9taWNY
Y2hnLAorICAgIAorICAgIC8vIEludHJvZHVjZSBhbiBpbnZpc2libGUgZGVwZW5kZW5jeSBmb3Ig
YmxvY2tpbmcgbW90aW9uIG9mIGxvYWRzIHdpdGggcmVzcGVjdCB0byBlYWNoIG90aGVyLiBTeW50
YXg6CisgICAgLy8KKyAgICAvLyBAcmVzdWx0ID0gRGVwZW5kKEBwaGFudG9tKQorICAgIC8vCisg
ICAgLy8gVGhpcyBpcyBldmVudHVhbGx5IGNvZGVnZW5lcmF0ZWQgdG8gaGF2ZSBsb2NhbCBzZW1h
bnRpY3MgYXMgaWYgd2UgZGlkOgorICAgIC8vCisgICAgLy8gQHJlc3VsdCA9ICQwCisgICAgLy8K
KyAgICAvLyBCdXQgaXQgZW5zdXJlcyB0aGF0IHRoZSB1c2VycyBvZiBAcmVzdWx0IGNhbm5vdCBl
eGVjdXRlIHVudGlsIEBwaGFudG9tIGlzIGNvbXB1dGVkLgorICAgIC8vCisgICAgLy8gVGhlIGNv
bXBpbGVyIGlzIG5vdCBhbGxvd2VkIHRvIHJlYXNvbiBhYm91dCB0aGUgZmFjdCB0aGF0IERlcGVu
ZCBjb2RlZ2VuZXJhdGVzIHRoaXMgd2F5LiBBbnkga2luZAorICAgIC8vIG9mIHRyYW5zZm9ybWF0
aW9uIG9yIGFuYWx5c2lzIHRoYXQgcmVsaWVzIG9uIHRoZSBpbnNpZ2h0IHRoYXQgRGVwZW5kIGlz
IHJlYWxseSB6ZXJvIGlzIHVuc291bmQsCisgICAgLy8gYmVjYXVzZSBpdCB1bmxvY2tzIHJlb3Jk
ZXJpbmcgb2YgdXNlcnMgb2YgQHJlc3VsdCBhbmQgQHBoYW50b20uCisgICAgLy8KKyAgICAvLyBP
biBYODYsIHRoaXMgaXMgbG93ZXJlZCB0byBhIGxvYWQtbG9hZCBmZW5jZSBhbmQgQHJlc3VsdCB1
c2VzIEBwaGFudG9tIGRpcmVjdGx5LgorICAgIC8vCisgICAgLy8gT24gQVJNLCB0aGlzIGlzIGxv
d2VyZWQgYXMgaWYgbGlrZToKKyAgICAvLworICAgIC8vIEByZXN1bHQgPSBCaXRYb3IoQHBoYW50
b20sIEBwaGFudG9tKQorICAgIC8vCisgICAgLy8gRXhjZXB0IHRoYXQgdGhlIGNvbXBpbGVyIG5l
dmVyIGdldHMgYW4gb3Bwb3J0dW5pdHkgdG8gc2ltcGxpZnkgb3V0IHRoZSBCaXRYb3IuCisgICAg
RGVwZW5kLAogCiAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIGFjdHVhbCBhZGRy
ZXNzIG9mIGEgV2FzbSBtZW1vcnkgb3BlcmF0aW9uLiBJdCB0YWtlcyBhbiBJbnRQdHIKICAgICAv
LyBhbmQgYSBwaW5uZWQgcmVnaXN0ZXIgdGhlbiBjb21wdXRlcyB0aGUgYXBwcm9wcmlhdGUgSW50
UHRyIGFkZHJlc3MuIEZvciB0aGUgdXNlLWNhc2Ugb2YKQEAgLTMwMSw2ICs0MDIsMTEwIEBAIGlu
bGluZSBib29sIGlzRGVmaW5pdGVseVRlcm1pbmFsKE9wY29kZSAKICAgICB9CiB9CiAKK2lubGlu
ZSBib29sIGlzTG9hZChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgY2FzZSBMb2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgorICAg
IGNhc2UgTG9hZDE2UzoKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29s
IGlzU3RvcmUoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNh
c2UgU3RvcmU4OgorICAgIGNhc2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCitpbmxpbmUgYm9vbCBpc0xvYWRTdG9yZShPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRj
aCAob3Bjb2RlKSB7CisgICAgY2FzZSBMb2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2Fz
ZSBMb2FkMTZaOgorICAgIGNhc2UgTG9hZDE2UzoKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBT
dG9yZTg6CisgICAgY2FzZSBTdG9yZTE2OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K2lubGluZSBib29sIGlzQXRvbWljKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6
CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBj
YXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9t
aWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJv
b2wgaXNBdG9taWNDQVMoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgewor
ICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KK30KKworaW5saW5lIGJvb2wgaXNBdG9taWNYY2hnKE9wY29kZSBvcGNvZGUpCit7CisgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBBdG9t
aWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNoZ1N1
YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hnOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitpbmxpbmUgYm9vbCBpc01lbW9yeUFjY2VzcyhPcGNvZGUgb3Bjb2RlKQoreworICAg
IHJldHVybiBpc0F0b21pYyhvcGNvZGUpIHx8IGlzTG9hZFN0b3JlKG9wY29kZSk7Cit9CisKK2lu
bGluZSBPcGNvZGUgc2lnbkV4dGVuZE9wY29kZShXaWR0aCB3aWR0aCkKK3sKKyAgICBzd2l0Y2gg
KHdpZHRoKSB7CisgICAgY2FzZSBXaWR0aDg6CisgICAgICAgIHJldHVybiBTRXh0ODsKKyAgICBj
YXNlIFdpZHRoMTY6CisgICAgICAgIHJldHVybiBTRXh0MTY7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9vcHM7Cisg
ICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogbmFtZXNwYWNlIFdURiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwMiw2ICsyMDIsOCBAQCB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjCiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygiICAgICIsIGRlZXBEdW1w
KCp0aGlzLCB2YWx1ZSksICJcbiIpOwogICAgIH0KKyAgICBpZiAoaGFzUXVpcmtzKCkpCisgICAg
ICAgIG91dC5wcmludCgiSGFzIFF1aXJrczogVHJ1ZVxuIik7CiAgICAgaWYgKHZhcmlhYmxlcygp
LnNpemUoKSkgewogICAgICAgICBvdXQucHJpbnQoIlZhcmlhYmxlczpcbiIpOwogICAgICAgICBm
b3IgKFZhcmlhYmxlKiB2YXJpYWJsZSA6IHZhcmlhYmxlcygpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3
LDcgQEAgcHVibGljOgogICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChPcmlnaW4sIFR5cGUsIGlu
dDY0X3QgdmFsdWUpOwogICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChWYWx1ZSosIGludDY0X3Qg
dmFsdWUpOwogCisgICAgLy8gWW91J3JlIGd1YXJhbnRlZWQgdGhhdCBib3R0b20gaXMgemVyby4K
ICAgICBWYWx1ZSogYWRkQm90dG9tKE9yaWdpbiwgVHlwZSk7CiAgICAgVmFsdWUqIGFkZEJvdHRv
bShWYWx1ZSopOwogCkBAIC0xOTUsNiArMTk2LDEyIEBAIHB1YmxpYzoKICAgICAvLyBhbGl2ZS4g
R3JlYXQgZm9yIGNvbXBpbGVyLWdlbmVyYXRlZCBkYXRhIHNlY3Rpb25zLCBsaWtlIHN3aXRjaCBq
dW1wIHRhYmxlcyBhbmQgY29uc3RhbnQgcG9vbHMuCiAgICAgLy8gVGhpcyByZXR1cm5zIG1lbW9y
eSB0aGF0IGhhcyBiZWVuIHplcm8taW5pdGlhbGl6ZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCogYWRkRGF0YVNlY3Rpb24oc2l6ZV90KTsKKyAgICAKKyAgICAvLyBTb21lIG9wZXJhdGlv
bnMgYXJlIHNwZWNpZmllZCBpbiBCMyBJUiB0byBiZWhhdmUgb25lIHdheSBidXQgb24gdGhpcyBn
aXZlbiBDUFUgdGhleSBiZWhhdmUgYQorICAgIC8vIGRpZmZlcmVudCB3YXkuIFdoZW4gdHJ1ZSwg
dGhvc2UgQjMgSVIgb3BzIHN3aXRjaCB0byBiZWhhdmluZyB0aGUgQ1BVIHdheSwgYW5kIHRoZSBv
cHRpbWl6ZXIgbWF5CisgICAgLy8gc3RhcnQgdGFraW5nIGFkdmFudGFnZSBvZiBpdC4KKyAgICBi
b29sIGhhc1F1aXJrcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUXVpcmtzOyB9CisgICAgdm9pZCBz
ZXRIYXNRdWlya3MoYm9vbCB2YWx1ZSkgeyBtX2hhc1F1aXJrcyA9IHZhbHVlOyB9CiAKICAgICBP
cGFxdWVCeXByb2R1Y3RzJiBieXByb2R1Y3RzKCkgeyByZXR1cm4gKm1fYnlwcm9kdWN0czsgfQog
CkBAIC0yNTIsNiArMjU5LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KFByaW50U3RyZWFtJiwgT3JpZ2luKT4+IG1fb3JpZ2luUHJpbnRlcjsKICAgICBjb25zdCB2b2lk
KiBtX2Zyb250ZW5kRGF0YTsKICAgICBQQ1RvT3JpZ2luTWFwIG1fcGNUb09yaWdpbk1hcDsKKyAg
ICBib29sIG1faGFzUXVpcmtzIHsgZmFsc2UgfTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3Ro
LmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIE5lZzoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTmVnKGNvbnN0YW50
KQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiAtY29uc3RhbnQKQEAgLTEyOTUsNiArMTI5NSwx
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9wcm9j
Lmhhc1F1aXJrcygpKSB7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChBdG9t
aWNYY2hnX19fKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXwor
ICAgICAgICAgICAgICAgIGlmIChpc0F0b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29k
ZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRvbWlj
VmFsdWU+KCktPm9wZXJhdGlvbldpZHRoKCkgPT0gV2lkdGg4KSB7CisgICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNFeHQxNjoKQEAgLTEzNDMsNiArMTM1MywxNiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbV9wcm9jLmhhc1F1aXJrcygpKSB7
CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoQXRvbWljWGNoZ19fXykKKyAg
ICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEF0b21pY1hjaGdfX18KKyAgICAgICAgICAgICAg
ICBpZiAoaXNBdG9taWNYY2hnKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVlPigpLT5vcGVy
YXRpb25XaWR0aCgpID09IFdpZHRoMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgU0V4dDMyOgpAQCAtMjEwMSwyMiArMjEyMSwyNSBAQCBwcml2YXRlOgog
ICAgICAgICBBU1NFUlQobV92YWx1ZS0+bnVtQ2hpbGRyZW4oKSA+PSAyKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIExlYXZlIGl0IGFsb25lIGlmIHRoZSByaWdodCBjaGlsZCBpcyBhIGNvbnN0YW50
LgotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzQ29uc3RhbnQoKSkKKyAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0NvbnN0YW50KCkKKyAgICAgICAgICAgIHx8IG1fdmFs
dWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzQ29uc3Rh
bnQoKSkgeworICAgICAgICBhdXRvIHN3YXAgPSBbJl0gKCkgewogICAgICAgICAgICAgc3RkOjpz
d2FwKG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KKyAgICAg
ICAgfTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNDb25zdGFu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHN3YXAoKTsKKyAgICAgICAgCisgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKQorICAgICAgICAg
ICAgcmV0dXJuIHN3YXAoKTsKKyAgICAgICAgCiAgICAgICAgIC8vIFNvcnQgdGhlIG9wZXJhbmRz
LiBUaGlzIGlzIGFuIGltcG9ydGFudCBjYW5vbmljYWxpemF0aW9uLiBXZSB1c2UgdGhlIGluZGV4
IGluc3RlYWQgb2YKICAgICAgICAgLy8gdGhlIGFkZHJlc3MgdG8gbWFrZSB0aGlzIGF0IGxlYXN0
IHNsaWdodGx5IGRldGVybWluaXN0aWMuCi0gICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
aW5kZXgoKSA+IG1fdmFsdWUtPmNoaWxkKDEpLT5pbmRleCgpKSB7Ci0gICAgICAgICAgICBzdGQ6
OnN3YXAobV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pbmRleCgpID4gbV92YWx1ZS0+Y2hpbGQoMSktPmlu
ZGV4KCkpCisgICAgICAgICAgICByZXR1cm4gc3dhcCgpOwogICAgIH0KIAogICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCByZWFsbHkgYmUgYSBmb3J3YXJkIGFuYWx5c2lzLiBJbnN0ZWFkLCB3ZSB1
c2VzIGEgYm91bmRlZC1zZWFyY2ggYmFja3dhcmRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw2ICszNDYsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkg
PT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+
Y2hpbGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIExvYWQ6CkBAIC0zNTMsNiArMzU0LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwg
KnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBl
KCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgdmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVT
dGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIFN0b3JlODoKQEAgLTM2Miw2ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVl
KSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkgPT0g
cG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgdmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0Fj
Y2Vzcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFN0
b3JlOgpAQCAtMzY5LDggKzM3Miw0OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgp
LCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBl
KCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZl
bmNlKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoK
KyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVu
KCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDEpLT50eXBlKCks
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUt
PmNoaWxkKDApLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT5jaGlsZCgyKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOworICAgICAg
ICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAgICAgICAgICAg
VkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDMsICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1
ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT50eXBlKCkp
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGls
ZCgyKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkYXRl
U3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBBdG9taWNYY2hnQWRkOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAg
ICAgICAgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdT
dWI6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgICAgICAgICBjYXNlIEF0
b21pY1hjaGc6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaXNDaGls
bCgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5u
dW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAq
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+dHlwZSgpKSwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQo
MSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIHZhbGlkYXRlQXRvbWljKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0
YWNrQWNjZXNzKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgRGVwZW5kOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4
dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+dHlw
ZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgV2FzbUFkZHJlc3M6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5r
aW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKQEAg
LTUzNyw2ICs1ODEsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGVGZW5jZShWYWx1ZSogdmFsdWUpCisgICAg
eworICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigp
OworICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKQorICAgICAgICAgICAgVkFMSURBVEUo
bWVtb3J0eS0+YWNjZXNzQmFuaygpID09IEdQLCAoIkZlbmNlIGF0ICIsICptZW1vcnkpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZUF0b21pYyhWYWx1ZSogdmFsdWUpCisgICAgewor
ICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOwor
ICAgICAgICAKKyAgICAgICAgVkFMSURBVEUoYmVzdFR5cGUoYXRvbWljLT5vcGVyYXRpb25XaWR0
aCgpKSA9PSBhdG9taWMtPm9wZXJhdGlvblR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICB9
CiAKICAgICB2b2lkIHZhbGlkYXRlU3RhY2tBY2Nlc3MoVmFsdWUqIHZhbHVlKQogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQjNBcmd1bWVu
dFJlZ1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFz
aWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJCM0JvdHRvbVByb3ZpZGVyLmgiCiAjaW5jbHVk
ZSAiQjNDQ2FsbFZhbHVlLmgiCkBAIC01MTAsNiArNTExLDcgQEAgYm9vbCBWYWx1ZTo6cmV0dXJu
c0Jvb2woKSBjb25zdAogICAgIGNhc2UgQWJvdmVFcXVhbDoKICAgICBjYXNlIEJlbG93RXF1YWw6
CiAgICAgY2FzZSBFcXVhbE9yVW5vcmRlcmVkOgorICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBQaGk6CiAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgaGF2ZSBhIHN0b3J5IGhlcmUuCkBAIC01ODksNiArNTkxLDcgQEAgRWZmZWN0cyBWYWx1
ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgY2FzZSBCZWxvd0VxdWFsOgogICAgIGNhc2UgRXF1YWxP
clVub3JkZXJlZDoKICAgICBjYXNlIFNlbGVjdDoKKyAgICBjYXNlIERlcGVuZDoKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBEaXY6CiAgICAgY2FzZSBVRGl2OgpAQCAtNjAwLDE2ICs2MDMsNDQg
QEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgY2FzZSBMb2FkOFM6CiAgICAg
Y2FzZSBMb2FkMTZaOgogICAgIGNhc2UgTG9hZDE2UzoKLSAgICBjYXNlIExvYWQ6Ci0gICAgICAg
IHJlc3VsdC5yZWFkcyA9IGFzPE1lbW9yeVZhbHVlPigpLT5yYW5nZSgpOworICAgIGNhc2UgTG9h
ZDogeworICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gYXM8TWVtb3J5VmFsdWU+KCk7Cisg
ICAgICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+cmFuZ2UoKTsKKyAgICAgICAgaWYgKG1lbW9y
eS0+aGFzRmVuY2UoKSkgeworICAgICAgICAgICAgcmVzdWx0LndyaXRlcyA9IG1lbW9yeS0+ZmVu
Y2VSYW5nZSgpOworICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKKyAgICAgICAgfQog
ICAgICAgICByZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwor
ICAgIH0KICAgICBjYXNlIFN0b3JlODoKICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgY2FzZSBTdG9y
ZToKLSAgICAgICAgcmVzdWx0LndyaXRlcyA9IGFzPE1lbW9yeVZhbHVlPigpLT5yYW5nZSgpOwor
ICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9y
eVZhbHVlPigpOworICAgICAgICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5yYW5nZSgpOworICAg
ICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKSB7CisgICAgICAgICAgICByZXN1bHQucmVhZHMg
PSBtZW1vcnktPmZlbmNlUmFuZ2UoKTsKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRv
bWljU3Ryb25nQ0FTOgorICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hj
aGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgor
ICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6IHsKKyAgICAgICAg
QXRvbWljVmFsdWUqIGF0b21pYyA9IGFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICByZXN1bHQu
cmVhZHMgPSBhdG9taWMtPnJhbmdlKCkgfCBhdG9taWMtPmZlbmNlUmFuZ2UoKTsKKyAgICAgICAg
cmVzdWx0LndyaXRlcyA9IGF0b21pYy0+cmFuZ2UoKSB8IGF0b21pYy0+ZmVuY2VSYW5nZSgpOwor
ICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKQorICAgICAgICAgICAgcmVzdWx0LmZlbmNl
ID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAg
ICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBXYXNtQWRkcmVzczoKICAgICAgICAgcmVzdWx0LnJl
YWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CkBAIC02MTcsMTggKzY0OCw3IEBAIEVm
ZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgICAgICBjb25zdCBGZW5jZVZhbHVlKiBm
ZW5jZSA9IGFzPEZlbmNlVmFsdWU+KCk7CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IGZlbmNlLT5y
ZWFkOwogICAgICAgICByZXN1bHQud3JpdGVzID0gZmVuY2UtPndyaXRlOwotICAgICAgICAKLSAg
ICAgICAgLy8gUHJldmVudCBraWxsaW5nIG9mIGZlbmNlcyB0aGF0IGNsYWltIG5vdCB0byB3cml0
ZSBhbnl0aGluZy4gSXQncyBhIGJpdCB3ZWlyZCB0aGF0IHdlIHVzZQotICAgICAgICAvLyBsb2Nh
bCBzdGF0ZSBhcyB0aGUgd2F5IHRvIGRvIHRoaXMsIGJ1dCBpdCBoYXBwZW5zIHRvIHdvcms6IHdl
IG11c3QgYXNzdW1lIHRoYXQgd2UgY2Fubm90Ci0gICAgICAgIC8vIGtpbGwgd3JpdGVzTG9jYWxT
dGF0ZSB1bmxlc3Mgd2UgdW5kZXJzdGFuZHMgZXhhY3RseSB3aGF0IHRoZSBpbnN0cnVjdGlvbiBp
cyBkb2luZyAobGlrZQotICAgICAgICAvLyB0aGUgd2F5IHRoYXQgZml4U1NBIHVuZGVyc3RhbmRz
IFNldC9HZXQgYW5kIHRoZSB3YXkgdGhhdCByZWR1Y2VTdHJlbmd0aCBhbmQgb3RoZXJzCi0gICAg
ICAgIC8vIHVuZGVyc3RhbmQgVXBzaWxvbikuIFRoaXMgd291bGQgb25seSBiZWNvbWUgYSBwcm9i
bGVtIGlmIHdlIGhhZCBzb21lIGFuYWx5c2lzIHRoYXQgd2FzCi0gICAgICAgIC8vIGxvb2tpbmcg
dG8gdXNlIHRoZSB3cml0ZXNMb2NhbFN0YXRlIGJpdCB0byBpbnZhbGlkYXRlIGEgQ1NFIG92ZXIg
bG9jYWwgc3RhdGUgb3BlcmF0aW9ucy4KLSAgICAgICAgLy8gVGhlbiBhIEZlbmNlIHdvdWxkIGxv
b2sgYmxvY2ssIHNheSwgdGhlIGVsaW1pbmF0aW9uIG9mIGEgcmVkdW5kYW50IEdldC4gQnV0IGl0
IGxpa2UKLSAgICAgICAgLy8gdGhhdCdzIG5vdCBhdCBhbGwgaG93IG91ciBvcHRpbWl6YXRpb25z
IGZvciBTZXQvR2V0L1Vwc2lsb24vUGhpIHdvcmsgLSB0aGV5IGdyb2sgdGhlaXIKLSAgICAgICAg
Ly8gb3BlcmF0aW9ucyBkZWVwbHkgZW5vdWdoIHRoYXQgdGhleSBoYXZlIG5vIG5lZWQgdG8gY2hl
Y2sgdGhpcyBiaXQgLSBzbyB0aGlzIGNoZWF0IGlzCi0gICAgICAgIC8vIGZpbmUuCi0gICAgICAg
IHJlc3VsdC53cml0ZXNMb2NhbFN0YXRlID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LmZlbmNlID0g
dHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ0NhbGw6CkBAIC02OTQsNiAr
NzE0LDcgQEAgVmFsdWVLZXkgVmFsdWU6OmtleSgpIGNvbnN0CiAgICAgY2FzZSBDaGVjazoKICAg
ICBjYXNlIEJpdHdpc2VDYXN0OgogICAgIGNhc2UgTmVnOgorICAgIGNhc2UgRGVwZW5kOgogICAg
ICAgICByZXR1cm4gVmFsdWVLZXkoa2luZCgpLCB0eXBlKCksIGNoaWxkKDApKTsKICAgICBjYXNl
IEFkZDoKICAgICBjYXNlIFN1YjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsMTAgQEAgcHVibGljOgogICAgIAogICAgIE9wY29k
ZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBraW5kKCkub3Bjb2RlKCk7IH0KICAgICAKKyAgICAv
LyBOb3RlIHRoYXQgdGhlIGtpbmQgaXMgbWVhbnQgdG8gYmUgaW1tdXRhYmxlLiBEbyB0aGlzIHdo
ZW4geW91IGtub3cgdGhhdCB0aGlzIGlzIHNhZmUuIEl0J3Mgbm90CisgICAgLy8gdXN1YWxseSBz
YWZlLgorICAgIHZvaWQgc2V0S2luZFVuc2FmZWx5KEtpbmQga2luZCkgeyBtX2tpbmQgPSBraW5k
OyB9CisgICAgCiAgICAgLy8gSXQncyBnb29kIHByYWN0aWNlIHRvIG1pcnJvciBLaW5kIG1ldGhv
ZHMgaGVyZSwgc28geW91IGNhbiBzYXkgdmFsdWUtPmlzQmxhaCgpCiAgICAgLy8gaW5zdGVhZCBv
ZiB2YWx1ZS0+a2luZCgpLmlzQmxhaCgpLgogICAgIGJvb2wgaXNDaGlsbCgpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKS5pc0NoaWxsKCk7IH0KQEAgLTEwNyw2ICsxMTEsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gdmFsdWVzIHdpdGggSWRlbnRpdGllcyBvbiBib3R0b20gY29uc3RhbnRzLiBGb3IgdGhpcyBy
ZWFzb24sIHRoaXMgdGFrZXMgYSBjYWxsYmFjayB0aGF0IGlzCiAgICAgLy8gcmVzcG9uc2libGUg
Zm9yIGNyZWF0aW5nIGJvdHRvbXMuIFRoZXJlJ3MgYSB1dGlsaXR5IGZvciB0aGlzLCBzZWUgQjNC
b3R0b21Qcm92aWRlci5oLiBZb3UKICAgICAvLyBjYW4gYWxzbyBhY2Nlc3MgdGhhdCB1dGlsaXR5
IHVzaW5nIHJlcGxhY2VXaXRoQm90dG9tKEluc2VydGlvblNldCYsIHNpemVfdCkuCisgICAgLy8K
KyAgICAvLyBZb3UncmUgZ3VhcmFudGVlZCB0aGF0IGJvdHRvbSBpcyB6ZXJvLgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEJvdHRvbVByb3ZpZGVyPgogICAgIHZvaWQgcmVwbGFjZVdpdGhCb3R0b20o
Y29uc3QgQm90dG9tUHJvdmlkZXImKTsKICAgICAKQEAgLTMyMSw2ICszMjcsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIElUb0Y6CiAgICAgICAgIGNhc2UgQml0d2lzZUNhc3Q6CiAgICAgICAg
IGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIERlcGVuZDoKICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShudW1BcmdzICE9IDEpKQogICAgICAgICAgICAgICAgIGJhZEtpbmQoa2luZCwgbnVtQXJn
cyk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1dpZHRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0
aC5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dp
ZHRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMzggQEAKIAogI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgogCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVHlw
ZSBiZXN0VHlwZShCYW5rIGJhbmssIFdpZHRoIHdpZHRoKQoreworICAgIHN3aXRjaCAod2lkdGgp
IHsKKyAgICBjYXNlIFdpZHRoODoKKyAgICBjYXNlIFdpZHRoMTY6CisgICAgY2FzZSBXaWR0aDMy
OgorICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAg
IHJldHVybiBJbnQzMjsKKyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBGbG9h
dDsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gVm9pZDsKKyAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgIHN3aXRjaCAoYmFu
aykgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIEludDY0OworICAgICAg
ICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICAgICAgfQorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVm9pZDsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVm9pZDsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKIG5hbWVzcGFjZSBXVEYgewogCiB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpCMzo6V2lkdGggd2lkdGgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYg
KzYyLDE4IEBAIGlubGluZSBXaWR0aCB3aWR0aEZvclR5cGUoVHlwZSB0eXBlKQogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCitpbmxpbmUgV2lkdGggY2Fub25pY2FsV2lkdGgoV2lkdGgg
d2lkdGgpCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KFdpZHRoMzIsIHdpZHRoKTsKK30KKworaW5s
aW5lIFdpZHRoIGlzQ2Fub25pY2FsV2lkdGgoV2lkdGggd2lkdGgpCit7CisgICAgcmV0dXJuIHdp
ZHRoID49IFdpZHRoMzI7Cit9CisKK1R5cGUgYmVzdFR5cGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0
aCk7CisKIGlubGluZSBXaWR0aCBjb25zZXJ2YXRpdmVXaWR0aChCYW5rIGJhbmspCiB7CiAgICAg
cmV0dXJuIGJhbmsgPT0gR1AgPyBwb2ludGVyV2lkdGgoKSA6IFdpZHRoNjQ7CkBAIC05Myw2ICsx
MDUsMjAgQEAgaW5saW5lIFdpZHRoIHdpZHRoRm9yQnl0ZXModW5zaWduZWQgYnl0ZQogICAgIH0K
IH0KIAoraW5saW5lIHVpbnQ2NF90IG1hc2soV2lkdGggd2lkdGgpCit7CisgICAgc3dpdGNoICh3
aWR0aCkgeworICAgIGNhc2UgV2lkdGg4OgorICAgICAgICByZXR1cm4gMHgwMDAwMDAwMDAwMDAw
MGZmbGx1OworICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgcmV0dXJuIDB4MDAwMDAwMDAwMDAw
ZmZmZmxsdTsKKyAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgIHJldHVybiAweDAwMDAwMDAwZmZm
ZmZmZmZsbHU7CisgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICByZXR1cm4gMHhmZmZmZmZmZmZm
ZmZmZmZmbGx1OworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVz
cGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDcgQEAgdW5zaWduZWQgQXJnOjpqc0hh
c2goKSBjb25zdAogICAgIGNhc2UgUmVsQ29uZDoKICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgY2Fz
ZSBEb3VibGVDb25kOgorICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICBjYXNlIFdpZHRoQXJnOgog
ICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb2Zmc2V0KTsKICAgICAg
ICAgYnJlYWs7CkBAIC0xODIsNiArMTgzLDkgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAgIG91dC5wcmludChhc0Rv
dWJsZUNvbmRpdGlvbigpKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhdHVzQ29uZDoK
KyAgICAgICAgb3V0LnByaW50KGFzU3RhdHVzQ29uZGl0aW9uKCkpOworICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lh
bCgpKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI0MSw2ICsyNDUsOSBAQCB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAgICAgY2FzZSBBcmc6OkRvdWJsZUNvbmQ6CiAg
ICAgICAgIG91dC5wcmludCgiRG91YmxlQ29uZCIpOwogICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBBcmc6OlN0YXR1c0NvbmQ6CisgICAgICAgIG91dC5wcmludCgiU3RhdHVzQ29uZCIpOworICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OlNwZWNpYWw6CiAgICAgICAgIG91dC5wcmludCgi
U3BlY2lhbCIpOwogICAgICAgICByZXR1cm47CkBAIC0yODUsNiArMjkyLDkgQEAgdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZwogICAgIGNhc2UgQXJnOjpFYXJseURlZjoK
ICAgICAgICAgb3V0LnByaW50KCJFYXJseURlZiIpOwogICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBBcmc6OkVhcmx5WkRlZjoKKyAgICAgICAgb3V0LnByaW50KCJFYXJseVpEZWYiKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpTY3JhdGNoOgogICAgICAgICBvdXQucHJpbnQoIlNj
cmF0Y2giKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHB1YmxpYzoKICAg
ICAgICAgUmVsQ29uZCwKICAgICAgICAgUmVzQ29uZCwKICAgICAgICAgRG91YmxlQ29uZCwKKyAg
ICAgICAgU3RhdHVzQ29uZCwKICAgICAgICAgU3BlY2lhbCwKICAgICAgICAgV2lkdGhBcmcKICAg
ICB9OwpAQCAtMTUxLDYgKzE1Miw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gYXMgVXNlIGhhcyB1
bmRlZmluZWQgYmVoYXZpb3I6IHRoZSB1c2UgbWF5IGhhcHBlbiBiZWZvcmUgdGhlIGRlZiwgb3Ig
aXQgbWF5IGhhcHBlbiBhZnRlcgogICAgICAgICAvLyBpdC4KICAgICAgICAgRWFybHlEZWYsCisg
ICAgICAgICAgICAKKyAgICAgICAgRWFybHlaRGVmLAogCiAgICAgICAgIC8vIFNvbWUgaW5zdHJ1
Y3Rpb25zIG5lZWQgYSBzY3JhdGNoIHJlZ2lzdGVyLiBXZSBtb2RlbCB0aGlzIGJ5IHNheWluZyB0
aGF0IHRoZSB0ZW1wb3JhcnkgaXMKICAgICAgICAgLy8gZGVmaW5lZCBlYXJseSBhbmQgdXNlZCBs
YXRlLiBUaGlzIHJvbGUgaW1wbGllcyB0aGF0LgpAQCAtMTg2LDYgKzE4OSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2Ug
RWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjA2LDYg
KzIxMCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIFNj
cmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtMjI4LDYgKzIzMyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBVc2VB
ZGRyOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAg
ICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIHJvbGU7CiAgICAgICAgIGNh
c2UgVXNlOgogICAgICAgICAgICAgcmV0dXJuIENvbGRVc2U7CkBAIC0yNTMsNiArMjU5LDcgQEAg
cHVibGljOgogICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgogICAgICAgICBjYXNlIFNjcmF0Y2g6
CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMjc0LDYgKzI4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAg
ICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2Ug
RWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjk0LDYgKzMwMiw3IEBAIHB1YmxpYzoKICAgICAg
ICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6CiAgICAgICAgIGNhc2UgRWFybHlE
ZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzE1LDYgKzMyNCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAg
IGNhc2UgU2NyYXRjaDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0z
MzAsNiArMzQwLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNh
c2UgTGF0ZVVzZToKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpE
ZWY6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM1OCw2ICszNjksNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBV
c2VaRGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTMzLDYgKzU0
NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgc3Rh
dGljIEFyZyBzdGF0dXNDb25kKE1hY3JvQXNzZW1ibGVyOjpTdGF0dXNDb25kaXRpb24gY29uZGl0
aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IFN0YXR1c0NvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGNvbmRpdGlvbjsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBzdGF0aWMgQXJnIHNwZWNpYWwoQWlyOjpT
cGVjaWFsKiBzcGVjaWFsKQogICAgIHsKICAgICAgICAgQXJnIHJlc3VsdDsKQEAgLTY1OCwxMiAr
Njc4LDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBEb3VibGVDb25kOwog
ICAgIH0KIAorICAgIGJvb2wgaXNTdGF0dXNDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBraW5kKCkgPT0gU3RhdHVzQ29uZDsKKyAgICB9CisKICAgICBib29sIGlzQ29uZGl0aW9u
KCkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CiAgICAgICAgIGNhc2Ug
UmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6
CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODUxLDYgKzg3Nyw3
IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIFJlc0NvbmQ6
CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKKyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgogICAg
ICAgICBjYXNlIFNwZWNpYWw6CiAgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTg3Miw2ICs4OTksNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVs
Q29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6Cisg
ICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBj
YXNlIFdpZHRoQXJnOgogICAgICAgICBjYXNlIEludmFsaWQ6CkBAIC0xMDU4LDYgKzEwODYsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgog
ICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAg
ICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0xMTc3LDYgKzEyMDYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbj4obV9vZmZzZXQpOwog
ICAgIH0KICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6U3RhdHVzQ29uZGl0aW9uIGFzU3RhdHVz
Q29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1N0YXR1c0NvbmQoKSk7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6U3RhdHVzQ29uZGl0
aW9uPihtX29mZnNldCk7CisgICAgfQorICAgIAogICAgIC8vIFRlbGxzIHlvdSBpZiB0aGUgQXJn
IGlzIGludmVydGlibGUuIE9ubHkgY29uZGl0aW9uIGFyZ3VtZW50cyBhcmUgaW52ZXJ0aWJsZSwg
YW5kIGV2ZW4gZm9yIHRob3NlLCB0aGVyZQogICAgIC8vIGFyZSBhIGZldyBleGNlcHRpb25zIC0g
bm90YWJseSBPdmVyZmxvdyBhbmQgU2lnbmVkLgogICAgIGJvb2wgaXNJbnZlcnRpYmxlKCkgY29u
c3QKQEAgLTExODQsNiArMTIxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChraW5kKCkp
IHsKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAg
ICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBj
YXNlIFJlc0NvbmQ6CiAgICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OmlzSW52ZXJ0
aWJsZShhc1Jlc3VsdENvbmRpdGlvbigpKTsKQEAgLTEyMDQsNiArMTI0MCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybiByZXNDb25kKE1hY3JvQXNzZW1ibGVyOjppbnZlcnQoYXNSZXN1
bHRDb25kaXRpb24oKSkpOwogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAgICAgICBy
ZXR1cm4gZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0KGFzRG91YmxlQ29uZGl0aW9u
KCkpKTsKKyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgorICAgICAgICAgICAgcmV0dXJuIHN0YXR1
c0NvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc1N0YXR1c0NvbmRpdGlvbigpKSk7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgcmV0dXJuIEFyZygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw2ICszNSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
CiAKIGNvbnN0IGNoYXIqIGNvbnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CiAKK3Zv
aWQgQmFzaWNCbG9jazo6c2V0U3VjY2Vzc29ycyhCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBt
X3N1Y2Nlc3NvcnMucmVzaXplKDEpOworICAgIG1fc3VjY2Vzc29yc1swXSA9IHRhcmdldDsKK30K
Kwordm9pZCBCYXNpY0Jsb2NrOjpzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayB0YWtlbiwg
RnJlcXVlbnRlZEJsb2NrIG5vdFRha2VuKQoreworICAgIG1fc3VjY2Vzc29ycy5yZXNpemUoMik7
CisgICAgbV9zdWNjZXNzb3JzWzBdID0gdGFrZW47CisgICAgbV9zdWNjZXNzb3JzWzFdID0gbm90
VGFrZW47Cit9CisKIGJvb2wgQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayog
YmxvY2spCiB7CiAgICAgcmV0dXJuIEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Js
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDkgQEAgcHVibGljOgogICAgIGNvbnN0
IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7
IH0KICAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3Jz
OyB9CiAKKyAgICB2b2lkIHNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKTsKKyAgICB2b2lk
IHNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrLCBGcmVxdWVudGVkQmxvY2spOworCiAgICAg
QmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsgfQogICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JC
bG9jayh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9
CiAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNj
ZXNzb3JCbG9ja3MoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9j
a0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQmxvY2tJbnNlcnRp
b25TZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2Nr
LmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9CdWJibGVTb3J0Lmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQmxvY2tJ
bnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KENvZGUgJmNvZGUpCisgICAgOiBHZW5lcmlj
QmxvY2tJbnNlcnRpb25TZXQoY29kZS5tX2Jsb2NrcykKK3sKK30KKworQmxvY2tJbnNlcnRpb25T
ZXQ6On5CbG9ja0luc2VydGlvblNldCgpCit7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlv
blNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNHZW5lcmljQmxvY2tJc25lcnRpb25TZXQuaCIKKyNpbmNs
dWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK3R5cGVkZWYgR2VuZXJpY0Jsb2NrSW5zZXJ0
aW9uU2V0PEJhc2ljQmxvY2s+OjpCbG9ja0luc2VydGlvbiBCbG9ja0luc2VydGlvbjsKKworY2xh
c3MgQmxvY2tJbnNlcnRpb25TZXQgOiBwdWJsaWMgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJh
c2ljQmxvY2s+IHsKK3B1YmxpYzoKKyAgICBCbG9ja0luc2VydGlvblNldChDb2RlJik7CisgICAg
fkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBldmVu
dHVhbGx5IGltcGxlbWVudCBCMzo6QmxvY2tJbnNlcnRpb25TZXQncyBzcGxpdEZvcndhcmQoKS4K
K307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDggQEAgdm9pZCBw
cmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAgICAgICBkYXRhTG9nKCJJbml0aWFs
IGFpcjpcbiIpOwogICAgICAgICBkYXRhTG9nKGNvZGUpOwogICAgIH0KKyAgICAKKyAgICBzaW1w
bGlmeUNGRyhjb2RlKTsKIAogICAgIGxvd2VyTWFjcm9zKGNvZGUpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNjYsOSArMTY2LDEyIEBAIHg4NjogQWRkRmxvYXQgVTpGOjMyLCBVRDpGOjMy
CiBTdWIzMiBVOkc6MzIsIFVaRDpHOjMyCiAgICAgVG1wLCBUbXAKICAgICB4ODY6IEltbSwgQWRk
cgorICAgIHg4NjogSW1tLCBCYXNlSW5kZXgKICAgICBJbW0sIFRtcAogICAgIHg4NjogQWRkciwg
VG1wCisgICAgeDg2OiBCYXNlSW5kZXgsIFRtcAogICAgIHg4NjogVG1wLCBBZGRyCisgICAgeDg2
OiBUbXAsIEJhc2VJbmRleAogCiBhcm02NDogU3ViMzIgVTpHOjMyLCBVOkc6MzIsIEQ6RzozMgog
ICAgIFRtcCwgVG1wLCBUbXAKQEAgLTE3Niw5ICsxNzksMTIgQEAgYXJtNjQ6IFN1YjMyIFU6Rzoz
MiwgVTpHOjMyLCBEOkc6MzIKIDY0OiBTdWI2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRt
cAogICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEJhc2VJbmRleAogICAgIEltbSwg
VG1wCiAgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IEJhc2VJbmRleCwgVG1wCiAgICAgeDg2
OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwgQmFzZUluZGV4CiAKIGFybTY0OiBTdWI2NCBVOkc6
NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcApAQCAtMjA0LDkgKzIxMCwxMiBA
QCB4ODY6IFN1YkZsb2F0IFU6RjozMiwgVUQ6RjozMgogTmVnMzIgVVpEOkc6MzIKICAgICBUbXAK
ICAgICB4ODY6IEFkZHIKKyAgICB4ODY6IEJhc2VJbmRleAogCiA2NDogTmVnNjQgVUQ6Rzo2NAog
ICAgIFRtcAorICAgIHg4NjogQWRkcgorICAgIHg4NjogQmFzZUluZGV4CiAKIGFybTY0OiBOZWdh
dGVEb3VibGUgVTpGOjY0LCBEOkY6NjQKICAgICBUbXAsIFRtcApAQCAtMzMwLDggKzMzOSwxMSBA
QCBBbmQzMiBVOkc6MzIsIFVaRDpHOjMyCiAgICAgVG1wLCBUbXAKICAgICB4ODY6IEltbSwgVG1w
CiAgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwgQmFzZUluZGV4CiAgICAgeDg2OiBB
ZGRyLCBUbXAKKyAgICB4ODY6IEJhc2VJbmRleCwgVG1wCiAgICAgeDg2OiBJbW0sIEFkZHIKKyAg
ICB4ODY6IEltbSwgQmFzZUluZGV4CiAKIDY0OiBBbmQ2NCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0
CiAgICAgVG1wLCBUbXAsIFRtcApAQCAtMzM5LDcgKzM1MSwxMyBAQCBBbmQzMiBVOkc6MzIsIFVa
RDpHOjMyCiAKIHg4Nl82NDogQW5kNjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKLSAg
ICB4ODY6IEltbSwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEJh
c2VJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgQmFzZUluZGV4CisgICAgQWRkciwgVG1w
CisgICAgQmFzZUluZGV4LCBUbXAKIAogQW5kRG91YmxlIFU6Rjo2NCwgVTpGOjY0LCBEOkY6NjQK
ICAgICBUbXAsIFRtcCwgVG1wCkBAIC00NTksOCArNDc3LDExIEBAIE9yMzIgVTpHOjMyLCBVWkQ6
RzozMgogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIFRtcAogICAgIHg4NjogVG1wLCBBZGRy
CisgICAgeDg2OiBUbXAsIEJhc2VJbmRleAogICAgIHg4NjogQWRkciwgVG1wCisgICAgeDg2OiBC
YXNlSW5kZXgsIFRtcAogICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEJhc2VJbmRl
eAogCiA2NDogT3I2NCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcApA
QCAtNDY5LDYgKzQ5MCwxMiBAQCBPcjMyIFU6RzozMiwgVVpEOkc6MzIKIDY0OiBPcjY0IFU6Rzo2
NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIFRtcAorICAgIHg4NjogSW1t
LCBBZGRyCisgICAgeDg2OiBJbW0sIEJhc2VJbmRleAorICAgIHg4NjogVG1wLCBBZGRyCisgICAg
eDg2OiBUbXAsIEJhc2VJbmRleAorICAgIHg4NjogQWRkciwgVG1wCisgICAgeDg2OiBCYXNlSW5k
ZXgsIFRtcAogCiBYb3IzMiBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wLCBU
bXAKQEAgLTQ4MCw4ICs1MDcsMTEgQEAgWG9yMzIgVTpHOjMyLCBVWkQ6RzozMgogICAgIFRtcCwg
VG1wCiAgICAgeDg2OiBJbW0sIFRtcAogICAgIHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAs
IEJhc2VJbmRleAogICAgIHg4NjogQWRkciwgVG1wCisgICAgeDg2OiBCYXNlSW5kZXgsIFRtcAog
ICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEJhc2VJbmRleAogCiA2NDogWG9yNjQg
VTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBUbXAKQEAgLTQ5MCw2ICs1MjAs
MTEgQEAgWG9yMzIgVTpHOjMyLCBVWkQ6RzozMgogNjQ6IFhvcjY0IFU6Rzo2NCwgVUQ6Rzo2NAog
ICAgIFRtcCwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwgQmFzZUluZGV4
CisgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IEJhc2VJbmRleCwgVG1wCisgICAgeDg2OiBJ
bW0sIEFkZHIKKyAgICB4ODY6IEltbSwgQmFzZUluZGV4CiAgICAgeDg2OiBJbW0sIFRtcAogCiBh
cm02NDogTm90MzIgVTpHOjMyLCBaRDpHOjMyCkBAIC00OTgsMTMgKzUzMywxNSBAQCBhcm02NDog
Tm90MzIgVTpHOjMyLCBaRDpHOjMyCiB4ODY6IE5vdDMyIFVaRDpHOjMyCiAgICAgVG1wCiAgICAg
QWRkcgorICAgIEJhc2VJbmRleAogCiBhcm02NDogTm90NjQgVTpHOjY0LCBEOkc6NjQKICAgICBU
bXAsIFRtcAogCi14ODY6IE5vdDY0IFVEOkc6NjQKK3g4Nl82NDogTm90NjQgVUQ6Rzo2NAogICAg
IFRtcAogICAgIEFkZHIKKyAgICBCYXNlSW5kZXgKIAogYXJtNjQ6IEFic0RvdWJsZSBVOkY6NjQs
IEQ6Rjo2NAogICAgIFRtcCwgVG1wCkBAIC02NjgsMjggKzcwNSwzODAgQEAgTG9hZDggVTpHOjgs
IFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3E4IFU6Rzo4
LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBTdG9yZTggVTpHOjgs
IEQ6Rzo4CiAgICAgVG1wLCBJbmRleAogICAgIFRtcCwgQWRkcgogICAgIHg4NjogSW1tLCBJbmRl
eAogICAgIHg4NjogSW1tLCBBZGRyCiAKK1N0b3JlUmVsOCBVOkc6OCwgRDpHOjgKKyAgICBUbXAs
IEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisgICAgeDg2OiBJbW0s
IEFkZHIKKwogTG9hZDhTaWduZWRFeHRlbmRUbzMyIFU6Rzo4LCBaRDpHOjMyCiAgICAgQWRkciwg
VG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIgVTpHOjgsIFpE
Okc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIExvYWQxNiBVOkc6MTYsIFpE
Okc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3ExNiBVOkc6MTYs
IFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIExvYWQxNlNpZ25lZEV4
dGVuZFRvMzIgVTpHOjE2LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAog
CitMb2FkQWNxMTZTaWduZWRFeHRlbmRUbzMyIFU6RzoxNiwgWkQ6RzozMgorICAgIEFkZHIsIFRt
cAorICAgIEluZGV4LCBUbXAKKwogU3RvcmUxNiBVOkc6MTYsIEQ6RzoxNgogICAgIFRtcCwgSW5k
ZXgKICAgICBUbXAsIEFkZHIKIAorU3RvcmVBY3ExNiBVOkc6MTYsIEQ6RzoxNgorICAgIFRtcCwg
SW5kZXgKKyAgICBUbXAsIEFkZHIKKworTG9hZEFjcTMyIFU6RzozMiwgWkQ6RzozMgorICAgIFRt
cCwgVG1wCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCitTdG9yZVJlbDMyIFU6Rzoz
MiwgWkQ6RzozMgorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKyAgICB4ODY6IEltbSwg
QWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorCis2NDogTG9hZEFjcTY0IFU6Rzo2NCwgWkQ6Rzo2
NAorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCis2NDogU3Rv
cmVSZWw2NCBVOkc6NjQsIFpEOkc6NjQKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4Cisg
ICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKworIyBUaGUgZmlyc3Qgb3Bl
cmFuZCBpcyByYXguCit4ODY6IEF0b21pY1N0cm9uZ0NBUzggVTpHOjMyLCBVRDpHOjgsIFU6Rzo4
LCBVRDpHOjgsIFpEOkc6OAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkciwgVG1wCisg
ICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRleCwgVG1wCisKK3g4NjogQXRvbWljU3Ryb25n
Q0FTMTYgVTpHOjMyLCBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYsIFpEOkc6OAorICAgIFN0YXR1
c0NvbmQsIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJ
bmRleCwgVG1wCisKK3g4NjogQXRvbWljU3Ryb25nQ0FTMzIgVTpHOjMyLCBVRDpHOjMyLCBVOkc6
MzIsIFVEOkc6MzIsIFpEOkc6OAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkciwgVG1w
CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRleCwgVG1wCisKK3g4Nl82NDogQXRvbWlj
U3Ryb25nQ0FTNjQgVTpHOjMyLCBVRDpHOjY0LCBVOkc6NjQsIFVEOkc6NjQsIFpEOkc6OAorICAg
IFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAgU3RhdHVzQ29uZCwgVG1wKiwg
VG1wLCBJbmRleCwgVG1wCisKK3g4NjogQXRvbWljU3Ryb25nQ0FTOCBVRDpHOjgsIFU6Rzo4LCBV
RDpHOjgKKyAgICBUbXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4Njog
QXRvbWljU3Ryb25nQ0FTMTYgVUQ6RzoxNiwgVTpHOjMyLCBVRDpHOjE2CisgICAgVG1wKiwgVG1w
LCBBZGRyCisgICAgVG1wKiwgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1N0cm9uZ0NBUzMyIFVE
Okc6MzIsIFU6RzozMiwgVUQ6RzozMgorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRt
cCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNTdHJvbmdDQVM2NCBVRDpHOjY0LCBVOkc6NjQsIFVE
Okc6NjQKKyAgICBUbXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4Njog
QnJhbmNoQXRvbWljU3Ryb25nQ0FTOCBVOkc6MzIsIFVEOkc6OCwgVTpHOjgsIFVEOkc6OCAvYnJh
bmNoCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyCisgICAgU3RhdHVzQ29uZCwgVG1w
KiwgVG1wLCBJbmRleAorCit4ODY6IEJyYW5jaEF0b21pY1N0cm9uZ0NBUzE2IFU6RzozMiwgVUQ6
RzoxNiwgVTpHOjMyLCBVRDpHOjE2IC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAs
IEFkZHIKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNoQXRv
bWljU3Ryb25nQ0FTMzIgVTpHOjMyLCBVRDpHOjMyLCBVOkc6MzIsIFVEOkc6MzIgL2JyYW5jaAor
ICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkcgorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRt
cCwgSW5kZXgKKworeDg2XzY0OiBCcmFuY2hBdG9taWNTdHJvbmdDQVM2NCBVOkc6MzIsIFVEOkc6
NjQsIFU6Rzo2NCwgVUQ6Rzo2NCAvYnJhbmNoCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBB
ZGRyCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FkZDgg
VTpHOjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljQWRkMTYgVTpHOjE2LCBVRDpHOjE2Cisg
ICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5k
ZXgKKworeDg2OiBBdG9taWNBZGQzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAg
ICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0
b21pY0FkZDY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgK
KyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljU3ViOCBVOkc6OCwg
VUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAg
IFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNTdWIxNiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJbW0s
IEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4
ODY6IEF0b21pY1N1YjMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwg
SW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljU3Vi
NjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRt
cCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNBbmQ4IFU6Rzo4LCBVRDpHOjgK
KyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJ
bmRleAorCit4ODY6IEF0b21pY0FuZDE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgor
ICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRv
bWljQW5kMzIgVTpHOjMyLCBVRDpHOjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAor
ICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNBbmQ2NCBVOkc6
NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRy
CisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY09yOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1t
LCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKwor
eDg2OiBBdG9taWNPcjE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwg
SW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljT3IzMiBV
Okc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY09yNjQgVTpHOjY0LCBVRDpHOjY0
CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwg
SW5kZXgKKworeDg2OiBBdG9taWNYb3I4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAg
ICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21p
Y1hvcjE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAg
ICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljWG9yMzIgVTpHOjMyLCBV
RDpHOjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAg
IFRtcCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNYb3I2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJ
bW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAor
Cit4ODY6IEF0b21pY05lZzggVUQ6Rzo4CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogQXRv
bWljTmVnMTYgVUQ6RzoxNgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY05lZzMy
IFVEOkc6MzIKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2XzY0OiBBdG9taWNOZWc2NCBVRDpH
OjY0CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogQXRvbWljTm90OCBVRDpHOjgKKyAgICBB
ZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOb3QxNiBVRDpHOjE2CisgICAgQWRkcgorICAg
IEluZGV4CisKK3g4NjogQXRvbWljTm90MzIgVUQ6RzozMgorICAgIEFkZHIKKyAgICBJbmRleAor
Cit4ODZfNjQ6IEF0b21pY05vdDY0IFVEOkc6NjQKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2
OiBBdG9taWNYY2hnQWRkOCBVRDpHOjgsIFVEOkc6OAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwg
SW5kZXgKKworeDg2OiBBdG9taWNYY2hnQWRkMTYgVUQ6RzoxNiwgVUQ6RzoxNgorICAgIFRtcCwg
QWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNYY2hnQWRkMzIgVUQ6RzozMiwgVUQ6
RzozMgorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNYY2hn
QWRkNjQgVUQ6Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKwor
eDg2OiBBdG9taWNYY2hnOCBVRDpHOjgsIFVEOkc6OAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwg
SW5kZXgKKworeDg2OiBBdG9taWNYY2hnMTYgVUQ6RzoxNiwgVUQ6RzoxNgorICAgIFRtcCwgQWRk
cgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNYY2hnMzIgVUQ6RzozMiwgVUQ6RzozMgor
ICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNYY2hnNjQgVUQ6
Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworYXJtNjQ6IExv
YWRMaW5rOCBVOkc6OCwgWkQ6Rzo4CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCith
cm02NDogTG9hZExpbmtBY3E4IFU6Rzo4LCBaRDpHOjgKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRl
eCwgVG1wCisKKyMgU3VwZXIgY29uZnVzaW5nIGZhY3Q6IHRoaXMgcmV0dXJucyAwIHRvIG1lYW4g
c3VjY2VzcywgMSB0byBtZWFuIGZhaWx1cmUuCithcm02NDogU3RvcmVDb25kOCBVOkc6OCwgRDpH
OjgsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCith
cm02NDogU3RvcmVDb25kUmVsOCBVOkc6OCwgRDpHOjgsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIs
IFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmsxNiBVOkc6MTYsIFpE
Okc6MTYKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0Fj
cTE2IFU6RzoxNiwgWkQ6RzoxNgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJt
NjQ6IFN0b3JlQ29uZDE2IFU6RzoxNiwgRDpHOjE2LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBU
bXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDE2IFU6RzoxNiwg
RDpHOjE2LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAK
KworYXJtNjQ6IExvYWRMaW5rMzIgVTpHOjMyLCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAg
SW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmtBY3EzMiBVOkc6MzIsIFpEOkc6MzIKKyAgICBB
ZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQzMiBVOkc6MzIsIEQ6
RzozMiwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisK
K2FybTY0OiBTdG9yZUNvbmRSZWwzMiBVOkc6MzIsIEQ6RzozMiwgRVpEOkc6OAorICAgIFRtcCwg
QWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGluazY0IFU6Rzo2
NCwgWkQ6Rzo2NAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRM
aW5rQWNxNjQgVTpHOjY0LCBaRDpHOjY0CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAor
Cithcm02NDogU3RvcmVDb25kNjQgVTpHOjY0LCBEOkc6NjQsIEVaRDpHOjgKKyAgICBUbXAsIEFk
ZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kUmVsNjQgVTpH
OjY0LCBEOkc6NjQsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgs
IFRtcAorCithcm02NDogRGVwZW5kMzIgVTpHOjMyLCBEOkc6MzIKKyAgICBUbXAsIFRtcAorCith
cm02NDogRGVwZW5kNjQgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcAorCiBDb21wYXJlMzIg
VTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogICAgIFJlbENvbmQsIFRtcCwgVG1wLCBU
bXAKICAgICBSZWxDb25kLCBUbXAsIEltbSwgVG1wCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCShyZXZpc2lv
biAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxv
Y2tPcmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzcsNiArMTc3LDEwIEBAIHZvaWQgb3B0
aW1pemVCbG9ja09yZGVyKENvZGUmIGNvZGUpCiAgICAgICAgIGNhc2UgQnJhbmNoU3ViNjQ6CiAg
ICAgICAgIGNhc2UgQnJhbmNoTmVnMzI6CiAgICAgICAgIGNhc2UgQnJhbmNoTmVnNjQ6CisgICAg
ICAgIGNhc2UgQnJhbmNoQXRvbWljU3Ryb25nQ0FTODoKKyAgICAgICAgY2FzZSBCcmFuY2hBdG9t
aWNTdHJvbmdDQVMxNjoKKyAgICAgICAgY2FzZSBCcmFuY2hBdG9taWNTdHJvbmdDQVMzMjoKKyAg
ICAgICAgY2FzZSBCcmFuY2hBdG9taWNTdHJvbmdDQVM2NDoKICAgICAgICAgICAgIGlmIChjb2Rl
LmZpbmROZXh0QmxvY2soYmxvY2spID09IGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSAmJiBicmFu
Y2guYXJnc1swXS5pc0ludmVydGlibGUoKSkgewogICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChi
bG9jay0+c3VjY2Vzc29yKDApLCBibG9jay0+c3VjY2Vzc29yKDEpKTsKICAgICAgICAgICAgICAg
ICBicmFuY2guYXJnc1swXSA9IGJyYW5jaC5hcmdzWzBdLmludmVydGVkKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3Bw
CShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBh
ZEludGVyZmVyZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgdm9pZCBw
YWRJbnRlcmZlcmVuY2UoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICBbJl0gKEFyZyYsIEFy
Zzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgewogICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHJvbGUpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlaRGVmOgogICAgICAgICAgICAgICAgICAgICAg
ICAgaGFzRWFybHlEZWYgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlVXNlOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNp
b24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5
dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDcgQEAgdm9pZCBzcGlsbEV2
ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkxhdGVD
b2xkVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U2NyYXRjaDoKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgorICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6RWFybHlaRGVmOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDog
Y29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVf
Z2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNCArNTEsNDkgQEAgY2xhc3MgQXJn
CiAgICAgICAgIEBiYW5rID0gYmFuawogICAgICAgICBAd2lkdGggPSB3aWR0aAogICAgIGVuZAot
Ci0gICAgZGVmIHdpZHRoQ29kZQorICAgIAorICAgIGRlZiBzZWxmLndpZHRoQ29kZSh3aWR0aCkK
ICAgICAgICAgaWYgd2lkdGggPT0gIlB0ciIKICAgICAgICAgICAgICJwb2ludGVyV2lkdGgoKSIK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgIldpZHRoI3t3aWR0aH0iCiAgICAgICAgIGVuZAog
ICAgIGVuZAorCisgICAgZGVmIHdpZHRoQ29kZQorICAgICAgICBBcmcud2lkdGhDb2RlKHdpZHRo
KQorICAgIGVuZAorICAgIAorICAgIGRlZiBzZWxmLnJvbGVDb2RlKHJvbGUpCisgICAgICAgIGNh
c2Ugcm9sZQorICAgICAgICB3aGVuICJVIgorICAgICAgICAgICAgIlVzZSIKKyAgICAgICAgd2hl
biAiRCIKKyAgICAgICAgICAgICJEZWYiCisgICAgICAgIHdoZW4gIlpEIgorICAgICAgICAgICAg
IlpEZWYiCisgICAgICAgIHdoZW4gIlVEIgorICAgICAgICAgICAgIlVzZURlZiIKKyAgICAgICAg
d2hlbiAiVVpEIgorICAgICAgICAgICAgIlVzZVpEZWYiCisgICAgICAgIHdoZW4gIlVBIgorICAg
ICAgICAgICAgIlVzZUFkZHIiCisgICAgICAgIHdoZW4gIlMiCisgICAgICAgICAgICAiU2NyYXRj
aCIKKyAgICAgICAgd2hlbiAiRUQiCisgICAgICAgICAgICAiRWFybHlEZWYiCisgICAgICAgIHdo
ZW4gIkVaRCIKKyAgICAgICAgICAgICJFYXJseVpEZWYiCisgICAgICAgIHdoZW4gIkxVIgorICAg
ICAgICAgICAgIkxhdGVVc2UiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlCisgICAg
ICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiByb2xlQ29kZQorICAgICAgICBBcmcucm9s
ZUNvZGUocm9sZSkKKyAgICBlbmQKIGVuZAogCiBjbGFzcyBPdmVybG9hZApAQCAtMTgyLDcgKzIx
Nyw3IEBAIGRlZiBsZXgoc3RyLCBmaWxlTmFtZSkKIGVuZAogCiBkZWYgaXNSb2xlKHRva2VuKQot
ICAgIHRva2VuID1+IC9cQSgoVSl8KEQpfChVRCl8KFpEKXwoVVpEKXwoVUEpfChTKSlcWi8KKyAg
ICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpfChaRCl8KFVaRCl8KFVBKXwoUyl8KEVEKXwoRVpE
KXwoTFUpKVxaLwogZW5kCiAKIGRlZiBpc0dGKHRva2VuKQpAQCAtMTkwLDcgKzIyNSw3IEBAIGRl
ZiBpc0dGKHRva2VuKQogZW5kCiAKIGRlZiBpc0tpbmQodG9rZW4pCi0gICAgdG9rZW4gPX4gL1xB
KChUbXApfChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KEFkZHIpfChJbmRleCl8
KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCkpXFovCisgICAgdG9rZW4gPX4gL1xBKChU
bXApfChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KEFkZHIpfChJbmRleCl8KFJl
bENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCl8KFN0YXR1c0NvbmQpKVxaLwogZW5kCiAKIGRl
ZiBpc0FyY2godG9rZW4pCkBAIC0yNjQsNyArMjk5LDcgQEAgY2xhc3MgUGFyc2VyCiAKICAgICBk
ZWYgY29uc3VtZUtpbmQKICAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCi0gICAgICAgIHBh
cnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0LCBU
bXAsIEFkZHIsIEluZGV4LCBSZWxDb25kLCBSZXNDb25kLCBvciBEb3VibGVDb25kKSIpIHVubGVz
cyBpc0tpbmQocmVzdWx0KQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0s
IEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVsQ29uZCwgUmVz
Q29uZCwgRG91YmxlQ29uZCwgb3IgU3RhdHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkK
ICAgICAgICAgYWR2YW5jZQogICAgICAgICByZXN1bHQKICAgICBlbmQKQEAgLTYzNCwyOCArNjY5
LDcgQEAgd3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
b3ZlcmxvYWQuc2lnbmF0dXJlLmVhY2hfd2l0aF9pbmRleCB7CiAgICAgICAgICAgICAgICAgfCBh
cmcsIGluZGV4IHwKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByb2xlID0gbmls
Ci0gICAgICAgICAgICAgICAgY2FzZSBhcmcucm9sZQotICAgICAgICAgICAgICAgIHdoZW4gIlUi
Ci0gICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlIgotICAgICAgICAgICAgICAgIHdoZW4g
IkQiCi0gICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiRGVmIgotICAgICAgICAgICAgICAgIHdo
ZW4gIlpEIgotICAgICAgICAgICAgICAgICAgICByb2xlID0gIlpEZWYiCi0gICAgICAgICAgICAg
ICAgd2hlbiAiVUQiCi0gICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlRGVmIgotICAgICAg
ICAgICAgICAgIHdoZW4gIlVaRCIKLSAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VaRGVm
IgotICAgICAgICAgICAgICAgIHdoZW4gIlVBIgotICAgICAgICAgICAgICAgICAgICByb2xlID0g
IlVzZUFkZHIiCi0gICAgICAgICAgICAgICAgd2hlbiAiUyIKLSAgICAgICAgICAgICAgICAgICAg
cm9sZSA9ICJTY3JhdGNoIgotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgcmFpc2UKLSAgICAgICAgICAgICAgICBlbmQKLQotICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiZnVuY3RvcihhcmdzWyN7aW5kZXh9XSwgQXJnOjoje3JvbGV9LCAje2FyZy5iYW5rfVAsICN7
YXJnLndpZHRoQ29kZX0pOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJn
c1sje2luZGV4fV0sIEFyZzo6I3thcmcucm9sZUNvZGV9LCAje2FyZy5iYW5rfVAsICN7YXJnLndp
ZHRoQ29kZX0pOyIKICAgICAgICAgICAgIH0KICAgICAgICAgZW5kCiAgICAgfQpAQCAtODE5LDYg
KzgzMyw3IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgIHdo
ZW4gIlJlbENvbmQiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKICAgICAgICAgICAg
ICAgICB3aGVuICJEb3VibGVDb25kIgorICAgICAgICAgICAgICAgIHdoZW4gIlN0YXR1c0NvbmQi
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByYWlzZSAiVW5leHBl
Y3RlZCBraW5kOiAje2tpbmQubmFtZX0iCiAgICAgICAgICAgICAgICAgZW5kCkBAIC0xMTA1LDYg
KzExMjAsOCBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZXN1bHRDb25kaXRpb24oKSIKICAgICAg
ICAgICAgICAgICB3aGVuICJEb3VibGVDb25kIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnBy
aW50ICJhcmdzWyN7aW5kZXh9XS5hc0RvdWJsZUNvbmRpdGlvbigpIgorICAgICAgICAgICAgICAg
IHdoZW4gIlN0YXR1c0NvbmQiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3Nb
I3tpbmRleH1dLmFzU3RhdHVzQ29uZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAg
ICAgICAgICB9CiAKQEAgLTExNDgsMjcgKzExNjUsNyBAQCBGaWxlLm9wZW4oIkpTQWlyX29wY29k
ZS5qcyIsICJ3IikgewogICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2Fk
LnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCiAgICAgICAgICAgICAg
ICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmVhY2hfd2l0aF9pbmRleCB7CiAgICAgICAgICAgICAgICAg
ICAgIHwgYXJnLCBpbmRleCB8Ci0gICAgICAgICAgICAgICAgICAgIHJvbGUgPSBuaWwKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBhcmcucm9sZQotICAgICAgICAgICAgICAgICAgICB3aGVuICJV
IgotICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2UiCi0gICAgICAgICAgICAgICAg
ICAgIHdoZW4gIkQiCi0gICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIKLSAgICAg
ICAgICAgICAgICAgICAgd2hlbiAiWkQiCi0gICAgICAgICAgICAgICAgICAgICAgICByb2xlID0g
IlpEZWYiCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gIlVEIgotICAgICAgICAgICAgICAgICAg
ICAgICAgcm9sZSA9ICJVc2VEZWYiCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gIlVaRCIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlWkRlZiIKLSAgICAgICAgICAgICAgICAg
ICAgd2hlbiAiVUEiCi0gICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZUFkZHIiCi0g
ICAgICAgICAgICAgICAgICAgIHdoZW4gIlMiCi0gICAgICAgICAgICAgICAgICAgICAgICByb2xl
ID0gIlNjcmF0Y2giCi0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpbnN0LnZpc2l0QXJnKCN7aW5kZXh9
LCBmdW5jLCBBcmcuI3tyb2xlfSwgI3thcmcuYmFua31QLCAje2FyZy53aWR0aH0pOyIKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpbnN0LnZpc2l0QXJnKCN7aW5kZXh9LCBmdW5jLCBB
cmcuI3thcmcucm9sZUNvZGV9LCAje2FyZy5iYW5rfVAsICN7YXJnLndpZHRofSk7IgogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKICAgICAgICAg
ICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302963</attachid>
            <date>2017-02-28 12:08:11 -0800</date>
            <delta_ts>2017-02-28 12:37:23 -0800</delta_ts>
            <desc>it&apos;s starting to compile</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>244163</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMiBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkwRjJDNjNDMDFFNjYwRUE3MDBDMTM4
MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCRjFFNjYwRUE1MDBDMTM4MzkgLyogQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAv
KiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkQ0RERCMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCAq
LzsgfTsKIAkJMEYyRDREREUxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERDMTk4MzJE
MzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRDRERTgxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhp
c1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJENERFNTE5ODMyREFDMDA3RDRCMTkgLyogVG9UaGlzU3RhdHVzLmNwcCAqLzsgfTsKQEAg
LTIyNDMsOCArMjI0OSw2IEBACiAJCURDMjE0MzA4MUNBMzJFNTgwMDBBODg2OSAvKiBJQ1N0YXRz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMjE0
MzA1MUNBMzJFNTIwMDBBODg2OSAvKiBJQ1N0YXRzLmNwcCAqLzsgfTsKIAkJREMzRDJCMEExRDM0
MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBEQzNEMkIwOTFEMzQzMTYxMDBCQTkxOEMgLyogSGVhcENlbGwuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEQzNEMkIw
QzFEMzQzNzcwMDBCQTkxOEMgLyogSGVhcENlbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8qIEhlYXBD
ZWxsLmNwcCAqLzsgfTsKLQkJREM0NTRCOEMxRDAwRTgyMjAwNEMxOEFGIC8qIEFpckR1bXBBc0pT
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNDU0
QjhBMUQwMEU4MUYwMDRDMThBRiAvKiBBaXJEdW1wQXNKUy5jcHAgKi87IH07Ci0JCURDNDU0QjhE
MUQwMEU4MjQwMDRDMThBRiAvKiBBaXJEdW1wQXNKUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREM0NTRCOEIxRDAwRTgxRjAwNEMxOEFGIC8qIEFpckR1
bXBBc0pTLmggKi87IH07CiAJCURDNjA1QjVEMUNFMjZFQTAwMDU5MzcxOCAvKiBQcm9maWxlckV2
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERD
NjA1QjU5MUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmNwcCAqLzsgfTsKIAkJREM2
MDVCNUUxQ0UyNkVBMjAwNTkzNzE4IC8qIFByb2ZpbGVyRXZlbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjVBMUNFMjZFOTgwMDU5MzcxOCAv
KiBQcm9maWxlckV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJREM2MDVCNUYxQ0UyNkVBNTAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjVCMUNF
MjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlclVJRC5jcHAgKi87IH07CkBAIC0yNzY0LDYgKzI3Njgs
MTIgQEAKIAkJMEYyQzYzQUMxRTYwQUUzQzAwQzEzODM5IC8qIEIzQmFuay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhbmsuaDsgcGF0aCA9IGIzL0IzQmFuay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNjNBRDFFNjBBRTNDMDBDMTM4MzkgLyogQjNX
aWR0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dpZHRoLmNw
cDsgcGF0aCA9IGIzL0IzV2lkdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjJDNjNBRTFFNjBBRTNEMDBDMTM4MzkgLyogQjNXaWR0aC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1dpZHRoLmg7IHBhdGggPSBiMy9CM1dpZHRoLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1Zh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQXRvbWljVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNBdG9taWNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQXRvbWljVmFsdWUuaDsgcGF0aCA9IGIz
L0IzQXRvbWljVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjUx
RTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBh
dGggPSBiMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJDNjNCOTFFNjM0NDA4MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25T
ZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQmxvY2tJbnNl
cnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFp
ckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQkYxRTY2MEVBNTAwQzEzODM5
IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkQ0RERCMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJENEREQzE5ODMyRDM0MDA3RDRCMTkg
LyogRGVidWdnZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1
Z2dlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkQ0RERGMTk4MzJE
OTEwMDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlw
ZVByb2ZpbGVyTG9nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3NzgsOCAr
NDc4OCw2IEBACiAJCURDMjE0MzA2MUNBMzJFNTIwMDBBODg2OSAvKiBJQ1N0YXRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElDU3RhdHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJREMzRDJCMDkxRDM0MzE2MTAwQkE5MThDIC8qIEhlYXBDZWxsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBDZWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCURDM0QyQjBCMUQzNDM3NkUwMEJBOTE4QyAvKiBIZWFwQ2VsbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwQ2VsbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURDNDU0QjhBMUQwMEU4MUYwMDRDMThBRiAvKiBBaXJEdW1w
QXNKUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJEdW1wQXNK
Uy5jcHA7IHBhdGggPSBiMy9haXIvQWlyRHVtcEFzSlMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlEQzQ1NEI4QjFEMDBFODFGMDA0QzE4QUYgLyogQWlyRHVtcEFzSlMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRHVtcEFzSlMuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJEdW1wQXNKUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzYwNUI1OTFD
RTI2RTk4MDA1OTM3MTggLyogUHJvZmlsZXJFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlckV2ZW50LmNwcDsgcGF0aCA9IHByb2ZpbGVyL1Byb2Zp
bGVyRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzYwNUI1QTFDRTI2
RTk4MDA1OTM3MTggLyogUHJvZmlsZXJFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBQcm9maWxlckV2ZW50Lmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURDNjA1QjVCMUNFMjZFOTgwMDU5MzcxOCAv
KiBQcm9maWxlclVJRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQ
cm9maWxlclVJRC5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlclVJRC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjkyLDYgKzUzMDAsOCBAQAogCQkJCTBGRUM4NEIzMUJE
QUNEODgwMDgwRkY3NCAvKiBhaXIgKi8sCiAJCQkJMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovLAorCQkJCTBGMkM2M0IzMUU2MzQzRTgwMEMxMzgz
OSAvKiBCM0F0b21pY1ZhbHVlLmNwcCAqLywKKwkJCQkwRjJDNjNCNDFFNjM0M0U4MDBDMTM4Mzkg
LyogQjNBdG9taWNWYWx1ZS5oICovLAogCQkJCTBGMkM2M0FCMUU2MEFFM0MwMEMxMzgzOSAvKiBC
M0JhbmsuY3BwICovLAogCQkJCTBGMkM2M0FDMUU2MEFFM0MwMEMxMzgzOSAvKiBCM0JhbmsuaCAq
LywKIAkJCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCAqLywK
QEAgLTUzNTQsNiArNTM2NCw3IEBACiAJCQkJMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
RnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
R2VuZXJhdGUuY3BwICovLAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVy
YXRlLmggKi8sCisJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAv
KiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIz
SGVhcFJhbmdlLmggKi8sCkBAIC01NDY5LDYgKzU0ODAsOCBAQAogCQkJCTBGNjRFQUYyMUM0RUNE
MDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggKi8sCiAJCQkJMEZFQzg1NEMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCisJCQkJMEYyQzYzQjkxRTYzNDQwODAwQzEzODM5
IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkwRjJDNjNCQTFFNjM0NDA4MDBD
MTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRkIzODc4QjFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oICovLAogCQkJCTBGNjE4MzIwMUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovLAogCQkJCTBGNjE4MzIxMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCAqLywKQEAgLTU0ODAsOCAr
NTQ5Myw2IEBACiAJCQkJMEYxMEYxQTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICov
LAogCQkJCTc5QUJCMTdCMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuY3BwICov
LAogCQkJCTc5QUJCMTdDMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCAqLywK
LQkJCQlEQzQ1NEI4QTFEMDBFODFGMDA0QzE4QUYgLyogQWlyRHVtcEFzSlMuY3BwICovLAotCQkJ
CURDNDU0QjhCMUQwMEU4MUYwMDRDMThBRiAvKiBBaXJEdW1wQXNKUy5oICovLAogCQkJCTBGNDU3
MDM2MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAgKi8sCiAJCQkJ
MEY0NTcwMzcxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggKi8sCiAJ
CQkJMEY2MTgzMjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLywKQEAg
LTczMjYsNiArNzMzNyw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTBGMUZFNTFCMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oICovLAorCQkJCTBG
MkM2M0JGMUU2NjBFQTUwMEMxMzgzOSAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcCAqLywK
IAkJCQk4NjAxNjFERjBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
ICovLAogCQkJCTBGMzczMDkwMUMwQ0Q3MEMwMDA1MkJGQSAvKiBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UuaCAqLywKIAkJCQk4NjQwOTIzQjE1NkVFRDNCMDA1NjZDQjIgLyogQVJNNjRB
c3NlbWJsZXIuaCAqLywKQEAgLTczNTQsOCArNzM2Niw4IEBACiAJCQkJODZDNTY4REUxMUEyMTNF
RTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovLAogCQkJCUZFNjhDNjM1MUI5MERE
RDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICovLAogCQkJCUZFNjhDNjM2
MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCAqLywKLQkJCQk4NjAx
NjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQk4NjAx
NjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLywKKwkJCQk4
NjAxNjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQlB
N0E0QUUwNzE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICov
LAogCQkJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oICovLAogCQkJCTY1ODYwMTc3MTg1QThGNUUwMDAzMEVFRSAvKiBNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oICovLApAQCAtNzk0Myw3ICs3OTU1LDYgQEAKIAkJCQkwRkVDODU3NDFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYxMEYxQTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJREM0NTRCOEQxRDAwRTgyNDAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjQ1NzAzOTFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjE4MzJEMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0
U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8q
IEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFkZXJzICovLApAQCAtNzk1Niw2ICs3OTY3LDcg
QEAKIAkJCQkwRkVDODU4MDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFQzg1ODExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkRGNjdENzFEOURDNDQyMDAxQjk4MjUgLyogQWlyS2luZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQkMxRTYzNDQwQzAwQzEzODM5IC8qIEFpckJsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjg0RDQzODFDMDAxNjFDMDA4MUQ2NjMg
LyogQWlyTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTM0QzFBMUM0QjM5QUUwMDAz
QTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYx
ODMyRjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggaW4gSGVhZGVy
cyAqLywKQEAgLTgwNDcsNiArODA1OSw3IEBACiAJCQkJNDM0MjJBNjMxQzE1OEU2RDAwRTJFQjk4
IC8qIEIzQ29uc3RGbG9hdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODVCMzFCREVE
OTU3MDA4MEZGNzQgLyogQjNDb25zdFB0clZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
OERGNjFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJDNjNCODFFNjM0M0Y3MDBDMTM4MzkgLyogQjNHZW5lcmljQmxvY2tJbnNlcnRp
b25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTBFMUJGMDI3NkMwMDEzQzg4RiAvKiBC
M0RhdGFTZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzRkNGQzFDMTYyNUJFMDAzMjNG
NjcgLyogQjNEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCOEFEOTFDNEVEREEy
MDA5NjkwNTIgLyogQjNEdXBsaWNhdGVUYWlscy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzY2LDYg
KzgzNzksNyBAQAogCQkJCTBGMzkyQzhBMUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6
ei5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVFMTcxNzhF
NzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkM2M0I3MUU2MzQzRUQwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjYyMzc5ODFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZH
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzkyLDYgKzk4MDYsNyBAQAogCQkJ
YnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTBGRkE1NDk3
MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
MkM2M0MwMUU2NjBFQTcwMEMxMzgzOSAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUFENDkzN0MzMUREQkU2MTQwMDc3QzgwNyAvKiBBYnN0cmFjdE1vZHVs
ZVJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1RjBGNDE0RDEwNjM5MDBBQzc2NDkg
LyogQWJzdHJhY3RQQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzcwQjRGNTFCRjI2MjAyMDA1
QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTk4MDIsNyArOTgxNyw2IEBACiAJCQkJMEZFQzg1NzMxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVD
ODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjYxODMyQjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCURDNDU0QjhDMUQwMEU4MjIwMDRDMThBRiAvKiBBaXJEdW1wQXNKUy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjQ1NzAzODFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENv
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2MTgzMkMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFp
ckVtaXRTaHVmZmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNERFMUNFMUM0QzFCNTQwMDRE
NkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAyNDgs
NiArMTAyNjIsNyBAQAogCQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXpl
VGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVB
RCAvKiBJbmplY3RlZFNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2
ODQ0MDBGM0M3Q0IgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMkM2M0I2MUU2MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1OEUzNTkxMTg2MERFQ0YwMDFGMjRGRSAvKiBJbmplY3RlZFNjcmlwdEhvc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1Q0ExODVGOTYyNDAwN0U5NUFEIC8qIEluamVj
dGVkU2NyaXB0TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTg0MEUyMDE4N0I3Qjg2
MDA4NDNCMTAgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0x
MDI2Niw2ICsxMDI4MSw3IEBACiAJCQkJRTM1RTAzNUYxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMyNDM4
QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1l
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQzYzQkIxRTYzNDQwQTAwQzEzODM5IC8q
IEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NTE2NUQyMUJE
RjBCOTgwMDNCNzVDMSAvKiBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1OTNDRjgyMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1ZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0YxMDdFQzM3NjAwNDI3QTQ4IC8qIEludGVy
bmFsRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIiAvLyBIYXZlIHRvIGJyZWFrIHdpdGgg
c3R5bGUgYmVjYXVzZSBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggaXMgYSBzaGFkeSBoZWFkZXIu
CisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJhc2U6OlN0
YXR1c0NvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAg
ICBjYXNlIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJCYXNlOjpTdWNjZXNzOgorICAgICAgICBvdXQu
cHJpbnQoIlN1Y2Nlc3MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlckJhc2U6OkZhaWx1cmU6CisgICAgICAgIG91dC5wcmludCgiRmFpbHVyZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3Jh
cGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNp
bmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvV2Vha1JhbmRvbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTUwLDggKzUxLDI4
IEBAIG5hbWVzcGFjZSBERkcgewogc3RydWN0IE9TUkV4aXQ7CiB9CiAKK2NsYXNzIEFic3RyYWN0
TWFjcm9Bc3NlbWJsZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXR1c0NvbmRpdGlvbiB7
CisgICAgICAgIFN1Y2Nlc3MsCisgICAgICAgIEZhaWx1cmUKKyAgICB9OworICAgIAorICAgIHN0
YXRpYyBTdGF0dXNDb25kaXRpb24gaW52ZXJ0KFN0YXR1c0NvbmRpdGlvbiBjb25kaXRpb24pCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbikgeworICAgICAgICBjYXNlIFN1Y2Nlc3M6
CisgICAgICAgICAgICByZXR1cm4gRmFpbHVyZTsKKyAgICAgICAgY2FzZSBGYWlsdXJlOgorICAg
ICAgICAgICAgcmV0dXJuIFN1Y2Nlc3M7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3M7CisgICAgfQorfTsKKwog
dGVtcGxhdGUgPGNsYXNzIEFzc2VtYmxlclR5cGUsIGNsYXNzIE1hY3JvQXNzZW1ibGVyVHlwZT4K
LWNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIgeworY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2Vt
YmxlciA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyQmFzZSB7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGUsIE1hY3JvQXNzZW1i
bGVyVHlwZT4gQWJzdHJhY3RNYWNyb0Fzc2VtYmxlclR5cGU7CiAgICAgdHlwZWRlZiBBc3NlbWJs
ZXJUeXBlIEFzc2VtYmxlclR5cGVfVDsKQEAgLTExMDgsMyArMTEyOSwxNiBAQCBBYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGUsIE1hCiAjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxF
UikKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorCituYW1l
c3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXJCYXNlOjpTdGF0dXND
b25kaXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShBU1NF
TUJMRVIpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEz
Niw2ICsxMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0d29Ub1RoZTMy
OyAvLyBUaGlzIGlzIHN1cGVyIHVzZWZ1bCBmb3Igc29tZSBkb3VibGUgY29kZS4KIAogICAgIC8v
IFV0aWxpdGllcyB1c2VkIGJ5IHRoZSBERkcgSklULgorICAgIHVzaW5nIEFic3RyYWN0TWFjcm9B
c3NlbWJsZXJCYXNlOjppbnZlcnQ7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjppbnZl
cnQ7CiAgICAgCiAgICAgc3RhdGljIERvdWJsZUNvbmRpdGlvbiBpbnZlcnQoRG91YmxlQ29uZGl0
aW9uIGNvbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNTEsMTYgKzI1MSw3MSBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fYXNzZW1ibGVyLmFuZGxfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAg
ICB9CiAKKyAgICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDE2KFJl
Z2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5h
bmR3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBh
bmQxNihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5hbmR3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwg
ZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ4KFJlZ2lzdGVySUQgc3JjLCBBZGRy
ZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRiX3JtKHNyYywgZGVzdC5v
ZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ4KFJlZ2lzdGVySUQgc3Jj
LCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGJfcm0oc3Jj
LCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9
CisKICAgICB2b2lkIGFuZDMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsK
ICAgICB9CiAKKyAgICB2b2lkIGFuZDMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2Us
IHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIGFuZDMyKFRy
dXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1fYXNzZW1i
bGVyLmFuZGxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwog
ICAgIH0KIAorICAgIHZvaWQgYW5kMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX2ltKGltbS5tX3ZhbHVlLCBhZGRy
ZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsK
KyAgICB9CisKKyAgICB2b2lkIGFuZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHdfaW0oc3RhdGljX2Nhc3Q8aW50MTZf
dD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisK
KyAgICB2b2lkIGFuZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kd19pbShzdGF0aWNfY2FzdDxpbnQxNl90PihpbW0u
bV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFk
ZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgYW5kOChUcnVzdGVkSW1tMzIgaW1tLCBB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRiX2ltKHN0YXRp
Y19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRiX2ltKHN0YXRpY19jYXN0PGlu
dDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIGFuZDMyKFJlZ2lzdGVy
SUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAg
aWYgKG9wMSA9PSBvcDIpCkBAIC00NTYsNiArNTExLDMxIEBAIHB1YmxpYzoKICAgICAgICAgbV9h
c3NlbWJsZXIubmVnbF9tKHNyY0Rlc3Qub2Zmc2V0LCBzcmNEZXN0LmJhc2UpOwogICAgIH0KIAor
ICAgIHZvaWQgbmVnMzIoQmFzZUluZGV4IHNyY0Rlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5uZWdsX20oc3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3QuYmFzZSwgc3JjRGVzdC5pbmRleCwg
c3JjRGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBuZWcxNihBZGRyZXNzIHNyY0Rlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWd3X20oc3JjRGVzdC5vZmZzZXQsIHNyY0Rl
c3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBuZWcxNihCYXNlSW5kZXggc3JjRGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZ3dfbShzcmNEZXN0Lm9mZnNldCwgc3JjRGVzdC5i
YXNlLCBzcmNEZXN0LmluZGV4LCBzcmNEZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIG5l
ZzgoQWRkcmVzcyBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubmVnYl9tKHNy
Y0Rlc3Qub2Zmc2V0LCBzcmNEZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgbmVnOChCYXNl
SW5kZXggc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZ2JfbShzcmNEZXN0
Lm9mZnNldCwgc3JjRGVzdC5iYXNlLCBzcmNEZXN0LmluZGV4LCBzcmNEZXN0LnNjYWxlKTsKKyAg
ICB9CisKICAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAg
ICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9ycihzcmMsIGRlc3QpOwpAQCAtNDcxLDE2ICs1
NTEsNzEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5vcmxfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMs
IEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JsX3JtKHNyYywg
ZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQor
CisgICAgdm9pZCBvcjE2KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5vcndfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAg
ICB9CisKKyAgICB2b2lkIG9yMTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjgoUmVnaXN0
ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9y
bShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgb3I4KFJl
Z2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2Nh
bGUpOworICAgIH0KKwogICAgIHZvaWQgb3IzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNl
LCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIG9yMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JsX21yKHNyYy5vZmZzZXQsIHNy
Yy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBv
cjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLm9ybF9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JsX2ltKGltbS5tX3ZhbHVlLCBh
ZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxl
KTsKKyAgICB9CisKKyAgICB2b2lkIG9yMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X2ltKHN0YXRpY19jYXN0PGludDE2
X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQor
CisgICAgdm9pZCBvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5t
X3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRk
cmVzcy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JiX2ltKHN0YXRpY19j
YXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
KyAgICB9CisKKyAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShzdGF0aWNfY2FzdDxpbnQ4X3Q+
KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRl
eCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBvcjMyKFJlZ2lzdGVySUQgb3Ax
LCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKG9w
MSA9PSBvcDIpCkBAIC02NTQsMTYgKzc4OSw3MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1i
bGVyLnN1YmxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwog
ICAgIH0KIAorICAgIHZvaWQgc3ViMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19pbShzdGF0aWNfY2FzdDxpbnQxNl90
PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKwor
ICAgIHZvaWQgc3ViOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFs
dWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1
YjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuc3VibF9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBz
dWIxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLnN1YndfaW0oc3RhdGljX2Nhc3Q8aW50MTZfdD4oaW1tLm1fdmFsdWUpLCBh
ZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxl
KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX2ltKHN0YXRpY19jYXN0PGlu
dDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHN1YjMyKEFkZHJlc3Mg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX21y
KHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjMyKEJh
c2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LnN1YmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0
KTsKKyAgICB9CisKICAgICB2b2lkIHN1YjMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3Qp
CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRl
c3QuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdWIxNihSZWdpc3RlcklEIHNyYywgQWRkcmVz
cyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19ybShzcmMsIGRlc3Qub2Zm
c2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgc3ViOChSZWdpc3RlcklEIHNyYywg
QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3ViYl9ybShzcmMsIGRl
c3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoUmVnaXN0ZXJJ
RCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9y
bShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwor
ICAgIH0KKworICAgIHZvaWQgc3ViMTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0
LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgc3ViOChS
ZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5zdWJiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5z
Y2FsZSk7CisgICAgfQorCiAgICAgdm9pZCB4b3IzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9ycihzcmMsIGRlc3QpOwpA
QCAtNjc3LDYgKzg2Nyw1MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3Js
X2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2
b2lkIHhvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAg
ICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm90bF9t
KGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JsX2ltKGltbS5tX3ZhbHVlLCBkZXN0
Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAg
ICB2b2lkIHhvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAg
ICAgIGltbS5tX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50MTZfdD4oaW1tLm1fdmFsdWUpOworICAg
ICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3R3
X20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnhvcndfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwor
ICAgIH0KKworICAgIHZvaWQgeG9yMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3Qp
CisgICAgeworICAgICAgICBpbW0ubV92YWx1ZSA9IHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5t
X3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Qu
c2NhbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3J3X2ltKGlt
bS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxl
KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBkZXN0
KQorICAgIHsKKyAgICAgICAgaW1tLm1fdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5t
X3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIubm90Yl9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JiX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwg
ZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgoVHJ1c3RlZEltbTMyIGltbSwgQmFz
ZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBpbW0ubV92YWx1ZSA9IHN0YXRpY19jYXN0PGlu
dDhfdD4oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gLTEpCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5ub3RiX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5p
bmRleCwgZGVzdC5zY2FsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnhvcmJfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgs
IGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgeG9yMzIoVHJ1c3RlZEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQpA
QCAtNjkwLDExICs5MjQsNDEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci54b3JsX3Jt
KHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCB4b3IzMihS
ZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci54b3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5z
Y2FsZSk7CisgICAgfQorCisgICAgdm9pZCB4b3IxNihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBk
ZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yd19ybShzcmMsIGRlc3Qub2Zmc2V0
LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9yMTYoUmVnaXN0ZXJJRCBzcmMsIEJh
c2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yd19ybShzcmMsIGRl
c3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwor
ICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIueG9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAg
IH0KKworICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci54b3JiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCB4b3IzMihBZGRy
ZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIueG9y
bF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CiAgICAgfQogICAgIAorICAgIHZvaWQg
eG9yMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIueG9ybF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgc3JjLmluZGV4LCBzcmMuc2Nh
bGUsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIHhvcjMyKFJlZ2lzdGVySUQgb3AxLCBS
ZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKG9wMSA9
PSBvcDIpCkBAIC03NDEsNiArMTAwNSwzMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVy
Lm5vdGxfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIG5vdDMy
KEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm90bF9tKGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAg
IHZvaWQgbm90MTYoQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm90
d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgbm90MTYoQmFz
ZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ub3R3X20oZGVzdC5vZmZz
ZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9p
ZCBub3Q4KEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vdGJfbShk
ZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG5vdDgoQmFzZUluZGV4
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ub3RiX20oZGVzdC5vZmZzZXQsIGRl
c3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBzcXJ0
RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAg
ICBtX2Fzc2VtYmxlci5zcXJ0c2RfcnIoc3JjLCBkc3QpOwpAQCAtMjc0MywxMjEgKzMwMzIsNzg3
IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwogICAgICAgICBtX2Fzc2Vt
Ymxlci5vcmxfaW0oMCwgMCwgWDg2UmVnaXN0ZXJzOjplc3ApOwogICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1N0cm9uZ0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhw
ZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywgUmVn
aXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMoY29uZCwgZXhw
ZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2Jfcm0obmV3
VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CiAKLSAgICAv
LyBXZSB0YWtlIHRoaXMgdG8gbWVhbiB0aGF0IGl0IHByZXZlbnRzIG1vdGlvbiBvZiBub3JtYWwg
c3RvcmVzLiBTbywgaXQncyBhIG5vLW9wIG9uIHg4Ni4KLSAgICB2b2lkIHN0b3JlRmVuY2UoKQor
ICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJl
c3MsIFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNv
bmQsIGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdi
X3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4
LCBhZGRyZXNzLnNjYWxlKTsgfSk7CiAgICAgfQogCi0gICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1l
YW4gdGhhdCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9ybWFsIGxvYWRzLiBTbywgaXQncyBhIG5v
LW9wIG9uIHg4Ni4KLSAgICB2b2lkIGxvYWRGZW5jZSgpCisgICAgdm9pZCBhdG9taWNTdHJvbmdD
QVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwg
UmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkK
ICAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwg
cmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGxh
Y2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRp
b25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2KFN0YXR1c0Nv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5l
d1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgewotICAg
ICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1
dGFibGVBZGRyZXNzKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAg
ICBhdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsg
bV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9Ci0gICAgCi0g
ICAgc3RhdGljIHB0cmRpZmZfdCBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKKworICAgIHZvaWQg
YXRvbWljU3Ryb25nQ0FTMzIoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0
ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0
ZXJJRCByZXN1bHQpCiAgICAgewotICAgICAgICByZXR1cm4gWDg2QXNzZW1ibGVyOjptYXhKdW1w
UmVwbGFjZW1lbnRTaXplKCk7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3Rl
ZEFuZFJlc3VsdCwgcmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnbF9ybShuZXdWYWx1
ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOwogICAgIH0KIAotICAgIHN0YXRp
YyBwdHJkaWZmX3QgcGF0Y2hhYmxlSnVtcFNpemUoKQorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FT
MzIoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJl
Z2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6OnBhdGNoYWJsZUp1bXBTaXplKCk7
CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgcmVzdWx0
LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOwogICAgIH0K
IAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFJvdW5kaW5nKCkKKyAgICB2
b2lkIGF0b21pY1N0cm9uZ0NBUzgoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0
ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgaWYgKHNfc3Nl
NF8xQ2hlY2tTdGF0ZSA9PSBDUFVJRENoZWNrU3RhdGU6Ok5vdENoZWNrZWQpCi0gICAgICAgICAg
ICB1cGRhdGVFYXgxRWN4RmxhZ3MoKTsKLSAgICAgICAgcmV0dXJuIHNfc3NlNF8xQ2hlY2tTdGF0
ZSA9PSBDUFVJRENoZWNrU3RhdGU6OlNldDsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVj
dGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOwogICAgIH0KIAotICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzQVZYKCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzgoUmVnaXN0ZXJJRCBleHBl
Y3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCiAg
ICAgewotICAgICAgICAvLyBBVlggc3RpbGwgY2F1c2VzIG15c3RlcmlvdXMgcmVncmVzc2lvbnMg
YW5kIHRob3NlIHJlZ3Jlc3Npb25zIGNhbiBiZSBtYXNzaXZlLgotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9h
c3NlbWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCB1cGRhdGVFYXgxRWN4RmxhZ3MoKQorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMTYo
UmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVz
cyBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgaW50IGZsYWdzID0gMDsKLSNpZiBDT01QSUxFUihN
U1ZDKQotICAgICAgICBpbnQgY3B1SW5mb1s0XTsKLSAgICAgICAgX19jcHVpZChjcHVJbmZvLCAw
eDEpOwotICAgICAgICBmbGFncyA9IGNwdUluZm9bMl07Ci0jZWxpZiBDT01QSUxFUihHQ0NfT1Jf
Q0xBTkcpCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgYXNtICgKLSAgICAgICAgICAgICJtb3Zs
ICQweDEsICUlZWF4OyIKLSAgICAgICAgICAgICJjcHVpZDsiCi0gICAgICAgICAgICAibW92bCAl
JWVjeCwgJTA7IgotICAgICAgICAgICAgOiAiPWciIChmbGFncykKLSAgICAgICAgICAgIDoKLSAg
ICAgICAgICAgIDogIiVlYXgiLCAiJWVieCIsICIlZWN4IiwgIiVlZHgiCi0gICAgICAgICAgICAp
OwotI2Vsc2UKLSAgICAgICAgYXNtICgKLSAgICAgICAgICAgICJtb3ZsICQweDEsICUlZWF4OyIK
LSAgICAgICAgICAgICJwdXNobCAlJWVieDsiCi0gICAgICAgICAgICAiY3B1aWQ7IgotICAgICAg
ICAgICAgInBvcGwgJSVlYng7IgotICAgICAgICAgICAgIm1vdmwgJSVlY3gsICUwOyIKLSAgICAg
ICAgICAgIDogIj1nIiAoZmxhZ3MpCi0gICAgICAgICAgICA6Ci0gICAgICAgICAgICA6ICIlZWF4
IiwgIiVlY3giLCAiJWVkeCIKLSAgICAgICAgICAgICk7Ci0jZW5kaWYKLSNlbmRpZiAvLyBDT01Q
SUxFUihHQ0NfT1JfQ0xBTkcpCi0gICAgICAgIHNfc3NlNF8xQ2hlY2tTdGF0ZSA9IChmbGFncyAm
ICgxIDw8IDE5KSkgPyBDUFVJRENoZWNrU3RhdGU6OlNldCA6IENQVUlEQ2hlY2tTdGF0ZTo6Q2xl
YXI7Ci0gICAgICAgIHNfYXZ4Q2hlY2tTdGF0ZSA9IChmbGFncyAmICgxIDw8IDI4KSkgPyBDUFVJ
RENoZWNrU3RhdGU6OlNldCA6IENQVUlEQ2hlY2tTdGF0ZTo6Q2xlYXI7CisgICAgICAgIGF0b21p
Y1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3df
cm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKICAgICB9CiAK
LSNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLSAgICB2b2lkIHByb2JlKFByb2JlRnVuY3Rpb24sIHZv
aWQqIGFyZzEsIHZvaWQqIGFyZzIpOwotI2VuZGlmIC8vIEVOQUJMRShNQVNNX1BST0JFKQorICAg
IHZvaWQgYXRvbWljU3Ryb25nQ0FTMTYoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVn
aXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBhdG9t
aWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3
X3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4
LCBhZGRyZXNzLnNjYWxlKTsgfSk7CisgICAgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgWDg2QXNzZW1i
bGVyOjpDb25kaXRpb24geDg2Q29uZGl0aW9uKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCkKKyAg
ICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJl
Z2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxYODZBc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CisgICAgICAgIGF0
b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNo
Z2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKICAgICB9
CiAKLSAgICBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbiB4ODZDb25kaXRpb24oUmVzdWx0Q29uZGl0
aW9uIGNvbmQpCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVMzMihSZWdpc3RlcklEIGV4cGVjdGVk
QW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykKICAgICB7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxYODZBc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29u
ZCk7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9h
c3NlbWJsZXIuY21weGNoZ2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9CiAKLSAgICB2b2lk
IHNldDMyKFg4NkFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRk
cmVzcykKICAgICB7Ci0jaWYgQ1BVKFg4NikKLSAgICAgICAgLy8gT24gMzItYml0IHg4NiB3ZSBj
YW4gb25seSBzZXQgdGhlIGZpcnN0IDQgcmVnaXN0ZXJzOwotICAgICAgICAvLyBlc3AuLmVkaSBh
cmUgbWFwcGVkIHRvIHRoZSAnaCcgcmVnaXN0ZXJzIQotICAgICAgICBpZiAoZGVzdCA+PSA0KSB7
Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ycihkZXN0LCBYODZSZWdpc3RlcnM6OmVh
eCk7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5zZXRDQ19yKGNvbmQsIFg4NlJlZ2lzdGVyczo6
ZWF4KTsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnpibF9ycihYODZSZWdpc3RlcnM6OmVh
eCwgWDg2UmVnaXN0ZXJzOjplYXgpOwotICAgICAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcnIo
ZGVzdCwgWDg2UmVnaXN0ZXJzOjplYXgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0jZW5kaWYKLSAgICAgICAgbV9hc3NlbWJsZXIuc2V0Q0Nfcihjb25kLCBkZXN0KTsKLSAgICAg
ICAgbV9hc3NlbWJsZXIubW92emJsX3JyKGRlc3QsIGRlc3QpOworICAgICAgICByZXR1cm4gYnJh
bmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2Vt
Ymxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7
IH0pOwogICAgIH0KIAotICAgIHZvaWQgY21vdihYODZBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIEp1bXAgYnJhbmNoQXRvbWlj
U3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJl
c3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCiAgICAgewotI2lm
IENQVShYODZfNjQpCi0gICAgICAgIG1fYXNzZW1ibGVyLmNtb3ZxX3JyKGNvbmQsIHNyYywgZGVz
dCk7Ci0jZWxzZQotICAgICAgICBtX2Fzc2VtYmxlci5jbW92bF9ycihjb25kLCBzcmMsIGRlc3Qp
OwotI2VuZGlmCisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwgZXhw
ZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1ZhbHVlLCBh
ZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxl
KTsgfSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNMWkNOVCgpCisgICAgSnVt
cCBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBl
Y3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aEF0b21pY1N0cm9uZ0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVj
dGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRB
bmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3JtKG5ld1ZhbHVlLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVMzMihTdGF0dXNDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1
ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0
cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNo
Z2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNl
SW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdD
QVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdsX3Jt
KG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBh
ZGRyZXNzLnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FTOChTdGF0
dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJ
RCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7Cisg
ICAgICAgIGF0b21pY1N0cm9uZ0NBUzgoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVl
LCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgYXRvbWljV2Vha0NBUzgoU3Rh
dHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVy
SUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7
CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzgoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1Zh
bHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgYXRvbWljV2Vha0NBUzE2
KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdp
c3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAg
IHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMTYoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5l
d1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgYXRvbWljV2Vha0NB
UzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBS
ZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQp
CisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBlY3RlZEFuZFJlc3Vs
dCwgbmV3VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNX
ZWFrQ0FTMzIoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1
bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMzMihjb25kLCBleHBlY3RlZEFuZFJl
c3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhdG9t
aWNXZWFrQ0FTMzIoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRS
ZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklE
IHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzMyKGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaEF0b21pY1dlYWtDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTOChjb25kLCBleHBlY3Rl
ZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
QXRvbWljV2Vha0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRB
bmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzgoY29uZCwgZXhwZWN0ZWRBbmRS
ZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21p
Y1dlYWtDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJl
c3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzE2KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0
LCBuZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFr
Q0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQs
IFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzE2KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBu
ZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FT
MzIoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJl
Z2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVy
biBicmFuY2hBdG9taWNTdHJvbmdDQVMzMihjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFs
dWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljV2Vha0NBUzMyKFN0
YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3Rl
cklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBi
cmFuY2hBdG9taWNTdHJvbmdDQVMzMihjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUs
IGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDgoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICBhZGQ4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRv
bWljQWRkOChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChpbW0sIGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDgoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChy
ZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDgoUmVnaXN0ZXJJ
RCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBhZGQ4KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQg
YXRvbWljQWRkMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQxNihpbW0sIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBhZGQxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDE2
KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIGFkZDE2KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQWRkMTYoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQxNihyZWcsIGFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDMyKFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgYWRkMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNBZGQzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkMzIoaW1tLCBhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQzMihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQz
MihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDMyKFJlZ2lz
dGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvY2soKTsKKyAgICAgICAgYWRkMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNTdWI4KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViOChpbW0sIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjgoVHJ1c3RlZEltbTMyIGltbSwgQmFz
ZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIHN1YjgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWI4
KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIHN1YjgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNTdWI4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViOChyZWcsIGFkZHJl
c3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjE2KFRydXN0ZWRJbW0zMiBpbW0s
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgc3ViMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNT
dWIxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNTdWIxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWIxNihy
ZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjE2KFJlZ2lzdGVy
SUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgc3ViMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNTdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjMyKGltbSwgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFz
ZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIHN1YjMyKGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3Vi
MzIoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBhdG9taWNTdWIzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjMyKHJlZywg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kOChUcnVzdGVkSW1tMzIg
aW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIGFuZDgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNBbmQ4KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ4KGltbSwgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ4KHJl
ZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kOChSZWdpc3RlcklE
IHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIGFuZDgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNBbmQxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDE2KGltbSwgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUlu
ZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IGFuZDE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMTYo
UmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgYW5kMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNBbmQxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDE2KHJlZywgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMzIoVHJ1c3RlZEltbTMyIGlt
bSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBhbmQzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y0FuZDMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQzMihpbW0sIGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDMy
KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMzIoUmVnaXN0
ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBhbmQzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY09yOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yOChpbW0sIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yOChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5k
ZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
b3I4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I4KFJlZ2lz
dGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIG9yOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY09yOChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yOChyZWcsIGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjE2
KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3IxNihUcnVzdGVk
SW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvY2soKTsKKyAgICAgICAgb3IxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY09yMTYoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3IxNihyZWcsIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yMTYoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRl
eCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBv
cjE2KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3IzMihUcnVz
dGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIG9yMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNPcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjMyKGltbSwgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3IzMihSZWdpc3RlcklEIHJlZywgQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBvcjMyKHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3IzMihS
ZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIG9yMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNYb3I4KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yOChpbW0sIGFkZHJl
c3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjgoVHJ1c3RlZEltbTMyIGltbSwg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIHhvcjgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNY
b3I4KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBhdG9taWNYb3I4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yOChyZWcsIGFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjE2KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgeG9yMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNYb3IxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yMTYoaW1tLCBhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3IxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3Ix
NihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjE2KFJlZ2lz
dGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvY2soKTsKKyAgICAgICAgeG9yMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNYb3IzMihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjMyKGltbSwgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMzIoVHJ1c3RlZEltbTMyIGltbSwg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIHhvcjMyKGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWlj
WG9yMzIoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNYb3IzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjMyKHJl
ZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnOChBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzgo
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnOChCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnOChh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWcxNihBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzE2KGFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzE2KEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBuZWcxNihh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWczMihBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzMyKGFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzMyKEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBuZWczMihh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3Q4KEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90OChhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3Q4KEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3Q4KGFkZHJl
c3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDE2KEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90MTYoYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90MTYoQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDE2KGFkZHJl
c3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDMyKEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90MzIoYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90MzIoQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDMyKGFkZHJl
c3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGdBZGQ4KFJlZ2lzdGVySUQgcmVn
LCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnhhZGRiX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZ0FkZDgoUmVnaXN0ZXJJRCBy
ZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICBtX2Fzc2VtYmxlci54YWRkYl9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hjaGdBZGQxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54
YWRkd19ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY1hjaGdBZGQxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLnhhZGR3X3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZ0Fk
ZDMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhhZGRsX3JtKHJlZywgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNo
Z0FkZDMyKFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGxfcm0ocmVnLCBh
ZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxl
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnOChSZWdpc3RlcklEIHJlZywgQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBtX2Fzc2VtYmxlci54YWRkYl9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Up
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGc4KFJlZ2lzdGVySUQgcmVnLCBCYXNl
SW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIueGNoZ2Jfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNYY2hnMTYoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3dfcm0ocmVn
LCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNYY2hnMTYoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnd19ybShy
ZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Mu
c2NhbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGczMihSZWdpc3RlcklEIHJl
ZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGczMihSZWdpc3RlcklEIHJl
ZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdsX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAg
IC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVudHMgbW90aW9uIG9mIG5vcm1h
bCBzdG9yZXMuIFNvLCBpdCdzIGEgbm8tb3Agb24geDg2LgorICAgIHZvaWQgc3RvcmVGZW5jZSgp
CisgICAgeworICAgIH0KKworICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJl
dmVudHMgbW90aW9uIG9mIG5vcm1hbCBsb2Fkcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4ODYuCisg
ICAgdm9pZCBsb2FkRmVuY2UoKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBs
YWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0
aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxh
Y2VXaXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIGRlc3RpbmF0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG1heEp1bXBSZXBsYWNlbWVudFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFg4NkFz
c2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBw
dHJkaWZmX3QgcGF0Y2hhYmxlSnVtcFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFg4NkFz
c2VtYmxlcjo6cGF0Y2hhYmxlSnVtcFNpemUoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBz
dXBwb3J0c0Zsb2F0aW5nUG9pbnRSb3VuZGluZygpCisgICAgeworICAgICAgICBpZiAoc19zc2U0
XzFDaGVja1N0YXRlID09IENQVUlEQ2hlY2tTdGF0ZTo6Tm90Q2hlY2tlZCkKKyAgICAgICAgICAg
IHVwZGF0ZUVheDFFY3hGbGFncygpOworICAgICAgICByZXR1cm4gc19zc2U0XzFDaGVja1N0YXRl
ID09IENQVUlEQ2hlY2tTdGF0ZTo6U2V0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIHN1cHBv
cnRzQVZYKCkKKyAgICB7CisgICAgICAgIC8vIEFWWCBzdGlsbCBjYXVzZXMgbXlzdGVyaW91cyBy
ZWdyZXNzaW9ucyBhbmQgdGhvc2UgcmVncmVzc2lvbnMgY2FuIGJlIG1hc3NpdmUuCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVFYXgxRWN4Rmxh
Z3MoKQorICAgIHsKKyAgICAgICAgaW50IGZsYWdzID0gMDsKKyNpZiBDT01QSUxFUihNU1ZDKQor
ICAgICAgICBpbnQgY3B1SW5mb1s0XTsKKyAgICAgICAgX19jcHVpZChjcHVJbmZvLCAweDEpOwor
ICAgICAgICBmbGFncyA9IGNwdUluZm9bMl07CisjZWxpZiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcp
CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgYXNtICgKKyAgICAgICAgICAgICJtb3ZsICQweDEs
ICUlZWF4OyIKKyAgICAgICAgICAgICJjcHVpZDsiCisgICAgICAgICAgICAibW92bCAlJWVjeCwg
JTA7IgorICAgICAgICAgICAgOiAiPWciIChmbGFncykKKyAgICAgICAgICAgIDoKKyAgICAgICAg
ICAgIDogIiVlYXgiLCAiJWVieCIsICIlZWN4IiwgIiVlZHgiCisgICAgICAgICAgICApOworI2Vs
c2UKKyAgICAgICAgYXNtICgKKyAgICAgICAgICAgICJtb3ZsICQweDEsICUlZWF4OyIKKyAgICAg
ICAgICAgICJwdXNobCAlJWVieDsiCisgICAgICAgICAgICAiY3B1aWQ7IgorICAgICAgICAgICAg
InBvcGwgJSVlYng7IgorICAgICAgICAgICAgIm1vdmwgJSVlY3gsICUwOyIKKyAgICAgICAgICAg
IDogIj1nIiAoZmxhZ3MpCisgICAgICAgICAgICA6CisgICAgICAgICAgICA6ICIlZWF4IiwgIiVl
Y3giLCAiJWVkeCIKKyAgICAgICAgICAgICk7CisjZW5kaWYKKyNlbmRpZiAvLyBDT01QSUxFUihH
Q0NfT1JfQ0xBTkcpCisgICAgICAgIHNfc3NlNF8xQ2hlY2tTdGF0ZSA9IChmbGFncyAmICgxIDw8
IDE5KSkgPyBDUFVJRENoZWNrU3RhdGU6OlNldCA6IENQVUlEQ2hlY2tTdGF0ZTo6Q2xlYXI7Cisg
ICAgICAgIHNfYXZ4Q2hlY2tTdGF0ZSA9IChmbGFncyAmICgxIDw8IDI4KSkgPyBDUFVJRENoZWNr
U3RhdGU6OlNldCA6IENQVUlEQ2hlY2tTdGF0ZTo6Q2xlYXI7CisgICAgfQorCisjaWYgRU5BQkxF
KE1BU01fUFJPQkUpCisgICAgdm9pZCBwcm9iZShQcm9iZUZ1bmN0aW9uLCB2b2lkKiBhcmcxLCB2
b2lkKiBhcmcyKTsKKyNlbmRpZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKKworcHJvdGVjdGVkOgor
ICAgIFg4NkFzc2VtYmxlcjo6Q29uZGl0aW9uIHg4NkNvbmRpdGlvbihSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmQpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8WDg2QXNzZW1ibGVy
OjpDb25kaXRpb24+KGNvbmQpOworICAgIH0KKworICAgIFg4NkFzc2VtYmxlcjo6Q29uZGl0aW9u
IHg4NkNvbmRpdGlvbihSZXN1bHRDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxYODZBc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CisgICAgfQorCisg
ICAgWDg2QXNzZW1ibGVyOjpDb25kaXRpb24geDg2Q29uZGl0aW9uKFN0YXR1c0NvbmRpdGlvbiBj
b25kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kKSB7CisgICAgICAgIGNhc2UgU3VjY2Vz
czoKKyAgICAgICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbkU7CisgICAgICAg
IGNhc2UgRmFpbHVyZToKKyAgICAgICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6OkNvbmRpdGlv
bk5FOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbkU7CisgICAgfQorCisgICAgdm9p
ZCBzZXQzMihYODZBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworI2lmIENQVShYODYpCisgICAgICAgIC8vIE9uIDMyLWJpdCB4ODYgd2UgY2FuIG9ubHkg
c2V0IHRoZSBmaXJzdCA0IHJlZ2lzdGVyczsKKyAgICAgICAgLy8gZXNwLi5lZGkgYXJlIG1hcHBl
ZCB0byB0aGUgJ2gnIHJlZ2lzdGVycyEKKyAgICAgICAgaWYgKGRlc3QgPj0gNCkgeworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcnIoZGVzdCwgWDg2UmVnaXN0ZXJzOjplYXgpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc2V0Q0Nfcihjb25kLCBYODZSZWdpc3RlcnM6OmVheCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z6YmxfcnIoWDg2UmVnaXN0ZXJzOjplYXgsIFg4NlJl
Z2lzdGVyczo6ZWF4KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdsX3JyKGRlc3QsIFg4
NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2VuZGlm
CisgICAgICAgIG1fYXNzZW1ibGVyLnNldENDX3IoY29uZCwgZGVzdCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdnpibF9ycihkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGNtb3YoWDg2
QXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgbV9hc3NlbWJsZXIuY21vdnFfcnIo
Y29uZCwgc3JjLCBkZXN0KTsKKyNlbHNlCisgICAgICAgIG1fYXNzZW1ibGVyLmNtb3ZsX3JyKGNv
bmQsIHNyYywgZGVzdCk7CisjZW5kaWYKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c0xaQ05UKCkKICAgICB7CiAgICAgICAgIGlmIChzX2x6Y250Q2hlY2tTdGF0ZSA9PSBDUFVJRENo
ZWNrU3RhdGU6Ok5vdENoZWNrZWQpIHsKICAgICAgICAgICAgIGludCBmbGFncyA9IDA7CkBAIC0y
OTI1LDYgKzM4ODAsMzUgQEAgcHJvdGVjdGVkOgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihz
aXplT2ZSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIHNyY0lzTm9uWmVyby5saW5rKHRoaXMpOwog
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgYXRvbWlj
U3Ryb25nQ0FTKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVz
dWx0LCBSZWdpc3RlcklEIHJlc3VsdCwgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAg
IHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9jaygpOworICAgICAgICBmdW5jKCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRB
bmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgc2V0MzIoeDg2Q29uZGl0aW9u
KGNvbmQpLCByZXN1bHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cisg
ICAgdm9pZCBhdG9taWNTdHJvbmdDQVMoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgY29u
c3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4
NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBm
dW5jKCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIEp1bXAgYnJhbmNo
QXRvbWljU3Ryb25nQ0FTKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVk
QW5kUmVzdWx0LCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgc3dhcChleHBlY3Rl
ZEFuZFJlc3VsdCwgWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIGZ1bmMoKTsKKyAgICAgICAgc3dhcChleHBlY3RlZEFuZFJlc3VsdCwgWDg2
UmVnaXN0ZXJzOjplYXgpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2
Q29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIC8vIE9ubHkgTWFjcm9B
c3NlbWJsZXJYODYgc2hvdWxkIGJlIHVzaW5nIHRoZSBmb2xsb3dpbmcgbWV0aG9kOyBTU0UyIGlz
IGFsd2F5cyBhdmFpbGFibGUgb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDIxMjk5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2OSw2ICsyNjksMTEgQEAgcHVibGlj
OgogICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSk7CiAgICAgfQogCisgICAgdm9pZCBhZGQ2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX3JtKHNyYywgZGVzdC5vZmZzZXQs
IGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBh
ZGQ2NChBYnNvbHV0ZUFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoc3JjLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAt
MzA2LDYgKzMxMSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX2lt
KGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKICAgICB9CiAKKyAg
ICB2b2lkIGFkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IDEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5p
bmNxX20oYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHFfaW0o
aW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgs
IGFkZHJlc3Muc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgYWRkNjQoVHJ1c3RlZEltbTMyIGlt
bSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKQEAgLTM0MiwxMSArMzU1
LDQxIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9ycihzcmMsIGRlc3QpOwog
ICAgIH0KIAorICAgIHZvaWQgYW5kNjQoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDY0KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfcm0oc3JjLCBkZXN0Lm9mZnNl
dCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lk
IGFuZDY0KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5hbmRxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIGFuZDY0KEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFuZHFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwg
c3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW0zMiBp
bW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFf
aXIoaW1tLm1fdmFsdWUsIHNyY0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgYW5kNjQoVHJ1c3Rl
ZEltbTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5k
cV9pbShpbW0ubV92YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAg
dm9pZCBhbmQ2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFuZHFfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgYW5kNjQoVHJ1
c3RlZEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIGludHB0
cl90IGludFZhbHVlID0gaW1tLmFzSW50cHRyKCk7CkBAIC01NTIsMTEgKzU5NSw1MSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm5lZ3FfcihkZXN0KTsKICAgICB9CiAKKyAgICB2b2lk
IG5lZzY0KEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZ3FfbShk
ZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG5lZzY0KEJhc2VJbmRl
eCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubmVncV9tKGRlc3Qub2Zmc2V0LCBk
ZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgb3I2
NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3Nl
bWJsZXIub3JxX3JyKHNyYywgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBvcjY0KFJlZ2lzdGVy
SUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnFfcm0o
c3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yNjQoUmVn
aXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2Fs
ZSk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2Us
IGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3I2NChCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnFfbXIoc3JjLm9mZnNldCwgc3Jj
LmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG9y
NjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIub3JxX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9
CisKKyAgICB2b2lkIG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5vcnFfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBk
ZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgb3I2
NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBp
ZiAoaW1tLm1fdmFsdWUgPD0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkKQEAg
LTYxOSwxNiArNzAyLDMxIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc3VicV9pbShp
bW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAg
dm9pZCBzdWI2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKwogICAg
IHZvaWQgc3ViNjQoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLnN1YnFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwogICAgIH0K
IAorICAgIHZvaWQgc3ViNjQoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc3VicV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgc3JjLmlu
ZGV4LCBzcmMuc2NhbGUsIGRlc3QpOworICAgIH0KKwogICAgIHZvaWQgc3ViNjQoUmVnaXN0ZXJJ
RCBzcmMsIEFkZHJlc3MgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfcm0o
c3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjY0KFJl
Z2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LnN1YnFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNj
YWxlKTsKKyAgICB9CisKICAgICB2b2lkIHhvcjY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci54b3JxX3JyKHNyYywgZGVzdCk7CkBA
IC02NTEsNiArNzQ5LDMxIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIueG9ycV9ybShz
cmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgeG9yNjQoUmVn
aXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
eG9ycV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2Nh
bGUpOworICAgIH0KKworICAgIHZvaWQgeG9yNjQoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfbXIoc3JjLm9mZnNldCwgc3JjLmJh
c2UsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgeG9yNjQoQmFzZUluZGV4IHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9ycV9tcihzcmMub2Zmc2V0
LCBzcmMuYmFzZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUsIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgeG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIueG9ycV9pbShpbW0ubV92YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7
CisgICAgfQorCisgICAgdm9pZCB4b3I2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfaW0oaW1tLm1fdmFsdWUsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAg
IHZvaWQgeG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIueG9ycV9pcihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CkBAIC02
NjYsNiArNzg5LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubm90cV9tKGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgbm90NjQoQmFzZUluZGV4IGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ub3RxX20oZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBsb2FkNjQo
SW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdnFfbXIoYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgZGVzdCk7
CkBAIC0xMjk0LDcgKzE0MjIsMjI1IEBAIHB1YmxpYzoKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb246Om1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lz
dGVyKCkpOwogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmJyYW5jaFRl
c3Q4KGNvbmQsIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpLCBtYXNrOCk7CiAgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRk
cmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMo
Y29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNo
Z3Ffcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9
CisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdp
c3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXgg
YWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdD
QVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21w
eGNoZ3Ffcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
aW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0cm9u
Z0NBUzY0KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUs
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3Rl
ZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFsdWUsIGFkZHJl
c3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0
cm9uZ0NBUzY0KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFs
dWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4
cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hncV9ybShuZXdWYWx1ZSwg
YWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2Fs
ZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoU3RhdHVz
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQg
bmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hB
dG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVy
LmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVM2NChTdGF0dXNDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1
ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWlj
U3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4
Y2hncV9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KIAorICAgIHZvaWQgYXRvbWljV2Vha0NB
UzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBS
ZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQor
ICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQs
IG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgYXRvbWljV2Vh
a0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0
LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1
bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVM2NChjb25kLCBleHBlY3RlZEFuZFJl
c3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hBdG9taWNXZWFrQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0
ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVM2NChjb25kLCBleHBlY3RlZEFu
ZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRv
bWljV2Vha0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5k
UmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVM2NChjb25kLCBleHBlY3RlZEFuZFJl
c3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIHZvaWQgYXRvbWljQWRkNjQo
VHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhZGQ2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY0FkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ2NChpbW0s
IGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDY0KFJlZ2lzdGVySUQg
cmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIGFkZDY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRv
bWljQWRkNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ2NChyZWcsIGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3Vi
NjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWI2NChUcnVz
dGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgc3ViNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNTdWI2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI2NChyZWcsIGFkZHJl
c3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjY0KFJlZ2lzdGVySUQgcmVnLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgc3ViNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNB
bmQ2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDY0KGltbSwgYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDY0
KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQoUmVnaXN0
ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgYW5kNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNBbmQ2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDY0KHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG9yNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjY0KFRy
dXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBvcjY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljT3I2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjY0KHJlZywgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I2NChSZWdpc3RlcklEIHJlZywgQmFz
ZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIG9yNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3I2
NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljWG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjY0KGlt
bSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yNjQoUmVnaXN0ZXJJ
RCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgeG9yNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNYb3I2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjY0KHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnNjQoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBuZWc2NChhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWc2NChCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnNjQoYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90NjQoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3Q2NChhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3Q2NChCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90NjQoYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZ0FkZDY0KFJlZ2lzdGVySUQgcmVnLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLnhhZGRxX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZ0FkZDY0KFJlZ2lzdGVySUQgcmVnLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIueGFkZHFfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5i
YXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNYY2hnNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3Ffcm0o
cmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNYY2hnNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54Y2hncV9y
bShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJl
c3Muc2NhbGUpOworICAgIH0KKyAgICAKICAgICB2b2lkIHRydW5jYXRlRG91YmxlVG9VaW50MzIo
RlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3Nl
bWJsZXIuY3Z0dHNkMnNpcV9ycihzcmMsIGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTkwLDE2ICsxOTAsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgT1BfQURE
X0V2R3YgICAgICAgICAgICAgICAgICAgICA9IDB4MDEsCiAgICAgICAgIE9QX0FERF9HdkV2ICAg
ICAgICAgICAgICAgICAgICAgPSAweDAzLAogICAgICAgICBPUF9BRERfRUFYSXYgICAgICAgICAg
ICAgICAgICAgID0gMHgwNSwKKyAgICAgICAgT1BfT1JfRXZHYiAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDgsCiAgICAgICAgIE9QX09SX0V2R3YgICAgICAgICAgICAgICAgICAgICAgPSAweDA5
LAogICAgICAgICBPUF9PUl9HdkV2ICAgICAgICAgICAgICAgICAgICAgID0gMHgwQiwKICAgICAg
ICAgT1BfT1JfRUFYSXYgICAgICAgICAgICAgICAgICAgICA9IDB4MEQsCiAgICAgICAgIE9QXzJC
WVRFX0VTQ0FQRSAgICAgICAgICAgICAgICAgPSAweDBGLAorICAgICAgICBPUF9BTkRfRXZHYiAg
ICAgICAgICAgICAgICAgICAgID0gMHgyMCwKICAgICAgICAgT1BfQU5EX0V2R3YgICAgICAgICAg
ICAgICAgICAgICA9IDB4MjEsCiAgICAgICAgIE9QX0FORF9HdkV2ICAgICAgICAgICAgICAgICAg
ICAgPSAweDIzLAorICAgICAgICBPUF9TVUJfRXZHYiAgICAgICAgICAgICAgICAgICAgID0gMHgy
OCwKICAgICAgICAgT1BfU1VCX0V2R3YgICAgICAgICAgICAgICAgICAgICA9IDB4MjksCiAgICAg
ICAgIE9QX1NVQl9HdkV2ICAgICAgICAgICAgICAgICAgICAgPSAweDJCLAogICAgICAgICBPUF9T
VUJfRUFYSXYgICAgICAgICAgICAgICAgICAgID0gMHgyRCwKICAgICAgICAgUFJFX1BSRURJQ1Rf
QlJBTkNIX05PVF9UQUtFTiAgICA9IDB4MkUsCisgICAgICAgIE9QX1hPUl9FdkdiICAgICAgICAg
ICAgICAgICAgICAgPSAweDMwLAogICAgICAgICBPUF9YT1JfRXZHdiAgICAgICAgICAgICAgICAg
ICAgID0gMHgzMSwKICAgICAgICAgT1BfWE9SX0d2RXYgICAgICAgICAgICAgICAgICAgICA9IDB4
MzMsCiAgICAgICAgIE9QX1hPUl9FQVhJdiAgICAgICAgICAgICAgICAgICAgPSAweDM1LApAQCAt
MjIzLDYgKzIyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIE9QX0dST1VQMV9FdkliICAgICAgICAg
ICAgICAgICAgPSAweDgzLAogICAgICAgICBPUF9URVNUX0ViR2IgICAgICAgICAgICAgICAgICAg
ID0gMHg4NCwKICAgICAgICAgT1BfVEVTVF9Fdkd2ICAgICAgICAgICAgICAgICAgICA9IDB4ODUs
CisgICAgICAgIE9QX1hDSEdfRXZHYiAgICAgICAgICAgICAgICAgICAgPSAweDg2LAogICAgICAg
ICBPUF9YQ0hHX0V2R3YgICAgICAgICAgICAgICAgICAgID0gMHg4NywKICAgICAgICAgT1BfTU9W
X0ViR2IgICAgICAgICAgICAgICAgICAgICA9IDB4ODgsCiAgICAgICAgIE9QX01PVl9Fdkd2ICAg
ICAgICAgICAgICAgICAgICAgPSAweDg5LApAQCAtMjUyLDYgKzI1Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIFBSRV9TU0VfRjIgICAgICAgICAgICAgICAgICAgICAgPSAweEYyLAogICAgICAgICBQ
UkVfU1NFX0YzICAgICAgICAgICAgICAgICAgICAgID0gMHhGMywKICAgICAgICAgT1BfSExUICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4RjQsCisgICAgICAgIE9QX0dST1VQM19FYiAgICAg
ICAgICAgICAgICAgICAgPSAweEY2LAogICAgICAgICBPUF9HUk9VUDNfRWJJYiAgICAgICAgICAg
ICAgICAgID0gMHhGNiwKICAgICAgICAgT1BfR1JPVVAzX0V2ICAgICAgICAgICAgICAgICAgICA9
IDB4RjcsCiAgICAgICAgIE9QX0dST1VQM19Fdkl6ICAgICAgICAgICAgICAgICAgPSAweEY3LCAv
LyBPUF9HUk9VUDNfRXYgaGFzIGFuIGltbWVkaWF0ZSwgd2hlbiBpbnN0cnVjdGlvbiBpcyBhIHRl
c3QuIApAQCAtMjkwLDYgKzI5Niw4IEBAIHByaXZhdGU6CiAgICAgICAgIE9QX1NFVENDICAgICAg
ICAgICAgPSAweDkwLAogICAgICAgICBPUDJfM0JZVEVfRVNDQVBFX0FFID0gMHhBRSwKICAgICAg
ICAgT1AyX0lNVUxfR3ZFdiAgICAgICA9IDB4QUYsCisgICAgICAgIE9QMl9DTVBYQ0hHYiAgICAg
ICAgPSAweEIwLAorICAgICAgICBPUDJfQ01QWENIRyAgICAgICAgID0gMHhCMSwKICAgICAgICAg
T1AyX01PVlpYX0d2RWIgICAgICA9IDB4QjYsCiAgICAgICAgIE9QMl9CU0YgICAgICAgICAgICAg
PSAweEJDLAogICAgICAgICBPUDJfVFpDTlQgICAgICAgICAgID0gMHhCQywKQEAgLTI5OCw2ICsz
MDYsOCBAQCBwcml2YXRlOgogICAgICAgICBPUDJfTU9WU1hfR3ZFYiAgICAgID0gMHhCRSwKICAg
ICAgICAgT1AyX01PVlpYX0d2RXcgICAgICA9IDB4QjcsCiAgICAgICAgIE9QMl9NT1ZTWF9HdkV3
ICAgICAgPSAweEJGLAorICAgICAgICBPUDJfWEFERGIgICAgICAgICAgID0gMHhDMCwKKyAgICAg
ICAgT1AyX1hBREQgICAgICAgICAgICA9IDB4QzEsCiAgICAgICAgIE9QMl9QRVhUUldfR2RVZEli
ICAgPSAweEM1LAogICAgICAgICBPUDJfUFNMTFFfVWRxSWIgICAgID0gMHg3MywKICAgICAgICAg
T1AyX1BTUkxRX1VkcUliICAgICA9IDB4NzMsCkBAIC01NjIsMTEgKzU3MiwyMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0FERF9HdkV2LCBkc3QsIGJhc2Us
IG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBhZGRxX21yKGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0FERF9HdkV2LCBkc3QsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIGFkZHFfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0FERF9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7
CiAgICAgfQogCisgICAgdm9pZCBhZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0FERF9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4
LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIGFkZHFfaXIoaW50IGltbSwgUmVn
aXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1t
KSkgewpAQCAtNTkxLDYgKzYxMSwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGUzMihpbW0pOwogICAgICAgICB9CiAgICAgfQorCisgICAgdm9pZCBhZGRxX2lt
KGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkp
IHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBH
Uk9VUDFfT1BfQURELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX0FERCwg
YmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1t
ZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KICNlbHNlCiAgICAgdm9pZCBhZGRsX2lt
KGludCBpbW0sIGNvbnN0IHZvaWQqIGFkZHIpCiAgICAgewpAQCAtNjE0LDExICs2NDUsNDMgQEAg
cHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0d2RXYsIGRzdCwg
YmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZGxfbXIoaW50IG9mZnNldCwgUmVn
aXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9HdkV2LCBkc3Qs
IGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIGFuZGxfcm0o
UmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQp
OwogICAgIH0KIAorICAgIHZvaWQgYW5kbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgYW5kd19ybShSZWdpc3RlcklEIHNy
YywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0
ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBhbmRsX3JtKHNyYywgb2Zmc2V0
LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAg
ICBhbmRsX3JtKHNyYywgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAg
IHZvaWQgYW5kYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9FdkdiLCBzcmMs
IGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBhbmRiX3JtKFJlZ2lzdGVySUQgc3Jj
LCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2Fs
ZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfRXZHYiwgc3Jj
LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBhbmRsX2ly
KGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VY
VEVORF84XzMyKGltbSkpIHsKQEAgLTY0MSw2ICs3MDQsNDEgQEAgcHVibGljOgogICAgICAgICB9
CiAgICAgfQogCisgICAgdm9pZCBhbmRsX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYg
KENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcChPUF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX0FORCwgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQ
MV9Fdkl6LCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAg
ICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQor
CisgICAgdm9pZCBhbmR3X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAg
ICAgICAgYW5kbF9pbShpbW0sIG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBhbmR3
X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBhbmRsX2ltKGltbSwgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2Nh
bGUpOworICAgIH0KKworICAgIHZvaWQgYW5kYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JP
VVAxX0ViSWIsIEdST1VQMV9PUF9BTkQsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0
dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZGJfaW0oaW50IGltbSwg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdS
T1VQMV9PUF9BTkQsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9p
ZCBhbmRxX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC02NTcs
NiArNzU1LDQ4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMy
KGltbSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICB2b2lkIGFuZHFfbXIoaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcDY0KE9QX0FORF9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CisgICAgfQor
CisgICAgdm9pZCBhbmRxX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0FORF9HdkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwg
b2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcDY0KE9QX0FORF9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9p
ZCBhbmRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcDY0KE9QX0FORF9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsK
KyAgICB9CisKKyAgICB2b2lkIGFuZHFfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9V
UDFfT1BfQU5ELCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRp
YXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9BTkQsIGJhc2UsIG9mZnNldCk7Cisg
ICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCBhbmRxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9T
SUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFf
RXZJeiwgR1JPVVAxX09QX0FORCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KICNl
bHNlCiAgICAgdm9pZCBhbmRsX2ltKGludCBpbW0sIGNvbnN0IHZvaWQqIGFkZHIpCiAgICAgewpA
QCAtNzAzLDYgKzg0MywxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3A2NChPUF9HUk9VUDVfRXYsIEdST1VQMV9PUF9BREQsIGJhc2UsIG9mZnNldCk7CiAg
ICAgfQorCisgICAgdm9pZCBpbmNxX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdp
c3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3A2NChPUF9HUk9VUDVfRXYsIEdST1VQMV9PUF9BREQsIGJhc2UsIGluZGV4LCBzY2FsZSwg
b2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKIAogICAgIHZvaWQgbmVnbF9y
KFJlZ2lzdGVySUQgZHN0KQpAQCAtNzE1LDYgKzg2MCwxNiBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9ORUcs
IGRzdCk7CiAgICAgfQorCisgICAgdm9pZCBuZWdxX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAzX0V2
LCBHUk9VUDNfT1BfTkVHLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgbmVncV9t
KGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAzX0V2LCBH
Uk9VUDNfT1BfTkVHLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQogI2VuZGlm
CiAKICAgICB2b2lkIG5lZ2xfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCkBAIC03MjIs
NiArODc3LDMzIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dS
T1VQM19FdiwgR1JPVVAzX09QX05FRywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lk
IG5lZ2xfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGlu
dCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNf
RXYsIEdST1VQM19PUF9ORUcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisK
KyAgICB2b2lkIG5lZ3dfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG5lZ2xf
bShvZmZzZXQsIGJhc2UpOworICAgIH0KKworICAgIHZvaWQgbmVnd19tKGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBuZWdsX20o
b2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgbmVnYl9tKGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcChPUF9HUk9VUDNfRWIsIEdST1VQM19PUF9ORUcsIGJhc2UsIG9mZnNldCk7CisgICAg
fQorCisgICAgdm9pZCBuZWdiX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3Rl
cklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3AoT1BfR1JPVVAzX0ViLCBHUk9VUDNfT1BfTkVHLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNl
dCk7CisgICAgfQorCiAgICAgdm9pZCBub3RsX3IoUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1BfTk9ULCBk
c3QpOwpAQCAtNzMyLDYgKzkxNCwzMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1QsIGJhc2UsIG9mZnNldCk7CiAgICAg
fQogCisgICAgdm9pZCBub3RsX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3Rl
cklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3AoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1BfTk9ULCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNl
dCk7CisgICAgfQorCisgICAgdm9pZCBub3R3X20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOwor
ICAgICAgICBub3RsX20ob2Zmc2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG5vdHdfbShp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAg
ICAgICAgbm90bF9tKG9mZnNldCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAgICB2
b2lkIG5vdGJfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0ViLCBHUk9VUDNfT1BfTk9ULCBiYXNlLCBv
ZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgbm90Yl9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQM19FYiwgR1JPVVAzX09QX05PVCwgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBub3Rx
X3IoUmVnaXN0ZXJJRCBkc3QpCiAgICAgewpAQCAtNzQyLDYgKzk1MSwxMSBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYsIEdST1VQ
M19PUF9OT1QsIGJhc2UsIG9mZnNldCk7CiAgICAgfQorCisgICAgdm9pZCBub3RxX20oaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYsIEdST1VQM19P
UF9OT1QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYKIAogICAg
IHZvaWQgb3JsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKQEAgLTc1NCwxMSAr
OTY4LDQzIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0d2
RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIG9ybF9tcihpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfR3ZF
diwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBv
cmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7
CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9PUl9Fdkd2LCBzcmMsIGJhc2UsIG9m
ZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBvcmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R3YsIHNyYywgYmFzZSwgaW5k
ZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgb3J3X3JtKFJlZ2lzdGVySUQg
c3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1h
dHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG9ybF9ybShzcmMsIG9mZnNl
dCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcndfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAg
ICBvcmxfcm0oc3JjLCBvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAg
dm9pZCBvcmJfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9PUl9FdkdiLCBzcmMsIGJh
c2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBvcmJfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R2IsIHNyYywgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgb3JsX2lyKGludCBp
bW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84
XzMyKGltbSkpIHsKQEAgLTc4NCwxMiArMTAzMCw4OSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAKKyAgICB2b2lkIG9ybF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIGlmIChDQU5f
U0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZz
ZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6
LCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkIG9yd19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG9y
bF9pbShpbW0sIG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcndfaW0oaW50IGlt
bSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIG9ybF9pbShpbW0sIG9mZnNldCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9
CisKKyAgICB2b2lkIG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Up
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdS
T1VQMV9PUF9PUiwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRl
OChpbW0pOworICAgIH0KKworICAgIHZvaWQgb3JiX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FYkliLCBHUk9VUDFfT1BfT1IsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRl
OChpbW0pOworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBvcnFfcnIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfT1JfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgb3JxX21y
KGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9PUl9HdkV2LCBkc3QsIGJhc2UsIG9mZnNl
dCk7CisgICAgfQorCisgICAgdm9pZCBvcnFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfT1JfR3ZFdiwgZHN0LCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBvcnFfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcDY0KE9QX09SX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisK
KyAgICB2b2lkIG9ycV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3A2NChPUF9PUl9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG9ycV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1t
KSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIs
IEdST1VQMV9PUF9PUiwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfT1IsIGJhc2UsIG9mZnNldCk7
CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdm9pZCBvcnFfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FO
X1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAx
X0V2SXosIEdST1VQMV9PUF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIHZvaWQgb3JxX2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAg
aWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTgzMSwxMSArMTE1NCw0MyBAQCBw
dWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfR3ZFdiwgZHN0LCBi
YXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgc3VibF9tcihpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0d2RXYsIGRzdCwg
YmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgc3VibF9ybShS
ZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7
CiAgICAgfQogCisgICAgdm9pZCBzdWJsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBzdWJ3X3JtKFJlZ2lzdGVySUQgc3Jj
LCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgc3Vi
d19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3Rl
cklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgo
UFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJf
RXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9p
ZCBzdWJiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0V2R2IsIHNyYywgYmFz
ZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YmJfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9FdkdiLCBzcmMsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIHN1YmxfaXIoaW50
IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5E
XzhfMzIoaW1tKSkgewpAQCAtODYxLDYgKzEyMTYsNDEgQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgfQogCisgICAgdm9pZCBzdWJsX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENB
Tl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcChPUF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9F
dkl6LCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAg
ICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCBzdWJ3X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAg
ICAgc3VibF9pbShpbW0sIG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBzdWJ3X2lt
KGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5E
X1NJWkUpOworICAgICAgICBzdWJsX2ltKGltbSwgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUp
OworICAgIH0KKworICAgIHZvaWQgc3ViYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0ViSWIsIEdST1VQMV9PUF9TVUIsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVy
LmltbWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YmJfaW0oaW50IGltbSwgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQ
MV9PUF9TVUIsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0
ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBz
dWJxX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC04NzIsMTEg
KzEyNjIsMjEgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9T
VUJfR3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgc3VicV9tcihp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwg
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChP
UF9TVUJfR3ZFdiwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAg
ICAgdm9pZCBzdWJxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9TVUJfRXZHdiwg
c3JjLCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgc3VicV9ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9TVUJfRXZH
diwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBz
dWJxX2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9T
SUdOX0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTkwMSw2ICsxMzAxLDE3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CiAgICAgICAgIH0KICAgICB9
CisKKyAgICB2b2lkIHN1YnFfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJ
R05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
NjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9TVUIsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9F
dkl6LCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAg
ICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQogI2Vs
c2UKICAgICB2b2lkIHN1YmxfaW0oaW50IGltbSwgY29uc3Qgdm9pZCogYWRkcikKICAgICB7CkBA
IC05MjQsMTEgKzEzMzUsMjEgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3AoT1BfWE9SX0d2RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHhv
cmxfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hPUl9HdkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CisKICAgICB2b2lkIHhvcmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YT1JfRXZH
diwgc3JjLCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgeG9ybF9ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBp
bnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWE9SX0V2
R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQg
eG9ybF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAg
ICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgewpAQCAtOTQwLDYgKzEzNjEsNjMg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCB4b3JsX2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX1hP
UiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
aW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0p
OworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB4b3J3X3JtKFJlZ2lzdGVySUQgc3JjLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5w
cmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIHhvcmxfcm0oc3JjLCBvZmZzZXQsIGJh
c2UpOworICAgIH0KKworICAgIHZvaWQgeG9yd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIHhv
cmxfcm0oc3JjLCBvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9p
ZCB4b3J3X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgeG9y
bF9pbShpbW0sIG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCB4b3J3X2ltKGludCBp
bW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNj
YWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUp
OworICAgICAgICB4b3JsX2ltKGltbSwgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAg
IH0KKworICAgIHZvaWQgeG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0
ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hPUl9F
dkdiLCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCB4b3JiX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YT1Jf
RXZHYiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9p
ZCB4b3JiX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwgR1JPVVAxX09QX1hP
UiwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOwor
ICAgIH0KKworICAgIHZvaWQgeG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgaW5k
ZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7
CisgICAgfQorCiAgICAgdm9pZCB4b3JsX2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAg
IHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTk3NCwxMSAr
MTQ1Miw0NyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9pZCB4b3Jx
X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgb2Zmc2V0
KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6
LCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
aW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHhvcnFf
aW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4
LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1t
KSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIs
IEdST1VQMV9PUF9YT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfWE9S
LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5p
bW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIHZvaWQgeG9ycV9y
bShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwgb2Zm
c2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHhvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwg
aW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgeG9ycV9tcihpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hPUl9HdkV2LCBkZXN0LCBiYXNlLCBvZmZzZXQpOwor
ICAgIH0KKworICAgIHZvaWQgeG9ycV9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfWE9SX0d2RXYsIGRlc3QsIGJhc2UsIGluZGV4
LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYKIAogICAgIHZvaWQgbHpjbnRfcnIoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpAQCAtMTU4NiwxMSArMjEwMCwzOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBzcmMs
IGRzdCk7CiAgICAgfQogCisgICAgdm9pZCB4Y2hnYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hDSEdfRXZHYiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQg
eGNoZ2Jfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVn
aXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wKE9QX1hDSEdfRXZHYiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7Cisg
ICAgfQorCisgICAgdm9pZCB4Y2hnd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVn
aXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBz
cmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCB4Y2hnd19ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0la
RSk7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgeGNoZ2xfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsK
ICAgICB9CiAKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCB4Y2hn
cV9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewpAQCAtMTYwNiw2ICsy
MTQ3LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0
KE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOwogICAgIH0KKworICAgIHZvaWQgeGNo
Z3Ffcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0
ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wNjQoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAg
ICB9CiAjZW5kaWYKIAogICAgIHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkc3QpCkBAIC0yNzc1LDYgKzMzMjEsOTAgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRl
ci5wcmVmaXgoUFJFX0xPQ0spOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNtcHhjaGdiX3JtKFJl
Z2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAg
ICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KE9QMl9DTVBYQ0hHYiwgc3JjLCBiYXNlLCBvZmZzZXQp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDgoT1AyX0NNUFhDSEdiLCBzcmMsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hn
d19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG1f
Zm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfQ01QWENIRywgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUs
IG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY21weGNoZ2xfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLnR3b0J5dGVPcChPUDJfQ01QWENIRywgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNtcHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfQ01QWENIRywgc3JjLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY21weGNoZ3Ffcm0oUmVnaXN0ZXJJ
RCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9DTVBYQ0hHLCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgY21weGNoZ3Ffcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wNjQoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgaW5k
ZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRiX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3A4KE9QMl9YQUREYiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHhhZGRiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDgoT1AyX1hBRERiLCBzcmMsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkd19ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci50d29C
eXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCB4YWRkd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBS
ZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5w
cmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChP
UDJfWEFERCwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgeGFkZGxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfWEFERCwgc3Jj
LCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRsX3JtKFJlZ2lzdGVy
SUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGlu
dCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfWEFERCwg
c3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
eGFkZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9YQURELCBzcmMsIGJhc2Us
IG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZHFfcm0oUmVnaXN0ZXJJRCBzcmMs
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wNjQoT1AyX1hBREQsIHNyYywg
YmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKICAgICB2b2lkIG1mZW5j
ZSgpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci50aHJlZUJ5dGVPcChPUDJfM0JZVEVfRVND
QVBFX0FFLCBPUDNfTUZFTkNFKTsKQEAgLTM3NTEsNiArNDM4MSwyNCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgd3JpdGVyLnJlZ2lzdGVyTW9kUk0oZ3JvdXBPcCwgcm0pOwogICAgICAgICB9CiAK
KyAgICAgICAgdm9pZCB0d29CeXRlT3A4KFR3b0J5dGVPcGNvZGVJRCBvcGNvZGUsIGludCByZWcs
IFJlZ2lzdGVySUQgYmFzZSwgaW50IG9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgU2lu
Z2xlSW5zdHJ1Y3Rpb25CdWZmZXJXcml0ZXIgd3JpdGVyKG1fYnVmZmVyKTsKKyAgICAgICAgICAg
IHdyaXRlci5lbWl0UmV4SWYoYnl0ZVJlZ1JlcXVpcmVzUmV4KHJlZywgYmFzZSksIHJlZywgMCwg
YmFzZSk7CisgICAgICAgICAgICB3cml0ZXIucHV0Qnl0ZVVuY2hlY2tlZChPUF8yQllURV9FU0NB
UEUpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5dGVVbmNoZWNrZWQob3Bjb2RlKTsKKyAgICAg
ICAgICAgIHdyaXRlci5tZW1vcnlNb2RSTShyZWcsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHR3b0J5dGVPcDgoVHdvQnl0ZU9wY29kZUlEIG9wY29kZSwgaW50IHJl
ZywgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIGludCBvZmZz
ZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNpbmdsZUluc3RydWN0aW9uQnVmZmVyV3JpdGVy
IHdyaXRlcihtX2J1ZmZlcik7CisgICAgICAgICAgICB3cml0ZXIuZW1pdFJleElmKGJ5dGVSZWdS
ZXF1aXJlc1JleChyZWcpIHx8IHJlZ1JlcXVpcmVzUmV4KGluZGV4LCBiYXNlKSwgcmVnLCBpbmRl
eCwgYmFzZSk7CisgICAgICAgICAgICB3cml0ZXIucHV0Qnl0ZVVuY2hlY2tlZChPUF8yQllURV9F
U0NBUEUpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5dGVVbmNoZWNrZWQob3Bjb2RlKTsKKyAg
ICAgICAgICAgIHdyaXRlci5tZW1vcnlNb2RSTShyZWcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIEltbWVkaWF0ZXM6CiAgICAgICAgIC8vCiAg
ICAgICAgIC8vIEFuIGltbWVkYWl0ZSBzaG91bGQgYmUgYXBwZW5kZWQgd2hlcmUgYXBwcm9wcmlh
dGUgYWZ0ZXIgYW4gb3AgaGFzIGJlZW4gZW1pdHRlZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0F0b21pY1ZhbHVl
Ojp+QXRvbWljVmFsdWUoKQoreworfQorCitXaWR0aCBBdG9taWNWYWx1ZTo6YWNjZXNzV2lkdGgo
KSBjb25zdAoreworICAgIHJldHVybiBtX3dpZHRoOworfQorCit2b2lkIEF0b21pY1ZhbHVlOjpk
dW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChjb21tYSwgIndpZHRoID0gIiwgbV93aWR0aCk7CisgICAgCisgICAgTWVt
b3J5VmFsdWU6OmR1bXBNZXRhKGNvbW1hLCBvdXQpOworfQorCitWYWx1ZSogQXRvbWljVmFsdWU6
OmNsb25lSW1wbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5ldyBBdG9taWNWYWx1ZSgqdGhpcyk7
Cit9CisKK0F0b21pY1ZhbHVlOjpBdG9taWNWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4s
IFdpZHRoIHdpZHRoLCBWYWx1ZSogb3BlcmFuZCwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zm
c2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIG9wZXJhbmQt
PnR5cGUoKSwgb3JpZ2luLCBvZmZzZXQsIG9wZXJhbmQsIHBvaW50ZXIpCisgICAgLCBtX3dpZHRo
KHdpZHRoKQoreworICAgIHNldEZlbmNlUmFuZ2UoSGVhcFJhbmdlOjp0b3AoKSk7CisgICAgCisg
ICAgQVNTRVJUKGJlc3RUeXBlKG9wZXJhdGlvbldpZHRoKCkpID09IG9wZXJhdGlvblR5cGUoKSk7
CisgICAgCisgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7CisgICAgY2FzZSBBdG9taWNYY2hn
QWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAg
ICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2Ug
QXRvbWljWGNoZzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitBdG9taWNWYWx1ZTo6QXRvbWljVmFsdWUoS2lu
ZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBXaWR0aCB3aWR0aCwgVmFsdWUqIGV4cGVjdGVkVmFsdWUs
IFZhbHVlKiBuZXdWYWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAg
ICA6IE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIGtpbmQub3Bjb2RlKCkgPT0gQXRv
bWljV2Vha0NBUyA/IEludDMyIDogZXhwZWN0ZWRWYWx1ZS0+dHlwZSgpLCBvcmlnaW4sIG9mZnNl
dCwgZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUsIHBvaW50ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRo
KQoreworICAgIHNldEZlbmNlUmFuZ2UoSGVhcFJhbmdlOjp0b3AoKSk7CisgICAgCisgICAgQVNT
RVJUKGJlc3RUeXBlKG9wZXJhdGlvbldpZHRoKCkpID09IG9wZXJhdGlvblR5cGUoKSk7CisKKyAg
ICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAg
Y2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5o
IgorI2luY2x1ZGUgIkIzV2lkdGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEF0b21pY1ZhbHVlIDogcHVibGljIE1lbW9yeVZh
bHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKEtpbmQga2luZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBpc0F0b21pYyhraW5kLm9wY29kZSgpKTsKKyAgICB9CisgICAgCisg
ICAgfkF0b21pY1ZhbHVlKCk7CisgICAgCisgICAgVHlwZSBvcGVyYXRpb25UeXBlKCkgY29uc3Qg
eyByZXR1cm4gY2hpbGQoMCktPnR5cGUoKTsgfQorICAgIAorICAgIFdpZHRoIG9wZXJhdGlvbldp
ZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIAorICAgIC8vIFN5bm9ueW0gZm9y
IG9wZXJhdGlvbldpZHRoKCksIGlmIHlvdSdyZSBhY2Nlc3NpbmcgdmlhIE1lbW9yeVZhbHVlLgor
ICAgIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92
ZXJyaWRlOworICAgIAorICAgIFZhbHVlKiBjbG9uZUltcGwoKSBjb25zdCBvdmVycmlkZTsKKyAg
ICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICBBdG9t
aWNWYWx1ZShLaW5kLCBPcmlnaW4sIFdpZHRoLCBWYWx1ZSogb3BlcmFuZCwgVmFsdWUqIHBvaW50
ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CisgICAgCisgICAgQXRvbWljVmFsdWUoS2luZCwgT3Jp
Z2luLCBXaWR0aCwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBuZXdWYWx1ZSwgVmFsdWUq
IHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CisgICAgCisgICAgV2lkdGggbV93aWR0aDsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0
aW9uU2V0LmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDM1ICszNiwxMyBAQAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIEJsb2NrSW5zZXJ0aW9uU2V0OjpCbG9j
a0luc2VydGlvblNldChQcm9jZWR1cmUgJnByb2MpCi0gICAgOiBtX3Byb2MocHJvYykKKyAgICA6
IEdlbmVyaWNCbG9ja0luc2VydGlvblNldChwcm9jLm1fYmxvY2tzKQorICAgICwgbV9wcm9jKHBy
b2MpCiB7CiB9CiAKIEJsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQoKSB7IH0K
IAotdm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYgaW5zZXJ0
aW9uKQotewotICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoV1RGTW92ZShpbnNlcnRpb24pKTsKLX0K
LQotQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCh1bnNpZ25lZCBpbmRleCwg
ZG91YmxlIGZyZXF1ZW5jeSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxv
Y2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIGZyZXF1ZW5jeSkpOwotICAgIEJhc2ljQmxvY2sq
IHJlc3VsdCA9IGJsb2NrLmdldCgpOwotICAgIGluc2VydChCbG9ja0luc2VydGlvbihpbmRleCwg
V1RGTW92ZShibG9jaykpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1CYXNpY0Jsb2NrKiBC
bG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91Ymxl
IGZyZXF1ZW5jeSkKLXsKLSAgICByZXR1cm4gaW5zZXJ0KGJlZm9yZS0+aW5kZXgoKSwgZnJlcXVl
bmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGJlZm9yZS0+ZnJlcXVlbmN5KCkpOwotfQot
Ci1CYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayog
YWZ0ZXIsIGRvdWJsZSBmcmVxdWVuY3kpCi17Ci0gICAgcmV0dXJuIGluc2VydChhZnRlci0+aW5k
ZXgoKSArIDEsIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBhZnRlci0+ZnJl
cXVlbmN5KCkpOwotfQotCiBCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6c3BsaXRGb3J3
YXJkKAogICAgIEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwgSW5zZXJ0
aW9uU2V0KiBpbnNlcnRpb25TZXQsIGRvdWJsZSBmcmVxdWVuY3kpCiB7CkBAIC0xMDIsMzIgKzgw
LDYgQEAgQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6OnNwbGl0Rm9ydwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLWJvb2wgQmxvY2tJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoKQotewotICAg
IGlmIChtX2luc2VydGlvbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgLy8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3Jk
ZXIuIFNvLCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBiZWZvcmUKLSAgICAvLyBydW5uaW5nIFdURjo6
ZXhlY3V0ZUluc2VydGlvbnMuIFdlIHN0cm9uZ2x5IHByZWZlciBhIHN0YWJsZSBzb3J0IGFuZCB3
ZSB3YW50IGl0IHRvIGJlCi0gICAgLy8gZmFzdCwgc28gd2UgdXNlIGJ1YmJsZSBzb3J0LgotICAg
IGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7Ci0K
LSAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX3Byb2MubV9ibG9ja3MsIG1faW5zZXJ0aW9ucyk7Ci0g
ICAgCi0gICAgLy8gUHJ1bmUgb3V0IGVtcHR5IGVudHJpZXMuIFRoaXMgaXNuJ3Qgc3RyaWN0bHkg
bmVjZXNzYXJ5IGJ1dCBpdCdzCi0gICAgLy8gaGVhbHRoeSB0byBrZWVwIHRoZSBibG9jayBsaXN0
IGZyb20gZ3Jvd2luZy4KLSAgICBtX3Byb2MubV9ibG9ja3MucmVtb3ZlQWxsTWF0Y2hpbmcoCi0g
ICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+JiBibG9ja1B0cikgLT4gYm9v
bCB7Ci0gICAgICAgICAgICByZXR1cm4gIWJsb2NrUHRyOwotICAgICAgICB9KTsKLSAgICAKLSAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMuCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvYy5tX2Jsb2Nrcy5zaXplKCk7ICsraSkK
LSAgICAgICAgbV9wcm9jLm1fYmxvY2tzW2ldLT5tX2luZGV4ID0gaTsKLSAgICAKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKICNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRp
b25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0lu
c2VydGlvblNldC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNCbG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzR2VuZXJpY0Jsb2NrSW5zZXJ0
aW9uU2V0LmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlIDx3dGYvSW5zZXJ0
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzUsMjYgKzM2LDEzIEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBJbnNlcnRpb25TZXQ7CiAKLXR5cGVk
ZWYgV1RGOjpJbnNlcnRpb248c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBCbG9ja0luc2Vy
dGlvbjsKK3R5cGVkZWYgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+OjpCbG9j
a0luc2VydGlvbiBCbG9ja0luc2VydGlvbjsKIAotY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgewor
Y2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgOiBwdWJsaWMgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0
PEJhc2ljQmxvY2s+IHsKIHB1YmxpYzoKICAgICBCbG9ja0luc2VydGlvblNldChQcm9jZWR1cmUm
KTsKICAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKICAgICAKLSAgICB2b2lkIGluc2VydChCbG9j
a0luc2VydGlvbiYmKTsKLQotICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBhIGdpdmVuIGlu
ZGV4LgotICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1
ZW5jeSA9IFBOYU4pOwotCi0gICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBiZWZvcmUgdGhlIGdp
dmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNzIHRoZSBmcmVxdWVuY3kKLSAgICAv
LyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0byBqdXN0IHVzZSB0aGUgZnJlcXVl
bmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCi0gICAgLy8gdXN1YWxseSB3aGF0IHlv
dSB3YW50LgotICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUs
IGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLQotICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sg
YWZ0ZXIgdGhlIGdpdmVuIGJsb2NrLgotICAgIEJhc2ljQmxvY2sqIGluc2VydEFmdGVyKEJhc2lj
QmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7Ci0KICAgICAvLyBBIGhlbHBl
ciB0byBzcGxpdCBhIGJsb2NrIHdoZW4gZm9yd2FyZCBpdGVyYXRpbmcgb3ZlciBpdC4gSXQgY3Jl
YXRlcyBhIG5ldyBibG9jayB0byBob2xkCiAgICAgLy8gZXZlcnl0aGluZyBiZWZvcmUgdGhlIGlu
c3RydWN0aW9uIGF0IHZhbHVlSW5kZXguIFRoZSBjdXJyZW50IGJsb2NrIGlzIGxlZnQgd2l0aAog
ICAgIC8vIGV2ZXJ5dGhpbmcgYXQgYW5kIGFmdGVyIHZhbHVlSW5kZXguIElmIHRoZSBvcHRpb25h
bCBJbnNlcnRpb25TZXQgaXMgcHJvdmlkZWQsIGl0IHdpbGwgZ2V0CkBAIC04MCwxMiArNjgsOSBA
QCBwdWJsaWM6CiAgICAgQmFzaWNCbG9jayogc3BsaXRGb3J3YXJkKAogICAgICAgICBCYXNpY0Js
b2NrKiwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIEluc2VydGlvblNldCogPSBudWxscHRyLAogICAg
ICAgICBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7Ci0gICAgCi0gICAgYm9vbCBleGVjdXRlKCk7
CiAKIHByaXZhdGU6CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7Ci0gICAgVmVjdG9yPEJsb2NrSW5z
ZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCShyZXZpc2lvbiAyMTI5
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODIsNyArODIsOCBAQCBib29sIEVmZmVjdHM6OmludGVyZmVyZXMoY29uc3QgRWZm
ZWN0cyYgCiAgICAgICAgIHx8IGludGVyZmVyZXNXaXRoV3JpdGVzUGlubmVkKG90aGVyLCAqdGhp
cykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKICAgICAgICAgfHwg
d3JpdGVzLm92ZXJsYXBzKG90aGVyLnJlYWRzKQotICAgICAgICB8fCByZWFkcy5vdmVybGFwcyhv
dGhlci53cml0ZXMpOworICAgICAgICB8fCByZWFkcy5vdmVybGFwcyhvdGhlci53cml0ZXMpCisg
ICAgICAgIHx8IChmZW5jZSAmJiBvdGhlci5mZW5jZSk7CiB9CiAKIGJvb2wgRWZmZWN0czo6b3Bl
cmF0b3I9PShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAgLTk1LDcgKzk2LDggQEAgYm9v
bCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0IEVmZmVjdHMmIAogICAgICAgICAmJiB3cml0ZXNQ
aW5uZWQgPT0gb3RoZXIud3JpdGVzUGlubmVkCiAgICAgICAgICYmIHJlYWRzUGlubmVkID09IG90
aGVyLnJlYWRzUGlubmVkCiAgICAgICAgICYmIHdyaXRlcyA9PSBvdGhlci53cml0ZXMKLSAgICAg
ICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHM7CisgICAgICAgICYmIHJlYWRzID09IG90aGVyLnJl
YWRzCisgICAgICAgICYmIGZlbmNlID09IG90aGVyLmZlbmNlOwogfQogCiBib29sIEVmZmVjdHM6
Om9wZXJhdG9yIT0oY29uc3QgRWZmZWN0cyYgb3RoZXIpIGNvbnN0CkBAIC0xMjAsNiArMTIyLDgg
QEAgdm9pZCBFZmZlY3RzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbgogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJXcml0ZXNQaW5uZWQiKTsKICAgICBpZiAocmVhZHNQaW5uZWQpCiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgIlJlYWRzUGlubmVkIik7CisgICAgaWYgKGZlbmNlKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJGZW5jZSIpOwogICAgIGlmICh3cml0ZXMpCiAgICAgICAg
IG91dC5wcmludChjb21tYSwgIldyaXRlczoiLCB3cml0ZXMpOwogICAgIGlmIChyZWFkcykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNiArNzEsMTAgQEAgc3RydWN0IEVmZmVjdHMgewogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMxNzMKICAgICBib29sIHJlYWRzUGlubmVkIHsgZmFs
c2UgfTsKICAgICBib29sIHdyaXRlc1Bpbm5lZCB7IGZhbHNlIH07CisgICAgCisgICAgLy8gTWVt
b3J5IGZlbmNlcyBjYW5ub3QgYmUgcmVvcmRlcmVkIGFyb3VuZCBlYWNoIG90aGVyIHJlZ2FyZGxl
c3Mgb2YgdGhlaXIgZWZmZWN0cy4gVGhpcyBpcyBmbGFnZ2VkCisgICAgLy8gaWYgdGhlIG9wZXJh
dGlvbiBpcyBhIG1lbW9yeSBmZW5jZS4KKyAgICBib29sIGZlbmNlIHsgZmFsc2UgfTsKIAogICAg
IEhlYXBSYW5nZSB3cml0ZXM7CiAgICAgSGVhcFJhbmdlIHJlYWRzOwpAQCAtODksNiArOTMsNyBA
QCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IEhlYXBSYW5nZTo6dG9w
KCk7CiAgICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgIHJlc3VsdC53
cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMTAzLDcgKzEwOCw3IEBAIHN0cnVjdCBFZmZl
Y3RzIHsKIAogICAgIGJvb2wgbXVzdEV4ZWN1dGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIHRlcm1pbmFsIHx8IGV4aXRzU2lkZXdheXMgfHwgd3JpdGVzTG9jYWxTdGF0ZSB8fCB3cml0
ZXMgfHwgd3JpdGVzUGlubmVkOworICAgICAgICByZXR1cm4gdGVybWluYWwgfHwgZXhpdHNTaWRl
d2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQaW5uZWQgfHwgZmVu
Y2U7CiAgICAgfQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHJlb3JkZXJpbmcgaW5zdHJ1Y3Rp
b25zIHdpdGggdGhlc2UgcmVzcGVjdGl2ZSBlZmZlY3RzIHdvdWxkIGNoYW5nZSBwcm9ncmFtCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNz
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWlu
YXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTQyLDYgKzE0Miw3IEBAIHN0cnVjdCBJbXB1cmVCbG9ja0RhdGEgewogCiAg
ICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiByZWFkczsgLy8gVGhpcyBvbmx5IGdldHMgdXNlZCBmb3Ig
Zm9yd2FyZCBzdG9yZSBlbGltaW5hdGlvbi4KICAgICBSYW5nZVNldDxIZWFwUmFuZ2U+IHdyaXRl
czsgLy8gVGhpcyBnZXRzIHVzZWQgZm9yIGJvdGggbG9hZCBhbmQgc3RvcmUgZWxpbWluYXRpb24u
CisgICAgYm9vbCBmZW5jZTsKIAogICAgIE1lbW9yeVZhbHVlTWFwIHN0b3Jlc0F0SGVhZDsKICAg
ICBNZW1vcnlWYWx1ZU1hcCBtZW1vcnlWYWx1ZXNBdFRhaWw7CkBAIC0xNzQsMTIgKzE3NSwxNCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG1lbW9yeSAm
JiBtZW1vcnktPmlzU3RvcmUoKQogICAgICAgICAgICAgICAgICAgICAmJiAhZGF0YS5yZWFkcy5v
dmVybGFwcyhtZW1vcnktPnJhbmdlKCkpCi0gICAgICAgICAgICAgICAgICAgICYmICFkYXRhLndy
aXRlcy5vdmVybGFwcyhtZW1vcnktPnJhbmdlKCkpKQorICAgICAgICAgICAgICAgICAgICAmJiAh
ZGF0YS53cml0ZXMub3ZlcmxhcHMobWVtb3J5LT5yYW5nZSgpKQorICAgICAgICAgICAgICAgICAg
ICAmJiAoIWRhdGEuZmVuY2UgfHwgIW1lbW9yeS0+aGFzRmVuY2UoKSkpCiAgICAgICAgICAgICAg
ICAgICAgIGRhdGEuc3RvcmVzQXRIZWFkLmFkZChtZW1vcnkpOwogICAgICAgICAgICAgICAgIGRh
dGEucmVhZHMuYWRkKGVmZmVjdHMucmVhZHMpOwogCiAgICAgICAgICAgICAgICAgaWYgKEhlYXBS
YW5nZSB3cml0ZXMgPSBlZmZlY3RzLndyaXRlcykKICAgICAgICAgICAgICAgICAgICAgY2xvYmJl
cihkYXRhLCB3cml0ZXMpOworICAgICAgICAgICAgICAgIGRhdGEuZmVuY2UgfD0gZWZmZWN0cy5m
ZW5jZTsKIAogICAgICAgICAgICAgICAgIGlmIChtZW1vcnkpCiAgICAgICAgICAgICAgICAgICAg
IGRhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmFkZChtZW1vcnkpOwpAQCAtNDc4LDYgKzQ4MSw5IEBA
IHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyPgogICAgIGJvb2wgZmluZFN0
b3JlQWZ0ZXJDbG9iYmVyKFZhbHVlKiBwdHIsIEhlYXBSYW5nZSByYW5nZSwgY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCiAgICAgeworICAgICAgICBpZiAobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkt
Pmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAogICAgICAg
ICAvLyBXZSBjYW4gZWxpbWluYXRlIGEgc3RvcmUgaWYgZXZlcnkgZm9yd2FyZCBwYXRoIGhpdHMg
YSBzdG9yZSB0byB0aGUgc2FtZSBsb2NhdGlvbiBiZWZvcmUKICAgICAgICAgLy8gaGl0dGluZyBh
bnkgb3BlcmF0aW9uIHRoYXQgb2JzZXJ2ZXMgdGhlIHN0b3JlLiBUaGlzIHNlYXJjaCBzZWVtcyBs
aWtlIGl0IHNob3VsZCBiZQogICAgICAgICAvLyBleHBlbnNpdmUsIGJ1dCBpbiB0aGUgb3Zlcndo
ZWxtaW5nIG1ham9yaXR5IG9mIGNhc2VzIGl0IHdpbGwgYWxtb3N0IGltbWVkaWF0ZWx5IGhpdCBh
biAKQEAgLTYxNCw2ICs2MjAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICBkYXRhTG9nKCptX3ZhbHVlLCAiOiBsb29raW5nIGJhY2t3YXJkIGZvciAiLCAq
cHRyLCAiLi4uXG4iKTsKICAgICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlW
YWx1ZT4oKS0+aGFzRmVuY2UoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIEdpdmluZyB1cCBiZWNhdXNlIGZlbmNlcy5cbiIpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAo
TWVtb3J5VmFsdWUqIG1hdGNoID0gbV9kYXRhLm1lbW9yeVZhbHVlc0F0VGFpbC5maW5kKHB0ciwg
ZmlsdGVyKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgIEZvdW5kICIsICptYXRjaCwgIiBsb2NhbGx5LlxuIik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTky
LDYgKzkyLDcgQEAgdm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CiAg
ICAgfQogCisgICAgLy8gVGhpcyBwdXRzIHRoZSBJUiBpbiBxdWlya3MgbW9kZS4KICAgICBsb3dl
ck1hY3Jvcyhwcm9jZWR1cmUpOwogCiAgICAgaWYgKG9wdExldmVsID49IDEpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNCbG9ja0luc2VydGlv
blNldC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVy
aWNCbG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citj
bGFzcyBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIHR5cGVkZWYgV1RG
OjpJbnNlcnRpb248c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBCbG9ja0luc2VydGlvbjsK
KyAgICAKKyAgICBCbG9ja0luc2VydGlvblNldChWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2lj
QmxvY2s+PiYgYmxvY2tzKQorICAgICAgICA6IG1fYmxvY2tzKGJsb2NrcykKKyAgICB7CisgICAg
fQorICAgIAorICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYgaW5zZXJ0aW9uKQorICAg
IHsKKyAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChXVEZNb3ZlKGluc2VydGlvbikpOworICAg
IH0KKworICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBhIGdpdmVuIGluZGV4LgorICAgIEJh
c2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4p
CisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJh
c2ljQmxvY2soVUlOVF9NQVgsIGZyZXF1ZW5jeSkpOworICAgICAgICBCYXNpY0Jsb2NrKiByZXN1
bHQgPSBibG9jay5nZXQoKTsKKyAgICAgICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBX
VEZNb3ZlKGJsb2NrKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8v
IEluc2VydHMgYSBuZXcgYmxvY2sgYmVmb3JlIHRoZSBnaXZlbiBibG9jay4gVXN1YWxseSB5b3Ug
d2lsbCBub3QgcGFzcyB0aGUgZnJlcXVlbmN5CisgICAgLy8gYXJndW1lbnQuIFBhc3NpbmcgUE5h
TiBjYXVzZXMgdXMgdG8ganVzdCB1c2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgJ2JlZm9yZScgYmxv
Y2suIFRoYXQncworICAgIC8vIHVzdWFsbHkgd2hhdCB5b3Ugd2FudC4KKyAgICBCYXNpY0Jsb2Nr
KiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5h
TikKKyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCgpLCBmcmVxdWVu
Y3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVuY3koKSk7CisgICAg
fQorCisgICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2ZW4gYmxvY2suCisg
ICAgQmFzaWNCbG9jayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBmcmVx
dWVuY3kgPSBQTmFOKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluc2VydChhZnRlci0+aW5kZXgo
KSArIDEsIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBhZnRlci0+ZnJlcXVl
bmN5KCkpOworICAgIH0KKworICAgIGJvb2wgZXhlY3V0ZSgpCisgICAgeworICAgICAgICBpZiAo
bV9pbnNlcnRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFdlIGFsbG93IGluc2VydGlvbnMgdG8gYmUgZ2l2ZW4gdG8gdXMgaW4g
YW55IG9yZGVyLiBTbywgd2UgbmVlZCB0byBzb3J0IHRoZW0gYmVmb3JlCisgICAgICAgIC8vIHJ1
bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEgc3RhYmxl
IHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8gYmUKKyAgICAgICAgLy8gZmFzdCwgc28gd2UgdXNlIGJ1
YmJsZSBzb3J0LgorICAgICAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2lu
c2VydGlvbnMuZW5kKCkpOworICAgICAgICAKKyAgICAgICAgZXhlY3V0ZUluc2VydGlvbnMobV9i
bG9ja3MsIG1faW5zZXJ0aW9ucyk7CisgICAgICAgIAorICAgICAgICAvLyBQcnVuZSBvdXQgZW1w
dHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0J3MKKyAgICAg
ICAgLy8gaGVhbHRoeSB0byBrZWVwIHRoZSBibG9jayBsaXN0IGZyb20gZ3Jvd2luZy4KKyAgICAg
ICAgbV9ibG9ja3MucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBbJl0gKHN0ZDo6dW5p
cXVlX3B0cjxCYXNpY0Jsb2NrPiYgYmxvY2tQdHIpIC0+IGJvb2wgeworICAgICAgICAgICAgICAg
IHJldHVybiAhYmxvY2tQdHI7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgbV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFz
aWNCbG9jaz4+JiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1faW5z
ZXJ0aW9uczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgfQogICAgIAorICAgIEhlYXBSYW5nZSBvcGVyYXRv
cnwoY29uc3QgSGVhcFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBI
ZWFwUmFuZ2UoCisgICAgICAgICAgICBzdGQ6Om1pbihtX2JlZ2luLCBvdGhlci5tX2JlZ2luKSwK
KyAgICAgICAgICAgIHN0ZDo6bWF4KG1fZW5kLCBvdGhlci5tX2VuZCkpOworICAgIH0KKyAgICAK
ICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBt
X2VuZDsgfQogCiAgICAgdW5zaWduZWQgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw2ICs1OCwxMSBAQCBWYWx1ZSogSW5zZXJ0aW9u
U2V0OjppbnNlcnRCb3R0b20oc2l6ZV90CiAgICAgcmV0dXJuIGluc2VydEJvdHRvbShpbmRleCwg
bGlrZVZhbHVlLT5vcmlnaW4oKSwgbGlrZVZhbHVlLT50eXBlKCkpOwogfQogCitWYWx1ZSogSW5z
ZXJ0aW9uU2V0OjppbnNlcnRDbG9uZShzaXplX3QgaW5kZXgsIFZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gaW5zZXJ0VmFsdWUoaW5kZXgsIG1fcHJvY2VkdXJlLmNsb25lKHZhbHVlKSk7Cit9
CisKIHZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAg
IGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkocmV2aXNpb24g
MjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDggQEAgcHVibGljOgogCiAgICAgVmFsdWUqIGluc2Vy
dEJvdHRvbShzaXplX3QgaW5kZXgsIE9yaWdpbiwgVHlwZSk7CiAgICAgVmFsdWUqIGluc2VydEJv
dHRvbShzaXplX3QgaW5kZXgsIFZhbHVlKik7CisgICAgCisgICAgVmFsdWUqIGluc2VydENsb25l
KHNpemVfdCBpbmRleCwgVmFsdWUqKTsKIAogICAgIHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2NrKik7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDExICs1OCwxNCBAQCBwdWJsaWM6CiAgICAgICAg
IDogbV9wcm9jKHByb2MpCiAgICAgICAgICwgbV9ibG9ja0luc2VydGlvblNldChwcm9jKQogICAg
ICAgICAsIG1faW5zZXJ0aW9uU2V0KHByb2MpCisgICAgICAgICwgbV91c2VDb3VudHMocHJvYykK
ICAgICB7CiAgICAgfQogCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fcHJvYy5oYXNRdWlya3MoKSk7CisgICAgICAgIAogICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAg
ICAgICAgICAgICBwcm9jZXNzQ3VycmVudEJsb2NrKCk7CkBAIC03Miw2ICs3NSwxMCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBtX3Byb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKICAgICAgICAgICAg
IG1fcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IFRoaXMgaW5kaWNhdGVzIHRoYXQgd2UndmUgCisgICAgICAgIG1fcHJvYy5zZXRIYXNRdWlya3Mo
dHJ1ZSk7CisgICAgICAgIAogICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0KICAgICAK
QEAgLTE4NSw3ICsxOTIsOTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBEZXBlbmQ6IHsKKyAgICAgICAgICAgICAgICBpZiAo
aXNYODYoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBsb2FkLWxvYWQgZmVu
Y2UuIFRoaXMgY29kZWdlbnMgdG8gbm90aGluZyBvbiBYODYuIFdlIHVzZSBpdCB0byB0ZWxsIHRo
ZQorICAgICAgICAgICAgICAgICAgICAvLyBjb21waWxlciBub3QgdG8gYmxvY2sgbG9hZCBtb3Rp
b24uCisgICAgICAgICAgICAgICAgICAgIEZlbmNlVmFsdWUqIGZlbmNlID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0PEZlbmNlVmFsdWU+KG1faW5kZXgsIG1fb3JpZ2luKTsKKyAgICAgICAgICAgICAg
ICAgICAgZmVuY2UtPnJlYWQgPSBIZWFwUmFuZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgZmVu
Y2UtPndyaXRlID0gSGVhcFJhbmdlOjp0b3AoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIC8vIEtpbGwgdGhlIERlcGVuZCwgd2hpY2ggc2hvdWxkIHVubG9jayBh
IGJ1bmNoIG9mIGNvZGUgc2ltcGxpZmljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIG1fbm9k
ZS0+cmVwbGFjZVdpdGhCb3R0b20obV9pbnNlcnRpb25TZXQsIG1faW5kZXgpOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAKKyAg
ICAgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljU3Ry
b25nQ0FTOiB7CisgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEF0b21pY1ZhbHVl
KiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgICAgICBX
aWR0aCB3aWR0aCA9IGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAoaXNDYW5vbmljYWxXaWR0aCh3aWR0aCkpCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZhbHVl
KiBleHBlY3RlZFZhbHVlID0gYXRvbWljLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAvLyBPbiBBUk0sIHRoZSBsb2FkIHBhcnQgb2YgdGhlIENBUyBkb2VzIGEg
bG9hZCB3aXRoIHplcm8gZXh0ZW5zaW9uLiBUaGVyZWZvcmUsIHdlIG5lZWQKKyAgICAgICAgICAg
ICAgICAvLyB0byB6ZXJvLWV4dGVuZCB0aGUgaW5wdXQuCisgICAgICAgICAgICAgICAgVmFsdWUq
IG1hc2tlZEV4cGVjdGVkVmFsdWUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAorICAg
ICAgICAgICAgICAgICAgICBtX2luZGV4LCBCaXRBbmQsIG1fb3JpZ2luLCBleHBlY3RlZFZhbHVl
LAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRJbnRDb25zdGFudCht
X2luZGV4LCBleHBlY3RlZFZhbHVlLCBtYXNrKHdpZHRoKSkpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGF0b21pYy0+Y2hpbGQoMCkgPSBtYXNrZWRFeHBlY3RlZFZhbHVlOwor
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEF0b21p
Y1hjaGdBZGQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAgICBj
YXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAg
ICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZzog
eworICAgICAgICAgICAgICAgIC8vIE9uIFg4NiwgdGhlc2UgbWF5IGFjdHVhbGx5IHJldHVybiBn
YXJiYWdlIGluIHRoZSBoaWdoIGJpdHMuIE9uIEFSTTY0LCB0aGVzZSBzb3J0YQorICAgICAgICAg
ICAgICAgIC8vIHplcm8tZXh0ZW5kIHRoZWlyIGhpZ2ggYml0cywgZXhjZXB0IHRoYXQgdGhlIGhp
Z2ggYml0cyBtaWdodCBnZXQgcG9sbHV0ZWQgYnkgaGlnaAorICAgICAgICAgICAgICAgIC8vIGJp
dHMgaW4gdGhlIG9wZXJhbmQuIC4gU28sIGVpdGhlciB3YXksIHdlIG5lZWQgdG8gdGhyb3cgYSBz
aWduLWV4dGVuZCBvbiB0aGVzZQorICAgICAgICAgICAgICAgIC8vIHRoaW5ncy4KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAobV92YWx1ZS0+b3Bjb2RlKCkgPT0gQXRvbWljWGNoZ1N1YiAmJiBtX3VzZUNvdW50
cy5udW1Vc2VzKG1fdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbiB4ODYs
IHhjaGdhZGQgaXMgYmV0dGVyIHRoYW4geGNoZ3N1YiBpZiBpdCBoYXMgYW55IHVzZXJzLgorICAg
ICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+c2V0S2luZFVuc2FmZWx5KEF0b21pY1hjaGdB
ZGQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBtX2luc2Vy
dGlvblNldC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5k
ZXgsIE5lZywgbV9vcmlnaW4sIG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBleGVt
cHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUo
KSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEF0
b21pY1hjaGdTdWI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGV4ZW1wdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlmIChleGVtcHQpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQXRvbWljVmFsdWUq
IGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgICAgIFdp
ZHRoIHdpZHRoID0gYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIChpc0Nhbm9uaWNhbFdpZHRoKHdpZHRoKSkKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFsdWUq
IG5ld1ZhbHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbmRleCwgc2lnbkV4dGVuZE9wY29kZSh3aWR0aCksIG1fb3JpZ2luLAorICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRDbG9uZShtX2luZGV4LCBtX3ZhbHVl
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdp
dGhJZGVudGl0eShuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CkBAIC00NzAsNiArNTY2LDcgQEAgcHJpdmF0ZToKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsK
ICAgICBCbG9ja0luc2VydGlvblNldCBtX2Jsb2NrSW5zZXJ0aW9uU2V0OwogICAgIEluc2VydGlv
blNldCBtX2luc2VydGlvblNldDsKKyAgICBVc2VDb3VudHMgbV91c2VDb3VudHM7CiAgICAgQmFz
aWNCbG9jayogbV9ibG9jazsKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3Zh
bHVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3NBZnRlck9w
dGltaXphdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsMTUgKzE1NiwxNCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgY2FzZSBSb3RMOiB7CiAgICAgICAgICAgICAgICAgLy8gQVJNNjQgZG9lc24ndCBoYXZl
IGEgcm90YXRlIGxlZnQuCiAgICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBW
YWx1ZSogbmV3U2hpZnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIE5l
ZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFZhbHVlKiByb3RhdGUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1f
aW5kZXgsIFJvdFIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbmV3U2hp
ZnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0
eShyb3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld1NoaWZ0ID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3Zh
bHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiByb3RhdGUgPSBtX2lu
c2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIFJvdFIsIG1fdmFsdWUtPm9yaWdpbigp
LCBtX3ZhbHVlLT5jaGlsZCgwKSwgbmV3U2hpZnQpOworICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KHJvdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDE0
IEBAIG5hbWVzcGFjZSB7CiAKIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCisvLyBGSVhN
RTogV2Ugd291bGRuJ3QgbmVlZCB0aGlzIGlmIEFpciBzdXBwb3J0ZWQgV2lkdGggbW9kaWZpZXJz
IGluIEFpcjo6S2luZC4KKy8vIE9PUFMhISEgKG5lZWQgYSBidWcgVVJMKQorI2RlZmluZSBPUENP
REVfRk9SX1dJRFRIKG9wY29kZSwgd2lkdGgpICggXAorICAgICh3aWR0aCkgPT0gV2lkdGg4ID8g
b3Bjb2RlICMjIDggOiBcCisgICAgKHdpZHRoKSA9PSBXaWR0aDE2ID8gb3Bjb2RlICMjIDE2IDog
XAorICAgICh3aWR0aCkgPT0gV2lkdGgzMiA/IG9wY29kZSAjIyAzMiA6IFwKKyAgICBvcGNvZGUg
IyMgNjQpCisKIGNsYXNzIExvd2VyVG9BaXIgewogcHVibGljOgogICAgIExvd2VyVG9BaXIoUHJv
Y2VkdXJlJiBwcm9jZWR1cmUpCkBAIC04Myw2ICs5MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICwg
bV9kb21pbmF0b3JzKHByb2NlZHVyZS5kb21pbmF0b3JzKCkpCiAgICAgICAgICwgbV9wcm9jZWR1
cmUocHJvY2VkdXJlKQogICAgICAgICAsIG1fY29kZShwcm9jZWR1cmUuY29kZSgpKQorICAgICAg
ICAsIG1fYmxvY2tJbnNlcnRpb25TZXQobV9jb2RlKQorI2lmIENQVShYODYpIHx8IENQVShYODZf
NjQpCisgICAgICAgICwgbV9lYXgoWDg2UmVnaXN0ZXJzOjplYXgpCisgICAgICAgICwgbV9lY3go
WDg2UmVnaXN0ZXJzOjplY3gpCisgICAgICAgICwgbV9lZHgoWDg2UmVnaXN0ZXJzOjplZHgpCisj
ZW5kaWYKICAgICB7CiAgICAgfQogCkBAIC0xMjQsMTQgKzEzOCwxOCBAQCBwdWJsaWM6CiAgICAg
ICAgIC8vIGhvaXN0ZWQgYWRkcmVzcyBleHByZXNzaW9uIGJlZm9yZSB3ZSBkdXBsaWNhdGUgaXQg
YmFjayBpbnRvIHRoZSBsb29wLgogICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6
IG1fcHJvY2VkdXJlLmJsb2Nrc0luUHJlT3JkZXIoKSkgewogICAgICAgICAgICAgbV9ibG9jayA9
IGJsb2NrOwotICAgICAgICAgICAgLy8gUmVzZXQgc29tZSBzdGF0ZS4KLSAgICAgICAgICAgIG1f
aW5zdHMucmVzaXplKDApOwogCiAgICAgICAgICAgICBtX2lzUmFyZSA9ICFtX2Zhc3RXb3JrbGlz
dC5zYXcoYmxvY2spOwogCiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJMb3dlcmluZyBCbG9jayAiLCAqYmxvY2ssICI6XG4iKTsKICAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1
cCBjb3JyZWN0bHkuCisgICAgICAgICAgICBmb3IgKEIzOjpGcmVxdWVudGVkQmxvY2sgc3VjY2Vz
c29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Js
b2NrW2Jsb2NrXS0+c3VjY2Vzc29ycygpLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgQWly
OjpGcmVxdWVudGVkQmxvY2sobV9ibG9ja1RvQmxvY2tbc3VjY2Vzc29yLmJsb2NrKCldLCBzdWNj
ZXNzb3IuZnJlcXVlbmN5KCkpKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gUHJv
Y2VzcyBibG9ja3MgaW4gcmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4g
VGhhdCdzIHdoYXQgYWxsb3dzIHVzCiAgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBl
ZmZlY3RpdmVseS4KICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7
IGktLTspIHsKQEAgLTE0OSwxOSArMTY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGluc3RydWN0
aW9ucy4gbV9pbnN0cyBjb250YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIsIHNvIHdlIHByb2Nl
c3MKLSAgICAgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCi0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2luc3RzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIGZvciAoSW5z
dCYgaW5zdCA6IG1faW5zdHNbaV0pCi0gICAgICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Jsb2Nr
W2Jsb2NrXS0+YXBwZW5kSW5zdChXVEZNb3ZlKGluc3QpKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1cCBjb3Jy
ZWN0bHkuCi0gICAgICAgICAgICBmb3IgKEIzOjpGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yIDog
YmxvY2stPnN1Y2Nlc3NvcnMoKSkgewotICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Jsb2NrW2Js
b2NrXS0+c3VjY2Vzc29ycygpLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgQWlyOjpGcmVx
dWVudGVkQmxvY2sobV9ibG9ja1RvQmxvY2tbc3VjY2Vzc29yLmJsb2NrKCldLCBzdWNjZXNzb3Iu
ZnJlcXVlbmN5KCkpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmlzaEFwcGVuZGlu
Z0luc3RydWN0aW9ucyhtX2Jsb2NrVG9CbG9ja1tibG9ja10pOwogICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX2Jsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKIAogICAgICAgICBBaXI6
Okluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9jb2RlKTsKICAgICAgICAgZm9yIChJbnN0JiBp
bnN0IDogbV9wcm9sb2d1ZSkKQEAgLTUzOCw3ICs1NDcsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuIEFyZygpOwogCiAgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gdmFsdWUtPm9mZnNl
dCgpOwotICAgICAgICBXaWR0aCB3aWR0aCA9IHZhbHVlLT5hY2Nlc3NXaWR0aCgpOworICAgICAg
ICBXaWR0aCB3aWR0aCA9IHZhbHVlLT5sb2FkU3RvcmVXaWR0aCgpOwogCiAgICAgICAgIEFyZyBy
ZXN1bHQgPSBlZmZlY3RpdmVBZGRyKHZhbHVlLT5sYXN0Q2hpbGQoKSwgb2Zmc2V0LCB3aWR0aCk7
CiAgICAgICAgIEFTU0VSVChyZXN1bHQuaXNWYWxpZEZvcm0od2lkdGgpKTsKQEAgLTU2MiwxMSAr
NTcxLDE2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQXJnUHJvbWlzZSBsb2FkUHJvbWlzZUFueU9w
Y29kZShWYWx1ZSogbG9hZFZhbHVlKQogICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobG9h
ZFZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSk7CiAgICAgICAgIGlmICghY2FuQmVJbnRlcm5hbChs
b2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwogICAgICAgICBpZiAoY3Jvc3Nl
c0ludGVyZmVyZW5jZShsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwotICAg
ICAgICBBcmdQcm9taXNlIHJlc3VsdChhZGRyKGxvYWRWYWx1ZSksIGxvYWRWYWx1ZSk7CisgICAg
ICAgIGlmIChsb2FkVmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBBcmcgbG9hZEFkZHIgPSBhZGRyKGxvYWRWYWx1
ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvYWRBZGRyKTsKKyAgICAgICAgQXJnUHJvbWlz
ZSByZXN1bHQobG9hZEFkZHIsIGxvYWRWYWx1ZSk7CiAgICAgICAgIGlmIChsb2FkVmFsdWUtPnRy
YXBzKCkpCiAgICAgICAgICAgICByZXN1bHQuc2V0VHJhcHModHJ1ZSk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CkBAIC04OTgsMTEgKzkxMiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCiAgICAgICAgIGFw
cGVuZChNb3ZlLCB0bXAodmFsdWUpLCB0bXAobV92YWx1ZSkpOwotICAgICAgICBhcHBlbmQoTW92
ZSwgdG1wKGFtb3VudCksIFRtcChYODZSZWdpc3RlcnM6OmVjeCkpOwotICAgICAgICBhcHBlbmQo
b3Bjb2RlLCBUbXAoWDg2UmVnaXN0ZXJzOjplY3gpLCB0bXAobV92YWx1ZSkpOwotI2VuZGlmCisg
ICAgICAgIGFwcGVuZChNb3ZlLCB0bXAoYW1vdW50KSwgbV9lY3gpOworICAgICAgICBhcHBlbmQo
b3Bjb2RlLCBtX2VjeCwgdG1wKG1fdmFsdWUpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxBaXI6
Ok9wY29kZSBvcGNvZGUzMiwgQWlyOjpPcGNvZGUgb3Bjb2RlNjQ+CkBAIC05MzEsMTAgKzk0Mywx
NSBAQCBwcml2YXRlOgogICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUzMiwgQWlyOjpPcGNvZGUg
b3Bjb2RlNjQsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgog
ICAgIGJvb2wgdHJ5QXBwZW5kU3RvcmVCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQog
ICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkp
OworICAgICAgICAKICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlw
ZShvcGNvZGUzMiwgb3Bjb2RlNjQsIGxlZnQtPnR5cGUoKSk7CiAgICAgICAgIGlmIChvcGNvZGUg
PT0gQWlyOjpPb3BzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAg
ICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKICAgICAgICAgQXJnIHN0b3JlQWRkciA9IGFkZHIo
bV92YWx1ZSk7CiAgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOwogCkBAIC05OTQsMTAgKzEwMTEs
NDggQEAgcHJpdmF0ZToKIAogICAgICAgICByZXR1cm4gSW5zdChtb3ZlLCBtX3ZhbHVlLCB0bXAo
dmFsdWUpLCBkZXN0KTsKICAgICB9CisgICAgCisgICAgQWlyOjpPcGNvZGUgc3RvcmVPcGNvZGUo
V2lkdGggd2lkdGgsIEJhbmsgYmFuaywgYm9vbCByZWxlYXNlKQorICAgIHsKKyAgICAgICAgc3dp
dGNoICh3aWR0aCkgeworICAgICAgICBjYXNlIFdpZHRoODoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGJhbmsgPT0gR1ApOworICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBTdG9yZVJl
bDggOiBTdG9yZTg7CisgICAgICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGJhbmsgPT0gR1ApOworICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBTdG9yZVJl
bDE2IDogU3RvcmUxNjsKKyAgICAgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICAgICAgc3dpdGNo
IChiYW5rKSB7CisgICAgICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgICAgIHJldHVybiBy
ZWxlYXNlID8gU3RvcmVSZWwzMiA6IE1vdmUzMjsKKyAgICAgICAgICAgIGNhc2UgRlA6CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlbGVhc2UpOworICAgICAgICAgICAgICAgIHJl
dHVybiBNb3ZlRmxvYXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXM2NEJpdCgpKTsK
KyAgICAgICAgICAgIHN3aXRjaCAoYmFuaykgeworICAgICAgICAgICAgY2FzZSBHUDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVsNjQgOiBNb3ZlOworICAgICAgICAg
ICAgY2FzZSBGUDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVsZWFzZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE1vdmVEb3VibGU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKyAgICAKKyAgICBBaXI6Ok9wY29kZSBzdG9yZU9wY29kZShWYWx1ZSogdmFs
dWUpCisgICAgeworICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpOworICAgICAgICByZXR1cm4gc3RvcmVPcGNvZGUobWVtb3J5LT5sb2FkU3RvcmVX
aWR0aCgpLCBtZW1vcnktPmFjY2Vzc0JhbmsoKSwgbWVtb3J5LT5oYXNGZW5jZSgpKTsKKyAgICB9
CiAKICAgICBJbnN0IGNyZWF0ZVN0b3JlKFZhbHVlKiB2YWx1ZSwgY29uc3QgQXJnJiBkZXN0KQog
ICAgIHsKLSAgICAgICAgQWlyOjpPcGNvZGUgbW92ZU9wY29kZSA9IG1vdmVGb3JUeXBlKHZhbHVl
LT50eXBlKCkpOworICAgICAgICBBaXI6Ok9wY29kZSBtb3ZlT3Bjb2RlID0gc3RvcmVPcGNvZGUo
dmFsdWUpOwogICAgICAgICByZXR1cm4gY3JlYXRlU3RvcmUobW92ZU9wY29kZSwgdmFsdWUsIGRl
c3QpOwogICAgIH0KIApAQCAtMTAwNiw3ICsxMDYxLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
ICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgY3JlYXRlU3RvcmUoc3RkOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKSkpOwogICAgIH0KLQorICAgIAogICAgIEFpcjo6T3Bjb2RlIG1vdmVG
b3JUeXBlKFR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMTA3
Myw3ICsxMTI4LDQxIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBtX2luc3RzLmxhc3QoKS5h
cHBlbmQoaW5zdCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgZmluaXNoQXBwZW5kaW5nSW5zdHJ1
Y3Rpb25zKEFpcjo6QmFzaWNCbG9jayogdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gTm93IGFw
cGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBtX2luc3RzIGNvbnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBv
cmRlciwgc28gd2UgcHJvY2VzcworICAgICAgICAvLyBpdCBpbiByZXZlcnNlLgorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX2luc3RzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgZm9y
IChJbnN0JiBpbnN0IDogbV9pbnN0c1tpXSkKKyAgICAgICAgICAgICAgICB0YXJnZXQtPmFwcGVu
ZEluc3QoV1RGTW92ZShpbnN0KSk7CisgICAgICAgIH0KKyAgICAgICAgbV9pbnN0cy5yZXNpemUo
MCk7CisgICAgfQorICAgIAorICAgIEFpcjo6QmFzaWNCbG9jayogbmV3QmxvY2soKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fYmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0QWZ0ZXIobV9ibG9ja1Rv
QmxvY2tbbV9ibG9ja10pOworICAgIH0KIAorICAgIC8vIE5PVEU6IFRoaXMgd2lsbCBjcmVhdGUg
YSBjb250aW51YXRpb24gYmxvY2sgKGBuZXh0QmxvY2tgKSAqYWZ0ZXIqIGFueSBibG9ja3MgeW91
J3ZlIGNyZWF0ZWQgdXNpbmcKKyAgICAvLyBuZXdCbG9jaygpLiBTbywgaXQncyBwcmVmZXJhYmxl
IHRvIGNyZWF0ZSBhbGwgb2YgeW91ciBibG9ja3MgdXBmcm9udCB1c2luZyBuZXdCbG9jaygpLiBB
bHNvIG5vdGUKKyAgICAvLyB0aGF0IGFueSBjb2RlIHlvdSBlbWl0IGJlZm9yZSB0aGlzIHdpbGwg
YmUgcHJlcGVuZGVkIHRvIHRoZSBjb250aW51YXRpb24sIGFuZCBhbnkgY29kZSB5b3UgZW1pdAor
ICAgIC8vIGFmdGVyIHRoaXMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgcHJldmlvdXMgYmxvY2su
CisgICAgdm9pZCBzcGxpdEJsb2NrKEFpcjo6QmFzaWNCbG9jayomIHByZXZpb3VzQmxvY2ssIEFp
cjo6QmFzaWNCbG9jayomIG5leHRCbG9jaykKKyAgICB7CisgICAgICAgIEFpcjo6QmFzaWNCbG9j
ayogYmxvY2sgPSBtX2Jsb2NrVG9CbG9ja1ttX2Jsb2NrXTsKKyAgICAgICAgCisgICAgICAgIHBy
ZXZpb3VzQmxvY2sgPSBibG9jazsKKyAgICAgICAgbmV4dEJsb2NrID0gbV9ibG9ja0luc2VydGlv
blNldC5pbnNlcnRBZnRlcihibG9jayk7CisgICAgICAgIAorICAgICAgICBmaW5pc2hBcHBlbmRp
bmdJbnN0cnVjdGlvbnMobmV4dEJsb2NrKTsKKyAgICAgICAgbmV4dEJsb2NrLT5zdWNjZXNzb3Jz
KCkgPSBibG9jay0+c3VjY2Vzc29ycygpOworICAgICAgICBibG9jay0+c3VjY2Vzc29ycygpLmNs
ZWFyKCk7CisgICAgICAgIAorICAgICAgICBtX2luc3RzLmFwcGVuZChWZWN0b3I8SW5zdD4oKSk7
CisgICAgfQorICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KICAgICBUKiBlbnN1cmVTcGVjaWFsKFQqJiBmaWVsZCwgQXJndW1lbnRzJiYuLi4gYXJn
dW1lbnRzKQogICAgIHsKQEAgLTExMjMsNyArMTIxMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50Ogog
ICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6Y2FsbEFyZyh2YWx1ZS5yZXAoKS5vZmZzZXRGcm9t
U1AoKSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kU3RvcmUodmFsdWUudmFsdWUoKSwgYXJnKTsK
KyAgICAgICAgICAgICAgICBhcHBlbmRTdG9yZShtb3ZlRm9yVHlwZSh2YWx1ZS52YWx1ZSgpKSwg
YXJnKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE5NjEsNiArMjA1
MCwzMDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgdm9p
ZCBhcHBlbmRYODZEaXYoQjM6Ok9wY29kZSBvcCkKKyAgICB7CisgICAgICAgIEFpcjo6T3Bjb2Rl
IGNvbnZlcnRUb0RvdWJsZVdvcmQ7CisgICAgICAgIEFpcjo6T3Bjb2RlIGRpdjsKKyAgICAgICAg
c3dpdGNoIChtX3ZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAg
ICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBYODZDb252ZXJ0VG9Eb3VibGVXb3JkMzI7CisgICAg
ICAgICAgICBkaXYgPSBYODZEaXYzMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEludDY0OgorICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb1F1
YWRXb3JkNjQ7CisgICAgICAgICAgICBkaXYgPSBYODZEaXY2NDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChv
cCA9PSBEaXYgfHwgb3AgPT0gTW9kKTsKKyAgICAgICAgVG1wIHJlc3VsdCA9IG9wID09IERpdiA/
IG1fZWF4IDogbV9lZHg7CisKKyAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChtX3ZhbHVlLT5jaGls
ZCgwKSksIG1fZWF4KTsKKyAgICAgICAgYXBwZW5kKGNvbnZlcnRUb0RvdWJsZVdvcmQsIG1fZWF4
LCBtX2VkeCk7CisgICAgICAgIGFwcGVuZChkaXYsIG1fZWF4LCBtX2VkeCwgdG1wKG1fdmFsdWUt
PmNoaWxkKDEpKSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCByZXN1bHQsIHRtcChtX3ZhbHVlKSk7
CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRYODZVRGl2KEIzOjpPcGNvZGUgb3ApCisgICAgewor
ICAgICAgICBBaXI6Ok9wY29kZSBkaXYgPSBtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyBYODZV
RGl2MzIgOiBYODZVRGl2NjQ7CisKKyAgICAgICAgQVNTRVJUKG9wID09IFVEaXYgfHwgb3AgPT0g
VU1vZCk7CisgICAgICAgIFRtcCByZXN1bHQgPSBvcCA9PSBVRGl2ID8gbV9lYXggOiBtX2VkeDsK
KworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgbV9lYXgpOwor
ICAgICAgICBhcHBlbmQoWG9yNjQsIG1fZWR4LCBtX2VkeCk7CisgICAgICAgIGFwcGVuZChkaXYs
IG1fZWF4LCBtX2VkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgIGFwcGVuZChN
b3ZlLCByZXN1bHQsIHRtcChtX3ZhbHVlKSk7CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bjb2Rl
IGxvYWRMaW5rT3Bjb2RlKFdpZHRoIHdpZHRoLCBib29sIGZlbmNlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZlbmNlID8gT1BDT0RFX0ZPUl9XSURUSChMb2FkTGlua0FjcSwgd2lkdGgpIDogT1BD
T0RFX0ZPUl9XSURUSChMb2FkTGluaywgd2lkdGgpOworICAgIH0KKyAgICAKKyAgICBBaXI6Ok9w
Y29kZSBzdG9yZUNvbmRPcGNvZGUoV2lkdGggd2lkdGgsIGJvb2wgZmVuY2UpCisgICAgeworICAg
ICAgICByZXR1cm4gZmVuY2UgPyBPUENPREVfRk9SX1dJRFRIKFN0b3JlQ29uZFJlbCwgd2lkdGgp
IDogT1BDT0RFX0ZPUl9XSURUSChTdG9yZUNvbmQsIHdpZHRoKTsKKyAgICB9CisgICAgCisgICAg
Ly8gVGhpcyBjYW4gZW1pdCBjb2RlIGZvciB0aGUgZm9sbG93aW5nIHBhdHRlcm5zOgorICAgIC8v
IEF0b21pY1dlYWtDQVMKKyAgICAvLyBCaXRYb3IoQXRvbWljV2Vha0NBUywgMSkKKyAgICAvLyBB
dG9taWNTdHJvbmdDQVMKKyAgICAvLyBFcXVhbChBdG9taWNTdHJvbmdDQVMsIGV4cGVjdGVkKQor
ICAgIC8vIE5vdEVxdWFsKEF0b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpCisgICAgLy8gQnJhbmNo
KEF0b21pY1dlYWtDQVMpCisgICAgLy8gQnJhbmNoKEVxdWFsKEF0b21pY1N0cm9uZ0NBUywgZXhw
ZWN0ZWQpKQorICAgIC8vIEJyYW5jaChOb3RFcXVhbChBdG9taWNTdHJvbmdDQVMsIGV4cGVjdGVk
KSkKKyAgICAvLworICAgIC8vIEl0IGFzc3VtZXMgdGhhdCBhdG9taWNWYWx1ZSBwb2ludHMgdG8g
dGhlIENBUywgYW5kIG1fdmFsdWUgcG9pbnRzIHRvIHRoZSBpbnN0cnVjdGlvbiBiZWluZworICAg
IC8vIGdlbmVyYXRlZC4gSXQgYXNzdW1lcyB0aGF0IHlvdSd2ZSBjb25zdW1lZCBldmVyeXRoaW5n
IHRoYXQgbmVlZHMgdG8gYmUgY29uc3VtZWQuCisgICAgdm9pZCBhcHBlbmRDQVMoVmFsdWUqIGF0
b21pY1ZhbHVlLCBib29sIGludmVydCkKKyAgICB7CisgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9t
aWMgPSBhdG9taWNWYWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGF0b21pYyk7CisgICAgICAgIAorICAgICAgICBib29sIGlzQnJhbmNoID0gbV92YWx1ZS0+
b3AoKSA9PSBCcmFuY2g7CisgICAgICAgIGJvb2wgaXNTdHJvbmcgPSBhdG9taWMtPm9wKCkgPT0g
QXRvbWljU3Ryb25nQ0FTOworICAgICAgICBib29sIHJldHVybnNPbGRWYWx1ZSA9IG1fdmFsdWUt
Pm9wKCkgPT0gQXRvbWljU3Ryb25nQ0FTOworICAgICAgICAKKyAgICAgICAgV2lkdGggd2lkdGgg
PSBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCk7CisgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihh
dG9taWMpOworCisgICAgICAgIFRtcCB2YWx1ZVJlc3VsdFRtcDsKKyAgICAgICAgVG1wIGJvb2xS
ZXN1bHRUbXA7CisgICAgICAgIGlmIChyZXR1cm5zT2xkVmFsdWUpIHsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFpbnZlcnQpOworICAgICAgICAgICAgdmFsdWVSZXN1bHRUbXAgPSB0bXAo
bV92YWx1ZSk7CisgICAgICAgICAgICBib29sUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7
CisgICAgICAgIH0gZWxzZSBpZiAoaXNCcmFuY2gpIHsKKyAgICAgICAgICAgIHZhbHVlUmVzdWx0
VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgICAgICBib29sUmVzdWx0VG1wID0gbV9j
b2RlLm5ld1RtcChHUCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVJlc3Vs
dFRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAgICAgYm9vbFJlc3VsdFRtcCA9IHRt
cChtX3ZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVG1wIHN1Y2Nlc3NCb29s
UmVzdWx0VG1wOworICAgICAgICBpZiAoaXNTdHJvbmcgJiYgIWlzQnJhbmNoKQorICAgICAgICAg
ICAgc3VjY2Vzc0Jvb2xSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgc3VjY2Vzc0Jvb2xSZXN1bHRUbXAgPSBib29sUmVzdWx0VG1wOworCisg
ICAgICAgIFRtcCBleHBlY3RlZFZhbHVlVG1wID0gdG1wKGF0b21pYy0+Y2hpbGQoMCkpOworICAg
ICAgICBUbXAgbmV3VmFsdWVUbXAgPSB0bXAoYXRvbWljLT5jaGlsZCgxKSk7CisgICAgICAgIAor
ICAgICAgICBGcmVxdWVudGVkQmxvY2sgc3VjY2VzczsKKyAgICAgICAgRnJlcXVlbnRlZEJsb2Nr
IGZhaWx1cmU7CisgICAgICAgIGlmIChpc0JyYW5jaCkgeworICAgICAgICAgICAgc3VjY2VzcyA9
IG1fYmxvY2tUb0Jsb2NrW21fYmxvY2tdLT5zdWNjZXNzb3IoaW52ZXJ0KTsKKyAgICAgICAgICAg
IGZhaWx1cmUgPSBtX2Jsb2NrVG9CbG9ja1ttX2Jsb2NrXS0+c3VjY2Vzc29yKCFpbnZlcnQpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAg
YXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPm9wZXJhdGlvblR5cGUoKSksIGltbU9y
VG1wKGF0b21pYy0+Y2hpbGQoMCkpLCBtX2VheCk7CisgICAgICAgICAgICBpZiAocmV0dXJuc09s
ZFZhbHVlKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWlj
U3Ryb25nQ0FTLCB3aWR0aCksIG1fZWF4LCBuZXdWYWx1ZVRtcCwgYWRkcmVzcyk7CisgICAgICAg
ICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPm9wZXJhdGlvblR5cGUo
KSksIG1fZWF4LCB2YWx1ZVJlc3VsdFRtcCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQnJh
bmNoKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoQnJhbmNoQXRv
bWljU3Ryb25nQ0FTLCB3aWR0aCksIEFyZzo6c3RhdHVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6U3Vj
Y2VzcyksIG1fZWF4LCBuZXdWYWx1ZVRtcCwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgbV9i
bG9ja1RvQmxvY2tbbV9ibG9ja10tPnNldFN1Y2Nlc3NvcnMoc3VjY2VzcywgZmFpbHVyZSk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURU
SChBdG9taWNTdHJvbmdDQVMsIHdpZHRoKSwgQXJnOjpzdGF0dXNDb25kKGludmVydCA/IE1hY3Jv
QXNzZW1ibGVyOjpGYWlsdXJlIDogTWFjcm9Bc3NlbWJsZXI6OlN1Y2Nlc3MpLCBtX2VheCwgdG1w
KGF0b21pYy0+Y2hpbGQoMSkpLCBhZGRyZXNzLCBib29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNB
Uk02NCgpKTsKKyAgICAgICAgLy8gV2Ugd2lzaCB0byBlbWl0OgorICAgICAgICAvLworICAgICAg
ICAvLyBCbG9jayAjcmVsb29wOgorICAgICAgICAvLyAgICAgTG9hZExpbmsKKyAgICAgICAgLy8g
ICAgIEJyYW5jaCBOb3RFcXVhbAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6IFRoZW46I2ZhaWws
IEVsc2U6ICNzdG9yZQorICAgICAgICAvLyBCbG9jayAjc3RvcmU6CisgICAgICAgIC8vICAgICBT
dG9yZUNvbmQKKyAgICAgICAgLy8gICAgIFhvciAkMSwgJXJlc3VsdCAgICA8LS0tIG9ubHkgaWYg
IWludmVydAorICAgICAgICAvLyAgICAgSnVtcAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6ICNk
b25lCisgICAgICAgIC8vIEJsb2NrICNmYWlsOgorICAgICAgICAvLyAgICAgTW92ZSAkaW52ZXJ0
LCAlcmVzdWx0CisgICAgICAgIC8vICAgICBKdW1wCisgICAgICAgIC8vICAgU3VjY2Vzc29yczog
I2RvbmUKKyAgICAgICAgLy8gQmxvY2sgI2RvbmU6CisgICAgICAgIAorICAgICAgICBBaXI6OkJh
c2ljQmxvY2sqIHJlbG9vcEJsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Js
b2NrKiBzdG9yZUJsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBz
dWNjZXNzQmxvY2sgPSBudWxscHRyOworICAgICAgICBpZiAoIWlzQnJhbmNoICYmIGlzU3Ryb25n
KQorICAgICAgICAgICAgc3VjY2Vzc0Jsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpC
YXNpY0Jsb2NrKiBmYWlsQmxvY2sgPSBudWxscHRyOworICAgICAgICBpZiAoIWlzQnJhbmNoKQor
ICAgICAgICAgICAgZmFpbEJsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Js
b2NrKiBzdHJvbmdGYWlsQmxvY2s7CisgICAgICAgIGlmIChpc1N0cm9uZykKKyAgICAgICAgICAg
IHN0cm9uZ0ZhaWxCbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayBj
b21wYXJpc29uRmFpbDsKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrIHdlYWtGYWlsOworICAgICAg
ICBpZiAoaXNTdHJvbmcpIHsKKyAgICAgICAgICAgIGNvbXBhcmlzb25GYWlsID0gc3Ryb25nRmFp
bEJsb2NrOworICAgICAgICAgICAgd2Vha0ZhaWwgPSByZWxvb3BCbG9jazsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChpc0JyYW5jaCkKKyAgICAgICAgICAgICAgICBjb21wYXJp
c29uRmFpbCA9IGZhaWx1cmU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29t
cGFyaXNvbkZhaWwgPSBmYWlsQmxvY2s7CisgICAgICAgICAgICB3ZWFrRmFpbCA9IGZhaWx1cmU7
CisgICAgICAgIH0KKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBiZWdpbkJsb2NrOworICAgICAg
ICBBaXI6OkJhc2ljQmxvY2sqIGRvbmVCbG9jazsKKyAgICAgICAgc3BsaXRCbG9jayhiZWdpbkJs
b2NrLCBkb25lQmxvY2spOworICAgICAgICAKKyAgICAgICAgYXBwZW5kKEp1bXApOworICAgICAg
ICBiZWdpbkJsb2NrLT5zZXRTdWNjZXNzb3JzKHJlbG9vcEJsb2NrKTsKKyAgICAgICAgCisgICAg
ICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQobG9hZExpbmtPcGNvZGUod2lkdGgsIGF0b21pYy0+aGFz
RmVuY2UoKSksIG1fdmFsdWUsIHZhbHVlUmVzdWx0VG1wLCBhZGRyZXNzKTsKKyAgICAgICAgcmVs
b29wQmxvY2stPmFwcGVuZChPUENPREVfRk9SX1dJRFRIKEJyYW5jaCwgY2Fub25pY2FsV2lkdGgo
d2lkdGgpKSwgbV92YWx1ZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCkg
dmFsdWVSZXN1bHRUbXAsIGV4cGVjdGVkVmFsdWVUbXApOworICAgICAgICByZWxvb3BCbG9jay0+
c2V0U3VjY2Vzc29ycyhjb21wYXJpc29uRmFpbCwgc3RvcmVCbG9jayk7CisgICAgICAgIAorICAg
ICAgICBzdG9yZUJsb2NrLT5hcHBlbmQoc3RvcmVDb25kT3Bjb2RlKHdpZHRoLCBhdG9taWMtPmhh
c0ZlbmNlKCkpLCBtX3ZhbHVlLCBuZXdWYWx1ZVRtcCwgYWRkcmVzcywgc3VjY2Vzc0Jvb2xSZXN1
bHRUbXApOworICAgICAgICBpZiAoaXNCcmFuY2gpIHsKKyAgICAgICAgICAgIHN0b3JlQmxvY2st
PmFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyks
IGJvb2xSZXN1bHRUbXAsIEFyZzo6Yml0SW1tKC0xKSk7CisgICAgICAgICAgICBzdG9yZUJsb2Nr
LT5zZXRTdWNjZXNzb3JzKHN1Y2Nlc3MsIHdlYWtGYWlsKTsKKyAgICAgICAgICAgIGRvbmVCbG9j
ay0+c3VjY2Vzc29ycygpLmNsZWFyKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghZG9u
ZUJsb2NrLT5zaXplKCkpOworICAgICAgICAgICAgZG9uZUJsb2NrLT5hcHBlbmQoT29wcywgbV92
YWx1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNTdHJvbmcpIHsKKyAg
ICAgICAgICAgICAgICBzdG9yZUJsb2NrLT5hcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0Nv
bmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBzdWNjZXNzQm9vbFJlc3VsdFRtcCwgQXJnOjpiaXRJ
bW0oLTEpKTsKKyAgICAgICAgICAgICAgICBzdG9yZUJsb2NrLT5zZXRTdWNjZXNzb3JzKHN1Y2Nl
c3NCbG9jaywgcmVsb29wQmxvY2spOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IHN1Y2Nlc3NCbG9jay0+YXBwZW5kKE1vdmUsIG1fdmFsdWUsIEFyZzo6aW1tKCFpbnZlcnQpLCBi
b29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzQmxvY2stPmFwcGVuZChKdW1w
LCBtX3ZhbHVlKTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzQmxvY2stPnNldFN1Y2Nlc3NvcnMo
ZG9uZUJsb2NrKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFp
bnZlcnQpCisgICAgICAgICAgICAgICAgICAgIHN0b3JlQmxvY2stPmFwcGVuZChYb3IzMiwgbV92
YWx1ZSwgQXJnOjpiaXRJbW0oMSksIGJvb2xSZXN1bHRUbXAsIGJvb2xSZXN1bHRUbXApOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0b3JlQmxvY2stPmFwcGVuZChKdW1wLCBt
X3ZhbHVlKTsKKyAgICAgICAgICAgICAgICBzdG9yZUJsb2NrLT5zZXRTdWNjZXNzb3JzKGRvbmVC
bG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZhaWxCbG9j
ay0+YXBwZW5kKE1vdmUsIG1fdmFsdWUsIEFyZzo6aW1tKGludmVydCksIGJvb2xSZXN1bHRUbXAp
OworICAgICAgICAgICAgZmFpbEJsb2NrLT5hcHBlbmQoSnVtcCwgbV92YWx1ZSk7CisgICAgICAg
ICAgICBmYWlsQmxvY2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKGlzU3Ryb25nKSB7CisgICAgICAgICAgICBUbXAgdG1wID0gbV9j
b2RlLm5ld1RtcChHUCk7CisgICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2stPmFwcGVuZChzdG9y
ZUNvbmRPcGNvZGUod2lkdGgsIGF0b21pYy0+aGFzRmVuY2UoKSksIG1fdmFsdWUsIHZhbHVlUmVz
dWx0VG1wLCBhZGRyZXNzLCB0bXApOworICAgICAgICAgICAgc3Ryb25nRmFpbEJsb2NrLT5hcHBl
bmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCB0bXAs
IEFyZzo6Yml0SW1tKC0xKSk7CisgICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2stPnNldFN1Y2Nl
c3NvcnMoZmFpbEJsb2NrLCByZWxvb3BCbG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgYm9vbCBhcHBlbmRWb2lkQXRvbWljKEFpcjo6T3Bjb2RlIGF0b21pY09wY29kZSkKKyAgICB7
CisgICAgICAgIGlmIChtX3VzZUNvdW50cy5udW1Vc2VzKG1fdmFsdWUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKG1fdmFs
dWUpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKGF0b21pY09wY29kZSwgQXJn
OjpJbW0sIGFkZHJlc3Mua2luZCgpKSAmJiBpbW0obV92YWx1ZS0+Y2hpbGQoMCkpKSB7CisgICAg
ICAgICAgICBhcHBlbmQoYXRvbWljT3Bjb2RlLCBpbW0obV92YWx1ZS0+Y2hpbGQoMCkpLCBhZGRy
ZXNzKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoaXNWYWxpZEZvcm0oYXRvbWljT3Bjb2RlLCBBcmc6OlRtcCwgYWRkcmVzcy5raW5k
KCkpKSB7CisgICAgICAgICAgICBhcHBlbmQoYXRvbWljT3Bjb2RlLCB0bXAobV92YWx1ZS0+Y2hp
bGQoMCkpLCBhZGRyZXNzKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBl
bmRHZW5lcmFsQXRvbWljKEFpcjo6T3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIEF0b21p
Y1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgCisg
ICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihtX3ZhbHVlKTsKKyAgICAgICAgVG1wIG9sZFZhbHVl
ID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgIFRtcCBuZXdWYWx1ZSA9IG1fY29kZS5uZXdU
bXAoR1ApOworICAgICAgICAKKyAgICAgICAgLy8gV2UgbmVlZCBhIENBUyBsb29wIG9yIGEgTEwv
U0MgbG9vcC4gVXNpbmcgcHJlcGFyZS9hdHRlbXB0IGphcmdvbiwgd2Ugd2FudDoKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gQmxvY2sgI3JlbG9vcDoKKyAgICAgICAgLy8gICAgIFByZXBhcmUKKyAg
ICAgICAgLy8gICAgIG9wY29kZQorICAgICAgICAvLyAgICAgQXR0ZW1wdAorICAgICAgICAvLyAg
IFN1Y2Nlc3NvcnM6IFRoZW46I2RvbmUsIEVsc2U6I3JlbG9vcAorICAgICAgICAvLyBCbG9jayAj
ZG9uZToKKyAgICAgICAgLy8gICAgIE1vdmUgb2xkVmFsdWUsIHJlc3VsdAorICAgICAgICAKKyAg
ICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUoKSksIG9sZFZhbHVl
LCB0bXAoYXRvbWljKSk7CisgICAgICAgIAorICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHJlbG9v
cEJsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBiZWdpbkJsb2Nr
OworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGRvbmVCbG9jazsKKyAgICAgICAgc3BsaXRCbG9j
ayhiZWdpbkJsb2NrLCBkb25lQmxvY2spOworICAgICAgICAKKyAgICAgICAgYXBwZW5kKEp1bXAp
OworICAgICAgICBiZWdpbkJsb2NrLT5zZXRTdWNjZXNzb3JzKHJlbG9vcEJsb2NrKTsKKyAgICAg
ICAgCisgICAgICAgIEFpcjo6T3Bjb2RlIHByZXBhcmVPcGNvZGU7CisgICAgICAgIGlmIChpc1g4
NigpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkgewor
ICAgICAgICAgICAgY2FzZSBXaWR0aDg6CisgICAgICAgICAgICAgICAgcHJlcGFyZU9wY29kZSA9
IExvYWQ4U2lnbmVkRXh0ZW5kVG8zMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTG9hZDE2
U2lnbmVkRXh0ZW5kVG8zMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgV2lkdGgzMjoKKyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTW92ZTMyOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAg
ICAgICAgIHByZXBhcmVPcGNvZGUgPSBNb3ZlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aXNBUk02NCgpKTsKKyAgICAgICAgICAgIG9wY29kZSA9IGxvYWRMaW5rT3Bjb2RlKGF0b21pYy0+
b3BlcmF0aW9uV2lkdGgoKSwgYXRvbWljLT5oYXNGZW5jZSgpKTsKKyAgICAgICAgfQorICAgICAg
ICByZWxvb3BCbG9jay0+YXBwZW5kKHByZXBhcmVPcGNvZGUsIG1fdmFsdWUsIGFkZHJlc3MsIG9s
ZFZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChvcGNvZGUgIT0gTm9wKSB7CisgICAgICAg
ICAgICBpZiAoaW1tKGF0b21pYy0+Y2hpbGQoMCkpICYmIGlzVmFsaWRGb3JtKG9wY29kZSwgQXJn
OjpJbW0sIEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAgICAgICAgICAgcmVsb29wQmxvY2st
PmFwcGVuZChvcGNvZGUsIG1fdmFsdWUsIGltbShhdG9taWMtPmNoaWxkKDApKSwgb2xkVmFsdWUs
IG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJn
OjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAgICAgICAgICAgcmVsb29wQmxvY2st
PmFwcGVuZChvcGNvZGUsIG1fdmFsdWUsIHRtcChhdG9taWMtPmNoaWxkKDApKSwgb2xkVmFsdWUs
IG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJlbG9vcEJs
b2NrLT5hcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgb2xkVmFsdWUs
IG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoaW1tKGF0b21pYy0+Y2hpbGQoMCkpICYm
IGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChvcGNvZGUsIG1fdmFsdWUsIGltbShhdG9taWMtPmNo
aWxkKDApKSwgbmV3VmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChvcGNvZGUsIG1fdmFsdWUsIHRtcChhdG9taWMtPmNo
aWxkKDApKSwgbmV3VmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIGNhc09wY29kZSA9IE9QQ09E
RV9GT1JfV0lEVEgoQnJhbmNoQXRvbWljU3Ryb25nQ0FTLCBhdG9taWMtPm9wZXJhdGlvbldpZHRo
KCkpOworICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUo
YXRvbWljLT50eXBlKCkpLCBvbGRWYWx1ZSwgbV9lYXgpOworICAgICAgICAgICAgcmVsb29wQmxv
Y2stPmFwcGVuZChjYXNPcGNvZGUsIG1fdmFsdWUsIEFyZzo6c3RhdHVzQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6U3VjY2VzcyksIG1fZWF4LCBuZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOworICAgICAgICAgICAg
VG1wIGJvb2xSZXN1bHQgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgICAgIHJlbG9vcEJs
b2NrLT5hcHBlbmQoc3RvcmVDb25kT3Bjb2RlKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSwgYXRv
bWljLT5oYXNGZW5jZSgpKSwgbmV3VmFsdWUsIGFkZHJlc3MsIGJvb2xSZXN1bHQpOworICAgICAg
ICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNy
b0Fzc2VtYmxlcjo6WmVybyksIGJvb2xSZXN1bHQsIEFyZzo6Yml0SW1tKC0xKSk7CisgICAgICAg
IH0KKyAgICAgICAgcmVsb29wQmxvY2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrLCByZWxvb3BC
bG9jayk7CisgICAgfQorICAgIAogICAgIHZvaWQgbG93ZXIoKQogICAgIHsKICAgICAgICAgc3dp
dGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgewpAQCAtMTk3MSwzMCArMjM2Miw1MCBAQCBwcml2YXRl
OgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBMb2FkOiB7Ci0gICAgICAg
ICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5
cGUoKSksIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAg
ICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAg
ICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gQWlyOjpPb3BzOworICAgICAgICAgICAgaWYg
KG1lbW9yeS0+aGFzRmVuY2UoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobWVtb3J5LT50
eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgICAg
ICBvcGNvZGUgPSBMb2FkQWNxMzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IExvYWRB
Y3E2NDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgb3Bjb2RlID0gbW92ZUZvclR5cGUobWVtb3J5LT50eXBl
KCkpOworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1f
dmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBMb2FkOFM6IHsKLSAgICAg
ICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9hZDhTaWduZWRFeHRlbmRUbzMy
LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFp
cjo6T3Bjb2RlIG9wY29kZSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgp
ID8gTG9hZEFjcThTaWduZWRFeHRlbmRUbzMyIDogTG9hZDhTaWduZWRFeHRlbmRUbzMyOworICAg
ICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFk
ZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBMb2FkOFo6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGlu
Z0luc3QobV92YWx1ZSwgTG9hZDgsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVl
KSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5
VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxOCA6IExvYWQ4OworICAgICAgICAgICAgYXBw
ZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSks
IHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBMb2FkMTZTOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFs
dWUsIExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcCht
X3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8
TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxMTZTaWduZWRFeHRlbmRUbzMyIDog
TG9hZDE2U2lnbmVkRXh0ZW5kVG8zMjsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3Qo
bV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDE2Wjog
ewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkMTYsIG1fdmFs
dWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNv
ZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2Fk
QWNxMTYgOiBMb2FkMTY7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUs
IG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQWRk
OiB7CiAgICAgICAgICAgICBpZiAodHJ5QXBwZW5kTGVhKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMjA5Miw3ICsyNTAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5pc0NoaWxsKCkpCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgp
KTsKICAgICAgICAgICAgIGlmIChpc0ludChtX3ZhbHVlLT50eXBlKCkpICYmIGlzWDg2KCkpIHsK
LSAgICAgICAgICAgICAgICBsb3dlclg4NkRpdihEaXYpOworICAgICAgICAgICAgICAgIGFwcGVu
ZFg4NkRpdihEaXYpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIEFTU0VSVCghaXNYODYoKSB8fCBpc0Zsb2F0KG1fdmFsdWUtPnR5cGUoKSkpOwpA
QCAtMjEwMyw3ICsyNTE0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNlIFVEaXY6IHsKICAg
ICAgICAgICAgIGlmIChpc0ludChtX3ZhbHVlLT50eXBlKCkpICYmIGlzWDg2KCkpIHsKLSAgICAg
ICAgICAgICAgICBsb3dlclg4NlVEaXYoVURpdik7CisgICAgICAgICAgICAgICAgYXBwZW5kWDg2
VURpdihVRGl2KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAg
LTIxMTcsMTMgKzI1MjgsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBNb2Q6IHsKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIW1fdmFsdWUtPmlzQ2hpbGwoKSk7Ci0gICAgICAgICAgICBsb3dlclg4NkRpdihNb2QpOwor
ICAgICAgICAgICAgYXBwZW5kWDg2RGl2KE1vZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIFVNb2Q6IHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGlzWDg2KCkpOwotICAgICAgICAgICAgbG93ZXJYODZVRGl2KFVNb2QpOworICAgICAgICAgICAg
YXBwZW5kWDg2VURpdihVTW9kKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBA
IC0yMTYyLDEwICsyNTczLDI3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYXBwZW5kVW5P
cDxOb3QzMiwgTm90NjQ+KG1fdmFsdWUtPmNoaWxkKDApKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgcGF0
dGVybiBpcyBzdXBlciB1c2VmdWwgb24gYm90aCB4ODYgYW5kIEFSTTY0LCBzaW5jZSB0aGUgaW52
ZXJzaW9uIG9mIHRoZSBDQVMgcmVzdWx0CisgICAgICAgICAgICAvLyBjYW4gYmUgZG9uZSB3aXRo
IHplcm8gY29zdCBvbiB4ODYgKGp1c3QgZmxpcCB0aGUgc2V0IGZyb20gRSB0byBORSkgYW5kIGl0
J3MgYSBwcm9ncmVzc2lvbgorICAgICAgICAgICAgLy8gb24gQVJNNjQgKHNpbmNlIFNUWCByZXR1
cm5zIDAgb24gc3VjY2Vzcywgc28gb3JkaW5hcmlseSB3ZSBoYXZlIHRvIGZsaXAgaXQpLgorICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgxKQorICAgICAgICAgICAgICAg
ICYmIGlzQXRvbWljQ0FTKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKKyAgICAgICAgICAg
ICAgICAmJiBjYW5CZUludGVybmFsKG1fdmFsdWUtPmNoaWxkKDApKSkgeworICAgICAgICAgICAg
ICAgIGNvbW1pdEludGVybmFsKG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICBh
cHBlbmRDQVMobV92YWx1ZS0+Y2hpbGQoMCksIHRydWUpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgYXBwZW5kQmluT3A8
WG9yMzIsIFhvcjY0LCBYb3JEb3VibGUsIFhvckZsb2F0LCBDb21tdXRhdGl2ZT4oCiAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRGVwZW5k
OiB7CisgICAgICAgICAgICBhcHBlbmRVbk9wPERlcGVuZDMyLCBEZXBlbmQ2ND4obV92YWx1ZS0+
Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBTaGw6IHsKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigxKSkg
ewpAQCAtMjI2Niw3ICsyNjk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGFwcGVuZFN0b3JlKHZhbHVlVG9TdG9yZSwgYWRkciht
X3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBlbmRTdG9yZShtX3ZhbHVlLCBhZGRyKG1fdmFsdWUp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMjg3LDcgKzI3MTUsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kU3RvcmUoQWlyOjpTdG9yZTgsIHZh
bHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBlbmRTdG9yZShtX3Zh
bHVlLCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKQEAgLTIzMDgsNyArMjczNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBhcHBlbmRTdG9yZShBaXI6OlN0b3JlMTYsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVl
KSk7CisgICAgICAgICAgICBhcHBlbmRTdG9yZShtX3ZhbHVlLCB2YWx1ZVRvU3RvcmUsIGFkZHIo
bV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTI0MTYsNyAr
Mjg0NCwyMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBFcXVhbDoKLSAg
ICAgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgY2FzZSBOb3RFcXVhbDogeworICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMKKyAg
ICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+
Y2hpbGQoMSkKKyAgICAgICAgICAgICAgICAmJiBjYW5CZUludGVybmFsKG1fdmFsdWUtPmNoaWxk
KDApKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9sb2NrZWQuY29udGFpbnMobV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2xvY2tl
ZC5jb250YWlucyhtX3ZhbHVlLT5jaGlsZCgxKSkpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNvbW1pdEludGVybmFsKG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAg
ICAgICBhcHBlbmRDQVMobV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPm9wY29kZSgpID09IE5v
dEVxdWFsKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFy
ZShtX3ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAg
IAogICAgICAgICBjYXNlIExlc3NUaGFuOgogICAgICAgICBjYXNlIEdyZWF0ZXJUaGFuOgogICAg
ICAgICBjYXNlIExlc3NFcXVhbDoKQEAgLTI3MjcsNiArMzE3MCwzOSBAQCBwcml2YXRlOgogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsKKyAgICAgICAgICAgIGlmIChjYW5CZUlu
dGVybmFsKG1fdmFsdWUtPmNoaWxkKDApKSkgeworICAgICAgICAgICAgICAgIFZhbHVlKiBicmFu
Y2hDaGlsZCA9IG1fdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIHN3aXRjaCAoYnJh
bmNoQ2hpbGQtPm9wY29kZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNXZWFrQ0FT
OgorICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChicmFuY2hDaGlsZCk7CisgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZENBUyhicmFuY2hDaGlsZCwgZmFsc2UpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAgICAgICAgICAgICAgICAvLyBBIGJyYW5jaCBp
cyBhIGNvbXBhcmlzb24gdG8gemVyby4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGJyYW5jaENo
aWxkLT5jaGlsZCgwKS0+aXNJbnQoMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1p
dEludGVybmFsKGJyYW5jaENoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENB
UyhicmFuY2hDaGlsZCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgICAgICAg
ICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJyYW5jaENoaWxkLT5j
aGlsZCgwKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTCisgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBjYW5CZUludGVybmFsKGJyYW5jaENoaWxkLT5vcGNvZGUoMCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBicmFuY2hDaGlsZC0+Y2hpbGQoMCktPmNoaWxkKDApID09IGJyYW5j
aENoaWxkLT5jaGlsZCgxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJu
YWwoYnJhbmNoQ2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwo
YnJhbmNoQ2hpbGQtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENB
UyhicmFuY2hDaGlsZC0+Y2hpbGQoMCksIGJyYW5jaENoaWxkLT5vcGNvZGUoKSA9PSBOb3RFcXVh
bCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQnJh
bmNoKG1fdmFsdWUtPmNoaWxkKDApKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
QEAgLTI3ODQsNyArMzI2MCw4MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYXBwZW5kKEFpcjo6
RW50cnlTd2l0Y2gpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICBjYXNlIEF0b21pY1N0cm9u
Z0NBUzogeworICAgICAgICAgICAgYXBwZW5kQ0FTKG1fdmFsdWUsIGZhbHNlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWlj
WGNoZ0FkZDogeworICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFz
PEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgaWYgKGFwcGVuZFZvaWRBdG9taWMoT1BDT0RF
X0ZPUl9XSURUSChBdG9taWNBZGQsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXJnIGFkZHJlc3Mg
PSBhZGRyKGF0b21pYyk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBPUENPREVf
Rk9SX1dJRFRIKEF0b21pY1hjaGdBZGQsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSk7CisgICAg
ICAgICAgICBpZiAoaXNWYWxpZE9wY29kZShvcGNvZGUsIEFyZzo6VG1wLCBhZGRyZXNzKSkgewor
ICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkp
LCB0bXAoYXRvbWljLT5jaGlsZCgwKSksIHRtcChhdG9taWMpKTsKKyAgICAgICAgICAgICAgICBh
cHBlbmQob3Bjb2RlLCB0bXAoYXRvbWljKSwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWljKE9Q
Q09ERV9GT1JfV0lEVEgoQWRkLCBjYW5vbmljYWxXaWR0aChhdG9taWMtPm9wZXJhdGlvbldpZHRo
KCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAorICAgICAgICBjYXNlIEF0
b21pY1hjaGdTdWI6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVl
LT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWljKE9Q
Q09ERV9GT1JfV0lEVEgoQXRvbWljU3ViLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdl
bmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChTdWIsIGNhbm9uaWNhbFdpZHRoKGF0b21pYy0+
b3BlcmF0aW9uV2lkdGgoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDogeworICAgICAgICAgICAgQXRv
bWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAg
ICAgaWYgKGFwcGVuZFZvaWRBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNBbmQsIGF0b21p
Yy0+b3BlcmF0aW9uV2lkdGgoKSkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgYXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEFu
ZCwgY2Fub25pY2FsV2lkdGgoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNY
Y2hnT3I6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxB
dG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWljKE9QQ09ERV9G
T1JfV0lEVEgoQXRvbWljT3IsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXBwZW5kR2VuZXJhbEF0
b21pYyhPUENPREVfRk9SX1dJRFRIKE9yLCBjYW5vbmljYWxXaWR0aChhdG9taWMtPm9wZXJhdGlv
bldpZHRoKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEF0b21pY1hjaGdYb3I6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVl
KiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChh
cHBlbmRWb2lkQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljWG9yLCBhdG9taWMtPm9wZXJh
dGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChYb3IsIGNhbm9u
aWNhbFdpZHRoKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljWGNoZzogewor
ICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVl
PigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBBcmcgYWRkcmVzcyA9IGFkZHIoYXRvbWlj
KTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IE9QQ09ERV9GT1JfV0lEVEgoQXRv
bWljWGNoZywgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKTsKKyAgICAgICAgICAgIGlmIChpc1Zh
bGlkT3Bjb2RlKG9wY29kZSwgQXJnOjpUbXAsIGFkZHJlc3MpKSB7CisgICAgICAgICAgICAgICAg
YXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUoKSksIHRtcChhdG9taWMtPmNo
aWxkKDApKSwgdG1wKGF0b21pYykpOworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRt
cChhdG9taWMpLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RF
X0ZPUl9XSURUSChYb3IsIGNhbm9uaWNhbFdpZHRoKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjc5Miw2NCArMzM0
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBjb3VsZCBub3QgbG93ZXIg
IiwgZGVlcER1bXAobV9wcm9jZWR1cmUsIG1fdmFsdWUpLCAiXG4iKTsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICB2b2lkIGxvd2VyWDg2RGl2KEIz
OjpPcGNvZGUgb3ApCi0gICAgewotI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCi0gICAgICAg
IFRtcCBlYXggPSBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpOwotICAgICAgICBUbXAgZWR4ID0gVG1w
KFg4NlJlZ2lzdGVyczo6ZWR4KTsKLQotICAgICAgICBBaXI6Ok9wY29kZSBjb252ZXJ0VG9Eb3Vi
bGVXb3JkOwotICAgICAgICBBaXI6Ok9wY29kZSBkaXY7Ci0gICAgICAgIHN3aXRjaCAobV92YWx1
ZS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICBjb252ZXJ0VG9E
b3VibGVXb3JkID0gWDg2Q29udmVydFRvRG91YmxlV29yZDMyOwotICAgICAgICAgICAgZGl2ID0g
WDg2RGl2MzI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAg
ICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBYODZDb252ZXJ0VG9RdWFkV29yZDY0OwotICAg
ICAgICAgICAgZGl2ID0gWDg2RGl2NjQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQob3AgPT0gRGl2IHx8IG9w
ID09IE1vZCk7Ci0gICAgICAgIFg4NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCByZXN1bHQgPSBvcCA9
PSBEaXYgPyBYODZSZWdpc3RlcnM6OmVheCA6IFg4NlJlZ2lzdGVyczo6ZWR4OwotCi0gICAgICAg
IGFwcGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBlYXgpOwotICAgICAgICBhcHBl
bmQoY29udmVydFRvRG91YmxlV29yZCwgZWF4LCBlZHgpOwotICAgICAgICBhcHBlbmQoZGl2LCBl
YXgsIGVkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7Ci0gICAgICAgIGFwcGVuZChNb3ZlLCBU
bXAocmVzdWx0KSwgdG1wKG1fdmFsdWUpKTsKLQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFN
KG9wKTsKLSAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0jZW5kaWYKLSAgICB9
Ci0KLSAgICB2b2lkIGxvd2VyWDg2VURpdihCMzo6T3Bjb2RlIG9wKQotICAgIHsKLSNpZiBDUFUo
WDg2KSB8fCBDUFUoWDg2XzY0KQotICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6
ZWF4KTsKLSAgICAgICAgVG1wIGVkeCA9IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7Ci0KLSAgICAg
ICAgQWlyOjpPcGNvZGUgZGl2ID0gbV92YWx1ZS0+dHlwZSgpID09IEludDMyID8gWDg2VURpdjMy
IDogWDg2VURpdjY0OwotCi0gICAgICAgIEFTU0VSVChvcCA9PSBVRGl2IHx8IG9wID09IFVNb2Qp
OwotICAgICAgICBYODZSZWdpc3RlcnM6OlJlZ2lzdGVySUQgcmVzdWx0ID0gb3AgPT0gVURpdiA/
IFg4NlJlZ2lzdGVyczo6ZWF4IDogWDg2UmVnaXN0ZXJzOjplZHg7Ci0KLSAgICAgICAgYXBwZW5k
KE1vdmUsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIGVheCk7Ci0gICAgICAgIGFwcGVuZChYb3I2
NCwgZWR4LCBlZHgpOwotICAgICAgICBhcHBlbmQoZGl2LCBlYXgsIGVkeCwgdG1wKG1fdmFsdWUt
PmNoaWxkKDEpKSk7Ci0gICAgICAgIGFwcGVuZChNb3ZlLCBUbXAocmVzdWx0KSwgdG1wKG1fdmFs
dWUpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIFVOUkVBQ0hB
QkxFX0ZPUl9QTEFURk9STSgpOwotI2VuZGlmCi0gICAgfQotCisgICAgCiAgICAgSW5kZXhTZXQ8
VmFsdWU+IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRt
cCBpbiBBaXIuCiAgICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVz
ZSBhcmUgdmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBW
YWx1ZSogd2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KICAgICBJbmRleE1hcDxWYWx1
ZSwgVG1wPiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgpAQCAtMjg2
NCw3ICszMzU3LDcgQEAgcHJpdmF0ZToKIAogICAgIFZlY3RvcjxWZWN0b3I8SW5zdCwgND4+IG1f
aW5zdHM7CiAgICAgVmVjdG9yPEluc3Q+IG1fcHJvbG9ndWU7Ci0KKyAgICAKICAgICBCMzo6QmFz
aWNCbG9jayogbV9ibG9jazsKICAgICBib29sIG1faXNSYXJlOwogICAgIHVuc2lnbmVkIG1faW5k
ZXg7CkBAIC0yODc1LDYgKzMzNjgsMTIgQEAgcHJpdmF0ZToKIAogICAgIFByb2NlZHVyZSYgbV9w
cm9jZWR1cmU7CiAgICAgQ29kZSYgbV9jb2RlOworCisgICAgQWlyOjpCbG9ja0luc2VydGlvblNl
dCBtX2Jsb2NrSW5zZXJ0aW9uU2V0OworCisgICAgVG1wIG1fZWF4OworICAgIFRtcCBtX2VjeDsK
KyAgICBUbXAgbV9lZHg7CiB9OwogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlzaW9uIDIxMjk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsMzAgKzM0LDQ4IEBAIE1lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQog
ewogfQogCitUeXBlIE1lbW9yeVZhbHVlOjphY2Nlc3NUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAo
aXNMb2FkKG9wY29kZSgpKSkKKyAgICAgICAgcmV0dXJuIHR5cGUoKTsKKyAgICAvLyBUaGlzIGhh
cHBlbnMgdG8gd29yayBmb3IgYXRvbWljcywgdG9vLiBUaGF0J3Mgd2h5IEF0b21pY1ZhbHVlIGRv
ZXMgbm90IG5lZWQgdG8gb3ZlcnJpZGUgdGhpcy4KKyAgICByZXR1cm4gY2hpbGQoMCktPnR5cGUo
KTsKK30KKworQmFuayBNZW1vcnlWYWx1ZTo6YWNjZXNzQmFuaygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGJhbmtGb3JUeXBlKGFjY2Vzc1R5cGUoKSk7Cit9CisKIHNpemVfdCBNZW1vcnlWYWx1ZTo6
YWNjZXNzQnl0ZVNpemUoKSBjb25zdAogeworICAgIHJldHVybiBieXRlcyhhY2Nlc3NXaWR0aCgp
KTsKK30KKworV2lkdGggTWVtb3J5VmFsdWU6OmxvYWRTdG9yZVdpZHRoKCkgY29uc3QKK3sKICAg
ICBzd2l0Y2ggKG9wY29kZSgpKSB7CiAgICAgY2FzZSBMb2FkOFo6CiAgICAgY2FzZSBMb2FkOFM6
CiAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4gV2lk
dGg4OwogICAgIGNhc2UgTG9hZDE2WjoKICAgICBjYXNlIExvYWQxNlM6CiAgICAgY2FzZSBTdG9y
ZTE2OgotICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgcmV0dXJuIFdpZHRoMTY7CiAgICAgY2Fz
ZSBMb2FkOgotICAgICAgICByZXR1cm4gc2l6ZW9mVHlwZSh0eXBlKCkpOworICAgICAgICByZXR1
cm4gd2lkdGhGb3JUeXBlKHR5cGUoKSk7CiAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgcmV0dXJu
IHNpemVvZlR5cGUoY2hpbGQoMCktPnR5cGUoKSk7CisgICAgICAgIHJldHVybiB3aWR0aEZvclR5
cGUoY2hpbGQoMCktPnR5cGUoKSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBXaWR0
aDg7CiAgICAgfQogfQogCiBXaWR0aCBNZW1vcnlWYWx1ZTo6YWNjZXNzV2lkdGgoKSBjb25zdAog
ewotICAgIHJldHVybiB3aWR0aEZvckJ5dGVzKGFjY2Vzc0J5dGVTaXplKCkpOworICAgIHJldHVy
biBsb2FkU3RvcmVXaWR0aCgpOwogfQogCiB2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShDb21t
YVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtNjcsNiArODUsOCBA
QCB2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImCiAgICAgaWYgKChpc0xv
YWQoKSAmJiBlZmZlY3RzKCkucmVhZHMgIT0gcmFuZ2UoKSkKICAgICAgICAgfHwgKGlzU3RvcmUo
KSAmJiBlZmZlY3RzKCkud3JpdGVzICE9IHJhbmdlKCkpKQogICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJyYW5nZSA9ICIsIHJhbmdlKCkpOworICAgIGlmIChwaGFudG9tUmFuZ2UoKSkKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAicGhhbnRvbVJhbmdlID0gIiwgcGhhbnRvbVJhbmdlKCkpOwog
fQogCiBWYWx1ZSogTWVtb3J5VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CkBAIC03NCw2ICs5NCw1
OCBAQCBWYWx1ZSogTWVtb3J5VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CiAgICAgcmV0dXJuIG5l
dyBNZW1vcnlWYWx1ZSgqdGhpcyk7CiB9CiAKKy8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1
dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3Vm
Zml4IHRoYXQKKy8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCitNZW1vcnlWYWx1ZTo6
TWVtb3J5VmFsdWUoS2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBw
b2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBr
aW5kLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgLCBtX29mZnNldChvZmZzZXQpCit7Cisg
ICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgp
KSB7CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAg
ICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0
b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBW
b2lkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIFVzZSB0aGlz
IGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorTWVtb3J5
VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50
ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICA6IE1lbW9yeVZhbHVlKGtpbmQsIEludDMyLCBv
cmlnaW4sIHBvaW50ZXIsIG9mZnNldCkKK3sKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewor
ICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBMb2FkOFo6Cisg
ICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2Ug
TG9hZDE2UzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIFVzZSB0
aGlzIGZvcm0gZm9yIHN0b3Jlcy4KK01lbW9yeVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtpbmQs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zm
c2V0ID0gMCkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIFZvaWQsIG9yaWdpbiwg
dmFsdWUsIHBvaW50ZXIpCisgICAgLCBtX29mZnNldChvZmZzZXQpCit7CisgICAgQVNTRVJUKGlz
U3RvcmUoa2luZC5vcGNvZGUoKSkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAog
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDQ4ICsyNywxNyBAQAog
CiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzQmFuay5oIgogI2luY2x1ZGUgIkIz
SGVhcFJhbmdlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKIAotLy8gRklYTUU6IFdlIHdhbnQgdG8gYWxsb3cgZmVuY2VkIG1lbW9yeSBh
Y2Nlc3NlcyBvbiBBUk0uCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYyMzQ5Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeVZhbHVlIDogcHVibGlj
IFZhbHVlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKEtpbmQga2luZCkKICAg
ICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICBjYXNlIExvYWQ4
WjoKLSAgICAgICAgY2FzZSBMb2FkOFM6Ci0gICAgICAgIGNhc2UgTG9hZDE2WjoKLSAgICAgICAg
Y2FzZSBMb2FkMTZTOgotICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAgIGNhc2UgU3RvcmU4Ogot
ICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzU3RvcmUoS2luZCBraW5kKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgU3Rv
cmU4OgotICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzTG9hZChLaW5kIGtp
bmQpCi0gICAgewotICAgICAgICByZXR1cm4gYWNjZXB0cyhraW5kKSAmJiAhaXNTdG9yZShraW5k
KTsKKyAgICAgICAgcmV0dXJuIGlzTWVtb3J5KGtpbmQub3Bjb2RlKCkpOwogICAgIH0KIAogICAg
IH5NZW1vcnlWYWx1ZSgpOwpAQCAtNzgsNzYgKzQ3LDU2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0
IEhlYXBSYW5nZSYgcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlOyB9CiAgICAgdm9pZCBz
ZXRSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKSB7IG1fcmFuZ2UgPSByYW5nZTsgfQorICAg
IAorICAgIC8vIFRoaXMgaXMgYW4gYWxpYXMgZm9yIHJhbmdlLgorICAgIGNvbnN0IEhlYXBSYW5n
ZSYgYWNjZXNzUmFuZ2UoKSBjb25zdCB7IHJldHVybiByYW5nZSgpOyB9CisgICAgdm9pZCBzZXRB
Y2Nlc3NSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKSB7IHNldFJhbmdlKHJhbmdlKTsgfQor
ICAgIAorICAgIGNvbnN0IEhlYXBSYW5nZSYgZmVuY2VSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmVuY2VSYW5nZTsgfQorICAgIHZvaWQgc2V0RmVuY2VSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJh
bmdlKSB7IG1fZmVuY2VSYW5nZSA9IHJhbmdlOyB9CisKKyAgICBib29sIGlzU3RvcmUoKSBjb25z
dCB7IHJldHVybiBpc1N0b3JlKG9wY29kZSgpKTsgfQorICAgIGJvb2wgaXNMb2FkKCkgY29uc3Qg
eyByZXR1cm4gaXNMb2FkKG9wY29kZSgpKTsgfQogCi0gICAgYm9vbCBpc1N0b3JlKCkgY29uc3Qg
eyByZXR1cm4gdHlwZSgpID09IFZvaWQ7IH0KLSAgICBib29sIGlzTG9hZCgpIGNvbnN0IHsgcmV0
dXJuIHR5cGUoKSAhPSBWb2lkOyB9CisgICAgYm9vbCBoYXNGZW5jZSgpIGNvbnN0IHsgcmV0dXJu
ICEhZmVuY2VSYW5nZSgpOyB9CiAKKyAgICBUeXBlIGFjY2Vzc1R5cGUoKSBjb25zdDsKKyAgICBC
YW5rIGFjY2Vzc0JhbmsoKSBjb25zdDsKICAgICBzaXplX3QgYWNjZXNzQnl0ZVNpemUoKSBjb25z
dDsKLSAgICBXaWR0aCBhY2Nlc3NXaWR0aCgpIGNvbnN0OworICAgIAorICAgIC8vIFNsaWdodGx5
IGZhc3RlciB2ZXJzaW9uIG9mIGFjY2Vzc1dpZHRoLCBpZiB5b3Uga25vdyB0aGF0IHlvdSdyZSB3
b3JraW5nIHdpdGggYSBsb2FkIG9yIHN0b3JlLgorICAgIFdpZHRoIGxvYWRTdG9yZVdpZHRoKCkg
Y29uc3Q7CisgICAgCisgICAgdmlydHVhbCBXaWR0aCBhY2Nlc3NXaWR0aCgpIGNvbnN0OwogCiBw
cm90ZWN0ZWQ6Ci0gICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwg
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFZhbHVlKiBjbG9uZUltcGwoKSBj
b25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwot
Ci0gICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywg
b3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAotICAgIC8vIGRlc2Ny
aWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDAp
Ci0gICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgdHlwZSwgb3JpZ2luLCBwb2lu
dGVyKQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBNZW1v
cnlWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3JpZ2luIG9y
aWdpbiwgaW50MzJfdCBvZmZzZXQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDog
VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCiAg
ICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAsIG1fcmFuZ2UoSGVhcFJhbmdlOjp0
b3AoKSkKICAgICB7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgTG9hZDoKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTG9hZDhaOgotICAgICAgICAgICAg
Y2FzZSBMb2FkOFM6Ci0gICAgICAgICAgICBjYXNlIExvYWQxNlo6Ci0gICAgICAgICAgICBjYXNl
IExvYWQxNlM6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgICAgICBj
YXNlIFN0b3JlMTY6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAgICAgIEFT
U0VSVCh0eXBlID09IFZvaWQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBM
b2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2
ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KKyAg
ICBNZW1vcnlWYWx1ZShLaW5kLCBUeXBlLCBPcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90
IG9mZnNldCA9IDApOwogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhl
IHJldHVybiB0eXBlIGlzIGltcGxpZWQuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAgICA6
IE1lbW9yeVZhbHVlKGtpbmQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCkKLSAgICB7
Ci0gICAgfQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGlu
dDMyX3Qgb2Zmc2V0ID0gMCk7CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCi0g
ICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZh
bHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDogVmFsdWUoQ2hlY2tl
ZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKLSAgICAgICAgLCBt
X29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6OnRvcCgpKQotICAg
IHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAo
a2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgICAgICBj
YXNlIFN0b3JlMTY6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFsdWUqIHZhbHVlLCBW
YWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKTsKKyAgICAKICAgICBpbnQzMl90IG1f
b2Zmc2V0IHsgMCB9OwotICAgIEhlYXBSYW5nZSBtX3JhbmdlOworICAgIEhlYXBSYW5nZSBtX3Jh
bmdlIHsgSGVhcFJhbmdlOjp0b3AoKSB9OworICAgIEhlYXBSYW5nZSBtX2ZlbmNlUmFuZ2UgeyBI
ZWFwUmFuZ2UoKSB9OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3
IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUg
IkIzV2lkdGguaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAKQEAgLTgyLDcgKzgzLDYgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90IHsK
ICAgICBNb2QsIC8vIEFsbCBiZXRzIGFyZSBvZmYgYXMgdG8gd2hhdCB3aWxsIGhhcHBlbiB3aGVu
IHlvdSBleGVjdXRlIHRoaXMgZm9yIC0yXjMxJS0xIGFuZCB4JTAuCiAgICAgVU1vZCwKIAotCiAg
ICAgLy8gUG9seW1vcnBoaWMgbmVnYXRpb24uIE5vdGUgdGhhdCB3ZSBvbmx5IG5lZWQgdGhpcyBm
b3IgZmxvYXRpbmcgcG9pbnQsIHNpbmNlIGludGVnZXIgbmVnYXRpb24KICAgICAvLyBpcyBleGFj
dGx5IGxpa2UgU3ViKDAsIHgpLiBCdXQgdGhhdCdzIG5vdCB0cnVlIGZvciBmbG9hdGluZyBwb2lu
dC4gU3ViKDAsIDApIGlzIDAsIHdoaWxlCiAgICAgLy8gTmVnKDApIGlzIC0wLiBBbHNvLCB3ZSBj
YW5vbmljYWxpemUgU3ViKDAsIHgpIGludG8gTmVnKHgpIGluIGNhc2Ugb2YgaW50ZWdlcnMuCkBA
IC0xNjIsNiArMTYyLDEwNyBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIFN0b3JlMTYs
CiAgICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGljIHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIEZs
b2F0LCBhbmQgRG91YmxlLgogICAgIFN0b3JlLAorICAgIAorICAgIC8vIEF0b21pYyBjb21wYXJl
IGFuZCBzd2FwIHRoYXQgcmV0dXJucyBhIGJvb2xlYW4uIE1heSBjaG9vc2UgdG8gZG8gbm90aGlu
ZyBhbmQgcmV0dXJuIGZhbHNlLiBZb3UgY2FuCisgICAgLy8gdXN1YWxseSBhc3N1bWUgdGhhdCB0
aGlzIGlzIGZhc3RlciBhbmQgcmVzdWx0cyBpbiBsZXNzIGNvZGUgdGhhbiBBdG9taWNTdHJvbmdD
QVMsIHRob3VnaCB0aGF0J3MKKyAgICAvLyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSBvbiBJbnRlbCwg
aWYgaW5zdHJ1Y3Rpb24gc2VsZWN0aW9uIGRvZXMgaXRzIGpvYi4gSW1hZ2luZSB0aGF0IHRoaXMg
b3Bjb2RlIGlzCisgICAgLy8gYXMgaWYgeW91IGRpZCB0aGlzIGF0b21pY2FsbHk6CisgICAgLy8K
KyAgICAvLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIC8vIGJvb2wgQXRvbWljV2Vha0NBUyhU
IGV4cGVjdGVkVmFsdWUsIFQgbmV3VmFsdWUsIFQqIHB0cikKKyAgICAvLyB7CisgICAgLy8gICAg
IGlmICghcmFuZCgpKQorICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBSZWFsIHdvcmxk
IGV4YW1wbGUgb2YgdGhpczogY29udGV4dCBzd2l0Y2ggb24gQVJNIHdoaWxlIGRvaW5nIENBUy4K
KyAgICAvLyAgICAgaWYgKCpwdHIgIT0gZXhwZWN0ZWRWYWx1ZSkKKyAgICAvLyAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAvLyAgICAgKnB0ciA9IG5ld1ZhbHVlOworICAgIC8vICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgYWxsIGF0b21pY3Mg
cHV0IHRoZSBwb2ludGVyIGxhc3QgdG8gYmUgY29uc2lzdGVudCB3aXRoIGhvdyBsb2FkcyBhbmQg
c3RvcmVzIHdvcmsuIFRoaXMKKyAgICAvLyBpcyBhIGdvb2Z5IHRyYWRpdGlvbiwgYnV0IGl0J3Mg
aGFybWxlc3MsIGFuZCBiZXR0ZXIgdGhhbiBiZWluZyBpbmNvbnNpc3RlbnQuCisgICAgLy8KKyAg
ICAvLyBOb3RlIHRoYXQgd2VhayBDQVMgaGFzIG5vIGZlbmNpbmcgZ3VhcmFudGVlcyB3aGVuIGl0
IGZhaWxzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZworICAgIC8vIHRyYW5zZm9ybWF0
aW9uIGlzIGFsd2F5cyB2YWxpZDoKKyAgICAvLworICAgIC8vIEJlZm9yZToKKyAgICAvLworICAg
IC8vICAgICAgICAgQnJhbmNoKEF0b21pY1dlYWtDQVMoZXhwZWN0ZWQsIG5ldywgcHRyKSkKKyAg
ICAvLyAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiNzdWNjZXNzLCBFbHNlOiNmYWlsCisgICAgLy8K
KyAgICAvLyBBZnRlcjoKKyAgICAvLworICAgIC8vICAgICAgICAgQnJhbmNoKEVxdWFsKExvYWQo
cHRyKSwgZXhwZWN0ZWQpKQorICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I2F0dGVtcHQs
IEVsc2U6I2ZhaWwKKyAgICAvLyAgICAgQkIjYXR0ZW1wdDoKKyAgICAvLyAgICAgICAgIEJyYW5j
aChBdG9taWNXZWFrQ0FTKGV4cGVjdGVkLCBuZXcsIHB0cikpCisgICAgLy8gICAgICAgU3VjY2Vz
c29yczogVGhlbjojc3VjY2VzcywgRWxzZTojZmFpbAorICAgIC8vCisgICAgLy8gQm90aCBraW5k
cyBvZiBDQVMgZm9yIG5vbi1jYW5vbmljYWwgd2lkdGhzIChXaWR0aDggYW5kIFdpZHRoMTYpIGln
bm9yZSB0aGUgaXJyZWxldmFudCBiaXRzIG9mIHRoZQorICAgIC8vIGlucHV0LgorICAgIEF0b21p
Y1dlYWtDQVMsCisgICAgCisgICAgLy8gQXRvbWljIGNvbXBhcmUgYW5kIHN3YXAgdGhhdCByZXR1
cm5zIHRoZSBvbGQgdmFsdWUuIERvZXMgbm90IGhhdmUgdGhlIG5vbmRldGVybWluaXNtIG9mIFdl
YWtDQVMuCisgICAgLy8gVGhpcyBpcyBhIGJpdCBtb3JlIGNvZGUgYW5kIGEgYml0IHNsb3dlciBp
biBzb21lIGNhc2VzLCB0aG91Z2ggbm90IGJ5IGEgbG90LiBJbWFnaW5lIHRoYXQgdGhpcworICAg
IC8vIG9wY29kZSBpcyBhcyBpZiB5b3UgZGlkIHRoaXMgYXRvbWljYWxseToKKyAgICAvLworICAg
IC8vIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgLy8gVCBBdG9taWNTdHJvbmdDQVMoVCBleHBl
Y3RlZFZhbHVlLCBUIG5ld1ZhbHVlLCBUKiBwdHIpCisgICAgLy8geworICAgIC8vICAgICBUIG9s
ZFZhbHVlID0gKnB0cjsKKyAgICAvLyAgICAgaWYgKG9sZFZhbHVlID09IGV4cGVjdGVkVmFsdWUp
CisgICAgLy8gICAgICAgICAqcHRyID0gbmV3VmFsdWU7CisgICAgLy8gICAgIHJldHVybiBvbGRW
YWx1ZQorICAgIC8vIH0KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBBdG9taWNXZWFrQ0FTIGFu
ZCBBdG9taWNTdHJvbmdDQVMgc29ydCBvZiBoYXZlIHRoaXMga2luZCBvZiBlcXVpdmFsZW5jZToK
KyAgICAvLworICAgIC8vIEF0b21pY1dlYWtDQVMoQGV4cCwgQG5ldywgQHB0cikgPT0gRXF1YWwo
QXRvbWljU3Ryb25nQ0FTKEBleHAsIEBuZXcsIEBwdHIpLCBAZXhwKQorICAgIC8vCisgICAgLy8g
QXNzdW1pbmcgdGhhdCB0aGUgV2Vha0NBUyBkb2VzIG5vdCBzcHVyaW91c2x5IGZhaWwsIG9mIGNv
dXJzZS4KKyAgICBBdG9taWNTdHJvbmdDQVMsCisgICAgCisgICAgLy8gQXRvbWljYWxseSBfX18g
YSBtZW1vcnkgbG9jYXRpb24gYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiBTeW50YXg6CisgICAg
Ly8KKyAgICAvLyBAb2xkVmFsdWUgPSBBdG9taWNYY2hnX19fKEBvcGVyYW5kLCBAcHRyKQorICAg
IC8vCisgICAgLy8gRm9yIG5vbi1jYW5vbmljYWwgd2lkdGhzIChXaWR0aDggYW5kIFdpZHRoMTYp
LCB0aGVzZSByZXR1cm4gc2lnbi1leHRlbmRlZCByZXN1bHRzIGFuZCBpZ25vcmUgdGhlCisgICAg
Ly8gaXJyZWxldmFudCBiaXRzIG9mIHRoZWlyIGlucHV0cy4KKyAgICBBdG9taWNYY2hnQWRkLAor
ICAgIEF0b21pY1hjaGdBbmQsCisgICAgQXRvbWljWGNoZ09yLAorICAgIEF0b21pY1hjaGdTdWIs
CisgICAgQXRvbWljWGNoZ1hvciwKKyAgICAKKyAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxk
IGhhdmUgQXRvbWljWGNoZ05lZyBhbmQgQXRvbWljWGNoZ05vdC4KKyAgICAKKyAgICAvLyBBdG9t
aWNhbGx5IGV4Y2hhbmdlIGEgdmFsdWUgd2l0aCBhIG1lbW9yeSBsb2NhdGlvbi4gU3ludGF4Ogor
ICAgIC8vCisgICAgLy8gQG9sZFZhbHVlID0gQXRvbWljWGNoZyhAbmV3VmFsdWUsIEBwdHIpCisg
ICAgQXRvbWljWGNoZywKKyAgICAKKyAgICAvLyBJbnRyb2R1Y2UgYW4gaW52aXNpYmxlIGRlcGVu
ZGVuY3kgZm9yIGJsb2NraW5nIG1vdGlvbiBvZiBsb2FkcyB3aXRoIHJlc3BlY3QgdG8gZWFjaCBv
dGhlci4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQHJlc3VsdCA9IERlcGVuZChAcGhhbnRvbSkK
KyAgICAvLworICAgIC8vIFRoaXMgaXMgZXZlbnR1YWxseSBjb2RlZ2VuZXJhdGVkIHRvIGhhdmUg
bG9jYWwgc2VtYW50aWNzIGFzIGlmIHdlIGRpZDoKKyAgICAvLworICAgIC8vIEByZXN1bHQgPSAk
MAorICAgIC8vCisgICAgLy8gQnV0IGl0IGVuc3VyZXMgdGhhdCB0aGUgdXNlcnMgb2YgQHJlc3Vs
dCBjYW5ub3QgZXhlY3V0ZSB1bnRpbCBAcGhhbnRvbSBpcyBjb21wdXRlZC4KKyAgICAvLworICAg
IC8vIFRoZSBjb21waWxlciBpcyBub3QgYWxsb3dlZCB0byByZWFzb24gYWJvdXQgdGhlIGZhY3Qg
dGhhdCBEZXBlbmQgY29kZWdlbmVyYXRlcyB0aGlzIHdheS4gQW55IGtpbmQKKyAgICAvLyBvZiB0
cmFuc2Zvcm1hdGlvbiBvciBhbmFseXNpcyB0aGF0IHJlbGllcyBvbiB0aGUgaW5zaWdodCB0aGF0
IERlcGVuZCBpcyByZWFsbHkgemVybyBpcyB1bnNvdW5kLAorICAgIC8vIGJlY2F1c2UgaXQgdW5s
b2NrcyByZW9yZGVyaW5nIG9mIHVzZXJzIG9mIEByZXN1bHQgYW5kIEBwaGFudG9tLgorICAgIC8v
CisgICAgLy8gT24gWDg2LCB0aGlzIGlzIGxvd2VyZWQgdG8gYSBsb2FkLWxvYWQgZmVuY2UgYW5k
IEByZXN1bHQgdXNlcyBAcGhhbnRvbSBkaXJlY3RseS4KKyAgICAvLworICAgIC8vIE9uIEFSTSwg
dGhpcyBpcyBsb3dlcmVkIGFzIGlmIGxpa2U6CisgICAgLy8KKyAgICAvLyBAcmVzdWx0ID0gQml0
WG9yKEBwaGFudG9tLCBAcGhhbnRvbSkKKyAgICAvLworICAgIC8vIEV4Y2VwdCB0aGF0IHRoZSBj
b21waWxlciBuZXZlciBnZXRzIGFuIG9wcG9ydHVuaXR5IHRvIHNpbXBsaWZ5IG91dCB0aGUgQml0
WG9yLgorICAgIERlcGVuZCwKIAogICAgIC8vIFRoaXMgaXMgdXNlZCB0byBjb21wdXRlIHRoZSBh
Y3R1YWwgYWRkcmVzcyBvZiBhIFdhc20gbWVtb3J5IG9wZXJhdGlvbi4gSXQgdGFrZXMgYW4gSW50
UHRyCiAgICAgLy8gYW5kIGEgcGlubmVkIHJlZ2lzdGVyIHRoZW4gY29tcHV0ZXMgdGhlIGFwcHJv
cHJpYXRlIEludFB0ciBhZGRyZXNzLiBGb3IgdGhlIHVzZS1jYXNlIG9mCkBAIC0zMDEsNiArNDAy
LDExMCBAQCBpbmxpbmUgYm9vbCBpc0RlZmluaXRlbHlUZXJtaW5hbChPcGNvZGUgCiAgICAgfQog
fQogCitpbmxpbmUgYm9vbCBpc0xvYWQoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9w
Y29kZSkgeworICAgIGNhc2UgTG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9h
ZDE2WjoKKyAgICBjYXNlIExvYWQxNlM6CisgICAgY2FzZSBMb2FkOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitp
bmxpbmUgYm9vbCBpc1N0b3JlKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICBjYXNlIFN0b3JlODoKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNMb2FkU3RvcmUoT3Bjb2RlIG9wY29kZSkKK3sK
KyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgTG9hZDhaOgorICAgIGNhc2UgTG9hZDhT
OgorICAgIGNhc2UgTG9hZDE2WjoKKyAgICBjYXNlIExvYWQxNlM6CisgICAgY2FzZSBMb2FkOgor
ICAgIGNhc2UgU3RvcmU4OgorICAgIGNhc2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0F0b21pYyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3
aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWlj
U3Ryb25nQ0FTOgorICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdB
bmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAg
IGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K2lubGluZSBib29sIGlzQXRvbWljQ0FTKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdD
QVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzQXRvbWljWGNoZyhPcGNvZGUgb3Bjb2Rl
KQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAg
IGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNlIEF0
b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWljWGNo
ZzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNNZW1vcnlBY2Nlc3MoT3Bjb2RlIG9wY29k
ZSkKK3sKKyAgICByZXR1cm4gaXNBdG9taWMob3Bjb2RlKSB8fCBpc0xvYWRTdG9yZShvcGNvZGUp
OworfQorCitpbmxpbmUgT3Bjb2RlIHNpZ25FeHRlbmRPcGNvZGUoV2lkdGggd2lkdGgpCit7Cisg
ICAgc3dpdGNoICh3aWR0aCkgeworICAgIGNhc2UgV2lkdGg4OgorICAgICAgICByZXR1cm4gU0V4
dDg7CisgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICByZXR1cm4gU0V4dDE2OworICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBPb3BzOworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVzcGFj
ZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNiArMjAyLDggQEAgdm9pZCBQcm9jZWR1cmU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogICAgICAgICB9CiAgICAgICAgIGRhdGFMb2coIiAgICAi
LCBkZWVwRHVtcCgqdGhpcywgdmFsdWUpLCAiXG4iKTsKICAgICB9CisgICAgaWYgKGhhc1F1aXJr
cygpKQorICAgICAgICBvdXQucHJpbnQoIkhhcyBRdWlya3M6IFRydWVcbiIpOwogICAgIGlmICh2
YXJpYWJsZXMoKS5zaXplKCkpIHsKICAgICAgICAgb3V0LnByaW50KCJWYXJpYWJsZXM6XG4iKTsK
ICAgICAgICAgZm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiB2YXJpYWJsZXMoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE3LDYgKzExNyw3IEBAIHB1YmxpYzoKICAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoT3JpZ2lu
LCBUeXBlLCBpbnQ2NF90IHZhbHVlKTsKICAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoVmFsdWUq
LCBpbnQ2NF90IHZhbHVlKTsKIAorICAgIC8vIFlvdSdyZSBndWFyYW50ZWVkIHRoYXQgYm90dG9t
IGlzIHplcm8uCiAgICAgVmFsdWUqIGFkZEJvdHRvbShPcmlnaW4sIFR5cGUpOwogICAgIFZhbHVl
KiBhZGRCb3R0b20oVmFsdWUqKTsKIApAQCAtMTk1LDYgKzE5NiwxMiBAQCBwdWJsaWM6CiAgICAg
Ly8gYWxpdmUuIEdyZWF0IGZvciBjb21waWxlci1nZW5lcmF0ZWQgZGF0YSBzZWN0aW9ucywgbGlr
ZSBzd2l0Y2gganVtcCB0YWJsZXMgYW5kIGNvbnN0YW50IHBvb2xzLgogICAgIC8vIFRoaXMgcmV0
dXJucyBtZW1vcnkgdGhhdCBoYXMgYmVlbiB6ZXJvLWluaXRpYWxpemVkLgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQqIGFkZERhdGFTZWN0aW9uKHNpemVfdCk7CisgICAgCisgICAgLy8gU29t
ZSBvcGVyYXRpb25zIGFyZSBzcGVjaWZpZWQgaW4gQjMgSVIgdG8gYmVoYXZlIG9uZSB3YXkgYnV0
IG9uIHRoaXMgZ2l2ZW4gQ1BVIHRoZXkgYmVoYXZlIGEKKyAgICAvLyBkaWZmZXJlbnQgd2F5LiBX
aGVuIHRydWUsIHRob3NlIEIzIElSIG9wcyBzd2l0Y2ggdG8gYmVoYXZpbmcgdGhlIENQVSB3YXks
IGFuZCB0aGUgb3B0aW1pemVyIG1heQorICAgIC8vIHN0YXJ0IHRha2luZyBhZHZhbnRhZ2Ugb2Yg
aXQuCisgICAgYm9vbCBoYXNRdWlya3MoKSBjb25zdCB7IHJldHVybiBtX2hhc1F1aXJrczsgfQor
ICAgIHZvaWQgc2V0SGFzUXVpcmtzKGJvb2wgdmFsdWUpIHsgbV9oYXNRdWlya3MgPSB2YWx1ZTsg
fQogCiAgICAgT3BhcXVlQnlwcm9kdWN0cyYgYnlwcm9kdWN0cygpIHsgcmV0dXJuICptX2J5cHJv
ZHVjdHM7IH0KIApAQCAtMjUyLDYgKzI1OSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNoYXJl
ZFRhc2s8dm9pZChQcmludFN0cmVhbSYsIE9yaWdpbik+PiBtX29yaWdpblByaW50ZXI7CiAgICAg
Y29uc3Qgdm9pZCogbV9mcm9udGVuZERhdGE7CiAgICAgUENUb09yaWdpbk1hcCBtX3BjVG9Pcmln
aW5NYXA7CisgICAgYm9vbCBtX2hhc1F1aXJrcyB7IGZhbHNlIH07CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1
Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAyLDcgKzYwMiw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGJyZWFrOwotCisgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBOZWc6CiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE5l
Zyhjb25zdGFudCkKICAgICAgICAgICAgIC8vIEludG8gdGhpczogLWNvbnN0YW50CkBAIC0xMjk1
LDYgKzEyOTUsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoIW1fcHJvYy5oYXNRdWlya3MoKSkgeworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
U0V4dDgoQXRvbWljWGNoZ19fXykKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEF0b21p
Y1hjaGdfX18KKyAgICAgICAgICAgICAgICBpZiAoaXNBdG9taWNYY2hnKG1fdmFsdWUtPmNoaWxk
KDApLT5vcGNvZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCkt
PmFzPEF0b21pY1ZhbHVlPigpLT5vcGVyYXRpb25XaWR0aCgpID09IFdpZHRoOCkgeworICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTRXh0MTY6CkBAIC0xMzQzLDYg
KzEzNTMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIW1fcHJvYy5oYXNR
dWlya3MoKSkgeworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KEF0b21pY1hj
aGdfX18pCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBdG9taWNYY2hnX19fCisgICAg
ICAgICAgICAgICAgaWYgKGlzQXRvbWljWGNoZyhtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkp
CisgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5hczxBdG9taWNWYWx1
ZT4oKS0+b3BlcmF0aW9uV2lkdGgoKSA9PSBXaWR0aDE2KSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIFNFeHQzMjoKQEAgLTIxMDEsMjIgKzIxMjEsMjUgQEAg
cHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG1fdmFsdWUtPm51bUNoaWxkcmVuKCkgPj0gMik7CiAg
ICAgICAgIAogICAgICAgICAvLyBMZWF2ZSBpdCBhbG9uZSBpZiB0aGUgcmlnaHQgY2hpbGQgaXMg
YSBjb25zdGFudC4KLSAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0NvbnN0YW50KCkp
CisgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNDb25zdGFudCgpCisgICAgICAgICAg
ICB8fCBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDAp
LT5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgYXV0byBzd2FwID0gWyZdICgpIHsKICAgICAgICAg
ICAgIHN0ZDo6c3dhcChtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwogICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkt
PmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzd2FwKCk7CisgICAgICAgIAorICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUykK
KyAgICAgICAgICAgIHJldHVybiBzd2FwKCk7CisgICAgICAgIAogICAgICAgICAvLyBTb3J0IHRo
ZSBvcGVyYW5kcy4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgY2Fub25pY2FsaXphdGlvbi4gV2UgdXNl
IHRoZSBpbmRleCBpbnN0ZWFkIG9mCiAgICAgICAgIC8vIHRoZSBhZGRyZXNzIHRvIG1ha2UgdGhp
cyBhdCBsZWFzdCBzbGlnaHRseSBkZXRlcm1pbmlzdGljLgotICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPmluZGV4KCkgPiBtX3ZhbHVlLT5jaGlsZCgxKS0+aW5kZXgoKSkgewotICAgICAg
ICAgICAgc3RkOjpzd2FwKG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0g
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9CisgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aW5kZXgoKSA+IG1fdmFsdWUtPmNo
aWxkKDEpLT5pbmRleCgpKQorICAgICAgICAgICAgcmV0dXJuIHN3YXAoKTsKICAgICB9CiAKICAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGJlIGEgZm9yd2FyZCBhbmFseXNpcy4gSW5z
dGVhZCwgd2UgdXNlcyBhIGJvdW5kZWQtc2VhcmNoIGJhY2t3YXJkcwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYs
NiArMzQ2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1D
aGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFs
dWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IEludDMyLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwog
ICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBMb2FkOgpAQCAtMzUzLDYgKzM1NCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAx
LCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGls
ZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAgICAg
IHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBTdG9yZTg6CkBAIC0zNjIsNiArMzY0LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IEludDMyLCAoIkF0
ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+
dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAgICAgIHZhbGlk
YXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBTdG9yZToKQEAgLTM2OSw4ICszNzIsNDkgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkgPT0gcG9p
bnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
dmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vz
cyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21p
Y1dlYWtDQVM6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaXNDaGls
bCgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5u
dW1DaGlsZHJlbigpID09IDMsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgx
KS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlz
SW50KHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMiktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgp
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlQXRvbWljKHZhbHVl
KTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAg
ICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAz
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBl
KCkgPT0gdmFsdWUtPmNoaWxkKDApLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSktPnR5cGUo
KSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1
ZS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+Y2hpbGQoMiktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIHZhbGlkYXRlQXRvbWljKHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNo
Z0FuZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgICAgICAgICAgY2FzZSBB
dG9taWNYY2hnU3ViOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICAg
ICAgY2FzZSBBdG9taWNYY2hnOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2lu
ZCgpLmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDApLT50eXBlKCks
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUt
PnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPmNoaWxkKDEpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAg
dmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIERlcGVuZDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtp
bmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDApLT50
eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQo
dmFsdWUtPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIFdhc21BZGRyZXNzOgogICAgICAgICAgICAgICAgIFZBTElEQVRF
KCF2YWx1ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZh
bHVlKSk7CkBAIC01MzcsNiArNTgxLDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlRmVuY2UoVmFsdWUqIHZh
bHVlKQorICAgIHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1v
cnlWYWx1ZT4oKTsKKyAgICAgICAgaWYgKG1lbW9yeS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAg
IFZBTElEQVRFKG1lbW9ydHktPmFjY2Vzc0JhbmsoKSA9PSBHUCwgKCJGZW5jZSBhdCAiLCAqbWVt
b3J5KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGVBdG9taWMoVmFsdWUqIHZhbHVl
KQorICAgIHsKKyAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IHZhbHVlLT5hczxBdG9taWNW
YWx1ZT4oKTsKKyAgICAgICAgCisgICAgICAgIFZBTElEQVRFKGJlc3RUeXBlKGF0b21pYy0+b3Bl
cmF0aW9uV2lkdGgoKSkgPT0gYXRvbWljLT5vcGVyYXRpb25UeXBlKCksICgiQXQgIiwgKnZhbHVl
KSk7CisgICAgfQogCiAgICAgdm9pZCB2YWxpZGF0ZVN0YWNrQWNjZXNzKFZhbHVlKiB2YWx1ZSkK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAy
MTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUg
IkIzQXJndW1lbnRSZWdWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQXRvbWljVmFsdWUuaCIKICNpbmNs
dWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNCb3R0b21Qcm92aWRlci5o
IgogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgpAQCAtNTEwLDYgKzUxMSw3IEBAIGJvb2wgVmFs
dWU6OnJldHVybnNCb29sKCkgY29uc3QKICAgICBjYXNlIEFib3ZlRXF1YWw6CiAgICAgY2FzZSBC
ZWxvd0VxdWFsOgogICAgIGNhc2UgRXF1YWxPclVub3JkZXJlZDoKKyAgICBjYXNlIEF0b21pY1dl
YWtDQVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgUGhpOgogICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGhhdmUgYSBzdG9yeSBoZXJlLgpAQCAtNTg5LDYgKzU5MSw3IEBAIEVm
ZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgIGNhc2UgQmVsb3dFcXVhbDoKICAgICBj
YXNlIEVxdWFsT3JVbm9yZGVyZWQ6CiAgICAgY2FzZSBTZWxlY3Q6CisgICAgY2FzZSBEZXBlbmQ6
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRGl2OgogICAgIGNhc2UgVURpdjoKQEAgLTYwMCwx
NiArNjAzLDQ0IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgIGNhc2UgTG9h
ZDhTOgogICAgIGNhc2UgTG9hZDE2WjoKICAgICBjYXNlIExvYWQxNlM6Ci0gICAgY2FzZSBMb2Fk
OgotICAgICAgICByZXN1bHQucmVhZHMgPSBhczxNZW1vcnlWYWx1ZT4oKS0+cmFuZ2UoKTsKKyAg
ICBjYXNlIExvYWQ6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZh
bHVlPigpOworICAgICAgICByZXN1bHQucmVhZHMgPSBtZW1vcnktPnJhbmdlKCk7CisgICAgICAg
IGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC53cml0ZXMgPSBt
ZW1vcnktPmZlbmNlUmFuZ2UoKTsKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7Cisg
ICAgICAgIH0KICAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAg
ICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBTdG9yZTg6CiAgICAgY2FzZSBTdG9yZTE2OgotICAg
IGNhc2UgU3RvcmU6Ci0gICAgICAgIHJlc3VsdC53cml0ZXMgPSBhczxNZW1vcnlWYWx1ZT4oKS0+
cmFuZ2UoKTsKKyAgICBjYXNlIFN0b3JlOiB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkg
PSBhczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LndyaXRlcyA9IG1lbW9yeS0+cmFu
Z2UoKTsKKyAgICAgICAgaWYgKG1lbW9yeS0+aGFzRmVuY2UoKSkgeworICAgICAgICAgICAgcmVz
dWx0LnJlYWRzID0gbWVtb3J5LT5mZW5jZVJhbmdlKCk7CisgICAgICAgICAgICByZXN1bHQuZmVu
Y2UgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50ID0g
dHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAg
ICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2Fz
ZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWlj
WGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hnOiB7
CisgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBhczxBdG9taWNWYWx1ZT4oKTsKKyAgICAg
ICAgcmVzdWx0LnJlYWRzID0gYXRvbWljLT5yYW5nZSgpIHwgYXRvbWljLT5mZW5jZVJhbmdlKCk7
CisgICAgICAgIHJlc3VsdC53cml0ZXMgPSBhdG9taWMtPnJhbmdlKCkgfCBhdG9taWMtPmZlbmNl
UmFuZ2UoKTsKKyAgICAgICAgaWYgKG1lbW9yeS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJl
c3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50ID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgV2FzbUFkZHJlc3M6CiAgICAgICAg
IHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwpAQCAtNjE3LDE4ICs2
NDgsNyBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICAgICAgY29uc3QgRmVu
Y2VWYWx1ZSogZmVuY2UgPSBhczxGZW5jZVZhbHVlPigpOwogICAgICAgICByZXN1bHQucmVhZHMg
PSBmZW5jZS0+cmVhZDsKICAgICAgICAgcmVzdWx0LndyaXRlcyA9IGZlbmNlLT53cml0ZTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIFByZXZlbnQga2lsbGluZyBvZiBmZW5jZXMgdGhhdCBjbGFpbSBu
b3QgdG8gd3JpdGUgYW55dGhpbmcuIEl0J3MgYSBiaXQgd2VpcmQgdGhhdCB3ZSB1c2UKLSAgICAg
ICAgLy8gbG9jYWwgc3RhdGUgYXMgdGhlIHdheSB0byBkbyB0aGlzLCBidXQgaXQgaGFwcGVucyB0
byB3b3JrOiB3ZSBtdXN0IGFzc3VtZSB0aGF0IHdlIGNhbm5vdAotICAgICAgICAvLyBraWxsIHdy
aXRlc0xvY2FsU3RhdGUgdW5sZXNzIHdlIHVuZGVyc3RhbmRzIGV4YWN0bHkgd2hhdCB0aGUgaW5z
dHJ1Y3Rpb24gaXMgZG9pbmcgKGxpa2UKLSAgICAgICAgLy8gdGhlIHdheSB0aGF0IGZpeFNTQSB1
bmRlcnN0YW5kcyBTZXQvR2V0IGFuZCB0aGUgd2F5IHRoYXQgcmVkdWNlU3RyZW5ndGggYW5kIG90
aGVycwotICAgICAgICAvLyB1bmRlcnN0YW5kIFVwc2lsb24pLiBUaGlzIHdvdWxkIG9ubHkgYmVj
b21lIGEgcHJvYmxlbSBpZiB3ZSBoYWQgc29tZSBhbmFseXNpcyB0aGF0IHdhcwotICAgICAgICAv
LyBsb29raW5nIHRvIHVzZSB0aGUgd3JpdGVzTG9jYWxTdGF0ZSBiaXQgdG8gaW52YWxpZGF0ZSBh
IENTRSBvdmVyIGxvY2FsIHN0YXRlIG9wZXJhdGlvbnMuCi0gICAgICAgIC8vIFRoZW4gYSBGZW5j
ZSB3b3VsZCBsb29rIGJsb2NrLCBzYXksIHRoZSBlbGltaW5hdGlvbiBvZiBhIHJlZHVuZGFudCBH
ZXQuIEJ1dCBpdCBsaWtlCi0gICAgICAgIC8vIHRoYXQncyBub3QgYXQgYWxsIGhvdyBvdXIgb3B0
aW1pemF0aW9ucyBmb3IgU2V0L0dldC9VcHNpbG9uL1BoaSB3b3JrIC0gdGhleSBncm9rIHRoZWly
Ci0gICAgICAgIC8vIG9wZXJhdGlvbnMgZGVlcGx5IGVub3VnaCB0aGF0IHRoZXkgaGF2ZSBubyBu
ZWVkIHRvIGNoZWNrIHRoaXMgYml0IC0gc28gdGhpcyBjaGVhdCBpcwotICAgICAgICAvLyBmaW5l
LgotICAgICAgICByZXN1bHQud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CisgICAgICAgIHJlc3Vs
dC5mZW5jZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENDYWxsOgpA
QCAtNjk0LDYgKzcxNCw3IEBAIFZhbHVlS2V5IFZhbHVlOjprZXkoKSBjb25zdAogICAgIGNhc2Ug
Q2hlY2s6CiAgICAgY2FzZSBCaXR3aXNlQ2FzdDoKICAgICBjYXNlIE5lZzoKKyAgICBjYXNlIERl
cGVuZDoKICAgICAgICAgcmV0dXJuIFZhbHVlS2V5KGtpbmQoKSwgdHlwZSgpLCBjaGlsZCgwKSk7
CiAgICAgY2FzZSBBZGQ6CiAgICAgY2FzZSBTdWI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDEwIEBAIHB1YmxpYzoKICAgICAK
ICAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4ga2luZCgpLm9wY29kZSgpOyB9CiAg
ICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSBraW5kIGlzIG1lYW50IHRvIGJlIGltbXV0YWJsZS4g
RG8gdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgdGhpcyBpcyBzYWZlLiBJdCdzIG5vdAorICAgIC8v
IHVzdWFsbHkgc2FmZS4KKyAgICB2b2lkIHNldEtpbmRVbnNhZmVseShLaW5kIGtpbmQpIHsgbV9r
aW5kID0ga2luZDsgfQorICAgIAogICAgIC8vIEl0J3MgZ29vZCBwcmFjdGljZSB0byBtaXJyb3Ig
S2luZCBtZXRob2RzIGhlcmUsIHNvIHlvdSBjYW4gc2F5IHZhbHVlLT5pc0JsYWgoKQogICAgIC8v
IGluc3RlYWQgb2YgdmFsdWUtPmtpbmQoKS5pc0JsYWgoKS4KICAgICBib29sIGlzQ2hpbGwoKSBj
b25zdCB7IHJldHVybiBraW5kKCkuaXNDaGlsbCgpOyB9CkBAIC0xMDcsNiArMTExLDggQEAgcHVi
bGljOgogICAgIC8vIHZhbHVlcyB3aXRoIElkZW50aXRpZXMgb24gYm90dG9tIGNvbnN0YW50cy4g
Rm9yIHRoaXMgcmVhc29uLCB0aGlzIHRha2VzIGEgY2FsbGJhY2sgdGhhdCBpcwogICAgIC8vIHJl
c3BvbnNpYmxlIGZvciBjcmVhdGluZyBib3R0b21zLiBUaGVyZSdzIGEgdXRpbGl0eSBmb3IgdGhp
cywgc2VlIEIzQm90dG9tUHJvdmlkZXIuaC4gWW91CiAgICAgLy8gY2FuIGFsc28gYWNjZXNzIHRo
YXQgdXRpbGl0eSB1c2luZyByZXBsYWNlV2l0aEJvdHRvbShJbnNlcnRpb25TZXQmLCBzaXplX3Qp
LgorICAgIC8vCisgICAgLy8gWW91J3JlIGd1YXJhbnRlZWQgdGhhdCBib3R0b20gaXMgemVyby4K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCb3R0b21Qcm92aWRlcj4KICAgICB2b2lkIHJlcGxhY2VX
aXRoQm90dG9tKGNvbnN0IEJvdHRvbVByb3ZpZGVyJik7CiAgICAgCkBAIC0zMjEsNiArMzI3LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJVG9GOgogICAgICAgICBjYXNlIEJpdHdpc2VDYXN0
OgogICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkobnVtQXJncyAhPSAxKSkKICAgICAgICAgICAgICAgICBiYWRLaW5kKGtp
bmQsIG51bUFyZ3MpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNXaWR0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzV2lkdGguY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNXaWR0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDM4IEBACiAKICNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIAorbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK1R5cGUgYmVzdFR5cGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0aCkKK3sKKyAgICBzd2l0
Y2ggKHdpZHRoKSB7CisgICAgY2FzZSBXaWR0aDg6CisgICAgY2FzZSBXaWR0aDE2OgorICAgIGNh
c2UgV2lkdGgzMjoKKyAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgIGNhc2UgR1A6Cisg
ICAgICAgICAgICByZXR1cm4gSW50MzI7CisgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICBy
ZXR1cm4gRmxvYXQ7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICBz
d2l0Y2ggKGJhbmspIHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBJbnQ2
NDsKKyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBEb3VibGU7CisgICAgICAg
IH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IFZvaWQ7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIFZvaWQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCiBuYW1lc3BhY2UgV1RG
IHsKIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6QjM6OldpZHRo
IHdpZHRoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCShyZXZpc2lvbiAyMTI5
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Miw2ICs2MiwxOCBAQCBpbmxpbmUgV2lkdGggd2lkdGhGb3JUeXBlKFR5cGUgdHlwZSkK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAoraW5saW5lIFdpZHRoIGNhbm9uaWNhbFdp
ZHRoKFdpZHRoIHdpZHRoKQoreworICAgIHJldHVybiBzdGQ6Om1heChXaWR0aDMyLCB3aWR0aCk7
Cit9CisKK2lubGluZSBib29sIGlzQ2Fub25pY2FsV2lkdGgoV2lkdGggd2lkdGgpCit7CisgICAg
cmV0dXJuIHdpZHRoID49IFdpZHRoMzI7Cit9CisKK1R5cGUgYmVzdFR5cGUoQmFuayBiYW5rLCBX
aWR0aCB3aWR0aCk7CisKIGlubGluZSBXaWR0aCBjb25zZXJ2YXRpdmVXaWR0aChCYW5rIGJhbmsp
CiB7CiAgICAgcmV0dXJuIGJhbmsgPT0gR1AgPyBwb2ludGVyV2lkdGgoKSA6IFdpZHRoNjQ7CkBA
IC05Myw2ICsxMDUsMjAgQEAgaW5saW5lIFdpZHRoIHdpZHRoRm9yQnl0ZXModW5zaWduZWQgYnl0
ZQogICAgIH0KIH0KIAoraW5saW5lIHVpbnQ2NF90IG1hc2soV2lkdGggd2lkdGgpCit7CisgICAg
c3dpdGNoICh3aWR0aCkgeworICAgIGNhc2UgV2lkdGg4OgorICAgICAgICByZXR1cm4gMHgwMDAw
MDAwMDAwMDAwMGZmbGx1OworICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgcmV0dXJuIDB4MDAw
MDAwMDAwMDAwZmZmZmxsdTsKKyAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgIHJldHVybiAweDAw
MDAwMDAwZmZmZmZmZmZsbHU7CisgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICByZXR1cm4gMHhm
ZmZmZmZmZmZmZmZmZmZmbGx1OworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDcgQEAgdW5zaWduZWQg
QXJnOjpqc0hhc2goKSBjb25zdAogICAgIGNhc2UgUmVsQ29uZDoKICAgICBjYXNlIFJlc0NvbmQ6
CiAgICAgY2FzZSBEb3VibGVDb25kOgorICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICBjYXNlIFdp
ZHRoQXJnOgogICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb2Zmc2V0
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xODIsNiArMTgzLDkgQEAgdm9pZCBBcmc6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAgIG91dC5w
cmludChhc0RvdWJsZUNvbmRpdGlvbigpKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3Rh
dHVzQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzU3RhdHVzQ29uZGl0aW9uKCkpOworICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1
bXAoc3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI0MSw2ICsyNDUsOSBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAgICAgY2FzZSBBcmc6OkRvdWJs
ZUNvbmQ6CiAgICAgICAgIG91dC5wcmludCgiRG91YmxlQ29uZCIpOwogICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBcmc6OlN0YXR1c0NvbmQ6CisgICAgICAgIG91dC5wcmludCgiU3RhdHVzQ29u
ZCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OlNwZWNpYWw6CiAgICAgICAgIG91
dC5wcmludCgiU3BlY2lhbCIpOwogICAgICAgICByZXR1cm47CkBAIC0yODUsNiArMjkyLDkgQEAg
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZwogICAgIGNhc2UgQXJnOjpF
YXJseURlZjoKICAgICAgICAgb3V0LnByaW50KCJFYXJseURlZiIpOwogICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBcmc6OkVhcmx5WkRlZjoKKyAgICAgICAgb3V0LnByaW50KCJFYXJseVpEZWYi
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpTY3JhdGNoOgogICAgICAgICBvdXQu
cHJpbnQoIlNjcmF0Y2giKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHB1
YmxpYzoKICAgICAgICAgUmVsQ29uZCwKICAgICAgICAgUmVzQ29uZCwKICAgICAgICAgRG91Ymxl
Q29uZCwKKyAgICAgICAgU3RhdHVzQ29uZCwKICAgICAgICAgU3BlY2lhbCwKICAgICAgICAgV2lk
dGhBcmcKICAgICB9OwpAQCAtMTUxLDYgKzE1Miw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gYXMg
VXNlIGhhcyB1bmRlZmluZWQgYmVoYXZpb3I6IHRoZSB1c2UgbWF5IGhhcHBlbiBiZWZvcmUgdGhl
IGRlZiwgb3IgaXQgbWF5IGhhcHBlbiBhZnRlcgogICAgICAgICAvLyBpdC4KICAgICAgICAgRWFy
bHlEZWYsCisgICAgICAgICAgICAKKyAgICAgICAgRWFybHlaRGVmLAogCiAgICAgICAgIC8vIFNv
bWUgaW5zdHJ1Y3Rpb25zIG5lZWQgYSBzY3JhdGNoIHJlZ2lzdGVyLiBXZSBtb2RlbCB0aGlzIGJ5
IHNheWluZyB0aGF0IHRoZSB0ZW1wb3JhcnkgaXMKICAgICAgICAgLy8gZGVmaW5lZCBlYXJseSBh
bmQgdXNlZCBsYXRlLiBUaGlzIHJvbGUgaW1wbGllcyB0aGF0LgpAQCAtMTg2LDYgKzE4OSw3IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAg
ICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMjA2LDYgKzIxMCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAg
ICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFy
bHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjI4LDYgKzIzMyw3IEBAIHB1YmxpYzoKICAgICAgICAg
Y2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlE
ZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIHJvbGU7CiAg
ICAgICAgIGNhc2UgVXNlOgogICAgICAgICAgICAgcmV0dXJuIENvbGRVc2U7CkBAIC0yNTMsNiAr
MjU5LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgogICAgICAgICBjYXNl
IFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVm
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMjc0LDYgKzI4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBa
RGVmOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAg
ICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjk0LDYgKzMwMiw3IEBAIHB1Ymxp
YzoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6CiAgICAgICAgIGNh
c2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICBjYXNlIFNjcmF0
Y2g6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzE1LDYgKzMyNCw3
IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6
CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CkBAIC0zMzAsNiArMzQwLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAg
ICAgICAgIGNhc2UgTGF0ZVVzZToKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2Fz
ZSBFYXJseVpEZWY6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAgY2FzZSBMYXRlQ29s
ZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM1OCw2ICszNjksNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAg
ICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
NTMzLDYgKzU0NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
CisgICAgc3RhdGljIEFyZyBzdGF0dXNDb25kKE1hY3JvQXNzZW1ibGVyOjpTdGF0dXNDb25kaXRp
b24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fa2luZCA9IFN0YXR1c0NvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGNvbmRpdGlv
bjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBzdGF0aWMgQXJnIHNwZWNp
YWwoQWlyOjpTcGVjaWFsKiBzcGVjaWFsKQogICAgIHsKICAgICAgICAgQXJnIHJlc3VsdDsKQEAg
LTY1OCwxMiArNjc4LDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBEb3Vi
bGVDb25kOwogICAgIH0KIAorICAgIGJvb2wgaXNTdGF0dXNDb25kKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBraW5kKCkgPT0gU3RhdHVzQ29uZDsKKyAgICB9CisKICAgICBib29sIGlz
Q29uZGl0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CiAgICAg
ICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERv
dWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODUx
LDYgKzg3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNl
IFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKKyAgICAgICAgY2FzZSBTdGF0dXND
b25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CiAgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg3Miw2ICs4OTksNyBAQCBwdWJsaWM6CiAgICAgICAg
IGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJs
ZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgog
ICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICBjYXNlIEludmFsaWQ6CkBAIC0xMDU4LDYg
KzEwODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBS
ZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29u
ZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTc3LDYgKzEyMDYsMTIgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbj4obV9v
ZmZzZXQpOwogICAgIH0KICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6U3RhdHVzQ29uZGl0aW9u
IGFzU3RhdHVzQ29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1N0YXR1
c0NvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6U3Rh
dHVzQ29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorICAgIAogICAgIC8vIFRlbGxzIHlvdSBp
ZiB0aGUgQXJnIGlzIGludmVydGlibGUuIE9ubHkgY29uZGl0aW9uIGFyZ3VtZW50cyBhcmUgaW52
ZXJ0aWJsZSwgYW5kIGV2ZW4gZm9yIHRob3NlLCB0aGVyZQogICAgIC8vIGFyZSBhIGZldyBleGNl
cHRpb25zIC0gbm90YWJseSBPdmVyZmxvdyBhbmQgU2lnbmVkLgogICAgIGJvb2wgaXNJbnZlcnRp
YmxlKCkgY29uc3QKQEAgLTExODQsNiArMTIxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNo
IChraW5kKCkpIHsKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNv
bmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6
OmlzSW52ZXJ0aWJsZShhc1Jlc3VsdENvbmRpdGlvbigpKTsKQEAgLTEyMDQsNiArMTI0MCw4IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiByZXNDb25kKE1hY3JvQXNzZW1ibGVyOjppbnZl
cnQoYXNSZXN1bHRDb25kaXRpb24oKSkpOwogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAg
ICAgICAgICByZXR1cm4gZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0KGFzRG91Ymxl
Q29uZGl0aW9uKCkpKTsKKyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgorICAgICAgICAgICAgcmV0
dXJuIHN0YXR1c0NvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc1N0YXR1c0NvbmRpdGlvbigp
KSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM1LDYgKzM1LDE5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UKIAogY29uc3QgY2hhciogY29uc3QgQmFzaWNCbG9jazo6ZHVtcFByZWZpeCA9ICIjIjsK
IAordm9pZCBCYXNpY0Jsb2NrOjpzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayB0YXJnZXQp
Cit7CisgICAgbV9zdWNjZXNzb3JzLnJlc2l6ZSgxKTsKKyAgICBtX3N1Y2Nlc3NvcnNbMF0gPSB0
YXJnZXQ7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxv
Y2sgdGFrZW4sIEZyZXF1ZW50ZWRCbG9jayBub3RUYWtlbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMu
cmVzaXplKDIpOworICAgIG1fc3VjY2Vzc29yc1swXSA9IHRha2VuOworICAgIG1fc3VjY2Vzc29y
c1sxXSA9IG5vdFRha2VuOworfQorCiBib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJh
c2ljQmxvY2sqIGJsb2NrKQogewogICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywg
YmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Js
b2NrLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw5IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9z
dWNjZXNzb3JzOyB9CiAgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1f
c3VjY2Vzc29yczsgfQogCisgICAgdm9pZCBzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayk7
CisgICAgdm9pZCBzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jaywgRnJlcXVlbnRlZEJsb2Nr
KTsKKwogICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7IH0KICAgICBCYXNpY0Jsb2NrKiYg
c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCku
YmxvY2soKTsgfQogICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29y
TGlzdD4gc3VjY2Vzc29yQmxvY2tzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJs
b2NrSW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
QmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvQnViYmxl
U29ydC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChDb2RlICZjb2RlKQorICAg
IDogR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0KGNvZGUubV9ibG9ja3MpCit7Cit9CisKK0Jsb2Nr
SW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQoKQoreworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNl
dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxv
Y2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJpY0Jsb2NrSXNuZXJ0aW9uU2V0
LmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworY2xhc3MgSW5zZXJ0aW9uU2V0OworCit0eXBlZGVmIEdlbmVyaWNC
bG9ja0luc2VydGlvblNldDxCYXNpY0Jsb2NrPjo6QmxvY2tJbnNlcnRpb24gQmxvY2tJbnNlcnRp
b247CisKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0IDogcHVibGljIEdlbmVyaWNCbG9ja0luc2Vy
dGlvblNldDxCYXNpY0Jsb2NrPiB7CitwdWJsaWM6CisgICAgQmxvY2tJbnNlcnRpb25TZXQoQ29k
ZSYpOworICAgIH5CbG9ja0luc2VydGlvblNldCgpOworICAgIAorICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgZXZlbnR1YWxseSBpbXBsZW1lbnQgQjM6OkJsb2NrSW5zZXJ0aW9uU2V0J3Mgc3BsaXRG
b3J3YXJkKCkuCit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJEdW1wQXNKUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJEdW1wQXNKUy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRHVtcEFzSlMuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjQ1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQWlyRHVtcEFzSlMuaCIKLQotI2lmIEVOQUJM
RShCM19KSVQpCi0KLSNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlySW5zdElubGlu
ZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewot
Ci1uYW1lc3BhY2UgewotCi1DU3RyaW5nIHZhck5hbWVGb3JCbG9ja0F0SW5kZXgodW5zaWduZWQg
aW5kZXgpCi17Ci0gICAgcmV0dXJuIHRvQ1N0cmluZygiYmIiLCBpbmRleCk7Ci19Ci0KLUNTdHJp
bmcgdmFyTmFtZShCYXNpY0Jsb2NrKiBibG9jaykKLXsKLSAgICByZXR1cm4gdmFyTmFtZUZvckJs
b2NrQXRJbmRleChibG9jay0+aW5kZXgoKSk7Ci19Ci0KLUNTdHJpbmcgdmFyTmFtZUZvclN0YWNr
U2xvdEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIHRvQ1N0cmluZygic2xv
dCIsIGluZGV4KTsKLX0KLQotQ1N0cmluZyB2YXJOYW1lKFN0YWNrU2xvdCogc2xvdCkKLXsKLSAg
ICByZXR1cm4gdmFyTmFtZUZvclN0YWNrU2xvdEF0SW5kZXgoc2xvdC0+aW5kZXgoKSk7Ci19Ci0K
LUNTdHJpbmcgdmFyTmFtZShSZWcgcmVnKQotewotICAgIHJldHVybiB0b0NTdHJpbmcoIlJlZy4i
LCByZWcuZGVidWdOYW1lKCkpOwotfQotCi1DU3RyaW5nIHZhck5hbWVGb3JUbXBXaXRoQmFua0Fu
ZEluZGV4KEJhbmsgYmFuaywgdW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIHRvQ1N0cmlu
ZyhiYW5rID09IEZQID8gImYiIDogIiIsICJ0bXAiLCBpbmRleCk7Ci19Ci0KLUNTdHJpbmcgdmFy
TmFtZShUbXAgdG1wKQotewotICAgIGlmICh0bXAuaXNSZWcoKSkKLSAgICAgICAgcmV0dXJuIHZh
ck5hbWUodG1wLnJlZygpKTsKLSAgICByZXR1cm4gdmFyTmFtZUZvclRtcFdpdGhCYW5rQW5kSW5k
ZXgoQXJnKHRtcCkuYmFuaygpLCB0bXAudG1wSW5kZXgoKSk7Ci19Ci0KLX0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQotCi12b2lkIGR1bXBBc0pTKENvZGUmIGNvZGUsIFByaW50U3RyZWFtJiBvdXQp
Ci17Ci0gICAgb3V0LnByaW50bG4oImxldCBjb2RlID0gbmV3IENvZGUoKTsiKTsKLSAgICAKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29kZS5zaXplKCk7ICsraSkKLSAgICAgICAgb3V0
LnByaW50bG4oImxldCAiLCB2YXJOYW1lRm9yQmxvY2tBdEluZGV4KGkpLCAiID0gY29kZS5hZGRC
bG9jaygpOyIpOwotICAgIAotICAgIG91dC5wcmludGxuKCJsZXQgaGFzaDsiKTsKLQotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7ICsraSkgewot
ICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBjb2RlLnN0YWNrU2xvdHMoKVtpXTsKLSAgICAgICAg
aWYgKHNsb3QpIHsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCJsZXQgIiwgdmFyTmFtZShzbG90
KSwgIiA9IGNvZGUuYWRkU3RhY2tTbG90KCIsIHNsb3QtPmJ5dGVTaXplKCksICIsICIsIHNsb3Qt
PmtpbmQoKSwgIik7Iik7Ci0gICAgICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpCi0g
ICAgICAgICAgICAgICAgb3V0LnByaW50bG4odmFyTmFtZShzbG90KSwgIi5zZXRPZmZzZXRGcm9t
RlAoIiwgc2xvdC0+b2Zmc2V0RnJvbUZQKCksICIpOyIpOwotICAgICAgICAgICAgb3V0LnByaW50
bG4oImhhc2ggPSAiLCB2YXJOYW1lKHNsb3QpLCAiLmhhc2goKTsiKTsKLSAgICAgICAgICAgIG91
dC5wcmludGxuKCJpZiAoaGFzaCAhPSAiLCBzbG90LT5qc0hhc2goKSwgIikiKTsKLSAgICAgICAg
ICAgIG91dC5wcmludGxuKCIgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIGhhc2g6IFwiICsgaGFz
aCk7Iik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb3V0LnByaW50bG4oImNvZGUuYWRk
U3RhY2tTbG90KDEsIFNwaWxsKTsiKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yRWFjaEJhbmsoCi0g
ICAgICAgIFsmXSAoQmFuayBiYW5rKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBj
b2RlLm51bVRtcHMoYmFuayk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigK
LSAgICAgICAgICAgICAgICAgICAgImxldCAiLCB2YXJOYW1lRm9yVG1wV2l0aEJhbmtBbmRJbmRl
eChiYW5rLCBpKSwgIiA9IGNvZGUubmV3VG1wKCIsIGJhbmssICIpOyIpOwotICAgICAgICAgICAg
fQotICAgICAgICB9KTsKLSAgICAKLSAgICBvdXQucHJpbnRsbigibGV0IGluc3Q7Iik7Ci0gICAg
b3V0LnByaW50bG4oImxldCBhcmc7Iik7Ci0gICAgCi0gICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IGNvZGUpIHsKLSAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yIDogYmxv
Y2stPnN1Y2Nlc3NvcnMoKSkgewotICAgICAgICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAg
ICAgICAgdmFyTmFtZShibG9jayksICIuc3VjY2Vzc29ycy5wdXNoKG5ldyBGcmVxdWVudGVkQmxv
Y2soIiwKLSAgICAgICAgICAgICAgICB2YXJOYW1lKHN1Y2Nlc3Nvci5ibG9jaygpKSwgIiwgIiwg
c3VjY2Vzc29yLmZyZXF1ZW5jeSgpLCAiKSk7Iik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkp
Ci0gICAgICAgICAgICBvdXQucHJpbnRsbih2YXJOYW1lKGJsb2NrKSwgIi5wcmVkZWNlc3NvcnMu
cHVzaCgiLCB2YXJOYW1lKHByZWRlY2Vzc29yKSwgIik7Iik7Ci0gICAgICAgIAotICAgICAgICBm
b3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBkbyBzb21ldGhpbmcgZm9yIGZsYWdzLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjc1MQotICAgICAgICAgICAgb3V0LnByaW50
bG4oImluc3QgPSBuZXcgSW5zdCgiLCBpbnN0LmtpbmQub3Bjb2RlLCAiKTsiKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAgICAgICAgICAgICAgIFsmXSAo
QXJnJiBhcmcsIEFyZzo6Um9sZSwgQmFuaywgV2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChhcmcua2luZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpJbnZh
bGlkOgotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpUbXA6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBvdXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0ZVRtcCgiLCB2YXJOYW1lKGFyZy50
bXAoKSksICIpOyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkltbToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRlSW1tKCIsIGFy
Zy52YWx1ZSgpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpCaWdJbW06
Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiYXJnID0gQXJnLmNyZWF0ZUJpZ0ltbSgiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KGFyZy52YWx1ZSgpKSwgIiwgIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihhcmcudmFsdWUoKSA+
PiAzMiksICIpOyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkJpdEltbToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRlQml0SW1t
KCIsIGFyZy52YWx1ZSgpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpC
aXRJbW02NDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJhcmcgPSBBcmcuY3JlYXRlQml0SW1tNjQoIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihhcmcudmFsdWUoKSksICIs
ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oYXJn
LnZhbHVlKCkgPj4gMzIpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpB
ZGRyOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImFyZyA9IEFyZy5jcmVhdGVBZGRyKCIsIHZhck5hbWUoYXJnLmJhc2Uo
KSksICIsICIsIGFyZy5vZmZzZXQoKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6U3RhY2s6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiYXJnID0gQXJnLmNyZWF0ZVN0YWNrKCIsIHZhck5hbWUo
YXJnLnN0YWNrU2xvdCgpKSwgIiwgIiwgYXJnLm9mZnNldCgpLCAiKTsiKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0
LnByaW50bG4oImFyZyA9IEFyZy5jcmVhdGVDYWxsQXJnKCIsIGFyZy5vZmZzZXQoKSwgIik7Iik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6SW5kZXg6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBvdXQucHJpbnRsbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJnID0g
QXJnLmNyZWF0ZUluZGV4KCIsIHZhck5hbWUoYXJnLmJhc2UoKSksICIsICIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyTmFtZShhcmcuaW5kZXgoKSksICIsICIsIGFyZy5zY2FsZSgp
LCAiLCAiLCBhcmcub2Zmc2V0KCksICIpOyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OlJlbENvbmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiYXJnID0g
QXJnLmNyZWF0ZVJlbENvbmQoIiwgYXJnLmFzUmVsYXRpb25hbENvbmRpdGlvbigpLCAiKTsiKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpSZXNDb25kOgotICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50bG4oImFyZyA9IEFyZy5jcmVhdGVSZXNDb25kKCIsIGFyZy5hc1Jl
c3VsdENvbmRpdGlvbigpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpE
b3VibGVDb25kOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImFyZyA9IEFy
Zy5jcmVhdGVEb3VibGVDb25kKCIsIGFyZy5hc0RvdWJsZUNvbmRpdGlvbigpLCAiKTsiKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTcGVjaWFsOgotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50bG4oImFyZyA9IEFyZy5jcmVhdGVTcGVjaWFsKCk7Iik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGhBcmc6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBvdXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0ZVdpZHRoQXJnKCIsIGFyZy53aWR0aCgpLCAi
KTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRs
bigiaW5zdC5hcmdzLnB1c2goYXJnKTsiKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2gpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoaW5zdC5oYXNOb25BcmdFZmZlY3RzKCkpCi0gICAgICAgICAgICAgICAg
ICAgIG91dC5wcmludGxuKCJpbnN0LnBhdGNoSGFzTm9uQXJnRWZmZWN0cyA9IHRydWU7Iik7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImluc3QuZXh0cmFF
YXJseUNsb2JiZXJlZFJlZ3MgPSBuZXcgU2V0KCk7Iik7Ci0gICAgICAgICAgICAgICAgb3V0LnBy
aW50bG4oImluc3QuZXh0cmFDbG9iYmVyZWRSZWdzID0gbmV3IFNldCgpOyIpOwotICAgICAgICAg
ICAgICAgIGluc3QuZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAotICAgICAgICAg
ICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5w
cmludGxuKCJpbnN0LmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzLmFkZCgiLCB2YXJOYW1lKHJlZyks
ICIpOyIpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBpbnN0LmV4
dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2goCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoUmVn
IHJlZykgewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImluc3QuZXh0cmFD
bG9iYmVyZWRSZWdzLmFkZCgiLCB2YXJOYW1lKHJlZyksICIpOyIpOwotICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigi
aW5zdC5wYXRjaEFyZ0RhdGEgPSBbXTsiKTsKLSAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hB
cmcoCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoQXJnJiwgQXJnOjpSb2xlIHJvbGUsIEJhbmsg
YmFuaywgV2lkdGggd2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxu
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0LnBhdGNoQXJnRGF0YS5wdXNoKHty
b2xlOiBBcmcuIiwgcm9sZSwgIiwgdHlwZTogIiwgYmFuaywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiLCB3aWR0aDogIiwgd2lkdGgsICJ9KTsiKTsKLSAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbnN0Lmtp
bmQub3Bjb2RlID09IENDYWxsIHx8IGluc3Qua2luZC5vcGNvZGUgPT0gQ29sZENDYWxsKSB7Ci0g
ICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImluc3QuY0NhbGxUeXBlID0gIiwgaW5zdC5vcmln
aW4tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImluc3QuY0NhbGxBcmdU
eXBlcyA9IFtdOyIpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBp
bnN0Lm9yaWdpbi0+bnVtQ2hpbGRyZW4oKTsgKytpKQotICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnRsbigiaW5zdC5jQ2FsbEFyZ1R5cGVzLnB1c2goIiwgaW5zdC5vcmlnaW4tPmNoaWxkKGkp
LT50eXBlKCksICIpOyIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBvdXQucHJpbnRsbigiaGFzaCA9IGluc3QuaGFzaCgpOyIpOwotICAgICAgICAgICAgb3V0LnBy
aW50bG4oImlmIChoYXNoICE9ICIsIGluc3QuanNIYXNoKCksICIpIik7Ci0gICAgICAgICAgICBv
dXQucHJpbnRsbigiICAgIHRocm93IG5ldyBFcnJvcihcIkJhZCBoYXNoOiBcIiArIGhhc2gpOyIp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBvdXQucHJpbnRsbih2YXJOYW1lKGJsb2NrKSwg
Ii5hcHBlbmQoaW5zdCk7Iik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLX0gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCi0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRHVtcEFzSlMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckR1bXBBc0pTLmgJKHJldmlzaW9uIDIxMjk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRHVtcEFzSlMuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoQjNfSklUKQotCi0jaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKLQotY2xhc3MgQ29kZTsKLQotLy8gVGhpcyBpcyB1c2VkIGZvciBi
ZW5jaG1hcmtpbmcuIFZhcmlvdXMgb3BlcmF0aW9ucyBvbiBBaXIgYXJlIGludGVyZXN0aW5nIGZy
b20gYSBiZW5jaG1hcmtpbmcKLS8vIHN0YW5kcG9pbnQuIFdlIGNhbiB3cml0ZSBzb21lIEFpciBw
aGFzZXMgaW4gSlMgYW5kIHRoZW4gdXNlIHRoYXQgdG8gYmVuY2htYXJrIEpTLiBUaGUgYmVuY2ht
YXJrCi0vLyBpcyBjYWxsZWQgSlNBaXIsIGFuZCBpdCdzIGluIFBlcmZvcm1hbmNlVGVzdHMvSlNB
aXIuCi12b2lkIGR1bXBBc0pTKENvZGUmLCBQcmludFN0cmVhbSYpOwotCi19IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCi0KLSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUdyYXBoQ29sb3JpbmcuaCIKICNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNrLmgiCiAj
aW5jbHVkZSAiQWlyQ29kZS5oIgotI2luY2x1ZGUgIkFpckR1bXBBc0pTLmgiCiAjaW5jbHVkZSAi
QWlyRWxpbWluYXRlRGVhZENvZGUuaCIKICNpbmNsdWRlICJBaXJGaXhPYnZpb3VzU3BpbGxzLmgi
CiAjaW5jbHVkZSAiQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmgiCkBAIC03Myw2ICs3Miw4
IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKICAgICAgICAgZGF0YUxv
ZygiSW5pdGlhbCBhaXI6XG4iKTsKICAgICAgICAgZGF0YUxvZyhjb2RlKTsKICAgICB9CisgICAg
CisgICAgc2ltcGxpZnlDRkcoY29kZSk7CiAKICAgICBsb3dlck1hY3Jvcyhjb2RlKTsKIApAQCAt
MTA3LDIzICsxMDgsMTEgQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQog
ICAgIC8vIGRvZXMgdGhpbmdzIGxpa2UgaWRlbnRpZnkgd2hpY2ggY2FsbGVlLXNhdmVzIHdlJ3Jl
IHVzaW5nIGFuZCBzYXZlcyB0aGVtLgogICAgIGhhbmRsZUNhbGxlZVNhdmVzKGNvZGUpOwogICAg
IAotICAgIGlmIChPcHRpb25zOjpkdW1wQWlyQXNKU0JlZm9yZUFsbG9jYXRlU3RhY2soKSkgewot
ICAgICAgICBkYXRhTG9nKCJEdW1waW5nIEFpciBhcyBKUyBiZWZvcmUgYWxsb2NhdGVTdGFjazpc
biIpOwotICAgICAgICBkdW1wQXNKUyhjb2RlLCBXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICBk
YXRhTG9nKCJBaXIgaGFzaDogIiwgY29kZS5qc0hhc2goKSwgIlxuIik7Ci0gICAgfQotCiAgICAg
Ly8gVGhpcyB0dXJucyBhbGwgU3RhY2sgYW5kIENhbGxBcmcgQXJncyBpbnRvIEFkZHIgYXJncyB0
aGF0IHVzZSB0aGUgZnJhbWUgcG9pbnRlci4gSXQgZG9lcwogICAgIC8vIHRoaXMgYnkgZmlyc3Qt
Zml0IGFsbG9jYXRpbmcgc3RhY2sgc2xvdHMuIEl0IHNob3VsZCBiZSBwcmV0dHkgZGFybiBjbG9z
ZSB0byBvcHRpbWFsLCBzbyB3ZQogICAgIC8vIHNob3VsZG4ndCBoYXZlIHRvIHdvcnJ5IGFib3V0
IHRoaXMgdmVyeSBtdWNoLgogICAgIGFsbG9jYXRlU3RhY2soY29kZSk7CiAgICAgCi0gICAgaWYg
KE9wdGlvbnM6OmR1bXBBaXJBZnRlckFsbG9jYXRlU3RhY2soKSkgewotICAgICAgICBkYXRhTG9n
KCJEdW1waW5nIEFpciBhZnRlciBhbGxvY2F0ZVN0YWNrOlxuIik7Ci0gICAgICAgIGRhdGFMb2co
Y29kZSk7Ci0gICAgICAgIGRhdGFMb2coIkFpciBoYXNoOiAiLCBjb2RlLmpzSGFzaCgpLCAiXG4i
KTsKLSAgICB9Ci0KICAgICAvLyBJZiB3ZSBjb2FsZXNjZWQgbW92ZXMgdGhlbiB3ZSBjYW4gdW5i
cmVhayBjcml0aWNhbCBlZGdlcy4gVGhpcyBpcyB0aGUgbWFpbiByZWFzb24gZm9yIHRoaXMKICAg
ICAvLyBwaGFzZS4KICAgICBzaW1wbGlmeUNGRyhjb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMjEyOTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTExNyw2ICsxMTcsNyBAQCBBZGQzMiBVOkc6MzIsIFVaRDpHOjMyCiAgICAgeDg2OiBJbW0s
IEluZGV4CiAgICAgSW1tLCBUbXAKICAgICB4ODY6IEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgs
IFRtcAogICAgIHg4NjogVG1wLCBBZGRyCiAgICAgeDg2OiBUbXAsIEluZGV4CiAKQEAgLTEzNSw5
ICsxMzYsMTIgQEAgeDg2OiBBZGQxNiBVOkc6MTYsIFVEOkc6MTYKIDY0OiBBZGQ2NCBVOkc6NjQs
IFVEOkc6NjQKICAgICBUbXAsIFRtcAogICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0s
IEluZGV4CiAgICAgSW1tLCBUbXAKICAgICB4ODY6IEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgs
IFRtcAogICAgIHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4CiAKIDY0OiBBZGQ2
NCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAgSW1tLCBUbXAsIFRtcApAQCAtMTY2LDkgKzE3
MCwxMiBAQCB4ODY6IEFkZEZsb2F0IFU6RjozMiwgVUQ6RjozMgogU3ViMzIgVTpHOjMyLCBVWkQ6
RzozMgogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5k
ZXgKICAgICBJbW0sIFRtcAogICAgIHg4NjogQWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1w
CiAgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwgSW5kZXgKIAogYXJtNjQ6IFN1YjMy
IFU6RzozMiwgVTpHOjMyLCBEOkc6MzIKICAgICBUbXAsIFRtcCwgVG1wCkBAIC0xNzYsOSArMTgz
LDEyIEBAIGFybTY0OiBTdWIzMiBVOkc6MzIsIFU6RzozMiwgRDpHOjMyCiA2NDogU3ViNjQgVTpH
OjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKICAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4Njog
SW1tLCBJbmRleAogICAgIEltbSwgVG1wCiAgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IElu
ZGV4LCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgorICAgIHg4NjogVG1wLCBJbmRleAogCiBhcm02
NDogU3ViNjQgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBUbXAKQEAgLTIw
NCw5ICsyMTQsMTIgQEAgeDg2OiBTdWJGbG9hdCBVOkY6MzIsIFVEOkY6MzIKIE5lZzMyIFVaRDpH
OjMyCiAgICAgVG1wCiAgICAgeDg2OiBBZGRyCisgICAgeDg2OiBJbmRleAogCiA2NDogTmVnNjQg
VUQ6Rzo2NAogICAgIFRtcAorICAgIHg4NjogQWRkcgorICAgIHg4NjogSW5kZXgKIAogYXJtNjQ6
IE5lZ2F0ZURvdWJsZSBVOkY6NjQsIEQ6Rjo2NAogICAgIFRtcCwgVG1wCkBAIC0zMzAsOCArMzQz
LDExIEBAIEFuZDMyIFU6RzozMiwgVVpEOkc6MzIKICAgICBUbXAsIFRtcAogICAgIHg4NjogSW1t
LCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgorICAgIHg4NjogVG1wLCBJbmRleAogICAgIHg4Njog
QWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1wCiAgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4
ODY6IEltbSwgSW5kZXgKIAogNjQ6IEFuZDY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBU
bXAsIFRtcCwgVG1wCkBAIC0zMzksNyArMzU1LDEzIEBAIEFuZDMyIFU6RzozMiwgVVpEOkc6MzIK
IAogeDg2XzY0OiBBbmQ2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRtcAotICAgIHg4Njog
SW1tLCBUbXAKKyAgICBJbW0sIFRtcAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAg
ICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRt
cAogCiBBbmREb3VibGUgVTpGOjY0LCBVOkY6NjQsIEQ6Rjo2NAogICAgIFRtcCwgVG1wLCBUbXAK
QEAgLTQ1OSw4ICs0ODEsMTEgQEAgT3IzMiBVOkc6MzIsIFVaRDpHOjMyCiAgICAgVG1wLCBUbXAK
ICAgICB4ODY6IEltbSwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwgSW5k
ZXgKICAgICB4ODY6IEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcAogICAgIHg4NjogSW1t
LCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CiAKIDY0OiBPcjY0IFU6Rzo2NCwgVTpHOjY0LCBE
Okc6NjQKICAgICBUbXAsIFRtcCwgVG1wCkBAIC00NjksNiArNDk0LDEyIEBAIE9yMzIgVTpHOjMy
LCBVWkQ6RzozMgogNjQ6IE9yNjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKICAgICB4
ODY6IEltbSwgVG1wCisgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKyAg
ICB4ODY6IFRtcCwgQWRkcgorICAgIHg4NjogVG1wLCBJbmRleAorICAgIHg4NjogQWRkciwgVG1w
CisgICAgeDg2OiBJbmRleCwgVG1wCiAKIFhvcjMyIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCiAg
ICAgVG1wLCBUbXAsIFRtcApAQCAtNDgwLDggKzUxMSwxMSBAQCBYb3IzMiBVOkc6MzIsIFVaRDpH
OjMyCiAgICAgVG1wLCBUbXAKICAgICB4ODY6IEltbSwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIK
KyAgICB4ODY6IFRtcCwgSW5kZXgKICAgICB4ODY6IEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgs
IFRtcAogICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CiAKIDY0OiBYb3I2
NCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcApAQCAtNDkwLDYgKzUy
NCwxMSBAQCBYb3IzMiBVOkc6MzIsIFVaRDpHOjMyCiA2NDogWG9yNjQgVTpHOjY0LCBVRDpHOjY0
CiAgICAgVG1wLCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgorICAgIHg4NjogVG1wLCBJbmRleAor
ICAgIHg4NjogQWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1wCisgICAgeDg2OiBJbW0sIEFk
ZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKICAgICB4ODY6IEltbSwgVG1wCiAKIGFybTY0OiBOb3Qz
MiBVOkc6MzIsIFpEOkc6MzIKQEAgLTQ5OCwxMyArNTM3LDE1IEBAIGFybTY0OiBOb3QzMiBVOkc6
MzIsIFpEOkc6MzIKIHg4NjogTm90MzIgVVpEOkc6MzIKICAgICBUbXAKICAgICBBZGRyCisgICAg
SW5kZXgKIAogYXJtNjQ6IE5vdDY0IFU6Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAKIAoteDg2
OiBOb3Q2NCBVRDpHOjY0Cit4ODZfNjQ6IE5vdDY0IFVEOkc6NjQKICAgICBUbXAKICAgICBBZGRy
CisgICAgSW5kZXgKIAogYXJtNjQ6IEFic0RvdWJsZSBVOkY6NjQsIEQ6Rjo2NAogICAgIFRtcCwg
VG1wCkBAIC02NjgsMjggKzcwOSwzODAgQEAgTG9hZDggVTpHOjgsIFpEOkc6MzIKICAgICBBZGRy
LCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3E4IFU6Rzo4LCBaRDpHOjMyCisgICAgQWRk
ciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBTdG9yZTggVTpHOjgsIEQ6Rzo4CiAgICAgVG1wLCBJ
bmRleAogICAgIFRtcCwgQWRkcgogICAgIHg4NjogSW1tLCBJbmRleAogICAgIHg4NjogSW1tLCBB
ZGRyCiAKK1N0b3JlUmVsOCBVOkc6OCwgRDpHOjgKKyAgICBUbXAsIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKwogTG9hZDhTaWdu
ZWRFeHRlbmRUbzMyIFU6Rzo4LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRt
cAogCitMb2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIgVTpHOjgsIFpEOkc6MzIKKyAgICBBZGRyLCBU
bXAKKyAgICBJbmRleCwgVG1wCisKIExvYWQxNiBVOkc6MTYsIFpEOkc6MzIKICAgICBBZGRyLCBU
bXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3ExNiBVOkc6MTYsIFpEOkc6MzIKKyAgICBBZGRy
LCBUbXAKKyAgICBJbmRleCwgVG1wCisKIExvYWQxNlNpZ25lZEV4dGVuZFRvMzIgVTpHOjE2LCBa
RDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxMTZTaWduZWRF
eHRlbmRUbzMyIFU6RzoxNiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAK
KwogU3RvcmUxNiBVOkc6MTYsIEQ6RzoxNgogICAgIFRtcCwgSW5kZXgKICAgICBUbXAsIEFkZHIK
IAorU3RvcmVBY3ExNiBVOkc6MTYsIEQ6RzoxNgorICAgIFRtcCwgSW5kZXgKKyAgICBUbXAsIEFk
ZHIKKworTG9hZEFjcTMyIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgVG1wCisgICAgQWRkciwg
VG1wCisgICAgSW5kZXgsIFRtcAorCitTdG9yZVJlbDMyIFU6RzozMiwgWkQ6RzozMgorICAgIFRt
cCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKyAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1t
LCBJbmRleAorCis2NDogTG9hZEFjcTY0IFU6Rzo2NCwgWkQ6Rzo2NAorICAgIFRtcCwgVG1wCisg
ICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCis2NDogU3RvcmVSZWw2NCBVOkc6NjQsIFpE
Okc6NjQKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIK
KyAgICB4ODY6IEltbSwgSW5kZXgKKworIyBUaGUgZmlyc3Qgb3BlcmFuZCBpcyByYXguCit4ODY6
IEF0b21pY1N0cm9uZ0NBUzggVTpHOjMyLCBVRDpHOjgsIFU6Rzo4LCBVRDpHOjgsIFpEOkc6OAor
ICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAgU3RhdHVzQ29uZCwgVG1w
KiwgVG1wLCBJbmRleCwgVG1wCisKK3g4NjogQXRvbWljU3Ryb25nQ0FTMTYgVTpHOjMyLCBVRDpH
OjE2LCBVOkc6MzIsIFVEOkc6MTYsIFpEOkc6OAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwg
QWRkciwgVG1wCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRleCwgVG1wCisKK3g4Njog
QXRvbWljU3Ryb25nQ0FTMzIgVTpHOjMyLCBVRDpHOjMyLCBVOkc6MzIsIFVEOkc6MzIsIFpEOkc6
OAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkciwgVG1wCisgICAgU3RhdHVzQ29uZCwg
VG1wKiwgVG1wLCBJbmRleCwgVG1wCisKK3g4Nl82NDogQXRvbWljU3Ryb25nQ0FTNjQgVTpHOjMy
LCBVRDpHOjY0LCBVOkc6NjQsIFVEOkc6NjQsIFpEOkc6OAorICAgIFN0YXR1c0NvbmQsIFRtcCos
IFRtcCwgQWRkciwgVG1wCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRleCwgVG1wCisK
K3g4NjogQXRvbWljU3Ryb25nQ0FTOCBVRDpHOjgsIFU6Rzo4LCBVRDpHOjgKKyAgICBUbXAqLCBU
bXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljU3Ryb25nQ0FTMTYg
VUQ6RzoxNiwgVTpHOjMyLCBVRDpHOjE2CisgICAgVG1wKiwgVG1wLCBBZGRyCisgICAgVG1wKiwg
VG1wLCBJbmRleAorCit4ODY6IEF0b21pY1N0cm9uZ0NBUzMyIFVEOkc6MzIsIFU6RzozMiwgVUQ6
RzozMgorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgKKworeDg2XzY0
OiBBdG9taWNTdHJvbmdDQVM2NCBVRDpHOjY0LCBVOkc6NjQsIFVEOkc6NjQKKyAgICBUbXAqLCBU
bXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNoQXRvbWljU3Ryb25n
Q0FTOCBVOkc6MzIsIFVEOkc6OCwgVTpHOjgsIFVEOkc6OCAvYnJhbmNoCisgICAgU3RhdHVzQ29u
ZCwgVG1wKiwgVG1wLCBBZGRyCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRleAorCit4
ODY6IEJyYW5jaEF0b21pY1N0cm9uZ0NBUzE2IFU6RzozMiwgVUQ6RzoxNiwgVTpHOjMyLCBVRDpH
OjE2IC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIKKyAgICBTdGF0dXND
b25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIgVTpH
OjMyLCBVRDpHOjMyLCBVOkc6MzIsIFVEOkc6MzIgL2JyYW5jaAorICAgIFN0YXR1c0NvbmQsIFRt
cCosIFRtcCwgQWRkcgorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgKKworeDg2XzY0
OiBCcmFuY2hBdG9taWNTdHJvbmdDQVM2NCBVOkc6MzIsIFVEOkc6NjQsIFU6Rzo2NCwgVUQ6Rzo2
NCAvYnJhbmNoCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyCisgICAgU3RhdHVzQ29u
ZCwgVG1wKiwgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FkZDggVTpHOjgsIFVEOkc6OAorICAg
IEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4
CisKK3g4NjogQXRvbWljQWRkMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAg
SW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNB
ZGQzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY0FkZDY0IFU6Rzo2NCwg
VUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljU3ViOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
OiBBdG9taWNTdWIxNiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIElu
ZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1N1YjMyIFU6
RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljU3ViNjQgVTpHOjY0LCBVRDpHOjY0
CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwg
SW5kZXgKKworeDg2OiBBdG9taWNBbmQ4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAg
ICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21p
Y0FuZDE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAg
ICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljQW5kMzIgVTpHOjMyLCBV
RDpHOjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAg
IFRtcCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNBbmQ2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJ
bW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAor
Cit4ODY6IEF0b21pY09yOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJ
bmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNPcjE2IFU6
RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljT3IzMiBVOkc6MzIsIFVEOkc6MzIKKyAg
ICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCit4ODZfNjQ6IEF0b21pY09yNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisg
ICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9t
aWNYb3I4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hvcjE2IFU6RzoxNiwgVUQ6
RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBU
bXAsIEluZGV4CisKK3g4NjogQXRvbWljWG9yMzIgVTpHOjMyLCBVRDpHOjMyCisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
XzY0OiBBdG9taWNYb3I2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0s
IEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY05lZzgg
VUQ6Rzo4CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogQXRvbWljTmVnMTYgVUQ6RzoxNgor
ICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY05lZzMyIFVEOkc6MzIKKyAgICBBZGRy
CisgICAgSW5kZXgKKworeDg2XzY0OiBBdG9taWNOZWc2NCBVRDpHOjY0CisgICAgQWRkcgorICAg
IEluZGV4CisKK3g4NjogQXRvbWljTm90OCBVRDpHOjgKKyAgICBBZGRyCisgICAgSW5kZXgKKwor
eDg2OiBBdG9taWNOb3QxNiBVRDpHOjE2CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogQXRv
bWljTm90MzIgVUQ6RzozMgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODZfNjQ6IEF0b21pY05v
dDY0IFVEOkc6NjQKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNYY2hnQWRkOCBV
RDpHOjgsIFVEOkc6OAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9t
aWNYY2hnQWRkMTYgVUQ6RzoxNiwgVUQ6RzoxNgorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5k
ZXgKKworeDg2OiBBdG9taWNYY2hnQWRkMzIgVUQ6RzozMiwgVUQ6RzozMgorICAgIFRtcCwgQWRk
cgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNYY2hnQWRkNjQgVUQ6Rzo2NCwgVUQ6
Rzo2NAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNYY2hnOCBV
RDpHOjgsIFVEOkc6OAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9t
aWNYY2hnMTYgVUQ6RzoxNiwgVUQ6RzoxNgorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgK
KworeDg2OiBBdG9taWNYY2hnMzIgVUQ6RzozMiwgVUQ6RzozMgorICAgIFRtcCwgQWRkcgorICAg
IFRtcCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNYY2hnNjQgVUQ6Rzo2NCwgVUQ6Rzo2NAorICAg
IFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworYXJtNjQ6IExvYWRMaW5rOCBVOkc6OCwgWkQ6
Rzo4CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmtBY3E4
IFU6Rzo4LCBaRDpHOjgKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKKyMgU3VwZXIg
Y29uZnVzaW5nIGZhY3Q6IHRoaXMgcmV0dXJucyAwIHRvIG1lYW4gc3VjY2VzcywgMSB0byBtZWFu
IGZhaWx1cmUuCithcm02NDogU3RvcmVDb25kOCBVOkc6OCwgRDpHOjgsIEVaRDpHOjgKKyAgICBU
bXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kUmVs
OCBVOkc6OCwgRDpHOjgsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5k
ZXgsIFRtcAorCithcm02NDogTG9hZExpbmsxNiBVOkc6MTYsIFpEOkc6MTYKKyAgICBBZGRyLCBU
bXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTE2IFU6RzoxNiwgWkQ6Rzox
NgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZDE2IFU6
RzoxNiwgRDpHOjE2LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4
LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDE2IFU6RzoxNiwgRDpHOjE2LCBFWkQ6Rzo4Cisg
ICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5r
MzIgVTpHOjMyLCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02
NDogTG9hZExpbmtBY3EzMiBVOkc6MzIsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRl
eCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQzMiBVOkc6MzIsIEQ6RzozMiwgRVpEOkc6OAorICAg
IFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmRS
ZWwzMiBVOkc6MzIsIEQ6RzozMiwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1w
LCBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGluazY0IFU6Rzo2NCwgWkQ6Rzo2NAorICAgIEFk
ZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rQWNxNjQgVTpHOjY0LCBa
RDpHOjY0CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25k
NjQgVTpHOjY0LCBEOkc6NjQsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwg
SW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kUmVsNjQgVTpHOjY0LCBEOkc6NjQsIEVaRDpH
OjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogRGVw
ZW5kMzIgVTpHOjMyLCBEOkc6MzIKKyAgICBUbXAsIFRtcAorCithcm02NDogRGVwZW5kNjQgVTpH
OjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcAorCiBDb21wYXJlMzIgVTpHOjMyLCBVOkc6MzIsIFU6
RzozMiwgWkQ6RzozMgogICAgIFJlbENvbmQsIFRtcCwgVG1wLCBUbXAKICAgICBSZWxDb25kLCBU
bXAsIEltbSwgVG1wCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGlt
aXplQmxvY2tPcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xNzcsNiArMTc3LDEwIEBAIHZvaWQgb3B0aW1pemVCbG9ja09yZGVyKENv
ZGUmIGNvZGUpCiAgICAgICAgIGNhc2UgQnJhbmNoU3ViNjQ6CiAgICAgICAgIGNhc2UgQnJhbmNo
TmVnMzI6CiAgICAgICAgIGNhc2UgQnJhbmNoTmVnNjQ6CisgICAgICAgIGNhc2UgQnJhbmNoQXRv
bWljU3Ryb25nQ0FTODoKKyAgICAgICAgY2FzZSBCcmFuY2hBdG9taWNTdHJvbmdDQVMxNjoKKyAg
ICAgICAgY2FzZSBCcmFuY2hBdG9taWNTdHJvbmdDQVMzMjoKKyAgICAgICAgY2FzZSBCcmFuY2hB
dG9taWNTdHJvbmdDQVM2NDoKICAgICAgICAgICAgIGlmIChjb2RlLmZpbmROZXh0QmxvY2soYmxv
Y2spID09IGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSAmJiBicmFuY2guYXJnc1swXS5pc0ludmVy
dGlibGUoKSkgewogICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChibG9jay0+c3VjY2Vzc29yKDAp
LCBibG9jay0+c3VjY2Vzc29yKDEpKTsKICAgICAgICAgICAgICAgICBicmFuY2guYXJnc1swXSA9
IGJyYW5jaC5hcmdzWzBdLmludmVydGVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgdm9pZCBwYWRJbnRlcmZlcmVuY2UoQ29k
ZSYgY29kZSkKICAgICAgICAgICAgICAgICBbJl0gKEFyZyYsIEFyZzo6Um9sZSByb2xlLCBCYW5r
LCBXaWR0aCkgewogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgorICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6RWFybHlaRGVmOgogICAgICAgICAgICAgICAgICAgICAgICAgaGFzRWFybHlEZWYgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpMYXRlVXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTUsNiArMTU1LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29k
ZSkKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkxhdGVDb2xkVXNlOgogICAgICAgICAg
ICAgICAgICAgICBjYXNlIEFyZzo6U2NyYXRjaDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OkVhcmx5RGVmOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlaRGVmOgog
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogY29kZS5yZWdzSW5Qcmlvcml0
eU9yZGVyKGJhbmspKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZv
cmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMjEyOTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSwxNCArNTEsNDkgQEAgY2xhc3MgQXJnCiAgICAgICAgIEBiYW5rID0g
YmFuawogICAgICAgICBAd2lkdGggPSB3aWR0aAogICAgIGVuZAotCi0gICAgZGVmIHdpZHRoQ29k
ZQorICAgIAorICAgIGRlZiBzZWxmLndpZHRoQ29kZSh3aWR0aCkKICAgICAgICAgaWYgd2lkdGgg
PT0gIlB0ciIKICAgICAgICAgICAgICJwb2ludGVyV2lkdGgoKSIKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgIldpZHRoI3t3aWR0aH0iCiAgICAgICAgIGVuZAogICAgIGVuZAorCisgICAgZGVm
IHdpZHRoQ29kZQorICAgICAgICBBcmcud2lkdGhDb2RlKHdpZHRoKQorICAgIGVuZAorICAgIAor
ICAgIGRlZiBzZWxmLnJvbGVDb2RlKHJvbGUpCisgICAgICAgIGNhc2Ugcm9sZQorICAgICAgICB3
aGVuICJVIgorICAgICAgICAgICAgIlVzZSIKKyAgICAgICAgd2hlbiAiRCIKKyAgICAgICAgICAg
ICJEZWYiCisgICAgICAgIHdoZW4gIlpEIgorICAgICAgICAgICAgIlpEZWYiCisgICAgICAgIHdo
ZW4gIlVEIgorICAgICAgICAgICAgIlVzZURlZiIKKyAgICAgICAgd2hlbiAiVVpEIgorICAgICAg
ICAgICAgIlVzZVpEZWYiCisgICAgICAgIHdoZW4gIlVBIgorICAgICAgICAgICAgIlVzZUFkZHIi
CisgICAgICAgIHdoZW4gIlMiCisgICAgICAgICAgICAiU2NyYXRjaCIKKyAgICAgICAgd2hlbiAi
RUQiCisgICAgICAgICAgICAiRWFybHlEZWYiCisgICAgICAgIHdoZW4gIkVaRCIKKyAgICAgICAg
ICAgICJFYXJseVpEZWYiCisgICAgICAgIHdoZW4gIkxVIgorICAgICAgICAgICAgIkxhdGVVc2Ui
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVuZAorICAgIGVuZAor
ICAgIAorICAgIGRlZiByb2xlQ29kZQorICAgICAgICBBcmcucm9sZUNvZGUocm9sZSkKKyAgICBl
bmQKIGVuZAogCiBjbGFzcyBPdmVybG9hZApAQCAtMTgyLDcgKzIxNyw3IEBAIGRlZiBsZXgoc3Ry
LCBmaWxlTmFtZSkKIGVuZAogCiBkZWYgaXNSb2xlKHRva2VuKQotICAgIHRva2VuID1+IC9cQSgo
VSl8KEQpfChVRCl8KFpEKXwoVVpEKXwoVUEpfChTKSlcWi8KKyAgICB0b2tlbiA9fiAvXEEoKFUp
fChEKXwoVUQpfChaRCl8KFVaRCl8KFVBKXwoUyl8KEVEKXwoRVpEKXwoTFUpKVxaLwogZW5kCiAK
IGRlZiBpc0dGKHRva2VuKQpAQCAtMTkwLDcgKzIyNSw3IEBAIGRlZiBpc0dGKHRva2VuKQogZW5k
CiAKIGRlZiBpc0tpbmQodG9rZW4pCi0gICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJ
bW0pfChCaXRJbW0pfChCaXRJbW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25k
KXwoRG91YmxlQ29uZCkpXFovCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJbW0p
fChCaXRJbW0pfChCaXRJbW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwo
RG91YmxlQ29uZCl8KFN0YXR1c0NvbmQpKVxaLwogZW5kCiAKIGRlZiBpc0FyY2godG9rZW4pCkBA
IC0yNjQsNyArMjk5LDcgQEAgY2xhc3MgUGFyc2VyCiAKICAgICBkZWYgY29uc3VtZUtpbmQKICAg
ICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCi0gICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVk
IGtpbmQgKEltbSwgQmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0LCBUbXAsIEFkZHIsIEluZGV4LCBS
ZWxDb25kLCBSZXNDb25kLCBvciBEb3VibGVDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQor
ICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBC
aXRJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgRG91YmxlQ29uZCwg
b3IgU3RhdHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKICAgICAgICAgYWR2YW5jZQog
ICAgICAgICByZXN1bHQKICAgICBlbmQKQEAgLTYzNCwyOCArNjY5LDcgQEAgd3JpdGVIKCJPcGNv
ZGVVdGlscyIpIHsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJl
LmVhY2hfd2l0aF9pbmRleCB7CiAgICAgICAgICAgICAgICAgfCBhcmcsIGluZGV4IHwKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByb2xlID0gbmlsCi0gICAgICAgICAgICAgICAg
Y2FzZSBhcmcucm9sZQotICAgICAgICAgICAgICAgIHdoZW4gIlUiCi0gICAgICAgICAgICAgICAg
ICAgIHJvbGUgPSAiVXNlIgotICAgICAgICAgICAgICAgIHdoZW4gIkQiCi0gICAgICAgICAgICAg
ICAgICAgIHJvbGUgPSAiRGVmIgotICAgICAgICAgICAgICAgIHdoZW4gIlpEIgotICAgICAgICAg
ICAgICAgICAgICByb2xlID0gIlpEZWYiCi0gICAgICAgICAgICAgICAgd2hlbiAiVUQiCi0gICAg
ICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlRGVmIgotICAgICAgICAgICAgICAgIHdoZW4gIlVa
RCIKLSAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VaRGVmIgotICAgICAgICAgICAgICAg
IHdoZW4gIlVBIgotICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZUFkZHIiCi0gICAgICAg
ICAgICAgICAgd2hlbiAiUyIKLSAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJTY3JhdGNoIgot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAg
ICAgICAgICBlbmQKLQotICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZnVuY3RvcihhcmdzWyN7
aW5kZXh9XSwgQXJnOjoje3JvbGV9LCAje2FyZy5iYW5rfVAsICN7YXJnLndpZHRoQ29kZX0pOyIK
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6
I3thcmcucm9sZUNvZGV9LCAje2FyZy5iYW5rfVAsICN7YXJnLndpZHRoQ29kZX0pOyIKICAgICAg
ICAgICAgIH0KICAgICAgICAgZW5kCiAgICAgfQpAQCAtODE5LDYgKzgzMyw3IEBAIHdyaXRlSCgi
T3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCiAgICAg
ICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKICAgICAgICAgICAgICAgICB3aGVuICJEb3VibGVD
b25kIgorICAgICAgICAgICAgICAgIHdoZW4gIlN0YXR1c0NvbmQiCiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICByYWlzZSAiVW5leHBlY3RlZCBraW5kOiAje2tpbmQu
bmFtZX0iCiAgICAgICAgICAgICAgICAgZW5kCkBAIC0xMTA1LDYgKzExMjAsOCBAQCB3cml0ZUgo
Ik9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJn
c1sje2luZGV4fV0uYXNSZXN1bHRDb25kaXRpb24oKSIKICAgICAgICAgICAgICAgICB3aGVuICJE
b3VibGVDb25kIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9
XS5hc0RvdWJsZUNvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIHdoZW4gIlN0YXR1c0NvbmQi
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzU3RhdHVz
Q29uZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICB9CiAKQEAgLTEx
NDgsMjcgKzExNjUsNyBAQCBGaWxlLm9wZW4oIkpTQWlyX29wY29kZS5qcyIsICJ3IikgewogICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9
OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCiAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0
dXJlLmVhY2hfd2l0aF9pbmRleCB7CiAgICAgICAgICAgICAgICAgICAgIHwgYXJnLCBpbmRleCB8
Ci0gICAgICAgICAgICAgICAgICAgIHJvbGUgPSBuaWwKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBhcmcucm9sZQotICAgICAgICAgICAgICAgICAgICB3aGVuICJVIgotICAgICAgICAgICAgICAg
ICAgICAgICAgcm9sZSA9ICJVc2UiCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gIkQiCi0gICAg
ICAgICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIKLSAgICAgICAgICAgICAgICAgICAgd2hl
biAiWkQiCi0gICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gIlpEZWYiCi0gICAgICAgICAg
ICAgICAgICAgIHdoZW4gIlVEIgotICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VE
ZWYiCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gIlVaRCIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJvbGUgPSAiVXNlWkRlZiIKLSAgICAgICAgICAgICAgICAgICAgd2hlbiAiVUEiCi0gICAg
ICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZUFkZHIiCi0gICAgICAgICAgICAgICAgICAg
IHdoZW4gIlMiCi0gICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gIlNjcmF0Y2giCi0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAg
ICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJpbnN0LnZpc2l0QXJnKCN7aW5kZXh9LCBmdW5jLCBBcmcuI3tyb2xl
fSwgI3thcmcuYmFua31QLCAje2FyZy53aWR0aH0pOyIKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJpbnN0LnZpc2l0QXJnKCN7aW5kZXh9LCBmdW5jLCBBcmcuI3thcmcucm9sZUNvZGV9
LCAje2FyZy5iYW5rfVAsICN7YXJnLndpZHRofSk7IgogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEzLDkgKzQxMyw2IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYo
Ym9vbCwgZHVtcE1vZHVsZUxvYWRpbmdTdGF0ZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYoYm9vbCwgZXhwb3NlSW50ZXJuYWxNb2R1bGVMb2FkZXIsIGZhbHNlLCBOb3JtYWwsICJl
eHBvc2UgdGhlIGludGVybmFsIG1vZHVsZSBsb2FkZXIgb2JqZWN0IHRvIHRoZSBnbG9iYWwgc3Bh
Y2UgZm9yIGRlYnVnZ2luZyIpIFwKICAgICBcCi0gICAgdihib29sLCBkdW1wQWlyQXNKU0JlZm9y
ZUFsbG9jYXRlU3RhY2ssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIGR1
bXBBaXJBZnRlckFsbG9jYXRlU3RhY2ssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICBc
CiAgICAgdihib29sLCB1c2VTdXBlclNhbXBsZXIsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICBcCiAgICAgdihib29sLCByZXBvcnRMTEludFN0YXRzLCBmYWxzZSwgQ29uZmlndXJhYmxl
LCAiUmVwb3J0cyBMTEludCBzdGF0aXN0aWNzIikgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302968</attachid>
            <date>2017-02-28 12:37:23 -0800</date>
            <delta_ts>2017-02-28 13:52:03 -0800</delta_ts>
            <desc>more things compile</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>250446</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMiBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkwRjJDNjNDMDFFNjYwRUE3MDBDMTM4
MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCRjFFNjYwRUE1MDBDMTM4MzkgLyogQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAv
KiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkQ0RERCMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCAq
LzsgfTsKIAkJMEYyRDREREUxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERDMTk4MzJE
MzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRDRERTgxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhp
c1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJENERFNTE5ODMyREFDMDA3RDRCMTkgLyogVG9UaGlzU3RhdHVzLmNwcCAqLzsgfTsKQEAg
LTIyNDMsOCArMjI0OSw2IEBACiAJCURDMjE0MzA4MUNBMzJFNTgwMDBBODg2OSAvKiBJQ1N0YXRz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMjE0
MzA1MUNBMzJFNTIwMDBBODg2OSAvKiBJQ1N0YXRzLmNwcCAqLzsgfTsKIAkJREMzRDJCMEExRDM0
MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBEQzNEMkIwOTFEMzQzMTYxMDBCQTkxOEMgLyogSGVhcENlbGwuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEQzNEMkIw
QzFEMzQzNzcwMDBCQTkxOEMgLyogSGVhcENlbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8qIEhlYXBD
ZWxsLmNwcCAqLzsgfTsKLQkJREM0NTRCOEMxRDAwRTgyMjAwNEMxOEFGIC8qIEFpckR1bXBBc0pT
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNDU0
QjhBMUQwMEU4MUYwMDRDMThBRiAvKiBBaXJEdW1wQXNKUy5jcHAgKi87IH07Ci0JCURDNDU0QjhE
MUQwMEU4MjQwMDRDMThBRiAvKiBBaXJEdW1wQXNKUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREM0NTRCOEIxRDAwRTgxRjAwNEMxOEFGIC8qIEFpckR1
bXBBc0pTLmggKi87IH07CiAJCURDNjA1QjVEMUNFMjZFQTAwMDU5MzcxOCAvKiBQcm9maWxlckV2
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERD
NjA1QjU5MUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmNwcCAqLzsgfTsKIAkJREM2
MDVCNUUxQ0UyNkVBMjAwNTkzNzE4IC8qIFByb2ZpbGVyRXZlbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjVBMUNFMjZFOTgwMDU5MzcxOCAv
KiBQcm9maWxlckV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJREM2MDVCNUYxQ0UyNkVBNTAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjVCMUNF
MjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlclVJRC5jcHAgKi87IH07CkBAIC0yNzY0LDYgKzI3Njgs
MTIgQEAKIAkJMEYyQzYzQUMxRTYwQUUzQzAwQzEzODM5IC8qIEIzQmFuay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhbmsuaDsgcGF0aCA9IGIzL0IzQmFuay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNjNBRDFFNjBBRTNDMDBDMTM4MzkgLyogQjNX
aWR0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dpZHRoLmNw
cDsgcGF0aCA9IGIzL0IzV2lkdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjJDNjNBRTFFNjBBRTNEMDBDMTM4MzkgLyogQjNXaWR0aC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1dpZHRoLmg7IHBhdGggPSBiMy9CM1dpZHRoLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1Zh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQXRvbWljVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNBdG9taWNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQXRvbWljVmFsdWUuaDsgcGF0aCA9IGIz
L0IzQXRvbWljVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjUx
RTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBh
dGggPSBiMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJDNjNCOTFFNjM0NDA4MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25T
ZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQmxvY2tJbnNl
cnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFp
ckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQkYxRTY2MEVBNTAwQzEzODM5
IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkQ0RERCMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJENEREQzE5ODMyRDM0MDA3RDRCMTkg
LyogRGVidWdnZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1
Z2dlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkQ0RERGMTk4MzJE
OTEwMDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlw
ZVByb2ZpbGVyTG9nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3NzgsOCAr
NDc4OCw2IEBACiAJCURDMjE0MzA2MUNBMzJFNTIwMDBBODg2OSAvKiBJQ1N0YXRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElDU3RhdHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJREMzRDJCMDkxRDM0MzE2MTAwQkE5MThDIC8qIEhlYXBDZWxsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBDZWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCURDM0QyQjBCMUQzNDM3NkUwMEJBOTE4QyAvKiBIZWFwQ2VsbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwQ2VsbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURDNDU0QjhBMUQwMEU4MUYwMDRDMThBRiAvKiBBaXJEdW1w
QXNKUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJEdW1wQXNK
Uy5jcHA7IHBhdGggPSBiMy9haXIvQWlyRHVtcEFzSlMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlEQzQ1NEI4QjFEMDBFODFGMDA0QzE4QUYgLyogQWlyRHVtcEFzSlMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRHVtcEFzSlMuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJEdW1wQXNKUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzYwNUI1OTFD
RTI2RTk4MDA1OTM3MTggLyogUHJvZmlsZXJFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlckV2ZW50LmNwcDsgcGF0aCA9IHByb2ZpbGVyL1Byb2Zp
bGVyRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzYwNUI1QTFDRTI2
RTk4MDA1OTM3MTggLyogUHJvZmlsZXJFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBQcm9maWxlckV2ZW50Lmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURDNjA1QjVCMUNFMjZFOTgwMDU5MzcxOCAv
KiBQcm9maWxlclVJRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQ
cm9maWxlclVJRC5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlclVJRC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjkyLDYgKzUzMDAsOCBAQAogCQkJCTBGRUM4NEIzMUJE
QUNEODgwMDgwRkY3NCAvKiBhaXIgKi8sCiAJCQkJMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovLAorCQkJCTBGMkM2M0IzMUU2MzQzRTgwMEMxMzgz
OSAvKiBCM0F0b21pY1ZhbHVlLmNwcCAqLywKKwkJCQkwRjJDNjNCNDFFNjM0M0U4MDBDMTM4Mzkg
LyogQjNBdG9taWNWYWx1ZS5oICovLAogCQkJCTBGMkM2M0FCMUU2MEFFM0MwMEMxMzgzOSAvKiBC
M0JhbmsuY3BwICovLAogCQkJCTBGMkM2M0FDMUU2MEFFM0MwMEMxMzgzOSAvKiBCM0JhbmsuaCAq
LywKIAkJCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCAqLywK
QEAgLTUzNTQsNiArNTM2NCw3IEBACiAJCQkJMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
RnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
R2VuZXJhdGUuY3BwICovLAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVy
YXRlLmggKi8sCisJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAv
KiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIz
SGVhcFJhbmdlLmggKi8sCkBAIC01NDY5LDYgKzU0ODAsOCBAQAogCQkJCTBGNjRFQUYyMUM0RUNE
MDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggKi8sCiAJCQkJMEZFQzg1NEMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCisJCQkJMEYyQzYzQjkxRTYzNDQwODAwQzEzODM5
IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkwRjJDNjNCQTFFNjM0NDA4MDBD
MTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRkIzODc4QjFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oICovLAogCQkJCTBGNjE4MzIwMUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovLAogCQkJCTBGNjE4MzIxMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCAqLywKQEAgLTU0ODAsOCAr
NTQ5Myw2IEBACiAJCQkJMEYxMEYxQTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICov
LAogCQkJCTc5QUJCMTdCMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuY3BwICov
LAogCQkJCTc5QUJCMTdDMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCAqLywK
LQkJCQlEQzQ1NEI4QTFEMDBFODFGMDA0QzE4QUYgLyogQWlyRHVtcEFzSlMuY3BwICovLAotCQkJ
CURDNDU0QjhCMUQwMEU4MUYwMDRDMThBRiAvKiBBaXJEdW1wQXNKUy5oICovLAogCQkJCTBGNDU3
MDM2MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAgKi8sCiAJCQkJ
MEY0NTcwMzcxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggKi8sCiAJ
CQkJMEY2MTgzMjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLywKQEAg
LTczMjYsNiArNzMzNyw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTBGMUZFNTFCMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oICovLAorCQkJCTBG
MkM2M0JGMUU2NjBFQTUwMEMxMzgzOSAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcCAqLywK
IAkJCQk4NjAxNjFERjBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
ICovLAogCQkJCTBGMzczMDkwMUMwQ0Q3MEMwMDA1MkJGQSAvKiBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UuaCAqLywKIAkJCQk4NjQwOTIzQjE1NkVFRDNCMDA1NjZDQjIgLyogQVJNNjRB
c3NlbWJsZXIuaCAqLywKQEAgLTczNTQsOCArNzM2Niw4IEBACiAJCQkJODZDNTY4REUxMUEyMTNF
RTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovLAogCQkJCUZFNjhDNjM1MUI5MERE
RDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICovLAogCQkJCUZFNjhDNjM2
MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCAqLywKLQkJCQk4NjAx
NjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQk4NjAx
NjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLywKKwkJCQk4
NjAxNjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQlB
N0E0QUUwNzE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICov
LAogCQkJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oICovLAogCQkJCTY1ODYwMTc3MTg1QThGNUUwMDAzMEVFRSAvKiBNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oICovLApAQCAtNzk0Myw3ICs3OTU1LDYgQEAKIAkJCQkwRkVDODU3NDFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYxMEYxQTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJREM0NTRCOEQxRDAwRTgyNDAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjQ1NzAzOTFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjE4MzJEMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0
U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8q
IEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFkZXJzICovLApAQCAtNzk1Niw2ICs3OTY3LDcg
QEAKIAkJCQkwRkVDODU4MDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFQzg1ODExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkRGNjdENzFEOURDNDQyMDAxQjk4MjUgLyogQWlyS2luZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQkMxRTYzNDQwQzAwQzEzODM5IC8qIEFpckJsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjg0RDQzODFDMDAxNjFDMDA4MUQ2NjMg
LyogQWlyTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTM0QzFBMUM0QjM5QUUwMDAz
QTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYx
ODMyRjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggaW4gSGVhZGVy
cyAqLywKQEAgLTgwNDcsNiArODA1OSw3IEBACiAJCQkJNDM0MjJBNjMxQzE1OEU2RDAwRTJFQjk4
IC8qIEIzQ29uc3RGbG9hdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODVCMzFCREVE
OTU3MDA4MEZGNzQgLyogQjNDb25zdFB0clZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
OERGNjFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJDNjNCODFFNjM0M0Y3MDBDMTM4MzkgLyogQjNHZW5lcmljQmxvY2tJbnNlcnRp
b25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTBFMUJGMDI3NkMwMDEzQzg4RiAvKiBC
M0RhdGFTZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzRkNGQzFDMTYyNUJFMDAzMjNG
NjcgLyogQjNEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCOEFEOTFDNEVEREEy
MDA5NjkwNTIgLyogQjNEdXBsaWNhdGVUYWlscy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzY2LDYg
KzgzNzksNyBAQAogCQkJCTBGMzkyQzhBMUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6
ei5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVFMTcxNzhF
NzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkM2M0I3MUU2MzQzRUQwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjYyMzc5ODFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZH
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzkyLDYgKzk4MDYsNyBAQAogCQkJ
YnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTBGRkE1NDk3
MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
MkM2M0MwMUU2NjBFQTcwMEMxMzgzOSAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUFENDkzN0MzMUREQkU2MTQwMDc3QzgwNyAvKiBBYnN0cmFjdE1vZHVs
ZVJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1RjBGNDE0RDEwNjM5MDBBQzc2NDkg
LyogQWJzdHJhY3RQQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzcwQjRGNTFCRjI2MjAyMDA1
QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTk4MDIsNyArOTgxNyw2IEBACiAJCQkJMEZFQzg1NzMxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVD
ODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjYxODMyQjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCURDNDU0QjhDMUQwMEU4MjIwMDRDMThBRiAvKiBBaXJEdW1wQXNKUy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjQ1NzAzODFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENv
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2MTgzMkMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFp
ckVtaXRTaHVmZmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNERFMUNFMUM0QzFCNTQwMDRE
NkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAyNDgs
NiArMTAyNjIsNyBAQAogCQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXpl
VGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVB
RCAvKiBJbmplY3RlZFNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2
ODQ0MDBGM0M3Q0IgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMkM2M0I2MUU2MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1OEUzNTkxMTg2MERFQ0YwMDFGMjRGRSAvKiBJbmplY3RlZFNjcmlwdEhvc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1Q0ExODVGOTYyNDAwN0U5NUFEIC8qIEluamVj
dGVkU2NyaXB0TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTg0MEUyMDE4N0I3Qjg2
MDA4NDNCMTAgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0x
MDI2Niw2ICsxMDI4MSw3IEBACiAJCQkJRTM1RTAzNUYxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMyNDM4
QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1l
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQzYzQkIxRTYzNDQwQTAwQzEzODM5IC8q
IEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NTE2NUQyMUJE
RjBCOTgwMDNCNzVDMSAvKiBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1OTNDRjgyMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1ZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0YxMDdFQzM3NjAwNDI3QTQ4IC8qIEludGVy
bmFsRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIiAvLyBIYXZlIHRvIGJyZWFrIHdpdGgg
c3R5bGUgYmVjYXVzZSBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggaXMgYSBzaGFkeSBoZWFkZXIu
CisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJhc2U6OlN0
YXR1c0NvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAg
ICBjYXNlIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJCYXNlOjpTdWNjZXNzOgorICAgICAgICBvdXQu
cHJpbnQoIlN1Y2Nlc3MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlckJhc2U6OkZhaWx1cmU6CisgICAgICAgIG91dC5wcmludCgiRmFpbHVyZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3Jh
cGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNp
bmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvV2Vha1JhbmRvbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTUwLDggKzUxLDI4
IEBAIG5hbWVzcGFjZSBERkcgewogc3RydWN0IE9TUkV4aXQ7CiB9CiAKK2NsYXNzIEFic3RyYWN0
TWFjcm9Bc3NlbWJsZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXR1c0NvbmRpdGlvbiB7
CisgICAgICAgIFN1Y2Nlc3MsCisgICAgICAgIEZhaWx1cmUKKyAgICB9OworICAgIAorICAgIHN0
YXRpYyBTdGF0dXNDb25kaXRpb24gaW52ZXJ0KFN0YXR1c0NvbmRpdGlvbiBjb25kaXRpb24pCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbikgeworICAgICAgICBjYXNlIFN1Y2Nlc3M6
CisgICAgICAgICAgICByZXR1cm4gRmFpbHVyZTsKKyAgICAgICAgY2FzZSBGYWlsdXJlOgorICAg
ICAgICAgICAgcmV0dXJuIFN1Y2Nlc3M7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3M7CisgICAgfQorfTsKKwog
dGVtcGxhdGUgPGNsYXNzIEFzc2VtYmxlclR5cGUsIGNsYXNzIE1hY3JvQXNzZW1ibGVyVHlwZT4K
LWNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIgeworY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2Vt
YmxlciA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyQmFzZSB7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGUsIE1hY3JvQXNzZW1i
bGVyVHlwZT4gQWJzdHJhY3RNYWNyb0Fzc2VtYmxlclR5cGU7CiAgICAgdHlwZWRlZiBBc3NlbWJs
ZXJUeXBlIEFzc2VtYmxlclR5cGVfVDsKQEAgLTExMDgsMyArMTEyOSwxNiBAQCBBYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGUsIE1hCiAjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxF
UikKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorCituYW1l
c3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXJCYXNlOjpTdGF0dXND
b25kaXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShBU1NF
TUJMRVIpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEz
Niw2ICsxMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0d29Ub1RoZTMy
OyAvLyBUaGlzIGlzIHN1cGVyIHVzZWZ1bCBmb3Igc29tZSBkb3VibGUgY29kZS4KIAogICAgIC8v
IFV0aWxpdGllcyB1c2VkIGJ5IHRoZSBERkcgSklULgorICAgIHVzaW5nIEFic3RyYWN0TWFjcm9B
c3NlbWJsZXJCYXNlOjppbnZlcnQ7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjppbnZl
cnQ7CiAgICAgCiAgICAgc3RhdGljIERvdWJsZUNvbmRpdGlvbiBpbnZlcnQoRG91YmxlQ29uZGl0
aW9uIGNvbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzEsNiArMTcxLDExIEBAIHB1YmxpYzoKICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkbF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CiAgICAg
fQogCisgICAgdm9pZCBhZGQzMihCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMu
aW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBhZGQzMihSZWdpc3Rl
cklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9y
bShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwpAQCAtMjUxLDE2ICsyNTYsNzEgQEAgcHVi
bGljOgogICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBhbmQzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX3JtKHNyYywgZGVzdC5vZmZz
ZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmQxNihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYW5kd19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwor
ICAgIHZvaWQgYW5kMTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuYW5kd19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRl
c3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgYW5kOChSZWdpc3RlcklE
IHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kYl9ybShz
cmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgYW5kOChSZWdp
c3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5h
bmRiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2Fs
ZSk7CisgICAgfQorCiAgICAgdm9pZCBhbmQzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYW5kbF9tcihzcmMub2Zmc2V0LCBzcmMuYmFz
ZSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBhbmQzMihCYXNlSW5kZXggc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX21yKHNyYy5vZmZzZXQs
IHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9p
ZCBhbmQzMihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAg
ICBtX2Fzc2VtYmxlci5hbmRsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kbF9pbShpbW0ubV92
YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X2ltKHN0YXRpY19j
YXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7
CisgICAgfQorCisgICAgdm9pZCBhbmQxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHdfaW0oc3RhdGljX2Nhc3Q8aW50
MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDgoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5k
Yl9pbShzdGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ4KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kYl9pbShzdGF0
aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBhbmQz
MihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7
CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpAQCAtNDU2LDYgKzUxNiwzMSBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fYXNzZW1ibGVyLm5lZ2xfbShzcmNEZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlKTsK
ICAgICB9CiAKKyAgICB2b2lkIG5lZzMyKEJhc2VJbmRleCBzcmNEZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubmVnbF9tKHNyY0Rlc3Qub2Zmc2V0LCBzcmNEZXN0LmJhc2UsIHNyY0Rl
c3QuaW5kZXgsIHNyY0Rlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgbmVnMTYoQWRkcmVz
cyBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubmVnd19tKHNyY0Rlc3Qub2Zm
c2V0LCBzcmNEZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgbmVnMTYoQmFzZUluZGV4IHNy
Y0Rlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWd3X20oc3JjRGVzdC5vZmZzZXQs
IHNyY0Rlc3QuYmFzZSwgc3JjRGVzdC5pbmRleCwgc3JjRGVzdC5zY2FsZSk7CisgICAgfQorCisg
ICAgdm9pZCBuZWc4KEFkZHJlc3Mgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm5lZ2JfbShzcmNEZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lk
IG5lZzgoQmFzZUluZGV4IHNyY0Rlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWdi
X20oc3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3QuYmFzZSwgc3JjRGVzdC5pbmRleCwgc3JjRGVzdC5z
Y2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBvcjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5vcmxfcnIoc3JjLCBkZXN0KTsKQEAg
LTQ3MSwxNiArNTU2LDcxIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX3JtKHNy
YywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjMyKFJlZ2lz
dGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9y
bF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUp
OworICAgIH0KKworICAgIHZvaWQgb3IxNihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjE2KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yd19ybShzcmMsIGRlc3Qub2Zmc2V0
LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQg
b3I4KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5vcmJfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2
b2lkIG9yOChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5vcmJfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4
LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yMzIoQWRkcmVzcyBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9tcihzcmMub2Zmc2V0
LCBzcmMuYmFzZSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBvcjMyKEJhc2VJbmRleCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9tcihzcmMu
b2Zmc2V0LCBzcmMuYmFzZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUsIGRlc3QpOworICAgIH0KKwog
ICAgIHZvaWQgb3IzMihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewog
ICAgICAgICBtX2Fzc2VtYmxlci5vcmxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgb3IzMihUcnVzdGVkSW1tMzIgaW1tLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9pbShpbW0u
bV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRk
cmVzcy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yd19pbShzdGF0aWNf
Y2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Up
OworICAgIH0KKworICAgIHZvaWQgb3IxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yd19pbShzdGF0aWNfY2FzdDxpbnQx
Nl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
aW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgb3I4KFRydXN0ZWRJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9p
bShzdGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUlu
ZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcmJfaW0oc3RhdGljX2Nh
c3Q8aW50OF90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgb3IzMihSZWdp
c3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIGlmIChvcDEgPT0gb3AyKQpAQCAtNjU0LDE2ICs3OTQsNzEgQEAgcHVibGljOgogICAgICAg
ICBtX2Fzc2VtYmxlci5zdWJsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YndfaW0oc3RhdGljX2Nh
c3Q8aW50MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
KyAgICB9CisKKyAgICB2b2lkIHN1YjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3ViYl9pbShzdGF0aWNfY2FzdDxpbnQ4X3Q+
KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorCisg
ICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKwor
ICAgIHZvaWQgc3ViMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5zdWJ3X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5t
X3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRk
cmVzcy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBzdWI4KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3ViYl9pbShzdGF0
aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBzdWIz
MihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJs
ZXIuc3VibF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9p
ZCBzdWIzMihCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5zdWJsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5z
Y2FsZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBzdWIzMihSZWdpc3RlcklEIHNyYywgQWRk
cmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9ybShzcmMsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3ViMTYoUmVnaXN0ZXJJRCBz
cmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1Yndfcm0oc3Jj
LCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjgoUmVnaXN0
ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmJf
cm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMy
KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnN1Ymxfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0
LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjE2KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5k
ZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1Yndfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2
b2lkIHN1YjgoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuc3ViYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5k
ZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmxfcnIoc3Jj
LCBkZXN0KTsKQEAgLTY3Nyw2ICs4NzIsNTAgQEAgcHVibGljOgogICAgICAgICAgICAgbV9hc3Nl
bWJsZXIueG9ybF9pbShpbW0ubV92YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAg
fQogCisgICAgdm9pZCB4b3IzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAg
ICB7CisgICAgICAgIGlmIChpbW0ubV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLm5vdGxfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxl
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9pbShpbW0ubV92
YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7Cisg
ICAgfQorCisgICAgdm9pZCB4b3IxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3QpCisg
ICAgeworICAgICAgICBpbW0ubV92YWx1ZSA9IHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3Zh
bHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci54b3J3X2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVz
dC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJ
bmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgaW1tLm1fdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQx
Nl90PihpbW0ubV92YWx1ZSk7CisgICAgICAgIGlmIChpbW0ubV92YWx1ZSA9PSAtMSkKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm5vdHdfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0Lmlu
ZGV4LCBkZXN0LnNjYWxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
eG9yd19pbShpbW0ubV92YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwg
ZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCB4b3I4KFRydXN0ZWRJbW0zMiBpbW0sIEFk
ZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIGltbS5tX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50
OF90PihpbW0ubV92YWx1ZSk7CisgICAgICAgIGlmIChpbW0ubV92YWx1ZSA9PSAtMSkKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm5vdGJfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yYl9pbShpbW0ubV92YWx1ZSwgZGVz
dC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCB4b3I4KFRydXN0ZWRJbW0z
MiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgaW1tLm1fdmFsdWUgPSBzdGF0
aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09
IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm90Yl9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci54b3JiX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBk
ZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHhvcjMyKFRydXN0ZWRJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChpbW0ubV92YWx1
ZSA9PSAtMSkKQEAgLTY5MCwxMSArOTI5LDQxIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJs
ZXIueG9ybF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZv
aWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIueG9ybF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5k
ZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgeG9yMTYoUmVnaXN0ZXJJRCBzcmMs
IEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcndfcm0oc3JjLCBk
ZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjE2KFJlZ2lzdGVy
SUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcndf
cm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsK
KyAgICB9CisKKyAgICB2b2lkIHhvcjgoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcmJfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBk
ZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0
LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQg
eG9yMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNz
ZW1ibGVyLnhvcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwogICAgIH0KICAgICAK
KyAgICB2b2lkIHhvcjMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnhvcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRl
eCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCB4b3IzMihSZWdpc3Rl
cklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IGlmIChvcDEgPT0gb3AyKQpAQCAtNzQxLDYgKzEwMTAsMzEgQEAgcHVibGljOgogICAgICAgICBt
X2Fzc2VtYmxlci5ub3RsX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisgICAg
dm9pZCBub3QzMihCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5v
dGxfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAg
ICB9CisKKyAgICB2b2lkIG5vdDE2KEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm5vdHdfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lk
IG5vdDE2KEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm90d19t
KGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0K
KworICAgIHZvaWQgbm90OChBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5ub3RiX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBub3Q4
KEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm90Yl9tKGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAg
IHZvaWQgc3FydERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQogICAg
IHsKICAgICAgICAgbV9hc3NlbWJsZXIuc3FydHNkX3JyKHNyYywgZHN0KTsKQEAgLTEwNzEsNDIg
KzEzNjUsMjMgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdG9yZTE2KFJlZ2lzdGVySUQgc3JjLCBC
YXNlSW5kZXggYWRkcmVzcykKICAgICB7Ci0jaWYgQ1BVKFg4NikKLSAgICAgICAgLy8gT24gMzIt
Yml0IHg4NiB3ZSBjYW4gb25seSBzdG9yZSBmcm9tIHRoZSBmaXJzdCA0IHJlZ2lzdGVyczsKLSAg
ICAgICAgLy8gZXNwLi5lZGkgYXJlIG1hcHBlZCB0byB0aGUgJ2gnIHJlZ2lzdGVycyEKLSAgICAg
ICAgaWYgKHNyYyA+PSA0KSB7Ci0gICAgICAgICAgICAvLyBQaWNrIGEgdGVtcG9yYXJ5IHJlZ2lz
dGVyLgotICAgICAgICAgICAgUmVnaXN0ZXJJRCB0ZW1wID0gZ2V0VW51c2VkUmVnaXN0ZXIoYWRk
cmVzcyk7Ci0KLSAgICAgICAgICAgIC8vIFN3YXAgdG8gdGhlIHRlbXBvcmFyeSByZWdpc3RlciB0
byBwZXJmb3JtIHRoZSBzdG9yZS4KLSAgICAgICAgICAgIHN3YXAoc3JjLCB0ZW1wKTsKLSAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdndfcm0odGVtcCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7Ci0gICAgICAgICAgICBzd2FwKHNy
YywgdGVtcCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgogICAgICAg
ICBtX2Fzc2VtYmxlci5tb3Z3X3JtKHNyYywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwg
YWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCiAgICAgdm9pZCBzdG9yZTE2
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewotI2lmIENQVShYODYpCi0g
ICAgICAgIC8vIE9uIDMyLWJpdCB4ODYgd2UgY2FuIG9ubHkgc3RvcmUgZnJvbSB0aGUgZmlyc3Qg
NCByZWdpc3RlcnM7Ci0gICAgICAgIC8vIGVzcC4uZWRpIGFyZSBtYXBwZWQgdG8gdGhlICdoJyBy
ZWdpc3RlcnMhCi0gICAgICAgIGlmIChzcmMgPj0gNCkgewotICAgICAgICAgICAgLy8gUGljayBh
IHRlbXBvcmFyeSByZWdpc3Rlci4KLSAgICAgICAgICAgIFJlZ2lzdGVySUQgdGVtcCA9IGdldFVu
dXNlZFJlZ2lzdGVyKGFkZHJlc3MpOwotCi0gICAgICAgICAgICAvLyBTd2FwIHRvIHRoZSB0ZW1w
b3JhcnkgcmVnaXN0ZXIgdG8gcGVyZm9ybSB0aGUgc3RvcmUuCi0gICAgICAgICAgICBzd2FwKHNy
YywgdGVtcCk7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3X3JtKHRlbXAsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwotICAgICAgICAgICAgc3dhcChzcmMsIHRlbXApOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgbV9hc3NlbWJsZXIu
bW92d19ybShzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAg
IHZvaWQgc3RvcmUxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdndfaW0oc3RhdGljX2Nhc3Q8aW50MTZfdD4oaW1tLm1f
dmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMTYoVHJ1c3RlZEltbTMyIGltbSwg
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92d19pbShzdGF0
aWNfY2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UpOworICAgIH0KIAogICAgIC8vIEZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbjoKICAgICAvLwpA
QCAtMjc0Myw3NCArMzAxOCw4MzggQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9pbSgwLCAwLCBYODZSZWdpc3RlcnM6OmVzcCk7
CiAgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwg
QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21p
Y1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgcmVzdWx0LCBbJl0geyBtX2Fzc2Vt
Ymxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7
IH0pOworICAgIH0KIAotICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVu
dHMgbW90aW9uIG9mIG5vcm1hbCBzdG9yZXMuIFNvLCBpdCdzIGEgbm8tb3Agb24geDg2LgotICAg
IHZvaWQgc3RvcmVGZW5jZSgpCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM4KFN0YXR1c0NvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1Zh
bHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgeworICAgICAg
ICBhdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsg
bV9hc3NlbWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9CiAKLSAgICAv
LyBXZSB0YWtlIHRoaXMgdG8gbWVhbiB0aGF0IGl0IHByZXZlbnRzIG1vdGlvbiBvZiBub3JtYWwg
bG9hZHMuIFNvLCBpdCdzIGEgbm8tb3Agb24geDg2LgotICAgIHZvaWQgbG9hZEZlbmNlKCkKKyAg
ICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3Ms
IFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQs
IGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3Jt
KG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0
aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHZvaWQgYXRvbWlj
U3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRS
ZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklE
IHJlc3VsdCkKICAgICB7Ci0gICAgICAgIFg4NkFzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKGlu
c3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGVzdGluYXRpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJl
c3VsdCwgcmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7
IH0pOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG1heEp1bXBSZXBsYWNlbWVu
dFNpemUoKQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVMzMihTdGF0dXNDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRk
cmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBY
ODZBc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKTsKKyAgICAgICAgYXRvbWljU3Ry
b25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVy
LmNtcHhjaGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBwYXRjaGFibGVKdW1wU2l6ZSgpCisgICAg
dm9pZCBhdG9taWNTdHJvbmdDQVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBl
eHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3Ms
IFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIFg4NkFzc2VtYmxlcjo6
cGF0Y2hhYmxlSnVtcFNpemUoKTsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVj
dGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1Zh
bHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsgfSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1Bv
aW50Um91bmRpbmcoKQorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTOChSZWdpc3RlcklEIGV4cGVj
dGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAg
ewotICAgICAgICBpZiAoc19zc2U0XzFDaGVja1N0YXRlID09IENQVUlEQ2hlY2tTdGF0ZTo6Tm90
Q2hlY2tlZCkKLSAgICAgICAgICAgIHVwZGF0ZUVheDFFY3hGbGFncygpOwotICAgICAgICByZXR1
cm4gc19zc2U0XzFDaGVja1N0YXRlID09IENQVUlEQ2hlY2tTdGF0ZTo6U2V0OworICAgICAgICBh
dG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhj
aGdiX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CiAgICAg
fQogCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNBVlgoKQorICAgIHZvaWQgYXRvbWljU3Ryb25n
Q0FTOChSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBC
YXNlSW5kZXggYWRkcmVzcykKICAgICB7Ci0gICAgICAgIC8vIEFWWCBzdGlsbCBjYXVzZXMgbXlz
dGVyaW91cyByZWdyZXNzaW9ucyBhbmQgdGhvc2UgcmVncmVzc2lvbnMgY2FuIGJlIG1hc3NpdmUu
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVk
QW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0p
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUVheDFFY3hGbGFncygpCisgICAgdm9p
ZCBhdG9taWNTdHJvbmdDQVMxNihSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3Rl
cklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewotICAgICAgICBpbnQgZmxhZ3Mg
PSAwOwotI2lmIENPTVBJTEVSKE1TVkMpCi0gICAgICAgIGludCBjcHVJbmZvWzRdOwotICAgICAg
ICBfX2NwdWlkKGNwdUluZm8sIDB4MSk7Ci0gICAgICAgIGZsYWdzID0gY3B1SW5mb1syXTsKLSNl
bGlmIENPTVBJTEVSKEdDQ19PUl9DTEFORykKLSNpZiBDUFUoWDg2XzY0KQotICAgICAgICBhc20g
KAotICAgICAgICAgICAgIm1vdmwgJDB4MSwgJSVlYXg7IgotICAgICAgICAgICAgImNwdWlkOyIK
LSAgICAgICAgICAgICJtb3ZsICUlZWN4LCAlMDsiCi0gICAgICAgICAgICA6ICI9ZyIgKGZsYWdz
KQotICAgICAgICAgICAgOgotICAgICAgICAgICAgOiAiJWVheCIsICIlZWJ4IiwgIiVlY3giLCAi
JWVkeCIKLSAgICAgICAgICAgICk7Ci0jZWxzZQotICAgICAgICBhc20gKAotICAgICAgICAgICAg
Im1vdmwgJDB4MSwgJSVlYXg7IgotICAgICAgICAgICAgInB1c2hsICUlZWJ4OyIKLSAgICAgICAg
ICAgICJjcHVpZDsiCi0gICAgICAgICAgICAicG9wbCAlJWVieDsiCi0gICAgICAgICAgICAibW92
bCAlJWVjeCwgJTA7IgotICAgICAgICAgICAgOiAiPWciIChmbGFncykKLSAgICAgICAgICAgIDoK
LSAgICAgICAgICAgIDogIiVlYXgiLCAiJWVjeCIsICIlZWR4IgotICAgICAgICAgICAgKTsKLSNl
bmRpZgorICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1f
YXNzZW1ibGVyLmNtcHhjaGd3X3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5i
YXNlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVMxNihSZWdpc3RlcklE
IGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZd
IHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CisKKyAg
ICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJl
Z2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0b21p
Y1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2xf
cm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisK
KyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQs
IFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
YXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4
Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWlj
U3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJl
c3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwg
WyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NB
UzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJl
Z2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsg
bV9hc3NlbWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4
cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwg
YWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoQXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhw
ZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3Rl
ZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJl
c3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0NvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1Zh
bHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWlj
U3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4
Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIoU3RhdHVzQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9u
Z0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2xf
cm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgs
IGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVM4KFN0
YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3Rl
cklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsK
KyAgICAgICAgYXRvbWljU3Ryb25nQ0FTOChjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFs
dWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FTOChT
dGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0
ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAg
IHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTOChjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3
VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FT
MTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJl
Z2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCisg
ICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwg
bmV3VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFr
Q0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQs
IFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3Vs
dCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzE2KGNvbmQsIGV4cGVjdGVkQW5kUmVz
dWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21p
Y1dlYWtDQVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJl
c3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJl
c3VsdCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzMyKGNvbmQsIGV4cGVjdGVkQW5k
UmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0
b21pY1dlYWtDQVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVy
SUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMzIoY29uZCwgZXhwZWN0
ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoQXRvbWljV2Vha0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
ZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVM4KGNvbmQsIGV4cGVj
dGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hBdG9taWNXZWFrQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTOChjb25kLCBleHBlY3RlZEFu
ZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRv
bWljV2Vha0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5k
UmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTMTYoY29uZCwgZXhwZWN0ZWRBbmRSZXN1
bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dl
YWtDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3Vs
dCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTMTYoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQs
IG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dlYWtD
QVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwg
UmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzMyKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdW
YWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FTMzIo
U3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaEF0b21pY1N0cm9uZ0NBUzMyKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1
ZSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkOChUcnVzdGVkSW1t
MzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIGFkZDgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNBZGQ4KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ4KGltbSwgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ4
KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkOChSZWdpc3Rl
cklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIGFkZDgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNBZGQxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDE2KGltbSwgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFz
ZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIGFkZDE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRk
MTYoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBhdG9taWNBZGQxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDE2KHJlZywg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMzIoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICBhZGQzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY0FkZDMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQzMihpbW0sIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFk
ZDMyKHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMzIoUmVn
aXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBhZGQzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1N1YjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI4KGltbSwgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViOChUcnVzdGVkSW1tMzIgaW1tLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgc3ViOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1
YjgoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY1N1YjgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI4KHJlZywgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMTYoVHJ1c3RlZEltbTMyIGlt
bSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBzdWIxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y1N1YjE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWIxNihpbW0sIGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjE2
KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMTYoUmVnaXN0
ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBzdWIxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1N1YjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViMzIoaW1tLCBhZGRyZXNz
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgc3ViMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNT
dWIzMihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWIzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY1N1YjMyKFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViMzIocmVn
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQ4KFRydXN0ZWRJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgYW5kOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY0FuZDgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDgoaW1tLCBhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQ4KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDgo
cmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQ4KFJlZ2lzdGVy
SUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgYW5kOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY0FuZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMTYoaW1tLCBhZGRyZXNzKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNl
SW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAg
ICAgYW5kMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQx
NihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhbmQxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY0FuZDE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMTYocmVnLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQzMihUcnVzdGVkSW1tMzIg
aW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIGFuZDMyKGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRv
bWljQW5kMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDMyKGltbSwgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMzIoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5k
MzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQzMihSZWdp
c3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIGFuZDMyKHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljT3I4KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I4KGltbSwgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I4KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBvcjgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjgoUmVn
aXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvY2soKTsKKyAgICAgICAgb3I4KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgYXRvbWljT3I4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I4KHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3IxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9y
MTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBvcjE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljT3IxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjE2KHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3IxNihSZWdpc3RlcklEIHJlZywgQmFzZUlu
ZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG9yMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjMyKFRy
dXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgb3IzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY09yMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMzIoaW1tLCBhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjMyKFJlZ2lzdGVySUQgcmVnLCBB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIG9yMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjMy
KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY1hvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I4KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yOChUcnVzdGVkSW1tMzIgaW1t
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgeG9yOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y1hvcjgoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY1hvcjgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I4KHJlZywg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMTYoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICB4b3IxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1hvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3IxNihpbW0sIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhv
cjE2KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMTYoUmVn
aXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3IxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yMzIoaW1tLCBhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3IzMihUcnVzdGVkSW1tMzIgaW1t
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgeG9yMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNYb3IzMihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjMyKFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yMzIo
cmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWc4KEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVn
OChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWc4KEJhc2VJbmRleCBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBuZWc4
KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzE2KEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnMTYo
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMTYoQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzE2
KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzMyKEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnMzIo
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMzIoQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzMy
KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDgoQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3Q4KGFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDgoQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDgoYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90MTYoQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3QxNihhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3QxNihCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90MTYoYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90MzIoQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3QzMihhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3QzMihCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90MzIoYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZ0FkZDgoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGJfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkOChSZWdpc3RlcklE
IHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhhZGRiX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljWGNoZ0FkZDE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LnhhZGR3X3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljWGNoZ0FkZDE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIueGFkZHdfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hn
QWRkMzIoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGxfcm0ocmVnLCBhZGRy
ZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNY
Y2hnQWRkMzIoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkbF9ybShyZWcs
IGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2Nh
bGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGc4KFJlZ2lzdGVySUQgcmVnLCBB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnhhZGRiX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzgoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBtX2Fzc2VtYmxlci54Y2hnYl9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY1hjaGcxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnd19ybShy
ZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY1hjaGcxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGd3X3Jt
KHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzMyKFJlZ2lzdGVySUQg
cmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdsX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzMyKFJlZ2lzdGVySUQg
cmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBsb2FkQWNxOChBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbG9hZDgoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkQWNxOChC
YXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkOChzcmMs
IGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3E4U2lnbmVkRXh0ZW5kVG8zMihB
ZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDhTaWduZWRF
eHRlbmRUbzMyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZEFjcThTaWdu
ZWRFeHRlbmRUbzMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGxvYWQ4U2lnbmVkRXh0ZW5kVG8zMihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGxvYWRBY3ExNihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbG9hZDE2KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZEFjcTE2KEJh
c2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQxNihzcmMs
IGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIo
QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQxNlNpZ25l
ZEV4dGVuZFRvMzIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkQWNxMTZT
aWduZWRFeHRlbmRUbzMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGxvYWQxNlNpZ25lZEV4dGVuZFRvMzIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBsb2FkQWNxMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGxvYWQzMihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3Ez
MihCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkMzIo
c3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVJlbDgoUmVnaXN0ZXJJRCBz
cmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIHN0b3JlOChzcmMsIGRlc3QpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsOChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRl
c3QpCisgICAgeworICAgICAgICBzdG9yZTgoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzdG9yZVJlbDgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgc3RvcmU4KGltbSwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw4
KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmU4
KGltbSwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwxNihSZWdpc3RlcklE
IHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmUxNihzcmMsIGRlc3QpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsMTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRl
eCBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmUxNihzcmMsIGRlc3QpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHN0b3JlUmVsMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAg
IHsKKyAgICAgICAgc3RvcmUxNihpbW0sIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0
b3JlUmVsMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAg
ICBzdG9yZTE2KGltbSwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmUzMihzcmMs
IGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsMzIoUmVnaXN0ZXJJRCBzcmMs
IEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmUzMihzcmMsIGRlc3QpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBk
ZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmUzMihpbW0sIGRlc3QpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHN0b3JlUmVsMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBzdG9yZTMyKGltbSwgZGVzdCk7CisgICAgfQorICAgIAorICAgIC8vIFdlIHRh
a2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVudHMgbW90aW9uIG9mIG5vcm1hbCBzdG9yZXMu
IFNvLCBpdCdzIGEgbm8tb3Agb24geDg2LgorICAgIHZvaWQgc3RvcmVGZW5jZSgpCisgICAgewor
ICAgIH0KKworICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVudHMgbW90
aW9uIG9mIG5vcm1hbCBsb2Fkcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4ODYuCisgICAgdm9pZCBs
b2FkRmVuY2UoKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1
bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwg
ZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVt
cChpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIGRlc3RpbmF0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG1heEp1
bXBSZXBsYWNlbWVudFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFg4NkFzc2VtYmxlcjo6
bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qg
cGF0Y2hhYmxlSnVtcFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFg4NkFzc2VtYmxlcjo6
cGF0Y2hhYmxlSnVtcFNpemUoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zs
b2F0aW5nUG9pbnRSb3VuZGluZygpCisgICAgeworICAgICAgICBpZiAoc19zc2U0XzFDaGVja1N0
YXRlID09IENQVUlEQ2hlY2tTdGF0ZTo6Tm90Q2hlY2tlZCkKKyAgICAgICAgICAgIHVwZGF0ZUVh
eDFFY3hGbGFncygpOworICAgICAgICByZXR1cm4gc19zc2U0XzFDaGVja1N0YXRlID09IENQVUlE
Q2hlY2tTdGF0ZTo6U2V0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQVZYKCkK
KyAgICB7CisgICAgICAgIC8vIEFWWCBzdGlsbCBjYXVzZXMgbXlzdGVyaW91cyByZWdyZXNzaW9u
cyBhbmQgdGhvc2UgcmVncmVzc2lvbnMgY2FuIGJlIG1hc3NpdmUuCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVFYXgxRWN4RmxhZ3MoKQorICAg
IHsKKyAgICAgICAgaW50IGZsYWdzID0gMDsKKyNpZiBDT01QSUxFUihNU1ZDKQorICAgICAgICBp
bnQgY3B1SW5mb1s0XTsKKyAgICAgICAgX19jcHVpZChjcHVJbmZvLCAweDEpOworICAgICAgICBm
bGFncyA9IGNwdUluZm9bMl07CisjZWxpZiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCisjaWYgQ1BV
KFg4Nl82NCkKKyAgICAgICAgYXNtICgKKyAgICAgICAgICAgICJtb3ZsICQweDEsICUlZWF4OyIK
KyAgICAgICAgICAgICJjcHVpZDsiCisgICAgICAgICAgICAibW92bCAlJWVjeCwgJTA7IgorICAg
ICAgICAgICAgOiAiPWciIChmbGFncykKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgIDogIiVl
YXgiLCAiJWVieCIsICIlZWN4IiwgIiVlZHgiCisgICAgICAgICAgICApOworI2Vsc2UKKyAgICAg
ICAgYXNtICgKKyAgICAgICAgICAgICJtb3ZsICQweDEsICUlZWF4OyIKKyAgICAgICAgICAgICJw
dXNobCAlJWVieDsiCisgICAgICAgICAgICAiY3B1aWQ7IgorICAgICAgICAgICAgInBvcGwgJSVl
Yng7IgorICAgICAgICAgICAgIm1vdmwgJSVlY3gsICUwOyIKKyAgICAgICAgICAgIDogIj1nIiAo
ZmxhZ3MpCisgICAgICAgICAgICA6CisgICAgICAgICAgICA6ICIlZWF4IiwgIiVlY3giLCAiJWVk
eCIKKyAgICAgICAgICAgICk7CisjZW5kaWYKICNlbmRpZiAvLyBDT01QSUxFUihHQ0NfT1JfQ0xB
TkcpCiAgICAgICAgIHNfc3NlNF8xQ2hlY2tTdGF0ZSA9IChmbGFncyAmICgxIDw8IDE5KSkgPyBD
UFVJRENoZWNrU3RhdGU6OlNldCA6IENQVUlEQ2hlY2tTdGF0ZTo6Q2xlYXI7CiAgICAgICAgIHNf
YXZ4Q2hlY2tTdGF0ZSA9IChmbGFncyAmICgxIDw8IDI4KSkgPyBDUFVJRENoZWNrU3RhdGU6OlNl
dCA6IENQVUlEQ2hlY2tTdGF0ZTo6Q2xlYXI7CkBAIC0yODMxLDYgKzM4NzAsMTggQEAgcHJvdGVj
dGVkOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8WDg2QXNzZW1ibGVyOjpDb25kaXRpb24+
KGNvbmQpOwogICAgIH0KIAorICAgIFg4NkFzc2VtYmxlcjo6Q29uZGl0aW9uIHg4NkNvbmRpdGlv
bihTdGF0dXNDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZCkgewor
ICAgICAgICBjYXNlIFN1Y2Nlc3M6CisgICAgICAgICAgICByZXR1cm4gWDg2QXNzZW1ibGVyOjpD
b25kaXRpb25FOworICAgICAgICBjYXNlIEZhaWx1cmU6CisgICAgICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjpDb25kaXRpb25ORTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gWDg2QXNzZW1ibGVyOjpDb25kaXRpb25F
OworICAgIH0KKwogICAgIHZvaWQgc2V0MzIoWDg2QXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICNpZiBDUFUoWDg2KQpAQCAtMjkyNSw2ICszOTc2LDM1
IEBAIHByb3RlY3RlZDoKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoc2l6ZU9mUmVnaXN0ZXIp
LCBkc3QpOwogICAgICAgICBzcmNJc05vblplcm8ubGluayh0aGlzKTsKICAgICB9CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUyhTdGF0
dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJ
RCByZXN1bHQsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBzd2FwKGV4cGVjdGVk
QW5kUmVzdWx0LCBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgZnVuYygpOworICAgICAgICBzd2FwKGV4cGVjdGVkQW5kUmVzdWx0LCBYODZS
ZWdpc3RlcnM6OmVheCk7CisgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgcmVzdWx0
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgYXRvbWlj
U3Ryb25nQ0FTKFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIGNvbnN0IEZ1bmMmIGZ1bmMp
CisgICAgeworICAgICAgICBzd2FwKGV4cGVjdGVkQW5kUmVzdWx0LCBYODZSZWdpc3RlcnM6OmVh
eCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgZnVuYygpOworICAgICAg
ICBzd2FwKGV4cGVjdGVkQW5kUmVzdWx0LCBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NB
UyhTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgY29u
c3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4
NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBm
dW5jKCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4
KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25k
KSkpOworICAgIH0KIAogcHJpdmF0ZToKICAgICAvLyBPbmx5IE1hY3JvQXNzZW1ibGVyWDg2IHNo
b3VsZCBiZSB1c2luZyB0aGUgZm9sbG93aW5nIG1ldGhvZDsgU1NFMiBpcyBhbHdheXMgYXZhaWxh
YmxlIG9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDE0
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNjQsMTEgKzI2NCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZHFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwogICAgIH0KIAor
ICAgIHZvaWQgYWRkNjQoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkcV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgc3JjLmluZGV4
LCBzcmMuc2NhbGUsIGRlc3QpOworICAgIH0KKwogICAgIHZvaWQgYWRkNjQoUmVnaXN0ZXJJRCBz
cmMsIEFkZHJlc3MgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHFfcm0oc3Jj
LCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZDY0KFJlZ2lz
dGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZHFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxl
KTsKKyAgICB9CisKICAgICB2b2lkIGFkZDY0KEFic29sdXRlQWRkcmVzcyBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzcmMubV9wdHIpLCBz
Y3JhdGNoUmVnaXN0ZXIoKSk7CkBAIC0zMDYsNiArMzE2LDE0IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZHFfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgYWRkNjQoVHJ1c3RlZEltbTMyIGltbSwgQmFz
ZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gMSkKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmluY3FfbShhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkcV9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9p
ZCBhZGQ2NChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7
CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lz
dGVyKCkpOwpAQCAtMzQyLDExICszNjAsNDEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxl
ci5hbmRxX3JyKHNyYywgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBhbmQ2NChSZWdpc3RlcklE
IHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9ybShz
cmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoUmVn
aXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YW5kcV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2Nh
bGUpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfbXIoc3JjLm9mZnNldCwgc3JjLmJh
c2UsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoQmFzZUluZGV4IHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9tcihzcmMub2Zmc2V0
LCBzcmMuYmFzZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUsIGRlc3QpOworICAgIH0KKwogICAgIHZv
aWQgYW5kNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAg
ICAgICAgbV9hc3NlbWJsZXIuYW5kcV9pcihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CiAgICAgfQog
CisgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVz
dC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJ
bmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9pbShpbW0ubV92YWx1
ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAg
fQorCiAgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0
KQogICAgIHsKICAgICAgICAgaW50cHRyX3QgaW50VmFsdWUgPSBpbW0uYXNJbnRwdHIoKTsKQEAg
LTU1MiwxMSArNjAwLDUxIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubmVncV9yKGRl
c3QpOwogICAgIH0KIAorICAgIHZvaWQgbmVnNjQoQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubmVncV9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwor
ICAgIHZvaWQgbmVnNjQoQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5uZWdxX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7
CisgICAgfQorCiAgICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5vcnFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAK
KyAgICB2b2lkIG9yNjQoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm9ycV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAg
IH0KKworICAgIHZvaWQgb3I2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5vcnFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNl
LCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yNjQoQWRkcmVz
cyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9t
cihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KEJh
c2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm9ycV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUsIGRlc3Qp
OworICAgIH0KKworICAgIHZvaWQgb3I2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnFfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zm
c2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgb3I2NChUcnVzdGVkSW1tMzIgaW1t
LCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9pbShpbW0u
bV92YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7
CisgICAgfQorCiAgICAgdm9pZCBvcjY0KFRydXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgc3Jj
RGVzdCkKICAgICB7CiAgICAgICAgIGlmIChpbW0ubV92YWx1ZSA8PSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptYXgoKQpAQCAtNjE5LDE2ICs3MDcsMzEgQEAgcHVibGljOgogICAgICAg
ICBtX2Fzc2VtYmxlci5zdWJxX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VicV9pbShpbW0ubV92
YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBzdWI2NChBZGRyZXNzIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc3VicV9tcihzcmMub2Zmc2V0LCBz
cmMuYmFzZSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBzdWI2NChCYXNlSW5kZXggc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX21yKHNyYy5v
ZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAgfQorCiAg
ICAgdm9pZCBzdWI2NChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAg
ICAgbV9hc3NlbWJsZXIuc3VicV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwogICAg
IH0KIAorICAgIHZvaWQgc3ViNjQoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VicV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgeG9yNjQoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVy
LnhvcnFfcnIoc3JjLCBkZXN0KTsKQEAgLTY1MSw2ICs3NTQsMzEgQEAgcHVibGljOgogICAgICAg
ICBtX2Fzc2VtYmxlci54b3JxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAg
fQogCisgICAgdm9pZCB4b3I2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci54b3JxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCB4b3I2NChBZGRy
ZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9y
cV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCB4b3I2
NChCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci54b3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwg
ZGVzdCk7CisgICAgfQorCisgICAgdm9pZCB4b3I2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JxX2ltKGltbS5tX3ZhbHVlLCBk
ZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9y
cV9pbShpbW0ubV92YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVz
dC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCB4b3I2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdp
c3RlcklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci54b3JxX2lyKGltbS5t
X3ZhbHVlLCBzcmNEZXN0KTsKQEAgLTY2Niw2ICs3OTQsMTEgQEAgcHVibGljOgogICAgICAgICBt
X2Fzc2VtYmxlci5ub3RxX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisgICAg
dm9pZCBub3Q2NChCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5v
dHFfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAg
ICB9CisKICAgICB2b2lkIGxvYWQ2NChJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9tcihhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKQEAgLTcyNSw2ICs4NTgsMTEgQEAgcHVibGljOgogICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZxX2kzMm0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3RvcmU2NChUcnVzdGVkSW1tMzIgaW1t
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfaTMy
bShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRl
eCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBzdG9yZTY0KFRydXN0ZWRJbW02
NCBpbW0sIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgaWYgKENBTl9T
SUdOX0VYVEVORF8zMl82NChpbW0ubV92YWx1ZSkpIHsKQEAgLTEyOTQsNyArMTQzMiwyNTUgQEAg
cHVibGljOgogICAgICAgICBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bW92ZShUcnVzdGVkSW1t
UHRyKGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoVGVzdDgoY29uZCwgQWRkcmVzcyhzY3JhdGNo
UmVnaXN0ZXIoKSksIG1hc2s4KTsKICAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdHJvbmdD
QVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwg
UmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkK
KyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwg
cmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hncV9ybShuZXdWYWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25n
Q0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQs
IFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3Vs
dCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3Vs
dCwgcmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hncV9ybShuZXdWYWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0p
OworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTNjQoUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2Vt
Ymxlci5jbXB4Y2hncV9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7
IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTNjQoUmVnaXN0ZXJJRCBleHBl
Y3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1f
YXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5i
YXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7CisgICAgfQogCisgICAgSnVt
cCBicmFuY2hBdG9taWNTdHJvbmdDQVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBl
Y3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFsdWUsIGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aEF0b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVj
dGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRB
bmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7
CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJv
bmdDQVM2NChjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MsIHJlc3Vs
dCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJh
c2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21p
Y1N0cm9uZ0NBUzY0KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywg
cmVzdWx0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM2NChTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0
b21pY1N0cm9uZ0NBUzY0KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVz
cyk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FTNjQoU3RhdHVzQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFs
dWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21p
Y1N0cm9uZ0NBUzY0KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcyk7
CisgICAgfQorCisgICAgdm9pZCBhdG9taWNBZGQ2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFk
ZDY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkNjQoVHJ1
c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIGFkZDY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQWRkNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkNjQocmVnLCBhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ2NChSZWdpc3RlcklEIHJlZywg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIGFkZDY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWlj
U3ViNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI2NChpbW0sIGFkZHJlc3MpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI2
NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjY0KFJlZ2lz
dGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIHN1YjY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgYXRvbWljU3ViNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI2NChyZWcsIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAg
ICAgYW5kNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQ2
NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNBbmQ2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ2NChyZWcs
IGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDY0KFJlZ2lzdGVySUQg
cmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgYW5kNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNPcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I2NChpbW0sIGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yNjQoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9y
NjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjY0KFJlZ2lz
dGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIG9yNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNPcjY0KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I2NChyZWcsIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
eG9yNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3I2NChU
cnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBhdG9taWNYb3I2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I2NChyZWcsIGFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjY0KFJlZ2lzdGVySUQgcmVn
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgeG9yNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNOZWc2NChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG5lZzY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y05lZzY0KEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBuZWc2NChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNOb3Q2NChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG5vdDY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y05vdDY0KEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBub3Q2NChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNYY2hnQWRkNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZHFfcm0ocmVn
LCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNYY2hnQWRkNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkcV9y
bShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJl
c3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGc2NChSZWdpc3RlcklE
IHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICBtX2Fzc2VtYmxlci54Y2hncV9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGc2NChSZWdpc3RlcklE
IHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgbG9hZEFjcTY0KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBsb2FkNjQoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkQWNx
NjQoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDY0
KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw2NChSZWdpc3RlcklE
IHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmU2NChzcmMsIGRlc3QpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsNjQoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRl
eCBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmU2NChzcmMsIGRlc3QpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHN0b3JlUmVsNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAg
IHsKKyAgICAgICAgc3RvcmU2NChpbW0sIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0
b3JlUmVsNjQoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAg
ICBzdG9yZTY0KGltbSwgZGVzdCk7CisgICAgfQorICAgIAogICAgIHZvaWQgdHJ1bmNhdGVEb3Vi
bGVUb1VpbnQzMihGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAg
ICAgICBtX2Fzc2VtYmxlci5jdnR0c2Qyc2lxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTAsMTYgKzE5MCwyMCBAQCBwcml2YXRlOgogICAg
ICAgICBPUF9BRERfRXZHdiAgICAgICAgICAgICAgICAgICAgID0gMHgwMSwKICAgICAgICAgT1Bf
QUREX0d2RXYgICAgICAgICAgICAgICAgICAgICA9IDB4MDMsCiAgICAgICAgIE9QX0FERF9FQVhJ
diAgICAgICAgICAgICAgICAgICAgPSAweDA1LAorICAgICAgICBPUF9PUl9FdkdiICAgICAgICAg
ICAgICAgICAgICAgID0gMHgwOCwKICAgICAgICAgT1BfT1JfRXZHdiAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDksCiAgICAgICAgIE9QX09SX0d2RXYgICAgICAgICAgICAgICAgICAgICAgPSAw
eDBCLAogICAgICAgICBPUF9PUl9FQVhJdiAgICAgICAgICAgICAgICAgICAgID0gMHgwRCwKICAg
ICAgICAgT1BfMkJZVEVfRVNDQVBFICAgICAgICAgICAgICAgICA9IDB4MEYsCisgICAgICAgIE9Q
X0FORF9FdkdiICAgICAgICAgICAgICAgICAgICAgPSAweDIwLAogICAgICAgICBPUF9BTkRfRXZH
diAgICAgICAgICAgICAgICAgICAgID0gMHgyMSwKICAgICAgICAgT1BfQU5EX0d2RXYgICAgICAg
ICAgICAgICAgICAgICA9IDB4MjMsCisgICAgICAgIE9QX1NVQl9FdkdiICAgICAgICAgICAgICAg
ICAgICAgPSAweDI4LAogICAgICAgICBPUF9TVUJfRXZHdiAgICAgICAgICAgICAgICAgICAgID0g
MHgyOSwKICAgICAgICAgT1BfU1VCX0d2RXYgICAgICAgICAgICAgICAgICAgICA9IDB4MkIsCiAg
ICAgICAgIE9QX1NVQl9FQVhJdiAgICAgICAgICAgICAgICAgICAgPSAweDJELAogICAgICAgICBQ
UkVfUFJFRElDVF9CUkFOQ0hfTk9UX1RBS0VOICAgID0gMHgyRSwKKyAgICAgICAgT1BfWE9SX0V2
R2IgICAgICAgICAgICAgICAgICAgICA9IDB4MzAsCiAgICAgICAgIE9QX1hPUl9Fdkd2ICAgICAg
ICAgICAgICAgICAgICAgPSAweDMxLAogICAgICAgICBPUF9YT1JfR3ZFdiAgICAgICAgICAgICAg
ICAgICAgID0gMHgzMywKICAgICAgICAgT1BfWE9SX0VBWEl2ICAgICAgICAgICAgICAgICAgICA9
IDB4MzUsCkBAIC0yMjMsNiArMjI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgT1BfR1JPVVAxX0V2
SWIgICAgICAgICAgICAgICAgICA9IDB4ODMsCiAgICAgICAgIE9QX1RFU1RfRWJHYiAgICAgICAg
ICAgICAgICAgICAgPSAweDg0LAogICAgICAgICBPUF9URVNUX0V2R3YgICAgICAgICAgICAgICAg
ICAgID0gMHg4NSwKKyAgICAgICAgT1BfWENIR19FdkdiICAgICAgICAgICAgICAgICAgICA9IDB4
ODYsCiAgICAgICAgIE9QX1hDSEdfRXZHdiAgICAgICAgICAgICAgICAgICAgPSAweDg3LAogICAg
ICAgICBPUF9NT1ZfRWJHYiAgICAgICAgICAgICAgICAgICAgID0gMHg4OCwKICAgICAgICAgT1Bf
TU9WX0V2R3YgICAgICAgICAgICAgICAgICAgICA9IDB4ODksCkBAIC0yNTIsNiArMjU3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgUFJFX1NTRV9GMiAgICAgICAgICAgICAgICAgICAgICA9IDB4RjIs
CiAgICAgICAgIFBSRV9TU0VfRjMgICAgICAgICAgICAgICAgICAgICAgPSAweEYzLAogICAgICAg
ICBPUF9ITFQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhGNCwKKyAgICAgICAgT1BfR1JP
VVAzX0ViICAgICAgICAgICAgICAgICAgICA9IDB4RjYsCiAgICAgICAgIE9QX0dST1VQM19FYkli
ICAgICAgICAgICAgICAgICAgPSAweEY2LAogICAgICAgICBPUF9HUk9VUDNfRXYgICAgICAgICAg
ICAgICAgICAgID0gMHhGNywKICAgICAgICAgT1BfR1JPVVAzX0V2SXogICAgICAgICAgICAgICAg
ICA9IDB4RjcsIC8vIE9QX0dST1VQM19FdiBoYXMgYW4gaW1tZWRpYXRlLCB3aGVuIGluc3RydWN0
aW9uIGlzIGEgdGVzdC4gCkBAIC0yOTAsNiArMjk2LDggQEAgcHJpdmF0ZToKICAgICAgICAgT1Bf
U0VUQ0MgICAgICAgICAgICA9IDB4OTAsCiAgICAgICAgIE9QMl8zQllURV9FU0NBUEVfQUUgPSAw
eEFFLAogICAgICAgICBPUDJfSU1VTF9HdkV2ICAgICAgID0gMHhBRiwKKyAgICAgICAgT1AyX0NN
UFhDSEdiICAgICAgICA9IDB4QjAsCisgICAgICAgIE9QMl9DTVBYQ0hHICAgICAgICAgPSAweEIx
LAogICAgICAgICBPUDJfTU9WWlhfR3ZFYiAgICAgID0gMHhCNiwKICAgICAgICAgT1AyX0JTRiAg
ICAgICAgICAgICA9IDB4QkMsCiAgICAgICAgIE9QMl9UWkNOVCAgICAgICAgICAgPSAweEJDLApA
QCAtMjk4LDYgKzMwNiw4IEBAIHByaXZhdGU6CiAgICAgICAgIE9QMl9NT1ZTWF9HdkViICAgICAg
PSAweEJFLAogICAgICAgICBPUDJfTU9WWlhfR3ZFdyAgICAgID0gMHhCNywKICAgICAgICAgT1Ay
X01PVlNYX0d2RXcgICAgICA9IDB4QkYsCisgICAgICAgIE9QMl9YQUREYiAgICAgICAgICAgPSAw
eEMwLAorICAgICAgICBPUDJfWEFERCAgICAgICAgICAgID0gMHhDMSwKICAgICAgICAgT1AyX1BF
WFRSV19HZFVkSWIgICA9IDB4QzUsCiAgICAgICAgIE9QMl9QU0xMUV9VZHFJYiAgICAgPSAweDcz
LAogICAgICAgICBPUDJfUFNSTFFfVWRxSWIgICAgID0gMHg3MywKQEAgLTQ0MCw2ICs0NTAsMTEg
QEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQUREX0d2RXYsIGRz
dCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAgICAgCisgICAgdm9pZCBhZGRsX21yKGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BRERfR3ZF
diwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAogI2lmICFD
UFUoWDg2XzY0KQogICAgIHZvaWQgYWRkbF9tcihjb25zdCB2b2lkKiBhZGRyLCBSZWdpc3RlcklE
IGRzdCkKICAgICB7CkBAIC01NjIsMTEgKzU3NywyMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9y
bWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0FERF9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CiAgICAg
fQogCisgICAgdm9pZCBhZGRxX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0
ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0FERF9HdkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2Fs
ZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIGFkZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcDY0KE9QX0FERF9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAg
dm9pZCBhZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Us
IFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0FERF9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0
KTsKKyAgICB9CisKICAgICB2b2lkIGFkZHFfaXIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAg
ICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgewpAQCAtNTkxLDYg
KzYxNiwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihp
bW0pOwogICAgICAgICB9CiAgICAgfQorCisgICAgdm9pZCBhZGRxX2ltKGludCBpbW0sIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAg
IHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQURELCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1l
ZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX0FERCwgYmFzZSwgaW5kZXgsIHNj
YWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsK
KyAgICAgICAgfQorICAgIH0KICNlbHNlCiAgICAgdm9pZCBhZGRsX2ltKGludCBpbW0sIGNvbnN0
IHZvaWQqIGFkZHIpCiAgICAgewpAQCAtNjE0LDExICs2NTAsNDMgQEAgcHVibGljOgogICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0d2RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsK
ICAgICB9CiAKKyAgICB2b2lkIGFuZGxfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBS
ZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9HdkV2LCBkc3QsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIGFuZGxfcm0oUmVnaXN0ZXJJRCBzcmMs
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcChPUF9BTkRfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAg
IHZvaWQgYW5kbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKworICAgIHZvaWQgYW5kd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9P
UEVSQU5EX1NJWkUpOworICAgICAgICBhbmRsX3JtKHNyYywgb2Zmc2V0LCBiYXNlKTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBhbmRsX3JtKHNyYywg
b2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgYW5kYl9ybShS
ZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9FdkdiLCBzcmMsIGJhc2UsIG9mZnNldCk7
CisgICAgfQorCisgICAgdm9pZCBhbmRiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfRXZHYiwgc3JjLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBhbmRsX2lyKGludCBpbW0sIFJlZ2lz
dGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkp
IHsKQEAgLTY0MSw2ICs3MDksNDEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAg
dm9pZCBhbmRsX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0
ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVO
RF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9V
UDFfRXZJYiwgR1JPVVAxX09QX0FORCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFf
T1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBhbmR3
X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgYW5kbF9pbShp
bW0sIG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBhbmR3X2ltKGludCBpbW0sIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAg
ICAgICBhbmRsX2ltKGltbSwgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKwor
ICAgIHZvaWQgYW5kYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQ
MV9PUF9BTkQsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgo
aW1tKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZGJfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVn
aXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQMV9PUF9BTkQsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRl
OChpbW0pOworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBhbmRxX3JyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC02NTcsNiArNzYwLDQ4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CiAgICAgICAg
IH0KICAgICB9CisKKyAgICB2b2lkIGFuZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0
KE9QX0FORF9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBhbmRx
X21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNj
YWxlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cDY0KE9QX0FORF9HdkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0FORF9F
dkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBhbmRxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0FO
RF9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIGFuZHFfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsK
KyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQU5ELCBiYXNl
LCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JP
VVAxX0V2SXosIEdST1VQMV9PUF9BTkQsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zv
cm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBh
bmRxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBp
bmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMy
KGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9F
dkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAg
ICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09Q
X0FORCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0
ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KICNlbHNlCiAgICAgdm9pZCBh
bmRsX2ltKGludCBpbW0sIGNvbnN0IHZvaWQqIGFkZHIpCiAgICAgewpAQCAtNzAzLDYgKzg0OCwx
MSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9H
Uk9VUDVfRXYsIEdST1VQMV9PUF9BREQsIGJhc2UsIG9mZnNldCk7CiAgICAgfQorCisgICAgdm9p
ZCBpbmNxX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBp
bnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9V
UDVfRXYsIEdST1VQMV9PUF9BREQsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CiAjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKIAogICAgIHZvaWQgbmVnbF9yKFJlZ2lzdGVySUQgZHN0
KQpAQCAtNzE1LDYgKzg2NSwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9ORUcsIGRzdCk7CiAgICAgfQor
CisgICAgdm9pZCBuZWdxX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1BfTkVH
LCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgbmVncV9tKGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1BfTkVHLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIG5l
Z2xfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCkBAIC03MjIsNiArODgyLDMzIEBAIHB1
YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQM19FdiwgR1JPVVAz
X09QX05FRywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIG5lZ2xfbShpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7
CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9O
RUcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG5lZ3df
bShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG5lZ2xfbShvZmZzZXQsIGJhc2Up
OworICAgIH0KKworICAgIHZvaWQgbmVnd19tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
cHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBuZWdsX20ob2Zmc2V0LCBiYXNlLCBp
bmRleCwgc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgbmVnYl9tKGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9V
UDNfRWIsIEdST1VQM19PUF9ORUcsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBu
ZWdiX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0Vi
LCBHUk9VUDNfT1BfTkVHLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAg
ICAgdm9pZCBub3RsX3IoUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1BfTk9ULCBkc3QpOwpAQCAtNzMyLDYg
KzkxOSwzMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9V
UDNfRXYsIEdST1VQM19PUF9OT1QsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBu
b3RsX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0V2
LCBHUk9VUDNfT1BfTk9ULCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisg
ICAgdm9pZCBub3R3X20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBub3RsX20o
b2Zmc2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG5vdHdfbShpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbm90bF9tKG9m
ZnNldCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIG5vdGJfbShpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfR1JPVVAzX0ViLCBHUk9VUDNfT1BfTk9ULCBiYXNlLCBvZmZzZXQpOworICAgIH0K
KworICAgIHZvaWQgbm90Yl9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0dST1VQM19FYiwgR1JPVVAzX09QX05PVCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBub3RxX3IoUmVnaXN0ZXJJRCBk
c3QpCiAgICAgewpAQCAtNzQyLDYgKzk1NiwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1QsIGJhc2Us
IG9mZnNldCk7CiAgICAgfQorCisgICAgdm9pZCBub3RxX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1QsIGJhc2UsIGlu
ZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYKIAogICAgIHZvaWQgb3JsX3JyKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKQEAgLTc1NCwxMSArOTczLDQzIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0d2RXYsIGRzdCwgYmFzZSwg
b2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIG9ybF9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfR3ZFdiwgZHN0LCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBvcmxfcm0oUmVnaXN0ZXJJ
RCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9y
bWF0dGVyLm9uZUJ5dGVPcChPUF9PUl9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQog
CisgICAgdm9pZCBvcmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZz
ZXQpOworICAgIH0KKworICAgIHZvaWQgb3J3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJF
X09QRVJBTkRfU0laRSk7CisgICAgICAgIG9ybF9ybShzcmMsIG9mZnNldCwgYmFzZSk7CisgICAg
fQorCisgICAgdm9pZCBvcndfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBvcmxfcm0oc3JjLCBv
ZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcmJfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9PUl9FdkdiLCBzcmMsIGJhc2UsIG9mZnNldCk7Cisg
ICAgfQorCisgICAgdm9pZCBvcmJfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R2IsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgb3JsX2lyKGludCBpbW0sIFJlZ2lzdGVySUQg
ZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKQEAg
LTc4NCwxMiArMTAzNSw4OSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lk
IG9ybF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQg
aW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8z
MihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2
SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAg
ICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfT1Is
IGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG9yd19pbShpbnQg
aW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1h
dHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG9ybF9pbShpbW0sIG9mZnNl
dCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcndfaW0oaW50IGltbSwgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG9ybF9p
bShpbW0sIG9mZnNldCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIG9y
Yl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQMV9PUF9PUiwgYmFz
ZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0K
KworICAgIHZvaWQgb3JiX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQMV9FYkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBzY2Fs
ZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0K
KwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBvcnFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfT1Jf
RXZHdiwgc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgb3JxX21yKGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3A2NChPUF9PUl9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisg
ICAgdm9pZCBvcnFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGlu
ZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wNjQoT1BfT1JfR3ZFdiwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNl
dCk7CisgICAgfQorCisgICAgdm9pZCBvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0
KE9QX09SX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG9ycV9y
bShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklE
IGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9PUl9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisK
KyAgICB2b2lkIG9ycV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9PUiwg
YmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9Q
X0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9p
ZCBvcnFfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklE
IGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhf
MzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAx
X0V2SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9P
UF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0
ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgb3JxX2ly
KGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VY
VEVORF84XzMyKGltbSkpIHsKQEAgLTgzMSwxMSArMTE1OSw0MyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfR3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwog
ICAgIH0KIAorICAgIHZvaWQgc3VibF9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNj
YWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgc3VibF9ybShSZWdpc3RlcklEIHNyYywg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX1NVQl9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAg
dm9pZCBzdWJsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Us
IFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7
CisgICAgfQorCisgICAgdm9pZCBzdWJ3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09Q
RVJBTkRfU0laRSk7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHdiwg
c3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgc3Vid19ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0la
RSk7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHdiwgc3JjLCBiYXNl
LCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBzdWJiX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0V2R2IsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICB2b2lkIHN1YmJfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9FdkdiLCBzcmMsIGJhc2UsIGluZGV4LCBzY2Fs
ZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIHN1YmxfaXIoaW50IGltbSwgUmVnaXN0ZXJJ
RCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgewpA
QCAtODYxLDYgKzEyMjEsNDEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9p
ZCBzdWJsX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84
XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFf
RXZJYiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1Bf
U1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWJ3X2lt
KGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1f
Zm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgc3VibF9pbShpbW0s
IG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBzdWJ3X2ltKGludCBpbW0sIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAg
ICBzdWJsX2ltKGltbSwgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAg
IHZvaWQgc3ViYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQMV9P
UF9TVUIsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1t
KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YmJfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0
ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQMV9PUF9TVUIsIGJhc2Us
IGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChp
bW0pOworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBzdWJxX3JyKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC04NzIsMTEgKzEyNjcsMjEgQEAgcHVi
bGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9TVUJfR3ZFdiwgZHN0LCBi
YXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgc3VicV9tcihpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9TVUJfR3ZFdiwgZHN0
LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBzdWJxX3Jt
KFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBvZmZz
ZXQpOwogICAgIH0KIAorICAgIHZvaWQgc3VicV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBzdWJxX2lyKGludCBpbW0s
IFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMy
KGltbSkpIHsKQEAgLTkwMSw2ICsxMzA2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9y
bWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICB2b2lkIHN1
YnFfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGlu
ZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIo
aW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2
SWIsIEdST1VQMV9PUF9TVUIsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1Bf
U1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQogI2Vsc2UKICAgICB2b2lkIHN1
YmxfaW0oaW50IGltbSwgY29uc3Qgdm9pZCogYWRkcikKICAgICB7CkBAIC05MjQsMTEgKzEzNDAs
MjEgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWE9SX0d2RXYs
IGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHhvcmxfbXIoaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hPUl9HdkV2
LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIHhv
cmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7
CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YT1JfRXZHdiwgc3JjLCBiYXNlLCBv
ZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgeG9ybF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwg
aW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgeG9ybF9pbShpbnQgaW1t
LCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJ
R05fRVhURU5EXzhfMzIoaW1tKSkgewpAQCAtOTQwLDYgKzEzNjYsNjMgQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgfQogCisgICAgdm9pZCB4b3JsX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAg
ICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0p
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9Q
X0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7
CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdm9pZCB4b3J3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJB
TkRfU0laRSk7CisgICAgICAgIHhvcmxfcm0oc3JjLCBvZmZzZXQsIGJhc2UpOworICAgIH0KKwor
ICAgIHZvaWQgeG9yd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1h
dHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIHhvcmxfcm0oc3JjLCBvZmZz
ZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9pZCB4b3J3X2ltKGludCBp
bW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgeG9ybF9pbShpbW0sIG9mZnNl
dCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCB4b3J3X2ltKGludCBpbW0sIGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICB4b3Js
X2ltKGltbSwgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAgIHZvaWQg
eG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hPUl9FdkdiLCBzcmMsIGJhc2Us
IG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCB4b3JiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YT1JfRXZHYiwgc3JjLCBiYXNl
LCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCB4b3JiX2ltKGludCBp
bW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgb2Zmc2V0
KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKworICAgIHZv
aWQgeG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVy
SUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cChPUF9HUk9VUDFfRWJJYiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZz
ZXQpOworICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCiAgICAg
dm9pZCB4b3JsX2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYg
KENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTk3NCwxMSArMTQ1Nyw0NyBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9pZCB4b3JxX2ltKGludCBpbW0sIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9F
WFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChP
UF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfWE9S
LCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1t
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHhvcnFfaW0oaW50IGltbSwgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9YT1Is
IGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0p
OworICAgICAgICB9CisgICAgfQorICAgIAogICAgIHZvaWQgeG9ycV9ybShSZWdpc3RlcklEIHNy
YywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wNjQoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAK
KyAgICB2b2lkIHhvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wNjQoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgeG9ycV9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcDY0KE9QX1hPUl9HdkV2LCBkZXN0LCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZv
aWQgeG9ycV9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfWE9SX0d2RXYsIGRlc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0
KTsKKyAgICB9CiAjZW5kaWYKIAogICAgIHZvaWQgbHpjbnRfcnIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZHN0KQpAQCAtMTU4NiwxMSArMjEwNSwzOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGRzdCk7CiAgICAgfQog
CisgICAgdm9pZCB4Y2hnYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdfRXZH
Yiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgeGNoZ2Jfcm0oUmVnaXN0
ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdf
RXZHYiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9p
ZCB4Y2hnd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNl
dCk7CisgICAgfQorCisgICAgdm9pZCB4Y2hnd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgeGNoZ2xfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2
b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Us
IFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCB4Y2hncV9ycihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewpAQCAtMTYwNiw2ICsyMTUyLDExIEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwg
c3JjLCBiYXNlLCBvZmZzZXQpOwogICAgIH0KKworICAgIHZvaWQgeGNoZ3Ffcm0oUmVnaXN0ZXJJ
RCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50
IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfWENIR19F
dkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYKIAog
ICAgIHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCkBAIC0xNzMx
LDYgKzIyODIsMTggQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A4KE9Q
X01PVl9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAg
ICB2b2lkIG1vdndfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAg
ICBtb3ZsX2kzMm0oaW1tLCBvZmZzZXQsIGJhc2UpOworICAgIH0KKworICAgIHZvaWQgbW92d19p
bShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFO
RF9TSVpFKTsKKyAgICAgICAgbW92bF9pMzJtKGltbSwgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2Nh
bGUpOworICAgIH0KKwogICAgIHZvaWQgbW92bF9FQVhtKGNvbnN0IHZvaWQqIGFkZHIpCiAgICAg
ewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfTU9WX092RUFYKTsKQEAgLTE4MDAs
NiArMjM2MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGlt
bSk7CiAgICAgfQogCisgICAgdm9pZCBtb3ZxX2kzMm0oaW50IGltbSwgaW50IG9mZnNldCwgUmVn
aXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDExX0V2SXosIEdST1VQMTFfTU9WLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZTMyKGltbSk7CisgICAgfQorCiAgICAgdm9pZCBtb3ZxX2k2NHIoaW50NjRfdCBpbW0sIFJlZ2lz
dGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfTU9W
X0VBWEl2LCBkc3QpOwpAQCAtMjc3NSw2ICszMzQ0LDkwIEBAIHB1YmxpYzoKICAgICAgICAgbV9m
b3JtYXR0ZXIucHJlZml4KFBSRV9MT0NLKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjbXB4Y2hn
Yl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfQ01QWENIR2IsIHNyYywgYmFzZSwg
b2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnYl9ybShSZWdpc3RlcklEIHNy
YywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KE9QMl9DTVBYQ0hHYiwg
c3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y21weGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9DTVBYQ0hHLCBzcmMsIGJhc2UsIG9mZnNl
dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY21weGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAg
ICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdsX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgaW5k
ZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdxX3JtKFJl
Z2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAg
ICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfQ01QWENIRywgc3JjLCBiYXNlLCBvZmZzZXQp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9DTVBYQ0hHLCBzcmMsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkYl9y
bShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfWEFERGIsIHNyYywgYmFzZSwgb2Zmc2V0
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KE9QMl9YQUREYiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZHdfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0
ZXIudHdvQnl0ZU9wKE9QMl9YQURELCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgeGFkZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci50d29C
eXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHhhZGRsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX1hB
REQsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkbF9ybShS
ZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGlu
ZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1Ay
X1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHhhZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfWEFERCwgc3Jj
LCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRxX3JtKFJlZ2lzdGVy
SUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGlu
dCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9YQURE
LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCiAgICAgdm9p
ZCBtZmVuY2UoKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIudGhyZWVCeXRlT3AoT1AyXzNC
WVRFX0VTQ0FQRV9BRSwgT1AzX01GRU5DRSk7CkBAIC0zNzUxLDYgKzQ0MDQsMjQgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHdyaXRlci5yZWdpc3Rlck1vZFJNKGdyb3VwT3AsIHJtKTsKICAgICAg
ICAgfQogCisgICAgICAgIHZvaWQgdHdvQnl0ZU9wOChUd29CeXRlT3Bjb2RlSUQgb3Bjb2RlLCBp
bnQgcmVnLCBSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFNpbmdsZUluc3RydWN0aW9uQnVmZmVyV3JpdGVyIHdyaXRlcihtX2J1ZmZlcik7CisgICAg
ICAgICAgICB3cml0ZXIuZW1pdFJleElmKGJ5dGVSZWdSZXF1aXJlc1JleChyZWcsIGJhc2UpLCBy
ZWcsIDAsIGJhc2UpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5dGVVbmNoZWNrZWQoT1BfMkJZ
VEVfRVNDQVBFKTsKKyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRlVW5jaGVja2VkKG9wY29kZSk7
CisgICAgICAgICAgICB3cml0ZXIubWVtb3J5TW9kUk0ocmVnLCBiYXNlLCBvZmZzZXQpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCB0d29CeXRlT3A4KFR3b0J5dGVPcGNvZGVJRCBvcGNvZGUs
IGludCByZWcsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBp
bnQgb2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBTaW5nbGVJbnN0cnVjdGlvbkJ1ZmZl
cldyaXRlciB3cml0ZXIobV9idWZmZXIpOworICAgICAgICAgICAgd3JpdGVyLmVtaXRSZXhJZihi
eXRlUmVnUmVxdWlyZXNSZXgocmVnKSB8fCByZWdSZXF1aXJlc1JleChpbmRleCwgYmFzZSksIHJl
ZywgaW5kZXgsIGJhc2UpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5dGVVbmNoZWNrZWQoT1Bf
MkJZVEVfRVNDQVBFKTsKKyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRlVW5jaGVja2VkKG9wY29k
ZSk7CisgICAgICAgICAgICB3cml0ZXIubWVtb3J5TW9kUk0ocmVnLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBJbW1lZGlhdGVzOgogICAgICAg
ICAvLwogICAgICAgICAvLyBBbiBpbW1lZGFpdGUgc2hvdWxkIGJlIGFwcGVuZGVkIHdoZXJlIGFw
cHJvcHJpYXRlIGFmdGVyIGFuIG9wIGhhcyBiZWVuIGVtaXR0ZWQuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQXRvbWljVmFsdWUuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBdG9t
aWNWYWx1ZTo6fkF0b21pY1ZhbHVlKCkKK3sKK30KKworV2lkdGggQXRvbWljVmFsdWU6OmFjY2Vz
c1dpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93aWR0aDsKK30KKwordm9pZCBBdG9taWNW
YWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoY29tbWEsICJ3aWR0aCA9ICIsIG1fd2lkdGgpOworICAgIAor
ICAgIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShjb21tYSwgb3V0KTsKK30KKworVmFsdWUqIEF0b21p
Y1ZhbHVlOjpjbG9uZUltcGwoKSBjb25zdAoreworICAgIHJldHVybiBuZXcgQXRvbWljVmFsdWUo
KnRoaXMpOworfQorCitBdG9taWNWYWx1ZTo6QXRvbWljVmFsdWUoS2luZCBraW5kLCBPcmlnaW4g
b3JpZ2luLCBXaWR0aCB3aWR0aCwgVmFsdWUqIG9wZXJhbmQsIFZhbHVlKiBwb2ludGVyLCBpbnQz
Ml90IG9mZnNldCA9IDApCisgICAgOiBNZW1vcnlWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCBv
cGVyYW5kLT50eXBlKCksIG9yaWdpbiwgb2Zmc2V0LCBvcGVyYW5kLCBwb2ludGVyKQorICAgICwg
bV93aWR0aCh3aWR0aCkKK3sKKyAgICBzZXRGZW5jZVJhbmdlKEhlYXBSYW5nZTo6dG9wKCkpOwor
ICAgIAorICAgIEFTU0VSVChiZXN0VHlwZShvcGVyYXRpb25XaWR0aCgpKSA9PSBvcGVyYXRpb25U
eXBlKCkpOworICAgIAorICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgIGNhc2UgQXRv
bWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hn
T3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAg
ICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworQXRvbWljVmFsdWU6OkF0b21pY1Zh
bHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgV2lkdGggd2lkdGgsIFZhbHVlKiBleHBlY3Rl
ZFZhbHVlLCBWYWx1ZSogbmV3VmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9
IDApCisgICAgOiBNZW1vcnlWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCBraW5kLm9wY29kZSgp
ID09IEF0b21pY1dlYWtDQVMgPyBJbnQzMiA6IGV4cGVjdGVkVmFsdWUtPnR5cGUoKSwgb3JpZ2lu
LCBvZmZzZXQsIGV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlLCBwb2ludGVyKQorICAgICwgbV93aWR0
aCh3aWR0aCkKK3sKKyAgICBzZXRGZW5jZVJhbmdlKEhlYXBSYW5nZTo6dG9wKCkpOworICAgIAor
ICAgIEFTU0VSVChiZXN0VHlwZShvcGVyYXRpb25XaWR0aCgpKSA9PSBvcGVyYXRpb25UeXBlKCkp
OworCisgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7CisgICAgY2FzZSBBdG9taWNXZWFrQ0FT
OgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzTWVtb3J5
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1dpZHRoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBBdG9taWNWYWx1ZSA6IHB1YmxpYyBN
ZW1vcnlWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhLaW5kIGtpbmQp
CisgICAgeworICAgICAgICByZXR1cm4gaXNBdG9taWMoa2luZC5vcGNvZGUoKSk7CisgICAgfQor
ICAgIAorICAgIH5BdG9taWNWYWx1ZSgpOworICAgIAorICAgIFR5cGUgb3BlcmF0aW9uVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIGNoaWxkKDApLT50eXBlKCk7IH0KKyAgICAKKyAgICBXaWR0aCBvcGVy
YXRpb25XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICAKKyAgICAvLyBTeW5v
bnltIGZvciBvcGVyYXRpb25XaWR0aCgpLCBpZiB5b3UncmUgYWNjZXNzaW5nIHZpYSBNZW1vcnlW
YWx1ZS4KKyAgICBXaWR0aCBhY2Nlc3NXaWR0aCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJv
dGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBWYWx1ZSogY2xvbmVJbXBsKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisg
ICAgQXRvbWljVmFsdWUoS2luZCwgT3JpZ2luLCBXaWR0aCwgVmFsdWUqIG9wZXJhbmQsIFZhbHVl
KiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAgIAorICAgIEF0b21pY1ZhbHVlKEtp
bmQsIE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBleHBlY3RlZFZhbHVlLCBWYWx1ZSogbmV3VmFsdWUs
IFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAgIAorICAgIFdpZHRoIG1f
d2lkdGg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0
aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9j
a0luc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwzNSArMzYs
MTMgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBCbG9ja0luc2VydGlvblNl
dDo6QmxvY2tJbnNlcnRpb25TZXQoUHJvY2VkdXJlICZwcm9jKQotICAgIDogbV9wcm9jKHByb2Mp
CisgICAgOiBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQocHJvYy5tX2Jsb2NrcykKKyAgICAsIG1f
cHJvYyhwcm9jKQogewogfQogCiBCbG9ja0luc2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0
KCkgeyB9CiAKLXZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChCbG9ja0luc2VydGlvbiYm
IGluc2VydGlvbikKLXsKLSAgICBtX2luc2VydGlvbnMuYXBwZW5kKFdURk1vdmUoaW5zZXJ0aW9u
KSk7Ci19Ci0KLUJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQodW5zaWduZWQg
aW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxv
Y2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFYLCBmcmVxdWVuY3kpKTsKLSAgICBCYXNp
Y0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKLSAgICBpbnNlcnQoQmxvY2tJbnNlcnRpb24o
aW5kZXgsIFdURk1vdmUoYmxvY2spKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQmFzaWNC
bG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUs
IGRvdWJsZSBmcmVxdWVuY3kpCi17Ci0gICAgcmV0dXJuIGluc2VydChiZWZvcmUtPmluZGV4KCks
IGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBiZWZvcmUtPmZyZXF1ZW5jeSgp
KTsKLX0KLQotQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydEFmdGVyKEJhc2lj
QmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5KQotewotICAgIHJldHVybiBpbnNlcnQoYWZ0
ZXItPmluZGV4KCkgKyAxLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYWZ0
ZXItPmZyZXF1ZW5jeSgpKTsKLX0KLQogQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6OnNw
bGl0Rm9yd2FyZCgKICAgICBCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQmIHZhbHVlSW5kZXgs
IEluc2VydGlvblNldCogaW5zZXJ0aW9uU2V0LCBkb3VibGUgZnJlcXVlbmN5KQogewpAQCAtMTAy
LDMyICs4MCw2IEBAIEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjpzcGxpdEZvcncKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIEJsb2NrSW5zZXJ0aW9uU2V0OjpleGVjdXRlKCkK
LXsKLSAgICBpZiAobV9pbnNlcnRpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIC8vIFdlIGFsbG93IGluc2VydGlvbnMgdG8gYmUgZ2l2ZW4gdG8gdXMgaW4g
YW55IG9yZGVyLiBTbywgd2UgbmVlZCB0byBzb3J0IHRoZW0gYmVmb3JlCi0gICAgLy8gcnVubmlu
ZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25zLiBXZSBzdHJvbmdseSBwcmVmZXIgYSBzdGFibGUgc29y
dCBhbmQgd2Ugd2FudCBpdCB0byBiZQotICAgIC8vIGZhc3QsIHNvIHdlIHVzZSBidWJibGUgc29y
dC4KLSAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5k
KCkpOwotCi0gICAgZXhlY3V0ZUluc2VydGlvbnMobV9wcm9jLm1fYmxvY2tzLCBtX2luc2VydGlv
bnMpOwotICAgIAotICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRyaWVzLiBUaGlzIGlzbid0IHN0
cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncwotICAgIC8vIGhlYWx0aHkgdG8ga2VlcCB0aGUgYmxv
Y2sgbGlzdCBmcm9tIGdyb3dpbmcuCi0gICAgbV9wcm9jLm1fYmxvY2tzLnJlbW92ZUFsbE1hdGNo
aW5nKAotICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiYgYmxvY2tQdHIp
IC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuICFibG9ja1B0cjsKLSAgICAgICAgfSk7Ci0g
ICAgCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJsb2NrcyBrbm93IHRoZWlyIG5ldyBpbmRp
Y2VzLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb2MubV9ibG9ja3Muc2l6ZSgp
OyArK2kpCi0gICAgICAgIG1fcHJvYy5tX2Jsb2Nrc1tpXS0+bV9pbmRleCA9IGk7Ci0gICAgCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiAjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2Nr
SW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QmxvY2tJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYg
KzI3LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0dlbmVyaWNCbG9j
a0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCiAjaW5jbHVkZSA8d3Rm
L0luc2VydGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTM1LDI2ICszNiwxMyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgSW5zZXJ0aW9uU2V0Owog
Ci10eXBlZGVmIFdURjo6SW5zZXJ0aW9uPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gQmxv
Y2tJbnNlcnRpb247Cit0eXBlZGVmIEdlbmVyaWNCbG9ja0luc2VydGlvblNldDxCYXNpY0Jsb2Nr
Pjo6QmxvY2tJbnNlcnRpb24gQmxvY2tJbnNlcnRpb247CiAKLWNsYXNzIEJsb2NrSW5zZXJ0aW9u
U2V0IHsKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0IDogcHVibGljIEdlbmVyaWNCbG9ja0luc2Vy
dGlvblNldDxCYXNpY0Jsb2NrPiB7CiBwdWJsaWM6CiAgICAgQmxvY2tJbnNlcnRpb25TZXQoUHJv
Y2VkdXJlJik7CiAgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CiAgICAgCi0gICAgdm9pZCBpbnNl
cnQoQmxvY2tJbnNlcnRpb24mJik7Ci0KLSAgICAvLyBJbnNlcnQgYSBuZXcgYmxvY2sgYXQgYSBn
aXZlbiBpbmRleC4KLSAgICBCYXNpY0Jsb2NrKiBpbnNlcnQodW5zaWduZWQgaW5kZXgsIGRvdWJs
ZSBmcmVxdWVuY3kgPSBQTmFOKTsKLQotICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYmVmb3Jl
IHRoZSBnaXZlbiBibG9jay4gVXN1YWxseSB5b3Ugd2lsbCBub3QgcGFzcyB0aGUgZnJlcXVlbmN5
Ci0gICAgLy8gYXJndW1lbnQuIFBhc3NpbmcgUE5hTiBjYXVzZXMgdXMgdG8ganVzdCB1c2UgdGhl
IGZyZXF1ZW5jeSBvZiB0aGUgJ2JlZm9yZScgYmxvY2suIFRoYXQncwotICAgIC8vIHVzdWFsbHkg
d2hhdCB5b3Ugd2FudC4KLSAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayog
YmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7Ci0KLSAgICAvLyBJbnNlcnRzIGEgbmV3
IGJsb2NrIGFmdGVyIHRoZSBnaXZlbiBibG9jay4KLSAgICBCYXNpY0Jsb2NrKiBpbnNlcnRBZnRl
cihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOwotCiAgICAgLy8g
QSBoZWxwZXIgdG8gc3BsaXQgYSBibG9jayB3aGVuIGZvcndhcmQgaXRlcmF0aW5nIG92ZXIgaXQu
IEl0IGNyZWF0ZXMgYSBuZXcgYmxvY2sgdG8gaG9sZAogICAgIC8vIGV2ZXJ5dGhpbmcgYmVmb3Jl
IHRoZSBpbnN0cnVjdGlvbiBhdCB2YWx1ZUluZGV4LiBUaGUgY3VycmVudCBibG9jayBpcyBsZWZ0
IHdpdGgKICAgICAvLyBldmVyeXRoaW5nIGF0IGFuZCBhZnRlciB2YWx1ZUluZGV4LiBJZiB0aGUg
b3B0aW9uYWwgSW5zZXJ0aW9uU2V0IGlzIHByb3ZpZGVkLCBpdCB3aWxsIGdldApAQCAtODAsMTIg
KzY4LDkgQEAgcHVibGljOgogICAgIEJhc2ljQmxvY2sqIHNwbGl0Rm9yd2FyZCgKICAgICAgICAg
QmFzaWNCbG9jayosIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqID0gbnVsbHB0
ciwKICAgICAgICAgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOwotICAgIAotICAgIGJvb2wgZXhl
Y3V0ZSgpOwogCiBwcml2YXRlOgogICAgIFByb2NlZHVyZSYgbV9wcm9jOwotICAgIFZlY3RvcjxC
bG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmNwcAkocmV2aXNp
b24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDggQEAgYm9vbCBFZmZlY3RzOjppbnRlcmZlcmVzKGNv
bnN0IEVmZmVjdHMmIAogICAgICAgICB8fCBpbnRlcmZlcmVzV2l0aFdyaXRlc1Bpbm5lZChvdGhl
ciwgKnRoaXMpCiAgICAgICAgIHx8IHdyaXRlcy5vdmVybGFwcyhvdGhlci53cml0ZXMpCiAgICAg
ICAgIHx8IHdyaXRlcy5vdmVybGFwcyhvdGhlci5yZWFkcykKLSAgICAgICAgfHwgcmVhZHMub3Zl
cmxhcHMob3RoZXIud3JpdGVzKTsKKyAgICAgICAgfHwgcmVhZHMub3ZlcmxhcHMob3RoZXIud3Jp
dGVzKQorICAgICAgICB8fCAoZmVuY2UgJiYgb3RoZXIuZmVuY2UpOwogfQogCiBib29sIEVmZmVj
dHM6Om9wZXJhdG9yPT0oY29uc3QgRWZmZWN0cyYgb3RoZXIpIGNvbnN0CkBAIC05NSw3ICs5Niw4
IEBAIGJvb2wgRWZmZWN0czo6b3BlcmF0b3I9PShjb25zdCBFZmZlY3RzJiAKICAgICAgICAgJiYg
d3JpdGVzUGlubmVkID09IG90aGVyLndyaXRlc1Bpbm5lZAogICAgICAgICAmJiByZWFkc1Bpbm5l
ZCA9PSBvdGhlci5yZWFkc1Bpbm5lZAogICAgICAgICAmJiB3cml0ZXMgPT0gb3RoZXIud3JpdGVz
Ci0gICAgICAgICYmIHJlYWRzID09IG90aGVyLnJlYWRzOworICAgICAgICAmJiByZWFkcyA9PSBv
dGhlci5yZWFkcworICAgICAgICAmJiBmZW5jZSA9PSBvdGhlci5mZW5jZTsKIH0KIAogYm9vbCBF
ZmZlY3RzOjpvcGVyYXRvciE9KGNvbnN0IEVmZmVjdHMmIG90aGVyKSBjb25zdApAQCAtMTIwLDYg
KzEyMiw4IEBAIHZvaWQgRWZmZWN0czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb24KICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAiV3JpdGVzUGlubmVkIik7CiAgICAgaWYgKHJlYWRzUGlubmVk
KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJSZWFkc1Bpbm5lZCIpOworICAgIGlmIChmZW5j
ZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiRmVuY2UiKTsKICAgICBpZiAod3JpdGVzKQog
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXcml0ZXM6Iiwgd3JpdGVzKTsKICAgICBpZiAocmVh
ZHMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCShyZXZpc2lvbiAyMTI5
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDYgKzcxLDEwIEBAIHN0cnVjdCBFZmZlY3RzIHsKICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMTczCiAgICAgYm9vbCByZWFkc1Bpbm5l
ZCB7IGZhbHNlIH07CiAgICAgYm9vbCB3cml0ZXNQaW5uZWQgeyBmYWxzZSB9OworICAgIAorICAg
IC8vIE1lbW9yeSBmZW5jZXMgY2Fubm90IGJlIHJlb3JkZXJlZCBhcm91bmQgZWFjaCBvdGhlciBy
ZWdhcmRsZXNzIG9mIHRoZWlyIGVmZmVjdHMuIFRoaXMgaXMgZmxhZ2dlZAorICAgIC8vIGlmIHRo
ZSBvcGVyYXRpb24gaXMgYSBtZW1vcnkgZmVuY2UuCisgICAgYm9vbCBmZW5jZSB7IGZhbHNlIH07
CiAKICAgICBIZWFwUmFuZ2Ugd3JpdGVzOwogICAgIEhlYXBSYW5nZSByZWFkczsKQEAgLTg5LDYg
KzkzLDcgQEAgc3RydWN0IEVmZmVjdHMgewogICAgICAgICByZXN1bHQucmVhZHMgPSBIZWFwUmFu
Z2U6OnRvcCgpOwogICAgICAgICByZXN1bHQucmVhZHNQaW5uZWQgPSB0cnVlOwogICAgICAgICBy
ZXN1bHQud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTEwMyw3ICsxMDgsNyBAQCBzdHJ1
Y3QgRWZmZWN0cyB7CiAKICAgICBib29sIG11c3RFeGVjdXRlKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiB0ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRlc0xvY2FsU3RhdGUg
fHwgd3JpdGVzIHx8IHdyaXRlc1Bpbm5lZDsKKyAgICAgICAgcmV0dXJuIHRlcm1pbmFsIHx8IGV4
aXRzU2lkZXdheXMgfHwgd3JpdGVzTG9jYWxTdGF0ZSB8fCB3cml0ZXMgfHwgd3JpdGVzUGlubmVk
IHx8IGZlbmNlOwogICAgIH0KIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiByZW9yZGVyaW5nIGlu
c3RydWN0aW9ucyB3aXRoIHRoZXNlIHJlc3BlY3RpdmUgZWZmZWN0cyB3b3VsZCBjaGFuZ2UgcHJv
Z3JhbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3Vi
ZXhwcmVzc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTE0Miw2ICsxNDIsNyBAQCBzdHJ1Y3QgSW1wdXJlQmxvY2tEYXRh
IHsKIAogICAgIFJhbmdlU2V0PEhlYXBSYW5nZT4gcmVhZHM7IC8vIFRoaXMgb25seSBnZXRzIHVz
ZWQgZm9yIGZvcndhcmQgc3RvcmUgZWxpbWluYXRpb24uCiAgICAgUmFuZ2VTZXQ8SGVhcFJhbmdl
PiB3cml0ZXM7IC8vIFRoaXMgZ2V0cyB1c2VkIGZvciBib3RoIGxvYWQgYW5kIHN0b3JlIGVsaW1p
bmF0aW9uLgorICAgIGJvb2wgZmVuY2U7CiAKICAgICBNZW1vcnlWYWx1ZU1hcCBzdG9yZXNBdEhl
YWQ7CiAgICAgTWVtb3J5VmFsdWVNYXAgbWVtb3J5VmFsdWVzQXRUYWlsOwpAQCAtMTc0LDEyICsx
NzUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICht
ZW1vcnkgJiYgbWVtb3J5LT5pc1N0b3JlKCkKICAgICAgICAgICAgICAgICAgICAgJiYgIWRhdGEu
cmVhZHMub3ZlcmxhcHMobWVtb3J5LT5yYW5nZSgpKQotICAgICAgICAgICAgICAgICAgICAmJiAh
ZGF0YS53cml0ZXMub3ZlcmxhcHMobWVtb3J5LT5yYW5nZSgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgJiYgIWRhdGEud3JpdGVzLm92ZXJsYXBzKG1lbW9yeS0+cmFuZ2UoKSkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgKCFkYXRhLmZlbmNlIHx8ICFtZW1vcnktPmhhc0ZlbmNlKCkpKQogICAgICAg
ICAgICAgICAgICAgICBkYXRhLnN0b3Jlc0F0SGVhZC5hZGQobWVtb3J5KTsKICAgICAgICAgICAg
ICAgICBkYXRhLnJlYWRzLmFkZChlZmZlY3RzLnJlYWRzKTsKIAogICAgICAgICAgICAgICAgIGlm
IChIZWFwUmFuZ2Ugd3JpdGVzID0gZWZmZWN0cy53cml0ZXMpCiAgICAgICAgICAgICAgICAgICAg
IGNsb2JiZXIoZGF0YSwgd3JpdGVzKTsKKyAgICAgICAgICAgICAgICBkYXRhLmZlbmNlIHw9IGVm
ZmVjdHMuZmVuY2U7CiAKICAgICAgICAgICAgICAgICBpZiAobWVtb3J5KQogICAgICAgICAgICAg
ICAgICAgICBkYXRhLm1lbW9yeVZhbHVlc0F0VGFpbC5hZGQobWVtb3J5KTsKQEAgLTQ3OCw2ICs0
ODEsOSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlcj4KICAgICBib29s
IGZpbmRTdG9yZUFmdGVyQ2xvYmJlcihWYWx1ZSogcHRyLCBIZWFwUmFuZ2UgcmFuZ2UsIGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpLT5oYXNGZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
ICAgICAgICAgLy8gV2UgY2FuIGVsaW1pbmF0ZSBhIHN0b3JlIGlmIGV2ZXJ5IGZvcndhcmQgcGF0
aCBoaXRzIGEgc3RvcmUgdG8gdGhlIHNhbWUgbG9jYXRpb24gYmVmb3JlCiAgICAgICAgIC8vIGhp
dHRpbmcgYW55IG9wZXJhdGlvbiB0aGF0IG9ic2VydmVzIHRoZSBzdG9yZS4gVGhpcyBzZWFyY2gg
c2VlbXMgbGlrZSBpdCBzaG91bGQgYmUKICAgICAgICAgLy8gZXhwZW5zaXZlLCBidXQgaW4gdGhl
IG92ZXJ3aGVsbWluZyBtYWpvcml0eSBvZiBjYXNlcyBpdCB3aWxsIGFsbW9zdCBpbW1lZGlhdGVs
eSBoaXQgYW4gCkBAIC02MTQsNiArNjIwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZygqbV92YWx1ZSwgIjogbG9va2luZyBiYWNrd2FyZCBm
b3IgIiwgKnB0ciwgIi4uLlxuIik7CiAgICAgICAgIAorICAgICAgICBpZiAobV92YWx1ZS0+YXM8
TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBHaXZpbmcgdXAgYmVjYXVzZSBmZW5jZXMuXG4i
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgaWYgKE1lbW9yeVZhbHVlKiBtYXRjaCA9IG1fZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuZmlu
ZChwdHIsIGZpbHRlcikpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBGb3VuZCAiLCAqbWF0Y2gsICIgbG9jYWxseS5cbiIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMjEyOTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05Miw2ICs5Miw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVy
ZSwKICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDUwNwogICAgIH0KIAorICAgIC8vIFRoaXMgcHV0cyB0aGUgSVIgaW4gcXVpcmtzIG1vZGUuCiAg
ICAgbG93ZXJNYWNyb3MocHJvY2VkdXJlKTsKIAogICAgIGlmIChvcHRMZXZlbCA+PSAxKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljQmxvY2tJ
bnNlcnRpb25TZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9u
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgSW5zZXJ0aW9uU2V0OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Js
b2NrPgorY2xhc3MgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIFdURjo6SW5zZXJ0aW9uPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gQmxvY2tJbnNl
cnRpb247CisgICAgCisgICAgQmxvY2tJbnNlcnRpb25TZXQoVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxCYXNpY0Jsb2NrPj4mIGJsb2NrcykKKyAgICAgICAgOiBtX2Jsb2NrcyhibG9ja3MpCisgICAg
eworICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydChCbG9ja0luc2VydGlvbiYmIGluc2VydGlv
bikKKyAgICB7CisgICAgICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoV1RGTW92ZShpbnNlcnRpb24p
KTsKKyAgICB9CisKKyAgICAvLyBJbnNlcnQgYSBuZXcgYmxvY2sgYXQgYSBnaXZlbiBpbmRleC4K
KyAgICBCYXNpY0Jsb2NrKiBpbnNlcnQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kg
PSBQTmFOKQorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2Nr
KG5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFYLCBmcmVxdWVuY3kpKTsKKyAgICAgICAgQmFzaWNCbG9j
ayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgICAgIGluc2VydChCbG9ja0luc2VydGlvbihp
bmRleCwgV1RGTW92ZShibG9jaykpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICAvLyBJbnNlcnRzIGEgbmV3IGJsb2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVzdWFs
bHkgeW91IHdpbGwgbm90IHBhc3MgdGhlIGZyZXF1ZW5jeQorICAgIC8vIGFyZ3VtZW50LiBQYXNz
aW5nIFBOYU4gY2F1c2VzIHVzIHRvIGp1c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdiZWZv
cmUnIGJsb2NrLiBUaGF0J3MKKyAgICAvLyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCisgICAgQmFz
aWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5j
eSA9IFBOYU4pCisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0KGJlZm9yZS0+aW5kZXgoKSwg
ZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGJlZm9yZS0+ZnJlcXVlbmN5KCkp
OworICAgIH0KKworICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYWZ0ZXIgdGhlIGdpdmVuIGJs
b2NrLgorICAgIEJhc2ljQmxvY2sqIGluc2VydEFmdGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3Vi
bGUgZnJlcXVlbmN5ID0gUE5hTikKKyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnQoYWZ0ZXIt
PmluZGV4KCkgKyAxLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYWZ0ZXIt
PmZyZXF1ZW5jeSgpKTsKKyAgICB9CisKKyAgICBib29sIGV4ZWN1dGUoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRv
IHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5lZWQgdG8gc29ydCB0aGVtIGJlZm9yZQorICAgICAg
ICAvLyBydW5uaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMuIFdlIHN0cm9uZ2x5IHByZWZlciBh
IHN0YWJsZSBzb3J0IGFuZCB3ZSB3YW50IGl0IHRvIGJlCisgICAgICAgIC8vIGZhc3QsIHNvIHdl
IHVzZSBidWJibGUgc29ydC4KKyAgICAgICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4o
KSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKKyAgICAgICAgCisgICAgICAgIGV4ZWN1dGVJbnNlcnRp
b25zKG1fYmxvY2tzLCBtX2luc2VydGlvbnMpOworICAgICAgICAKKyAgICAgICAgLy8gUHJ1bmUg
b3V0IGVtcHR5IGVudHJpZXMuIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBpdCdz
CisgICAgICAgIC8vIGhlYWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcu
CisgICAgICAgIG1fYmxvY2tzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgWyZdIChz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4mIGJsb2NrUHRyKSAtPiBib29sIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gIWJsb2NrUHRyOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMu
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIG1fYmxvY2tzW2ldLT5tX2luZGV4ID0gaTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEJhc2ljQmxvY2s+PiYgbV9ibG9ja3M7CisgICAgVmVjdG9yPEJsb2NrSW5zZXJ0aW9uLCA4
PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFw
UmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFu
Z2UuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVh
cFJhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAgIH0KICAgICAKKyAgICBIZWFwUmFuZ2Ug
b3BlcmF0b3J8KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gSGVhcFJhbmdlKAorICAgICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwgb3RoZXIubV9i
ZWdpbiksCisgICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQpKTsKKyAgICB9
CisgICAgCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVn
aW4gIT0gbV9lbmQ7IH0KIAogICAgIHVuc2lnbmVkIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9i
ZWdpbjsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQu
Y3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNl
cnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNiArNTgsMTEgQEAgVmFsdWUqIElu
c2VydGlvblNldDo6aW5zZXJ0Qm90dG9tKHNpemVfdAogICAgIHJldHVybiBpbnNlcnRCb3R0b20o
aW5kZXgsIGxpa2VWYWx1ZS0+b3JpZ2luKCksIGxpa2VWYWx1ZS0+dHlwZSgpKTsKIH0KIAorVmFs
dWUqIEluc2VydGlvblNldDo6aW5zZXJ0Q2xvbmUoc2l6ZV90IGluZGV4LCBWYWx1ZSogdmFsdWUp
Cit7CisgICAgcmV0dXJuIGluc2VydFZhbHVlKGluZGV4LCBtX3Byb2NlZHVyZS5jbG9uZSh2YWx1
ZSkpOworfQorCiB2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykK
IHsKICAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5k
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw4IEBAIHB1YmxpYzoKIAogICAgIFZhbHVl
KiBpbnNlcnRCb3R0b20oc2l6ZV90IGluZGV4LCBPcmlnaW4sIFR5cGUpOwogICAgIFZhbHVlKiBp
bnNlcnRCb3R0b20oc2l6ZV90IGluZGV4LCBWYWx1ZSopOworICAgIAorICAgIFZhbHVlKiBpbnNl
cnRDbG9uZShzaXplX3QgaW5kZXgsIFZhbHVlKik7CiAKICAgICB2b2lkIGV4ZWN1dGUoQmFzaWNC
bG9jayopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3Mu
Y3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
ck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCwxMSArNTgsMTQgQEAgcHVibGljOgog
ICAgICAgICA6IG1fcHJvYyhwcm9jKQogICAgICAgICAsIG1fYmxvY2tJbnNlcnRpb25TZXQocHJv
YykKICAgICAgICAgLCBtX2luc2VydGlvblNldChwcm9jKQorICAgICAgICAsIG1fdXNlQ291bnRz
KHByb2MpCiAgICAgewogICAgIH0KIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX3Byb2MuaGFzUXVpcmtzKCkpOworICAgICAgICAKICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgbV9ibG9jayA9IGJs
b2NrOwogICAgICAgICAgICAgcHJvY2Vzc0N1cnJlbnRCbG9jaygpOwpAQCAtNzIsNiArNzUsMTAg
QEAgcHVibGljOgogICAgICAgICAgICAgbV9wcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAgICAg
ICAgICAgICBtX3Byb2MuaW52YWxpZGF0ZUNGRygpOwogICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBUaGlzIGluZGljYXRlcyB0aGF0IHdlJ3ZlIAorICAgICAgICBtX3Byb2Muc2V0SGFz
UXVpcmtzKHRydWUpOworICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgICB9
CiAgICAgCkBAIC0xODUsNyArMTkyLDk2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbG9hZC1s
b2FkIGZlbmNlLiBUaGlzIGNvZGVnZW5zIHRvIG5vdGhpbmcgb24gWDg2LiBXZSB1c2UgaXQgdG8g
dGVsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcGlsZXIgbm90IHRvIGJsb2NrIGxv
YWQgbW90aW9uLgorICAgICAgICAgICAgICAgICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxGZW5jZVZhbHVlPihtX2luZGV4LCBtX29yaWdpbik7CisgICAgICAg
ICAgICAgICAgICAgIGZlbmNlLT5yZWFkID0gSGVhcFJhbmdlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGZlbmNlLT53cml0ZSA9IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAvLyBLaWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNob3VsZCB1
bmxvY2sgYSBidW5jaCBvZiBjb2RlIHNpbXBsaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAg
ICBtX25vZGUtPnJlcGxhY2VXaXRoQm90dG9tKG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4KTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogCisgICAgICAgICAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAgICAgICBjYXNlIEF0
b21pY1N0cm9uZ0NBUzogeworICAgICAgICAgICAgICAgIGlmIChpc1g4NigpKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBdG9t
aWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAg
ICAgICAgV2lkdGggd2lkdGggPSBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzQ2Fub25pY2FsV2lkdGgod2lkdGgpKQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBWYWx1ZSogZXhwZWN0ZWRWYWx1ZSA9IGF0b21pYy0+Y2hpbGQoMCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gT24gQVJNLCB0aGUgbG9hZCBwYXJ0IG9mIHRoZSBDQVMg
ZG9lcyBhIGxvYWQgd2l0aCB6ZXJvIGV4dGVuc2lvbi4gVGhlcmVmb3JlLCB3ZSBuZWVkCisgICAg
ICAgICAgICAgICAgLy8gdG8gemVyby1leHRlbmQgdGhlIGlucHV0LgorICAgICAgICAgICAgICAg
IFZhbHVlKiBtYXNrZWRFeHBlY3RlZFZhbHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PigKKyAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgQml0QW5kLCBtX29yaWdpbiwgZXhwZWN0
ZWRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0SW50Q29u
c3RhbnQobV9pbmRleCwgZXhwZWN0ZWRWYWx1ZSwgbWFzayh3aWR0aCkpKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBhdG9taWMtPmNoaWxkKDApID0gbWFza2VkRXhwZWN0ZWRW
YWx1ZTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fz
ZSBBdG9taWNYY2hnQWRkOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgICAg
ICAgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdTdWI6
CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgICAgICAgICBjYXNlIEF0b21p
Y1hjaGc6IHsKKyAgICAgICAgICAgICAgICAvLyBPbiBYODYsIHRoZXNlIG1heSBhY3R1YWxseSBy
ZXR1cm4gZ2FyYmFnZSBpbiB0aGUgaGlnaCBiaXRzLiBPbiBBUk02NCwgdGhlc2Ugc29ydGEKKyAg
ICAgICAgICAgICAgICAvLyB6ZXJvLWV4dGVuZCB0aGVpciBoaWdoIGJpdHMsIGV4Y2VwdCB0aGF0
IHRoZSBoaWdoIGJpdHMgbWlnaHQgZ2V0IHBvbGx1dGVkIGJ5IGhpZ2gKKyAgICAgICAgICAgICAg
ICAvLyBiaXRzIGluIHRoZSBvcGVyYW5kLiAuIFNvLCBlaXRoZXIgd2F5LCB3ZSBuZWVkIHRvIHRo
cm93IGEgc2lnbi1leHRlbmQgb24gdGhlc2UKKyAgICAgICAgICAgICAgICAvLyB0aGluZ3MuCisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPm9wY29kZSgpID09IEF0b21pY1hjaGdTdWIgJiYgbV91
c2VDb3VudHMubnVtVXNlcyhtX3ZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
T24geDg2LCB4Y2hnYWRkIGlzIGJldHRlciB0aGFuIHhjaGdzdWIgaWYgaXQgaGFzIGFueSB1c2Vy
cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnNldEtpbmRVbnNhZmVseShBdG9t
aWNYY2hnQWRkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4LCBOZWcsIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGJv
b2wgZXhlbXB0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+
b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBdG9taWNYY2hnU3ViOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdY
b3I6CisgICAgICAgICAgICAgICAgICAgICAgICBleGVtcHQgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBpZiAoZXhlbXB0KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEF0b21p
Y1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAg
ICAgICBXaWR0aCB3aWR0aCA9IGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNDYW5vbmljYWxXaWR0aCh3aWR0aCkpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IFZhbHVlKiBuZXdWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAg
ICAgICAgICAgICAgIG1faW5kZXgsIHNpZ25FeHRlbmRPcGNvZGUod2lkdGgpLCBtX29yaWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q2xvbmUobV9pbmRleCwg
bV92YWx1ZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJl
cGxhY2VXaXRoSWRlbnRpdHkobmV3VmFsdWUpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQpAQCAtNDcwLDYgKzU2Niw3IEBAIHByaXZhdGU6CiAgICAgUHJvY2VkdXJlJiBt
X3Byb2M7CiAgICAgQmxvY2tJbnNlcnRpb25TZXQgbV9ibG9ja0luc2VydGlvblNldDsKICAgICBJ
bnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CisgICAgVXNlQ291bnRzIG1fdXNlQ291bnRzOwog
ICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgdW5zaWduZWQgbV9pbmRleDsKICAgICBWYWx1
ZSogbV92YWx1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9z
QWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHAJKHJldmlzaW9uIDIxMjk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDE1ICsxNTYsMTQgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGNhc2UgUm90TDogewogICAgICAgICAgICAgICAgIC8vIEFSTTY0IGRvZXNu
J3QgaGF2ZSBhIHJvdGF0ZSBsZWZ0LgogICAgICAgICAgICAgICAgIGlmIChpc0FSTTY0KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgVmFsdWUqIG5ld1NoaWZ0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2lu
ZGV4LCBOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWYWx1ZSogcm90YXRlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPihtX2luZGV4LCBSb3RSLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCks
IG5ld1NoaWZ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRo
SWRlbnRpdHkocm90YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTaGlmdCA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgTmVnLCBtX3ZhbHVlLT5vcmlnaW4o
KSwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogcm90YXRl
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBSb3RSLCBtX3ZhbHVlLT5v
cmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG5ld1NoaWZ0KTsKKyAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyb3RhdGUpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2
ICs3MiwxNCBAQCBuYW1lc3BhY2UgewogCiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAor
Ly8gRklYTUU6IFdlIHdvdWxkbid0IG5lZWQgdGhpcyBpZiBBaXIgc3VwcG9ydGVkIFdpZHRoIG1v
ZGlmaWVycyBpbiBBaXI6OktpbmQuCisvLyBPT1BTISEhIChuZWVkIGEgYnVnIFVSTCkKKyNkZWZp
bmUgT1BDT0RFX0ZPUl9XSURUSChvcGNvZGUsIHdpZHRoKSAoIFwKKyAgICAod2lkdGgpID09IFdp
ZHRoOCA/IG9wY29kZSAjIyA4IDogXAorICAgICh3aWR0aCkgPT0gV2lkdGgxNiA/IG9wY29kZSAj
IyAxNiA6IFwKKyAgICAod2lkdGgpID09IFdpZHRoMzIgPyBvcGNvZGUgIyMgMzIgOiBcCisgICAg
b3Bjb2RlICMjIDY0KQorCiBjbGFzcyBMb3dlclRvQWlyIHsKIHB1YmxpYzoKICAgICBMb3dlclRv
QWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQpAQCAtODMsNiArOTEsMTIgQEAgcHVibGljOgogICAg
ICAgICAsIG1fZG9taW5hdG9ycyhwcm9jZWR1cmUuZG9taW5hdG9ycygpKQogICAgICAgICAsIG1f
cHJvY2VkdXJlKHByb2NlZHVyZSkKICAgICAgICAgLCBtX2NvZGUocHJvY2VkdXJlLmNvZGUoKSkK
KyAgICAgICAgLCBtX2Jsb2NrSW5zZXJ0aW9uU2V0KG1fY29kZSkKKyNpZiBDUFUoWDg2KSB8fCBD
UFUoWDg2XzY0KQorICAgICAgICAsIG1fZWF4KFg4NlJlZ2lzdGVyczo6ZWF4KQorICAgICAgICAs
IG1fZWN4KFg4NlJlZ2lzdGVyczo6ZWN4KQorICAgICAgICAsIG1fZWR4KFg4NlJlZ2lzdGVyczo6
ZWR4KQorI2VuZGlmCiAgICAgewogICAgIH0KIApAQCAtMTI0LDE0ICsxMzgsMTggQEAgcHVibGlj
OgogICAgICAgICAvLyBob2lzdGVkIGFkZHJlc3MgZXhwcmVzc2lvbiBiZWZvcmUgd2UgZHVwbGlj
YXRlIGl0IGJhY2sgaW50byB0aGUgbG9vcC4KICAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayog
YmxvY2sgOiBtX3Byb2NlZHVyZS5ibG9ja3NJblByZU9yZGVyKCkpIHsKICAgICAgICAgICAgIG1f
YmxvY2sgPSBibG9jazsKLSAgICAgICAgICAgIC8vIFJlc2V0IHNvbWUgc3RhdGUuCi0gICAgICAg
ICAgICBtX2luc3RzLnJlc2l6ZSgwKTsKIAogICAgICAgICAgICAgbV9pc1JhcmUgPSAhbV9mYXN0
V29ya2xpc3Quc2F3KGJsb2NrKTsKIAogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiTG93ZXJpbmcgQmxvY2sgIiwgKmJsb2NrLCAiOlxuIik7CiAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzdWNjZXNzb3JzIGFy
ZSBzZXQgdXAgY29ycmVjdGx5LgorICAgICAgICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2Nr
IHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBtX2Js
b2NrVG9CbG9ja1tibG9ja10tPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoCisgICAgICAgICAgICAgICAg
ICAgIEFpcjo6RnJlcXVlbnRlZEJsb2NrKG1fYmxvY2tUb0Jsb2NrW3N1Y2Nlc3Nvci5ibG9jaygp
XSwgc3VjY2Vzc29yLmZyZXF1ZW5jeSgpKSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAg
IC8vIFByb2Nlc3MgYmxvY2tzIGluIHJldmVyc2Ugb3JkZXIgc28gd2Ugc2VlIHVzZXMgYmVmb3Jl
IGRlZnMuIFRoYXQncyB3aGF0IGFsbG93cyB1cwogICAgICAgICAgICAgLy8gdG8gbWF0Y2ggcGF0
dGVybnMgZWZmZWN0aXZlbHkuCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+
c2l6ZSgpOyBpLS07KSB7CkBAIC0xNDksMTkgKzE2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBp
bnN0cnVjdGlvbnMuIG1faW5zdHMgY29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3
ZSBwcm9jZXNzCi0gICAgICAgICAgICAvLyBpdCBpbiByZXZlcnNlLgotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9pbnN0cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBm
b3IgKEluc3QmIGluc3QgOiBtX2luc3RzW2ldKQotICAgICAgICAgICAgICAgICAgICBtX2Jsb2Nr
VG9CbG9ja1tibG9ja10tPmFwcGVuZEluc3QoV1RGTW92ZShpbnN0KSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzdWNjZXNzb3JzIGFyZSBzZXQg
dXAgY29ycmVjdGx5LgotICAgICAgICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrIHN1Y2Nl
c3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKLSAgICAgICAgICAgICAgICBtX2Jsb2NrVG9C
bG9ja1tibG9ja10tPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIEFp
cjo6RnJlcXVlbnRlZEJsb2NrKG1fYmxvY2tUb0Jsb2NrW3N1Y2Nlc3Nvci5ibG9jaygpXSwgc3Vj
Y2Vzc29yLmZyZXF1ZW5jeSgpKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5pc2hB
cHBlbmRpbmdJbnN0cnVjdGlvbnMobV9ibG9ja1RvQmxvY2tbYmxvY2tdKTsKICAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgbV9ibG9ja0luc2VydGlvblNldC5leGVjdXRlKCk7CiAKICAgICAg
ICAgQWlyOjpJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fY29kZSk7CiAgICAgICAgIGZvciAo
SW5zdCYgaW5zdCA6IG1fcHJvbG9ndWUpCkBAIC01MzgsNyArNTQ3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHJldHVybiBBcmcoKTsKIAogICAgICAgICBpbnQzMl90IG9mZnNldCA9IHZhbHVl
LT5vZmZzZXQoKTsKLSAgICAgICAgV2lkdGggd2lkdGggPSB2YWx1ZS0+YWNjZXNzV2lkdGgoKTsK
KyAgICAgICAgV2lkdGggd2lkdGggPSB2YWx1ZS0+bG9hZFN0b3JlV2lkdGgoKTsKIAogICAgICAg
ICBBcmcgcmVzdWx0ID0gZWZmZWN0aXZlQWRkcih2YWx1ZS0+bGFzdENoaWxkKCksIG9mZnNldCwg
d2lkdGgpOwogICAgICAgICBBU1NFUlQocmVzdWx0LmlzVmFsaWRGb3JtKHdpZHRoKSk7CkBAIC01
NjIsMTEgKzU3MSwxNiBAQCBwcml2YXRlOgogICAgIAogICAgIEFyZ1Byb21pc2UgbG9hZFByb21p
c2VBbnlPcGNvZGUoVmFsdWUqIGxvYWRWYWx1ZSkKICAgICB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGxvYWRWYWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpOwogICAgICAgICBpZiAoIWNhbkJlSW50
ZXJuYWwobG9hZFZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKICAgICAgICAgaWYg
KGNyb3NzZXNJbnRlcmZlcmVuY2UobG9hZFZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBBcmco
KTsKLSAgICAgICAgQXJnUHJvbWlzZSByZXN1bHQoYWRkcihsb2FkVmFsdWUpLCBsb2FkVmFsdWUp
OworICAgICAgICBpZiAobG9hZFZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkK
KyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgQXJnIGxvYWRBZGRyID0gYWRkcihs
b2FkVmFsdWUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2FkQWRkcik7CisgICAgICAgIEFy
Z1Byb21pc2UgcmVzdWx0KGxvYWRBZGRyLCBsb2FkVmFsdWUpOwogICAgICAgICBpZiAobG9hZFZh
bHVlLT50cmFwcygpKQogICAgICAgICAgICAgcmVzdWx0LnNldFRyYXBzKHRydWUpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtODk4LDExICs5MTIsOSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQogICAg
ICAgICBhcHBlbmQoTW92ZSwgdG1wKHZhbHVlKSwgdG1wKG1fdmFsdWUpKTsKLSAgICAgICAgYXBw
ZW5kKE1vdmUsIHRtcChhbW91bnQpLCBUbXAoWDg2UmVnaXN0ZXJzOjplY3gpKTsKLSAgICAgICAg
YXBwZW5kKG9wY29kZSwgVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KSwgdG1wKG1fdmFsdWUpKTsKLSNl
bmRpZgorICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGFtb3VudCksIG1fZWN4KTsKKyAgICAgICAg
YXBwZW5kKG9wY29kZSwgbV9lY3gsIHRtcChtX3ZhbHVlKSk7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8QWlyOjpPcGNvZGUgb3Bjb2RlMzIsIEFpcjo6T3Bjb2RlIG9wY29kZTY0PgpAQCAtOTMxLDEw
ICs5NDMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlMzIsIEFpcjo6
T3Bjb2RlIG9wY29kZTY0LCBDb21tdXRhdGl2aXR5IGNvbW11dGF0aXZpdHkgPSBOb3RDb21tdXRh
dGl2ZT4KICAgICBib29sIHRyeUFwcGVuZFN0b3JlQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiBy
aWdodCkKICAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpKTsKKyAgICAgICAgCiAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29k
ZUZvclR5cGUob3Bjb2RlMzIsIG9wY29kZTY0LCBsZWZ0LT50eXBlKCkpOwogICAgICAgICBpZiAo
b3Bjb2RlID09IEFpcjo6T29wcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
CisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIEFyZyBzdG9yZUFkZHIg
PSBhZGRyKG1fdmFsdWUpOwogICAgICAgICBBU1NFUlQoc3RvcmVBZGRyKTsKIApAQCAtOTk0LDEw
ICsxMDExLDQ4IEBAIHByaXZhdGU6CiAKICAgICAgICAgcmV0dXJuIEluc3QobW92ZSwgbV92YWx1
ZSwgdG1wKHZhbHVlKSwgZGVzdCk7CiAgICAgfQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3Jl
T3Bjb2RlKFdpZHRoIHdpZHRoLCBCYW5rIGJhbmssIGJvb2wgcmVsZWFzZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBXaWR0aDg6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChiYW5rID09IEdQKTsKKyAgICAgICAgICAgIHJldHVybiByZWxlYXNlID8g
U3RvcmVSZWw4IDogU3RvcmU4OworICAgICAgICBjYXNlIFdpZHRoMTY6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChiYW5rID09IEdQKTsKKyAgICAgICAgICAgIHJldHVybiByZWxlYXNlID8g
U3RvcmVSZWwxNiA6IFN0b3JlMTY7CisgICAgICAgIGNhc2UgV2lkdGgzMjoKKyAgICAgICAgICAg
IHN3aXRjaCAoYmFuaykgeworICAgICAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVsMzIgOiBNb3ZlMzI7CisgICAgICAgICAgICBjYXNlIEZQ
OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWxlYXNlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTW92ZUZsb2F0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzNjRC
aXQoKSk7CisgICAgICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgICAgIGNhc2UgR1A6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBTdG9yZVJlbDY0IDogTW92ZTsKKyAg
ICAgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlbGVh
c2UpOworICAgICAgICAgICAgICAgIHJldHVybiBNb3ZlRG91YmxlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgQWlyOjpPcGNvZGUgc3RvcmVPcGNvZGUoVmFs
dWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5h
czxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmV0dXJuIHN0b3JlT3Bjb2RlKG1lbW9yeS0+bG9h
ZFN0b3JlV2lkdGgoKSwgbWVtb3J5LT5hY2Nlc3NCYW5rKCksIG1lbW9yeS0+aGFzRmVuY2UoKSk7
CisgICAgfQogCiAgICAgSW5zdCBjcmVhdGVTdG9yZShWYWx1ZSogdmFsdWUsIGNvbnN0IEFyZyYg
ZGVzdCkKICAgICB7Ci0gICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVPcGNvZGUgPSBtb3ZlRm9yVHlw
ZSh2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgQWlyOjpPcGNvZGUgbW92ZU9wY29kZSA9IHN0b3Jl
T3Bjb2RlKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZVN0b3JlKG1vdmVPcGNvZGUsIHZh
bHVlLCBkZXN0KTsKICAgICB9CiAKQEAgLTEwMDYsNyArMTA2MSw3IEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIGNyZWF0ZVN0b3JlKHN0ZDo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpKTsKICAgICB9Ci0KKyAgICAKICAgICBBaXI6Ok9wY29k
ZSBtb3ZlRm9yVHlwZShUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
QEAgLTEwNzMsNyArMTEyOCw0MSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgbV9pbnN0cy5s
YXN0KCkuYXBwZW5kKGluc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmlzaEFwcGVuZGlu
Z0luc3RydWN0aW9ucyhBaXI6OkJhc2ljQmxvY2sqIHRhcmdldCkKKyAgICB7CisgICAgICAgIC8v
IE5vdyBhcHBlbmQgdGhlIGluc3RydWN0aW9ucy4gbV9pbnN0cyBjb250YWlucyB0aGVtIGluIHJl
dmVyc2Ugb3JkZXIsIHNvIHdlIHByb2Nlc3MKKyAgICAgICAgLy8gaXQgaW4gcmV2ZXJzZS4KKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbnN0cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgIGZvciAoSW5zdCYgaW5zdCA6IG1faW5zdHNbaV0pCisgICAgICAgICAgICAgICAgdGFyZ2V0
LT5hcHBlbmRJbnN0KFdURk1vdmUoaW5zdCkpOworICAgICAgICB9CisgICAgICAgIG1faW5zdHMu
cmVzaXplKDApOworICAgIH0KKyAgICAKKyAgICBBaXI6OkJhc2ljQmxvY2sqIG5ld0Jsb2NrKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEFmdGVyKG1f
YmxvY2tUb0Jsb2NrW21fYmxvY2tdKTsKKyAgICB9CiAKKyAgICAvLyBOT1RFOiBUaGlzIHdpbGwg
Y3JlYXRlIGEgY29udGludWF0aW9uIGJsb2NrIChgbmV4dEJsb2NrYCkgKmFmdGVyKiBhbnkgYmxv
Y2tzIHlvdSd2ZSBjcmVhdGVkIHVzaW5nCisgICAgLy8gbmV3QmxvY2soKS4gU28sIGl0J3MgcHJl
ZmVyYWJsZSB0byBjcmVhdGUgYWxsIG9mIHlvdXIgYmxvY2tzIHVwZnJvbnQgdXNpbmcgbmV3Qmxv
Y2soKS4gQWxzbyBub3RlCisgICAgLy8gdGhhdCBhbnkgY29kZSB5b3UgZW1pdCBiZWZvcmUgdGhp
cyB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGUgY29udGludWF0aW9uLCBhbmQgYW55IGNvZGUgeW91
IGVtaXQKKyAgICAvLyBhZnRlciB0aGlzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHByZXZpb3Vz
IGJsb2NrLgorICAgIHZvaWQgc3BsaXRCbG9jayhBaXI6OkJhc2ljQmxvY2sqJiBwcmV2aW91c0Js
b2NrLCBBaXI6OkJhc2ljQmxvY2sqJiBuZXh0QmxvY2spCisgICAgeworICAgICAgICBBaXI6OkJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja1RvQmxvY2tbbV9ibG9ja107CisgICAgICAgIAorICAg
ICAgICBwcmV2aW91c0Jsb2NrID0gYmxvY2s7CisgICAgICAgIG5leHRCbG9jayA9IG1fYmxvY2tJ
bnNlcnRpb25TZXQuaW5zZXJ0QWZ0ZXIoYmxvY2spOworICAgICAgICAKKyAgICAgICAgZmluaXNo
QXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKG5leHRCbG9jayk7CisgICAgICAgIG5leHRCbG9jay0+c3Vj
Y2Vzc29ycygpID0gYmxvY2stPnN1Y2Nlc3NvcnMoKTsKKyAgICAgICAgYmxvY2stPnN1Y2Nlc3Nv
cnMoKS5jbGVhcigpOworICAgICAgICAKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoVmVjdG9yPElu
c3Q+KCkpOworICAgIH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CiAgICAgVCogZW5zdXJlU3BlY2lhbChUKiYgZmllbGQsIEFyZ3VtZW50cyYm
Li4uIGFyZ3VtZW50cykKICAgICB7CkBAIC0xMTIzLDcgKzEyMTIsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1
bWVudDoKICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmNhbGxBcmcodmFsdWUucmVwKCkub2Zm
c2V0RnJvbVNQKCkpOwotICAgICAgICAgICAgICAgIGFwcGVuZFN0b3JlKHZhbHVlLnZhbHVlKCks
IGFyZyk7CisgICAgICAgICAgICAgICAgYXBwZW5kU3RvcmUobW92ZUZvclR5cGUodmFsdWUudmFs
dWUoKSksIGFyZyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xOTYx
LDYgKzIwNTAsMzA4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAor
ICAgIHZvaWQgYXBwZW5kWDg2RGl2KEIzOjpPcGNvZGUgb3ApCisgICAgeworICAgICAgICBBaXI6
Ok9wY29kZSBjb252ZXJ0VG9Eb3VibGVXb3JkOworICAgICAgICBBaXI6Ok9wY29kZSBkaXY7Cisg
ICAgICAgIHN3aXRjaCAobV92YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgSW50MzI6Cisg
ICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2Q29udmVydFRvRG91YmxlV29yZDMy
OworICAgICAgICAgICAgZGl2ID0gWDg2RGl2MzI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBYODZDb252
ZXJ0VG9RdWFkV29yZDY0OworICAgICAgICAgICAgZGl2ID0gWDg2RGl2NjQ7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBB
U1NFUlQob3AgPT0gRGl2IHx8IG9wID09IE1vZCk7CisgICAgICAgIFRtcCByZXN1bHQgPSBvcCA9
PSBEaXYgPyBtX2VheCA6IG1fZWR4OworCisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobV92YWx1
ZS0+Y2hpbGQoMCkpLCBtX2VheCk7CisgICAgICAgIGFwcGVuZChjb252ZXJ0VG9Eb3VibGVXb3Jk
LCBtX2VheCwgbV9lZHgpOworICAgICAgICBhcHBlbmQoZGl2LCBtX2VheCwgbV9lZHgsIHRtcCht
X3ZhbHVlLT5jaGlsZCgxKSkpOworICAgICAgICBhcHBlbmQoTW92ZSwgcmVzdWx0LCB0bXAobV92
YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kWDg2VURpdihCMzo6T3Bjb2RlIG9wKQor
ICAgIHsKKyAgICAgICAgQWlyOjpPcGNvZGUgZGl2ID0gbV92YWx1ZS0+dHlwZSgpID09IEludDMy
ID8gWDg2VURpdjMyIDogWDg2VURpdjY0OworCisgICAgICAgIEFTU0VSVChvcCA9PSBVRGl2IHx8
IG9wID09IFVNb2QpOworICAgICAgICBUbXAgcmVzdWx0ID0gb3AgPT0gVURpdiA/IG1fZWF4IDog
bV9lZHg7CisKKyAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIG1f
ZWF4KTsKKyAgICAgICAgYXBwZW5kKFhvcjY0LCBtX2VkeCwgbV9lZHgpOworICAgICAgICBhcHBl
bmQoZGl2LCBtX2VheCwgbV9lZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkpOworICAgICAgICBh
cHBlbmQoTW92ZSwgcmVzdWx0LCB0bXAobV92YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBBaXI6
Ok9wY29kZSBsb2FkTGlua09wY29kZShXaWR0aCB3aWR0aCwgYm9vbCBmZW5jZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmZW5jZSA/IE9QQ09ERV9GT1JfV0lEVEgoTG9hZExpbmtBY3EsIHdpZHRo
KSA6IE9QQ09ERV9GT1JfV0lEVEgoTG9hZExpbmssIHdpZHRoKTsKKyAgICB9CisgICAgCisgICAg
QWlyOjpPcGNvZGUgc3RvcmVDb25kT3Bjb2RlKFdpZHRoIHdpZHRoLCBib29sIGZlbmNlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZlbmNlID8gT1BDT0RFX0ZPUl9XSURUSChTdG9yZUNvbmRSZWws
IHdpZHRoKSA6IE9QQ09ERV9GT1JfV0lEVEgoU3RvcmVDb25kLCB3aWR0aCk7CisgICAgfQorICAg
IAorICAgIC8vIFRoaXMgY2FuIGVtaXQgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBwYXR0ZXJuczoK
KyAgICAvLyBBdG9taWNXZWFrQ0FTCisgICAgLy8gQml0WG9yKEF0b21pY1dlYWtDQVMsIDEpCisg
ICAgLy8gQXRvbWljU3Ryb25nQ0FTCisgICAgLy8gRXF1YWwoQXRvbWljU3Ryb25nQ0FTLCBleHBl
Y3RlZCkKKyAgICAvLyBOb3RFcXVhbChBdG9taWNTdHJvbmdDQVMsIGV4cGVjdGVkKQorICAgIC8v
IEJyYW5jaChBdG9taWNXZWFrQ0FTKQorICAgIC8vIEJyYW5jaChFcXVhbChBdG9taWNTdHJvbmdD
QVMsIGV4cGVjdGVkKSkKKyAgICAvLyBCcmFuY2goTm90RXF1YWwoQXRvbWljU3Ryb25nQ0FTLCBl
eHBlY3RlZCkpCisgICAgLy8KKyAgICAvLyBJdCBhc3N1bWVzIHRoYXQgYXRvbWljVmFsdWUgcG9p
bnRzIHRvIHRoZSBDQVMsIGFuZCBtX3ZhbHVlIHBvaW50cyB0byB0aGUgaW5zdHJ1Y3Rpb24gYmVp
bmcKKyAgICAvLyBnZW5lcmF0ZWQuIEl0IGFzc3VtZXMgdGhhdCB5b3UndmUgY29uc3VtZWQgZXZl
cnl0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGNvbnN1bWVkLgorICAgIHZvaWQgYXBwZW5kQ0FTKFZh
bHVlKiBhdG9taWNWYWx1ZSwgYm9vbCBpbnZlcnQpCisgICAgeworICAgICAgICBBdG9taWNWYWx1
ZSogYXRvbWljID0gYXRvbWljVmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChhdG9taWMpOworICAgICAgICAKKyAgICAgICAgYm9vbCBpc0JyYW5jaCA9IG1f
dmFsdWUtPm9wKCkgPT0gQnJhbmNoOworICAgICAgICBib29sIGlzU3Ryb25nID0gYXRvbWljLT5v
cCgpID09IEF0b21pY1N0cm9uZ0NBUzsKKyAgICAgICAgYm9vbCByZXR1cm5zT2xkVmFsdWUgPSBt
X3ZhbHVlLT5vcCgpID09IEF0b21pY1N0cm9uZ0NBUzsKKyAgICAgICAgCisgICAgICAgIFdpZHRo
IHdpZHRoID0gYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpOworICAgICAgICBBcmcgYWRkcmVzcyA9
IGFkZHIoYXRvbWljKTsKKworICAgICAgICBUbXAgdmFsdWVSZXN1bHRUbXA7CisgICAgICAgIFRt
cCBib29sUmVzdWx0VG1wOworICAgICAgICBpZiAocmV0dXJuc09sZFZhbHVlKSB7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghaW52ZXJ0KTsKKyAgICAgICAgICAgIHZhbHVlUmVzdWx0VG1w
ID0gdG1wKG1fdmFsdWUpOworICAgICAgICAgICAgYm9vbFJlc3VsdFRtcCA9IG1fY29kZS5uZXdU
bXAoR1ApOworICAgICAgICB9IGVsc2UgaWYgKGlzQnJhbmNoKSB7CisgICAgICAgICAgICB2YWx1
ZVJlc3VsdFRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAgICAgYm9vbFJlc3VsdFRt
cCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFs
dWVSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgICAgIGJvb2xSZXN1bHRU
bXAgPSB0bXAobV92YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFRtcCBzdWNj
ZXNzQm9vbFJlc3VsdFRtcDsKKyAgICAgICAgaWYgKGlzU3Ryb25nICYmICFpc0JyYW5jaCkKKyAg
ICAgICAgICAgIHN1Y2Nlc3NCb29sUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHN1Y2Nlc3NCb29sUmVzdWx0VG1wID0gYm9vbFJlc3VsdFRt
cDsKKworICAgICAgICBUbXAgZXhwZWN0ZWRWYWx1ZVRtcCA9IHRtcChhdG9taWMtPmNoaWxkKDAp
KTsKKyAgICAgICAgVG1wIG5ld1ZhbHVlVG1wID0gdG1wKGF0b21pYy0+Y2hpbGQoMSkpOworICAg
ICAgICAKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3M7CisgICAgICAgIEZyZXF1ZW50
ZWRCbG9jayBmYWlsdXJlOworICAgICAgICBpZiAoaXNCcmFuY2gpIHsKKyAgICAgICAgICAgIHN1
Y2Nlc3MgPSBtX2Jsb2NrVG9CbG9ja1ttX2Jsb2NrXS0+c3VjY2Vzc29yKGludmVydCk7CisgICAg
ICAgICAgICBmYWlsdXJlID0gbV9ibG9ja1RvQmxvY2tbbV9ibG9ja10tPnN1Y2Nlc3NvcighaW52
ZXJ0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAg
ICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT5vcGVyYXRpb25UeXBlKCkp
LCBpbW1PclRtcChhdG9taWMtPmNoaWxkKDApKSwgbV9lYXgpOworICAgICAgICAgICAgaWYgKHJl
dHVybnNPbGRWYWx1ZSkgeworICAgICAgICAgICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRI
KEF0b21pY1N0cm9uZ0NBUywgd2lkdGgpLCBtX2VheCwgbmV3VmFsdWVUbXAsIGFkZHJlc3MpOwor
ICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT5vcGVyYXRp
b25UeXBlKCkpLCBtX2VheCwgdmFsdWVSZXN1bHRUbXApOworICAgICAgICAgICAgfSBlbHNlIGlm
IChpc0JyYW5jaCkgeworICAgICAgICAgICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKEJy
YW5jaEF0b21pY1N0cm9uZ0NBUywgd2lkdGgpLCBBcmc6OnN0YXR1c0NvbmQoTWFjcm9Bc3NlbWJs
ZXI6OlN1Y2Nlc3MpLCBtX2VheCwgbmV3VmFsdWVUbXAsIGFkZHJlc3MpOworICAgICAgICAgICAg
ICAgIG1fYmxvY2tUb0Jsb2NrW21fYmxvY2tdLT5zZXRTdWNjZXNzb3JzKHN1Y2Nlc3MsIGZhaWx1
cmUpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYXBwZW5kKE9QQ09ERV9G
T1JfV0lEVEgoQXRvbWljU3Ryb25nQ0FTLCB3aWR0aCksIEFyZzo6c3RhdHVzQ29uZChpbnZlcnQg
PyBNYWNyb0Fzc2VtYmxlcjo6RmFpbHVyZSA6IE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNzKSwgbV9l
YXgsIHRtcChhdG9taWMtPmNoaWxkKDEpKSwgYWRkcmVzcywgYm9vbFJlc3VsdFRtcCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGlzQVJNNjQoKSk7CisgICAgICAgIC8vIFdlIHdpc2ggdG8gZW1pdDoKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gQmxvY2sgI3JlbG9vcDoKKyAgICAgICAgLy8gICAgIExvYWRMaW5rCisgICAg
ICAgIC8vICAgICBCcmFuY2ggTm90RXF1YWwKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiBUaGVu
OiNmYWlsLCBFbHNlOiAjc3RvcmUKKyAgICAgICAgLy8gQmxvY2sgI3N0b3JlOgorICAgICAgICAv
LyAgICAgU3RvcmVDb25kCisgICAgICAgIC8vICAgICBYb3IgJDEsICVyZXN1bHQgICAgPC0tLSBv
bmx5IGlmICFpbnZlcnQKKyAgICAgICAgLy8gICAgIEp1bXAKKyAgICAgICAgLy8gICBTdWNjZXNz
b3JzOiAjZG9uZQorICAgICAgICAvLyBCbG9jayAjZmFpbDoKKyAgICAgICAgLy8gICAgIE1vdmUg
JGludmVydCwgJXJlc3VsdAorICAgICAgICAvLyAgICAgSnVtcAorICAgICAgICAvLyAgIFN1Y2Nl
c3NvcnM6ICNkb25lCisgICAgICAgIC8vIEJsb2NrICNkb25lOgorICAgICAgICAKKyAgICAgICAg
QWlyOjpCYXNpY0Jsb2NrKiByZWxvb3BCbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6
QmFzaWNCbG9jayogc3RvcmVCbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNC
bG9jayogc3VjY2Vzc0Jsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKCFpc0JyYW5jaCAmJiBp
c1N0cm9uZykKKyAgICAgICAgICAgIHN1Y2Nlc3NCbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAg
IEFpcjo6QmFzaWNCbG9jayogZmFpbEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKCFpc0Jy
YW5jaCkKKyAgICAgICAgICAgIGZhaWxCbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6
QmFzaWNCbG9jayogc3Ryb25nRmFpbEJsb2NrOworICAgICAgICBpZiAoaXNTdHJvbmcpCisgICAg
ICAgICAgICBzdHJvbmdGYWlsQmxvY2sgPSBuZXdCbG9jaygpOworICAgICAgICBGcmVxdWVudGVk
QmxvY2sgY29tcGFyaXNvbkZhaWw7CisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayB3ZWFrRmFpbDsK
KyAgICAgICAgaWYgKGlzU3Ryb25nKSB7CisgICAgICAgICAgICBjb21wYXJpc29uRmFpbCA9IHN0
cm9uZ0ZhaWxCbG9jazsKKyAgICAgICAgICAgIHdlYWtGYWlsID0gcmVsb29wQmxvY2s7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNCcmFuY2gpCisgICAgICAgICAgICAgICAg
Y29tcGFyaXNvbkZhaWwgPSBmYWlsdXJlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGNvbXBhcmlzb25GYWlsID0gZmFpbEJsb2NrOworICAgICAgICAgICAgd2Vha0ZhaWwgPSBm
YWlsdXJlOworICAgICAgICB9CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogYmVnaW5CbG9jazsK
KyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBkb25lQmxvY2s7CisgICAgICAgIHNwbGl0QmxvY2so
YmVnaW5CbG9jaywgZG9uZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChKdW1wKTsK
KyAgICAgICAgYmVnaW5CbG9jay0+c2V0U3VjY2Vzc29ycyhyZWxvb3BCbG9jayk7CisgICAgICAg
IAorICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKGxvYWRMaW5rT3Bjb2RlKHdpZHRoLCBhdG9t
aWMtPmhhc0ZlbmNlKCkpLCBtX3ZhbHVlLCB2YWx1ZVJlc3VsdFRtcCwgYWRkcmVzcyk7CisgICAg
ICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChCcmFuY2gsIGNhbm9uaWNh
bFdpZHRoKHdpZHRoKSksIG1fdmFsdWUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwpIHZhbHVlUmVzdWx0VG1wLCBleHBlY3RlZFZhbHVlVG1wKTsKKyAgICAgICAgcmVsb29w
QmxvY2stPnNldFN1Y2Nlc3NvcnMoY29tcGFyaXNvbkZhaWwsIHN0b3JlQmxvY2spOworICAgICAg
ICAKKyAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKHN0b3JlQ29uZE9wY29kZSh3aWR0aCwgYXRv
bWljLT5oYXNGZW5jZSgpKSwgbV92YWx1ZSwgbmV3VmFsdWVUbXAsIGFkZHJlc3MsIHN1Y2Nlc3NC
b29sUmVzdWx0VG1wKTsKKyAgICAgICAgaWYgKGlzQnJhbmNoKSB7CisgICAgICAgICAgICBzdG9y
ZUJsb2NrLT5hcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6
Olplcm8pLCBib29sUmVzdWx0VG1wLCBBcmc6OmJpdEltbSgtMSkpOworICAgICAgICAgICAgc3Rv
cmVCbG9jay0+c2V0U3VjY2Vzc29ycyhzdWNjZXNzLCB3ZWFrRmFpbCk7CisgICAgICAgICAgICBk
b25lQmxvY2stPnN1Y2Nlc3NvcnMoKS5jbGVhcigpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWRvbmVCbG9jay0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGRvbmVCbG9jay0+YXBwZW5kKE9v
cHMsIG1fdmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGlzU3Ryb25n
KSB7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJn
OjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgc3VjY2Vzc0Jvb2xSZXN1bHRUbXAsIEFy
Zzo6Yml0SW1tKC0xKSk7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+c2V0U3VjY2Vzc29y
cyhzdWNjZXNzQmxvY2ssIHJlbG9vcEJsb2NrKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBzdWNjZXNzQmxvY2stPmFwcGVuZChNb3ZlLCBtX3ZhbHVlLCBBcmc6OmltbSghaW52
ZXJ0KSwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICAgICAgc3VjY2Vzc0Jsb2NrLT5hcHBl
bmQoSnVtcCwgbV92YWx1ZSk7CisgICAgICAgICAgICAgICAgc3VjY2Vzc0Jsb2NrLT5zZXRTdWNj
ZXNzb3JzKGRvbmVCbG9jayk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGlmICghaW52ZXJ0KQorICAgICAgICAgICAgICAgICAgICBzdG9yZUJsb2NrLT5hcHBlbmQoWG9y
MzIsIG1fdmFsdWUsIEFyZzo6Yml0SW1tKDEpLCBib29sUmVzdWx0VG1wLCBib29sUmVzdWx0VG1w
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdG9yZUJsb2NrLT5hcHBlbmQo
SnVtcCwgbV92YWx1ZSk7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+c2V0U3VjY2Vzc29y
cyhkb25lQmxvY2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBm
YWlsQmxvY2stPmFwcGVuZChNb3ZlLCBtX3ZhbHVlLCBBcmc6OmltbShpbnZlcnQpLCBib29sUmVz
dWx0VG1wKTsKKyAgICAgICAgICAgIGZhaWxCbG9jay0+YXBwZW5kKEp1bXAsIG1fdmFsdWUpOwor
ICAgICAgICAgICAgZmFpbEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRvbmVCbG9jayk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChpc1N0cm9uZykgeworICAgICAgICAgICAgVG1wIHRt
cCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAgICAgc3Ryb25nRmFpbEJsb2NrLT5hcHBl
bmQoc3RvcmVDb25kT3Bjb2RlKHdpZHRoLCBhdG9taWMtPmhhc0ZlbmNlKCkpLCBtX3ZhbHVlLCB2
YWx1ZVJlc3VsdFRtcCwgYWRkcmVzcywgdG1wKTsKKyAgICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9j
ay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJv
KSwgdG1wLCBBcmc6OmJpdEltbSgtMSkpOworICAgICAgICAgICAgc3Ryb25nRmFpbEJsb2NrLT5z
ZXRTdWNjZXNzb3JzKGZhaWxCbG9jaywgcmVsb29wQmxvY2spOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIGJvb2wgYXBwZW5kVm9pZEF0b21pYyhBaXI6Ok9wY29kZSBhdG9taWNPcGNvZGUp
CisgICAgeworICAgICAgICBpZiAobV91c2VDb3VudHMubnVtVXNlcyhtX3ZhbHVlKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIEFyZyBhZGRyZXNzID0gYWRk
cihtX3ZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShhdG9taWNPcGNv
ZGUsIEFyZzo6SW1tLCBhZGRyZXNzLmtpbmQoKSkgJiYgaW1tKG1fdmFsdWUtPmNoaWxkKDApKSkg
eworICAgICAgICAgICAgYXBwZW5kKGF0b21pY09wY29kZSwgaW1tKG1fdmFsdWUtPmNoaWxkKDAp
KSwgYWRkcmVzcyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKGF0b21pY09wY29kZSwgQXJnOjpUbXAsIGFkZHJl
c3Mua2luZCgpKSkgeworICAgICAgICAgICAgYXBwZW5kKGF0b21pY09wY29kZSwgdG1wKG1fdmFs
dWUtPmNoaWxkKDApKSwgYWRkcmVzcyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZv
aWQgYXBwZW5kR2VuZXJhbEF0b21pYyhBaXI6Ok9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAg
ICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAg
ICAgIAorICAgICAgICBBcmcgYWRkcmVzcyA9IGFkZHIobV92YWx1ZSk7CisgICAgICAgIFRtcCBv
bGRWYWx1ZSA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICBUbXAgbmV3VmFsdWUgPSBtX2Nv
ZGUubmV3VG1wKEdQKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIG5lZWQgYSBDQVMgbG9vcCBv
ciBhIExML1NDIGxvb3AuIFVzaW5nIHByZXBhcmUvYXR0ZW1wdCBqYXJnb24sIHdlIHdhbnQ6Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIEJsb2NrICNyZWxvb3A6CisgICAgICAgIC8vICAgICBQcmVw
YXJlCisgICAgICAgIC8vICAgICBvcGNvZGUKKyAgICAgICAgLy8gICAgIEF0dGVtcHQKKyAgICAg
ICAgLy8gICBTdWNjZXNzb3JzOiBUaGVuOiNkb25lLCBFbHNlOiNyZWxvb3AKKyAgICAgICAgLy8g
QmxvY2sgI2RvbmU6CisgICAgICAgIC8vICAgICBNb3ZlIG9sZFZhbHVlLCByZXN1bHQKKyAgICAg
ICAgCisgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCBv
bGRWYWx1ZSwgdG1wKGF0b21pYykpOworICAgICAgICAKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2Nr
KiByZWxvb3BCbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogYmVn
aW5CbG9jazsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBkb25lQmxvY2s7CisgICAgICAgIHNw
bGl0QmxvY2soYmVnaW5CbG9jaywgZG9uZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGFwcGVu
ZChKdW1wKTsKKyAgICAgICAgYmVnaW5CbG9jay0+c2V0U3VjY2Vzc29ycyhyZWxvb3BCbG9jayk7
CisgICAgICAgIAorICAgICAgICBBaXI6Ok9wY29kZSBwcmVwYXJlT3Bjb2RlOworICAgICAgICBp
ZiAoaXNYODYoKSkgeworICAgICAgICAgICAgc3dpdGNoIChhdG9taWMtPm9wZXJhdGlvbldpZHRo
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAgICAgIHByZXBhcmVP
cGNvZGUgPSBMb2FkOFNpZ25lZEV4dGVuZFRvMzI7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFdpZHRoMTY6CisgICAgICAgICAgICAgICAgcHJlcGFyZU9wY29kZSA9
IExvYWQxNlNpZ25lZEV4dGVuZFRvMzI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgICAgICAgICAgcHJlcGFyZU9wY29kZSA9IE1vdmUz
MjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2lkdGg2NDoKKyAg
ICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTW92ZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGlzQVJNNjQoKSk7CisgICAgICAgICAgICBvcGNvZGUgPSBsb2FkTGlua09wY29kZShh
dG9taWMtPm9wZXJhdGlvbldpZHRoKCksIGF0b21pYy0+aGFzRmVuY2UoKSk7CisgICAgICAgIH0K
KyAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChwcmVwYXJlT3Bjb2RlLCBtX3ZhbHVlLCBhZGRy
ZXNzLCBvbGRWYWx1ZSk7CisgICAgICAgIAorICAgICAgICBpZiAob3Bjb2RlICE9IE5vcCkgewor
ICAgICAgICAgICAgaWYgKGltbShhdG9taWMtPmNoaWxkKDApKSAmJiBpc1ZhbGlkRm9ybShvcGNv
ZGUsIEFyZzo6SW1tLCBBcmc6OlRtcCwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgIHJlbG9v
cEJsb2NrLT5hcHBlbmQob3Bjb2RlLCBtX3ZhbHVlLCBpbW0oYXRvbWljLT5jaGlsZCgwKSksIG9s
ZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChpc1ZhbGlkRm9ybShvcGNv
ZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgIHJlbG9v
cEJsb2NrLT5hcHBlbmQob3Bjb2RlLCBtX3ZhbHVlLCB0bXAoYXRvbWljLT5jaGlsZCgwKSksIG9s
ZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBy
ZWxvb3BCbG9jay0+YXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUoKSksIG9s
ZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGltbShhdG9taWMtPmNoaWxk
KDApKSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1tLCBBcmc6OlRtcCkpCisgICAgICAg
ICAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQob3Bjb2RlLCBtX3ZhbHVlLCBpbW0oYXRv
bWljLT5jaGlsZCgwKSksIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQob3Bjb2RlLCBtX3ZhbHVlLCB0bXAoYXRv
bWljLT5jaGlsZCgwKSksIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBjYXNPcGNvZGUg
PSBPUENPREVfRk9SX1dJRFRIKEJyYW5jaEF0b21pY1N0cm9uZ0NBUywgYXRvbWljLT5vcGVyYXRp
b25XaWR0aCgpKTsKKyAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQocmVsYXhlZE1vdmVG
b3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgb2xkVmFsdWUsIG1fZWF4KTsKKyAgICAgICAgICAgIHJl
bG9vcEJsb2NrLT5hcHBlbmQoY2FzT3Bjb2RlLCBtX3ZhbHVlLCBBcmc6OnN0YXR1c0NvbmQoTWFj
cm9Bc3NlbWJsZXI6OlN1Y2Nlc3MpLCBtX2VheCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsKKyAgICAg
ICAgICAgIFRtcCBib29sUmVzdWx0ID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgICAgICBy
ZWxvb3BCbG9jay0+YXBwZW5kKHN0b3JlQ29uZE9wY29kZShhdG9taWMtPm9wZXJhdGlvbldpZHRo
KCksIGF0b21pYy0+aGFzRmVuY2UoKSksIG5ld1ZhbHVlLCBhZGRyZXNzLCBib29sUmVzdWx0KTsK
KyAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0Nv
bmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBib29sUmVzdWx0LCBBcmc6OmJpdEltbSgtMSkpOwor
ICAgICAgICB9CisgICAgICAgIHJlbG9vcEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRvbmVCbG9jaywg
cmVsb29wQmxvY2spOworICAgIH0KKyAgICAKICAgICB2b2lkIGxvd2VyKCkKICAgICB7CiAgICAg
ICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bjb2RlKCkpIHsKQEAgLTE5NzEsMzAgKzIzNjIsNTAgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTG9hZDogewot
ICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBtb3ZlRm9yVHlwZShtX3Zh
bHVlLT50eXBlKCkpLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAg
ICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4o
KTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IEFpcjo6T29wczsKKyAgICAgICAg
ICAgIGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1l
bW9yeS0+dHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAg
ICAgICAgICAgb3Bjb2RlID0gTG9hZEFjcTMyOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgICAgICAgICBvcGNvZGUg
PSBMb2FkQWNxNjQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG9wY29kZSA9IG1vdmVGb3JUeXBlKG1lbW9y
eS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bj
b2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTG9hZDhTOiB7
Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQ4U2lnbmVkRXh0
ZW5kVG8zMiwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAg
ICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFz
RmVuY2UoKSA/IExvYWRBY3E4U2lnbmVkRXh0ZW5kVG8zMiA6IExvYWQ4U2lnbmVkRXh0ZW5kVG8z
MjsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBtX3Zh
bHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDhaOiB7Ci0gICAgICAgICAgICBhcHBlbmQo
dHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQ4LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAo
bV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG1fdmFsdWUtPmFz
PE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpID8gTG9hZEFjcTggOiBMb2FkODsKKyAgICAgICAg
ICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1f
dmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgTG9hZDE2UzogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5z
dChtX3ZhbHVlLCBMb2FkMTZTaWduZWRFeHRlbmRUbzMyLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUp
LCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG1fdmFs
dWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpID8gTG9hZEFjcTE2U2lnbmVkRXh0ZW5k
VG8zMiA6IExvYWQxNlNpZ25lZEV4dGVuZFRvMzI7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBp
bmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFs
dWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIExv
YWQxNlo6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9hZDE2
LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFp
cjo6T3Bjb2RlIG9wY29kZSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgp
ID8gTG9hZEFjcTE2IDogTG9hZDE2OworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdCht
X3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KKyAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEFkZDogewogICAgICAgICAgICAgaWYgKHRyeUFwcGVuZExlYSgpKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTIwOTIsNyArMjUwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBp
ZiAobV92YWx1ZS0+aXNDaGlsbCgpKQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlz
QVJNNjQoKSk7CiAgICAgICAgICAgICBpZiAoaXNJbnQobV92YWx1ZS0+dHlwZSgpKSAmJiBpc1g4
NigpKSB7Ci0gICAgICAgICAgICAgICAgbG93ZXJYODZEaXYoRGl2KTsKKyAgICAgICAgICAgICAg
ICBhcHBlbmRYODZEaXYoRGl2KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBBU1NFUlQoIWlzWDg2KCkgfHwgaXNGbG9hdChtX3ZhbHVlLT50eXBl
KCkpKTsKQEAgLTIxMDMsNyArMjUxNCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgY2FzZSBVRGl2
OiB7CiAgICAgICAgICAgICBpZiAoaXNJbnQobV92YWx1ZS0+dHlwZSgpKSAmJiBpc1g4NigpKSB7
Ci0gICAgICAgICAgICAgICAgbG93ZXJYODZVRGl2KFVEaXYpOworICAgICAgICAgICAgICAgIGFw
cGVuZFg4NlVEaXYoVURpdik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogCkBAIC0yMTE3LDEzICsyNTI4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW9kOiB7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFtX3ZhbHVlLT5pc0NoaWxsKCkpOwotICAgICAgICAgICAgbG93ZXJYODZEaXYo
TW9kKTsKKyAgICAgICAgICAgIGFwcGVuZFg4NkRpdihNb2QpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBVTW9kOiB7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChpc1g4NigpKTsKLSAgICAgICAgICAgIGxvd2VyWDg2VURpdihVTW9kKTsKKyAgICAg
ICAgICAgIGFwcGVuZFg4NlVEaXYoVU1vZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIApAQCAtMjE2MiwxMCArMjU3MywyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGFw
cGVuZFVuT3A8Tm90MzIsIE5vdDY0PihtX3ZhbHVlLT5jaGlsZCgwKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBU
aGlzIHBhdHRlcm4gaXMgc3VwZXIgdXNlZnVsIG9uIGJvdGggeDg2IGFuZCBBUk02NCwgc2luY2Ug
dGhlIGludmVyc2lvbiBvZiB0aGUgQ0FTIHJlc3VsdAorICAgICAgICAgICAgLy8gY2FuIGJlIGRv
bmUgd2l0aCB6ZXJvIGNvc3Qgb24geDg2IChqdXN0IGZsaXAgdGhlIHNldCBmcm9tIEUgdG8gTkUp
IGFuZCBpdCdzIGEgcHJvZ3Jlc3Npb24KKyAgICAgICAgICAgIC8vIG9uIEFSTTY0IChzaW5jZSBT
VFggcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIHNvIG9yZGluYXJpbHkgd2UgaGF2ZSB0byBmbGlwIGl0
KS4KKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMSkKKyAgICAgICAg
ICAgICAgICAmJiBpc0F0b21pY0NBUyhtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpCisgICAg
ICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKKyAgICAg
ICAgICAgICAgICBjb21taXRJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAg
ICAgICAgYXBwZW5kQ0FTKG1fdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGFwcGVu
ZEJpbk9wPFhvcjMyLCBYb3I2NCwgWG9yRG91YmxlLCBYb3JGbG9hdCwgQ29tbXV0YXRpdmU+KAog
ICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IERlcGVuZDogeworICAgICAgICAgICAgYXBwZW5kVW5PcDxEZXBlbmQzMiwgRGVwZW5kNjQ+KG1f
dmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAg
ICAgIGNhc2UgU2hsOiB7CiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50
MzIoMSkpIHsKQEAgLTIyNjYsNyArMjY5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhcHBlbmRTdG9yZSh2YWx1ZVRvU3RvcmUs
IGFkZHIobV92YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kU3RvcmUobV92YWx1ZSwgYWRkciht
X3ZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjI4Nyw3ICsy
NzE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZFN0b3JlKEFpcjo6U3Rv
cmU4LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kU3Rv
cmUobV92YWx1ZSwgdmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCkBAIC0yMzA4LDcgKzI3MzYsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYXBwZW5kU3RvcmUoQWlyOjpTdG9yZTE2LCB2YWx1ZVRvU3RvcmUsIGFkZHIo
bV92YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kU3RvcmUobV92YWx1ZSwgdmFsdWVUb1N0b3Jl
LCBhZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0y
NDE2LDcgKzI4NDQsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgRXF1
YWw6Ci0gICAgICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgIGNhc2UgTm90RXF1YWw6IHsKKyAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25n
Q0FTCisgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApID09IG1f
dmFsdWUtPmNoaWxkKDEpCisgICAgICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbChtX3ZhbHVl
LT5jaGlsZCgwKSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5z
KG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSkpOworICAgICAgICAgICAgICAgIEFTU0VSVCgh
bV9sb2NrZWQuY29udGFpbnMobV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAg
ICAgICAgICAgICAgYXBwZW5kQ0FTKG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5vcGNvZGUo
KSA9PSBOb3RFcXVhbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0
ZUNvbXBhcmUobV92YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBMZXNzVGhhbjoKICAgICAgICAgY2FzZSBHcmVhdGVyVGhh
bjoKICAgICAgICAgY2FzZSBMZXNzRXF1YWw6CkBAIC0yNzI3LDYgKzMxNzAsMzkgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQnJhbmNoOiB7CisgICAgICAgICAgICBpZiAo
Y2FuQmVJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKKyAgICAgICAgICAgICAgICBWYWx1
ZSogYnJhbmNoQ2hpbGQgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKGJyYW5jaENoaWxkLT5vcGNvZGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXRvbWlj
V2Vha0NBUzoKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwoYnJhbmNoQ2hpbGQp
OworICAgICAgICAgICAgICAgICAgICBhcHBlbmRDQVMoYnJhbmNoQ2hpbGQsIGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgICAgICAgICAgICAgLy8gQSBi
cmFuY2ggaXMgYSBjb21wYXJpc29uIHRvIHplcm8uCisgICAgICAgICAgICAgICAgICAgIGlmIChi
cmFuY2hDaGlsZC0+Y2hpbGQoMCktPmlzSW50KDApKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb21taXRJbnRlcm5hbChicmFuY2hDaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRDQVMoYnJhbmNoQ2hpbGQsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEVxdWFsOgorICAgICAg
ICAgICAgICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgICAgICAgICAgICAgIGlmIChicmFuY2hD
aGlsZC0+Y2hpbGQoMCktPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUworICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbChicmFuY2hDaGlsZC0+b3Bjb2RlKDApKQorICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgYnJhbmNoQ2hpbGQtPmNoaWxkKDApLT5jaGlsZCgwKSA9
PSBicmFuY2hDaGlsZC0+Y2hpbGQoMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1p
dEludGVybmFsKGJyYW5jaENoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdElu
dGVybmFsKGJyYW5jaENoaWxkLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRDQVMoYnJhbmNoQ2hpbGQtPmNoaWxkKDApLCBicmFuY2hDaGlsZC0+b3Bjb2RlKCkgPT0g
Tm90RXF1YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKGNy
ZWF0ZUJyYW5jaChtX3ZhbHVlLT5jaGlsZCgwKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC0yNzg0LDcgKzMyNjAsODEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFwcGVu
ZChBaXI6OkVudHJ5U3dpdGNoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAgY2FzZSBBdG9t
aWNTdHJvbmdDQVM6IHsKKyAgICAgICAgICAgIGFwcGVuZENBUyhtX3ZhbHVlLCBmYWxzZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEF0b21pY1hjaGdBZGQ6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3Zh
bHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWlj
KE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljQWRkLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFyZyBh
ZGRyZXNzID0gYWRkcihhdG9taWMpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0g
T1BDT0RFX0ZPUl9XSURUSChBdG9taWNYY2hnQWRkLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkp
OworICAgICAgICAgICAgaWYgKGlzVmFsaWRPcGNvZGUob3Bjb2RlLCBBcmc6OlRtcCwgYWRkcmVz
cykpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+
dHlwZSgpKSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCB0bXAoYXRvbWljKSk7CisgICAgICAgICAg
ICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGF0b21pYyksIGFkZHJlc3MpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXBwZW5kR2VuZXJhbEF0
b21pYyhPUENPREVfRk9SX1dJRFRIKEFkZCwgY2Fub25pY2FsV2lkdGgoYXRvbWljLT5vcGVyYXRp
b25XaWR0aCgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKKyAgICAgICAg
Y2FzZSBBdG9taWNYY2hnU3ViOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0g
bV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0
b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY1N1YiwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgp
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBh
cHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoU3ViLCBjYW5vbmljYWxXaWR0aChh
dG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6IHsKKyAgICAgICAg
ICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAg
ICAgICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljQW5k
LCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9X
SURUSChBbmQsIGNhbm9uaWNhbFdpZHRoKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
QXRvbWljWGNoZ09yOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1
ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0b21pYyhP
UENPREVfRk9SX1dJRFRIKEF0b21pY09yLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdl
bmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChPciwgY2Fub25pY2FsV2lkdGgoYXRvbWljLT5v
cGVyYXRpb25XaWR0aCgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOiB7CisgICAgICAgICAgICBBdG9t
aWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAg
ICBpZiAoYXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY1hvciwgYXRvbWlj
LT5vcGVyYXRpb25XaWR0aCgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoWG9y
LCBjYW5vbmljYWxXaWR0aChhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hj
aGc6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9t
aWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRy
KGF0b21pYyk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBPUENPREVfRk9SX1dJ
RFRIKEF0b21pY1hjaGcsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSk7CisgICAgICAgICAgICBp
ZiAoaXNWYWxpZE9wY29kZShvcGNvZGUsIEFyZzo6VG1wLCBhZGRyZXNzKSkgeworICAgICAgICAg
ICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCB0bXAoYXRv
bWljLT5jaGlsZCgwKSksIHRtcChhdG9taWMpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bj
b2RlLCB0bXAoYXRvbWljKSwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWlj
KE9QQ09ERV9GT1JfV0lEVEgoWG9yLCBjYW5vbmljYWxXaWR0aChhdG9taWMtPm9wZXJhdGlvbldp
ZHRoKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI3OTIs
NjQgKzMzNDIsNyBAQCBwcml2YXRlOgogICAgICAgICBkYXRhTG9nKCJGQVRBTDogY291bGQgbm90
IGxvd2VyICIsIGRlZXBEdW1wKG1fcHJvY2VkdXJlLCBtX3ZhbHVlKSwgIlxuIik7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgdm9pZCBsb3dlclg4
NkRpdihCMzo6T3Bjb2RlIG9wKQotICAgIHsKLSNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQot
ICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4KTsKLSAgICAgICAgVG1wIGVk
eCA9IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7Ci0KLSAgICAgICAgQWlyOjpPcGNvZGUgY29udmVy
dFRvRG91YmxlV29yZDsKLSAgICAgICAgQWlyOjpPcGNvZGUgZGl2OwotICAgICAgICBzd2l0Y2gg
KG1fdmFsdWUtPnR5cGUoKSkgewotICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAgY29u
dmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMjsKLSAgICAgICAgICAg
IGRpdiA9IFg4NkRpdjMyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50NjQ6
Ci0gICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2Q29udmVydFRvUXVhZFdvcmQ2
NDsKLSAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKG9wID09IERp
diB8fCBvcCA9PSBNb2QpOwotICAgICAgICBYODZSZWdpc3RlcnM6OlJlZ2lzdGVySUQgcmVzdWx0
ID0gb3AgPT0gRGl2ID8gWDg2UmVnaXN0ZXJzOjplYXggOiBYODZSZWdpc3RlcnM6OmVkeDsKLQot
ICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgZWF4KTsKLSAgICAg
ICAgYXBwZW5kKGNvbnZlcnRUb0RvdWJsZVdvcmQsIGVheCwgZWR4KTsKLSAgICAgICAgYXBwZW5k
KGRpdiwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkpOwotICAgICAgICBhcHBlbmQo
TW92ZSwgVG1wKHJlc3VsdCksIHRtcChtX3ZhbHVlKSk7Ci0KLSNlbHNlCi0gICAgICAgIFVOVVNF
RF9QQVJBTShvcCk7Ci0gICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotI2VuZGlm
Ci0gICAgfQotCi0gICAgdm9pZCBsb3dlclg4NlVEaXYoQjM6Ok9wY29kZSBvcCkKLSAgICB7Ci0j
aWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKLSAgICAgICAgVG1wIGVheCA9IFRtcChYODZSZWdp
c3RlcnM6OmVheCk7Ci0gICAgICAgIFRtcCBlZHggPSBUbXAoWDg2UmVnaXN0ZXJzOjplZHgpOwot
Ci0gICAgICAgIEFpcjo6T3Bjb2RlIGRpdiA9IG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IFg4
NlVEaXYzMiA6IFg4NlVEaXY2NDsKLQotICAgICAgICBBU1NFUlQob3AgPT0gVURpdiB8fCBvcCA9
PSBVTW9kKTsKLSAgICAgICAgWDg2UmVnaXN0ZXJzOjpSZWdpc3RlcklEIHJlc3VsdCA9IG9wID09
IFVEaXYgPyBYODZSZWdpc3RlcnM6OmVheCA6IFg4NlJlZ2lzdGVyczo6ZWR4OwotCi0gICAgICAg
IGFwcGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBlYXgpOwotICAgICAgICBhcHBl
bmQoWG9yNjQsIGVkeCwgZWR4KTsKLSAgICAgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHRtcCht
X3ZhbHVlLT5jaGlsZCgxKSkpOwotICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKHJlc3VsdCksIHRt
cChtX3ZhbHVlKSk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAgICBV
TlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSNlbmRpZgotICAgIH0KLQorICAgIAogICAgIElu
ZGV4U2V0PFZhbHVlPiBtX2xvY2tlZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2
ZSBubyBUbXAgaW4gQWlyLgogICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IG1fdmFsdWVUb1RtcDsg
Ly8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNheSB0
aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCiAgICAgSW5kZXhN
YXA8VmFsdWUsIFRtcD4gbV9waGlUb1RtcDsgLy8gRWFjaCBQaGkgZ2V0cyBpdHMgb3duIFRtcC4K
QEAgLTI4NjQsNyArMzM1Nyw3IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8VmVjdG9yPEluc3Qs
IDQ+PiBtX2luc3RzOwogICAgIFZlY3RvcjxJbnN0PiBtX3Byb2xvZ3VlOwotCisgICAgCiAgICAg
QjM6OkJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgYm9vbCBtX2lzUmFyZTsKICAgICB1bnNpZ25l
ZCBtX2luZGV4OwpAQCAtMjg3NSw2ICszMzY4LDEyIEBAIHByaXZhdGU6CiAKICAgICBQcm9jZWR1
cmUmIG1fcHJvY2VkdXJlOwogICAgIENvZGUmIG1fY29kZTsKKworICAgIEFpcjo6QmxvY2tJbnNl
cnRpb25TZXQgbV9ibG9ja0luc2VydGlvblNldDsKKworICAgIFRtcCBtX2VheDsKKyAgICBUbXAg
bV9lY3g7CisgICAgVG1wIG1fZWR4OwogfTsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lv
biAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDMwICszNCw0OCBAQCBNZW1vcnlWYWx1ZTo6fk1lbW9yeVZh
bHVlKCkKIHsKIH0KIAorVHlwZSBNZW1vcnlWYWx1ZTo6YWNjZXNzVHlwZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzTG9hZChvcGNvZGUoKSkpCisgICAgICAgIHJldHVybiB0eXBlKCk7CisgICAgLy8g
VGhpcyBoYXBwZW5zIHRvIHdvcmsgZm9yIGF0b21pY3MsIHRvby4gVGhhdCdzIHdoeSBBdG9taWNW
YWx1ZSBkb2VzIG5vdCBuZWVkIHRvIG92ZXJyaWRlIHRoaXMuCisgICAgcmV0dXJuIGNoaWxkKDAp
LT50eXBlKCk7Cit9CisKK0JhbmsgTWVtb3J5VmFsdWU6OmFjY2Vzc0JhbmsoKSBjb25zdAorewor
ICAgIHJldHVybiBiYW5rRm9yVHlwZShhY2Nlc3NUeXBlKCkpOworfQorCiBzaXplX3QgTWVtb3J5
VmFsdWU6OmFjY2Vzc0J5dGVTaXplKCkgY29uc3QKIHsKKyAgICByZXR1cm4gYnl0ZXMoYWNjZXNz
V2lkdGgoKSk7Cit9CisKK1dpZHRoIE1lbW9yeVZhbHVlOjpsb2FkU3RvcmVXaWR0aCgpIGNvbnN0
Cit7CiAgICAgc3dpdGNoIChvcGNvZGUoKSkgewogICAgIGNhc2UgTG9hZDhaOgogICAgIGNhc2Ug
TG9hZDhTOgogICAgIGNhc2UgU3RvcmU4OgotICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0
dXJuIFdpZHRoODsKICAgICBjYXNlIExvYWQxNlo6CiAgICAgY2FzZSBMb2FkMTZTOgogICAgIGNh
c2UgU3RvcmUxNjoKLSAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIHJldHVybiBXaWR0aDE2Owog
ICAgIGNhc2UgTG9hZDoKLSAgICAgICAgcmV0dXJuIHNpemVvZlR5cGUodHlwZSgpKTsKKyAgICAg
ICAgcmV0dXJuIHdpZHRoRm9yVHlwZSh0eXBlKCkpOwogICAgIGNhc2UgU3RvcmU6Ci0gICAgICAg
IHJldHVybiBzaXplb2ZUeXBlKGNoaWxkKDApLT50eXBlKCkpOworICAgICAgICByZXR1cm4gd2lk
dGhGb3JUeXBlKGNoaWxkKDApLT50eXBlKCkpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gV2lkdGg4OwogICAgIH0KIH0KIAogV2lkdGggTWVtb3J5VmFsdWU6OmFjY2Vzc1dpZHRoKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gd2lkdGhGb3JCeXRlcyhhY2Nlc3NCeXRlU2l6ZSgpKTsKKyAg
ICByZXR1cm4gbG9hZFN0b3JlV2lkdGgoKTsKIH0KIAogdm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1l
dGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTY3LDYg
Kzg1LDggQEAgdm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJgogICAgIGlm
ICgoaXNMb2FkKCkgJiYgZWZmZWN0cygpLnJlYWRzICE9IHJhbmdlKCkpCiAgICAgICAgIHx8IChp
c1N0b3JlKCkgJiYgZWZmZWN0cygpLndyaXRlcyAhPSByYW5nZSgpKSkKICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAicmFuZ2UgPSAiLCByYW5nZSgpKTsKKyAgICBpZiAocGhhbnRvbVJhbmdlKCkp
CisgICAgICAgIG91dC5wcmludChjb21tYSwgInBoYW50b21SYW5nZSA9ICIsIHBoYW50b21SYW5n
ZSgpKTsKIH0KIAogVmFsdWUqIE1lbW9yeVZhbHVlOjpjbG9uZUltcGwoKSBjb25zdApAQCAtNzQs
NiArOTQsNTggQEAgVmFsdWUqIE1lbW9yeVZhbHVlOjpjbG9uZUltcGwoKSBjb25zdAogICAgIHJl
dHVybiBuZXcgTWVtb3J5VmFsdWUoKnRoaXMpOwogfQogCisvLyBVc2UgdGhpcyBmb3JtIGZvciBM
b2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2
ZSBhIHN1ZmZpeCB0aGF0CisvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgorTWVtb3J5
VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIDogVmFsdWUoQ2hlY2tlZE9w
Y29kZSwga2luZCwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAgICwgbV9vZmZzZXQob2Zmc2V0
KQoreworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIHN3aXRjaCAoa2luZC5v
cGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExvYWQx
Nlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IElu
dDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAg
Y2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgQVNTRVJUKHR5
cGUgPT0gVm9pZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorfQorCisvLyBV
c2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4K
K01lbW9yeVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgOiBNZW1vcnlWYWx1ZShraW5kLCBJ
bnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpCit7CisgICAgaWYgKCFBU1NFUlRfRElTQUJM
RUQpIHsKKyAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgTG9h
ZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAg
ICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorfQorCisv
LyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCitNZW1vcnlWYWx1ZTo6TWVtb3J5VmFsdWUoS2lu
ZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQz
Ml90IG9mZnNldCA9IDApCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCBWb2lkLCBv
cmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICwgbV9vZmZzZXQob2Zmc2V0KQoreworICAgIEFT
U0VSVChpc1N0b3JlKGtpbmQub3Bjb2RlKCkpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw0OCArMjcs
MTcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0JhbmsuaCIKICNpbmNs
dWRlICJCM0hlYXBSYW5nZS5oIgogI2luY2x1ZGUgIkIzVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CiAKLS8vIEZJWE1FOiBXZSB3YW50IHRvIGFsbG93IGZlbmNlZCBt
ZW1vcnkgYWNjZXNzZXMgb24gQVJNLgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MjM0OQotCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBNZW1vcnlWYWx1ZSA6
IHB1YmxpYyBWYWx1ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhLaW5kIGtp
bmQpCiAgICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgY2Fz
ZSBMb2FkOFo6Ci0gICAgICAgIGNhc2UgTG9hZDhTOgotICAgICAgICBjYXNlIExvYWQxNlo6Ci0g
ICAgICAgIGNhc2UgTG9hZDE2UzoKLSAgICAgICAgY2FzZSBMb2FkOgotICAgICAgICBjYXNlIFN0
b3JlODoKLSAgICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICBjYXNlIFN0b3JlOgotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1N0b3JlKEtpbmQg
a2luZCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICBj
YXNlIFN0b3JlODoKLSAgICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICBjYXNlIFN0b3JlOgot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0xvYWQo
S2luZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFjY2VwdHMoa2luZCkgJiYgIWlzU3Rv
cmUoa2luZCk7CisgICAgICAgIHJldHVybiBpc01lbW9yeShraW5kLm9wY29kZSgpKTsKICAgICB9
CiAKICAgICB+TWVtb3J5VmFsdWUoKTsKQEAgLTc4LDc2ICs0Nyw1NiBAQCBwdWJsaWM6CiAKICAg
ICBjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZTsgfQogICAg
IHZvaWQgc2V0UmFuZ2UoY29uc3QgSGVhcFJhbmdlJiByYW5nZSkgeyBtX3JhbmdlID0gcmFuZ2U7
IH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGFuIGFsaWFzIGZvciByYW5nZS4KKyAgICBjb25zdCBI
ZWFwUmFuZ2UmIGFjY2Vzc1JhbmdlKCkgY29uc3QgeyByZXR1cm4gcmFuZ2UoKTsgfQorICAgIHZv
aWQgc2V0QWNjZXNzUmFuZ2UoY29uc3QgSGVhcFJhbmdlJiByYW5nZSkgeyBzZXRSYW5nZShyYW5n
ZSk7IH0KKyAgICAKKyAgICBjb25zdCBIZWFwUmFuZ2UmIGZlbmNlUmFuZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2ZlbmNlUmFuZ2U7IH0KKyAgICB2b2lkIHNldEZlbmNlUmFuZ2UoY29uc3QgSGVhcFJh
bmdlJiByYW5nZSkgeyBtX2ZlbmNlUmFuZ2UgPSByYW5nZTsgfQorCisgICAgYm9vbCBpc1N0b3Jl
KCkgY29uc3QgeyByZXR1cm4gaXNTdG9yZShvcGNvZGUoKSk7IH0KKyAgICBib29sIGlzTG9hZCgp
IGNvbnN0IHsgcmV0dXJuIGlzTG9hZChvcGNvZGUoKSk7IH0KIAotICAgIGJvb2wgaXNTdG9yZSgp
IGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBWb2lkOyB9Ci0gICAgYm9vbCBpc0xvYWQoKSBjb25z
dCB7IHJldHVybiB0eXBlKCkgIT0gVm9pZDsgfQorICAgIGJvb2wgaGFzRmVuY2UoKSBjb25zdCB7
IHJldHVybiAhIWZlbmNlUmFuZ2UoKTsgfQogCisgICAgVHlwZSBhY2Nlc3NUeXBlKCkgY29uc3Q7
CisgICAgQmFuayBhY2Nlc3NCYW5rKCkgY29uc3Q7CiAgICAgc2l6ZV90IGFjY2Vzc0J5dGVTaXpl
KCkgY29uc3Q7Ci0gICAgV2lkdGggYWNjZXNzV2lkdGgoKSBjb25zdDsKKyAgICAKKyAgICAvLyBT
bGlnaHRseSBmYXN0ZXIgdmVyc2lvbiBvZiBhY2Nlc3NXaWR0aCwgaWYgeW91IGtub3cgdGhhdCB5
b3UncmUgd29ya2luZyB3aXRoIGEgbG9hZCBvciBzdG9yZS4KKyAgICBXaWR0aCBsb2FkU3RvcmVX
aWR0aCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgV2lkdGggYWNjZXNzV2lkdGgoKSBjb25z
dDsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwg
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJp
bnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBWYWx1ZSogY2xvbmVJ
bXBsKCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2Nl
ZHVyZTsKLQotICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBM
b2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKLSAgICAv
LyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgotICAgIE1lbW9yeVZhbHVlKEtpbmQga2lu
ZCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZz
ZXQgPSAwKQotICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUsIG9yaWdp
biwgcG9pbnRlcikKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgS2luZCBraW5kLCBUeXBlIHR5cGUsIE9y
aWdpbiBvcmlnaW4sIGludDMyX3Qgb2Zmc2V0LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAg
ICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRz
Li4uKQogICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgLCBtX3JhbmdlKEhlYXBS
YW5nZTo6dG9wKCkpCiAgICAgewotICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAg
ICAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIExvYWQ6
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIExvYWQ4WjoKLSAgICAg
ICAgICAgIGNhc2UgTG9hZDhTOgotICAgICAgICAgICAgY2FzZSBMb2FkMTZaOgotICAgICAgICAg
ICAgY2FzZSBMb2FkMTZTOgotICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMyKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU3RvcmU4OgotICAgICAg
ICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAg
ICAgICBBU1NFUlQodHlwZSA9PSBWb2lkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICB9CisgICAgCisgICAgLy8gVXNlIHRoaXMgZm9y
bSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0
aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlw
ZSkuCisgICAgTWVtb3J5VmFsdWUoS2luZCwgVHlwZSwgT3JpZ2luLCBWYWx1ZSogcG9pbnRlciwg
aW50MzJfdCBvZmZzZXQgPSAwKTsKIAogICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdo
ZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgotICAgIE1lbW9yeVZhbHVlKEtpbmQga2lu
ZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAg
ICAgICAgOiBNZW1vcnlWYWx1ZShraW5kLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQp
Ci0gICAgewotICAgIH0KKyAgICBNZW1vcnlWYWx1ZShLaW5kLCBPcmlnaW4sIFZhbHVlKiBwb2lu
dGVyLCBpbnQzMl90IG9mZnNldCA9IDApOwogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3Rv
cmVzLgotICAgIE1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZh
bHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAgICA6IFZhbHVl
KENoZWNrZWRPcGNvZGUsIGtpbmQsIFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIpCi0gICAg
ICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAsIG1fcmFuZ2UoSGVhcFJhbmdlOjp0b3Ao
KSkKLSAgICB7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgU3RvcmU4OgotICAgICAg
ICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICAgICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KKyAgICBNZW1vcnlWYWx1ZShLaW5kLCBPcmlnaW4sIFZhbHVlKiB2
YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CisgICAgCiAgICAgaW50
MzJfdCBtX29mZnNldCB7IDAgfTsKLSAgICBIZWFwUmFuZ2UgbV9yYW5nZTsKKyAgICBIZWFwUmFu
Z2UgbV9yYW5nZSB7IEhlYXBSYW5nZTo6dG9wKCkgfTsKKyAgICBIZWFwUmFuZ2UgbV9mZW5jZVJh
bmdlIHsgSGVhcFJhbmdlKCkgfTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
NiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJCM1R5cGUuaCIKKyNp
bmNsdWRlICJCM1dpZHRoLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC04Miw3ICs4Myw2IEBAIGVudW0gT3Bjb2RlIDogaW50
MTZfdCB7CiAgICAgTW9kLCAvLyBBbGwgYmV0cyBhcmUgb2ZmIGFzIHRvIHdoYXQgd2lsbCBoYXBw
ZW4gd2hlbiB5b3UgZXhlY3V0ZSB0aGlzIGZvciAtMl4zMSUtMSBhbmQgeCUwLgogICAgIFVNb2Qs
CiAKLQogICAgIC8vIFBvbHltb3JwaGljIG5lZ2F0aW9uLiBOb3RlIHRoYXQgd2Ugb25seSBuZWVk
IHRoaXMgZm9yIGZsb2F0aW5nIHBvaW50LCBzaW5jZSBpbnRlZ2VyIG5lZ2F0aW9uCiAgICAgLy8g
aXMgZXhhY3RseSBsaWtlIFN1YigwLCB4KS4gQnV0IHRoYXQncyBub3QgdHJ1ZSBmb3IgZmxvYXRp
bmcgcG9pbnQuIFN1YigwLCAwKSBpcyAwLCB3aGlsZQogICAgIC8vIE5lZygwKSBpcyAtMC4gQWxz
bywgd2UgY2Fub25pY2FsaXplIFN1YigwLCB4KSBpbnRvIE5lZyh4KSBpbiBjYXNlIG9mIGludGVn
ZXJzLgpAQCAtMTYyLDYgKzE2MiwxMDcgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKICAgICBT
dG9yZTE2LAogICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9yZSBmb3IgSW50MzIsIElu
dDY0LCBGbG9hdCwgYW5kIERvdWJsZS4KICAgICBTdG9yZSwKKyAgICAKKyAgICAvLyBBdG9taWMg
Y29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgYSBib29sZWFuLiBNYXkgY2hvb3NlIHRvIGRv
IG5vdGhpbmcgYW5kIHJldHVybiBmYWxzZS4gWW91IGNhbgorICAgIC8vIHVzdWFsbHkgYXNzdW1l
IHRoYXQgdGhpcyBpcyBmYXN0ZXIgYW5kIHJlc3VsdHMgaW4gbGVzcyBjb2RlIHRoYW4gQXRvbWlj
U3Ryb25nQ0FTLCB0aG91Z2ggdGhhdCdzCisgICAgLy8gbm90IG5lY2Vzc2FyaWx5IHRydWUgb24g
SW50ZWwsIGlmIGluc3RydWN0aW9uIHNlbGVjdGlvbiBkb2VzIGl0cyBqb2IuIEltYWdpbmUgdGhh
dCB0aGlzIG9wY29kZSBpcworICAgIC8vIGFzIGlmIHlvdSBkaWQgdGhpcyBhdG9taWNhbGx5Ogor
ICAgIC8vCisgICAgLy8gdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAvLyBib29sIEF0b21pY1dl
YWtDQVMoVCBleHBlY3RlZFZhbHVlLCBUIG5ld1ZhbHVlLCBUKiBwdHIpCisgICAgLy8geworICAg
IC8vICAgICBpZiAoIXJhbmQoKSkKKyAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gUmVh
bCB3b3JsZCBleGFtcGxlIG9mIHRoaXM6IGNvbnRleHQgc3dpdGNoIG9uIEFSTSB3aGlsZSBkb2lu
ZyBDQVMuCisgICAgLy8gICAgIGlmICgqcHRyICE9IGV4cGVjdGVkVmFsdWUpCisgICAgLy8gICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gICAgICpwdHIgPSBuZXdWYWx1ZTsKKyAgICAvLyAg
ICAgcmV0dXJuIHRydWU7CisgICAgLy8gfQorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGFsbCBh
dG9taWNzIHB1dCB0aGUgcG9pbnRlciBsYXN0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cgbG9h
ZHMgYW5kIHN0b3JlcyB3b3JrLiBUaGlzCisgICAgLy8gaXMgYSBnb29meSB0cmFkaXRpb24sIGJ1
dCBpdCdzIGhhcm1sZXNzLCBhbmQgYmV0dGVyIHRoYW4gYmVpbmcgaW5jb25zaXN0ZW50LgorICAg
IC8vCisgICAgLy8gTm90ZSB0aGF0IHdlYWsgQ0FTIGhhcyBubyBmZW5jaW5nIGd1YXJhbnRlZXMg
d2hlbiBpdCBmYWlscy4gVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcKKyAgICAvLyB0cmFu
c2Zvcm1hdGlvbiBpcyBhbHdheXMgdmFsaWQ6CisgICAgLy8KKyAgICAvLyBCZWZvcmU6CisgICAg
Ly8KKyAgICAvLyAgICAgICAgIEJyYW5jaChBdG9taWNXZWFrQ0FTKGV4cGVjdGVkLCBuZXcsIHB0
cikpCisgICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhlbjojc3VjY2VzcywgRWxzZTojZmFpbAor
ICAgIC8vCisgICAgLy8gQWZ0ZXI6CisgICAgLy8KKyAgICAvLyAgICAgICAgIEJyYW5jaChFcXVh
bChMb2FkKHB0ciksIGV4cGVjdGVkKSkKKyAgICAvLyAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiNh
dHRlbXB0LCBFbHNlOiNmYWlsCisgICAgLy8gICAgIEJCI2F0dGVtcHQ6CisgICAgLy8gICAgICAg
ICBCcmFuY2goQXRvbWljV2Vha0NBUyhleHBlY3RlZCwgbmV3LCBwdHIpKQorICAgIC8vICAgICAg
IFN1Y2Nlc3NvcnM6IFRoZW46I3N1Y2Nlc3MsIEVsc2U6I2ZhaWwKKyAgICAvLworICAgIC8vIEJv
dGgga2luZHMgb2YgQ0FTIGZvciBub24tY2Fub25pY2FsIHdpZHRocyAoV2lkdGg4IGFuZCBXaWR0
aDE2KSBpZ25vcmUgdGhlIGlycmVsZXZhbnQgYml0cyBvZiB0aGUKKyAgICAvLyBpbnB1dC4KKyAg
ICBBdG9taWNXZWFrQ0FTLAorICAgIAorICAgIC8vIEF0b21pYyBjb21wYXJlIGFuZCBzd2FwIHRo
YXQgcmV0dXJucyB0aGUgb2xkIHZhbHVlLiBEb2VzIG5vdCBoYXZlIHRoZSBub25kZXRlcm1pbmlz
bSBvZiBXZWFrQ0FTLgorICAgIC8vIFRoaXMgaXMgYSBiaXQgbW9yZSBjb2RlIGFuZCBhIGJpdCBz
bG93ZXIgaW4gc29tZSBjYXNlcywgdGhvdWdoIG5vdCBieSBhIGxvdC4gSW1hZ2luZSB0aGF0IHRo
aXMKKyAgICAvLyBvcGNvZGUgaXMgYXMgaWYgeW91IGRpZCB0aGlzIGF0b21pY2FsbHk6CisgICAg
Ly8KKyAgICAvLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIC8vIFQgQXRvbWljU3Ryb25nQ0FT
KFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSwgVCogcHRyKQorICAgIC8vIHsKKyAgICAvLyAg
ICAgVCBvbGRWYWx1ZSA9ICpwdHI7CisgICAgLy8gICAgIGlmIChvbGRWYWx1ZSA9PSBleHBlY3Rl
ZFZhbHVlKQorICAgIC8vICAgICAgICAgKnB0ciA9IG5ld1ZhbHVlOworICAgIC8vICAgICByZXR1
cm4gb2xkVmFsdWUKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgQXRvbWljV2Vh
a0NBUyBhbmQgQXRvbWljU3Ryb25nQ0FTIHNvcnQgb2YgaGF2ZSB0aGlzIGtpbmQgb2YgZXF1aXZh
bGVuY2U6CisgICAgLy8KKyAgICAvLyBBdG9taWNXZWFrQ0FTKEBleHAsIEBuZXcsIEBwdHIpID09
IEVxdWFsKEF0b21pY1N0cm9uZ0NBUyhAZXhwLCBAbmV3LCBAcHRyKSwgQGV4cCkKKyAgICAvLwor
ICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhlIFdlYWtDQVMgZG9lcyBub3Qgc3B1cmlvdXNseSBmYWls
LCBvZiBjb3Vyc2UuCisgICAgQXRvbWljU3Ryb25nQ0FTLAorICAgIAorICAgIC8vIEF0b21pY2Fs
bHkgX19fIGEgbWVtb3J5IGxvY2F0aW9uIGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gU3ludGF4
OgorICAgIC8vCisgICAgLy8gQG9sZFZhbHVlID0gQXRvbWljWGNoZ19fXyhAb3BlcmFuZCwgQHB0
cikKKyAgICAvLworICAgIC8vIEZvciBub24tY2Fub25pY2FsIHdpZHRocyAoV2lkdGg4IGFuZCBX
aWR0aDE2KSwgdGhlc2UgcmV0dXJuIHNpZ24tZXh0ZW5kZWQgcmVzdWx0cyBhbmQgaWdub3JlIHRo
ZQorICAgIC8vIGlycmVsZXZhbnQgYml0cyBvZiB0aGVpciBpbnB1dHMuCisgICAgQXRvbWljWGNo
Z0FkZCwKKyAgICBBdG9taWNYY2hnQW5kLAorICAgIEF0b21pY1hjaGdPciwKKyAgICBBdG9taWNY
Y2hnU3ViLAorICAgIEF0b21pY1hjaGdYb3IsCisgICAgCisgICAgLy8gRklYTUU6IE1heWJlIHdl
IHNob3VsZCBoYXZlIEF0b21pY1hjaGdOZWcgYW5kIEF0b21pY1hjaGdOb3QuCisgICAgCisgICAg
Ly8gQXRvbWljYWxseSBleGNoYW5nZSBhIHZhbHVlIHdpdGggYSBtZW1vcnkgbG9jYXRpb24uIFN5
bnRheDoKKyAgICAvLworICAgIC8vIEBvbGRWYWx1ZSA9IEF0b21pY1hjaGcoQG5ld1ZhbHVlLCBA
cHRyKQorICAgIEF0b21pY1hjaGcsCisgICAgCisgICAgLy8gSW50cm9kdWNlIGFuIGludmlzaWJs
ZSBkZXBlbmRlbmN5IGZvciBibG9ja2luZyBtb3Rpb24gb2YgbG9hZHMgd2l0aCByZXNwZWN0IHRv
IGVhY2ggb3RoZXIuIFN5bnRheDoKKyAgICAvLworICAgIC8vIEByZXN1bHQgPSBEZXBlbmQoQHBo
YW50b20pCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIGV2ZW50dWFsbHkgY29kZWdlbmVyYXRlZCB0
byBoYXZlIGxvY2FsIHNlbWFudGljcyBhcyBpZiB3ZSBkaWQ6CisgICAgLy8KKyAgICAvLyBAcmVz
dWx0ID0gJDAKKyAgICAvLworICAgIC8vIEJ1dCBpdCBlbnN1cmVzIHRoYXQgdGhlIHVzZXJzIG9m
IEByZXN1bHQgY2Fubm90IGV4ZWN1dGUgdW50aWwgQHBoYW50b20gaXMgY29tcHV0ZWQuCisgICAg
Ly8KKyAgICAvLyBUaGUgY29tcGlsZXIgaXMgbm90IGFsbG93ZWQgdG8gcmVhc29uIGFib3V0IHRo
ZSBmYWN0IHRoYXQgRGVwZW5kIGNvZGVnZW5lcmF0ZXMgdGhpcyB3YXkuIEFueSBraW5kCisgICAg
Ly8gb2YgdHJhbnNmb3JtYXRpb24gb3IgYW5hbHlzaXMgdGhhdCByZWxpZXMgb24gdGhlIGluc2ln
aHQgdGhhdCBEZXBlbmQgaXMgcmVhbGx5IHplcm8gaXMgdW5zb3VuZCwKKyAgICAvLyBiZWNhdXNl
IGl0IHVubG9ja3MgcmVvcmRlcmluZyBvZiB1c2VycyBvZiBAcmVzdWx0IGFuZCBAcGhhbnRvbS4K
KyAgICAvLworICAgIC8vIE9uIFg4NiwgdGhpcyBpcyBsb3dlcmVkIHRvIGEgbG9hZC1sb2FkIGZl
bmNlIGFuZCBAcmVzdWx0IHVzZXMgQHBoYW50b20gZGlyZWN0bHkuCisgICAgLy8KKyAgICAvLyBP
biBBUk0sIHRoaXMgaXMgbG93ZXJlZCBhcyBpZiBsaWtlOgorICAgIC8vCisgICAgLy8gQHJlc3Vs
dCA9IEJpdFhvcihAcGhhbnRvbSwgQHBoYW50b20pCisgICAgLy8KKyAgICAvLyBFeGNlcHQgdGhh
dCB0aGUgY29tcGlsZXIgbmV2ZXIgZ2V0cyBhbiBvcHBvcnR1bml0eSB0byBzaW1wbGlmeSBvdXQg
dGhlIEJpdFhvci4KKyAgICBEZXBlbmQsCiAKICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gY29tcHV0
ZSB0aGUgYWN0dWFsIGFkZHJlc3Mgb2YgYSBXYXNtIG1lbW9yeSBvcGVyYXRpb24uIEl0IHRha2Vz
IGFuIEludFB0cgogICAgIC8vIGFuZCBhIHBpbm5lZCByZWdpc3RlciB0aGVuIGNvbXB1dGVzIHRo
ZSBhcHByb3ByaWF0ZSBJbnRQdHIgYWRkcmVzcy4gRm9yIHRoZSB1c2UtY2FzZSBvZgpAQCAtMzAx
LDYgKzQwMiwxMTAgQEAgaW5saW5lIGJvb2wgaXNEZWZpbml0ZWx5VGVybWluYWwoT3Bjb2RlIAog
ICAgIH0KIH0KIAoraW5saW5lIGJvb2wgaXNMb2FkKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dp
dGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICBjYXNlIExvYWQ4UzoKKyAgICBj
YXNlIExvYWQxNlo6CisgICAgY2FzZSBMb2FkMTZTOgorICAgIGNhc2UgTG9hZDoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworaW5saW5lIGJvb2wgaXNTdG9yZShPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgY2FzZSBTdG9yZTg6CisgICAgY2FzZSBTdG9yZTE2OgorICAgIGNhc2Ug
U3RvcmU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzTG9hZFN0b3JlKE9wY29kZSBvcGNv
ZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICBjYXNl
IExvYWQ4UzoKKyAgICBjYXNlIExvYWQxNlo6CisgICAgY2FzZSBMb2FkMTZTOgorICAgIGNhc2Ug
TG9hZDoKKyAgICBjYXNlIFN0b3JlODoKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgY2FzZSBTdG9y
ZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNBdG9taWMoT3Bjb2RlIG9wY29kZSkKK3sK
KyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNl
IEF0b21pY1N0cm9uZ0NBUzoKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBBdG9t
aWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNoZ1N1
YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hnOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitpbmxpbmUgYm9vbCBpc0F0b21pY0NBUyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3
aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWlj
U3Ryb25nQ0FTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0F0b21pY1hjaGcoT3Bjb2Rl
IG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgQXRvbWljWGNoZ0Fk
ZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAg
Y2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0
b21pY1hjaGc6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzTWVtb3J5QWNjZXNzKE9wY29k
ZSBvcGNvZGUpCit7CisgICAgcmV0dXJuIGlzQXRvbWljKG9wY29kZSkgfHwgaXNMb2FkU3RvcmUo
b3Bjb2RlKTsKK30KKworaW5saW5lIE9wY29kZSBzaWduRXh0ZW5kT3Bjb2RlKFdpZHRoIHdpZHRo
KQoreworICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICBjYXNlIFdpZHRoODoKKyAgICAgICAgcmV0
dXJuIFNFeHQ4OworICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgcmV0dXJuIFNFeHQxNjsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gT29wczsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiBu
YW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDYgKzIwMiw4IEBAIHZvaWQgUHJvY2Vk
dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKICAgICAgICAgfQogICAgICAgICBkYXRhTG9n
KCIgICAgIiwgZGVlcER1bXAoKnRoaXMsIHZhbHVlKSwgIlxuIik7CiAgICAgfQorICAgIGlmICho
YXNRdWlya3MoKSkKKyAgICAgICAgb3V0LnByaW50KCJIYXMgUXVpcmtzOiBUcnVlXG4iKTsKICAg
ICBpZiAodmFyaWFibGVzKCkuc2l6ZSgpKSB7CiAgICAgICAgIG91dC5wcmludCgiVmFyaWFibGVz
OlxuIik7CiAgICAgICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDogdmFyaWFibGVzKCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNyw2ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGFkZEludENvbnN0YW50
KE9yaWdpbiwgVHlwZSwgaW50NjRfdCB2YWx1ZSk7CiAgICAgVmFsdWUqIGFkZEludENvbnN0YW50
KFZhbHVlKiwgaW50NjRfdCB2YWx1ZSk7CiAKKyAgICAvLyBZb3UncmUgZ3VhcmFudGVlZCB0aGF0
IGJvdHRvbSBpcyB6ZXJvLgogICAgIFZhbHVlKiBhZGRCb3R0b20oT3JpZ2luLCBUeXBlKTsKICAg
ICBWYWx1ZSogYWRkQm90dG9tKFZhbHVlKik7CiAKQEAgLTE5NSw2ICsxOTYsMTIgQEAgcHVibGlj
OgogICAgIC8vIGFsaXZlLiBHcmVhdCBmb3IgY29tcGlsZXItZ2VuZXJhdGVkIGRhdGEgc2VjdGlv
bnMsIGxpa2Ugc3dpdGNoIGp1bXAgdGFibGVzIGFuZCBjb25zdGFudCBwb29scy4KICAgICAvLyBU
aGlzIHJldHVybnMgbWVtb3J5IHRoYXQgaGFzIGJlZW4gemVyby1pbml0aWFsaXplZC4KICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiBhZGREYXRhU2VjdGlvbihzaXplX3QpOworICAgIAorICAg
IC8vIFNvbWUgb3BlcmF0aW9ucyBhcmUgc3BlY2lmaWVkIGluIEIzIElSIHRvIGJlaGF2ZSBvbmUg
d2F5IGJ1dCBvbiB0aGlzIGdpdmVuIENQVSB0aGV5IGJlaGF2ZSBhCisgICAgLy8gZGlmZmVyZW50
IHdheS4gV2hlbiB0cnVlLCB0aG9zZSBCMyBJUiBvcHMgc3dpdGNoIHRvIGJlaGF2aW5nIHRoZSBD
UFUgd2F5LCBhbmQgdGhlIG9wdGltaXplciBtYXkKKyAgICAvLyBzdGFydCB0YWtpbmcgYWR2YW50
YWdlIG9mIGl0LgorICAgIGJvb2wgaGFzUXVpcmtzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNRdWly
a3M7IH0KKyAgICB2b2lkIHNldEhhc1F1aXJrcyhib29sIHZhbHVlKSB7IG1faGFzUXVpcmtzID0g
dmFsdWU7IH0KIAogICAgIE9wYXF1ZUJ5cHJvZHVjdHMmIGJ5cHJvZHVjdHMoKSB7IHJldHVybiAq
bV9ieXByb2R1Y3RzOyB9CiAKQEAgLTI1Miw2ICsyNTksNyBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoUHJpbnRTdHJlYW0mLCBPcmlnaW4pPj4gbV9vcmlnaW5QcmludGVy
OwogICAgIGNvbnN0IHZvaWQqIG1fZnJvbnRlbmREYXRhOwogICAgIFBDVG9PcmlnaW5NYXAgbV9w
Y1RvT3JpZ2luTWFwOworICAgIGJvb2wgbV9oYXNRdWlya3MgeyBmYWxzZSB9OwogfTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMiw3
ICs2MDIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBicmVhazsK
LQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmVnOgogICAgICAgICAgICAgLy8gVHVybiB0
aGlzOiBOZWcoY29uc3RhbnQpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IC1jb25zdGFudApA
QCAtMTI5NSw2ICsxMjk1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IFNFeHQ4KEF0b21pY1hjaGdfX18pCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBBdG9taWNYY2hnX19fCisgICAgICAgICAgICAgICAgaWYgKGlzQXRvbWljWGNoZyhtX3ZhbHVl
LT5jaGlsZCgwKS0+b3Bjb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNo
aWxkKDApLT5hczxBdG9taWNWYWx1ZT4oKS0+b3BlcmF0aW9uV2lkdGgoKSA9PSBXaWR0aDgpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgw
KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgU0V4dDE2OgpAQCAt
MTM0Myw2ICsxMzUzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFtX3By
b2MuaGFzUXVpcmtzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihB
dG9taWNYY2hnX19fKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19f
XworICAgICAgICAgICAgICAgIGlmIChpc0F0b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9w
Y29kZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRv
bWljVmFsdWU+KCktPm9wZXJhdGlvbldpZHRoKCkgPT0gV2lkdGgxNikgeworICAgICAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTRXh0MzI6CkBAIC0yMTAxLDIyICsyMTIx
LDI1IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChtX3ZhbHVlLT5udW1DaGlsZHJlbigpID49
IDIpOwogICAgICAgICAKICAgICAgICAgLy8gTGVhdmUgaXQgYWxvbmUgaWYgdGhlIHJpZ2h0IGNo
aWxkIGlzIGEgY29uc3RhbnQuCi0gICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNDb25z
dGFudCgpKQorICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzQ29uc3RhbnQoKQorICAg
ICAgICAgICAgfHwgbV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NB
UykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgwKS0+aXNDb25zdGFudCgpKSB7CisgICAgICAgIGF1dG8gc3dhcCA9IFsmXSAoKSB7CiAg
ICAgICAgICAgICBzdGQ6OnN3YXAobV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEp
KTsKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3dhcCgpOworICAgICAg
ICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJv
bmdDQVMpCisgICAgICAgICAgICByZXR1cm4gc3dhcCgpOworICAgICAgICAKICAgICAgICAgLy8g
U29ydCB0aGUgb3BlcmFuZHMuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGNhbm9uaWNhbGl6YXRpb24u
IFdlIHVzZSB0aGUgaW5kZXggaW5zdGVhZCBvZgogICAgICAgICAvLyB0aGUgYWRkcmVzcyB0byBt
YWtlIHRoaXMgYXQgbGVhc3Qgc2xpZ2h0bHkgZGV0ZXJtaW5pc3RpYy4KLSAgICAgICAgaWYgKG1f
dmFsdWUtPmNoaWxkKDApLT5pbmRleCgpID4gbV92YWx1ZS0+Y2hpbGQoMSktPmluZGV4KCkpIHsK
LSAgICAgICAgICAgIHN0ZDo6c3dhcChtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQo
MSkpOwotICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQorICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmluZGV4KCkgPiBtX3Zh
bHVlLT5jaGlsZCgxKS0+aW5kZXgoKSkKKyAgICAgICAgICAgIHJldHVybiBzd2FwKCk7CiAgICAg
fQogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBhIGZvcndhcmQgYW5hbHlz
aXMuIEluc3RlYWQsIHdlIHVzZXMgYSBib3VuZGVkLXNlYXJjaCBiYWNrd2FyZHMKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQ2LDYgKzM0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQg
IiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJ
bnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZh
bHVlKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTG9hZDoKQEAgLTM1Myw2ICszNTQs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVu
KCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwog
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAq
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAg
ICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgU3RvcmU4OgpAQCAtMzYyLDYgKzM2NCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQz
MiwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hp
bGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAg
ICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgU3RvcmU6CkBAIC0zNjksOCArMzcyLDQ5IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2
YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgp
ID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3Rh
Y2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgp
LmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAzLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1ZS0+
Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJ
REFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRl
clR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21p
Yyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoK
KyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVu
KCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDEp
LT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJ
bnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAq
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgICAgICAgICBjYXNlIEF0
b21pY1hjaGdBbmQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAgICAg
IGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAg
ICAgICAgICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFs
dWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+
dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50
KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOworICAgICAgICAg
ICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBEZXBlbmQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZh
bHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGls
ZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtQWRkcmVzczoKICAgICAgICAgICAgICAgICBW
QUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsK
ICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0
ICIsICp2YWx1ZSkpOwpAQCAtNTM3LDYgKzU4MSwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZUZlbmNlKFZh
bHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpCisgICAg
ICAgICAgICBWQUxJREFURShtZW1vcnR5LT5hY2Nlc3NCYW5rKCkgPT0gR1AsICgiRmVuY2UgYXQg
IiwgKm1lbW9yeSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlQXRvbWljKFZhbHVl
KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSB2YWx1ZS0+YXM8
QXRvbWljVmFsdWU+KCk7CisgICAgICAgIAorICAgICAgICBWQUxJREFURShiZXN0VHlwZShhdG9t
aWMtPm9wZXJhdGlvbldpZHRoKCkpID09IGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgIH0KIAogICAgIHZvaWQgdmFsaWRhdGVTdGFja0FjY2VzcyhWYWx1ZSog
dmFsdWUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNp
bmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgi
CiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQm90dG9tUHJv
dmlkZXIuaCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKQEAgLTUxMCw2ICs1MTEsNyBAQCBi
b29sIFZhbHVlOjpyZXR1cm5zQm9vbCgpIGNvbnN0CiAgICAgY2FzZSBBYm92ZUVxdWFsOgogICAg
IGNhc2UgQmVsb3dFcXVhbDoKICAgICBjYXNlIEVxdWFsT3JVbm9yZGVyZWQ6CisgICAgY2FzZSBB
dG9taWNXZWFrQ0FTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFBoaToKICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgc3RvcnkgaGVyZS4KQEAgLTU4OSw2ICs1OTEs
NyBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICBjYXNlIEJlbG93RXF1YWw6
CiAgICAgY2FzZSBFcXVhbE9yVW5vcmRlcmVkOgogICAgIGNhc2UgU2VsZWN0OgorICAgIGNhc2Ug
RGVwZW5kOgogICAgICAgICBicmVhazsKICAgICBjYXNlIERpdjoKICAgICBjYXNlIFVEaXY6CkBA
IC02MDAsMTYgKzYwMyw0NCBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICBj
YXNlIExvYWQ4UzoKICAgICBjYXNlIExvYWQxNlo6CiAgICAgY2FzZSBMb2FkMTZTOgotICAgIGNh
c2UgTG9hZDoKLSAgICAgICAgcmVzdWx0LnJlYWRzID0gYXM8TWVtb3J5VmFsdWU+KCktPnJhbmdl
KCk7CisgICAgY2FzZSBMb2FkOiB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBhczxN
ZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5LT5yYW5nZSgpOwor
ICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKSB7CisgICAgICAgICAgICByZXN1bHQud3Jp
dGVzID0gbWVtb3J5LT5mZW5jZVJhbmdlKCk7CisgICAgICAgICAgICByZXN1bHQuZmVuY2UgPSB0
cnVlOworICAgICAgICB9CiAgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsK
ICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgU3RvcmU4OgogICAgIGNhc2UgU3RvcmUx
NjoKLSAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXN1bHQud3JpdGVzID0gYXM8TWVtb3J5VmFs
dWU+KCktPnJhbmdlKCk7CisgICAgY2FzZSBTdG9yZTogeworICAgICAgICBNZW1vcnlWYWx1ZSog
bWVtb3J5ID0gYXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIHJlc3VsdC53cml0ZXMgPSBtZW1v
cnktPnJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpIHsKKyAgICAgICAg
ICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+ZmVuY2VSYW5nZSgpOworICAgICAgICAgICAgcmVz
dWx0LmZlbmNlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuY29udHJvbERlcGVu
ZGVudCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEF0b21pY1dlYWtD
QVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgor
ICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNl
IEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWlj
WGNoZzogeworICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gYXM8QXRvbWljVmFsdWU+KCk7
CisgICAgICAgIHJlc3VsdC5yZWFkcyA9IGF0b21pYy0+cmFuZ2UoKSB8IGF0b21pYy0+ZmVuY2VS
YW5nZSgpOworICAgICAgICByZXN1bHQud3JpdGVzID0gYXRvbWljLT5yYW5nZSgpIHwgYXRvbWlj
LT5mZW5jZVJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpCisgICAgICAg
ICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAgICByZXN1bHQuY29udHJvbERlcGVuZGVu
dCA9IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIFdhc21BZGRyZXNzOgog
ICAgICAgICByZXN1bHQucmVhZHNQaW5uZWQgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTYx
NywxOCArNjQ4LDcgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgICAgIGNv
bnN0IEZlbmNlVmFsdWUqIGZlbmNlID0gYXM8RmVuY2VWYWx1ZT4oKTsKICAgICAgICAgcmVzdWx0
LnJlYWRzID0gZmVuY2UtPnJlYWQ7CiAgICAgICAgIHJlc3VsdC53cml0ZXMgPSBmZW5jZS0+d3Jp
dGU7Ci0gICAgICAgIAotICAgICAgICAvLyBQcmV2ZW50IGtpbGxpbmcgb2YgZmVuY2VzIHRoYXQg
Y2xhaW0gbm90IHRvIHdyaXRlIGFueXRoaW5nLiBJdCdzIGEgYml0IHdlaXJkIHRoYXQgd2UgdXNl
Ci0gICAgICAgIC8vIGxvY2FsIHN0YXRlIGFzIHRoZSB3YXkgdG8gZG8gdGhpcywgYnV0IGl0IGhh
cHBlbnMgdG8gd29yazogd2UgbXVzdCBhc3N1bWUgdGhhdCB3ZSBjYW5ub3QKLSAgICAgICAgLy8g
a2lsbCB3cml0ZXNMb2NhbFN0YXRlIHVubGVzcyB3ZSB1bmRlcnN0YW5kcyBleGFjdGx5IHdoYXQg
dGhlIGluc3RydWN0aW9uIGlzIGRvaW5nIChsaWtlCi0gICAgICAgIC8vIHRoZSB3YXkgdGhhdCBm
aXhTU0EgdW5kZXJzdGFuZHMgU2V0L0dldCBhbmQgdGhlIHdheSB0aGF0IHJlZHVjZVN0cmVuZ3Ro
IGFuZCBvdGhlcnMKLSAgICAgICAgLy8gdW5kZXJzdGFuZCBVcHNpbG9uKS4gVGhpcyB3b3VsZCBv
bmx5IGJlY29tZSBhIHByb2JsZW0gaWYgd2UgaGFkIHNvbWUgYW5hbHlzaXMgdGhhdCB3YXMKLSAg
ICAgICAgLy8gbG9va2luZyB0byB1c2UgdGhlIHdyaXRlc0xvY2FsU3RhdGUgYml0IHRvIGludmFs
aWRhdGUgYSBDU0Ugb3ZlciBsb2NhbCBzdGF0ZSBvcGVyYXRpb25zLgotICAgICAgICAvLyBUaGVu
IGEgRmVuY2Ugd291bGQgbG9vayBibG9jaywgc2F5LCB0aGUgZWxpbWluYXRpb24gb2YgYSByZWR1
bmRhbnQgR2V0LiBCdXQgaXQgbGlrZQotICAgICAgICAvLyB0aGF0J3Mgbm90IGF0IGFsbCBob3cg
b3VyIG9wdGltaXphdGlvbnMgZm9yIFNldC9HZXQvVXBzaWxvbi9QaGkgd29yayAtIHRoZXkgZ3Jv
ayB0aGVpcgotICAgICAgICAvLyBvcGVyYXRpb25zIGRlZXBseSBlbm91Z2ggdGhhdCB0aGV5IGhh
dmUgbm8gbmVlZCB0byBjaGVjayB0aGlzIGJpdCAtIHNvIHRoaXMgY2hlYXQgaXMKLSAgICAgICAg
Ly8gZmluZS4KLSAgICAgICAgcmVzdWx0LndyaXRlc0xvY2FsU3RhdGUgPSB0cnVlOworICAgICAg
ICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBD
Q2FsbDoKQEAgLTY5NCw2ICs3MTQsNyBAQCBWYWx1ZUtleSBWYWx1ZTo6a2V5KCkgY29uc3QKICAg
ICBjYXNlIENoZWNrOgogICAgIGNhc2UgQml0d2lzZUNhc3Q6CiAgICAgY2FzZSBOZWc6CisgICAg
Y2FzZSBEZXBlbmQ6CiAgICAgICAgIHJldHVybiBWYWx1ZUtleShraW5kKCksIHR5cGUoKSwgY2hp
bGQoMCkpOwogICAgIGNhc2UgQWRkOgogICAgIGNhc2UgU3ViOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwxMCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKS5vcGNvZGUo
KTsgfQogICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUga2luZCBpcyBtZWFudCB0byBiZSBpbW11
dGFibGUuIERvIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHRoaXMgaXMgc2FmZS4gSXQncyBub3QK
KyAgICAvLyB1c3VhbGx5IHNhZmUuCisgICAgdm9pZCBzZXRLaW5kVW5zYWZlbHkoS2luZCBraW5k
KSB7IG1fa2luZCA9IGtpbmQ7IH0KKyAgICAKICAgICAvLyBJdCdzIGdvb2QgcHJhY3RpY2UgdG8g
bWlycm9yIEtpbmQgbWV0aG9kcyBoZXJlLCBzbyB5b3UgY2FuIHNheSB2YWx1ZS0+aXNCbGFoKCkK
ICAgICAvLyBpbnN0ZWFkIG9mIHZhbHVlLT5raW5kKCkuaXNCbGFoKCkuCiAgICAgYm9vbCBpc0No
aWxsKCkgY29uc3QgeyByZXR1cm4ga2luZCgpLmlzQ2hpbGwoKTsgfQpAQCAtMTA3LDYgKzExMSw4
IEBAIHB1YmxpYzoKICAgICAvLyB2YWx1ZXMgd2l0aCBJZGVudGl0aWVzIG9uIGJvdHRvbSBjb25z
dGFudHMuIEZvciB0aGlzIHJlYXNvbiwgdGhpcyB0YWtlcyBhIGNhbGxiYWNrIHRoYXQgaXMKICAg
ICAvLyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYm90dG9tcy4gVGhlcmUncyBhIHV0aWxpdHkg
Zm9yIHRoaXMsIHNlZSBCM0JvdHRvbVByb3ZpZGVyLmguIFlvdQogICAgIC8vIGNhbiBhbHNvIGFj
Y2VzcyB0aGF0IHV0aWxpdHkgdXNpbmcgcmVwbGFjZVdpdGhCb3R0b20oSW5zZXJ0aW9uU2V0Jiwg
c2l6ZV90KS4KKyAgICAvLworICAgIC8vIFlvdSdyZSBndWFyYW50ZWVkIHRoYXQgYm90dG9tIGlz
IHplcm8uCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQm90dG9tUHJvdmlkZXI+CiAgICAgdm9pZCBy
ZXBsYWNlV2l0aEJvdHRvbShjb25zdCBCb3R0b21Qcm92aWRlciYpOwogICAgIApAQCAtMzIxLDYg
KzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSVRvRjoKICAgICAgICAgY2FzZSBCaXR3
aXNlQ2FzdDoKICAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2UgRGVwZW5kOgogICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKG51bUFyZ3MgIT0gMSkpCiAgICAgICAgICAgICAgICAgYmFk
S2luZChraW5kLCBudW1BcmdzKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1dpZHRoLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCwzOCBA
QAogCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitUeXBlIGJlc3RUeXBlKEJhbmsgYmFuaywgV2lkdGggd2lkdGgpCit7Cisg
ICAgc3dpdGNoICh3aWR0aCkgeworICAgIGNhc2UgV2lkdGg4OgorICAgIGNhc2UgV2lkdGgxNjoK
KyAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgIHN3aXRjaCAoYmFuaykgeworICAgICAgICBjYXNl
IEdQOgorICAgICAgICAgICAgcmV0dXJuIEludDMyOworICAgICAgICBjYXNlIEZQOgorICAgICAg
ICAgICAgcmV0dXJuIEZsb2F0OworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWb2lkOworICAgIGNhc2UgV2lkdGg2NDoKKyAg
ICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICByZXR1
cm4gSW50NjQ7CisgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICByZXR1cm4gRG91YmxlOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBWb2lkOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBWb2lkOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwogbmFtZXNw
YWNlIFdURiB7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OkIz
OjpXaWR0aCB3aWR0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguaAkocmV2aXNp
b24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsNiArNjIsMTggQEAgaW5saW5lIFdpZHRoIHdpZHRoRm9yVHlwZShUeXBl
IHR5cGUpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK2lubGluZSBXaWR0aCBjYW5v
bmljYWxXaWR0aChXaWR0aCB3aWR0aCkKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoV2lkdGgzMiwg
d2lkdGgpOworfQorCitpbmxpbmUgYm9vbCBpc0Nhbm9uaWNhbFdpZHRoKFdpZHRoIHdpZHRoKQor
eworICAgIHJldHVybiB3aWR0aCA+PSBXaWR0aDMyOworfQorCitUeXBlIGJlc3RUeXBlKEJhbmsg
YmFuaywgV2lkdGggd2lkdGgpOworCiBpbmxpbmUgV2lkdGggY29uc2VydmF0aXZlV2lkdGgoQmFu
ayBiYW5rKQogewogICAgIHJldHVybiBiYW5rID09IEdQID8gcG9pbnRlcldpZHRoKCkgOiBXaWR0
aDY0OwpAQCAtOTMsNiArMTA1LDIwIEBAIGlubGluZSBXaWR0aCB3aWR0aEZvckJ5dGVzKHVuc2ln
bmVkIGJ5dGUKICAgICB9CiB9CiAKK2lubGluZSB1aW50NjRfdCBtYXNrKFdpZHRoIHdpZHRoKQor
eworICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICBjYXNlIFdpZHRoODoKKyAgICAgICAgcmV0dXJu
IDB4MDAwMDAwMDAwMDAwMDBmZmxsdTsKKyAgICBjYXNlIFdpZHRoMTY6CisgICAgICAgIHJldHVy
biAweDAwMDAwMDAwMDAwMGZmZmZsbHU7CisgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICByZXR1
cm4gMHgwMDAwMDAwMGZmZmZmZmZmbGx1OworICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgcmV0
dXJuIDB4ZmZmZmZmZmZmZmZmZmZmZmxsdTsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBAIHVu
c2lnbmVkIEFyZzo6anNIYXNoKCkgY29uc3QKICAgICBjYXNlIFJlbENvbmQ6CiAgICAgY2FzZSBS
ZXNDb25kOgogICAgIGNhc2UgRG91YmxlQ29uZDoKKyAgICBjYXNlIFN0YXR1c0NvbmQ6CiAgICAg
Y2FzZSBXaWR0aEFyZzoKICAgICAgICAgcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X29mZnNldCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTgyLDYgKzE4Myw5IEBAIHZvaWQgQXJnOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAg
ICBvdXQucHJpbnQoYXNEb3VibGVDb25kaXRpb24oKSk7CiAgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFN0YXR1c0NvbmQ6CisgICAgICAgIG91dC5wcmludChhc1N0YXR1c0NvbmRpdGlvbigpKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KHBv
aW50ZXJEdW1wKHNwZWNpYWwoKSkpOwogICAgICAgICByZXR1cm47CkBAIC0yNDEsNiArMjQ1LDkg
QEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZwogICAgIGNhc2UgQXJn
OjpEb3VibGVDb25kOgogICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUNvbmQiKTsKICAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQXJnOjpTdGF0dXNDb25kOgorICAgICAgICBvdXQucHJpbnQoIlN0
YXR1c0NvbmQiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpTcGVjaWFsOgogICAg
ICAgICBvdXQucHJpbnQoIlNwZWNpYWwiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjg1LDYgKzI5
Miw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNl
IEFyZzo6RWFybHlEZWY6CiAgICAgICAgIG91dC5wcmludCgiRWFybHlEZWYiKTsKICAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQXJnOjpFYXJseVpEZWY6CisgICAgICAgIG91dC5wcmludCgiRWFy
bHlaRGVmIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6U2NyYXRjaDoKICAgICAg
ICAgb3V0LnByaW50KCJTY3JhdGNoIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFJlbENvbmQsCiAgICAgICAgIFJlc0NvbmQsCiAgICAgICAg
IERvdWJsZUNvbmQsCisgICAgICAgIFN0YXR1c0NvbmQsCiAgICAgICAgIFNwZWNpYWwsCiAgICAg
ICAgIFdpZHRoQXJnCiAgICAgfTsKQEAgLTE1MSw2ICsxNTIsOCBAQCBwdWJsaWM6CiAgICAgICAg
IC8vIGFzIFVzZSBoYXMgdW5kZWZpbmVkIGJlaGF2aW9yOiB0aGUgdXNlIG1heSBoYXBwZW4gYmVm
b3JlIHRoZSBkZWYsIG9yIGl0IG1heSBoYXBwZW4gYWZ0ZXIKICAgICAgICAgLy8gaXQuCiAgICAg
ICAgIEVhcmx5RGVmLAorICAgICAgICAgICAgCisgICAgICAgIEVhcmx5WkRlZiwKIAogICAgICAg
ICAvLyBTb21lIGluc3RydWN0aW9ucyBuZWVkIGEgc2NyYXRjaCByZWdpc3Rlci4gV2UgbW9kZWwg
dGhpcyBieSBzYXlpbmcgdGhhdCB0aGUgdGVtcG9yYXJ5IGlzCiAgICAgICAgIC8vIGRlZmluZWQg
ZWFybHkgYW5kIHVzZWQgbGF0ZS4gVGhpcyByb2xlIGltcGxpZXMgdGhhdC4KQEAgLTE4Niw2ICsx
ODksNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VBZGRy
OgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTIwNiw2ICsyMTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoK
ICAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBj
YXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIyOCw2ICsyMzMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICBjYXNl
IEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiBy
b2xlOwogICAgICAgICBjYXNlIFVzZToKICAgICAgICAgICAgIHJldHVybiBDb2xkVXNlOwpAQCAt
MjUzLDYgKzI1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKICAgICAg
ICAgY2FzZSBTY3JhdGNoOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVh
cmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI3NCw2ICsyODEsNyBAQCBwdWJsaWM6CiAgICAgICAg
IGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIEVhcmx5RGVm
OgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI5NCw2ICszMDIsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VaRGVmOgogICAg
ICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgY2Fz
ZSBTY3JhdGNoOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTMxNSw2
ICszMjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFy
bHlaRGVmOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQpAQCAtMzMwLDYgKzM0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBVc2VB
ZGRyOgogICAgICAgICBjYXNlIExhdGVVc2U6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAg
ICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2Ug
TGF0ZUNvbGRVc2U6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNTgsNiArMzY5LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIFpEZWY6
CiAgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTUzMyw2ICs1NDUsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAorICAgIHN0YXRpYyBBcmcgc3RhdHVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6U3RhdHVz
Q29uZGl0aW9uIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBTdGF0dXNDb25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBj
b25kaXRpb247CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgc3RhdGljIEFy
ZyBzcGVjaWFsKEFpcjo6U3BlY2lhbCogc3BlY2lhbCkKICAgICB7CiAgICAgICAgIEFyZyByZXN1
bHQ7CkBAIC02NTgsMTIgKzY3OCwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkg
PT0gRG91YmxlQ29uZDsKICAgICB9CiAKKyAgICBib29sIGlzU3RhdHVzQ29uZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFN0YXR1c0NvbmQ7CisgICAgfQorCiAgICAg
Ym9vbCBpc0NvbmRpdGlvbigpIGNvbnN0CiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQoKSkg
ewogICAgICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAg
Y2FzZSBEb3VibGVDb25kOgorICAgICAgICBjYXNlIFN0YXR1c0NvbmQ6CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTg1MSw2ICs4NzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAg
ICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2Ug
U3RhdHVzQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBjYXNlIFdpZHRoQXJn
OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC04NzIsNiArODk5LDcgQEAgcHVibGljOgog
ICAgICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2Fz
ZSBEb3VibGVDb25kOgorICAgICAgICBjYXNlIFN0YXR1c0NvbmQ6CiAgICAgICAgIGNhc2UgU3Bl
Y2lhbDoKICAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgY2FzZSBJbnZhbGlkOgpAQCAt
MTA1OCw2ICsxMDg2LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAg
IGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgorICAgICAgICBjYXNlIFN0
YXR1c0NvbmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKICAgICAgICAgY2FzZSBXaWR0aEFyZzoK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTE3Nyw2ICsxMjA2LDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRp
b24+KG1fb2Zmc2V0KTsKICAgICB9CiAgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OlN0YXR1c0Nv
bmRpdGlvbiBhc1N0YXR1c0NvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aXNTdGF0dXNDb25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlN0YXR1c0NvbmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKyAgICAKICAgICAvLyBUZWxs
cyB5b3UgaWYgdGhlIEFyZyBpcyBpbnZlcnRpYmxlLiBPbmx5IGNvbmRpdGlvbiBhcmd1bWVudHMg
YXJlIGludmVydGlibGUsIGFuZCBldmVuIGZvciB0aG9zZSwgdGhlcmUKICAgICAvLyBhcmUgYSBm
ZXcgZXhjZXB0aW9ucyAtIG5vdGFibHkgT3ZlcmZsb3cgYW5kIFNpZ25lZC4KICAgICBib29sIGlz
SW52ZXJ0aWJsZSgpIGNvbnN0CkBAIC0xMTg0LDYgKzEyMTksNyBAQCBwdWJsaWM6CiAgICAgICAg
IHN3aXRjaCAoa2luZCgpKSB7CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBE
b3VibGVDb25kOgorICAgICAgICBjYXNlIFN0YXR1c0NvbmQ6CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyOjppc0ludmVydGlibGUoYXNSZXN1bHRDb25kaXRpb24oKSk7CkBAIC0xMjA0LDYgKzEy
NDAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gcmVzQ29uZChNYWNyb0Fzc2VtYmxl
cjo6aW52ZXJ0KGFzUmVzdWx0Q29uZGl0aW9uKCkpKTsKICAgICAgICAgY2FzZSBEb3VibGVDb25k
OgogICAgICAgICAgICAgcmV0dXJuIGRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChh
c0RvdWJsZUNvbmRpdGlvbigpKSk7CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0dXNDb25kKE1hY3JvQXNzZW1ibGVyOjppbnZlcnQoYXNTdGF0dXNDb25k
aXRpb24oKSkpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjEy
OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNSw2ICszNSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlCiAKIGNvbnN0IGNoYXIqIGNvbnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXgg
PSAiIyI7CiAKK3ZvaWQgQmFzaWNCbG9jazo6c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sg
dGFyZ2V0KQoreworICAgIG1fc3VjY2Vzc29ycy5yZXNpemUoMSk7CisgICAgbV9zdWNjZXNzb3Jz
WzBdID0gdGFyZ2V0OworfQorCit2b2lkIEJhc2ljQmxvY2s6OnNldFN1Y2Nlc3NvcnMoRnJlcXVl
bnRlZEJsb2NrIHRha2VuLCBGcmVxdWVudGVkQmxvY2sgbm90VGFrZW4pCit7CisgICAgbV9zdWNj
ZXNzb3JzLnJlc2l6ZSgyKTsKKyAgICBtX3N1Y2Nlc3NvcnNbMF0gPSB0YWtlbjsKKyAgICBtX3N1
Y2Nlc3NvcnNbMV0gPSBub3RUYWtlbjsKK30KKwogYm9vbCBCYXNpY0Jsb2NrOjphZGRQcmVkZWNl
c3NvcihCYXNpY0Jsb2NrKiBibG9jaykKIHsKICAgICByZXR1cm4gQjM6OmFkZFByZWRlY2Vzc29y
KHRoaXMsIGJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFz
aWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksOSBAQCBw
dWJsaWM6CiAgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0
dXJuIG1fc3VjY2Vzc29yczsgfQogICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJl
dHVybiBtX3N1Y2Nlc3NvcnM7IH0KIAorICAgIHZvaWQgc2V0U3VjY2Vzc29ycyhGcmVxdWVudGVk
QmxvY2spOworICAgIHZvaWQgc2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2ssIEZyZXF1ZW50
ZWRCbG9jayk7CisKICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CiAgICAgQmFzaWNC
bG9jayomIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBzdWNjZXNzb3Io
aW5kZXgpLmJsb2NrKCk7IH0KICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1
Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJBaXJCbG9ja0luc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSA8d3Rm
L0J1YmJsZVNvcnQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitCbG9ja0luc2VydGlvblNldDo6QmxvY2tJbnNlcnRpb25TZXQoQ29kZSAmY29k
ZSkKKyAgICA6IEdlbmVyaWNCbG9ja0luc2VydGlvblNldChjb2RlLm1fYmxvY2tzKQoreworfQor
CitCbG9ja0luc2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0KCkKK3sKK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNl
cnRpb25TZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyaWNCbG9ja0lzbmVy
dGlvblNldC5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9u
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEluc2VydGlvblNldDsKKwordHlwZWRlZiBH
ZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz46OkJsb2NrSW5zZXJ0aW9uIEJsb2Nr
SW5zZXJ0aW9uOworCitjbGFzcyBCbG9ja0luc2VydGlvblNldCA6IHB1YmxpYyBHZW5lcmljQmxv
Y2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz4geworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0aW9u
U2V0KENvZGUmKTsKKyAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKKyAgICAKKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgaW1wbGVtZW50IEIzOjpCbG9ja0luc2VydGlvblNldCdz
IHNwbGl0Rm9yd2FyZCgpLgorfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRHVtcEFzSlMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyRHVtcEFzSlMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckR1bXBBc0pTLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDI0
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFpckR1bXBBc0pTLmgiCi0KLSNp
ZiBFTkFCTEUoQjNfSklUKQotCi0jaW5jbHVkZSAiQWlyQ29kZS5oIgotI2luY2x1ZGUgIkFpcklu
c3RJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKLQotbmFtZXNwYWNlIHsKLQotQ1N0cmluZyB2YXJOYW1lRm9yQmxvY2tBdEluZGV4KHVu
c2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiB0b0NTdHJpbmcoImJiIiwgaW5kZXgpOwotfQot
Ci1DU3RyaW5nIHZhck5hbWUoQmFzaWNCbG9jayogYmxvY2spCi17Ci0gICAgcmV0dXJuIHZhck5h
bWVGb3JCbG9ja0F0SW5kZXgoYmxvY2stPmluZGV4KCkpOwotfQotCi1DU3RyaW5nIHZhck5hbWVG
b3JTdGFja1Nsb3RBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiB0b0NTdHJp
bmcoInNsb3QiLCBpbmRleCk7Ci19Ci0KLUNTdHJpbmcgdmFyTmFtZShTdGFja1Nsb3QqIHNsb3Qp
Ci17Ci0gICAgcmV0dXJuIHZhck5hbWVGb3JTdGFja1Nsb3RBdEluZGV4KHNsb3QtPmluZGV4KCkp
OwotfQotCi1DU3RyaW5nIHZhck5hbWUoUmVnIHJlZykKLXsKLSAgICByZXR1cm4gdG9DU3RyaW5n
KCJSZWcuIiwgcmVnLmRlYnVnTmFtZSgpKTsKLX0KLQotQ1N0cmluZyB2YXJOYW1lRm9yVG1wV2l0
aEJhbmtBbmRJbmRleChCYW5rIGJhbmssIHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiB0
b0NTdHJpbmcoYmFuayA9PSBGUCA/ICJmIiA6ICIiLCAidG1wIiwgaW5kZXgpOwotfQotCi1DU3Ry
aW5nIHZhck5hbWUoVG1wIHRtcCkKLXsKLSAgICBpZiAodG1wLmlzUmVnKCkpCi0gICAgICAgIHJl
dHVybiB2YXJOYW1lKHRtcC5yZWcoKSk7Ci0gICAgcmV0dXJuIHZhck5hbWVGb3JUbXBXaXRoQmFu
a0FuZEluZGV4KEFyZyh0bXApLmJhbmsoKSwgdG1wLnRtcEluZGV4KCkpOwotfQotCi19IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBkdW1wQXNKUyhDb2RlJiBjb2RlLCBQcmludFN0cmVh
bSYgb3V0KQotewotICAgIG91dC5wcmludGxuKCJsZXQgY29kZSA9IG5ldyBDb2RlKCk7Iik7Ci0g
ICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGUuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG91dC5wcmludGxuKCJsZXQgIiwgdmFyTmFtZUZvckJsb2NrQXRJbmRleChpKSwgIiA9IGNv
ZGUuYWRkQmxvY2soKTsiKTsKLSAgICAKLSAgICBvdXQucHJpbnRsbigibGV0IGhhc2g7Iik7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gY29kZS5zdGFja1Nsb3RzKClbaV07Ci0g
ICAgICAgIGlmIChzbG90KSB7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigibGV0ICIsIHZhck5h
bWUoc2xvdCksICIgPSBjb2RlLmFkZFN0YWNrU2xvdCgiLCBzbG90LT5ieXRlU2l6ZSgpLCAiLCAi
LCBzbG90LT5raW5kKCksICIpOyIpOwotICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21G
UCgpKQotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKHZhck5hbWUoc2xvdCksICIuc2V0T2Zm
c2V0RnJvbUZQKCIsIHNsb3QtPm9mZnNldEZyb21GUCgpLCAiKTsiKTsKLSAgICAgICAgICAgIG91
dC5wcmludGxuKCJoYXNoID0gIiwgdmFyTmFtZShzbG90KSwgIi5oYXNoKCk7Iik7Ci0gICAgICAg
ICAgICBvdXQucHJpbnRsbigiaWYgKGhhc2ggIT0gIiwgc2xvdC0+anNIYXNoKCksICIpIik7Ci0g
ICAgICAgICAgICBvdXQucHJpbnRsbigiICAgIHRocm93IG5ldyBFcnJvcihcIkJhZCBoYXNoOiBc
IiArIGhhc2gpOyIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG91dC5wcmludGxuKCJj
b2RlLmFkZFN0YWNrU2xvdCgxLCBTcGlsbCk7Iik7Ci0gICAgfQotICAgIAotICAgIGZvckVhY2hC
YW5rKAotICAgICAgICBbJl0gKEJhbmsgYmFuaykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gY29kZS5udW1UbXBzKGJhbmspOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgb3V0LnBy
aW50bG4oCi0gICAgICAgICAgICAgICAgICAgICJsZXQgIiwgdmFyTmFtZUZvclRtcFdpdGhCYW5r
QW5kSW5kZXgoYmFuaywgaSksICIgPSBjb2RlLm5ld1RtcCgiLCBiYW5rLCAiKTsiKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgCi0gICAgb3V0LnByaW50bG4oImxldCBpbnN0OyIp
OwotICAgIG91dC5wcmludGxuKCJsZXQgYXJnOyIpOwotICAgIAotICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIGZvciAoRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3Nv
ciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKLSAgICAgICAgICAgIG91dC5wcmludGxuKAotICAg
ICAgICAgICAgICAgIHZhck5hbWUoYmxvY2spLCAiLnN1Y2Nlc3NvcnMucHVzaChuZXcgRnJlcXVl
bnRlZEJsb2NrKCIsCi0gICAgICAgICAgICAgICAgdmFyTmFtZShzdWNjZXNzb3IuYmxvY2soKSks
ICIsICIsIHN1Y2Nlc3Nvci5mcmVxdWVuY3koKSwgIikpOyIpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRlY2Vz
c29ycygpKQotICAgICAgICAgICAgb3V0LnByaW50bG4odmFyTmFtZShibG9jayksICIucHJlZGVj
ZXNzb3JzLnB1c2goIiwgdmFyTmFtZShwcmVkZWNlc3NvciksICIpOyIpOwotICAgICAgICAKLSAg
ICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgZG8gc29tZXRoaW5nIGZvciBmbGFncy4KLSAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI3NTEKLSAgICAgICAgICAgIG91
dC5wcmludGxuKCJpbnN0ID0gbmV3IEluc3QoIiwgaW5zdC5raW5kLm9wY29kZSwgIik7Iik7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAg
ICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUsIEJhbmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEFy
Zzo6SW52YWxpZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VG1wOgotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImFyZyA9IEFyZy5jcmVhdGVUbXAoIiwgdmFyTmFt
ZShhcmcudG1wKCkpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpJbW06
Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0ZUlt
bSgiLCBhcmcudmFsdWUoKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
QmlnSW1tOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImFyZyA9IEFyZy5jcmVhdGVCaWdJbW0oIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihhcmcudmFsdWUoKSksICIsICIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oYXJnLnZh
bHVlKCkgPj4gMzIpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpCaXRJ
bW06Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0
ZUJpdEltbSgiLCBhcmcudmFsdWUoKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6Qml0SW1tNjQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJnID0gQXJnLmNyZWF0ZUJpdEltbTY0KCIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oYXJnLnZhbHVl
KCkpLCAiLCAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMy
X3Q+KGFyZy52YWx1ZSgpID4+IDMyKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6QWRkcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJhcmcgPSBBcmcuY3JlYXRlQWRkcigiLCB2YXJOYW1lKGFy
Zy5iYXNlKCkpLCAiLCAiLCBhcmcub2Zmc2V0KCksICIpOyIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBBcmc6OlN0YWNrOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4o
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZyA9IEFyZy5jcmVhdGVTdGFjaygiLCB2
YXJOYW1lKGFyZy5zdGFja1Nsb3QoKSksICIsICIsIGFyZy5vZmZzZXQoKSwgIik7Iik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRlQ2FsbEFyZygiLCBhcmcub2Zmc2V0KCks
ICIpOyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkluZGV4OgotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImFyZyA9IEFyZy5jcmVhdGVJbmRleCgiLCB2YXJOYW1lKGFyZy5iYXNlKCkpLCAiLCAiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhck5hbWUoYXJnLmluZGV4KCkpLCAiLCAiLCBhcmcu
c2NhbGUoKSwgIiwgIiwgYXJnLm9mZnNldCgpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpSZWxDb25kOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4o
ImFyZyA9IEFyZy5jcmVhdGVSZWxDb25kKCIsIGFyZy5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSwg
Iik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6UmVzQ29uZDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRlUmVzQ29uZCgiLCBh
cmcuYXNSZXN1bHRDb25kaXRpb24oKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6RG91YmxlQ29uZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJh
cmcgPSBBcmcuY3JlYXRlRG91YmxlQ29uZCgiLCBhcmcuYXNEb3VibGVDb25kaXRpb24oKSwgIik7
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3BlY2lhbDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRlU3BlY2lhbCgpOyIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoQXJnOgotICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50bG4oImFyZyA9IEFyZy5jcmVhdGVXaWR0aEFyZygiLCBhcmcud2lk
dGgoKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgb3V0
LnByaW50bG4oImluc3QuYXJncy5wdXNoKGFyZyk7Iik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGluc3QuaGFzTm9uQXJnRWZmZWN0cygpKQotICAgICAgICAg
ICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdC5wYXRjaEhhc05vbkFyZ0VmZmVjdHMgPSB0cnVl
OyIpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0
LmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzID0gbmV3IFNldCgpOyIpOwotICAgICAgICAgICAgICAg
IG91dC5wcmludGxuKCJpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncyA9IG5ldyBTZXQoKTsiKTsKLSAg
ICAgICAgICAgICAgICBpbnN0LmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKLSAg
ICAgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBvdXQucHJpbnRsbigiaW5zdC5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncy5hZGQoIiwgdmFyTmFt
ZShyZWcpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAg
aW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAotICAgICAgICAgICAgICAgICAgICBb
Jl0gKFJlZyByZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0
LmV4dHJhQ2xvYmJlcmVkUmVncy5hZGQoIiwgdmFyTmFtZShyZWcpLCAiKTsiKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgb3V0LnBy
aW50bG4oImluc3QucGF0Y2hBcmdEYXRhID0gW107Iik7Ci0gICAgICAgICAgICAgICAgaW5zdC5m
b3JFYWNoQXJnKAotICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYsIEFyZzo6Um9sZSByb2xl
LCBCYW5rIGJhbmssIFdpZHRoIHdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnRsbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5zdC5wYXRjaEFyZ0RhdGEu
cHVzaCh7cm9sZTogQXJnLiIsIHJvbGUsICIsIHR5cGU6ICIsIGJhbmssCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiwgd2lkdGg6ICIsIHdpZHRoLCAifSk7Iik7Ci0gICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
aW5zdC5raW5kLm9wY29kZSA9PSBDQ2FsbCB8fCBpbnN0LmtpbmQub3Bjb2RlID09IENvbGRDQ2Fs
bCkgewotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmNDYWxsVHlwZSA9ICIsIGlu
c3Qub3JpZ2luLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmND
YWxsQXJnVHlwZXMgPSBbXTsiKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgaW5zdC5vcmlnaW4tPm51bUNoaWxkcmVuKCk7ICsraSkKLSAgICAgICAgICAgICAgICAg
ICAgb3V0LnByaW50bG4oImluc3QuY0NhbGxBcmdUeXBlcy5wdXNoKCIsIGluc3Qub3JpZ2luLT5j
aGlsZChpKS0+dHlwZSgpLCAiKTsiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgb3V0LnByaW50bG4oImhhc2ggPSBpbnN0Lmhhc2goKTsiKTsKLSAgICAgICAgICAg
IG91dC5wcmludGxuKCJpZiAoaGFzaCAhPSAiLCBpbnN0LmpzSGFzaCgpLCAiKSIpOwotICAgICAg
ICAgICAgb3V0LnByaW50bG4oIiAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgaGFzaDogXCIgKyBo
YXNoKTsiKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgb3V0LnByaW50bG4odmFyTmFtZShi
bG9jayksICIuYXBwZW5kKGluc3QpOyIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi19IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCi0KLSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQotCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckR1bXBBc0pTLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEdW1wQXNKUy5oCShyZXZpc2lv
biAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckR1bXBBc0pTLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEIzX0pJVCkK
LQotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7Ci0KLWNsYXNzIENvZGU7Ci0KLS8vIFRoaXMgaXMgdXNl
ZCBmb3IgYmVuY2htYXJraW5nLiBWYXJpb3VzIG9wZXJhdGlvbnMgb24gQWlyIGFyZSBpbnRlcmVz
dGluZyBmcm9tIGEgYmVuY2htYXJraW5nCi0vLyBzdGFuZHBvaW50LiBXZSBjYW4gd3JpdGUgc29t
ZSBBaXIgcGhhc2VzIGluIEpTIGFuZCB0aGVuIHVzZSB0aGF0IHRvIGJlbmNobWFyayBKUy4gVGhl
IGJlbmNobWFyawotLy8gaXMgY2FsbGVkIEpTQWlyLCBhbmQgaXQncyBpbiBQZXJmb3JtYW5jZVRl
c3RzL0pTQWlyLgotdm9pZCBkdW1wQXNKUyhDb2RlJiwgUHJpbnRTdHJlYW0mKTsKLQotfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgotCi0jZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmgiCiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFj
ay5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKLSNpbmNsdWRlICJBaXJEdW1wQXNKUy5oIgogI2lu
Y2x1ZGUgIkFpckVsaW1pbmF0ZURlYWRDb2RlLmgiCiAjaW5jbHVkZSAiQWlyRml4T2J2aW91c1Nw
aWxscy5oIgogI2luY2x1ZGUgIkFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIgpAQCAtNzMs
NiArNzIsOCBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgICAg
IGRhdGFMb2coIkluaXRpYWwgYWlyOlxuIik7CiAgICAgICAgIGRhdGFMb2coY29kZSk7CiAgICAg
fQorICAgIAorICAgIHNpbXBsaWZ5Q0ZHKGNvZGUpOwogCiAgICAgbG93ZXJNYWNyb3MoY29kZSk7
CiAKQEAgLTEwNywyMyArMTA4LDExIEBAIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYg
Y29kZSkKICAgICAvLyBkb2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1zYXZl
cyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMgdGhlbS4KICAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2Rl
KTsKICAgICAKLSAgICBpZiAoT3B0aW9uczo6ZHVtcEFpckFzSlNCZWZvcmVBbGxvY2F0ZVN0YWNr
KCkpIHsKLSAgICAgICAgZGF0YUxvZygiRHVtcGluZyBBaXIgYXMgSlMgYmVmb3JlIGFsbG9jYXRl
U3RhY2s6XG4iKTsKLSAgICAgICAgZHVtcEFzSlMoY29kZSwgV1RGOjpkYXRhRmlsZSgpKTsKLSAg
ICAgICAgZGF0YUxvZygiQWlyIGhhc2g6ICIsIGNvZGUuanNIYXNoKCksICJcbiIpOwotICAgIH0K
LQogICAgIC8vIFRoaXMgdHVybnMgYWxsIFN0YWNrIGFuZCBDYWxsQXJnIEFyZ3MgaW50byBBZGRy
IGFyZ3MgdGhhdCB1c2UgdGhlIGZyYW1lIHBvaW50ZXIuIEl0IGRvZXMKICAgICAvLyB0aGlzIGJ5
IGZpcnN0LWZpdCBhbGxvY2F0aW5nIHN0YWNrIHNsb3RzLiBJdCBzaG91bGQgYmUgcHJldHR5IGRh
cm4gY2xvc2UgdG8gb3B0aW1hbCwgc28gd2UKICAgICAvLyBzaG91bGRuJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCB0aGlzIHZlcnkgbXVjaC4KICAgICBhbGxvY2F0ZVN0YWNrKGNvZGUpOwogICAgIAot
ICAgIGlmIChPcHRpb25zOjpkdW1wQWlyQWZ0ZXJBbGxvY2F0ZVN0YWNrKCkpIHsKLSAgICAgICAg
ZGF0YUxvZygiRHVtcGluZyBBaXIgYWZ0ZXIgYWxsb2NhdGVTdGFjazpcbiIpOwotICAgICAgICBk
YXRhTG9nKGNvZGUpOwotICAgICAgICBkYXRhTG9nKCJBaXIgaGFzaDogIiwgY29kZS5qc0hhc2go
KSwgIlxuIik7Ci0gICAgfQotCiAgICAgLy8gSWYgd2UgY29hbGVzY2VkIG1vdmVzIHRoZW4gd2Ug
Y2FuIHVuYnJlYWsgY3JpdGljYWwgZWRnZXMuIFRoaXMgaXMgdGhlIG1haW4gcmVhc29uIGZvciB0
aGlzCiAgICAgLy8gcGhhc2UuCiAgICAgc2ltcGxpZnlDRkcoY29kZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAyMTI5
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3Nyw2ICsyNzcsNjUgQEAgaW5saW5lIGJvb2wgaXNYODZVRGl2NjRW
YWxpZChjb25zdCBJbnN0JgogICAgIHJldHVybiBpc1g4NkRpdkhlbHBlclZhbGlkKGluc3QpOwog
fQogCitpbmxpbmUgYm9vbCBpc0F0b21pY1N0cm9uZ0NBU1ZhbGlkKGNvbnN0IEluc3QmIGluc3Qp
Cit7CisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICBzd2l0Y2ggKGluc3QuYXJncy5z
aXplKCkpIHsKKyAgICBjYXNlIDM6CisgICAgICAgIHJldHVybiBpbnN0LmFyZ3NbMF0gPT0gVG1w
KFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBjYXNlIDU6CisgICAgICAgIHJldHVybiBpbnN0LmFy
Z3NbMV0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorI2VuZGlmIC8vIENQVShYODYpIHx8IENQVShYODZfNjQpCit9
CisKK2lubGluZSBib29sIGlzQnJhbmNoQXRvbWljU3Ryb25nQ0FTVmFsaWQoY29uc3QgSW5zdCYg
aW5zdCkKK3sKKyAgICByZXR1cm4gaW5zdC5hcmdzWzFdID09IFRtcChYODZSZWdpc3RlcnM6OmVh
eCk7Cit9CisKK2lubGluZSBib29sIGlzQXRvbWljU3Ryb25nQ0FTOFZhbGlkKGNvbnN0IEluc3Qm
IGluc3QpCit7CisgICAgcmV0dXJuIGlzQXRvbWljU3Ryb25nQ0FTVmFsaWQoaW5zdCk7Cit9CisK
K2lubGluZSBib29sIGlzQXRvbWljU3Ryb25nQ0FTMTZWYWxpZChjb25zdCBJbnN0JiBpbnN0KQor
eworICAgIHJldHVybiBpc0F0b21pY1N0cm9uZ0NBU1ZhbGlkKGluc3QpOworfQorCitpbmxpbmUg
Ym9vbCBpc0F0b21pY1N0cm9uZ0NBUzMyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICBy
ZXR1cm4gaXNBdG9taWNTdHJvbmdDQVNWYWxpZChpbnN0KTsKK30KKworaW5saW5lIGJvb2wgaXNB
dG9taWNTdHJvbmdDQVM2NFZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlz
QXRvbWljU3Ryb25nQ0FTVmFsaWQoaW5zdCk7Cit9CisKK2lubGluZSBib29sIGlzQnJhbmNoQXRv
bWljU3Ryb25nQ0FTOFZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzQnJh
bmNoQXRvbWljU3Ryb25nQ0FTVmFsaWQoaW5zdCk7Cit9CisKK2lubGluZSBib29sIGlzQnJhbmNo
QXRvbWljU3Ryb25nQ0FTMTZWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBp
c0JyYW5jaEF0b21pY1N0cm9uZ0NBU1ZhbGlkKGluc3QpOworfQorCitpbmxpbmUgYm9vbCBpc0Jy
YW5jaEF0b21pY1N0cm9uZ0NBUzMyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1
cm4gaXNCcmFuY2hBdG9taWNTdHJvbmdDQVNWYWxpZChpbnN0KTsKK30KKworaW5saW5lIGJvb2wg
aXNCcmFuY2hBdG9taWNTdHJvbmdDQVM2NFZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAg
cmV0dXJuIGlzQnJhbmNoQXRvbWljU3Ryb25nQ0FTVmFsaWQoaW5zdCk7Cit9CisKIH0gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMTcsNiArMTE3LDcgQEAgQWRkMzIgVTpHOjMyLCBVWkQ6Rzoz
MgogICAgIHg4NjogSW1tLCBJbmRleAogICAgIEltbSwgVG1wCiAgICAgeDg2OiBBZGRyLCBUbXAK
KyAgICB4ODY6IEluZGV4LCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgogICAgIHg4NjogVG1wLCBJ
bmRleAogCkBAIC0xMzUsOSArMTM2LDEyIEBAIHg4NjogQWRkMTYgVTpHOjE2LCBVRDpHOjE2CiA2
NDogQWRkNjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKICAgICB4ODY6IEltbSwgQWRk
cgorICAgIHg4NjogSW1tLCBJbmRleAogICAgIEltbSwgVG1wCiAgICAgeDg2OiBBZGRyLCBUbXAK
KyAgICB4ODY6IEluZGV4LCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgorICAgIHg4NjogVG1wLCBJ
bmRleAogCiA2NDogQWRkNjQgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAgIEltbSwgVG1wLCBU
bXAKQEAgLTE2Niw5ICsxNzAsMTIgQEAgeDg2OiBBZGRGbG9hdCBVOkY6MzIsIFVEOkY6MzIKIFN1
YjMyIFU6RzozMiwgVVpEOkc6MzIKICAgICBUbXAsIFRtcAogICAgIHg4NjogSW1tLCBBZGRyCisg
ICAgeDg2OiBJbW0sIEluZGV4CiAgICAgSW1tLCBUbXAKICAgICB4ODY6IEFkZHIsIFRtcAorICAg
IHg4NjogSW5kZXgsIFRtcAogICAgIHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4
CiAKIGFybTY0OiBTdWIzMiBVOkc6MzIsIFU6RzozMiwgRDpHOjMyCiAgICAgVG1wLCBUbXAsIFRt
cApAQCAtMTc2LDkgKzE4MywxMiBAQCBhcm02NDogU3ViMzIgVTpHOjMyLCBVOkc6MzIsIEQ6Rzoz
MgogNjQ6IFN1YjY0IFU6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0s
IEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKICAgICBJbW0sIFRtcAogICAgIHg4NjogQWRkciwg
VG1wCisgICAgeDg2OiBJbmRleCwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRt
cCwgSW5kZXgKIAogYXJtNjQ6IFN1YjY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAs
IFRtcCwgVG1wCkBAIC0yMDQsOSArMjE0LDEyIEBAIHg4NjogU3ViRmxvYXQgVTpGOjMyLCBVRDpG
OjMyCiBOZWczMiBVWkQ6RzozMgogICAgIFRtcAogICAgIHg4NjogQWRkcgorICAgIHg4NjogSW5k
ZXgKIAogNjQ6IE5lZzY0IFVEOkc6NjQKICAgICBUbXAKKyAgICB4ODY6IEFkZHIKKyAgICB4ODY6
IEluZGV4CiAKIGFybTY0OiBOZWdhdGVEb3VibGUgVTpGOjY0LCBEOkY6NjQKICAgICBUbXAsIFRt
cApAQCAtMzMwLDggKzM0MywxMSBAQCBBbmQzMiBVOkc6MzIsIFVaRDpHOjMyCiAgICAgVG1wLCBU
bXAKICAgICB4ODY6IEltbSwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwg
SW5kZXgKICAgICB4ODY6IEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcAogICAgIHg4Njog
SW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CiAKIDY0OiBBbmQ2NCBVOkc6NjQsIFU6Rzo2
NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcApAQCAtMzM5LDcgKzM1NSwxMyBAQCBBbmQzMiBV
Okc6MzIsIFVaRDpHOjMyCiAKIHg4Nl82NDogQW5kNjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1w
LCBUbXAKLSAgICB4ODY6IEltbSwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAg
ICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorICAgIEFkZHIsIFRt
cAorICAgIEluZGV4LCBUbXAKIAogQW5kRG91YmxlIFU6Rjo2NCwgVTpGOjY0LCBEOkY6NjQKICAg
ICBUbXAsIFRtcCwgVG1wCkBAIC00NTksOCArNDgxLDExIEBAIE9yMzIgVTpHOjMyLCBVWkQ6Rzoz
MgogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIFRtcAogICAgIHg4NjogVG1wLCBBZGRyCisg
ICAgeDg2OiBUbXAsIEluZGV4CiAgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBU
bXAKICAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAogCiA2NDogT3I2NCBV
Okc6NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcApAQCAtNDY5LDYgKzQ5NCwx
MiBAQCBPcjMyIFU6RzozMiwgVVpEOkc6MzIKIDY0OiBPcjY0IFU6Rzo2NCwgVUQ6Rzo2NAogICAg
IFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIFRtcAorICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2
OiBJbW0sIEluZGV4CisgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwgSW5kZXgKKyAg
ICB4ODY6IEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcAogCiBYb3IzMiBVOkc6MzIsIFU6
RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wLCBUbXAKQEAgLTQ4MCw4ICs1MTEsMTEgQEAgWG9y
MzIgVTpHOjMyLCBVWkQ6RzozMgogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIFRtcAogICAg
IHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4CiAgICAgeDg2OiBBZGRyLCBUbXAK
KyAgICB4ODY6IEluZGV4LCBUbXAKICAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJ
bmRleAogCiA2NDogWG9yNjQgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBU
bXAKQEAgLTQ5MCw2ICs1MjQsMTEgQEAgWG9yMzIgVTpHOjMyLCBVWkQ6RzozMgogNjQ6IFhvcjY0
IFU6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4
ODY6IFRtcCwgSW5kZXgKKyAgICB4ODY6IEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcAor
ICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CiAgICAgeDg2OiBJbW0sIFRt
cAogCiBhcm02NDogTm90MzIgVTpHOjMyLCBaRDpHOjMyCkBAIC00OTgsMTMgKzUzNywxNSBAQCBh
cm02NDogTm90MzIgVTpHOjMyLCBaRDpHOjMyCiB4ODY6IE5vdDMyIFVaRDpHOjMyCiAgICAgVG1w
CiAgICAgQWRkcgorICAgIEluZGV4CiAKIGFybTY0OiBOb3Q2NCBVOkc6NjQsIEQ6Rzo2NAogICAg
IFRtcCwgVG1wCiAKLXg4NjogTm90NjQgVUQ6Rzo2NAoreDg2XzY0OiBOb3Q2NCBVRDpHOjY0CiAg
ICAgVG1wCiAgICAgQWRkcgorICAgIEluZGV4CiAKIGFybTY0OiBBYnNEb3VibGUgVTpGOjY0LCBE
OkY6NjQKICAgICBUbXAsIFRtcApAQCAtNjY4LDI3ICs3MDksMzgzIEBAIExvYWQ4IFU6Rzo4LCBa
RDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxOCBVOkc6OCwg
WkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogU3RvcmU4IFU6Rzo4LCBE
Okc6OAogICAgIFRtcCwgSW5kZXgKICAgICBUbXAsIEFkZHIKICAgICB4ODY6IEltbSwgSW5kZXgK
ICAgICB4ODY6IEltbSwgQWRkcgogCitTdG9yZVJlbDggVTpHOjgsIEQ6Rzo4CisgICAgVG1wLCBJ
bmRleAorICAgIFRtcCwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorICAgIHg4NjogSW1tLCBB
ZGRyCisKIExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiBVOkc6OCwgWkQ6RzozMgogICAgIEFkZHIsIFRt
cAogICAgIEluZGV4LCBUbXAKIAorTG9hZEFjcThTaWduZWRFeHRlbmRUbzMyIFU6Rzo4LCBaRDpH
OjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBMb2FkMTYgVTpHOjE2LCBaRDpH
OjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxMTYgVTpHOjE2LCBa
RDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBMb2FkMTZTaWduZWRFeHRl
bmRUbzMyIFU6RzoxNiwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAor
TG9hZEFjcTE2U2lnbmVkRXh0ZW5kVG8zMiBVOkc6MTYsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAK
KyAgICBJbmRleCwgVG1wCisKIFN0b3JlMTYgVTpHOjE2LCBEOkc6MTYKICAgICBUbXAsIEluZGV4
CiAgICAgVG1wLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIK
KworU3RvcmVSZWwxNiBVOkc6MTYsIEQ6RzoxNgorICAgIFRtcCwgSW5kZXgKKyAgICBUbXAsIEFk
ZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKyAgICB4ODY6IEltbSwgQWRkcgorCitMb2FkQWNxMzIg
VTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwg
VG1wCisKK1N0b3JlUmVsMzIgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1w
LCBJbmRleAorICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisKKzY0OiBM
b2FkQWNxNjQgVTpHOjY0LCBaRDpHOjY0CisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAg
ICBJbmRleCwgVG1wCisKKzY0OiBTdG9yZVJlbDY0IFU6Rzo2NCwgWkQ6Rzo2NAorICAgIFRtcCwg
QWRkcgorICAgIFRtcCwgSW5kZXgKKyAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJ
bmRleAorCisjIFRoZSBmaXJzdCBvcGVyYW5kIGlzIHJheC4KK3g4NjogQXRvbWljU3Ryb25nQ0FT
OCBVOkc6MzIsIFVEOkc6OCwgVTpHOjgsIFVEOkc6OCwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwg
VG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBU
bXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVMxNiBVOkc6MzIsIFVEOkc6MTYsIFU6RzozMiwgVUQ6
RzoxNiwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBT
dGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVMz
MiBVOkc6MzIsIFVEOkc6MzIsIFU6RzozMiwgVUQ6RzozMiwgWkQ6Rzo4CisgICAgU3RhdHVzQ29u
ZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4
LCBUbXAKKworeDg2XzY0OiBBdG9taWNTdHJvbmdDQVM2NCBVOkc6MzIsIFVEOkc6NjQsIFU6Rzo2
NCwgVUQ6Rzo2NCwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAK
KyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJv
bmdDQVM4IFVEOkc6OCwgVTpHOjgsIFVEOkc6OAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRt
cCosIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNTdHJvbmdDQVMxNiBVRDpHOjE2LCBVOkc6MzIs
IFVEOkc6MTYKKyAgICBUbXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4
NjogQXRvbWljU3Ryb25nQ0FTMzIgVUQ6RzozMiwgVTpHOjMyLCBVRDpHOjMyCisgICAgVG1wKiwg
VG1wLCBBZGRyCisgICAgVG1wKiwgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1N0cm9uZ0NB
UzY0IFVEOkc6NjQsIFU6Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRt
cCosIFRtcCwgSW5kZXgKKworeDg2OiBCcmFuY2hBdG9taWNTdHJvbmdDQVM4IFU6RzozMiwgVUQ6
Rzo4LCBVOkc6OCwgVUQ6Rzo4IC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFk
ZHIKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNoQXRvbWlj
U3Ryb25nQ0FTMTYgVTpHOjMyLCBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYgL2JyYW5jaAorICAg
IFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkcgorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwg
SW5kZXgKKworeDg2OiBCcmFuY2hBdG9taWNTdHJvbmdDQVMzMiBVOkc6MzIsIFVEOkc6MzIsIFU6
RzozMiwgVUQ6RzozMiAvYnJhbmNoCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyCisg
ICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRleAorCit4ODZfNjQ6IEJyYW5jaEF0b21pY1N0
cm9uZ0NBUzY0IFU6RzozMiwgVUQ6Rzo2NCwgVTpHOjY0LCBVRDpHOjY0IC9icmFuY2gKKyAgICBT
dGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIElu
ZGV4CisKK3g4NjogQXRvbWljQWRkOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAg
SW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNB
ZGQxNiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FkZDMyIFU6RzozMiwgVUQ6
RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBU
bXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljQWRkNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1t
LCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKwor
eDg2OiBBdG9taWNTdWI4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIElu
ZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1N1YjE2IFU6
RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljU3ViMzIgVTpHOjMyLCBVRDpHOjMyCisg
ICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5k
ZXgKKworeDg2XzY0OiBBdG9taWNTdWI2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIK
KyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0
b21pY0FuZDggVTpHOjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAg
ICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljQW5kMTYgVTpHOjE2LCBV
RDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAg
IFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNBbmQzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0s
IEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4
ODZfNjQ6IEF0b21pY0FuZDY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIElt
bSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljT3I4
IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY09yMTYgVTpHOjE2LCBVRDpHOjE2Cisg
ICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5k
ZXgKKworeDg2OiBBdG9taWNPcjMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAg
IEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRv
bWljT3I2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4Cisg
ICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hvcjggVTpHOjgsIFVE
Okc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBU
bXAsIEluZGV4CisKK3g4NjogQXRvbWljWG9yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
OiBBdG9taWNYb3IzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIElu
ZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1hvcjY0
IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAs
IEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljTmVnOCBVRDpHOjgKKyAgICBBZGRy
CisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOZWcxNiBVRDpHOjE2CisgICAgQWRkcgorICAgIElu
ZGV4CisKK3g4NjogQXRvbWljTmVnMzIgVUQ6RzozMgorICAgIEFkZHIKKyAgICBJbmRleAorCit4
ODZfNjQ6IEF0b21pY05lZzY0IFVEOkc6NjQKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBB
dG9taWNOb3Q4IFVEOkc6OAorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY05vdDE2
IFVEOkc6MTYKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOb3QzMiBVRDpHOjMy
CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4Nl82NDogQXRvbWljTm90NjQgVUQ6Rzo2NAorICAg
IEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQ4IFVEOkc6OCwgVUQ6Rzo4Cisg
ICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQxNiBVRDpH
OjE2LCBVRDpHOjE2CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21p
Y1hjaGdBZGQzMiBVRDpHOjMyLCBVRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCit4ODZfNjQ6IEF0b21pY1hjaGdBZGQ2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGc4IFVEOkc6OCwgVUQ6Rzo4Cisg
ICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGcxNiBVRDpHOjE2
LCBVRDpHOjE2CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hj
aGczMiBVRDpHOjMyLCBVRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4
ODZfNjQ6IEF0b21pY1hjaGc2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAg
VG1wLCBJbmRleAorCithcm02NDogTG9hZExpbms4IFU6Rzo4LCBaRDpHOjgKKyAgICBBZGRyLCBU
bXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTggVTpHOjgsIFpEOkc6OAor
ICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworIyBTdXBlciBjb25mdXNpbmcgZmFjdDog
dGhpcyByZXR1cm5zIDAgdG8gbWVhbiBzdWNjZXNzLCAxIHRvIG1lYW4gZmFpbHVyZS4KK2FybTY0
OiBTdG9yZUNvbmQ4IFU6Rzo4LCBEOkc6OCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisg
ICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmRSZWw4IFU6Rzo4LCBEOkc6OCwg
RVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0
OiBMb2FkTGluazE2IFU6RzoxNiwgWkQ6RzoxNgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBU
bXAKKworYXJtNjQ6IExvYWRMaW5rQWNxMTYgVTpHOjE2LCBaRDpHOjE2CisgICAgQWRkciwgVG1w
CisgICAgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kMTYgVTpHOjE2LCBEOkc6MTYsIEVa
RDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDog
U3RvcmVDb25kUmVsMTYgVTpHOjE2LCBEOkc6MTYsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRt
cAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmszMiBVOkc6MzIsIFpEOkc6
MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTMy
IFU6RzozMiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6
IFN0b3JlQ29uZDMyIFU6RzozMiwgRDpHOjMyLCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAK
KyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDMyIFU6RzozMiwgRDpH
OjMyLCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKwor
YXJtNjQ6IExvYWRMaW5rNjQgVTpHOjY0LCBaRDpHOjY0CisgICAgQWRkciwgVG1wCisgICAgSW5k
ZXgsIFRtcAorCithcm02NDogTG9hZExpbmtBY3E2NCBVOkc6NjQsIFpEOkc6NjQKKyAgICBBZGRy
LCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQ2NCBVOkc6NjQsIEQ6Rzo2
NCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2Fy
bTY0OiBTdG9yZUNvbmRSZWw2NCBVOkc6NjQsIEQ6Rzo2NCwgRVpEOkc6OAorICAgIFRtcCwgQWRk
ciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBEZXBlbmQzMiBVOkc6MzIsIEQ6
RzozMgorICAgIFRtcCwgVG1wCisKK2FybTY0OiBEZXBlbmQ2NCBVOkc6NjQsIEQ6Rzo2NAorICAg
IFRtcCwgVG1wCiAKIENvbXBhcmUzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCiAg
ICAgUmVsQ29uZCwgVG1wLCBUbXAsIFRtcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkocmV2aXNpb24gMjEy
OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3Jk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTc3LDYgKzE3NywxMCBAQCB2b2lkIG9wdGltaXpl
QmxvY2tPcmRlcihDb2RlJiBjb2RlKQogICAgICAgICBjYXNlIEJyYW5jaFN1YjY0OgogICAgICAg
ICBjYXNlIEJyYW5jaE5lZzMyOgogICAgICAgICBjYXNlIEJyYW5jaE5lZzY0OgorICAgICAgICBj
YXNlIEJyYW5jaEF0b21pY1N0cm9uZ0NBUzg6CisgICAgICAgIGNhc2UgQnJhbmNoQXRvbWljU3Ry
b25nQ0FTMTY6CisgICAgICAgIGNhc2UgQnJhbmNoQXRvbWljU3Ryb25nQ0FTMzI6CisgICAgICAg
IGNhc2UgQnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQ6CiAgICAgICAgICAgICBpZiAoY29kZS5maW5k
TmV4dEJsb2NrKGJsb2NrKSA9PSBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkgJiYgYnJhbmNoLmFy
Z3NbMF0uaXNJbnZlcnRpYmxlKCkpIHsKICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoYmxvY2st
PnN1Y2Nlc3NvcigwKSwgYmxvY2stPnN1Y2Nlc3NvcigxKSk7CiAgICAgICAgICAgICAgICAgYnJh
bmNoLmFyZ3NbMF0gPSBicmFuY2guYXJnc1swXS5pbnZlcnRlZCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNlLmNwcAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQYWRJbnRl
cmZlcmVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHZvaWQgcGFkSW50
ZXJmZXJlbmNlKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgWyZdIChBcmcmLCBBcmc6OlJv
bGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyb2xl
KSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OkVhcmx5WkRlZjoKICAgICAgICAgICAgICAgICAgICAgICAgIGhh
c0Vhcmx5RGVmID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZVVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSw3IEBAIHZvaWQgc3BpbGxFdmVyeXRo
aW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlQ29sZFVz
ZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNjcmF0Y2g6CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6
OkVhcmx5WkRlZjoKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGNvZGUu
cmVnc0luUHJpb3JpdHlPcmRlcihiYW5rKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghc2V0QmVmb3JlLmdldChyZWcpICYmICFzZXRBZnRlci5nZXQocmVnKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlz
aW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVy
YXRvci5yYgkod29ya2luZyBjb3B5KQpAQCAtNTEsMTQgKzUxLDQ5IEBAIGNsYXNzIEFyZwogICAg
ICAgICBAYmFuayA9IGJhbmsKICAgICAgICAgQHdpZHRoID0gd2lkdGgKICAgICBlbmQKLQotICAg
IGRlZiB3aWR0aENvZGUKKyAgICAKKyAgICBkZWYgc2VsZi53aWR0aENvZGUod2lkdGgpCiAgICAg
ICAgIGlmIHdpZHRoID09ICJQdHIiCiAgICAgICAgICAgICAicG9pbnRlcldpZHRoKCkiCiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICJXaWR0aCN7d2lkdGh9IgogICAgICAgICBlbmQKICAgICBl
bmQKKworICAgIGRlZiB3aWR0aENvZGUKKyAgICAgICAgQXJnLndpZHRoQ29kZSh3aWR0aCkKKyAg
ICBlbmQKKyAgICAKKyAgICBkZWYgc2VsZi5yb2xlQ29kZShyb2xlKQorICAgICAgICBjYXNlIHJv
bGUKKyAgICAgICAgd2hlbiAiVSIKKyAgICAgICAgICAgICJVc2UiCisgICAgICAgIHdoZW4gIkQi
CisgICAgICAgICAgICAiRGVmIgorICAgICAgICB3aGVuICJaRCIKKyAgICAgICAgICAgICJaRGVm
IgorICAgICAgICB3aGVuICJVRCIKKyAgICAgICAgICAgICJVc2VEZWYiCisgICAgICAgIHdoZW4g
IlVaRCIKKyAgICAgICAgICAgICJVc2VaRGVmIgorICAgICAgICB3aGVuICJVQSIKKyAgICAgICAg
ICAgICJVc2VBZGRyIgorICAgICAgICB3aGVuICJTIgorICAgICAgICAgICAgIlNjcmF0Y2giCisg
ICAgICAgIHdoZW4gIkVEIgorICAgICAgICAgICAgIkVhcmx5RGVmIgorICAgICAgICB3aGVuICJF
WkQiCisgICAgICAgICAgICAiRWFybHlaRGVmIgorICAgICAgICB3aGVuICJMVSIKKyAgICAgICAg
ICAgICJMYXRlVXNlIgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZQorICAgICAgICBl
bmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcm9sZUNvZGUKKyAgICAgICAgQXJnLnJvbGVDb2Rl
KHJvbGUpCisgICAgZW5kCiBlbmQKIAogY2xhc3MgT3ZlcmxvYWQKQEAgLTE4Miw3ICsyMTcsNyBA
QCBkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCiBlbmQKIAogZGVmIGlzUm9sZSh0b2tlbikKLSAgICB0
b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpfChaRCl8KFVaRCl8KFVBKXwoUykpXFovCisgICAgdG9r
ZW4gPX4gL1xBKChVKXwoRCl8KFVEKXwoWkQpfChVWkQpfChVQSl8KFMpfChFRCl8KEVaRCl8KExV
KSlcWi8KIGVuZAogCiBkZWYgaXNHRih0b2tlbikKQEAgLTE5MCw3ICsyMjUsNyBAQCBkZWYgaXNH
Rih0b2tlbikKIGVuZAogCiBkZWYgaXNLaW5kKHRva2VuKQotICAgIHRva2VuID1+IC9cQSgoVG1w
KXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxD
b25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpKVxaLworICAgIHRva2VuID1+IC9cQSgoVG1wKXwo
SW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25k
KXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KIGVuZAogCiBkZWYgaXNB
cmNoKHRva2VuKQpAQCAtMjY0LDcgKzI5OSw3IEBAIGNsYXNzIFBhcnNlcgogCiAgICAgZGVmIGNv
bnN1bWVLaW5kCiAgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwotICAgICAgICBwYXJzZUVy
cm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgVG1wLCBB
ZGRyLCBJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgb3IgRG91YmxlQ29uZCkiKSB1bmxlc3MgaXNL
aW5kKHJlc3VsdCkKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJ
bW0sIEJpdEltbSwgQml0SW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIFJlc0NvbmQs
IERvdWJsZUNvbmQsIG9yIFN0YXR1c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCiAgICAg
ICAgIGFkdmFuY2UKICAgICAgICAgcmVzdWx0CiAgICAgZW5kCkBAIC02MzQsMjggKzY2OSw3IEBA
IHdyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG92ZXJs
b2FkLnNpZ25hdHVyZS5lYWNoX3dpdGhfaW5kZXggewogICAgICAgICAgICAgICAgIHwgYXJnLCBp
bmRleCB8Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcm9sZSA9IG5pbAotICAg
ICAgICAgICAgICAgIGNhc2UgYXJnLnJvbGUKLSAgICAgICAgICAgICAgICB3aGVuICJVIgotICAg
ICAgICAgICAgICAgICAgICByb2xlID0gIlVzZSIKLSAgICAgICAgICAgICAgICB3aGVuICJEIgot
ICAgICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIKLSAgICAgICAgICAgICAgICB3aGVuICJa
RCIKLSAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJaRGVmIgotICAgICAgICAgICAgICAgIHdo
ZW4gIlVEIgotICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZURlZiIKLSAgICAgICAgICAg
ICAgICB3aGVuICJVWkQiCi0gICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlWkRlZiIKLSAg
ICAgICAgICAgICAgICB3aGVuICJVQSIKLSAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VB
ZGRyIgotICAgICAgICAgICAgICAgIHdoZW4gIlMiCi0gICAgICAgICAgICAgICAgICAgIHJvbGUg
PSAiU2NyYXRjaCIKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJh
aXNlCi0gICAgICAgICAgICAgICAgZW5kCi0KLSAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImZ1
bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwgI3thcmcuYmFua31QLCAje2FyZy53
aWR0aENvZGV9KTsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tp
bmRleH1dLCBBcmc6OiN7YXJnLnJvbGVDb2RlfSwgI3thcmcuYmFua31QLCAje2FyZy53aWR0aENv
ZGV9KTsiCiAgICAgICAgICAgICB9CiAgICAgICAgIGVuZAogICAgIH0KQEAgLTgxOSw2ICs4MzMs
NyBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICB3aGVuICJS
ZWxDb25kIgogICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCiAgICAgICAgICAgICAgICAg
d2hlbiAiRG91YmxlQ29uZCIKKyAgICAgICAgICAgICAgICB3aGVuICJTdGF0dXNDb25kIgogICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgIlVuZXhwZWN0ZWQg
a2luZDogI3traW5kLm5hbWV9IgogICAgICAgICAgICAgICAgIGVuZApAQCAtMTEwNSw2ICsxMTIw
LDggQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgIG91
dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0aW9uKCkiCiAgICAgICAgICAg
ICAgICAgd2hlbiAiRG91YmxlQ29uZCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
YXJnc1sje2luZGV4fV0uYXNEb3VibGVDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICB3aGVu
ICJTdGF0dXNDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5k
ZXh9XS5hc1N0YXR1c0NvbmRpdGlvbigpIgogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAg
ICAgfQogCkBAIC0xMTQ4LDI3ICsxMTY1LDcgQEAgRmlsZS5vcGVuKCJKU0Fpcl9vcGNvZGUuanMi
LCAidyIpIHsKICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWdu
YXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAogICAgICAgICAgICAgICAgIG92
ZXJsb2FkLnNpZ25hdHVyZS5lYWNoX3dpdGhfaW5kZXggewogICAgICAgICAgICAgICAgICAgICB8
IGFyZywgaW5kZXggfAotICAgICAgICAgICAgICAgICAgICByb2xlID0gbmlsCi0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgYXJnLnJvbGUKLSAgICAgICAgICAgICAgICAgICAgd2hlbiAiVSIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlIgotICAgICAgICAgICAgICAgICAgICB3
aGVuICJEIgotICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJEZWYiCi0gICAgICAgICAg
ICAgICAgICAgIHdoZW4gIlpEIgotICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJaRGVm
IgotICAgICAgICAgICAgICAgICAgICB3aGVuICJVRCIKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJvbGUgPSAiVXNlRGVmIgotICAgICAgICAgICAgICAgICAgICB3aGVuICJVWkQiCi0gICAgICAg
ICAgICAgICAgICAgICAgICByb2xlID0gIlVzZVpEZWYiCi0gICAgICAgICAgICAgICAgICAgIHdo
ZW4gIlVBIgotICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VBZGRyIgotICAgICAg
ICAgICAgICAgICAgICB3aGVuICJTIgotICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJT
Y3JhdGNoIgotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICByYWlzZQotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaW5zdC52aXNpdEFyZygje2luZGV4fSwgZnVu
YywgQXJnLiN7cm9sZX0sICN7YXJnLmJhbmt9UCwgI3thcmcud2lkdGh9KTsiCisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiaW5zdC52aXNpdEFyZygje2luZGV4fSwgZnVuYywgQXJnLiN7
YXJnLnJvbGVDb2RlfSwgI3thcmcuYmFua31QLCAje2FyZy53aWR0aH0pOyIKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCiAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAy
MTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxMyw5ICs0MTMsNiBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0
cmluZzsKICAgICB2KGJvb2wsIGR1bXBNb2R1bGVMb2FkaW5nU3RhdGUsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGV4cG9zZUludGVybmFsTW9kdWxlTG9hZGVyLCBmYWxz
ZSwgTm9ybWFsLCAiZXhwb3NlIHRoZSBpbnRlcm5hbCBtb2R1bGUgbG9hZGVyIG9iamVjdCB0byB0
aGUgZ2xvYmFsIHNwYWNlIGZvciBkZWJ1Z2dpbmciKSBcCiAgICAgXAotICAgIHYoYm9vbCwgZHVt
cEFpckFzSlNCZWZvcmVBbGxvY2F0ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCi0g
ICAgdihib29sLCBkdW1wQWlyQWZ0ZXJBbGxvY2F0ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCi0gICAgXAogICAgIHYoYm9vbCwgdXNlU3VwZXJTYW1wbGVyLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgXAogICAgIHYoYm9vbCwgcmVwb3J0TExJbnRTdGF0cywgZmFsc2Us
IENvbmZpZ3VyYWJsZSwgIlJlcG9ydHMgTExJbnQgc3RhdGlzdGljcyIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302981</attachid>
            <date>2017-02-28 13:52:03 -0800</date>
            <delta_ts>2017-02-28 17:28:54 -0800</delta_ts>
            <desc>maybe the x86 part compiles now</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>256473</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMiBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkwRjJDNjNDMDFFNjYwRUE3MDBDMTM4
MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCRjFFNjYwRUE1MDBDMTM4MzkgLyogQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAv
KiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkQ0RERCMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCAq
LzsgfTsKIAkJMEYyRDREREUxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERDMTk4MzJE
MzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRDRERTgxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhp
c1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJENERFNTE5ODMyREFDMDA3RDRCMTkgLyogVG9UaGlzU3RhdHVzLmNwcCAqLzsgfTsKQEAg
LTIyNDMsOCArMjI0OSw2IEBACiAJCURDMjE0MzA4MUNBMzJFNTgwMDBBODg2OSAvKiBJQ1N0YXRz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMjE0
MzA1MUNBMzJFNTIwMDBBODg2OSAvKiBJQ1N0YXRzLmNwcCAqLzsgfTsKIAkJREMzRDJCMEExRDM0
MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBEQzNEMkIwOTFEMzQzMTYxMDBCQTkxOEMgLyogSGVhcENlbGwuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEQzNEMkIw
QzFEMzQzNzcwMDBCQTkxOEMgLyogSGVhcENlbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8qIEhlYXBD
ZWxsLmNwcCAqLzsgfTsKLQkJREM0NTRCOEMxRDAwRTgyMjAwNEMxOEFGIC8qIEFpckR1bXBBc0pT
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNDU0
QjhBMUQwMEU4MUYwMDRDMThBRiAvKiBBaXJEdW1wQXNKUy5jcHAgKi87IH07Ci0JCURDNDU0QjhE
MUQwMEU4MjQwMDRDMThBRiAvKiBBaXJEdW1wQXNKUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREM0NTRCOEIxRDAwRTgxRjAwNEMxOEFGIC8qIEFpckR1
bXBBc0pTLmggKi87IH07CiAJCURDNjA1QjVEMUNFMjZFQTAwMDU5MzcxOCAvKiBQcm9maWxlckV2
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERD
NjA1QjU5MUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmNwcCAqLzsgfTsKIAkJREM2
MDVCNUUxQ0UyNkVBMjAwNTkzNzE4IC8qIFByb2ZpbGVyRXZlbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjVBMUNFMjZFOTgwMDU5MzcxOCAv
KiBQcm9maWxlckV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJREM2MDVCNUYxQ0UyNkVBNTAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjVCMUNF
MjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlclVJRC5jcHAgKi87IH07CkBAIC0yNzY0LDYgKzI3Njgs
MTIgQEAKIAkJMEYyQzYzQUMxRTYwQUUzQzAwQzEzODM5IC8qIEIzQmFuay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhbmsuaDsgcGF0aCA9IGIzL0IzQmFuay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNjNBRDFFNjBBRTNDMDBDMTM4MzkgLyogQjNX
aWR0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dpZHRoLmNw
cDsgcGF0aCA9IGIzL0IzV2lkdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjJDNjNBRTFFNjBBRTNEMDBDMTM4MzkgLyogQjNXaWR0aC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1dpZHRoLmg7IHBhdGggPSBiMy9CM1dpZHRoLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1Zh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQXRvbWljVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNBdG9taWNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQXRvbWljVmFsdWUuaDsgcGF0aCA9IGIz
L0IzQXRvbWljVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjUx
RTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBh
dGggPSBiMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJDNjNCOTFFNjM0NDA4MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25T
ZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQmxvY2tJbnNl
cnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFp
ckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQkYxRTY2MEVBNTAwQzEzODM5
IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkQ0RERCMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJENEREQzE5ODMyRDM0MDA3RDRCMTkg
LyogRGVidWdnZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1
Z2dlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkQ0RERGMTk4MzJE
OTEwMDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlw
ZVByb2ZpbGVyTG9nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3NzgsOCAr
NDc4OCw2IEBACiAJCURDMjE0MzA2MUNBMzJFNTIwMDBBODg2OSAvKiBJQ1N0YXRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElDU3RhdHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJREMzRDJCMDkxRDM0MzE2MTAwQkE5MThDIC8qIEhlYXBDZWxsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBDZWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCURDM0QyQjBCMUQzNDM3NkUwMEJBOTE4QyAvKiBIZWFwQ2VsbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwQ2VsbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURDNDU0QjhBMUQwMEU4MUYwMDRDMThBRiAvKiBBaXJEdW1w
QXNKUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJEdW1wQXNK
Uy5jcHA7IHBhdGggPSBiMy9haXIvQWlyRHVtcEFzSlMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlEQzQ1NEI4QjFEMDBFODFGMDA0QzE4QUYgLyogQWlyRHVtcEFzSlMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRHVtcEFzSlMuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJEdW1wQXNKUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzYwNUI1OTFD
RTI2RTk4MDA1OTM3MTggLyogUHJvZmlsZXJFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlckV2ZW50LmNwcDsgcGF0aCA9IHByb2ZpbGVyL1Byb2Zp
bGVyRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzYwNUI1QTFDRTI2
RTk4MDA1OTM3MTggLyogUHJvZmlsZXJFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBQcm9maWxlckV2ZW50Lmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURDNjA1QjVCMUNFMjZFOTgwMDU5MzcxOCAv
KiBQcm9maWxlclVJRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQ
cm9maWxlclVJRC5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlclVJRC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjkyLDYgKzUzMDAsOCBAQAogCQkJCTBGRUM4NEIzMUJE
QUNEODgwMDgwRkY3NCAvKiBhaXIgKi8sCiAJCQkJMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovLAorCQkJCTBGMkM2M0IzMUU2MzQzRTgwMEMxMzgz
OSAvKiBCM0F0b21pY1ZhbHVlLmNwcCAqLywKKwkJCQkwRjJDNjNCNDFFNjM0M0U4MDBDMTM4Mzkg
LyogQjNBdG9taWNWYWx1ZS5oICovLAogCQkJCTBGMkM2M0FCMUU2MEFFM0MwMEMxMzgzOSAvKiBC
M0JhbmsuY3BwICovLAogCQkJCTBGMkM2M0FDMUU2MEFFM0MwMEMxMzgzOSAvKiBCM0JhbmsuaCAq
LywKIAkJCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCAqLywK
QEAgLTUzNTQsNiArNTM2NCw3IEBACiAJCQkJMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
RnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
R2VuZXJhdGUuY3BwICovLAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVy
YXRlLmggKi8sCisJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAv
KiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIz
SGVhcFJhbmdlLmggKi8sCkBAIC01NDY5LDYgKzU0ODAsOCBAQAogCQkJCTBGNjRFQUYyMUM0RUNE
MDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggKi8sCiAJCQkJMEZFQzg1NEMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCisJCQkJMEYyQzYzQjkxRTYzNDQwODAwQzEzODM5
IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkwRjJDNjNCQTFFNjM0NDA4MDBD
MTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRkIzODc4QjFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oICovLAogCQkJCTBGNjE4MzIwMUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovLAogCQkJCTBGNjE4MzIxMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCAqLywKQEAgLTU0ODAsOCAr
NTQ5Myw2IEBACiAJCQkJMEYxMEYxQTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICov
LAogCQkJCTc5QUJCMTdCMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuY3BwICov
LAogCQkJCTc5QUJCMTdDMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCAqLywK
LQkJCQlEQzQ1NEI4QTFEMDBFODFGMDA0QzE4QUYgLyogQWlyRHVtcEFzSlMuY3BwICovLAotCQkJ
CURDNDU0QjhCMUQwMEU4MUYwMDRDMThBRiAvKiBBaXJEdW1wQXNKUy5oICovLAogCQkJCTBGNDU3
MDM2MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAgKi8sCiAJCQkJ
MEY0NTcwMzcxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggKi8sCiAJ
CQkJMEY2MTgzMjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLywKQEAg
LTczMjYsNiArNzMzNyw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTBGMUZFNTFCMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oICovLAorCQkJCTBG
MkM2M0JGMUU2NjBFQTUwMEMxMzgzOSAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcCAqLywK
IAkJCQk4NjAxNjFERjBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
ICovLAogCQkJCTBGMzczMDkwMUMwQ0Q3MEMwMDA1MkJGQSAvKiBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UuaCAqLywKIAkJCQk4NjQwOTIzQjE1NkVFRDNCMDA1NjZDQjIgLyogQVJNNjRB
c3NlbWJsZXIuaCAqLywKQEAgLTczNTQsOCArNzM2Niw4IEBACiAJCQkJODZDNTY4REUxMUEyMTNF
RTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovLAogCQkJCUZFNjhDNjM1MUI5MERE
RDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICovLAogCQkJCUZFNjhDNjM2
MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCAqLywKLQkJCQk4NjAx
NjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQk4NjAx
NjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLywKKwkJCQk4
NjAxNjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQlB
N0E0QUUwNzE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICov
LAogCQkJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oICovLAogCQkJCTY1ODYwMTc3MTg1QThGNUUwMDAzMEVFRSAvKiBNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oICovLApAQCAtNzk0Myw3ICs3OTU1LDYgQEAKIAkJCQkwRkVDODU3NDFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYxMEYxQTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJREM0NTRCOEQxRDAwRTgyNDAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjQ1NzAzOTFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjE4MzJEMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0
U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8q
IEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFkZXJzICovLApAQCAtNzk1Niw2ICs3OTY3LDcg
QEAKIAkJCQkwRkVDODU4MDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFQzg1ODExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkRGNjdENzFEOURDNDQyMDAxQjk4MjUgLyogQWlyS2luZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQkMxRTYzNDQwQzAwQzEzODM5IC8qIEFpckJsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjg0RDQzODFDMDAxNjFDMDA4MUQ2NjMg
LyogQWlyTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTM0QzFBMUM0QjM5QUUwMDAz
QTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYx
ODMyRjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggaW4gSGVhZGVy
cyAqLywKQEAgLTgwNDcsNiArODA1OSw3IEBACiAJCQkJNDM0MjJBNjMxQzE1OEU2RDAwRTJFQjk4
IC8qIEIzQ29uc3RGbG9hdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODVCMzFCREVE
OTU3MDA4MEZGNzQgLyogQjNDb25zdFB0clZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
OERGNjFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJDNjNCODFFNjM0M0Y3MDBDMTM4MzkgLyogQjNHZW5lcmljQmxvY2tJbnNlcnRp
b25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTBFMUJGMDI3NkMwMDEzQzg4RiAvKiBC
M0RhdGFTZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzRkNGQzFDMTYyNUJFMDAzMjNG
NjcgLyogQjNEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCOEFEOTFDNEVEREEy
MDA5NjkwNTIgLyogQjNEdXBsaWNhdGVUYWlscy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzY2LDYg
KzgzNzksNyBAQAogCQkJCTBGMzkyQzhBMUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6
ei5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVFMTcxNzhF
NzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkM2M0I3MUU2MzQzRUQwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjYyMzc5ODFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZH
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzkyLDYgKzk4MDYsNyBAQAogCQkJ
YnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTBGRkE1NDk3
MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
MkM2M0MwMUU2NjBFQTcwMEMxMzgzOSAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUFENDkzN0MzMUREQkU2MTQwMDc3QzgwNyAvKiBBYnN0cmFjdE1vZHVs
ZVJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1RjBGNDE0RDEwNjM5MDBBQzc2NDkg
LyogQWJzdHJhY3RQQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzcwQjRGNTFCRjI2MjAyMDA1
QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTk4MDIsNyArOTgxNyw2IEBACiAJCQkJMEZFQzg1NzMxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVD
ODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjYxODMyQjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCURDNDU0QjhDMUQwMEU4MjIwMDRDMThBRiAvKiBBaXJEdW1wQXNKUy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjQ1NzAzODFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENv
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2MTgzMkMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFp
ckVtaXRTaHVmZmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNERFMUNFMUM0QzFCNTQwMDRE
NkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAyNDgs
NiArMTAyNjIsNyBAQAogCQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXpl
VGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVB
RCAvKiBJbmplY3RlZFNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2
ODQ0MDBGM0M3Q0IgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMkM2M0I2MUU2MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1OEUzNTkxMTg2MERFQ0YwMDFGMjRGRSAvKiBJbmplY3RlZFNjcmlwdEhvc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1Q0ExODVGOTYyNDAwN0U5NUFEIC8qIEluamVj
dGVkU2NyaXB0TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTg0MEUyMDE4N0I3Qjg2
MDA4NDNCMTAgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0x
MDI2Niw2ICsxMDI4MSw3IEBACiAJCQkJRTM1RTAzNUYxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMyNDM4
QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1l
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQzYzQkIxRTYzNDQwQTAwQzEzODM5IC8q
IEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NTE2NUQyMUJE
RjBCOTgwMDNCNzVDMSAvKiBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1OTNDRjgyMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1ZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0YxMDdFQzM3NjAwNDI3QTQ4IC8qIEludGVy
bmFsRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIiAvLyBIYXZlIHRvIGJyZWFrIHdpdGgg
c3R5bGUgYmVjYXVzZSBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggaXMgYSBzaGFkeSBoZWFkZXIu
CisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJhc2U6OlN0
YXR1c0NvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAg
ICBjYXNlIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJCYXNlOjpTdWNjZXNzOgorICAgICAgICBvdXQu
cHJpbnQoIlN1Y2Nlc3MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlckJhc2U6OkZhaWx1cmU6CisgICAgICAgIG91dC5wcmludCgiRmFpbHVyZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3Jh
cGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNp
bmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvV2Vha1JhbmRvbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTUwLDggKzUxLDI4
IEBAIG5hbWVzcGFjZSBERkcgewogc3RydWN0IE9TUkV4aXQ7CiB9CiAKK2NsYXNzIEFic3RyYWN0
TWFjcm9Bc3NlbWJsZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXR1c0NvbmRpdGlvbiB7
CisgICAgICAgIFN1Y2Nlc3MsCisgICAgICAgIEZhaWx1cmUKKyAgICB9OworICAgIAorICAgIHN0
YXRpYyBTdGF0dXNDb25kaXRpb24gaW52ZXJ0KFN0YXR1c0NvbmRpdGlvbiBjb25kaXRpb24pCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbikgeworICAgICAgICBjYXNlIFN1Y2Nlc3M6
CisgICAgICAgICAgICByZXR1cm4gRmFpbHVyZTsKKyAgICAgICAgY2FzZSBGYWlsdXJlOgorICAg
ICAgICAgICAgcmV0dXJuIFN1Y2Nlc3M7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3M7CisgICAgfQorfTsKKwog
dGVtcGxhdGUgPGNsYXNzIEFzc2VtYmxlclR5cGUsIGNsYXNzIE1hY3JvQXNzZW1ibGVyVHlwZT4K
LWNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIgeworY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2Vt
YmxlciA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyQmFzZSB7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGUsIE1hY3JvQXNzZW1i
bGVyVHlwZT4gQWJzdHJhY3RNYWNyb0Fzc2VtYmxlclR5cGU7CiAgICAgdHlwZWRlZiBBc3NlbWJs
ZXJUeXBlIEFzc2VtYmxlclR5cGVfVDsKQEAgLTExMDgsMyArMTEyOSwxNiBAQCBBYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGUsIE1hCiAjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxF
UikKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorCituYW1l
c3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXJCYXNlOjpTdGF0dXND
b25kaXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShBU1NF
TUJMRVIpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEz
Niw2ICsxMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0d29Ub1RoZTMy
OyAvLyBUaGlzIGlzIHN1cGVyIHVzZWZ1bCBmb3Igc29tZSBkb3VibGUgY29kZS4KIAogICAgIC8v
IFV0aWxpdGllcyB1c2VkIGJ5IHRoZSBERkcgSklULgorICAgIHVzaW5nIEFic3RyYWN0TWFjcm9B
c3NlbWJsZXJCYXNlOjppbnZlcnQ7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjppbnZl
cnQ7CiAgICAgCiAgICAgc3RhdGljIERvdWJsZUNvbmRpdGlvbiBpbnZlcnQoRG91YmxlQ29uZGl0
aW9uIGNvbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzEsNiArMTcxLDExIEBAIHB1YmxpYzoKICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkbF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CiAgICAg
fQogCisgICAgdm9pZCBhZGQzMihCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMu
aW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBhZGQzMihSZWdpc3Rl
cklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9y
bShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwpAQCAtMjUxLDE2ICsyNTYsNzEgQEAgcHVi
bGljOgogICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBhbmQzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX3JtKHNyYywgZGVzdC5vZmZz
ZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmQxNihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYW5kd19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwor
ICAgIHZvaWQgYW5kMTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuYW5kd19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRl
c3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgYW5kOChSZWdpc3RlcklE
IHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kYl9ybShz
cmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgYW5kOChSZWdp
c3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5h
bmRiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2Fs
ZSk7CisgICAgfQorCiAgICAgdm9pZCBhbmQzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYW5kbF9tcihzcmMub2Zmc2V0LCBzcmMuYmFz
ZSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBhbmQzMihCYXNlSW5kZXggc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX21yKHNyYy5vZmZzZXQs
IHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9p
ZCBhbmQzMihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAg
ICBtX2Fzc2VtYmxlci5hbmRsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kbF9pbShpbW0ubV92
YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X2ltKHN0YXRpY19j
YXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7
CisgICAgfQorCisgICAgdm9pZCBhbmQxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHdfaW0oc3RhdGljX2Nhc3Q8aW50
MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDgoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5k
Yl9pbShzdGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ4KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kYl9pbShzdGF0
aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBhbmQz
MihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7
CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpAQCAtNDU2LDYgKzUxNiwzMSBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fYXNzZW1ibGVyLm5lZ2xfbShzcmNEZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlKTsK
ICAgICB9CiAKKyAgICB2b2lkIG5lZzMyKEJhc2VJbmRleCBzcmNEZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubmVnbF9tKHNyY0Rlc3Qub2Zmc2V0LCBzcmNEZXN0LmJhc2UsIHNyY0Rl
c3QuaW5kZXgsIHNyY0Rlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgbmVnMTYoQWRkcmVz
cyBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubmVnd19tKHNyY0Rlc3Qub2Zm
c2V0LCBzcmNEZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgbmVnMTYoQmFzZUluZGV4IHNy
Y0Rlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWd3X20oc3JjRGVzdC5vZmZzZXQs
IHNyY0Rlc3QuYmFzZSwgc3JjRGVzdC5pbmRleCwgc3JjRGVzdC5zY2FsZSk7CisgICAgfQorCisg
ICAgdm9pZCBuZWc4KEFkZHJlc3Mgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm5lZ2JfbShzcmNEZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lk
IG5lZzgoQmFzZUluZGV4IHNyY0Rlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWdi
X20oc3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3QuYmFzZSwgc3JjRGVzdC5pbmRleCwgc3JjRGVzdC5z
Y2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBvcjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5vcmxfcnIoc3JjLCBkZXN0KTsKQEAg
LTQ3MSwxNiArNTU2LDcxIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX3JtKHNy
YywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjMyKFJlZ2lz
dGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9y
bF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUp
OworICAgIH0KKworICAgIHZvaWQgb3IxNihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjE2KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yd19ybShzcmMsIGRlc3Qub2Zmc2V0
LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQg
b3I4KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5vcmJfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2
b2lkIG9yOChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5vcmJfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4
LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yMzIoQWRkcmVzcyBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9tcihzcmMub2Zmc2V0
LCBzcmMuYmFzZSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBvcjMyKEJhc2VJbmRleCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9tcihzcmMu
b2Zmc2V0LCBzcmMuYmFzZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUsIGRlc3QpOworICAgIH0KKwog
ICAgIHZvaWQgb3IzMihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewog
ICAgICAgICBtX2Fzc2VtYmxlci5vcmxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgb3IzMihUcnVzdGVkSW1tMzIgaW1tLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9pbShpbW0u
bV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRk
cmVzcy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yd19pbShzdGF0aWNf
Y2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Up
OworICAgIH0KKworICAgIHZvaWQgb3IxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yd19pbShzdGF0aWNfY2FzdDxpbnQx
Nl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
aW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgb3I4KFRydXN0ZWRJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9p
bShzdGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUlu
ZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcmJfaW0oc3RhdGljX2Nh
c3Q8aW50OF90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgb3IzMihSZWdp
c3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIGlmIChvcDEgPT0gb3AyKQpAQCAtNjU0LDE2ICs3OTQsNzEgQEAgcHVibGljOgogICAgICAg
ICBtX2Fzc2VtYmxlci5zdWJsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YndfaW0oc3RhdGljX2Nh
c3Q8aW50MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
KyAgICB9CisKKyAgICB2b2lkIHN1YjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3ViYl9pbShzdGF0aWNfY2FzdDxpbnQ4X3Q+
KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorCisg
ICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKwor
ICAgIHZvaWQgc3ViMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5zdWJ3X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5t
X3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRk
cmVzcy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBzdWI4KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3ViYl9pbShzdGF0
aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBzdWIz
MihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJs
ZXIuc3VibF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9p
ZCBzdWIzMihCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5zdWJsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5z
Y2FsZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBzdWIzMihSZWdpc3RlcklEIHNyYywgQWRk
cmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9ybShzcmMsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3ViMTYoUmVnaXN0ZXJJRCBz
cmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1Yndfcm0oc3Jj
LCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjgoUmVnaXN0
ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmJf
cm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMy
KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnN1Ymxfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0
LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjE2KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5k
ZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1Yndfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2
b2lkIHN1YjgoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuc3ViYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5k
ZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmxfcnIoc3Jj
LCBkZXN0KTsKQEAgLTY3Nyw2ICs4NzIsNTAgQEAgcHVibGljOgogICAgICAgICAgICAgbV9hc3Nl
bWJsZXIueG9ybF9pbShpbW0ubV92YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAg
fQogCisgICAgdm9pZCB4b3IzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAg
ICB7CisgICAgICAgIGlmIChpbW0ubV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLm5vdGxfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxl
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9pbShpbW0ubV92
YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7Cisg
ICAgfQorCisgICAgdm9pZCB4b3IxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3QpCisg
ICAgeworICAgICAgICBpbW0ubV92YWx1ZSA9IHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3Zh
bHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci54b3J3X2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVz
dC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJ
bmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgaW1tLm1fdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQx
Nl90PihpbW0ubV92YWx1ZSk7CisgICAgICAgIGlmIChpbW0ubV92YWx1ZSA9PSAtMSkKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm5vdHdfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0Lmlu
ZGV4LCBkZXN0LnNjYWxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
eG9yd19pbShpbW0ubV92YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwg
ZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCB4b3I4KFRydXN0ZWRJbW0zMiBpbW0sIEFk
ZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIGltbS5tX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50
OF90PihpbW0ubV92YWx1ZSk7CisgICAgICAgIGlmIChpbW0ubV92YWx1ZSA9PSAtMSkKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm5vdGJfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yYl9pbShpbW0ubV92YWx1ZSwgZGVz
dC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCB4b3I4KFRydXN0ZWRJbW0z
MiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgaW1tLm1fdmFsdWUgPSBzdGF0
aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09
IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm90Yl9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci54b3JiX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBk
ZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHhvcjMyKFRydXN0ZWRJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChpbW0ubV92YWx1
ZSA9PSAtMSkKQEAgLTY5MCwxMSArOTI5LDQxIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJs
ZXIueG9ybF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZv
aWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIueG9ybF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5k
ZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgeG9yMTYoUmVnaXN0ZXJJRCBzcmMs
IEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcndfcm0oc3JjLCBk
ZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjE2KFJlZ2lzdGVy
SUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcndf
cm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsK
KyAgICB9CisKKyAgICB2b2lkIHhvcjgoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcmJfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBk
ZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0
LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQg
eG9yMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNz
ZW1ibGVyLnhvcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwogICAgIH0KICAgICAK
KyAgICB2b2lkIHhvcjMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnhvcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRl
eCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCB4b3IzMihSZWdpc3Rl
cklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IGlmIChvcDEgPT0gb3AyKQpAQCAtNzQxLDYgKzEwMTAsMzEgQEAgcHVibGljOgogICAgICAgICBt
X2Fzc2VtYmxlci5ub3RsX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisgICAg
dm9pZCBub3QzMihCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5v
dGxfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAg
ICB9CisKKyAgICB2b2lkIG5vdDE2KEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm5vdHdfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lk
IG5vdDE2KEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm90d19t
KGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0K
KworICAgIHZvaWQgbm90OChBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5ub3RiX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBub3Q4
KEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm90Yl9tKGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAg
IHZvaWQgc3FydERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQogICAg
IHsKICAgICAgICAgbV9hc3NlbWJsZXIuc3FydHNkX3JyKHNyYywgZHN0KTsKQEAgLTEwNzEsNDIg
KzEzNjUsMjMgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdG9yZTE2KFJlZ2lzdGVySUQgc3JjLCBC
YXNlSW5kZXggYWRkcmVzcykKICAgICB7Ci0jaWYgQ1BVKFg4NikKLSAgICAgICAgLy8gT24gMzIt
Yml0IHg4NiB3ZSBjYW4gb25seSBzdG9yZSBmcm9tIHRoZSBmaXJzdCA0IHJlZ2lzdGVyczsKLSAg
ICAgICAgLy8gZXNwLi5lZGkgYXJlIG1hcHBlZCB0byB0aGUgJ2gnIHJlZ2lzdGVycyEKLSAgICAg
ICAgaWYgKHNyYyA+PSA0KSB7Ci0gICAgICAgICAgICAvLyBQaWNrIGEgdGVtcG9yYXJ5IHJlZ2lz
dGVyLgotICAgICAgICAgICAgUmVnaXN0ZXJJRCB0ZW1wID0gZ2V0VW51c2VkUmVnaXN0ZXIoYWRk
cmVzcyk7Ci0KLSAgICAgICAgICAgIC8vIFN3YXAgdG8gdGhlIHRlbXBvcmFyeSByZWdpc3RlciB0
byBwZXJmb3JtIHRoZSBzdG9yZS4KLSAgICAgICAgICAgIHN3YXAoc3JjLCB0ZW1wKTsKLSAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdndfcm0odGVtcCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7Ci0gICAgICAgICAgICBzd2FwKHNy
YywgdGVtcCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgogICAgICAg
ICBtX2Fzc2VtYmxlci5tb3Z3X3JtKHNyYywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwg
YWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCiAgICAgdm9pZCBzdG9yZTE2
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewotI2lmIENQVShYODYpCi0g
ICAgICAgIC8vIE9uIDMyLWJpdCB4ODYgd2UgY2FuIG9ubHkgc3RvcmUgZnJvbSB0aGUgZmlyc3Qg
NCByZWdpc3RlcnM7Ci0gICAgICAgIC8vIGVzcC4uZWRpIGFyZSBtYXBwZWQgdG8gdGhlICdoJyBy
ZWdpc3RlcnMhCi0gICAgICAgIGlmIChzcmMgPj0gNCkgewotICAgICAgICAgICAgLy8gUGljayBh
IHRlbXBvcmFyeSByZWdpc3Rlci4KLSAgICAgICAgICAgIFJlZ2lzdGVySUQgdGVtcCA9IGdldFVu
dXNlZFJlZ2lzdGVyKGFkZHJlc3MpOwotCi0gICAgICAgICAgICAvLyBTd2FwIHRvIHRoZSB0ZW1w
b3JhcnkgcmVnaXN0ZXIgdG8gcGVyZm9ybSB0aGUgc3RvcmUuCi0gICAgICAgICAgICBzd2FwKHNy
YywgdGVtcCk7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3X3JtKHRlbXAsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwotICAgICAgICAgICAgc3dhcChzcmMsIHRlbXApOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgbV9hc3NlbWJsZXIu
bW92d19ybShzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAg
IHZvaWQgc3RvcmUxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdndfaW0oc3RhdGljX2Nhc3Q8aW50MTZfdD4oaW1tLm1f
dmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMTYoVHJ1c3RlZEltbTMyIGltbSwg
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92d19pbShzdGF0
aWNfY2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UpOworICAgIH0KIAogICAgIC8vIEZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbjoKICAgICAvLwpA
QCAtMjc0Myw3NCArMzAxOCw4MzggQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9pbSgwLCAwLCBYODZSZWdpc3RlcnM6OmVzcCk7
CiAgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwg
QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21p
Y1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgcmVzdWx0LCBbJl0geyBtX2Fzc2Vt
Ymxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7
IH0pOworICAgIH0KIAotICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVu
dHMgbW90aW9uIG9mIG5vcm1hbCBzdG9yZXMuIFNvLCBpdCdzIGEgbm8tb3Agb24geDg2LgotICAg
IHZvaWQgc3RvcmVGZW5jZSgpCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM4KFN0YXR1c0NvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1Zh
bHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgeworICAgICAg
ICBhdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsg
bV9hc3NlbWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9CiAKLSAgICAv
LyBXZSB0YWtlIHRoaXMgdG8gbWVhbiB0aGF0IGl0IHByZXZlbnRzIG1vdGlvbiBvZiBub3JtYWwg
bG9hZHMuIFNvLCBpdCdzIGEgbm8tb3Agb24geDg2LgotICAgIHZvaWQgbG9hZEZlbmNlKCkKKyAg
ICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3Ms
IFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQs
IGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3Jt
KG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0
aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHZvaWQgYXRvbWlj
U3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRS
ZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklE
IHJlc3VsdCkKICAgICB7Ci0gICAgICAgIFg4NkFzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKGlu
c3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGVzdGluYXRpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJl
c3VsdCwgcmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7
IH0pOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG1heEp1bXBSZXBsYWNlbWVu
dFNpemUoKQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVMzMihTdGF0dXNDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRk
cmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBY
ODZBc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKTsKKyAgICAgICAgYXRvbWljU3Ry
b25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVy
LmNtcHhjaGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBwYXRjaGFibGVKdW1wU2l6ZSgpCisgICAg
dm9pZCBhdG9taWNTdHJvbmdDQVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBl
eHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3Ms
IFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIFg4NkFzc2VtYmxlcjo6
cGF0Y2hhYmxlSnVtcFNpemUoKTsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVj
dGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1Zh
bHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsgfSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1Bv
aW50Um91bmRpbmcoKQorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTOChSZWdpc3RlcklEIGV4cGVj
dGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAg
ewotICAgICAgICBpZiAoc19zc2U0XzFDaGVja1N0YXRlID09IENQVUlEQ2hlY2tTdGF0ZTo6Tm90
Q2hlY2tlZCkKLSAgICAgICAgICAgIHVwZGF0ZUVheDFFY3hGbGFncygpOwotICAgICAgICByZXR1
cm4gc19zc2U0XzFDaGVja1N0YXRlID09IENQVUlEQ2hlY2tTdGF0ZTo6U2V0OworICAgICAgICBh
dG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhj
aGdiX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CiAgICAg
fQogCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNBVlgoKQorICAgIHZvaWQgYXRvbWljU3Ryb25n
Q0FTOChSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBC
YXNlSW5kZXggYWRkcmVzcykKICAgICB7Ci0gICAgICAgIC8vIEFWWCBzdGlsbCBjYXVzZXMgbXlz
dGVyaW91cyByZWdyZXNzaW9ucyBhbmQgdGhvc2UgcmVncmVzc2lvbnMgY2FuIGJlIG1hc3NpdmUu
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVk
QW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0p
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUVheDFFY3hGbGFncygpCisgICAgdm9p
ZCBhdG9taWNTdHJvbmdDQVMxNihSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3Rl
cklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewotICAgICAgICBpbnQgZmxhZ3Mg
PSAwOwotI2lmIENPTVBJTEVSKE1TVkMpCi0gICAgICAgIGludCBjcHVJbmZvWzRdOwotICAgICAg
ICBfX2NwdWlkKGNwdUluZm8sIDB4MSk7Ci0gICAgICAgIGZsYWdzID0gY3B1SW5mb1syXTsKLSNl
bGlmIENPTVBJTEVSKEdDQ19PUl9DTEFORykKLSNpZiBDUFUoWDg2XzY0KQotICAgICAgICBhc20g
KAotICAgICAgICAgICAgIm1vdmwgJDB4MSwgJSVlYXg7IgotICAgICAgICAgICAgImNwdWlkOyIK
LSAgICAgICAgICAgICJtb3ZsICUlZWN4LCAlMDsiCi0gICAgICAgICAgICA6ICI9ZyIgKGZsYWdz
KQotICAgICAgICAgICAgOgotICAgICAgICAgICAgOiAiJWVheCIsICIlZWJ4IiwgIiVlY3giLCAi
JWVkeCIKLSAgICAgICAgICAgICk7Ci0jZWxzZQotICAgICAgICBhc20gKAotICAgICAgICAgICAg
Im1vdmwgJDB4MSwgJSVlYXg7IgotICAgICAgICAgICAgInB1c2hsICUlZWJ4OyIKLSAgICAgICAg
ICAgICJjcHVpZDsiCi0gICAgICAgICAgICAicG9wbCAlJWVieDsiCi0gICAgICAgICAgICAibW92
bCAlJWVjeCwgJTA7IgotICAgICAgICAgICAgOiAiPWciIChmbGFncykKLSAgICAgICAgICAgIDoK
LSAgICAgICAgICAgIDogIiVlYXgiLCAiJWVjeCIsICIlZWR4IgotICAgICAgICAgICAgKTsKLSNl
bmRpZgorICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1f
YXNzZW1ibGVyLmNtcHhjaGd3X3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5i
YXNlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVMxNihSZWdpc3RlcklE
IGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZd
IHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CisKKyAg
ICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJl
Z2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0b21p
Y1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2xf
cm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisK
KyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQs
IFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
YXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4
Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWlj
U3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJl
c3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwg
WyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NB
UzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJl
Z2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsg
bV9hc3NlbWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4
cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwg
YWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoQXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhw
ZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3Rl
ZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJl
c3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0NvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1Zh
bHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWlj
U3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4
Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIoU3RhdHVzQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9u
Z0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ2xf
cm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgs
IGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVM4KFN0
YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3Rl
cklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsK
KyAgICAgICAgYXRvbWljU3Ryb25nQ0FTOChjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFs
dWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FTOChT
dGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0
ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAg
IHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTOChjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3
VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FT
MTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJl
Z2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCisg
ICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwg
bmV3VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFr
Q0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQs
IFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3Vs
dCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzE2KGNvbmQsIGV4cGVjdGVkQW5kUmVz
dWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21p
Y1dlYWtDQVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJl
c3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJl
c3VsdCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzMyKGNvbmQsIGV4cGVjdGVkQW5k
UmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0
b21pY1dlYWtDQVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVy
SUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMzIoY29uZCwgZXhwZWN0
ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoQXRvbWljV2Vha0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
ZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVM4KGNvbmQsIGV4cGVj
dGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hBdG9taWNXZWFrQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTOChjb25kLCBleHBlY3RlZEFu
ZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRv
bWljV2Vha0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5k
UmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTMTYoY29uZCwgZXhwZWN0ZWRBbmRSZXN1
bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dl
YWtDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3Vs
dCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTMTYoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQs
IG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dlYWtD
QVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwg
UmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzMyKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdW
YWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FTMzIo
U3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaEF0b21pY1N0cm9uZ0NBUzMyKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1
ZSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkOChUcnVzdGVkSW1t
MzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIGFkZDgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNBZGQ4KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ4KGltbSwgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ4
KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkOChSZWdpc3Rl
cklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIGFkZDgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNBZGQxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDE2KGltbSwgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFz
ZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIGFkZDE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRk
MTYoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBhdG9taWNBZGQxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDE2KHJlZywg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMzIoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICBhZGQzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY0FkZDMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQzMihpbW0sIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFk
ZDMyKHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMzIoUmVn
aXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBhZGQzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1N1YjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI4KGltbSwgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViOChUcnVzdGVkSW1tMzIgaW1tLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgc3ViOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1
YjgoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY1N1YjgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI4KHJlZywgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMTYoVHJ1c3RlZEltbTMyIGlt
bSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBzdWIxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y1N1YjE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWIxNihpbW0sIGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjE2
KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMTYoUmVnaXN0
ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBzdWIxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1N1YjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViMzIoaW1tLCBhZGRyZXNz
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgc3ViMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNT
dWIzMihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWIzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY1N1YjMyKFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViMzIocmVn
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQ4KFRydXN0ZWRJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgYW5kOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY0FuZDgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDgoaW1tLCBhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQ4KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDgo
cmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQ4KFJlZ2lzdGVy
SUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgYW5kOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY0FuZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMTYoaW1tLCBhZGRyZXNzKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNl
SW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAg
ICAgYW5kMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQx
NihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhbmQxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY0FuZDE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMTYocmVnLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQzMihUcnVzdGVkSW1tMzIg
aW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIGFuZDMyKGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRv
bWljQW5kMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDMyKGltbSwgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMzIoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5k
MzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQzMihSZWdp
c3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIGFuZDMyKHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljT3I4KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I4KGltbSwgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I4KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBvcjgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjgoUmVn
aXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvY2soKTsKKyAgICAgICAgb3I4KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgYXRvbWljT3I4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I4KHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3IxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9y
MTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBvcjE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljT3IxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjE2KHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3IxNihSZWdpc3RlcklEIHJlZywgQmFzZUlu
ZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG9yMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjMyKFRy
dXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgb3IzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY09yMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMzIoaW1tLCBhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjMyKFJlZ2lzdGVySUQgcmVnLCBB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIG9yMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjMy
KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY1hvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I4KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yOChUcnVzdGVkSW1tMzIgaW1t
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgeG9yOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y1hvcjgoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY1hvcjgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I4KHJlZywg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMTYoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICB4b3IxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1hvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3IxNihpbW0sIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhv
cjE2KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMTYoUmVn
aXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3IxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yMzIoaW1tLCBhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3IzMihUcnVzdGVkSW1tMzIgaW1t
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgeG9yMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNYb3IzMihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjMyKFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yMzIo
cmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWc4KEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVn
OChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWc4KEJhc2VJbmRleCBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBuZWc4
KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzE2KEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnMTYo
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMTYoQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzE2
KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzMyKEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnMzIo
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMzIoQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzMy
KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDgoQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3Q4KGFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDgoQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDgoYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90MTYoQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3QxNihhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3QxNihCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90MTYoYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90MzIoQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBub3QzMihhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3QzMihCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90MzIoYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZ0FkZDgoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGJfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkOChSZWdpc3RlcklE
IHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhhZGRiX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljWGNoZ0FkZDE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LnhhZGR3X3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljWGNoZ0FkZDE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIueGFkZHdfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hn
QWRkMzIoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGxfcm0ocmVnLCBhZGRy
ZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNY
Y2hnQWRkMzIoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkbF9ybShyZWcs
IGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2Nh
bGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGc4KFJlZ2lzdGVySUQgcmVnLCBB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnhhZGRiX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzgoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBtX2Fzc2VtYmxlci54Y2hnYl9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY1hjaGcxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnd19ybShy
ZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY1hjaGcxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGd3X3Jt
KHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzMyKFJlZ2lzdGVySUQg
cmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdsX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzMyKFJlZ2lzdGVySUQg
cmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBsb2FkQWNxOChBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbG9hZDgoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkQWNxOChC
YXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkOChzcmMs
IGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3E4U2lnbmVkRXh0ZW5kVG8zMihB
ZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDhTaWduZWRF
eHRlbmRUbzMyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZEFjcThTaWdu
ZWRFeHRlbmRUbzMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGxvYWQ4U2lnbmVkRXh0ZW5kVG8zMihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGxvYWRBY3ExNihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbG9hZDE2KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZEFjcTE2KEJh
c2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQxNihzcmMs
IGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIo
QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQxNlNpZ25l
ZEV4dGVuZFRvMzIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkQWNxMTZT
aWduZWRFeHRlbmRUbzMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGxvYWQxNlNpZ25lZEV4dGVuZFRvMzIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBsb2FkQWNxMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGxvYWQzMihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3Ez
MihCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkMzIo
c3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVJlbDgoUmVnaXN0ZXJJRCBz
cmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIHN0b3JlOChzcmMsIGRlc3QpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsOChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRl
c3QpCisgICAgeworICAgICAgICBzdG9yZTgoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzdG9yZVJlbDgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgc3RvcmU4KGltbSwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw4
KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmU4
KGltbSwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwxNihSZWdpc3RlcklE
IHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmUxNihzcmMsIGRlc3QpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsMTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRl
eCBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmUxNihzcmMsIGRlc3QpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHN0b3JlUmVsMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAg
IHsKKyAgICAgICAgc3RvcmUxNihpbW0sIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0
b3JlUmVsMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAg
ICBzdG9yZTE2KGltbSwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmUzMihzcmMs
IGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsMzIoUmVnaXN0ZXJJRCBzcmMs
IEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmUzMihzcmMsIGRlc3QpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBk
ZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmUzMihpbW0sIGRlc3QpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHN0b3JlUmVsMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBzdG9yZTMyKGltbSwgZGVzdCk7CisgICAgfQorICAgIAorICAgIC8vIFdlIHRh
a2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVudHMgbW90aW9uIG9mIG5vcm1hbCBzdG9yZXMu
IFNvLCBpdCdzIGEgbm8tb3Agb24geDg2LgorICAgIHZvaWQgc3RvcmVGZW5jZSgpCisgICAgewor
ICAgIH0KKworICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVudHMgbW90
aW9uIG9mIG5vcm1hbCBsb2Fkcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4ODYuCisgICAgdm9pZCBs
b2FkRmVuY2UoKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1
bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwg
ZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVt
cChpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIGRlc3RpbmF0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG1heEp1
bXBSZXBsYWNlbWVudFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFg4NkFzc2VtYmxlcjo6
bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qg
cGF0Y2hhYmxlSnVtcFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFg4NkFzc2VtYmxlcjo6
cGF0Y2hhYmxlSnVtcFNpemUoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zs
b2F0aW5nUG9pbnRSb3VuZGluZygpCisgICAgeworICAgICAgICBpZiAoc19zc2U0XzFDaGVja1N0
YXRlID09IENQVUlEQ2hlY2tTdGF0ZTo6Tm90Q2hlY2tlZCkKKyAgICAgICAgICAgIHVwZGF0ZUVh
eDFFY3hGbGFncygpOworICAgICAgICByZXR1cm4gc19zc2U0XzFDaGVja1N0YXRlID09IENQVUlE
Q2hlY2tTdGF0ZTo6U2V0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQVZYKCkK
KyAgICB7CisgICAgICAgIC8vIEFWWCBzdGlsbCBjYXVzZXMgbXlzdGVyaW91cyByZWdyZXNzaW9u
cyBhbmQgdGhvc2UgcmVncmVzc2lvbnMgY2FuIGJlIG1hc3NpdmUuCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVFYXgxRWN4RmxhZ3MoKQorICAg
IHsKKyAgICAgICAgaW50IGZsYWdzID0gMDsKKyNpZiBDT01QSUxFUihNU1ZDKQorICAgICAgICBp
bnQgY3B1SW5mb1s0XTsKKyAgICAgICAgX19jcHVpZChjcHVJbmZvLCAweDEpOworICAgICAgICBm
bGFncyA9IGNwdUluZm9bMl07CisjZWxpZiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCisjaWYgQ1BV
KFg4Nl82NCkKKyAgICAgICAgYXNtICgKKyAgICAgICAgICAgICJtb3ZsICQweDEsICUlZWF4OyIK
KyAgICAgICAgICAgICJjcHVpZDsiCisgICAgICAgICAgICAibW92bCAlJWVjeCwgJTA7IgorICAg
ICAgICAgICAgOiAiPWciIChmbGFncykKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgIDogIiVl
YXgiLCAiJWVieCIsICIlZWN4IiwgIiVlZHgiCisgICAgICAgICAgICApOworI2Vsc2UKKyAgICAg
ICAgYXNtICgKKyAgICAgICAgICAgICJtb3ZsICQweDEsICUlZWF4OyIKKyAgICAgICAgICAgICJw
dXNobCAlJWVieDsiCisgICAgICAgICAgICAiY3B1aWQ7IgorICAgICAgICAgICAgInBvcGwgJSVl
Yng7IgorICAgICAgICAgICAgIm1vdmwgJSVlY3gsICUwOyIKKyAgICAgICAgICAgIDogIj1nIiAo
ZmxhZ3MpCisgICAgICAgICAgICA6CisgICAgICAgICAgICA6ICIlZWF4IiwgIiVlY3giLCAiJWVk
eCIKKyAgICAgICAgICAgICk7CisjZW5kaWYKICNlbmRpZiAvLyBDT01QSUxFUihHQ0NfT1JfQ0xB
TkcpCiAgICAgICAgIHNfc3NlNF8xQ2hlY2tTdGF0ZSA9IChmbGFncyAmICgxIDw8IDE5KSkgPyBD
UFVJRENoZWNrU3RhdGU6OlNldCA6IENQVUlEQ2hlY2tTdGF0ZTo6Q2xlYXI7CiAgICAgICAgIHNf
YXZ4Q2hlY2tTdGF0ZSA9IChmbGFncyAmICgxIDw8IDI4KSkgPyBDUFVJRENoZWNrU3RhdGU6OlNl
dCA6IENQVUlEQ2hlY2tTdGF0ZTo6Q2xlYXI7CkBAIC0yODMxLDYgKzM4NzAsMTggQEAgcHJvdGVj
dGVkOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8WDg2QXNzZW1ibGVyOjpDb25kaXRpb24+
KGNvbmQpOwogICAgIH0KIAorICAgIFg4NkFzc2VtYmxlcjo6Q29uZGl0aW9uIHg4NkNvbmRpdGlv
bihTdGF0dXNDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZCkgewor
ICAgICAgICBjYXNlIFN1Y2Nlc3M6CisgICAgICAgICAgICByZXR1cm4gWDg2QXNzZW1ibGVyOjpD
b25kaXRpb25FOworICAgICAgICBjYXNlIEZhaWx1cmU6CisgICAgICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjpDb25kaXRpb25ORTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gWDg2QXNzZW1ibGVyOjpDb25kaXRpb25F
OworICAgIH0KKwogICAgIHZvaWQgc2V0MzIoWDg2QXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICNpZiBDUFUoWDg2KQpAQCAtMjkyNSw2ICszOTc2LDM1
IEBAIHByb3RlY3RlZDoKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoc2l6ZU9mUmVnaXN0ZXIp
LCBkc3QpOwogICAgICAgICBzcmNJc05vblplcm8ubGluayh0aGlzKTsKICAgICB9CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUyhTdGF0
dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJ
RCByZXN1bHQsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBzd2FwKGV4cGVjdGVk
QW5kUmVzdWx0LCBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgZnVuYygpOworICAgICAgICBzd2FwKGV4cGVjdGVkQW5kUmVzdWx0LCBYODZS
ZWdpc3RlcnM6OmVheCk7CisgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgcmVzdWx0
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgYXRvbWlj
U3Ryb25nQ0FTKFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIGNvbnN0IEZ1bmMmIGZ1bmMp
CisgICAgeworICAgICAgICBzd2FwKGV4cGVjdGVkQW5kUmVzdWx0LCBYODZSZWdpc3RlcnM6OmVh
eCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgZnVuYygpOworICAgICAg
ICBzd2FwKGV4cGVjdGVkQW5kUmVzdWx0LCBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NB
UyhTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgY29u
c3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4
NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBm
dW5jKCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4
KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25k
KSkpOworICAgIH0KIAogcHJpdmF0ZToKICAgICAvLyBPbmx5IE1hY3JvQXNzZW1ibGVyWDg2IHNo
b3VsZCBiZSB1c2luZyB0aGUgZm9sbG93aW5nIG1ldGhvZDsgU1NFMiBpcyBhbHdheXMgYXZhaWxh
YmxlIG9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDE0
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNjQsMTEgKzI2NCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZHFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwogICAgIH0KIAor
ICAgIHZvaWQgYWRkNjQoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkcV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgc3JjLmluZGV4
LCBzcmMuc2NhbGUsIGRlc3QpOworICAgIH0KKwogICAgIHZvaWQgYWRkNjQoUmVnaXN0ZXJJRCBz
cmMsIEFkZHJlc3MgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHFfcm0oc3Jj
LCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZDY0KFJlZ2lz
dGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZHFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxl
KTsKKyAgICB9CisKICAgICB2b2lkIGFkZDY0KEFic29sdXRlQWRkcmVzcyBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzcmMubV9wdHIpLCBz
Y3JhdGNoUmVnaXN0ZXIoKSk7CkBAIC0zMDYsNiArMzE2LDE0IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZHFfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgYWRkNjQoVHJ1c3RlZEltbTMyIGltbSwgQmFz
ZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gMSkKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmluY3FfbShhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkcV9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9p
ZCBhZGQ2NChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7
CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lz
dGVyKCkpOwpAQCAtMzQyLDExICszNjAsNDEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxl
ci5hbmRxX3JyKHNyYywgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBhbmQ2NChSZWdpc3RlcklE
IHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9ybShz
cmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoUmVn
aXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YW5kcV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2Nh
bGUpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfbXIoc3JjLm9mZnNldCwgc3JjLmJh
c2UsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoQmFzZUluZGV4IHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9tcihzcmMub2Zmc2V0
LCBzcmMuYmFzZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUsIGRlc3QpOworICAgIH0KKwogICAgIHZv
aWQgYW5kNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAg
ICAgICAgbV9hc3NlbWJsZXIuYW5kcV9pcihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CiAgICAgfQog
CisgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVz
dC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJ
bmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9pbShpbW0ubV92YWx1
ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAg
fQorCiAgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0
KQogICAgIHsKICAgICAgICAgaW50cHRyX3QgaW50VmFsdWUgPSBpbW0uYXNJbnRwdHIoKTsKQEAg
LTU1MiwxMSArNjAwLDUxIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubmVncV9yKGRl
c3QpOwogICAgIH0KIAorICAgIHZvaWQgbmVnNjQoQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubmVncV9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwor
ICAgIHZvaWQgbmVnNjQoQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5uZWdxX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7
CisgICAgfQorCiAgICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5vcnFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAK
KyAgICB2b2lkIG9yNjQoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm9ycV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAg
IH0KKworICAgIHZvaWQgb3I2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5vcnFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNl
LCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yNjQoQWRkcmVz
cyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9t
cihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KEJh
c2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm9ycV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUsIGRlc3Qp
OworICAgIH0KKworICAgIHZvaWQgb3I2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnFfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zm
c2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgb3I2NChUcnVzdGVkSW1tMzIgaW1t
LCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9pbShpbW0u
bV92YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7
CisgICAgfQorCiAgICAgdm9pZCBvcjY0KFRydXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgc3Jj
RGVzdCkKICAgICB7CiAgICAgICAgIGlmIChpbW0ubV92YWx1ZSA8PSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptYXgoKQpAQCAtNjE5LDE2ICs3MDcsMzEgQEAgcHVibGljOgogICAgICAg
ICBtX2Fzc2VtYmxlci5zdWJxX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VicV9pbShpbW0ubV92
YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBzdWI2NChBZGRyZXNzIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc3VicV9tcihzcmMub2Zmc2V0LCBz
cmMuYmFzZSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBzdWI2NChCYXNlSW5kZXggc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX21yKHNyYy5v
ZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAgfQorCiAg
ICAgdm9pZCBzdWI2NChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAg
ICAgbV9hc3NlbWJsZXIuc3VicV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwogICAg
IH0KIAorICAgIHZvaWQgc3ViNjQoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VicV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgeG9yNjQoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVy
LnhvcnFfcnIoc3JjLCBkZXN0KTsKQEAgLTY1MSw2ICs3NTQsMzEgQEAgcHVibGljOgogICAgICAg
ICBtX2Fzc2VtYmxlci54b3JxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAg
fQogCisgICAgdm9pZCB4b3I2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci54b3JxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCB4b3I2NChBZGRy
ZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9y
cV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCB4b3I2
NChCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci54b3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwg
ZGVzdCk7CisgICAgfQorCisgICAgdm9pZCB4b3I2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JxX2ltKGltbS5tX3ZhbHVlLCBk
ZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9y
cV9pbShpbW0ubV92YWx1ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVz
dC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCB4b3I2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdp
c3RlcklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci54b3JxX2lyKGltbS5t
X3ZhbHVlLCBzcmNEZXN0KTsKQEAgLTY2Niw2ICs3OTQsMTEgQEAgcHVibGljOgogICAgICAgICBt
X2Fzc2VtYmxlci5ub3RxX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisgICAg
dm9pZCBub3Q2NChCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5v
dHFfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAg
ICB9CisKICAgICB2b2lkIGxvYWQ2NChJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9tcihhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKQEAgLTcyNSw2ICs4NTgsMTEgQEAgcHVibGljOgogICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZxX2kzMm0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3RvcmU2NChUcnVzdGVkSW1tMzIgaW1t
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfaTMy
bShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRl
eCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCBzdG9yZTY0KFRydXN0ZWRJbW02
NCBpbW0sIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgaWYgKENBTl9T
SUdOX0VYVEVORF8zMl82NChpbW0ubV92YWx1ZSkpIHsKQEAgLTEyOTQsNyArMTQzMiwyNTUgQEAg
cHVibGljOgogICAgICAgICBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bW92ZShUcnVzdGVkSW1t
UHRyKGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoVGVzdDgoY29uZCwgQWRkcmVzcyhzY3JhdGNo
UmVnaXN0ZXIoKSksIG1hc2s4KTsKICAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdHJvbmdD
QVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwg
UmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkK
KyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwg
cmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hncV9ybShuZXdWYWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25n
Q0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQs
IFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3Vs
dCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3Vs
dCwgcmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hncV9ybShuZXdWYWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0p
OworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTNjQoUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2Vt
Ymxlci5jbXB4Y2hncV9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7
IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTNjQoUmVnaXN0ZXJJRCBleHBl
Y3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1f
YXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5i
YXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7CisgICAgfQogCisgICAgSnVt
cCBicmFuY2hBdG9taWNTdHJvbmdDQVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBl
Y3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFsdWUsIGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aEF0b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVj
dGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRB
bmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7
CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJv
bmdDQVM2NChjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MsIHJlc3Vs
dCk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNXZWFrQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJh
c2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21p
Y1N0cm9uZ0NBUzY0KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywg
cmVzdWx0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM2NChTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0
b21pY1N0cm9uZ0NBUzY0KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVz
cyk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FTNjQoU3RhdHVzQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFs
dWUsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21p
Y1N0cm9uZ0NBUzY0KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcyk7
CisgICAgfQorCisgICAgdm9pZCBhdG9taWNBZGQ2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFk
ZDY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkNjQoVHJ1
c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIGFkZDY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQWRkNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkNjQocmVnLCBhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ2NChSZWdpc3RlcklEIHJlZywg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIGFkZDY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWlj
U3ViNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI2NChpbW0sIGFkZHJlc3MpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI2
NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjY0KFJlZ2lz
dGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIHN1YjY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgYXRvbWljU3ViNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI2NChyZWcsIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAg
ICAgYW5kNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQ2
NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNBbmQ2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ2NChyZWcs
IGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDY0KFJlZ2lzdGVySUQg
cmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgYW5kNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNPcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I2NChpbW0sIGFkZHJlc3MpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yNjQoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9y
NjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjY0KFJlZ2lz
dGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIG9yNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNPcjY0KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I2NChyZWcsIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
eG9yNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3I2NChU
cnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgeG9yNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBhdG9taWNYb3I2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I2NChyZWcsIGFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjY0KFJlZ2lzdGVySUQgcmVn
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgeG9yNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNOZWc2NChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG5lZzY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y05lZzY0KEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBuZWc2NChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNOb3Q2NChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG5vdDY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y05vdDY0KEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBub3Q2NChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNYY2hnQWRkNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZHFfcm0ocmVn
LCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
dG9taWNYY2hnQWRkNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkcV9y
bShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJl
c3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGc2NChSZWdpc3RlcklE
IHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICBtX2Fzc2VtYmxlci54Y2hncV9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGc2NChSZWdpc3RlcklE
IHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgbG9hZEFjcTY0KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBsb2FkNjQoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkQWNx
NjQoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDY0
KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw2NChSZWdpc3RlcklE
IHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmU2NChzcmMsIGRlc3QpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsNjQoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRl
eCBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmU2NChzcmMsIGRlc3QpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHN0b3JlUmVsNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAg
IHsKKyAgICAgICAgc3RvcmU2NChpbW0sIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0
b3JlUmVsNjQoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAg
ICBzdG9yZTY0KGltbSwgZGVzdCk7CisgICAgfQorICAgIAogICAgIHZvaWQgdHJ1bmNhdGVEb3Vi
bGVUb1VpbnQzMihGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAg
ICAgICBtX2Fzc2VtYmxlci5jdnR0c2Qyc2lxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTAsMTYgKzE5MCwyMCBAQCBwcml2YXRlOgogICAg
ICAgICBPUF9BRERfRXZHdiAgICAgICAgICAgICAgICAgICAgID0gMHgwMSwKICAgICAgICAgT1Bf
QUREX0d2RXYgICAgICAgICAgICAgICAgICAgICA9IDB4MDMsCiAgICAgICAgIE9QX0FERF9FQVhJ
diAgICAgICAgICAgICAgICAgICAgPSAweDA1LAorICAgICAgICBPUF9PUl9FdkdiICAgICAgICAg
ICAgICAgICAgICAgID0gMHgwOCwKICAgICAgICAgT1BfT1JfRXZHdiAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDksCiAgICAgICAgIE9QX09SX0d2RXYgICAgICAgICAgICAgICAgICAgICAgPSAw
eDBCLAogICAgICAgICBPUF9PUl9FQVhJdiAgICAgICAgICAgICAgICAgICAgID0gMHgwRCwKICAg
ICAgICAgT1BfMkJZVEVfRVNDQVBFICAgICAgICAgICAgICAgICA9IDB4MEYsCisgICAgICAgIE9Q
X0FORF9FdkdiICAgICAgICAgICAgICAgICAgICAgPSAweDIwLAogICAgICAgICBPUF9BTkRfRXZH
diAgICAgICAgICAgICAgICAgICAgID0gMHgyMSwKICAgICAgICAgT1BfQU5EX0d2RXYgICAgICAg
ICAgICAgICAgICAgICA9IDB4MjMsCisgICAgICAgIE9QX1NVQl9FdkdiICAgICAgICAgICAgICAg
ICAgICAgPSAweDI4LAogICAgICAgICBPUF9TVUJfRXZHdiAgICAgICAgICAgICAgICAgICAgID0g
MHgyOSwKICAgICAgICAgT1BfU1VCX0d2RXYgICAgICAgICAgICAgICAgICAgICA9IDB4MkIsCiAg
ICAgICAgIE9QX1NVQl9FQVhJdiAgICAgICAgICAgICAgICAgICAgPSAweDJELAogICAgICAgICBQ
UkVfUFJFRElDVF9CUkFOQ0hfTk9UX1RBS0VOICAgID0gMHgyRSwKKyAgICAgICAgT1BfWE9SX0V2
R2IgICAgICAgICAgICAgICAgICAgICA9IDB4MzAsCiAgICAgICAgIE9QX1hPUl9Fdkd2ICAgICAg
ICAgICAgICAgICAgICAgPSAweDMxLAogICAgICAgICBPUF9YT1JfR3ZFdiAgICAgICAgICAgICAg
ICAgICAgID0gMHgzMywKICAgICAgICAgT1BfWE9SX0VBWEl2ICAgICAgICAgICAgICAgICAgICA9
IDB4MzUsCkBAIC0yMjMsNiArMjI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgT1BfR1JPVVAxX0V2
SWIgICAgICAgICAgICAgICAgICA9IDB4ODMsCiAgICAgICAgIE9QX1RFU1RfRWJHYiAgICAgICAg
ICAgICAgICAgICAgPSAweDg0LAogICAgICAgICBPUF9URVNUX0V2R3YgICAgICAgICAgICAgICAg
ICAgID0gMHg4NSwKKyAgICAgICAgT1BfWENIR19FdkdiICAgICAgICAgICAgICAgICAgICA9IDB4
ODYsCiAgICAgICAgIE9QX1hDSEdfRXZHdiAgICAgICAgICAgICAgICAgICAgPSAweDg3LAogICAg
ICAgICBPUF9NT1ZfRWJHYiAgICAgICAgICAgICAgICAgICAgID0gMHg4OCwKICAgICAgICAgT1Bf
TU9WX0V2R3YgICAgICAgICAgICAgICAgICAgICA9IDB4ODksCkBAIC0yNTIsNiArMjU3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgUFJFX1NTRV9GMiAgICAgICAgICAgICAgICAgICAgICA9IDB4RjIs
CiAgICAgICAgIFBSRV9TU0VfRjMgICAgICAgICAgICAgICAgICAgICAgPSAweEYzLAogICAgICAg
ICBPUF9ITFQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhGNCwKKyAgICAgICAgT1BfR1JP
VVAzX0ViICAgICAgICAgICAgICAgICAgICA9IDB4RjYsCiAgICAgICAgIE9QX0dST1VQM19FYkli
ICAgICAgICAgICAgICAgICAgPSAweEY2LAogICAgICAgICBPUF9HUk9VUDNfRXYgICAgICAgICAg
ICAgICAgICAgID0gMHhGNywKICAgICAgICAgT1BfR1JPVVAzX0V2SXogICAgICAgICAgICAgICAg
ICA9IDB4RjcsIC8vIE9QX0dST1VQM19FdiBoYXMgYW4gaW1tZWRpYXRlLCB3aGVuIGluc3RydWN0
aW9uIGlzIGEgdGVzdC4gCkBAIC0yOTAsNiArMjk2LDggQEAgcHJpdmF0ZToKICAgICAgICAgT1Bf
U0VUQ0MgICAgICAgICAgICA9IDB4OTAsCiAgICAgICAgIE9QMl8zQllURV9FU0NBUEVfQUUgPSAw
eEFFLAogICAgICAgICBPUDJfSU1VTF9HdkV2ICAgICAgID0gMHhBRiwKKyAgICAgICAgT1AyX0NN
UFhDSEdiICAgICAgICA9IDB4QjAsCisgICAgICAgIE9QMl9DTVBYQ0hHICAgICAgICAgPSAweEIx
LAogICAgICAgICBPUDJfTU9WWlhfR3ZFYiAgICAgID0gMHhCNiwKICAgICAgICAgT1AyX0JTRiAg
ICAgICAgICAgICA9IDB4QkMsCiAgICAgICAgIE9QMl9UWkNOVCAgICAgICAgICAgPSAweEJDLApA
QCAtMjk4LDYgKzMwNiw4IEBAIHByaXZhdGU6CiAgICAgICAgIE9QMl9NT1ZTWF9HdkViICAgICAg
PSAweEJFLAogICAgICAgICBPUDJfTU9WWlhfR3ZFdyAgICAgID0gMHhCNywKICAgICAgICAgT1Ay
X01PVlNYX0d2RXcgICAgICA9IDB4QkYsCisgICAgICAgIE9QMl9YQUREYiAgICAgICAgICAgPSAw
eEMwLAorICAgICAgICBPUDJfWEFERCAgICAgICAgICAgID0gMHhDMSwKICAgICAgICAgT1AyX1BF
WFRSV19HZFVkSWIgICA9IDB4QzUsCiAgICAgICAgIE9QMl9QU0xMUV9VZHFJYiAgICAgPSAweDcz
LAogICAgICAgICBPUDJfUFNSTFFfVWRxSWIgICAgID0gMHg3MywKQEAgLTQ0MCw2ICs0NTAsMTEg
QEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQUREX0d2RXYsIGRz
dCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAgICAgCisgICAgdm9pZCBhZGRsX21yKGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BRERfR3ZF
diwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAogI2lmICFD
UFUoWDg2XzY0KQogICAgIHZvaWQgYWRkbF9tcihjb25zdCB2b2lkKiBhZGRyLCBSZWdpc3RlcklE
IGRzdCkKICAgICB7CkBAIC01NjIsMTEgKzU3NywyMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9y
bWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0FERF9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CiAgICAg
fQogCisgICAgdm9pZCBhZGRxX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0
ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0FERF9HdkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2Fs
ZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIGFkZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcDY0KE9QX0FERF9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAg
dm9pZCBhZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Us
IFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0FERF9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0
KTsKKyAgICB9CisKICAgICB2b2lkIGFkZHFfaXIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAg
ICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgewpAQCAtNTkxLDYg
KzYxNiwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihp
bW0pOwogICAgICAgICB9CiAgICAgfQorCisgICAgdm9pZCBhZGRxX2ltKGludCBpbW0sIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAg
IHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQURELCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1l
ZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX0FERCwgYmFzZSwgaW5kZXgsIHNj
YWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsK
KyAgICAgICAgfQorICAgIH0KICNlbHNlCiAgICAgdm9pZCBhZGRsX2ltKGludCBpbW0sIGNvbnN0
IHZvaWQqIGFkZHIpCiAgICAgewpAQCAtNjE0LDExICs2NTAsNDMgQEAgcHVibGljOgogICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0d2RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsK
ICAgICB9CiAKKyAgICB2b2lkIGFuZGxfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBS
ZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9HdkV2LCBkc3QsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIGFuZGxfcm0oUmVnaXN0ZXJJRCBzcmMs
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcChPUF9BTkRfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAg
IHZvaWQgYW5kbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKworICAgIHZvaWQgYW5kd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9P
UEVSQU5EX1NJWkUpOworICAgICAgICBhbmRsX3JtKHNyYywgb2Zmc2V0LCBiYXNlKTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBhbmRsX3JtKHNyYywg
b2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgYW5kYl9ybShS
ZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9FdkdiLCBzcmMsIGJhc2UsIG9mZnNldCk7
CisgICAgfQorCisgICAgdm9pZCBhbmRiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfRXZHYiwgc3JjLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBhbmRsX2lyKGludCBpbW0sIFJlZ2lz
dGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkp
IHsKQEAgLTY0MSw2ICs3MDksNDEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAg
dm9pZCBhbmRsX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0
ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVO
RF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9V
UDFfRXZJYiwgR1JPVVAxX09QX0FORCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFf
T1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBhbmR3
X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgYW5kbF9pbShp
bW0sIG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBhbmR3X2ltKGludCBpbW0sIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAg
ICAgICBhbmRsX2ltKGltbSwgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKwor
ICAgIHZvaWQgYW5kYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQ
MV9PUF9BTkQsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgo
aW1tKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZGJfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVn
aXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQMV9PUF9BTkQsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRl
OChpbW0pOworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBhbmRxX3JyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC02NTcsNiArNzYwLDQ4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CiAgICAgICAg
IH0KICAgICB9CisKKyAgICB2b2lkIGFuZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0
KE9QX0FORF9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBhbmRx
X21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNj
YWxlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cDY0KE9QX0FORF9HdkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0FORF9F
dkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBhbmRxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0FO
RF9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIGFuZHFfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsK
KyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQU5ELCBiYXNl
LCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JP
VVAxX0V2SXosIEdST1VQMV9PUF9BTkQsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zv
cm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBh
bmRxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBp
bmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMy
KGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9F
dkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAg
ICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09Q
X0FORCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0
ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KICNlbHNlCiAgICAgdm9pZCBh
bmRsX2ltKGludCBpbW0sIGNvbnN0IHZvaWQqIGFkZHIpCiAgICAgewpAQCAtNzAzLDYgKzg0OCwx
MSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9H
Uk9VUDVfRXYsIEdST1VQMV9PUF9BREQsIGJhc2UsIG9mZnNldCk7CiAgICAgfQorCisgICAgdm9p
ZCBpbmNxX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBp
bnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9V
UDVfRXYsIEdST1VQMV9PUF9BREQsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CiAjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKIAogICAgIHZvaWQgbmVnbF9yKFJlZ2lzdGVySUQgZHN0
KQpAQCAtNzE1LDYgKzg2NSwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9ORUcsIGRzdCk7CiAgICAgfQor
CisgICAgdm9pZCBuZWdxX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1BfTkVH
LCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgbmVncV9tKGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1BfTkVHLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIG5l
Z2xfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCkBAIC03MjIsNiArODgyLDMzIEBAIHB1
YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQM19FdiwgR1JPVVAz
X09QX05FRywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIG5lZ2xfbShpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7
CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9O
RUcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG5lZ3df
bShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG5lZ2xfbShvZmZzZXQsIGJhc2Up
OworICAgIH0KKworICAgIHZvaWQgbmVnd19tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
cHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBuZWdsX20ob2Zmc2V0LCBiYXNlLCBp
bmRleCwgc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgbmVnYl9tKGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9V
UDNfRWIsIEdST1VQM19PUF9ORUcsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBu
ZWdiX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0Vi
LCBHUk9VUDNfT1BfTkVHLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAg
ICAgdm9pZCBub3RsX3IoUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1BfTk9ULCBkc3QpOwpAQCAtNzMyLDYg
KzkxOSwzMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9V
UDNfRXYsIEdST1VQM19PUF9OT1QsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBu
b3RsX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0V2
LCBHUk9VUDNfT1BfTk9ULCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisg
ICAgdm9pZCBub3R3X20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBub3RsX20o
b2Zmc2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG5vdHdfbShpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbm90bF9tKG9m
ZnNldCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIG5vdGJfbShpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfR1JPVVAzX0ViLCBHUk9VUDNfT1BfTk9ULCBiYXNlLCBvZmZzZXQpOworICAgIH0K
KworICAgIHZvaWQgbm90Yl9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0dST1VQM19FYiwgR1JPVVAzX09QX05PVCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBub3RxX3IoUmVnaXN0ZXJJRCBk
c3QpCiAgICAgewpAQCAtNzQyLDYgKzk1NiwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1QsIGJhc2Us
IG9mZnNldCk7CiAgICAgfQorCisgICAgdm9pZCBub3RxX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1QsIGJhc2UsIGlu
ZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYKIAogICAgIHZvaWQgb3JsX3JyKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKQEAgLTc1NCwxMSArOTczLDQzIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0d2RXYsIGRzdCwgYmFzZSwg
b2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIG9ybF9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfR3ZFdiwgZHN0LCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBvcmxfcm0oUmVnaXN0ZXJJ
RCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9y
bWF0dGVyLm9uZUJ5dGVPcChPUF9PUl9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQog
CisgICAgdm9pZCBvcmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZz
ZXQpOworICAgIH0KKworICAgIHZvaWQgb3J3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJF
X09QRVJBTkRfU0laRSk7CisgICAgICAgIG9ybF9ybShzcmMsIG9mZnNldCwgYmFzZSk7CisgICAg
fQorCisgICAgdm9pZCBvcndfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBvcmxfcm0oc3JjLCBv
ZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcmJfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9PUl9FdkdiLCBzcmMsIGJhc2UsIG9mZnNldCk7Cisg
ICAgfQorCisgICAgdm9pZCBvcmJfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R2IsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgb3JsX2lyKGludCBpbW0sIFJlZ2lzdGVySUQg
ZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKQEAg
LTc4NCwxMiArMTAzNSw4OSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lk
IG9ybF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQg
aW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8z
MihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2
SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAg
ICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfT1Is
IGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG9yd19pbShpbnQg
aW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1h
dHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG9ybF9pbShpbW0sIG9mZnNl
dCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcndfaW0oaW50IGltbSwgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG9ybF9p
bShpbW0sIG9mZnNldCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIG9y
Yl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQMV9PUF9PUiwgYmFz
ZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0K
KworICAgIHZvaWQgb3JiX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQMV9FYkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBzY2Fs
ZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0K
KwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBvcnFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfT1Jf
RXZHdiwgc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgb3JxX21yKGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3A2NChPUF9PUl9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisg
ICAgdm9pZCBvcnFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGlu
ZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wNjQoT1BfT1JfR3ZFdiwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNl
dCk7CisgICAgfQorCisgICAgdm9pZCBvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0
KE9QX09SX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG9ycV9y
bShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklE
IGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9PUl9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisK
KyAgICB2b2lkIG9ycV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9PUiwg
YmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9Q
X0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9p
ZCBvcnFfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklE
IGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhf
MzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAx
X0V2SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9P
UF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0
ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgb3JxX2ly
KGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VY
VEVORF84XzMyKGltbSkpIHsKQEAgLTgzMSwxMSArMTE1OSw0MyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfR3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwog
ICAgIH0KIAorICAgIHZvaWQgc3VibF9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNj
YWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgc3VibF9ybShSZWdpc3RlcklEIHNyYywg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX1NVQl9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAg
dm9pZCBzdWJsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Us
IFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7
CisgICAgfQorCisgICAgdm9pZCBzdWJ3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09Q
RVJBTkRfU0laRSk7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHdiwg
c3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgc3Vid19ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0la
RSk7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHdiwgc3JjLCBiYXNl
LCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBzdWJiX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0V2R2IsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICB2b2lkIHN1YmJfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9FdkdiLCBzcmMsIGJhc2UsIGluZGV4LCBzY2Fs
ZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIHN1YmxfaXIoaW50IGltbSwgUmVnaXN0ZXJJ
RCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgewpA
QCAtODYxLDYgKzEyMjEsNDEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9p
ZCBzdWJsX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84
XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFf
RXZJYiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1Bf
U1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWJ3X2lt
KGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1f
Zm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgc3VibF9pbShpbW0s
IG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBzdWJ3X2ltKGludCBpbW0sIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAg
ICBzdWJsX2ltKGltbSwgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAg
IHZvaWQgc3ViYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQMV9P
UF9TVUIsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1t
KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YmJfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0
ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQMV9PUF9TVUIsIGJhc2Us
IGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChp
bW0pOworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBzdWJxX3JyKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC04NzIsMTEgKzEyNjcsMjEgQEAgcHVi
bGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9TVUJfR3ZFdiwgZHN0LCBi
YXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgc3VicV9tcihpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9TVUJfR3ZFdiwgZHN0
LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBzdWJxX3Jt
KFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBvZmZz
ZXQpOwogICAgIH0KIAorICAgIHZvaWQgc3VicV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBzdWJxX2lyKGludCBpbW0s
IFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMy
KGltbSkpIHsKQEAgLTkwMSw2ICsxMzA2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9y
bWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICB2b2lkIHN1
YnFfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGlu
ZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIo
aW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2
SWIsIEdST1VQMV9PUF9TVUIsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1Bf
U1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQogI2Vsc2UKICAgICB2b2lkIHN1
YmxfaW0oaW50IGltbSwgY29uc3Qgdm9pZCogYWRkcikKICAgICB7CkBAIC05MjQsMTEgKzEzNDAs
MjEgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWE9SX0d2RXYs
IGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHhvcmxfbXIoaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hPUl9HdkV2
LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIHhv
cmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7
CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YT1JfRXZHdiwgc3JjLCBiYXNlLCBv
ZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgeG9ybF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwg
aW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgeG9ybF9pbShpbnQgaW1t
LCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJ
R05fRVhURU5EXzhfMzIoaW1tKSkgewpAQCAtOTQwLDYgKzEzNjYsNjMgQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgfQogCisgICAgdm9pZCB4b3JsX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAg
ICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0p
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9Q
X0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7
CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdm9pZCB4b3J3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJB
TkRfU0laRSk7CisgICAgICAgIHhvcmxfcm0oc3JjLCBvZmZzZXQsIGJhc2UpOworICAgIH0KKwor
ICAgIHZvaWQgeG9yd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1h
dHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIHhvcmxfcm0oc3JjLCBvZmZz
ZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9pZCB4b3J3X2ltKGludCBp
bW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgeG9ybF9pbShpbW0sIG9mZnNl
dCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCB4b3J3X2ltKGludCBpbW0sIGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICB4b3Js
X2ltKGltbSwgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAgIHZvaWQg
eG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hPUl9FdkdiLCBzcmMsIGJhc2Us
IG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCB4b3JiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YT1JfRXZHYiwgc3JjLCBiYXNl
LCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCB4b3JiX2ltKGludCBp
bW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgb2Zmc2V0
KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKworICAgIHZv
aWQgeG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVy
SUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cChPUF9HUk9VUDFfRWJJYiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZz
ZXQpOworICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCiAgICAg
dm9pZCB4b3JsX2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYg
KENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTk3NCwxMSArMTQ1Nyw0NyBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9pZCB4b3JxX2ltKGludCBpbW0sIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9F
WFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChP
UF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfWE9S
LCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1t
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHhvcnFfaW0oaW50IGltbSwgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9YT1Is
IGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0p
OworICAgICAgICB9CisgICAgfQorICAgIAogICAgIHZvaWQgeG9ycV9ybShSZWdpc3RlcklEIHNy
YywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wNjQoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAK
KyAgICB2b2lkIHhvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wNjQoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgeG9ycV9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcDY0KE9QX1hPUl9HdkV2LCBkZXN0LCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZv
aWQgeG9ycV9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfWE9SX0d2RXYsIGRlc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0
KTsKKyAgICB9CiAjZW5kaWYKIAogICAgIHZvaWQgbHpjbnRfcnIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZHN0KQpAQCAtMTU4NiwxMSArMjEwNSwzOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGRzdCk7CiAgICAgfQog
CisgICAgdm9pZCB4Y2hnYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdfRXZH
Yiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgeGNoZ2Jfcm0oUmVnaXN0
ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdf
RXZHYiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9p
ZCB4Y2hnd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNl
dCk7CisgICAgfQorCisgICAgdm9pZCB4Y2hnd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgeGNoZ2xfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2
b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Us
IFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCB4Y2hncV9ycihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewpAQCAtMTYwNiw2ICsyMTUyLDExIEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwg
c3JjLCBiYXNlLCBvZmZzZXQpOwogICAgIH0KKworICAgIHZvaWQgeGNoZ3Ffcm0oUmVnaXN0ZXJJ
RCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50
IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfWENIR19F
dkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYKIAog
ICAgIHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCkBAIC0xNzMx
LDYgKzIyODIsMTggQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A4KE9Q
X01PVl9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAg
ICB2b2lkIG1vdndfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAg
ICBtb3ZsX2kzMm0oaW1tLCBvZmZzZXQsIGJhc2UpOworICAgIH0KKworICAgIHZvaWQgbW92d19p
bShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFO
RF9TSVpFKTsKKyAgICAgICAgbW92bF9pMzJtKGltbSwgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2Nh
bGUpOworICAgIH0KKwogICAgIHZvaWQgbW92bF9FQVhtKGNvbnN0IHZvaWQqIGFkZHIpCiAgICAg
ewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfTU9WX092RUFYKTsKQEAgLTE4MDAs
NiArMjM2MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGlt
bSk7CiAgICAgfQogCisgICAgdm9pZCBtb3ZxX2kzMm0oaW50IGltbSwgaW50IG9mZnNldCwgUmVn
aXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDExX0V2SXosIEdST1VQMTFfTU9WLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZTMyKGltbSk7CisgICAgfQorCiAgICAgdm9pZCBtb3ZxX2k2NHIoaW50NjRfdCBpbW0sIFJlZ2lz
dGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfTU9W
X0VBWEl2LCBkc3QpOwpAQCAtMjc3NSw2ICszMzQ0LDkwIEBAIHB1YmxpYzoKICAgICAgICAgbV9m
b3JtYXR0ZXIucHJlZml4KFBSRV9MT0NLKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjbXB4Y2hn
Yl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfQ01QWENIR2IsIHNyYywgYmFzZSwg
b2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnYl9ybShSZWdpc3RlcklEIHNy
YywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KE9QMl9DTVBYQ0hHYiwg
c3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y21weGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9DTVBYQ0hHLCBzcmMsIGJhc2UsIG9mZnNl
dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY21weGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAg
ICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdsX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFzZSwgaW5k
ZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdxX3JtKFJl
Z2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAg
ICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfQ01QWENIRywgc3JjLCBiYXNlLCBvZmZzZXQp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9DTVBYQ0hHLCBzcmMsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkYl9y
bShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfWEFERGIsIHNyYywgYmFzZSwgb2Zmc2V0
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KE9QMl9YQUREYiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZHdfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0
ZXIudHdvQnl0ZU9wKE9QMl9YQURELCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgeGFkZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci50d29C
eXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHhhZGRsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX1hB
REQsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkbF9ybShS
ZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGlu
ZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1Ay
X1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHhhZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfWEFERCwgc3Jj
LCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRxX3JtKFJlZ2lzdGVy
SUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGlu
dCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9YQURE
LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCiAgICAgdm9p
ZCBtZmVuY2UoKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIudGhyZWVCeXRlT3AoT1AyXzNC
WVRFX0VTQ0FQRV9BRSwgT1AzX01GRU5DRSk7CkBAIC0zNzUxLDYgKzQ0MDQsMjQgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHdyaXRlci5yZWdpc3Rlck1vZFJNKGdyb3VwT3AsIHJtKTsKICAgICAg
ICAgfQogCisgICAgICAgIHZvaWQgdHdvQnl0ZU9wOChUd29CeXRlT3Bjb2RlSUQgb3Bjb2RlLCBp
bnQgcmVnLCBSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFNpbmdsZUluc3RydWN0aW9uQnVmZmVyV3JpdGVyIHdyaXRlcihtX2J1ZmZlcik7CisgICAg
ICAgICAgICB3cml0ZXIuZW1pdFJleElmKGJ5dGVSZWdSZXF1aXJlc1JleChyZWcsIGJhc2UpLCBy
ZWcsIDAsIGJhc2UpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5dGVVbmNoZWNrZWQoT1BfMkJZ
VEVfRVNDQVBFKTsKKyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRlVW5jaGVja2VkKG9wY29kZSk7
CisgICAgICAgICAgICB3cml0ZXIubWVtb3J5TW9kUk0ocmVnLCBiYXNlLCBvZmZzZXQpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCB0d29CeXRlT3A4KFR3b0J5dGVPcGNvZGVJRCBvcGNvZGUs
IGludCByZWcsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBp
bnQgb2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBTaW5nbGVJbnN0cnVjdGlvbkJ1ZmZl
cldyaXRlciB3cml0ZXIobV9idWZmZXIpOworICAgICAgICAgICAgd3JpdGVyLmVtaXRSZXhJZihi
eXRlUmVnUmVxdWlyZXNSZXgocmVnKSB8fCByZWdSZXF1aXJlc1JleChpbmRleCwgYmFzZSksIHJl
ZywgaW5kZXgsIGJhc2UpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5dGVVbmNoZWNrZWQoT1Bf
MkJZVEVfRVNDQVBFKTsKKyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRlVW5jaGVja2VkKG9wY29k
ZSk7CisgICAgICAgICAgICB3cml0ZXIubWVtb3J5TW9kUk0ocmVnLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBJbW1lZGlhdGVzOgogICAgICAg
ICAvLwogICAgICAgICAvLyBBbiBpbW1lZGFpdGUgc2hvdWxkIGJlIGFwcGVuZGVkIHdoZXJlIGFw
cHJvcHJpYXRlIGFmdGVyIGFuIG9wIGhhcyBiZWVuIGVtaXR0ZWQuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQXRvbWljVmFsdWUuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBdG9t
aWNWYWx1ZTo6fkF0b21pY1ZhbHVlKCkKK3sKK30KKworV2lkdGggQXRvbWljVmFsdWU6OmFjY2Vz
c1dpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93aWR0aDsKK30KKwordm9pZCBBdG9taWNW
YWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoY29tbWEsICJ3aWR0aCA9ICIsIG1fd2lkdGgpOworICAgIAor
ICAgIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShjb21tYSwgb3V0KTsKK30KKworVmFsdWUqIEF0b21p
Y1ZhbHVlOjpjbG9uZUltcGwoKSBjb25zdAoreworICAgIHJldHVybiBuZXcgQXRvbWljVmFsdWUo
KnRoaXMpOworfQorCitBdG9taWNWYWx1ZTo6QXRvbWljVmFsdWUoS2luZCBraW5kLCBPcmlnaW4g
b3JpZ2luLCBXaWR0aCB3aWR0aCwgVmFsdWUqIG9wZXJhbmQsIFZhbHVlKiBwb2ludGVyLCBpbnQz
Ml90IG9mZnNldCA9IDApCisgICAgOiBNZW1vcnlWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCBv
cGVyYW5kLT50eXBlKCksIG9yaWdpbiwgb2Zmc2V0LCBvcGVyYW5kLCBwb2ludGVyKQorICAgICwg
bV93aWR0aCh3aWR0aCkKK3sKKyAgICBzZXRGZW5jZVJhbmdlKEhlYXBSYW5nZTo6dG9wKCkpOwor
ICAgIAorICAgIEFTU0VSVChiZXN0VHlwZShvcGVyYXRpb25XaWR0aCgpKSA9PSBvcGVyYXRpb25U
eXBlKCkpOworICAgIAorICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAgIGNhc2UgQXRv
bWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hn
T3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAg
ICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworQXRvbWljVmFsdWU6OkF0b21pY1Zh
bHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgV2lkdGggd2lkdGgsIFZhbHVlKiBleHBlY3Rl
ZFZhbHVlLCBWYWx1ZSogbmV3VmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9
IDApCisgICAgOiBNZW1vcnlWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCBraW5kLm9wY29kZSgp
ID09IEF0b21pY1dlYWtDQVMgPyBJbnQzMiA6IGV4cGVjdGVkVmFsdWUtPnR5cGUoKSwgb3JpZ2lu
LCBvZmZzZXQsIGV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlLCBwb2ludGVyKQorICAgICwgbV93aWR0
aCh3aWR0aCkKK3sKKyAgICBzZXRGZW5jZVJhbmdlKEhlYXBSYW5nZTo6dG9wKCkpOworICAgIAor
ICAgIEFTU0VSVChiZXN0VHlwZShvcGVyYXRpb25XaWR0aCgpKSA9PSBvcGVyYXRpb25UeXBlKCkp
OworCisgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7CisgICAgY2FzZSBBdG9taWNXZWFrQ0FT
OgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzTWVtb3J5
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1dpZHRoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBBdG9taWNWYWx1ZSA6IHB1YmxpYyBN
ZW1vcnlWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhLaW5kIGtpbmQp
CisgICAgeworICAgICAgICByZXR1cm4gaXNBdG9taWMoa2luZC5vcGNvZGUoKSk7CisgICAgfQor
ICAgIAorICAgIH5BdG9taWNWYWx1ZSgpOworICAgIAorICAgIFR5cGUgb3BlcmF0aW9uVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIGNoaWxkKDApLT50eXBlKCk7IH0KKyAgICAKKyAgICBXaWR0aCBvcGVy
YXRpb25XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICAKKyAgICAvLyBTeW5v
bnltIGZvciBvcGVyYXRpb25XaWR0aCgpLCBpZiB5b3UncmUgYWNjZXNzaW5nIHZpYSBNZW1vcnlW
YWx1ZS4KKyAgICBXaWR0aCBhY2Nlc3NXaWR0aCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJv
dGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBWYWx1ZSogY2xvbmVJbXBsKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisg
ICAgQXRvbWljVmFsdWUoS2luZCwgT3JpZ2luLCBXaWR0aCwgVmFsdWUqIG9wZXJhbmQsIFZhbHVl
KiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAgIAorICAgIEF0b21pY1ZhbHVlKEtp
bmQsIE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBleHBlY3RlZFZhbHVlLCBWYWx1ZSogbmV3VmFsdWUs
IFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAgIAorICAgIFdpZHRoIG1f
d2lkdGg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDcgQEAgY2xhc3MgQmxvY2tJbnNlcnRp
b25TZXQ7CiBjbGFzcyBJbnNlcnRpb25TZXQ7CiBjbGFzcyBQcm9jZWR1cmU7CiBjbGFzcyBWYWx1
ZTsKK3RlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ7CiAK
IGNsYXNzIEJhc2ljQmxvY2sgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2sp
OwpAQCAtMTU4LDYgKzE1OSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5z
ZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4gZnJpZW5kIGNsYXNzIEdlbmVy
aWNCbG9ja0luc2VydGlvblNldDsKICAgICAKICAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2Vk
dXJlLgogICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0
LmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxv
Y2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDM1ICszNiwxMyBAQAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIEJsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2Vy
dGlvblNldChQcm9jZWR1cmUgJnByb2MpCi0gICAgOiBtX3Byb2MocHJvYykKKyAgICA6IEdlbmVy
aWNCbG9ja0luc2VydGlvblNldChwcm9jLm1fYmxvY2tzKQorICAgICwgbV9wcm9jKHByb2MpCiB7
CiB9CiAKIEJsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQoKSB7IH0KIAotdm9p
ZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYgaW5zZXJ0aW9uKQot
ewotICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoV1RGTW92ZShpbnNlcnRpb24pKTsKLX0KLQotQmFz
aWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91Ymxl
IGZyZXF1ZW5jeSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3
IEJhc2ljQmxvY2soVUlOVF9NQVgsIGZyZXF1ZW5jeSkpOwotICAgIEJhc2ljQmxvY2sqIHJlc3Vs
dCA9IGJsb2NrLmdldCgpOwotICAgIGluc2VydChCbG9ja0luc2VydGlvbihpbmRleCwgV1RGTW92
ZShibG9jaykpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1CYXNpY0Jsb2NrKiBCbG9ja0lu
c2VydGlvblNldDo6aW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1
ZW5jeSkKLXsKLSAgICByZXR1cm4gaW5zZXJ0KGJlZm9yZS0+aW5kZXgoKSwgZnJlcXVlbmN5ID09
IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGJlZm9yZS0+ZnJlcXVlbmN5KCkpOwotfQotCi1CYXNp
Y0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIs
IGRvdWJsZSBmcmVxdWVuY3kpCi17Ci0gICAgcmV0dXJuIGluc2VydChhZnRlci0+aW5kZXgoKSAr
IDEsIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBhZnRlci0+ZnJlcXVlbmN5
KCkpOwotfQotCiBCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6c3BsaXRGb3J3YXJkKAog
ICAgIEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwgSW5zZXJ0aW9uU2V0
KiBpbnNlcnRpb25TZXQsIGRvdWJsZSBmcmVxdWVuY3kpCiB7CkBAIC0xMDIsMzIgKzgwLDYgQEAg
QmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6OnNwbGl0Rm9ydwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLWJvb2wgQmxvY2tJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoKQotewotICAgIGlmICht
X2luc2VydGlvbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
Ly8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNv
LCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBiZWZvcmUKLSAgICAvLyBydW5uaW5nIFdURjo6ZXhlY3V0
ZUluc2VydGlvbnMuIFdlIHN0cm9uZ2x5IHByZWZlciBhIHN0YWJsZSBzb3J0IGFuZCB3ZSB3YW50
IGl0IHRvIGJlCi0gICAgLy8gZmFzdCwgc28gd2UgdXNlIGJ1YmJsZSBzb3J0LgotICAgIGJ1YmJs
ZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7Ci0KLSAgICBl
eGVjdXRlSW5zZXJ0aW9ucyhtX3Byb2MubV9ibG9ja3MsIG1faW5zZXJ0aW9ucyk7Ci0gICAgCi0g
ICAgLy8gUHJ1bmUgb3V0IGVtcHR5IGVudHJpZXMuIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNz
YXJ5IGJ1dCBpdCdzCi0gICAgLy8gaGVhbHRoeSB0byBrZWVwIHRoZSBibG9jayBsaXN0IGZyb20g
Z3Jvd2luZy4KLSAgICBtX3Byb2MubV9ibG9ja3MucmVtb3ZlQWxsTWF0Y2hpbmcoCi0gICAgICAg
IFsmXSAoc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+JiBibG9ja1B0cikgLT4gYm9vbCB7Ci0g
ICAgICAgICAgICByZXR1cm4gIWJsb2NrUHRyOwotICAgICAgICB9KTsKLSAgICAKLSAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMuCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvYy5tX2Jsb2Nrcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgbV9wcm9jLm1fYmxvY2tzW2ldLT5tX2luZGV4ID0gaTsKLSAgICAKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlv
blNldC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
bG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0
LmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzUsMjYgKzM2LDEzIEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBJbnNlcnRpb25TZXQ7CiAKLXR5cGVkZWYgV1RG
OjpJbnNlcnRpb248c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBCbG9ja0luc2VydGlvbjsK
K3R5cGVkZWYgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+OjpCbG9ja0luc2Vy
dGlvbiBCbG9ja0luc2VydGlvbjsKIAotY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgeworY2xhc3Mg
QmxvY2tJbnNlcnRpb25TZXQgOiBwdWJsaWMgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2lj
QmxvY2s+IHsKIHB1YmxpYzoKICAgICBCbG9ja0luc2VydGlvblNldChQcm9jZWR1cmUmKTsKICAg
ICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKICAgICAKLSAgICB2b2lkIGluc2VydChCbG9ja0luc2Vy
dGlvbiYmKTsKLQotICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBhIGdpdmVuIGluZGV4Lgot
ICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSA9
IFBOYU4pOwotCi0gICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBiZWZvcmUgdGhlIGdpdmVuIGJs
b2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNzIHRoZSBmcmVxdWVuY3kKLSAgICAvLyBhcmd1
bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0byBqdXN0IHVzZSB0aGUgZnJlcXVlbmN5IG9m
IHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCi0gICAgLy8gdXN1YWxseSB3aGF0IHlvdSB3YW50
LgotICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUsIGRvdWJs
ZSBmcmVxdWVuY3kgPSBQTmFOKTsKLQotICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYWZ0ZXIg
dGhlIGdpdmVuIGJsb2NrLgotICAgIEJhc2ljQmxvY2sqIGluc2VydEFmdGVyKEJhc2ljQmxvY2sq
IGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7Ci0KICAgICAvLyBBIGhlbHBlciB0byBz
cGxpdCBhIGJsb2NrIHdoZW4gZm9yd2FyZCBpdGVyYXRpbmcgb3ZlciBpdC4gSXQgY3JlYXRlcyBh
IG5ldyBibG9jayB0byBob2xkCiAgICAgLy8gZXZlcnl0aGluZyBiZWZvcmUgdGhlIGluc3RydWN0
aW9uIGF0IHZhbHVlSW5kZXguIFRoZSBjdXJyZW50IGJsb2NrIGlzIGxlZnQgd2l0aAogICAgIC8v
IGV2ZXJ5dGhpbmcgYXQgYW5kIGFmdGVyIHZhbHVlSW5kZXguIElmIHRoZSBvcHRpb25hbCBJbnNl
cnRpb25TZXQgaXMgcHJvdmlkZWQsIGl0IHdpbGwgZ2V0CkBAIC04MCwxMiArNjgsOSBAQCBwdWJs
aWM6CiAgICAgQmFzaWNCbG9jayogc3BsaXRGb3J3YXJkKAogICAgICAgICBCYXNpY0Jsb2NrKiwg
dW5zaWduZWQmIHZhbHVlSW5kZXgsIEluc2VydGlvblNldCogPSBudWxscHRyLAogICAgICAgICBk
b3VibGUgZnJlcXVlbmN5ID0gUE5hTik7Ci0gICAgCi0gICAgYm9vbCBleGVjdXRlKCk7CiAKIHBy
aXZhdGU6CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7Ci0gICAgVmVjdG9yPEJsb2NrSW5zZXJ0aW9u
LCA4PiBtX2luc2VydGlvbnM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODIsNyArODIsOCBAQCBib29sIEVmZmVjdHM6OmludGVyZmVyZXMoY29uc3QgRWZmZWN0cyYg
CiAgICAgICAgIHx8IGludGVyZmVyZXNXaXRoV3JpdGVzUGlubmVkKG90aGVyLCAqdGhpcykKICAg
ICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKICAgICAgICAgfHwgd3JpdGVz
Lm92ZXJsYXBzKG90aGVyLnJlYWRzKQotICAgICAgICB8fCByZWFkcy5vdmVybGFwcyhvdGhlci53
cml0ZXMpOworICAgICAgICB8fCByZWFkcy5vdmVybGFwcyhvdGhlci53cml0ZXMpCisgICAgICAg
IHx8IChmZW5jZSAmJiBvdGhlci5mZW5jZSk7CiB9CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3I9
PShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAgLTk1LDcgKzk2LDggQEAgYm9vbCBFZmZl
Y3RzOjpvcGVyYXRvcj09KGNvbnN0IEVmZmVjdHMmIAogICAgICAgICAmJiB3cml0ZXNQaW5uZWQg
PT0gb3RoZXIud3JpdGVzUGlubmVkCiAgICAgICAgICYmIHJlYWRzUGlubmVkID09IG90aGVyLnJl
YWRzUGlubmVkCiAgICAgICAgICYmIHdyaXRlcyA9PSBvdGhlci53cml0ZXMKLSAgICAgICAgJiYg
cmVhZHMgPT0gb3RoZXIucmVhZHM7CisgICAgICAgICYmIHJlYWRzID09IG90aGVyLnJlYWRzCisg
ICAgICAgICYmIGZlbmNlID09IG90aGVyLmZlbmNlOwogfQogCiBib29sIEVmZmVjdHM6Om9wZXJh
dG9yIT0oY29uc3QgRWZmZWN0cyYgb3RoZXIpIGNvbnN0CkBAIC0xMjAsNiArMTIyLDggQEAgdm9p
ZCBFZmZlY3RzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbgogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJXcml0ZXNQaW5uZWQiKTsKICAgICBpZiAocmVhZHNQaW5uZWQpCiAgICAgICAgIG91
dC5wcmludChjb21tYSwgIlJlYWRzUGlubmVkIik7CisgICAgaWYgKGZlbmNlKQorICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJGZW5jZSIpOwogICAgIGlmICh3cml0ZXMpCiAgICAgICAgIG91dC5w
cmludChjb21tYSwgIldyaXRlczoiLCB3cml0ZXMpOwogICAgIGlmIChyZWFkcykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiAr
NzEsMTAgQEAgc3RydWN0IEVmZmVjdHMgewogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjMxNzMKICAgICBib29sIHJlYWRzUGlubmVkIHsgZmFsc2UgfTsK
ICAgICBib29sIHdyaXRlc1Bpbm5lZCB7IGZhbHNlIH07CisgICAgCisgICAgLy8gTWVtb3J5IGZl
bmNlcyBjYW5ub3QgYmUgcmVvcmRlcmVkIGFyb3VuZCBlYWNoIG90aGVyIHJlZ2FyZGxlc3Mgb2Yg
dGhlaXIgZWZmZWN0cy4gVGhpcyBpcyBmbGFnZ2VkCisgICAgLy8gaWYgdGhlIG9wZXJhdGlvbiBp
cyBhIG1lbW9yeSBmZW5jZS4KKyAgICBib29sIGZlbmNlIHsgZmFsc2UgfTsKIAogICAgIEhlYXBS
YW5nZSB3cml0ZXM7CiAgICAgSGVhcFJhbmdlIHJlYWRzOwpAQCAtODksNiArOTMsNyBAQCBzdHJ1
Y3QgRWZmZWN0cyB7CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IEhlYXBSYW5nZTo6dG9wKCk7CiAg
ICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgIHJlc3VsdC53cml0ZXNQ
aW5uZWQgPSB0cnVlOworICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMTAzLDcgKzEwOCw3IEBAIHN0cnVjdCBFZmZlY3RzIHsK
IAogICAgIGJvb2wgbXVzdEV4ZWN1dGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHRl
cm1pbmFsIHx8IGV4aXRzU2lkZXdheXMgfHwgd3JpdGVzTG9jYWxTdGF0ZSB8fCB3cml0ZXMgfHwg
d3JpdGVzUGlubmVkOworICAgICAgICByZXR1cm4gdGVybWluYWwgfHwgZXhpdHNTaWRld2F5cyB8
fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQaW5uZWQgfHwgZmVuY2U7CiAg
ICAgfQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHJlb3JkZXJpbmcgaW5zdHJ1Y3Rpb25zIHdp
dGggdGhlc2UgcmVzcGVjdGl2ZSBlZmZlY3RzIHdvdWxkIGNoYW5nZSBwcm9ncmFtCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29t
bW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTQyLDYgKzE0Miw3IEBAIHN0cnVjdCBJbXB1cmVCbG9ja0RhdGEgewogCiAgICAgUmFu
Z2VTZXQ8SGVhcFJhbmdlPiByZWFkczsgLy8gVGhpcyBvbmx5IGdldHMgdXNlZCBmb3IgZm9yd2Fy
ZCBzdG9yZSBlbGltaW5hdGlvbi4KICAgICBSYW5nZVNldDxIZWFwUmFuZ2U+IHdyaXRlczsgLy8g
VGhpcyBnZXRzIHVzZWQgZm9yIGJvdGggbG9hZCBhbmQgc3RvcmUgZWxpbWluYXRpb24uCisgICAg
Ym9vbCBmZW5jZTsKIAogICAgIE1lbW9yeVZhbHVlTWFwIHN0b3Jlc0F0SGVhZDsKICAgICBNZW1v
cnlWYWx1ZU1hcCBtZW1vcnlWYWx1ZXNBdFRhaWw7CkBAIC0xNzQsMTIgKzE3NSwxNCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG1lbW9yeSAmJiBtZW1v
cnktPmlzU3RvcmUoKQogICAgICAgICAgICAgICAgICAgICAmJiAhZGF0YS5yZWFkcy5vdmVybGFw
cyhtZW1vcnktPnJhbmdlKCkpCi0gICAgICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRlcy5v
dmVybGFwcyhtZW1vcnktPnJhbmdlKCkpKQorICAgICAgICAgICAgICAgICAgICAmJiAhZGF0YS53
cml0ZXMub3ZlcmxhcHMobWVtb3J5LT5yYW5nZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiAo
IWRhdGEuZmVuY2UgfHwgIW1lbW9yeS0+aGFzRmVuY2UoKSkpCiAgICAgICAgICAgICAgICAgICAg
IGRhdGEuc3RvcmVzQXRIZWFkLmFkZChtZW1vcnkpOwogICAgICAgICAgICAgICAgIGRhdGEucmVh
ZHMuYWRkKGVmZmVjdHMucmVhZHMpOwogCiAgICAgICAgICAgICAgICAgaWYgKEhlYXBSYW5nZSB3
cml0ZXMgPSBlZmZlY3RzLndyaXRlcykKICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihkYXRh
LCB3cml0ZXMpOworICAgICAgICAgICAgICAgIGRhdGEuZmVuY2UgfD0gZWZmZWN0cy5mZW5jZTsK
IAogICAgICAgICAgICAgICAgIGlmIChtZW1vcnkpCiAgICAgICAgICAgICAgICAgICAgIGRhdGEu
bWVtb3J5VmFsdWVzQXRUYWlsLmFkZChtZW1vcnkpOwpAQCAtNDc4LDYgKzQ4MSw5IEBAIHByaXZh
dGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyPgogICAgIGJvb2wgZmluZFN0b3JlQWZ0
ZXJDbG9iYmVyKFZhbHVlKiBwdHIsIEhlYXBSYW5nZSByYW5nZSwgY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCiAgICAgeworICAgICAgICBpZiAobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0Zl
bmNlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAogICAgICAgICAvLyBX
ZSBjYW4gZWxpbWluYXRlIGEgc3RvcmUgaWYgZXZlcnkgZm9yd2FyZCBwYXRoIGhpdHMgYSBzdG9y
ZSB0byB0aGUgc2FtZSBsb2NhdGlvbiBiZWZvcmUKICAgICAgICAgLy8gaGl0dGluZyBhbnkgb3Bl
cmF0aW9uIHRoYXQgb2JzZXJ2ZXMgdGhlIHN0b3JlLiBUaGlzIHNlYXJjaCBzZWVtcyBsaWtlIGl0
IHNob3VsZCBiZQogICAgICAgICAvLyBleHBlbnNpdmUsIGJ1dCBpbiB0aGUgb3ZlcndoZWxtaW5n
IG1ham9yaXR5IG9mIGNhc2VzIGl0IHdpbGwgYWxtb3N0IGltbWVkaWF0ZWx5IGhpdCBhbiAKQEAg
LTYxNCw2ICs2MjAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICBkYXRhTG9nKCptX3ZhbHVlLCAiOiBsb29raW5nIGJhY2t3YXJkIGZvciAiLCAqcHRyLCAi
Li4uXG4iKTsKICAgICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4o
KS0+aGFzRmVuY2UoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgIEdpdmluZyB1cCBiZWNhdXNlIGZlbmNlcy5cbiIpOworICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaWYgKE1lbW9yeVZh
bHVlKiBtYXRjaCA9IG1fZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuZmluZChwdHIsIGZpbHRlcikp
IHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBGb3VuZCAiLCAqbWF0Y2gsICIgbG9jYWxseS5cbiIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw3
IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwKICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNwogICAgIH0KIAor
ICAgIC8vIFRoaXMgcHV0cyB0aGUgSVIgaW4gcXVpcmtzIG1vZGUuCiAgICAgbG93ZXJNYWNyb3Mo
cHJvY2VkdXJlKTsKIAogICAgIGlmIChvcHRMZXZlbCA+PSAxKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljQmxvY2tJ
bnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJQdXJlTmFOLmgiCisjaW5jbHVkZSA8d3RmL0J1
YmJsZVNvcnQuaD4KKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgSW5zZXJ0
aW9uU2V0OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorY2xhc3MgR2VuZXJpY0Js
b2NrSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPHN0
ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gQmxvY2tJbnNlcnRpb247CisgICAgCisgICAgR2Vu
ZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0KFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+
JiBibG9ja3MpCisgICAgICAgIDogbV9ibG9ja3MoYmxvY2tzKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgdm9pZCBpbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCisgICAgeworICAg
ICAgICBtX2luc2VydGlvbnMuYXBwZW5kKFdURk1vdmUoaW5zZXJ0aW9uKSk7CisgICAgfQorCisg
ICAgLy8gSW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCisgICAgQmFzaWNCbG9j
ayogaW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTikKKyAgICB7
CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9j
ayhVSU5UX01BWCwgZnJlcXVlbmN5KSk7CisgICAgICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJs
b2NrLmdldCgpOworICAgICAgICBpbnNlcnQoQmxvY2tJbnNlcnRpb24oaW5kZXgsIFdURk1vdmUo
YmxvY2spKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gSW5zZXJ0
cyBhIG5ldyBibG9jayBiZWZvcmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5v
dCBwYXNzIHRoZSBmcmVxdWVuY3kKKyAgICAvLyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNl
cyB1cyB0byBqdXN0IHVzZSB0aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhh
dCdzCisgICAgLy8gdXN1YWxseSB3aGF0IHlvdSB3YW50LgorICAgIEJhc2ljQmxvY2sqIGluc2Vy
dEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGluc2VydChiZWZvcmUtPmluZGV4KCksIGZyZXF1ZW5jeSA9PSBm
cmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBiZWZvcmUtPmZyZXF1ZW5jeSgpKTsKKyAgICB9CisKKyAg
ICAvLyBJbnNlcnRzIGEgbmV3IGJsb2NrIGFmdGVyIHRoZSBnaXZlbiBibG9jay4KKyAgICBCYXNp
Y0Jsb2NrKiBpbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSA9
IFBOYU4pCisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwg
ZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7
CisgICAgfQorCisgICAgYm9vbCBleGVjdXRlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2luc2Vy
dGlvbnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAg
ICAgICAgLy8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3Jk
ZXIuIFNvLCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBiZWZvcmUKKyAgICAgICAgLy8gcnVubmluZyBX
VEY6OmV4ZWN1dGVJbnNlcnRpb25zLiBXZSBzdHJvbmdseSBwcmVmZXIgYSBzdGFibGUgc29ydCBh
bmQgd2Ugd2FudCBpdCB0byBiZQorICAgICAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNv
cnQuCisgICAgICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9u
cy5lbmQoKSk7CisgICAgICAgIAorICAgICAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX2Jsb2Nrcywg
bV9pbnNlcnRpb25zKTsKKyAgICAgICAgCisgICAgICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRy
aWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgICAgICAvLyBo
ZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgICAgICBtX2Js
b2Nrcy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRy
PEJhc2ljQmxvY2s+JiBibG9ja1B0cikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICFibG9ja1B0cjsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgdGhlIGJsb2NrcyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBt
X2Jsb2Nrc1tpXS0+bV9pbmRleCA9IGk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2Nr
Pj4mIG1fYmxvY2tzOworICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25z
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OCw2ICs4OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKICAgICB9CiAgICAgCisgICAgSGVhcFJhbmdlIG9wZXJhdG9yfChjb25z
dCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEhlYXBSYW5n
ZSgKKyAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAgICAg
ICAgICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAogICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9
CiAKICAgICB1bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24g
MjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDYgKzU4LDExIEBAIFZhbHVlKiBJbnNlcnRpb25TZXQ6Omlu
c2VydEJvdHRvbShzaXplX3QKICAgICByZXR1cm4gaW5zZXJ0Qm90dG9tKGluZGV4LCBsaWtlVmFs
dWUtPm9yaWdpbigpLCBsaWtlVmFsdWUtPnR5cGUoKSk7CiB9CiAKK1ZhbHVlKiBJbnNlcnRpb25T
ZXQ6Omluc2VydENsb25lKHNpemVfdCBpbmRleCwgVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVy
biBpbnNlcnRWYWx1ZShpbmRleCwgbV9wcm9jZWR1cmUuY2xvbmUodmFsdWUpKTsKK30KKwogdm9p
ZCBJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgYnViYmxl
U29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNzEsNiArNzEsOCBAQCBwdWJsaWM6CiAKICAgICBWYWx1ZSogaW5zZXJ0Qm90dG9t
KHNpemVfdCBpbmRleCwgT3JpZ2luLCBUeXBlKTsKICAgICBWYWx1ZSogaW5zZXJ0Qm90dG9tKHNp
emVfdCBpbmRleCwgVmFsdWUqKTsKKyAgICAKKyAgICBWYWx1ZSogaW5zZXJ0Q2xvbmUoc2l6ZV90
IGluZGV4LCBWYWx1ZSopOwogCiAgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24g
MjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjksMTEgKzI5LDEzIEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAog
I2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgorI2luY2x1ZGUgIkIz
QXRvbWljVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQjNCbG9ja0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzQ2FzZUNvbGxlY3Rpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNDb25zdFB0clZh
bHVlLmgiCisjaW5jbHVkZSAiQjNGZW5jZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNJbnNlcnRpb25T
ZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2luY2x1ZGUgIkIzUGF0
Y2hwb2ludFZhbHVlLmgiCkBAIC00Miw2ICs0NCw3IEBACiAjaW5jbHVkZSAiQjNTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMuaCIKICNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCiAjaW5jbHVkZSAi
QjNVcHNpbG9uVmFsdWUuaCIKKyNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgogI2luY2x1ZGUgIkIz
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgpAQCAtNTgsMTEgKzYxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3Byb2Mo
cHJvYykKICAgICAgICAgLCBtX2Jsb2NrSW5zZXJ0aW9uU2V0KHByb2MpCiAgICAgICAgICwgbV9p
bnNlcnRpb25TZXQocHJvYykKKyAgICAgICAgLCBtX3VzZUNvdW50cyhwcm9jKQogICAgIHsKICAg
ICB9CiAKICAgICBib29sIHJ1bigpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9w
cm9jLmhhc1F1aXJrcygpKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKICAgICAgICAgICAg
IHByb2Nlc3NDdXJyZW50QmxvY2soKTsKQEAgLTcyLDYgKzc4LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIG1fcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOwogICAgICAgICAgICAgbV9wcm9jLmlu
dmFsaWRhdGVDRkcoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpbmRp
Y2F0ZXMgdGhhdCB3ZSd2ZSAKKyAgICAgICAgbV9wcm9jLnNldEhhc1F1aXJrcyh0cnVlKTsKKyAg
ICAgICAgCiAgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CiAgICAgfQogICAgIApAQCAtMTg1LDcg
KzE5NSw5NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYXNlIERlcGVuZDogeworICAgICAgICAgICAgICAgIGlmIChpc1g4NigpKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGxvYWQtbG9hZCBmZW5jZS4gVGhpcyBj
b2RlZ2VucyB0byBub3RoaW5nIG9uIFg4Ni4gV2UgdXNlIGl0IHRvIHRlbGwgdGhlCisgICAgICAg
ICAgICAgICAgICAgIC8vIGNvbXBpbGVyIG5vdCB0byBibG9jayBsb2FkIG1vdGlvbi4KKyAgICAg
ICAgICAgICAgICAgICAgRmVuY2VWYWx1ZSogZmVuY2UgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
RmVuY2VWYWx1ZT4obV9pbmRleCwgbV9vcmlnaW4pOworICAgICAgICAgICAgICAgICAgICBmZW5j
ZS0+cmVhZCA9IEhlYXBSYW5nZSgpOworICAgICAgICAgICAgICAgICAgICBmZW5jZS0+d3JpdGUg
PSBIZWFwUmFuZ2U6OnRvcCgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgLy8gS2lsbCB0aGUgRGVwZW5kLCB3aGljaCBzaG91bGQgdW5sb2NrIGEgYnVuY2ggb2Yg
Y29kZSBzaW1wbGlmaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFj
ZVdpdGhCb3R0b20obV9pbnNlcnRpb25TZXQsIG1faW5kZXgpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAKKyAgICAgICAgICAg
IGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOiB7
CisgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMg
PSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgICAgICBXaWR0aCB3aWR0
aCA9IGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoaXNDYW5vbmljYWxXaWR0aCh3aWR0aCkpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZhbHVlKiBleHBlY3Rl
ZFZhbHVlID0gYXRvbWljLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyBPbiBBUk0sIHRoZSBsb2FkIHBhcnQgb2YgdGhlIENBUyBkb2VzIGEgbG9hZCB3aXRo
IHplcm8gZXh0ZW5zaW9uLiBUaGVyZWZvcmUsIHdlIG5lZWQKKyAgICAgICAgICAgICAgICAvLyB0
byB6ZXJvLWV4dGVuZCB0aGUgaW5wdXQuCisgICAgICAgICAgICAgICAgVmFsdWUqIG1hc2tlZEV4
cGVjdGVkVmFsdWUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4LCBCaXRBbmQsIG1fb3JpZ2luLCBleHBlY3RlZFZhbHVlLAorICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRJbnRDb25zdGFudChtX2luZGV4LCBl
eHBlY3RlZFZhbHVlLCBtYXNrKHdpZHRoKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGF0b21pYy0+Y2hpbGQoMCkgPSBtYXNrZWRFeHBlY3RlZFZhbHVlOworICAgICAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6
CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAgICBjYXNlIEF0b21p
Y1hjaGdPcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAgICAgICAgIGNh
c2UgQXRvbWljWGNoZ1hvcjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZzogeworICAgICAg
ICAgICAgICAgIC8vIE9uIFg4NiwgdGhlc2UgbWF5IGFjdHVhbGx5IHJldHVybiBnYXJiYWdlIGlu
IHRoZSBoaWdoIGJpdHMuIE9uIEFSTTY0LCB0aGVzZSBzb3J0YQorICAgICAgICAgICAgICAgIC8v
IHplcm8tZXh0ZW5kIHRoZWlyIGhpZ2ggYml0cywgZXhjZXB0IHRoYXQgdGhlIGhpZ2ggYml0cyBt
aWdodCBnZXQgcG9sbHV0ZWQgYnkgaGlnaAorICAgICAgICAgICAgICAgIC8vIGJpdHMgaW4gdGhl
IG9wZXJhbmQuIC4gU28sIGVpdGhlciB3YXksIHdlIG5lZWQgdG8gdGhyb3cgYSBzaWduLWV4dGVu
ZCBvbiB0aGVzZQorICAgICAgICAgICAgICAgIC8vIHRoaW5ncy4KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
bV92YWx1ZS0+b3Bjb2RlKCkgPT0gQXRvbWljWGNoZ1N1YiAmJiBtX3VzZUNvdW50cy5udW1Vc2Vz
KG1fdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbiB4ODYsIHhjaGdhZGQg
aXMgYmV0dGVyIHRoYW4geGNoZ3N1YiBpZiBpdCBoYXMgYW55IHVzZXJzLgorICAgICAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+c2V0S2luZFVuc2FmZWx5KEF0b21pY1hjaGdBZGQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBtX2luc2VydGlvblNldC5p
bnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIE5lZywg
bV9vcmlnaW4sIG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBleGVtcHQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgeworICAg
ICAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgQXRvbWljWGNoZ09yOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdT
dWI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGV4ZW1wdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChl
eGVtcHQpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9
IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgICAgIFdpZHRoIHdpZHRo
ID0gYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChpc0Nhbm9uaWNhbFdpZHRoKHdpZHRoKSkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFsdWUqIG5ld1ZhbHVl
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgbV9p
bmRleCwgc2lnbkV4dGVuZE9wY29kZSh3aWR0aCksIG1fb3JpZ2luLAorICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnRDbG9uZShtX2luZGV4LCBtX3ZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0
eShuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00
NzAsNiArNTY5LDcgQEAgcHJpdmF0ZToKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKICAgICBCbG9j
a0luc2VydGlvblNldCBtX2Jsb2NrSW5zZXJ0aW9uU2V0OwogICAgIEluc2VydGlvblNldCBtX2lu
c2VydGlvblNldDsKKyAgICBVc2VDb3VudHMgbV91c2VDb3VudHM7CiAgICAgQmFzaWNCbG9jayog
bV9ibG9jazsKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFj
cm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTYsMTUgKzE1NiwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2Fz
ZSBSb3RMOiB7CiAgICAgICAgICAgICAgICAgLy8gQVJNNjQgZG9lc24ndCBoYXZlIGEgcm90YXRl
IGxlZnQuCiAgICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbmV3
U2hpZnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIE5lZywgbV92YWx1
ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFZhbHVlKiByb3RhdGUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIFJv
dFIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbmV3U2hpZnQpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyb3RhdGUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld1NoaWZ0ID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPihtX2luZGV4LCBOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGls
ZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiByb3RhdGUgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIFJvdFIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVl
LT5jaGlsZCgwKSwgbmV3U2hpZnQpOworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBs
YWNlV2l0aElkZW50aXR5KHJvdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxNCBAQAogCiAj
aWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0LmgiCiAj
aW5jbHVkZSAiQWlyQ0NhbGxTcGVjaWFsLmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1
ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQWlyU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisj
aW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMu
aCIKICNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUu
aCIKQEAgLTcyLDYgKzc0LDE2IEBAIG5hbWVzcGFjZSB7CiAKIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwogCisvLyBGSVhNRTogV2Ugd291bGRuJ3QgbmVlZCB0aGlzIGlmIEFpciBzdXBwb3J0
ZWQgV2lkdGggbW9kaWZpZXJzIGluIEFpcjo6S2luZC4KKy8vIE9PUFMhISEgKG5lZWQgYSBidWcg
VVJMKQorI2RlZmluZSBPUENPREVfRk9SX1dJRFRIKG9wY29kZSwgd2lkdGgpICggXAorICAgICh3
aWR0aCkgPT0gV2lkdGg4ID8gb3Bjb2RlICMjIDggOiBcCisgICAgKHdpZHRoKSA9PSBXaWR0aDE2
ID8gb3Bjb2RlICMjIDE2IDogXAorICAgICh3aWR0aCkgPT0gV2lkdGgzMiA/IG9wY29kZSAjIyAz
MiA6IFwKKyAgICBvcGNvZGUgIyMgNjQpCisjZGVmaW5lIE9QQ09ERV9GT1JfQ0FOT05JQ0FMX1dJ
RFRIKG9wY29kZSwgd2lkdGgpICggXAorICAgICh3aWR0aCkgPT0gV2lkdGg2NCA/IG9wY29kZSAj
IyA2NCA6IG9wY29kZSAjIyAzMikKKwogY2xhc3MgTG93ZXJUb0FpciB7CiBwdWJsaWM6CiAgICAg
TG93ZXJUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSkKQEAgLTgzLDYgKzk1LDEyIEBAIHB1Ymxp
YzoKICAgICAgICAgLCBtX2RvbWluYXRvcnMocHJvY2VkdXJlLmRvbWluYXRvcnMoKSkKICAgICAg
ICAgLCBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCiAgICAgICAgICwgbV9jb2RlKHByb2NlZHVyZS5j
b2RlKCkpCisgICAgICAgICwgbV9ibG9ja0luc2VydGlvblNldChtX2NvZGUpCisjaWYgQ1BVKFg4
NikgfHwgQ1BVKFg4Nl82NCkKKyAgICAgICAgLCBtX2VheChYODZSZWdpc3RlcnM6OmVheCkKKyAg
ICAgICAgLCBtX2VjeChYODZSZWdpc3RlcnM6OmVjeCkKKyAgICAgICAgLCBtX2VkeChYODZSZWdp
c3RlcnM6OmVkeCkKKyNlbmRpZgogICAgIHsKICAgICB9CiAKQEAgLTEyNCwxNCArMTQyLDE4IEBA
IHB1YmxpYzoKICAgICAgICAgLy8gaG9pc3RlZCBhZGRyZXNzIGV4cHJlc3Npb24gYmVmb3JlIHdl
IGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxvb3AuCiAgICAgICAgIGZvciAoQjM6OkJhc2lj
QmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAg
ICAgICBtX2Jsb2NrID0gYmxvY2s7Ci0gICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgot
ICAgICAgICAgICAgbV9pbnN0cy5yZXNpemUoMCk7CiAKICAgICAgICAgICAgIG1faXNSYXJlID0g
IW1fZmFzdFdvcmtsaXN0LnNhdyhibG9jayk7CiAKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvd2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIp
OwogICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vz
c29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KKyAgICAgICAgICAgIGZvciAoQjM6OkZyZXF1ZW50
ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAg
ICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNzb3JzKCkuYXBwZW5kKAorICAgICAgICAg
ICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayhtX2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3Iu
YmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3koKSkpOworICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICAvLyBQcm9jZXNzIGJsb2NrcyBpbiByZXZlcnNlIG9yZGVyIHNvIHdlIHNlZSB1c2Vz
IGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hhdCBhbGxvd3MgdXMKICAgICAgICAgICAgIC8vIHRvIG1h
dGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5LgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
YmxvY2stPnNpemUoKTsgaS0tOykgewpAQCAtMTQ5LDE5ICsxNzEsMTAgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gTm93IGFwcGVu
ZCB0aGUgaW5zdHJ1Y3Rpb25zLiBtX2luc3RzIGNvbnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRl
ciwgc28gd2UgcHJvY2VzcwotICAgICAgICAgICAgLy8gaXQgaW4gcmV2ZXJzZS4KLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5zdHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9pbnN0c1tpXSkKLSAgICAgICAgICAgICAgICAgICAg
bV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5hcHBlbmRJbnN0KFdURk1vdmUoaW5zdCkpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBh
cmUgc2V0IHVwIGNvcnJlY3RseS4KLSAgICAgICAgICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9j
ayBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgbV9i
bG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNzb3JzKCkuYXBwZW5kKAotICAgICAgICAgICAgICAg
ICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayhtX2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2so
KV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3koKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fYmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwog
CiAgICAgICAgIEFpcjo6SW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2NvZGUpOwogICAgICAg
ICBmb3IgKEluc3QmIGluc3QgOiBtX3Byb2xvZ3VlKQpAQCAtNTM4LDcgKzU1MSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7CiAKICAgICAgICAgaW50MzJfdCBvZmZzZXQg
PSB2YWx1ZS0+b2Zmc2V0KCk7Ci0gICAgICAgIFdpZHRoIHdpZHRoID0gdmFsdWUtPmFjY2Vzc1dp
ZHRoKCk7CisgICAgICAgIFdpZHRoIHdpZHRoID0gdmFsdWUtPmxvYWRTdG9yZVdpZHRoKCk7CiAK
ICAgICAgICAgQXJnIHJlc3VsdCA9IGVmZmVjdGl2ZUFkZHIodmFsdWUtPmxhc3RDaGlsZCgpLCBv
ZmZzZXQsIHdpZHRoKTsKICAgICAgICAgQVNTRVJUKHJlc3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkp
OwpAQCAtNTYyLDExICs1NzUsMTkgQEAgcHJpdmF0ZToKICAgICAKICAgICBBcmdQcm9taXNlIGxv
YWRQcm9taXNlQW55T3Bjb2RlKFZhbHVlKiBsb2FkVmFsdWUpCiAgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChsb2FkVmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpKTsKICAgICAgICAgaWYgKCFj
YW5CZUludGVybmFsKGxvYWRWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7CiAgICAg
ICAgIGlmIChjcm9zc2VzSW50ZXJmZXJlbmNlKGxvYWRWYWx1ZSkpCiAgICAgICAgICAgICByZXR1
cm4gQXJnKCk7Ci0gICAgICAgIEFyZ1Byb21pc2UgcmVzdWx0KGFkZHIobG9hZFZhbHVlKSwgbG9h
ZFZhbHVlKTsKKyAgICAgICAgLy8gT24geDg2LCBhbGwgbG9hZHMgaGF2ZSBmZW5jZXMuIERvaW5n
IHRoaXMga2luZCBvZiBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gd2lsbCBtb3ZlIHRoZSBsb2FkLAor
ICAgICAgICAvLyBidXQgdGhhdCdzIGZpbmUgYmVjYXVzZSBvdXIgaW50ZXJmZXJlbmNlIGFuYWx5
c2lzIHN0b3BzIHRoZSBtb3Rpb24gb2YgZmVuY2VzIGFyb3VuZCBvdGhlcgorICAgICAgICAvLyBm
ZW5jZXMuIFNvLCBhbnkgbG9hZCBtb3Rpb24gd2UgaW50cm9kdWNlIGhlcmUgd291bGQgbm90IGJl
IG9ic2VydmFibGUuCisgICAgICAgIGlmICghaXNYODYoKSAmJiBsb2FkVmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpLT5oYXNGZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAg
ICBBcmcgbG9hZEFkZHIgPSBhZGRyKGxvYWRWYWx1ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGxvYWRBZGRyKTsKKyAgICAgICAgQXJnUHJvbWlzZSByZXN1bHQobG9hZEFkZHIsIGxvYWRWYWx1
ZSk7CiAgICAgICAgIGlmIChsb2FkVmFsdWUtPnRyYXBzKCkpCiAgICAgICAgICAgICByZXN1bHQu
c2V0VHJhcHModHJ1ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC04OTgsMTEgKzkxOSw5
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotI2lmIENQVShY
ODYpIHx8IENQVShYODZfNjQpCiAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAodmFsdWUpLCB0bXAo
bV92YWx1ZSkpOwotICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGFtb3VudCksIFRtcChYODZSZWdp
c3RlcnM6OmVjeCkpOwotICAgICAgICBhcHBlbmQob3Bjb2RlLCBUbXAoWDg2UmVnaXN0ZXJzOjpl
Y3gpLCB0bXAobV92YWx1ZSkpOwotI2VuZGlmCisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAoYW1v
dW50KSwgbV9lY3gpOworICAgICAgICBhcHBlbmQob3Bjb2RlLCBtX2VjeCwgdG1wKG1fdmFsdWUp
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGUzMiwgQWlyOjpPcGNv
ZGUgb3Bjb2RlNjQ+CkBAIC05MzEsMTAgKzk1MCwxNiBAQCBwcml2YXRlOgogICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUzMiwgQWlyOjpPcGNvZGUgb3Bjb2RlNjQsIENvbW11dGF0aXZpdHkgY29t
bXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgogICAgIGJvb2wgdHJ5QXBwZW5kU3RvcmVCaW5P
cChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQogICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpOworICAgICAgICAKICAgICAgICAgQWlyOjpP
cGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShvcGNvZGUzMiwgb3Bjb2RlNjQsIGxlZnQt
PnR5cGUoKSk7CiAgICAgICAgIGlmIChvcGNvZGUgPT0gQWlyOjpPb3BzKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAgICAgLy8gT24geDg2LCBhbGwgc3RvcmVzIGhh
dmUgZmVuY2VzLCBhbmQgdGhpcyBpc24ndCByZW9yZGVyaW5nIHRoZSBzdG9yZSBpdHNlbGYuCisg
ICAgICAgIGlmICghaXNYODYoKSAmJiBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVu
Y2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIEFyZyBz
dG9yZUFkZHIgPSBhZGRyKG1fdmFsdWUpOwogICAgICAgICBBU1NFUlQoc3RvcmVBZGRyKTsKIApA
QCAtOTk0LDExICsxMDE5LDUwIEBAIHByaXZhdGU6CiAKICAgICAgICAgcmV0dXJuIEluc3QobW92
ZSwgbV92YWx1ZSwgdG1wKHZhbHVlKSwgZGVzdCk7CiAgICAgfQorICAgIAorICAgIEFpcjo6T3Bj
b2RlIHN0b3JlT3Bjb2RlKFdpZHRoIHdpZHRoLCBCYW5rIGJhbmssIGJvb2wgcmVsZWFzZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBXaWR0aDg6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChiYW5rID09IEdQKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZWxlYXNlID8gU3RvcmVSZWw4IDogQWlyOjpTdG9yZTg7CisgICAgICAgIGNhc2UgV2lkdGgxNjoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhbmsgPT0gR1ApOworICAgICAgICAgICAgcmV0
dXJuIHJlbGVhc2UgPyBTdG9yZVJlbDE2IDogQWlyOjpTdG9yZTE2OworICAgICAgICBjYXNlIFdp
ZHRoMzI6CisgICAgICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgICAgIGNhc2UgR1A6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBTdG9yZVJlbDMyIDogTW92ZTMyOwor
ICAgICAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVs
ZWFzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1vdmVGbG9hdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpczY0Qml0KCkpOworICAgICAgICAgICAgc3dpdGNoIChiYW5rKSB7Cisg
ICAgICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlID8gU3Rv
cmVSZWw2NCA6IE1vdmU7CisgICAgICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFyZWxlYXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW92ZURvdWJs
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bj
b2RlIHN0b3JlT3Bjb2RlKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVl
KiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1lbW9yeS0+aXNTdG9yZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0b3JlT3Bjb2RlKG1lbW9y
eS0+bG9hZFN0b3JlV2lkdGgoKSwgbWVtb3J5LT5hY2Nlc3NCYW5rKCksIG1lbW9yeS0+aGFzRmVu
Y2UoKSk7CisgICAgfQogCiAgICAgSW5zdCBjcmVhdGVTdG9yZShWYWx1ZSogdmFsdWUsIGNvbnN0
IEFyZyYgZGVzdCkKICAgICB7Ci0gICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVPcGNvZGUgPSBtb3Zl
Rm9yVHlwZSh2YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVN0b3JlKG1vdmVP
cGNvZGUsIHZhbHVlLCBkZXN0KTsKKyAgICAgICAgQWlyOjpPcGNvZGUgbW92ZU9wY29kZSA9IHN0
b3JlT3Bjb2RlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVN0b3JlKG1vdmVPcGNvZGUs
IHZhbHVlLT5jaGlsZCgwKSwgZGVzdCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJncz4KQEAgLTEwMDYsNyArMTA3MCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBh
cHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIGNyZWF0ZVN0b3JlKHN0ZDo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLikpKTsKICAgICB9Ci0KKyAgICAKICAgICBBaXI6Ok9wY29kZSBtb3ZlRm9yVHlw
ZShUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTEwNzMsNyAr
MTEzNyw0MSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5k
KGluc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmlzaEFwcGVuZGluZ0luc3RydWN0aW9u
cyhBaXI6OkJhc2ljQmxvY2sqIHRhcmdldCkKKyAgICB7CisgICAgICAgIC8vIE5vdyBhcHBlbmQg
dGhlIGluc3RydWN0aW9ucy4gbV9pbnN0cyBjb250YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIs
IHNvIHdlIHByb2Nlc3MKKyAgICAgICAgLy8gaXQgaW4gcmV2ZXJzZS4KKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9pbnN0cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGZvciAoSW5z
dCYgaW5zdCA6IG1faW5zdHNbaV0pCisgICAgICAgICAgICAgICAgdGFyZ2V0LT5hcHBlbmRJbnN0
KFdURk1vdmUoaW5zdCkpOworICAgICAgICB9CisgICAgICAgIG1faW5zdHMucmVzaXplKDApOwor
ICAgIH0KKyAgICAKKyAgICBBaXI6OkJhc2ljQmxvY2sqIG5ld0Jsb2NrKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEFmdGVyKG1fYmxvY2tUb0Jsb2Nr
W21fYmxvY2tdKTsKKyAgICB9CiAKKyAgICAvLyBOT1RFOiBUaGlzIHdpbGwgY3JlYXRlIGEgY29u
dGludWF0aW9uIGJsb2NrIChgbmV4dEJsb2NrYCkgKmFmdGVyKiBhbnkgYmxvY2tzIHlvdSd2ZSBj
cmVhdGVkIHVzaW5nCisgICAgLy8gbmV3QmxvY2soKS4gU28sIGl0J3MgcHJlZmVyYWJsZSB0byBj
cmVhdGUgYWxsIG9mIHlvdXIgYmxvY2tzIHVwZnJvbnQgdXNpbmcgbmV3QmxvY2soKS4gQWxzbyBu
b3RlCisgICAgLy8gdGhhdCBhbnkgY29kZSB5b3UgZW1pdCBiZWZvcmUgdGhpcyB3aWxsIGJlIHBy
ZXBlbmRlZCB0byB0aGUgY29udGludWF0aW9uLCBhbmQgYW55IGNvZGUgeW91IGVtaXQKKyAgICAv
LyBhZnRlciB0aGlzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHByZXZpb3VzIGJsb2NrLgorICAg
IHZvaWQgc3BsaXRCbG9jayhBaXI6OkJhc2ljQmxvY2sqJiBwcmV2aW91c0Jsb2NrLCBBaXI6OkJh
c2ljQmxvY2sqJiBuZXh0QmxvY2spCisgICAgeworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ibG9ja1RvQmxvY2tbbV9ibG9ja107CisgICAgICAgIAorICAgICAgICBwcmV2aW91
c0Jsb2NrID0gYmxvY2s7CisgICAgICAgIG5leHRCbG9jayA9IG1fYmxvY2tJbnNlcnRpb25TZXQu
aW5zZXJ0QWZ0ZXIoYmxvY2spOworICAgICAgICAKKyAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5z
dHJ1Y3Rpb25zKG5leHRCbG9jayk7CisgICAgICAgIG5leHRCbG9jay0+c3VjY2Vzc29ycygpID0g
YmxvY2stPnN1Y2Nlc3NvcnMoKTsKKyAgICAgICAgYmxvY2stPnN1Y2Nlc3NvcnMoKS5jbGVhcigp
OworICAgICAgICAKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoVmVjdG9yPEluc3Q+KCkpOworICAg
IH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CiAgICAgVCogZW5zdXJlU3BlY2lhbChUKiYgZmllbGQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50
cykKICAgICB7CkBAIC0xMTIzLDcgKzEyMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKICAgICAg
ICAgICAgICAgICBhcmcgPSBBcmc6OmNhbGxBcmcodmFsdWUucmVwKCkub2Zmc2V0RnJvbVNQKCkp
OwotICAgICAgICAgICAgICAgIGFwcGVuZFN0b3JlKHZhbHVlLnZhbHVlKCksIGFyZyk7CisgICAg
ICAgICAgICAgICAgYXBwZW5kU3RvcmUobW92ZUZvclR5cGUodmFsdWUudmFsdWUoKS0+dHlwZSgp
KSwgdmFsdWUudmFsdWUoKSwgYXJnKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTE5NjEsNiArMjA1OSwzMDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCisgICAgdm9pZCBhcHBlbmRYODZEaXYoQjM6Ok9wY29kZSBvcCkKKyAgICB7Cisg
ICAgICAgIEFpcjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJsZVdvcmQ7CisgICAgICAgIEFpcjo6T3Bj
b2RlIGRpdjsKKyAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBJbnQzMjoKKyAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBYODZDb252ZXJ0VG9E
b3VibGVXb3JkMzI7CisgICAgICAgICAgICBkaXYgPSBYODZEaXYzMjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29y
ZCA9IFg4NkNvbnZlcnRUb1F1YWRXb3JkNjQ7CisgICAgICAgICAgICBkaXYgPSBYODZEaXY2NDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIEFTU0VSVChvcCA9PSBEaXYgfHwgb3AgPT0gTW9kKTsKKyAgICAgICAgVG1wIHJl
c3VsdCA9IG9wID09IERpdiA/IG1fZWF4IDogbV9lZHg7CisKKyAgICAgICAgYXBwZW5kKE1vdmUs
IHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIG1fZWF4KTsKKyAgICAgICAgYXBwZW5kKGNvbnZlcnRU
b0RvdWJsZVdvcmQsIG1fZWF4LCBtX2VkeCk7CisgICAgICAgIGFwcGVuZChkaXYsIG1fZWF4LCBt
X2VkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCByZXN1
bHQsIHRtcChtX3ZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRYODZVRGl2KEIzOjpP
cGNvZGUgb3ApCisgICAgeworICAgICAgICBBaXI6Ok9wY29kZSBkaXYgPSBtX3ZhbHVlLT50eXBl
KCkgPT0gSW50MzIgPyBYODZVRGl2MzIgOiBYODZVRGl2NjQ7CisKKyAgICAgICAgQVNTRVJUKG9w
ID09IFVEaXYgfHwgb3AgPT0gVU1vZCk7CisgICAgICAgIFRtcCByZXN1bHQgPSBvcCA9PSBVRGl2
ID8gbV9lYXggOiBtX2VkeDsKKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNo
aWxkKDApKSwgbV9lYXgpOworICAgICAgICBhcHBlbmQoWG9yNjQsIG1fZWR4LCBtX2VkeCk7Cisg
ICAgICAgIGFwcGVuZChkaXYsIG1fZWF4LCBtX2VkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7
CisgICAgICAgIGFwcGVuZChNb3ZlLCByZXN1bHQsIHRtcChtX3ZhbHVlKSk7CisgICAgfQorICAg
IAorICAgIEFpcjo6T3Bjb2RlIGxvYWRMaW5rT3Bjb2RlKFdpZHRoIHdpZHRoLCBib29sIGZlbmNl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZlbmNlID8gT1BDT0RFX0ZPUl9XSURUSChMb2FkTGlu
a0FjcSwgd2lkdGgpIDogT1BDT0RFX0ZPUl9XSURUSChMb2FkTGluaywgd2lkdGgpOworICAgIH0K
KyAgICAKKyAgICBBaXI6Ok9wY29kZSBzdG9yZUNvbmRPcGNvZGUoV2lkdGggd2lkdGgsIGJvb2wg
ZmVuY2UpCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2UgPyBPUENPREVfRk9SX1dJRFRIKFN0
b3JlQ29uZFJlbCwgd2lkdGgpIDogT1BDT0RFX0ZPUl9XSURUSChTdG9yZUNvbmQsIHdpZHRoKTsK
KyAgICB9CisgICAgCisgICAgLy8gVGhpcyBjYW4gZW1pdCBjb2RlIGZvciB0aGUgZm9sbG93aW5n
IHBhdHRlcm5zOgorICAgIC8vIEF0b21pY1dlYWtDQVMKKyAgICAvLyBCaXRYb3IoQXRvbWljV2Vh
a0NBUywgMSkKKyAgICAvLyBBdG9taWNTdHJvbmdDQVMKKyAgICAvLyBFcXVhbChBdG9taWNTdHJv
bmdDQVMsIGV4cGVjdGVkKQorICAgIC8vIE5vdEVxdWFsKEF0b21pY1N0cm9uZ0NBUywgZXhwZWN0
ZWQpCisgICAgLy8gQnJhbmNoKEF0b21pY1dlYWtDQVMpCisgICAgLy8gQnJhbmNoKEVxdWFsKEF0
b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpKQorICAgIC8vIEJyYW5jaChOb3RFcXVhbChBdG9taWNT
dHJvbmdDQVMsIGV4cGVjdGVkKSkKKyAgICAvLworICAgIC8vIEl0IGFzc3VtZXMgdGhhdCBhdG9t
aWNWYWx1ZSBwb2ludHMgdG8gdGhlIENBUywgYW5kIG1fdmFsdWUgcG9pbnRzIHRvIHRoZSBpbnN0
cnVjdGlvbiBiZWluZworICAgIC8vIGdlbmVyYXRlZC4gSXQgYXNzdW1lcyB0aGF0IHlvdSd2ZSBj
b25zdW1lZCBldmVyeXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29uc3VtZWQuCisgICAgdm9pZCBh
cHBlbmRDQVMoVmFsdWUqIGF0b21pY1ZhbHVlLCBib29sIGludmVydCkKKyAgICB7CisgICAgICAg
IEF0b21pY1ZhbHVlKiBhdG9taWMgPSBhdG9taWNWYWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGF0b21pYyk7CisgICAgICAgIAorICAgICAgICBib29sIGlz
QnJhbmNoID0gbV92YWx1ZS0+b3Bjb2RlKCkgPT0gQnJhbmNoOworICAgICAgICBib29sIGlzU3Ry
b25nID0gYXRvbWljLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVM7CisgICAgICAgIGJvb2wg
cmV0dXJuc09sZFZhbHVlID0gbV92YWx1ZS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTOwor
ICAgICAgICAKKyAgICAgICAgV2lkdGggd2lkdGggPSBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCk7
CisgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihhdG9taWMpOworCisgICAgICAgIFRtcCB2YWx1
ZVJlc3VsdFRtcDsKKyAgICAgICAgVG1wIGJvb2xSZXN1bHRUbXA7CisgICAgICAgIGlmIChyZXR1
cm5zT2xkVmFsdWUpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbnZlcnQpOworICAg
ICAgICAgICAgdmFsdWVSZXN1bHRUbXAgPSB0bXAobV92YWx1ZSk7CisgICAgICAgICAgICBib29s
UmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNCcmFu
Y2gpIHsKKyAgICAgICAgICAgIHZhbHVlUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7Cisg
ICAgICAgICAgICBib29sUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVJlc3VsdFRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOwor
ICAgICAgICAgICAgYm9vbFJlc3VsdFRtcCA9IHRtcChtX3ZhbHVlKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgVG1wIHN1Y2Nlc3NCb29sUmVzdWx0VG1wOworICAgICAgICBpZiAoaXNT
dHJvbmcgJiYgIWlzQnJhbmNoKQorICAgICAgICAgICAgc3VjY2Vzc0Jvb2xSZXN1bHRUbXAgPSBt
X2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3VjY2Vzc0Jvb2xS
ZXN1bHRUbXAgPSBib29sUmVzdWx0VG1wOworCisgICAgICAgIFRtcCBleHBlY3RlZFZhbHVlVG1w
ID0gdG1wKGF0b21pYy0+Y2hpbGQoMCkpOworICAgICAgICBUbXAgbmV3VmFsdWVUbXAgPSB0bXAo
YXRvbWljLT5jaGlsZCgxKSk7CisgICAgICAgIAorICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9j
ayBzdWNjZXNzOworICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayBmYWlsdXJlOworICAgICAg
ICBpZiAoaXNCcmFuY2gpIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBtX2Jsb2NrVG9CbG9ja1tt
X2Jsb2NrXS0+c3VjY2Vzc29yKGludmVydCk7CisgICAgICAgICAgICBmYWlsdXJlID0gbV9ibG9j
a1RvQmxvY2tbbV9ibG9ja10tPnN1Y2Nlc3NvcighaW52ZXJ0KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92
ZUZvclR5cGUoYXRvbWljLT5vcGVyYXRpb25UeXBlKCkpLCBpbW1PclRtcChhdG9taWMtPmNoaWxk
KDApKSwgbV9lYXgpOworICAgICAgICAgICAgaWYgKHJldHVybnNPbGRWYWx1ZSkgeworICAgICAg
ICAgICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKEF0b21pY1N0cm9uZ0NBUywgd2lkdGgp
LCBtX2VheCwgbmV3VmFsdWVUbXAsIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIGFwcGVuZChy
ZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT5vcGVyYXRpb25UeXBlKCkpLCBtX2VheCwgdmFsdWVS
ZXN1bHRUbXApOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0JyYW5jaCkgeworICAgICAgICAg
ICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKEJyYW5jaEF0b21pY1N0cm9uZ0NBUywgd2lk
dGgpLCBBcmc6OnN0YXR1c0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlN1Y2Nlc3MpLCBtX2VheCwgbmV3
VmFsdWVUbXAsIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Jsb2NrW21fYmxv
Y2tdLT5zZXRTdWNjZXNzb3JzKHN1Y2Nlc3MsIGZhaWx1cmUpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgYXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljU3Ryb25nQ0FT
LCB3aWR0aCksIEFyZzo6c3RhdHVzQ29uZChpbnZlcnQgPyBNYWNyb0Fzc2VtYmxlcjo6RmFpbHVy
ZSA6IE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNzKSwgbV9lYXgsIHRtcChhdG9taWMtPmNoaWxkKDEp
KSwgYWRkcmVzcywgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7CisgICAgICAg
IC8vIFdlIHdpc2ggdG8gZW1pdDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQmxvY2sgI3JlbG9v
cDoKKyAgICAgICAgLy8gICAgIExvYWRMaW5rCisgICAgICAgIC8vICAgICBCcmFuY2ggTm90RXF1
YWwKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiBUaGVuOiNmYWlsLCBFbHNlOiAjc3RvcmUKKyAg
ICAgICAgLy8gQmxvY2sgI3N0b3JlOgorICAgICAgICAvLyAgICAgU3RvcmVDb25kCisgICAgICAg
IC8vICAgICBYb3IgJDEsICVyZXN1bHQgICAgPC0tLSBvbmx5IGlmICFpbnZlcnQKKyAgICAgICAg
Ly8gICAgIEp1bXAKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiAjZG9uZQorICAgICAgICAvLyBC
bG9jayAjZmFpbDoKKyAgICAgICAgLy8gICAgIE1vdmUgJGludmVydCwgJXJlc3VsdAorICAgICAg
ICAvLyAgICAgSnVtcAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6ICNkb25lCisgICAgICAgIC8v
IEJsb2NrICNkb25lOgorICAgICAgICAKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiByZWxvb3BC
bG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3RvcmVCbG9jayA9
IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3VjY2Vzc0Jsb2NrID0gbnVs
bHB0cjsKKyAgICAgICAgaWYgKCFpc0JyYW5jaCAmJiBpc1N0cm9uZykKKyAgICAgICAgICAgIHN1
Y2Nlc3NCbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogZmFpbEJs
b2NrID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKCFpc0JyYW5jaCkKKyAgICAgICAgICAgIGZhaWxC
bG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3Ryb25nRmFpbEJs
b2NrOworICAgICAgICBpZiAoaXNTdHJvbmcpCisgICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2sg
PSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayBjb21wYXJpc29uRmFp
bDsKKyAgICAgICAgQWlyOjpGcmVxdWVudGVkQmxvY2sgd2Vha0ZhaWw7CisgICAgICAgIGlmIChp
c1N0cm9uZykgeworICAgICAgICAgICAgY29tcGFyaXNvbkZhaWwgPSBzdHJvbmdGYWlsQmxvY2s7
CisgICAgICAgICAgICB3ZWFrRmFpbCA9IHJlbG9vcEJsb2NrOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGlzQnJhbmNoKQorICAgICAgICAgICAgICAgIGNvbXBhcmlzb25GYWls
ID0gZmFpbHVyZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wYXJpc29u
RmFpbCA9IGZhaWxCbG9jazsKKyAgICAgICAgICAgIHdlYWtGYWlsID0gZmFpbHVyZTsKKyAgICAg
ICAgfQorICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGJlZ2luQmxvY2s7CisgICAgICAgIEFpcjo6
QmFzaWNCbG9jayogZG9uZUJsb2NrOworICAgICAgICBzcGxpdEJsb2NrKGJlZ2luQmxvY2ssIGRv
bmVCbG9jayk7CisgICAgICAgIAorICAgICAgICBhcHBlbmQoQWlyOjpKdW1wKTsKKyAgICAgICAg
YmVnaW5CbG9jay0+c2V0U3VjY2Vzc29ycyhyZWxvb3BCbG9jayk7CisgICAgICAgIAorICAgICAg
ICByZWxvb3BCbG9jay0+YXBwZW5kKGxvYWRMaW5rT3Bjb2RlKHdpZHRoLCBhdG9taWMtPmhhc0Zl
bmNlKCkpLCBtX3ZhbHVlLCB2YWx1ZVJlc3VsdFRtcCwgYWRkcmVzcyk7CisgICAgICAgIHJlbG9v
cEJsb2NrLT5hcHBlbmQoT1BDT0RFX0ZPUl9DQU5PTklDQUxfV0lEVEgoQnJhbmNoLCB3aWR0aCks
IG1fdmFsdWUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCB2YWx1ZVJl
c3VsdFRtcCwgZXhwZWN0ZWRWYWx1ZVRtcCk7CisgICAgICAgIHJlbG9vcEJsb2NrLT5zZXRTdWNj
ZXNzb3JzKGNvbXBhcmlzb25GYWlsLCBzdG9yZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIHN0
b3JlQmxvY2stPmFwcGVuZChzdG9yZUNvbmRPcGNvZGUod2lkdGgsIGF0b21pYy0+aGFzRmVuY2Uo
KSksIG1fdmFsdWUsIG5ld1ZhbHVlVG1wLCBhZGRyZXNzLCBzdWNjZXNzQm9vbFJlc3VsdFRtcCk7
CisgICAgICAgIGlmIChpc0JyYW5jaCkgeworICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5k
KEJyYW5jaFRlc3QzMiwgbV92YWx1ZSwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJv
KSwgYm9vbFJlc3VsdFRtcCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgICAgIHN0b3JlQmxv
Y2stPnNldFN1Y2Nlc3NvcnMoc3VjY2Vzcywgd2Vha0ZhaWwpOworICAgICAgICAgICAgZG9uZUJs
b2NrLT5zdWNjZXNzb3JzKCkuY2xlYXIoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFk
b25lQmxvY2stPnNpemUoKSk7CisgICAgICAgICAgICBkb25lQmxvY2stPmFwcGVuZChBaXI6Ok9v
cHMsIG1fdmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGlzU3Ryb25n
KSB7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwgbV92
YWx1ZSwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgc3VjY2Vzc0Jvb2xSZXN1
bHRUbXAsIEFyZzo6Yml0SW1tKC0xKSk7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+c2V0
U3VjY2Vzc29ycyhzdWNjZXNzQmxvY2ssIHJlbG9vcEJsb2NrKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBzdWNjZXNzQmxvY2stPmFwcGVuZChNb3ZlLCBtX3ZhbHVlLCBBcmc6
OmltbSghaW52ZXJ0KSwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICAgICAgc3VjY2Vzc0Js
b2NrLT5hcHBlbmQoQWlyOjpKdW1wLCBtX3ZhbHVlKTsKKyAgICAgICAgICAgICAgICBzdWNjZXNz
QmxvY2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFpbnZlcnQpCisgICAgICAgICAgICAgICAgICAgIHN0b3JlQmxv
Y2stPmFwcGVuZChYb3IzMiwgbV92YWx1ZSwgQXJnOjpiaXRJbW0oMSksIGJvb2xSZXN1bHRUbXAs
IGJvb2xSZXN1bHRUbXApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0b3Jl
QmxvY2stPmFwcGVuZChBaXI6Okp1bXAsIG1fdmFsdWUpOworICAgICAgICAgICAgICAgIHN0b3Jl
QmxvY2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZmFpbEJsb2NrLT5hcHBlbmQoTW92ZSwgbV92YWx1ZSwgQXJnOjpp
bW0oaW52ZXJ0KSwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICBmYWlsQmxvY2stPmFwcGVu
ZChBaXI6Okp1bXAsIG1fdmFsdWUpOworICAgICAgICAgICAgZmFpbEJsb2NrLT5zZXRTdWNjZXNz
b3JzKGRvbmVCbG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpc1N0cm9u
ZykgeworICAgICAgICAgICAgVG1wIHRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAg
ICAgc3Ryb25nRmFpbEJsb2NrLT5hcHBlbmQoc3RvcmVDb25kT3Bjb2RlKHdpZHRoLCBhdG9taWMt
Pmhhc0ZlbmNlKCkpLCBtX3ZhbHVlLCB2YWx1ZVJlc3VsdFRtcCwgYWRkcmVzcywgdG1wKTsKKyAg
ICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwgbV92YWx1ZSwg
QXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgdG1wLCBBcmc6OmJpdEltbSgtMSkp
OworICAgICAgICAgICAgc3Ryb25nRmFpbEJsb2NrLT5zZXRTdWNjZXNzb3JzKGZhaWxCbG9jaywg
cmVsb29wQmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgYXBwZW5kVm9p
ZEF0b21pYyhBaXI6Ok9wY29kZSBhdG9taWNPcGNvZGUpCisgICAgeworICAgICAgICBpZiAobV91
c2VDb3VudHMubnVtVXNlcyhtX3ZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihtX3ZhbHVlKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChpc1ZhbGlkRm9ybShhdG9taWNPcGNvZGUsIEFyZzo6SW1tLCBhZGRyZXNzLmtp
bmQoKSkgJiYgaW1tKG1fdmFsdWUtPmNoaWxkKDApKSkgeworICAgICAgICAgICAgYXBwZW5kKGF0
b21pY09wY29kZSwgaW1tKG1fdmFsdWUtPmNoaWxkKDApKSwgYWRkcmVzcyk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzVmFsaWRG
b3JtKGF0b21pY09wY29kZSwgQXJnOjpUbXAsIGFkZHJlc3Mua2luZCgpKSkgeworICAgICAgICAg
ICAgYXBwZW5kKGF0b21pY09wY29kZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgYWRkcmVzcyk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kR2VuZXJhbEF0b21pYyhB
aXI6Ok9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0g
bV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgIAorICAgICAgICBBcmcgYWRkcmVz
cyA9IGFkZHIobV92YWx1ZSk7CisgICAgICAgIFRtcCBvbGRWYWx1ZSA9IG1fY29kZS5uZXdUbXAo
R1ApOworICAgICAgICBUbXAgbmV3VmFsdWUgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFdlIG5lZWQgYSBDQVMgbG9vcCBvciBhIExML1NDIGxvb3AuIFVzaW5nIHBy
ZXBhcmUvYXR0ZW1wdCBqYXJnb24sIHdlIHdhbnQ6CisgICAgICAgIC8vCisgICAgICAgIC8vIEJs
b2NrICNyZWxvb3A6CisgICAgICAgIC8vICAgICBQcmVwYXJlCisgICAgICAgIC8vICAgICBvcGNv
ZGUKKyAgICAgICAgLy8gICAgIEF0dGVtcHQKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiBUaGVu
OiNkb25lLCBFbHNlOiNyZWxvb3AKKyAgICAgICAgLy8gQmxvY2sgI2RvbmU6CisgICAgICAgIC8v
ICAgICBNb3ZlIG9sZFZhbHVlLCByZXN1bHQKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChyZWxh
eGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCBvbGRWYWx1ZSwgdG1wKGF0b21pYykpOwor
ICAgICAgICAKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiByZWxvb3BCbG9jayA9IG5ld0Jsb2Nr
KCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogYmVnaW5CbG9jazsKKyAgICAgICAgQWlyOjpC
YXNpY0Jsb2NrKiBkb25lQmxvY2s7CisgICAgICAgIHNwbGl0QmxvY2soYmVnaW5CbG9jaywgZG9u
ZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChBaXI6Okp1bXApOworICAgICAgICBi
ZWdpbkJsb2NrLT5zZXRTdWNjZXNzb3JzKHJlbG9vcEJsb2NrKTsKKyAgICAgICAgCisgICAgICAg
IEFpcjo6T3Bjb2RlIHByZXBhcmVPcGNvZGU7CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkgeworICAgICAgICAgICAg
Y2FzZSBXaWR0aDg6CisgICAgICAgICAgICAgICAgcHJlcGFyZU9wY29kZSA9IExvYWQ4U2lnbmVk
RXh0ZW5kVG8zMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2lk
dGgxNjoKKyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTG9hZDE2U2lnbmVkRXh0ZW5k
VG8zMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2lkdGgzMjoK
KyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTW92ZTMyOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAgICAgICAgIHByZXBh
cmVPcGNvZGUgPSBNb3ZlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsK
KyAgICAgICAgICAgIG9wY29kZSA9IGxvYWRMaW5rT3Bjb2RlKGF0b21pYy0+b3BlcmF0aW9uV2lk
dGgoKSwgYXRvbWljLT5oYXNGZW5jZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZWxvb3BCbG9j
ay0+YXBwZW5kKHByZXBhcmVPcGNvZGUsIG1fdmFsdWUsIGFkZHJlc3MsIG9sZFZhbHVlKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChvcGNvZGUgIT0gQWlyOjpOb3ApIHsKKyAgICAgICAgICAgIGlm
IChpbW0oYXRvbWljLT5jaGlsZCgwKSkgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwg
QXJnOjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5k
KG9wY29kZSwgbV92YWx1ZSwgaW1tKGF0b21pYy0+Y2hpbGQoMCkpLCBvbGRWYWx1ZSwgbmV3VmFs
dWUpOworICAgICAgICAgICAgZWxzZSBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwg
QXJnOjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5k
KG9wY29kZSwgbV92YWx1ZSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCBvbGRWYWx1ZSwgbmV3VmFs
dWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVsb29wQmxvY2stPmFw
cGVuZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCBtX3ZhbHVlLCBvbGRWYWx1
ZSwgbmV3VmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChpbW0oYXRvbWljLT5jaGlsZCgwKSkg
JiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpUbXApKQorICAgICAgICAgICAg
ICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKG9wY29kZSwgbV92YWx1ZSwgaW1tKGF0b21pYy0+
Y2hpbGQoMCkpLCBuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKG9wY29kZSwgbV92YWx1ZSwgdG1wKGF0b21pYy0+
Y2hpbGQoMCkpLCBuZXdWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgQWlyOjpPcGNvZGUgY2FzT3Bjb2RlID0gT1BD
T0RFX0ZPUl9XSURUSChCcmFuY2hBdG9taWNTdHJvbmdDQVMsIGF0b21pYy0+b3BlcmF0aW9uV2lk
dGgoKSk7CisgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlw
ZShhdG9taWMtPnR5cGUoKSksIG1fdmFsdWUsIG9sZFZhbHVlLCBtX2VheCk7CisgICAgICAgICAg
ICByZWxvb3BCbG9jay0+YXBwZW5kKGNhc09wY29kZSwgbV92YWx1ZSwgQXJnOjpzdGF0dXNDb25k
KE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNzKSwgbV9lYXgsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7Cisg
ICAgICAgICAgICBUbXAgYm9vbFJlc3VsdCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAg
ICAgcmVsb29wQmxvY2stPmFwcGVuZChzdG9yZUNvbmRPcGNvZGUoYXRvbWljLT5vcGVyYXRpb25X
aWR0aCgpLCBhdG9taWMtPmhhc0ZlbmNlKCkpLCBtX3ZhbHVlLCBuZXdWYWx1ZSwgYWRkcmVzcywg
Ym9vbFJlc3VsdCk7CisgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3Qz
MiwgbV92YWx1ZSwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYm9vbFJlc3Vs
dCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgfQorICAgICAgICByZWxvb3BCbG9jay0+c2V0
U3VjY2Vzc29ycyhkb25lQmxvY2ssIHJlbG9vcEJsb2NrKTsKKyAgICB9CisgICAgCiAgICAgdm9p
ZCBsb3dlcigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CkBA
IC0xOTcxLDMwICsyMzcxLDUwIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIExvYWQ6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92
YWx1ZSwgbW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVl
KSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gbV92
YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUg
PSBBaXI6Ok9vcHM7CisgICAgICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKSB7CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChtZW1vcnktPnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNh
c2UgSW50MzI6CisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IExvYWRBY3EzMjsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAg
ICAgICAgICAgICAgICAgb3Bjb2RlID0gTG9hZEFjcTY0OworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBvcGNv
ZGUgPSBtb3ZlRm9yVHlwZShtZW1vcnktPnR5cGUoKSk7CisgICAgICAgICAgICBhcHBlbmQodHJh
cHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1f
dmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIExvYWQ4UzogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdCht
X3ZhbHVlLCBMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRt
cChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIg
OiBMb2FkOFNpZ25lZEV4dGVuZFRvMzI7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0
KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIExvYWQ4Wjog
ewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkOCwgbV92YWx1
ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29k
ZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRB
Y3E4IDogTG9hZDg7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9w
Y29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIExvYWQxNlM6IHsKLSAgICAgICAg
ICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMiwg
bV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/
IExvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIgOiBMb2FkMTZTaWduZWRFeHRlbmRUbzMyOworICAg
ICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFk
ZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBMb2FkMTZaOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBp
bmdJbnN0KG1fdmFsdWUsIExvYWQxNiwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFs
dWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1v
cnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3ExNiA6IExvYWQxNjsKKyAgICAgICAgICAg
IGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFs
dWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotCisg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBZGQ6IHsKICAgICAgICAgICAgIGlmICh0cnlBcHBl
bmRMZWEoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMDkyLDcgKzI1MTIsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzQ2hpbGwoKSkKICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOwogICAgICAgICAgICAgaWYgKGlzSW50KG1f
dmFsdWUtPnR5cGUoKSkgJiYgaXNYODYoKSkgewotICAgICAgICAgICAgICAgIGxvd2VyWDg2RGl2
KERpdik7CisgICAgICAgICAgICAgICAgYXBwZW5kWDg2RGl2KERpdik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQVNTRVJUKCFpc1g4NigpIHx8
IGlzRmxvYXQobV92YWx1ZS0+dHlwZSgpKSk7CkBAIC0yMTAzLDcgKzI1MjMsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgIGNhc2UgVURpdjogewogICAgICAgICAgICAgaWYgKGlzSW50KG1fdmFsdWUt
PnR5cGUoKSkgJiYgaXNYODYoKSkgewotICAgICAgICAgICAgICAgIGxvd2VyWDg2VURpdihVRGl2
KTsKKyAgICAgICAgICAgICAgICBhcHBlbmRYODZVRGl2KFVEaXYpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMjExNywxMyArMjUzNywxMyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIE1vZDogewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYo
KSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV92YWx1ZS0+aXNDaGlsbCgpKTsKLSAg
ICAgICAgICAgIGxvd2VyWDg2RGl2KE1vZCk7CisgICAgICAgICAgICBhcHBlbmRYODZEaXYoTW9k
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVU1vZDog
ewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7Ci0gICAgICAgICAgICBsb3dl
clg4NlVEaXYoVU1vZCk7CisgICAgICAgICAgICBhcHBlbmRYODZVRGl2KFVNb2QpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIxNjIsMTAgKzI1ODIsMjggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBhcHBlbmRVbk9wPE5vdDMyLCBOb3Q2ND4obV92YWx1ZS0+Y2hp
bGQoMCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gVGhpcyBwYXR0ZXJuIGlzIHN1cGVyIHVzZWZ1bCBvbiBib3Ro
IHg4NiBhbmQgQVJNNjQsIHNpbmNlIHRoZSBpbnZlcnNpb24gb2YgdGhlIENBUyByZXN1bHQKKyAg
ICAgICAgICAgIC8vIGNhbiBiZSBkb25lIHdpdGggemVybyBjb3N0IG9uIHg4NiAoanVzdCBmbGlw
IHRoZSBzZXQgZnJvbSBFIHRvIE5FKSBhbmQgaXQncyBhIHByb2dyZXNzaW9uCisgICAgICAgICAg
ICAvLyBvbiBBUk02NCAoc2luY2UgU1RYIHJldHVybnMgMCBvbiBzdWNjZXNzLCBzbyBvcmRpbmFy
aWx5IHdlIGhhdmUgdG8gZmxpcCBpdCkuCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MSktPmlzSW50KDEpCisgICAgICAgICAgICAgICAgJiYgaXNBdG9taWNDQVMobV92YWx1ZS0+Y2hp
bGQoMCktPm9wY29kZSgpKQorICAgICAgICAgICAgICAgICYmIGNhbkJlSW50ZXJuYWwobV92YWx1
ZS0+Y2hpbGQoMCkpKSB7CisgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobV92YWx1ZS0+
Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIGFwcGVuZENBUyhtX3ZhbHVlLT5jaGlsZCgwKSwg
dHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCiAgICAgICAgICAgICBhcHBlbmRCaW5PcDxYb3IzMiwgWG9yNjQsIFhvckRvdWJsZSwgWG9y
RmxvYXQsIENvbW11dGF0aXZlPigKICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwg
bV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBEZXBlbmQ6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGlzQVJNNjQoKSk7CisgICAgICAgICAgICBhcHBlbmRVbk9wPERlcGVuZDMyLCBEZXBlbmQ2
ND4obV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBTaGw6IHsKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+
aXNJbnQzMigxKSkgewpAQCAtMjI2Niw3ICsyNzA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGFwcGVuZFN0b3JlKHZhbHVlVG9T
dG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBlbmRTdG9yZShtX3ZhbHVlLCBh
ZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMjg3
LDcgKzI3MjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kU3RvcmUoQWly
OjpTdG9yZTgsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBl
bmRTdG9yZShtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC0yMzA4LDcgKzI3NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYXBwZW5kU3RvcmUoQWlyOjpTdG9yZTE2LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkp
OworICAgICAgICAgICAgYXBwZW5kU3RvcmUobV92YWx1ZSwgYWRkcihtX3ZhbHVlKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjQxNiw3ICsyODU0LDIyIEBAIHByaXZh
dGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEVxdWFsOgotICAgICAgICBjYXNlIE5vdEVx
dWFsOgorICAgICAgICBjYXNlIE5vdEVxdWFsOiB7CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUworICAgICAgICAgICAgICAgICYm
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKQorICAgICAg
ICAgICAgICAgICYmIGNhbkJlSW50ZXJuYWwobV92YWx1ZS0+Y2hpbGQoMCkpKSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKCFtX2xvY2tlZC5jb250YWlucyhtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMSkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5zKG1fdmFs
dWUtPmNoaWxkKDEpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY29tbWl0
SW50ZXJuYWwobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIGFwcGVuZENBUyht
X3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+b3Bjb2RlKCkgPT0gTm90RXF1YWwpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKG1fdmFsdWUpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
TGVzc1RoYW46CiAgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CiAgICAgICAgIGNhc2UgTGVzc0Vx
dWFsOgpAQCAtMjcyNyw2ICszMTgwLDQwIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIEJyYW5jaDogeworICAgICAgICAgICAgaWYgKGNhbkJlSW50ZXJuYWwobV92YWx1ZS0+
Y2hpbGQoMCkpKSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIGJyYW5jaENoaWxkID0gbV92YWx1
ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChicmFuY2hDaGlsZC0+b3Bjb2Rl
KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAgICAgICAg
ICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAg
YXBwZW5kQ0FTKGJyYW5jaENoaWxkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNTdHJv
bmdDQVM6CisgICAgICAgICAgICAgICAgICAgIC8vIEEgYnJhbmNoIGlzIGEgY29tcGFyaXNvbiB0
byB6ZXJvLgorICAgICAgICAgICAgICAgICAgICBpZiAoYnJhbmNoQ2hpbGQtPmNoaWxkKDApLT5p
c0ludCgwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwoYnJhbmNo
Q2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ0FTKGJyYW5jaENoaWxkLCB0
cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgICAgICAgICBjYXNlIE5vdEVxdWFs
OgorICAgICAgICAgICAgICAgICAgICBpZiAoYnJhbmNoQ2hpbGQtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBBdG9taWNTdHJvbmdDQVMKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGNhbkJlSW50
ZXJuYWwoYnJhbmNoQ2hpbGQtPmNoaWxkKDApKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYg
YnJhbmNoQ2hpbGQtPmNoaWxkKDApLT5jaGlsZCgwKSA9PSBicmFuY2hDaGlsZC0+Y2hpbGQoMSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkLT5jaGls
ZCgwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRDQVMoYnJhbmNoQ2hpbGQtPmNo
aWxkKDApLCBicmFuY2hDaGlsZC0+b3Bjb2RlKCkgPT0gTm90RXF1YWwpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVu
ZChjcmVhdGVCcmFuY2gobV92YWx1ZS0+Y2hpbGQoMCkpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMjc4NCw3ICszMjcxLDgxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBh
cHBlbmQoQWlyOjpFbnRyeVN3aXRjaCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAgIGNhc2Ug
QXRvbWljU3Ryb25nQ0FTOiB7CisgICAgICAgICAgICBhcHBlbmRDQVMobV92YWx1ZSwgZmFsc2Up
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBBdG9taWNYY2hnQWRkOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0g
bV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0
b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY0FkZCwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgp
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBB
cmcgYWRkcmVzcyA9IGFkZHIoYXRvbWljKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29k
ZSA9IE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljWGNoZ0FkZCwgYXRvbWljLT5vcGVyYXRpb25XaWR0
aCgpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBhZGRy
ZXNzLmtpbmQoKSkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBl
KGF0b21pYy0+dHlwZSgpKSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCB0bXAoYXRvbWljKSk7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGF0b21pYyksIGFkZHJlc3MpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXBwZW5k
R2VuZXJhbEF0b21pYyhPUENPREVfRk9SX0NBTk9OSUNBTF9XSURUSChBZGQsIGF0b21pYy0+b3Bl
cmF0aW9uV2lkdGgoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKKyAgICAg
ICAgY2FzZSBBdG9taWNYY2hnU3ViOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWlj
ID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9p
ZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY1N1YiwgYXRvbWljLT5vcGVyYXRpb25XaWR0
aCgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfQ0FOT05JQ0FMX1dJRFRIKFN1YiwgYXRv
bWljLT5vcGVyYXRpb25XaWR0aCgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6IHsKKyAgICAgICAgICAg
IEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAg
ICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljQW5kLCBh
dG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9DQU5P
TklDQUxfV0lEVEgoQW5kLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljWGNo
Z09yOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRv
bWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9S
X1dJRFRIKEF0b21pY09yLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9t
aWMoT1BDT0RFX0ZPUl9DQU5PTklDQUxfV0lEVEgoT3IsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgo
KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBBdG9taWNYY2hnWG9yOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWlj
ID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9p
ZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY1hvciwgYXRvbWljLT5vcGVyYXRpb25XaWR0
aCgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfQ0FOT05JQ0FMX1dJRFRIKFhvciwgYXRv
bWljLT5vcGVyYXRpb25XaWR0aCgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hjaGc6IHsKKyAgICAgICAgICAgIEF0
b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisgICAgICAgICAg
ICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBPUENPREVfRk9SX1dJRFRIKEF0b21pY1hjaGcsIGF0b21p
Yy0+b3BlcmF0aW9uV2lkdGgoKSk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2Rl
LCBBcmc6OlRtcCwgYWRkcmVzcy5raW5kKCkpKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKHJl
bGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUoKSksIHRtcChhdG9taWMtPmNoaWxkKDApKSwg
dG1wKGF0b21pYykpOworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChhdG9taWMp
LCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9DQU5P
TklDQUxfV0lEVEgoWG9yLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjc5Miw2NCArMzM1Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBjb3VsZCBub3QgbG93ZXIgIiwgZGVlcER1bXAobV9w
cm9jZWR1cmUsIG1fdmFsdWUpLCAiXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9Ci0KLSAgICB2b2lkIGxvd2VyWDg2RGl2KEIzOjpPcGNvZGUgb3ApCi0g
ICAgewotI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCi0gICAgICAgIFRtcCBlYXggPSBUbXAo
WDg2UmVnaXN0ZXJzOjplYXgpOwotICAgICAgICBUbXAgZWR4ID0gVG1wKFg4NlJlZ2lzdGVyczo6
ZWR4KTsKLQotICAgICAgICBBaXI6Ok9wY29kZSBjb252ZXJ0VG9Eb3VibGVXb3JkOwotICAgICAg
ICBBaXI6Ok9wY29kZSBkaXY7Ci0gICAgICAgIHN3aXRjaCAobV92YWx1ZS0+dHlwZSgpKSB7Ci0g
ICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2
Q29udmVydFRvRG91YmxlV29yZDMyOwotICAgICAgICAgICAgZGl2ID0gWDg2RGl2MzI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIGNvbnZlcnRU
b0RvdWJsZVdvcmQgPSBYODZDb252ZXJ0VG9RdWFkV29yZDY0OwotICAgICAgICAgICAgZGl2ID0g
WDg2RGl2NjQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBBU1NFUlQob3AgPT0gRGl2IHx8IG9wID09IE1vZCk7Ci0gICAg
ICAgIFg4NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCByZXN1bHQgPSBvcCA9PSBEaXYgPyBYODZSZWdp
c3RlcnM6OmVheCA6IFg4NlJlZ2lzdGVyczo6ZWR4OwotCi0gICAgICAgIGFwcGVuZChNb3ZlLCB0
bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBlYXgpOwotICAgICAgICBhcHBlbmQoY29udmVydFRvRG91
YmxlV29yZCwgZWF4LCBlZHgpOwotICAgICAgICBhcHBlbmQoZGl2LCBlYXgsIGVkeCwgdG1wKG1f
dmFsdWUtPmNoaWxkKDEpKSk7Ci0gICAgICAgIGFwcGVuZChNb3ZlLCBUbXAocmVzdWx0KSwgdG1w
KG1fdmFsdWUpKTsKLQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAg
VU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICB2b2lkIGxv
d2VyWDg2VURpdihCMzo6T3Bjb2RlIG9wKQotICAgIHsKLSNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2
XzY0KQotICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4KTsKLSAgICAgICAg
VG1wIGVkeCA9IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7Ci0KLSAgICAgICAgQWlyOjpPcGNvZGUg
ZGl2ID0gbV92YWx1ZS0+dHlwZSgpID09IEludDMyID8gWDg2VURpdjMyIDogWDg2VURpdjY0Owot
Ci0gICAgICAgIEFTU0VSVChvcCA9PSBVRGl2IHx8IG9wID09IFVNb2QpOwotICAgICAgICBYODZS
ZWdpc3RlcnM6OlJlZ2lzdGVySUQgcmVzdWx0ID0gb3AgPT0gVURpdiA/IFg4NlJlZ2lzdGVyczo6
ZWF4IDogWDg2UmVnaXN0ZXJzOjplZHg7Ci0KLSAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChtX3Zh
bHVlLT5jaGlsZCgwKSksIGVheCk7Ci0gICAgICAgIGFwcGVuZChYb3I2NCwgZWR4LCBlZHgpOwot
ICAgICAgICBhcHBlbmQoZGl2LCBlYXgsIGVkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7Ci0g
ICAgICAgIGFwcGVuZChNb3ZlLCBUbXAocmVzdWx0KSwgdG1wKG1fdmFsdWUpKTsKLSNlbHNlCi0g
ICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9S
TSgpOwotI2VuZGlmCi0gICAgfQotCisgICAgCiAgICAgSW5kZXhTZXQ8VmFsdWU+IG1fbG9ja2Vk
OyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBBaXIuCiAgICAg
SW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRo
YXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSogd2l0aCBhIG5v
bi1udWxsIFRtcCBpcyAicGlubmVkIi4KICAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBtX3BoaVRv
VG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgpAQCAtMjg2NCw3ICszMzY4LDcgQEAg
cHJpdmF0ZToKIAogICAgIFZlY3RvcjxWZWN0b3I8SW5zdCwgND4+IG1faW5zdHM7CiAgICAgVmVj
dG9yPEluc3Q+IG1fcHJvbG9ndWU7Ci0KKyAgICAKICAgICBCMzo6QmFzaWNCbG9jayogbV9ibG9j
azsKICAgICBib29sIG1faXNSYXJlOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CkBAIC0yODc1LDYg
KzMzNzksMTIgQEAgcHJpdmF0ZToKIAogICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CiAgICAg
Q29kZSYgbV9jb2RlOworCisgICAgQWlyOjpCbG9ja0luc2VydGlvblNldCBtX2Jsb2NrSW5zZXJ0
aW9uU2V0OworCisgICAgVG1wIG1fZWF4OworICAgIFRtcCBtX2VjeDsKKyAgICBUbXAgbV9lZHg7
CiB9OwogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MzAgKzM0LDQ4IEBAIE1lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQogewogfQogCitUeXBlIE1l
bW9yeVZhbHVlOjphY2Nlc3NUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAoaXNMb2FkKCkpCisgICAg
ICAgIHJldHVybiB0eXBlKCk7CisgICAgLy8gVGhpcyBoYXBwZW5zIHRvIHdvcmsgZm9yIGF0b21p
Y3MsIHRvby4gVGhhdCdzIHdoeSBBdG9taWNWYWx1ZSBkb2VzIG5vdCBuZWVkIHRvIG92ZXJyaWRl
IHRoaXMuCisgICAgcmV0dXJuIGNoaWxkKDApLT50eXBlKCk7Cit9CisKK0JhbmsgTWVtb3J5VmFs
dWU6OmFjY2Vzc0JhbmsoKSBjb25zdAoreworICAgIHJldHVybiBiYW5rRm9yVHlwZShhY2Nlc3NU
eXBlKCkpOworfQorCiBzaXplX3QgTWVtb3J5VmFsdWU6OmFjY2Vzc0J5dGVTaXplKCkgY29uc3QK
IHsKKyAgICByZXR1cm4gYnl0ZXMoYWNjZXNzV2lkdGgoKSk7Cit9CisKK1dpZHRoIE1lbW9yeVZh
bHVlOjpsb2FkU3RvcmVXaWR0aCgpIGNvbnN0Cit7CiAgICAgc3dpdGNoIChvcGNvZGUoKSkgewog
ICAgIGNhc2UgTG9hZDhaOgogICAgIGNhc2UgTG9hZDhTOgogICAgIGNhc2UgU3RvcmU4OgotICAg
ICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIFdpZHRoODsKICAgICBjYXNlIExvYWQxNlo6
CiAgICAgY2FzZSBMb2FkMTZTOgogICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgcmV0dXJuIDI7
CisgICAgICAgIHJldHVybiBXaWR0aDE2OwogICAgIGNhc2UgTG9hZDoKLSAgICAgICAgcmV0dXJu
IHNpemVvZlR5cGUodHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlwZSh0eXBlKCkp
OwogICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgIHJldHVybiBzaXplb2ZUeXBlKGNoaWxkKDApLT50
eXBlKCkpOworICAgICAgICByZXR1cm4gd2lkdGhGb3JUeXBlKGNoaWxkKDApLT50eXBlKCkpOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gV2lkdGg4OwogICAgIH0KIH0KIAogV2lkdGgg
TWVtb3J5VmFsdWU6OmFjY2Vzc1dpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gd2lkdGhGb3JC
eXRlcyhhY2Nlc3NCeXRlU2l6ZSgpKTsKKyAgICByZXR1cm4gbG9hZFN0b3JlV2lkdGgoKTsKIH0K
IAogdm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKQEAgLTY3LDYgKzg1LDggQEAgdm9pZCBNZW1vcnlWYWx1ZTo6ZHVt
cE1ldGEoQ29tbWFQcmludGVyJgogICAgIGlmICgoaXNMb2FkKCkgJiYgZWZmZWN0cygpLnJlYWRz
ICE9IHJhbmdlKCkpCiAgICAgICAgIHx8IChpc1N0b3JlKCkgJiYgZWZmZWN0cygpLndyaXRlcyAh
PSByYW5nZSgpKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAicmFuZ2UgPSAiLCByYW5nZSgp
KTsKKyAgICBpZiAoZmVuY2VSYW5nZSgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJmZW5j
ZVJhbmdlID0gIiwgZmVuY2VSYW5nZSgpKTsKIH0KIAogVmFsdWUqIE1lbW9yeVZhbHVlOjpjbG9u
ZUltcGwoKSBjb25zdApAQCAtNzQsNiArOTQsNTggQEAgVmFsdWUqIE1lbW9yeVZhbHVlOjpjbG9u
ZUltcGwoKSBjb25zdAogICAgIHJldHVybiBuZXcgTWVtb3J5VmFsdWUoKnRoaXMpOwogfQogCisv
LyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkg
b2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisvLyBkZXNjcmliZXMgdGhlIHJl
dHVybmVkIHR5cGUpLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQpCisgICAg
OiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAg
LCBtX29mZnNldChvZmZzZXQpCit7CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAg
ICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6Cisg
ICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAg
QVNTRVJUKHR5cGUgPT0gSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmU6CisgICAg
ICAgICAgICBBU1NFUlQodHlwZSA9PSBWb2lkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKKy8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4g
dHlwZSBpcyBpbXBsaWVkLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0KQorICAgIDogTWVtb3J5
VmFsdWUoa2luZCwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KQoreworICAgIGlmICgh
QVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgeworICAg
ICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9h
ZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVzLgorTWVtb3J5VmFsdWU6Ok1l
bW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSog
cG9pbnRlciwgaW50MzJfdCBvZmZzZXQpCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5k
LCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICwgbV9vZmZzZXQob2Zmc2V0KQor
eworICAgIEFTU0VSVChCMzo6aXNTdG9yZShraW5kLm9wY29kZSgpKSk7Cit9CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMwogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNDggKzI3LDE3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNC
YW5rLmgiCiAjaW5jbHVkZSAiQjNIZWFwUmFuZ2UuaCIKICNpbmNsdWRlICJCM1ZhbHVlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi0vLyBGSVhNRTogV2Ugd2FudCB0byBh
bGxvdyBmZW5jZWQgbWVtb3J5IGFjY2Vzc2VzIG9uIEFSTS4KLS8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzNDkKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUg
TWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGFj
Y2VwdHMoS2luZCBraW5kKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7
Ci0gICAgICAgIGNhc2UgTG9hZDhaOgotICAgICAgICBjYXNlIExvYWQ4UzoKLSAgICAgICAgY2Fz
ZSBMb2FkMTZaOgotICAgICAgICBjYXNlIExvYWQxNlM6Ci0gICAgICAgIGNhc2UgTG9hZDoKLSAg
ICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBT
dG9yZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wg
aXNTdG9yZShLaW5kIGtpbmQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkp
IHsKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAg
Y2FzZSBTdG9yZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGlj
IGJvb2wgaXNMb2FkKEtpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhY2NlcHRzKGtp
bmQpICYmICFpc1N0b3JlKGtpbmQpOworICAgICAgICByZXR1cm4gaXNNZW1vcnlBY2Nlc3Moa2lu
ZC5vcGNvZGUoKSk7CiAgICAgfQogCiAgICAgfk1lbW9yeVZhbHVlKCk7CkBAIC03OCw3NiArNDcs
NTYgQEAgcHVibGljOgogCiAgICAgY29uc3QgSGVhcFJhbmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmFuZ2U7IH0KICAgICB2b2lkIHNldFJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2Up
IHsgbV9yYW5nZSA9IHJhbmdlOyB9CisgICAgCisgICAgLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3Ig
cmFuZ2UuCisgICAgY29uc3QgSGVhcFJhbmdlJiBhY2Nlc3NSYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IHJhbmdlKCk7IH0KKyAgICB2b2lkIHNldEFjY2Vzc1JhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFu
Z2UpIHsgc2V0UmFuZ2UocmFuZ2UpOyB9CisgICAgCisgICAgY29uc3QgSGVhcFJhbmdlJiBmZW5j
ZVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9mZW5jZVJhbmdlOyB9CisgICAgdm9pZCBzZXRGZW5j
ZVJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9mZW5jZVJhbmdlID0gcmFuZ2U7IH0K
KworICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIEIzOjppc1N0b3JlKG9wY29kZSgp
KTsgfQorICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyByZXR1cm4gQjM6OmlzTG9hZChvcGNvZGUo
KSk7IH0KIAotICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBWb2lk
OyB9Ci0gICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgIT0gVm9pZDsgfQor
ICAgIGJvb2wgaGFzRmVuY2UoKSBjb25zdCB7IHJldHVybiAhIWZlbmNlUmFuZ2UoKTsgfQogCisg
ICAgVHlwZSBhY2Nlc3NUeXBlKCkgY29uc3Q7CisgICAgQmFuayBhY2Nlc3NCYW5rKCkgY29uc3Q7
CiAgICAgc2l6ZV90IGFjY2Vzc0J5dGVTaXplKCkgY29uc3Q7Ci0gICAgV2lkdGggYWNjZXNzV2lk
dGgoKSBjb25zdDsKKyAgICAKKyAgICAvLyBTbGlnaHRseSBmYXN0ZXIgdmVyc2lvbiBvZiBhY2Nl
c3NXaWR0aCwgaWYgeW91IGtub3cgdGhhdCB5b3UncmUgd29ya2luZyB3aXRoIGEgbG9hZCBvciBz
dG9yZS4KKyAgICBXaWR0aCBsb2FkU3RvcmVXaWR0aCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1
YWwgV2lkdGggYWNjZXNzV2lkdGgoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZHVt
cE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBWYWx1ZSogY2xvbmVJbXBsKCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKLQotICAgIC8vIFVzZSB0aGlzIGZvcm0g
Zm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhh
dCBoYXZlIGEgc3VmZml4IHRoYXQKLSAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUp
LgotICAgIE1lbW9yeVZhbHVlKEtpbmQga2luZCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAgICA6IFZhbHVlKENoZWNr
ZWRPcGNvZGUsIGtpbmQsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZVRh
ZywgS2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGludDMyX3Qgb2Zmc2V0LCBB
cmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtp
bmQsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQogICAgICAgICAsIG1fb2Zmc2V0KG9mZnNl
dCkKLSAgICAgICAgLCBtX3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCiAgICAgewotICAgICAgICBp
ZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgp
KSB7Ci0gICAgICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIExvYWQ4WjoKLSAgICAgICAgICAgIGNhc2UgTG9hZDhTOgotICAgICAgICAg
ICAgY2FzZSBMb2FkMTZaOgotICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgotICAgICAgICAgICAg
ICAgIEFTU0VSVCh0eXBlID09IEludDMyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgU3RvcmU4OgotICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICAg
ICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBWb2lkKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICB9
CisgICAgCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExv
YWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorICAgIC8v
IGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCisgICAgTWVtb3J5VmFsdWUoS2luZCwgVHlw
ZSwgT3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKTsKIAogICAgIC8v
IFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVk
LgotICAgIE1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50
ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAgOiBNZW1vcnlWYWx1ZShraW5kLCBJbnQz
Miwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpCi0gICAgewotICAgIH0KKyAgICBNZW1vcnlWYWx1
ZShLaW5kLCBPcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOwogCiAg
ICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVzLgotICAgIE1lbW9yeVZhbHVlKEtpbmQga2lu
ZCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBv
ZmZzZXQgPSAwKQotICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIFZvaWQsIG9y
aWdpbiwgdmFsdWUsIHBvaW50ZXIpCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAg
ICAsIG1fcmFuZ2UoSGVhcFJhbmdlOjp0b3AoKSkKLSAgICB7Ci0gICAgICAgIGlmICghQVNTRVJU
X0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAg
ICAgICAgIGNhc2UgU3RvcmU4OgotICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICAg
ICAgY2FzZSBTdG9yZToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KKyAgICBNZW1vcnlW
YWx1ZShLaW5kLCBPcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qg
b2Zmc2V0ID0gMCk7CisgICAgCiAgICAgaW50MzJfdCBtX29mZnNldCB7IDAgfTsKLSAgICBIZWFw
UmFuZ2UgbV9yYW5nZTsKKyAgICBIZWFwUmFuZ2UgbV9yYW5nZSB7IEhlYXBSYW5nZTo6dG9wKCkg
fTsKKyAgICBIZWFwUmFuZ2UgbV9mZW5jZVJhbmdlIHsgSGVhcFJhbmdlKCkgfTsKIH07CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNv
ZGUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYzLDYgKzI2MywzMyBAQCB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3BjCiAgICAgY2FzZSBTdG9yZToKICAgICAgICAg
b3V0LnByaW50KCJTdG9yZSIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBdG9taWNXZWFr
Q0FTOgorICAgICAgICBvdXQucHJpbnQoIkF0b21pY1dlYWtDQVMiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAgICBvdXQucHJpbnQoIkF0b21pY1N0
cm9uZ0NBUyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAg
ICAgICBvdXQucHJpbnQoIkF0b21pY1hjaGdBZGQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQXRvbWljWGNoZ0FuZDoKKyAgICAgICAgb3V0LnByaW50KCJBdG9taWNYY2hnQW5kIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAgb3V0LnByaW50
KCJBdG9taWNYY2hnT3IiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXRvbWljWGNoZ1N1
YjoKKyAgICAgICAgb3V0LnByaW50KCJBdG9taWNYY2hnU3ViIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgICAgIG91dC5wcmludCgiQXRvbWljWGNoZ1hv
ciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBdG9taWNYY2hnOgorICAgICAgICBvdXQu
cHJpbnQoIkF0b21pY1hjaGciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRGVwZW5kOgor
ICAgICAgICBvdXQucHJpbnQoIkRlcGVuZCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBX
YXNtQWRkcmVzczoKICAgICAgICAgb3V0LnByaW50KCJXYXNtQWRkcmVzcyIpOwogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMjEy
OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkIz
VHlwZS5oIgorI2luY2x1ZGUgIkIzV2lkdGguaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTgyLDcgKzgzLDYgQEAgZW51bSBP
cGNvZGUgOiBpbnQxNl90IHsKICAgICBNb2QsIC8vIEFsbCBiZXRzIGFyZSBvZmYgYXMgdG8gd2hh
dCB3aWxsIGhhcHBlbiB3aGVuIHlvdSBleGVjdXRlIHRoaXMgZm9yIC0yXjMxJS0xIGFuZCB4JTAu
CiAgICAgVU1vZCwKIAotCiAgICAgLy8gUG9seW1vcnBoaWMgbmVnYXRpb24uIE5vdGUgdGhhdCB3
ZSBvbmx5IG5lZWQgdGhpcyBmb3IgZmxvYXRpbmcgcG9pbnQsIHNpbmNlIGludGVnZXIgbmVnYXRp
b24KICAgICAvLyBpcyBleGFjdGx5IGxpa2UgU3ViKDAsIHgpLiBCdXQgdGhhdCdzIG5vdCB0cnVl
IGZvciBmbG9hdGluZyBwb2ludC4gU3ViKDAsIDApIGlzIDAsIHdoaWxlCiAgICAgLy8gTmVnKDAp
IGlzIC0wLiBBbHNvLCB3ZSBjYW5vbmljYWxpemUgU3ViKDAsIHgpIGludG8gTmVnKHgpIGluIGNh
c2Ugb2YgaW50ZWdlcnMuCkBAIC0xNjIsNiArMTYyLDEwNyBAQCBlbnVtIE9wY29kZSA6IGludDE2
X3QgewogICAgIFN0b3JlMTYsCiAgICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGljIHN0b3JlIGZv
ciBJbnQzMiwgSW50NjQsIEZsb2F0LCBhbmQgRG91YmxlLgogICAgIFN0b3JlLAorICAgIAorICAg
IC8vIEF0b21pYyBjb21wYXJlIGFuZCBzd2FwIHRoYXQgcmV0dXJucyBhIGJvb2xlYW4uIE1heSBj
aG9vc2UgdG8gZG8gbm90aGluZyBhbmQgcmV0dXJuIGZhbHNlLiBZb3UgY2FuCisgICAgLy8gdXN1
YWxseSBhc3N1bWUgdGhhdCB0aGlzIGlzIGZhc3RlciBhbmQgcmVzdWx0cyBpbiBsZXNzIGNvZGUg
dGhhbiBBdG9taWNTdHJvbmdDQVMsIHRob3VnaCB0aGF0J3MKKyAgICAvLyBub3QgbmVjZXNzYXJp
bHkgdHJ1ZSBvbiBJbnRlbCwgaWYgaW5zdHJ1Y3Rpb24gc2VsZWN0aW9uIGRvZXMgaXRzIGpvYi4g
SW1hZ2luZSB0aGF0IHRoaXMgb3Bjb2RlIGlzCisgICAgLy8gYXMgaWYgeW91IGRpZCB0aGlzIGF0
b21pY2FsbHk6CisgICAgLy8KKyAgICAvLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIC8vIGJv
b2wgQXRvbWljV2Vha0NBUyhUIGV4cGVjdGVkVmFsdWUsIFQgbmV3VmFsdWUsIFQqIHB0cikKKyAg
ICAvLyB7CisgICAgLy8gICAgIGlmICghcmFuZCgpKQorICAgIC8vICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBSZWFsIHdvcmxkIGV4YW1wbGUgb2YgdGhpczogY29udGV4dCBzd2l0Y2ggb24gQVJN
IHdoaWxlIGRvaW5nIENBUy4KKyAgICAvLyAgICAgaWYgKCpwdHIgIT0gZXhwZWN0ZWRWYWx1ZSkK
KyAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyAgICAgKnB0ciA9IG5ld1ZhbHVl
OworICAgIC8vICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBOb3Rl
IHRoYXQgYWxsIGF0b21pY3MgcHV0IHRoZSBwb2ludGVyIGxhc3QgdG8gYmUgY29uc2lzdGVudCB3
aXRoIGhvdyBsb2FkcyBhbmQgc3RvcmVzIHdvcmsuIFRoaXMKKyAgICAvLyBpcyBhIGdvb2Z5IHRy
YWRpdGlvbiwgYnV0IGl0J3MgaGFybWxlc3MsIGFuZCBiZXR0ZXIgdGhhbiBiZWluZyBpbmNvbnNp
c3RlbnQuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgd2VhayBDQVMgaGFzIG5vIGZlbmNpbmcg
Z3VhcmFudGVlcyB3aGVuIGl0IGZhaWxzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZwor
ICAgIC8vIHRyYW5zZm9ybWF0aW9uIGlzIGFsd2F5cyB2YWxpZDoKKyAgICAvLworICAgIC8vIEJl
Zm9yZToKKyAgICAvLworICAgIC8vICAgICAgICAgQnJhbmNoKEF0b21pY1dlYWtDQVMoZXhwZWN0
ZWQsIG5ldywgcHRyKSkKKyAgICAvLyAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiNzdWNjZXNzLCBF
bHNlOiNmYWlsCisgICAgLy8KKyAgICAvLyBBZnRlcjoKKyAgICAvLworICAgIC8vICAgICAgICAg
QnJhbmNoKEVxdWFsKExvYWQocHRyKSwgZXhwZWN0ZWQpKQorICAgIC8vICAgICAgIFN1Y2Nlc3Nv
cnM6IFRoZW46I2F0dGVtcHQsIEVsc2U6I2ZhaWwKKyAgICAvLyAgICAgQkIjYXR0ZW1wdDoKKyAg
ICAvLyAgICAgICAgIEJyYW5jaChBdG9taWNXZWFrQ0FTKGV4cGVjdGVkLCBuZXcsIHB0cikpCisg
ICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhlbjojc3VjY2VzcywgRWxzZTojZmFpbAorICAgIC8v
CisgICAgLy8gQm90aCBraW5kcyBvZiBDQVMgZm9yIG5vbi1jYW5vbmljYWwgd2lkdGhzIChXaWR0
aDggYW5kIFdpZHRoMTYpIGlnbm9yZSB0aGUgaXJyZWxldmFudCBiaXRzIG9mIHRoZQorICAgIC8v
IGlucHV0LgorICAgIEF0b21pY1dlYWtDQVMsCisgICAgCisgICAgLy8gQXRvbWljIGNvbXBhcmUg
YW5kIHN3YXAgdGhhdCByZXR1cm5zIHRoZSBvbGQgdmFsdWUuIERvZXMgbm90IGhhdmUgdGhlIG5v
bmRldGVybWluaXNtIG9mIFdlYWtDQVMuCisgICAgLy8gVGhpcyBpcyBhIGJpdCBtb3JlIGNvZGUg
YW5kIGEgYml0IHNsb3dlciBpbiBzb21lIGNhc2VzLCB0aG91Z2ggbm90IGJ5IGEgbG90LiBJbWFn
aW5lIHRoYXQgdGhpcworICAgIC8vIG9wY29kZSBpcyBhcyBpZiB5b3UgZGlkIHRoaXMgYXRvbWlj
YWxseToKKyAgICAvLworICAgIC8vIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgLy8gVCBBdG9t
aWNTdHJvbmdDQVMoVCBleHBlY3RlZFZhbHVlLCBUIG5ld1ZhbHVlLCBUKiBwdHIpCisgICAgLy8g
eworICAgIC8vICAgICBUIG9sZFZhbHVlID0gKnB0cjsKKyAgICAvLyAgICAgaWYgKG9sZFZhbHVl
ID09IGV4cGVjdGVkVmFsdWUpCisgICAgLy8gICAgICAgICAqcHRyID0gbmV3VmFsdWU7CisgICAg
Ly8gICAgIHJldHVybiBvbGRWYWx1ZQorICAgIC8vIH0KKyAgICAvLworICAgIC8vIE5vdGUgdGhh
dCBBdG9taWNXZWFrQ0FTIGFuZCBBdG9taWNTdHJvbmdDQVMgc29ydCBvZiBoYXZlIHRoaXMga2lu
ZCBvZiBlcXVpdmFsZW5jZToKKyAgICAvLworICAgIC8vIEF0b21pY1dlYWtDQVMoQGV4cCwgQG5l
dywgQHB0cikgPT0gRXF1YWwoQXRvbWljU3Ryb25nQ0FTKEBleHAsIEBuZXcsIEBwdHIpLCBAZXhw
KQorICAgIC8vCisgICAgLy8gQXNzdW1pbmcgdGhhdCB0aGUgV2Vha0NBUyBkb2VzIG5vdCBzcHVy
aW91c2x5IGZhaWwsIG9mIGNvdXJzZS4KKyAgICBBdG9taWNTdHJvbmdDQVMsCisgICAgCisgICAg
Ly8gQXRvbWljYWxseSBfX18gYSBtZW1vcnkgbG9jYXRpb24gYW5kIHJldHVybiB0aGUgb2xkIHZh
bHVlLiBTeW50YXg6CisgICAgLy8KKyAgICAvLyBAb2xkVmFsdWUgPSBBdG9taWNYY2hnX19fKEBv
cGVyYW5kLCBAcHRyKQorICAgIC8vCisgICAgLy8gRm9yIG5vbi1jYW5vbmljYWwgd2lkdGhzIChX
aWR0aDggYW5kIFdpZHRoMTYpLCB0aGVzZSByZXR1cm4gc2lnbi1leHRlbmRlZCByZXN1bHRzIGFu
ZCBpZ25vcmUgdGhlCisgICAgLy8gaXJyZWxldmFudCBiaXRzIG9mIHRoZWlyIGlucHV0cy4KKyAg
ICBBdG9taWNYY2hnQWRkLAorICAgIEF0b21pY1hjaGdBbmQsCisgICAgQXRvbWljWGNoZ09yLAor
ICAgIEF0b21pY1hjaGdTdWIsCisgICAgQXRvbWljWGNoZ1hvciwKKyAgICAKKyAgICAvLyBGSVhN
RTogTWF5YmUgd2Ugc2hvdWxkIGhhdmUgQXRvbWljWGNoZ05lZyBhbmQgQXRvbWljWGNoZ05vdC4K
KyAgICAKKyAgICAvLyBBdG9taWNhbGx5IGV4Y2hhbmdlIGEgdmFsdWUgd2l0aCBhIG1lbW9yeSBs
b2NhdGlvbi4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQG9sZFZhbHVlID0gQXRvbWljWGNoZyhA
bmV3VmFsdWUsIEBwdHIpCisgICAgQXRvbWljWGNoZywKKyAgICAKKyAgICAvLyBJbnRyb2R1Y2Ug
YW4gaW52aXNpYmxlIGRlcGVuZGVuY3kgZm9yIGJsb2NraW5nIG1vdGlvbiBvZiBsb2FkcyB3aXRo
IHJlc3BlY3QgdG8gZWFjaCBvdGhlci4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQHJlc3VsdCA9
IERlcGVuZChAcGhhbnRvbSkKKyAgICAvLworICAgIC8vIFRoaXMgaXMgZXZlbnR1YWxseSBjb2Rl
Z2VuZXJhdGVkIHRvIGhhdmUgbG9jYWwgc2VtYW50aWNzIGFzIGlmIHdlIGRpZDoKKyAgICAvLwor
ICAgIC8vIEByZXN1bHQgPSAkMAorICAgIC8vCisgICAgLy8gQnV0IGl0IGVuc3VyZXMgdGhhdCB0
aGUgdXNlcnMgb2YgQHJlc3VsdCBjYW5ub3QgZXhlY3V0ZSB1bnRpbCBAcGhhbnRvbSBpcyBjb21w
dXRlZC4KKyAgICAvLworICAgIC8vIFRoZSBjb21waWxlciBpcyBub3QgYWxsb3dlZCB0byByZWFz
b24gYWJvdXQgdGhlIGZhY3QgdGhhdCBEZXBlbmQgY29kZWdlbmVyYXRlcyB0aGlzIHdheS4gQW55
IGtpbmQKKyAgICAvLyBvZiB0cmFuc2Zvcm1hdGlvbiBvciBhbmFseXNpcyB0aGF0IHJlbGllcyBv
biB0aGUgaW5zaWdodCB0aGF0IERlcGVuZCBpcyByZWFsbHkgemVybyBpcyB1bnNvdW5kLAorICAg
IC8vIGJlY2F1c2UgaXQgdW5sb2NrcyByZW9yZGVyaW5nIG9mIHVzZXJzIG9mIEByZXN1bHQgYW5k
IEBwaGFudG9tLgorICAgIC8vCisgICAgLy8gT24gWDg2LCB0aGlzIGlzIGxvd2VyZWQgdG8gYSBs
b2FkLWxvYWQgZmVuY2UgYW5kIEByZXN1bHQgdXNlcyBAcGhhbnRvbSBkaXJlY3RseS4KKyAgICAv
LworICAgIC8vIE9uIEFSTSwgdGhpcyBpcyBsb3dlcmVkIGFzIGlmIGxpa2U6CisgICAgLy8KKyAg
ICAvLyBAcmVzdWx0ID0gQml0WG9yKEBwaGFudG9tLCBAcGhhbnRvbSkKKyAgICAvLworICAgIC8v
IEV4Y2VwdCB0aGF0IHRoZSBjb21waWxlciBuZXZlciBnZXRzIGFuIG9wcG9ydHVuaXR5IHRvIHNp
bXBsaWZ5IG91dCB0aGUgQml0WG9yLgorICAgIERlcGVuZCwKIAogICAgIC8vIFRoaXMgaXMgdXNl
ZCB0byBjb21wdXRlIHRoZSBhY3R1YWwgYWRkcmVzcyBvZiBhIFdhc20gbWVtb3J5IG9wZXJhdGlv
bi4gSXQgdGFrZXMgYW4gSW50UHRyCiAgICAgLy8gYW5kIGEgcGlubmVkIHJlZ2lzdGVyIHRoZW4g
Y29tcHV0ZXMgdGhlIGFwcHJvcHJpYXRlIEludFB0ciBhZGRyZXNzLiBGb3IgdGhlIHVzZS1jYXNl
IG9mCkBAIC0zMDEsNiArNDAyLDExMCBAQCBpbmxpbmUgYm9vbCBpc0RlZmluaXRlbHlUZXJtaW5h
bChPcGNvZGUgCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBpc0xvYWQoT3Bjb2RlIG9wY29kZSkK
K3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgTG9hZDhaOgorICAgIGNhc2UgTG9h
ZDhTOgorICAgIGNhc2UgTG9hZDE2WjoKKyAgICBjYXNlIExvYWQxNlM6CisgICAgY2FzZSBMb2Fk
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc1N0b3JlKE9wY29kZSBvcGNvZGUpCit7Cisg
ICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIFN0b3JlODoKKyAgICBjYXNlIFN0b3JlMTY6
CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNMb2FkU3RvcmUo
T3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgTG9hZDha
OgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2WjoKKyAgICBjYXNlIExvYWQxNlM6
CisgICAgY2FzZSBMb2FkOgorICAgIGNhc2UgU3RvcmU4OgorICAgIGNhc2UgU3RvcmUxNjoKKyAg
ICBjYXNlIFN0b3JlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0F0b21pYyhPcGNvZGUg
b3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBBdG9taWNXZWFrQ0FT
OgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAg
ICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBB
dG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hj
aGc6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzQXRvbWljQ0FTKE9wY29kZSBvcGNvZGUp
Cit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAg
Y2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzQXRvbWlj
WGNoZyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBB
dG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21pY1hj
aGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgor
ICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNNZW1vcnlB
Y2Nlc3MoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICByZXR1cm4gaXNBdG9taWMob3Bjb2RlKSB8fCBp
c0xvYWRTdG9yZShvcGNvZGUpOworfQorCitpbmxpbmUgT3Bjb2RlIHNpZ25FeHRlbmRPcGNvZGUo
V2lkdGggd2lkdGgpCit7CisgICAgc3dpdGNoICh3aWR0aCkgeworICAgIGNhc2UgV2lkdGg4Ogor
ICAgICAgICByZXR1cm4gU0V4dDg7CisgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICByZXR1cm4g
U0V4dDE2OworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBPb3BzOworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNiArMjAyLDggQEAg
dm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogICAgICAgICB9CiAgICAg
ICAgIGRhdGFMb2coIiAgICAiLCBkZWVwRHVtcCgqdGhpcywgdmFsdWUpLCAiXG4iKTsKICAgICB9
CisgICAgaWYgKGhhc1F1aXJrcygpKQorICAgICAgICBvdXQucHJpbnQoIkhhcyBRdWlya3M6IFRy
dWVcbiIpOwogICAgIGlmICh2YXJpYWJsZXMoKS5zaXplKCkpIHsKICAgICAgICAgb3V0LnByaW50
KCJWYXJpYWJsZXM6XG4iKTsKICAgICAgICAgZm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiB2YXJp
YWJsZXMoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3IEBAIHB1YmxpYzoKICAgICBWYWx1ZSogYWRk
SW50Q29uc3RhbnQoT3JpZ2luLCBUeXBlLCBpbnQ2NF90IHZhbHVlKTsKICAgICBWYWx1ZSogYWRk
SW50Q29uc3RhbnQoVmFsdWUqLCBpbnQ2NF90IHZhbHVlKTsKIAorICAgIC8vIFlvdSdyZSBndWFy
YW50ZWVkIHRoYXQgYm90dG9tIGlzIHplcm8uCiAgICAgVmFsdWUqIGFkZEJvdHRvbShPcmlnaW4s
IFR5cGUpOwogICAgIFZhbHVlKiBhZGRCb3R0b20oVmFsdWUqKTsKIApAQCAtMTk1LDYgKzE5Niwx
MiBAQCBwdWJsaWM6CiAgICAgLy8gYWxpdmUuIEdyZWF0IGZvciBjb21waWxlci1nZW5lcmF0ZWQg
ZGF0YSBzZWN0aW9ucywgbGlrZSBzd2l0Y2gganVtcCB0YWJsZXMgYW5kIGNvbnN0YW50IHBvb2xz
LgogICAgIC8vIFRoaXMgcmV0dXJucyBtZW1vcnkgdGhhdCBoYXMgYmVlbiB6ZXJvLWluaXRpYWxp
emVkLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFkZERhdGFTZWN0aW9uKHNpemVfdCk7
CisgICAgCisgICAgLy8gU29tZSBvcGVyYXRpb25zIGFyZSBzcGVjaWZpZWQgaW4gQjMgSVIgdG8g
YmVoYXZlIG9uZSB3YXkgYnV0IG9uIHRoaXMgZ2l2ZW4gQ1BVIHRoZXkgYmVoYXZlIGEKKyAgICAv
LyBkaWZmZXJlbnQgd2F5LiBXaGVuIHRydWUsIHRob3NlIEIzIElSIG9wcyBzd2l0Y2ggdG8gYmVo
YXZpbmcgdGhlIENQVSB3YXksIGFuZCB0aGUgb3B0aW1pemVyIG1heQorICAgIC8vIHN0YXJ0IHRh
a2luZyBhZHZhbnRhZ2Ugb2YgaXQuCisgICAgYm9vbCBoYXNRdWlya3MoKSBjb25zdCB7IHJldHVy
biBtX2hhc1F1aXJrczsgfQorICAgIHZvaWQgc2V0SGFzUXVpcmtzKGJvb2wgdmFsdWUpIHsgbV9o
YXNRdWlya3MgPSB2YWx1ZTsgfQogCiAgICAgT3BhcXVlQnlwcm9kdWN0cyYgYnlwcm9kdWN0cygp
IHsgcmV0dXJuICptX2J5cHJvZHVjdHM7IH0KIApAQCAtMjUyLDYgKzI1OSw3IEBAIHByaXZhdGU6
CiAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChQcmludFN0cmVhbSYsIE9yaWdpbik+PiBtX29y
aWdpblByaW50ZXI7CiAgICAgY29uc3Qgdm9pZCogbV9mcm9udGVuZERhdGE7CiAgICAgUENUb09y
aWdpbk1hcCBtX3BjVG9PcmlnaW5NYXA7CisgICAgYm9vbCBtX2hhc1F1aXJrcyB7IGZhbHNlIH07
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJC
M0F0b21pY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1
ZGUgIkIzQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJCM0NvbXB1dGVEaXZpc2lvbk1h
Z2ljLmgiCkBAIC02MDIsNyArNjAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIE5lZzoKICAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogTmVnKGNvbnN0YW50KQogICAgICAgICAgICAgLy8gSW50byB0
aGlzOiAtY29uc3RhbnQKQEAgLTEyOTUsNiArMTI5NiwxNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9wcm9jLmhhc1F1aXJrcygpKSB7CisgICAgICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChBdG9taWNYY2hnX19fKQorICAgICAgICAgICAg
ICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXworICAgICAgICAgICAgICAgIGlmIChpc0F0
b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpKQorICAgICAgICAgICAgICAgICAg
ICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRvbWljVmFsdWU+KCktPm9wZXJhdGlvbldpZHRo
KCkgPT0gV2lkdGg4KSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHko
bV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBj
YXNlIFNFeHQxNjoKQEAgLTEzNDMsNiArMTM1NCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghbV9wcm9jLmhhc1F1aXJrcygpKSB7CisgICAgICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBTRXh0MTYoQXRvbWljWGNoZ19fXykKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IEF0b21pY1hjaGdfX18KKyAgICAgICAgICAgICAgICBpZiAoaXNBdG9taWNYY2hnKG1fdmFs
dWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+
Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVlPigpLT5vcGVyYXRpb25XaWR0aCgpID09IFdpZHRoMTYp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGls
ZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgU0V4dDMyOgpA
QCAtMjEwMSwyMiArMjEyMiwyNSBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobV92YWx1ZS0+
bnVtQ2hpbGRyZW4oKSA+PSAyKTsKICAgICAgICAgCiAgICAgICAgIC8vIExlYXZlIGl0IGFsb25l
IGlmIHRoZSByaWdodCBjaGlsZCBpcyBhIGNvbnN0YW50LgotICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMSktPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5p
c0NvbnN0YW50KCkKKyAgICAgICAgICAgIHx8IG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9
PSBBdG9taWNTdHJvbmdDQVMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAg
ICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzQ29uc3RhbnQoKSkgeworICAgICAgICBhdXRvIHN3
YXAgPSBbJl0gKCkgewogICAgICAgICAgICAgc3RkOjpzd2FwKG1fdmFsdWUtPmNoaWxkKDApLCBt
X3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAg
IGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJu
IHN3YXAoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2Rl
KCkgPT0gQXRvbWljU3Ryb25nQ0FTKQorICAgICAgICAgICAgcmV0dXJuIHN3YXAoKTsKKyAgICAg
ICAgCiAgICAgICAgIC8vIFNvcnQgdGhlIG9wZXJhbmRzLiBUaGlzIGlzIGFuIGltcG9ydGFudCBj
YW5vbmljYWxpemF0aW9uLiBXZSB1c2UgdGhlIGluZGV4IGluc3RlYWQgb2YKICAgICAgICAgLy8g
dGhlIGFkZHJlc3MgdG8gbWFrZSB0aGlzIGF0IGxlYXN0IHNsaWdodGx5IGRldGVybWluaXN0aWMu
Ci0gICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aW5kZXgoKSA+IG1fdmFsdWUtPmNoaWxk
KDEpLT5pbmRleCgpKSB7Ci0gICAgICAgICAgICBzdGQ6OnN3YXAobV92YWx1ZS0+Y2hpbGQoMCks
IG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDAp
LT5pbmRleCgpID4gbV92YWx1ZS0+Y2hpbGQoMSktPmluZGV4KCkpCisgICAgICAgICAgICByZXR1
cm4gc3dhcCgpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgYmUg
YSBmb3J3YXJkIGFuYWx5c2lzLiBJbnN0ZWFkLCB3ZSB1c2VzIGEgYm91bmRlZC1zZWFyY2ggYmFj
a3dhcmRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBaXJDb2RlLmgi
CiAjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNBdG9taWNWYWx1
ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJCM0RvbWlu
YXRvcnMuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCkBAIC0zNDYsNiArMzQ3LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09
IDEsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNo
aWxkKDApLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAg
ICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBMb2FkOgpAQCAtMzUzLDYgKzM1NSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2
YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgp
ID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsdWUtPnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3Rh
Y2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBTdG9yZTg6CkBAIC0zNjIsNiArMzY1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBv
aW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nl
c3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTdG9y
ZToKQEAgLTM2OSw4ICszNzMsNDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwg
KCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgp
ID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVGZW5j
ZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1dlYWtDQVM6Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaXNDaGlsbCgpLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigp
ID09IDMsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUt
PnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT5j
aGlsZCgwKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+Y2hpbGQoMiktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2
YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlQXRvbWljKHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAgICAgICAgICAgIFZB
TElEQVRFKCF2YWx1ZS0+a2luZCgpLmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAzLCAoIkF0ICIsICp2
YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUt
PmNoaWxkKDApLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAq
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+dHlwZSgpKSwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQo
MiktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIHZhbGlkYXRlQXRvbWljKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0
YWNrQWNjZXNzKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQXRvbWljWGNoZ0FkZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAg
ICAgICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnU3Vi
OgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICAgICAgY2FzZSBBdG9t
aWNYY2hnOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmlzQ2hpbGwo
KSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVt
Q2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDApLT50eXBlKCksICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPnR5cGUoKSksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEp
LT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFj
a0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IERlcGVuZDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRy
YUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDApLT50eXBlKCksICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPnR5cGUo
KSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIFdhc21BZGRyZXNzOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2lu
ZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CkBAIC01
MzcsNiArNTgyLDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlRmVuY2UoVmFsdWUqIHZhbHVlKQorICAgIHsK
KyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsK
KyAgICAgICAgaWYgKG1lbW9yeS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIFZBTElEQVRFKG1l
bW9yeS0+YWNjZXNzQmFuaygpID09IEdQLCAoIkZlbmNlIGF0ICIsICptZW1vcnkpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZUF0b21pYyhWYWx1ZSogdmFsdWUpCisgICAgeworICAg
ICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAg
ICAgICAKKyAgICAgICAgVkFMSURBVEUoYmVzdFR5cGUoR1AsIGF0b21pYy0+b3BlcmF0aW9uV2lk
dGgoKSkgPT0gYXRvbWljLT5vcGVyYXRpb25UeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
fQogCiAgICAgdm9pZCB2YWxpZGF0ZVN0YWNrQWNjZXNzKFZhbHVlKiB2YWx1ZSkKICAgICB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkIzQXJndW1l
bnRSZWdWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQXRvbWljVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNCb3R0b21Qcm92aWRlci5oIgogI2luY2x1
ZGUgIkIzQ0NhbGxWYWx1ZS5oIgpAQCAtNTEwLDYgKzUxMSw3IEBAIGJvb2wgVmFsdWU6OnJldHVy
bnNCb29sKCkgY29uc3QKICAgICBjYXNlIEFib3ZlRXF1YWw6CiAgICAgY2FzZSBCZWxvd0VxdWFs
OgogICAgIGNhc2UgRXF1YWxPclVub3JkZXJlZDoKKyAgICBjYXNlIEF0b21pY1dlYWtDQVM6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgUGhpOgogICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGhhdmUgYSBzdG9yeSBoZXJlLgpAQCAtNTg5LDYgKzU5MSw3IEBAIEVmZmVjdHMgVmFs
dWU6OmVmZmVjdHMoKSBjb25zdAogICAgIGNhc2UgQmVsb3dFcXVhbDoKICAgICBjYXNlIEVxdWFs
T3JVbm9yZGVyZWQ6CiAgICAgY2FzZSBTZWxlY3Q6CisgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgRGl2OgogICAgIGNhc2UgVURpdjoKQEAgLTYwMCwxNiArNjAzLDQ0
IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgIGNhc2UgTG9hZDhTOgogICAg
IGNhc2UgTG9hZDE2WjoKICAgICBjYXNlIExvYWQxNlM6Ci0gICAgY2FzZSBMb2FkOgotICAgICAg
ICByZXN1bHQucmVhZHMgPSBhczxNZW1vcnlWYWx1ZT4oKS0+cmFuZ2UoKTsKKyAgICBjYXNlIExv
YWQ6IHsKKyAgICAgICAgY29uc3QgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVl
PigpOworICAgICAgICByZXN1bHQucmVhZHMgPSBtZW1vcnktPnJhbmdlKCk7CisgICAgICAgIGlm
IChtZW1vcnktPmhhc0ZlbmNlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC53cml0ZXMgPSBtZW1v
cnktPmZlbmNlUmFuZ2UoKTsKKyAgICAgICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CisgICAg
ICAgIH0KICAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICBi
cmVhazsKKyAgICB9CiAgICAgY2FzZSBTdG9yZTg6CiAgICAgY2FzZSBTdG9yZTE2OgotICAgIGNh
c2UgU3RvcmU6Ci0gICAgICAgIHJlc3VsdC53cml0ZXMgPSBhczxNZW1vcnlWYWx1ZT4oKS0+cmFu
Z2UoKTsKKyAgICBjYXNlIFN0b3JlOiB7CisgICAgICAgIGNvbnN0IE1lbW9yeVZhbHVlKiBtZW1v
cnkgPSBhczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LndyaXRlcyA9IG1lbW9yeS0+
cmFuZ2UoKTsKKyAgICAgICAgaWYgKG1lbW9yeS0+aGFzRmVuY2UoKSkgeworICAgICAgICAgICAg
cmVzdWx0LnJlYWRzID0gbWVtb3J5LT5mZW5jZVJhbmdlKCk7CisgICAgICAgICAgICByZXN1bHQu
ZmVuY2UgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5kZW50
ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXRvbWljV2Vha0NBUzoK
KyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAg
Y2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRv
bWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hn
OiB7CisgICAgICAgIGNvbnN0IEF0b21pY1ZhbHVlKiBhdG9taWMgPSBhczxBdG9taWNWYWx1ZT4o
KTsKKyAgICAgICAgcmVzdWx0LnJlYWRzID0gYXRvbWljLT5yYW5nZSgpIHwgYXRvbWljLT5mZW5j
ZVJhbmdlKCk7CisgICAgICAgIHJlc3VsdC53cml0ZXMgPSBhdG9taWMtPnJhbmdlKCkgfCBhdG9t
aWMtPmZlbmNlUmFuZ2UoKTsKKyAgICAgICAgaWYgKGF0b21pYy0+aGFzRmVuY2UoKSkKKyAgICAg
ICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5k
ZW50ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgV2FzbUFkZHJlc3M6
CiAgICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwpAQCAt
NjE3LDE4ICs2NDgsNyBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICAgICAg
Y29uc3QgRmVuY2VWYWx1ZSogZmVuY2UgPSBhczxGZW5jZVZhbHVlPigpOwogICAgICAgICByZXN1
bHQucmVhZHMgPSBmZW5jZS0+cmVhZDsKICAgICAgICAgcmVzdWx0LndyaXRlcyA9IGZlbmNlLT53
cml0ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIFByZXZlbnQga2lsbGluZyBvZiBmZW5jZXMgdGhh
dCBjbGFpbSBub3QgdG8gd3JpdGUgYW55dGhpbmcuIEl0J3MgYSBiaXQgd2VpcmQgdGhhdCB3ZSB1
c2UKLSAgICAgICAgLy8gbG9jYWwgc3RhdGUgYXMgdGhlIHdheSB0byBkbyB0aGlzLCBidXQgaXQg
aGFwcGVucyB0byB3b3JrOiB3ZSBtdXN0IGFzc3VtZSB0aGF0IHdlIGNhbm5vdAotICAgICAgICAv
LyBraWxsIHdyaXRlc0xvY2FsU3RhdGUgdW5sZXNzIHdlIHVuZGVyc3RhbmRzIGV4YWN0bHkgd2hh
dCB0aGUgaW5zdHJ1Y3Rpb24gaXMgZG9pbmcgKGxpa2UKLSAgICAgICAgLy8gdGhlIHdheSB0aGF0
IGZpeFNTQSB1bmRlcnN0YW5kcyBTZXQvR2V0IGFuZCB0aGUgd2F5IHRoYXQgcmVkdWNlU3RyZW5n
dGggYW5kIG90aGVycwotICAgICAgICAvLyB1bmRlcnN0YW5kIFVwc2lsb24pLiBUaGlzIHdvdWxk
IG9ubHkgYmVjb21lIGEgcHJvYmxlbSBpZiB3ZSBoYWQgc29tZSBhbmFseXNpcyB0aGF0IHdhcwot
ICAgICAgICAvLyBsb29raW5nIHRvIHVzZSB0aGUgd3JpdGVzTG9jYWxTdGF0ZSBiaXQgdG8gaW52
YWxpZGF0ZSBhIENTRSBvdmVyIGxvY2FsIHN0YXRlIG9wZXJhdGlvbnMuCi0gICAgICAgIC8vIFRo
ZW4gYSBGZW5jZSB3b3VsZCBsb29rIGJsb2NrLCBzYXksIHRoZSBlbGltaW5hdGlvbiBvZiBhIHJl
ZHVuZGFudCBHZXQuIEJ1dCBpdCBsaWtlCi0gICAgICAgIC8vIHRoYXQncyBub3QgYXQgYWxsIGhv
dyBvdXIgb3B0aW1pemF0aW9ucyBmb3IgU2V0L0dldC9VcHNpbG9uL1BoaSB3b3JrIC0gdGhleSBn
cm9rIHRoZWlyCi0gICAgICAgIC8vIG9wZXJhdGlvbnMgZGVlcGx5IGVub3VnaCB0aGF0IHRoZXkg
aGF2ZSBubyBuZWVkIHRvIGNoZWNrIHRoaXMgYml0IC0gc28gdGhpcyBjaGVhdCBpcwotICAgICAg
ICAvLyBmaW5lLgotICAgICAgICByZXN1bHQud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CisgICAg
ICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IENDYWxsOgpAQCAtNjk0LDYgKzcxNCw3IEBAIFZhbHVlS2V5IFZhbHVlOjprZXkoKSBjb25zdAog
ICAgIGNhc2UgQ2hlY2s6CiAgICAgY2FzZSBCaXR3aXNlQ2FzdDoKICAgICBjYXNlIE5lZzoKKyAg
ICBjYXNlIERlcGVuZDoKICAgICAgICAgcmV0dXJuIFZhbHVlS2V5KGtpbmQoKSwgdHlwZSgpLCBj
aGlsZCgwKSk7CiAgICAgY2FzZSBBZGQ6CiAgICAgY2FzZSBTdWI6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDEwIEBAIHB1Ymxp
YzoKICAgICAKICAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4ga2luZCgpLm9wY29k
ZSgpOyB9CiAgICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSBraW5kIGlzIG1lYW50IHRvIGJlIGlt
bXV0YWJsZS4gRG8gdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgdGhpcyBpcyBzYWZlLiBJdCdzIG5v
dAorICAgIC8vIHVzdWFsbHkgc2FmZS4KKyAgICB2b2lkIHNldEtpbmRVbnNhZmVseShLaW5kIGtp
bmQpIHsgbV9raW5kID0ga2luZDsgfQorICAgIAogICAgIC8vIEl0J3MgZ29vZCBwcmFjdGljZSB0
byBtaXJyb3IgS2luZCBtZXRob2RzIGhlcmUsIHNvIHlvdSBjYW4gc2F5IHZhbHVlLT5pc0JsYWgo
KQogICAgIC8vIGluc3RlYWQgb2YgdmFsdWUtPmtpbmQoKS5pc0JsYWgoKS4KICAgICBib29sIGlz
Q2hpbGwoKSBjb25zdCB7IHJldHVybiBraW5kKCkuaXNDaGlsbCgpOyB9CkBAIC0xMDcsNiArMTEx
LDggQEAgcHVibGljOgogICAgIC8vIHZhbHVlcyB3aXRoIElkZW50aXRpZXMgb24gYm90dG9tIGNv
bnN0YW50cy4gRm9yIHRoaXMgcmVhc29uLCB0aGlzIHRha2VzIGEgY2FsbGJhY2sgdGhhdCBpcwog
ICAgIC8vIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBib3R0b21zLiBUaGVyZSdzIGEgdXRpbGl0
eSBmb3IgdGhpcywgc2VlIEIzQm90dG9tUHJvdmlkZXIuaC4gWW91CiAgICAgLy8gY2FuIGFsc28g
YWNjZXNzIHRoYXQgdXRpbGl0eSB1c2luZyByZXBsYWNlV2l0aEJvdHRvbShJbnNlcnRpb25TZXQm
LCBzaXplX3QpLgorICAgIC8vCisgICAgLy8gWW91J3JlIGd1YXJhbnRlZWQgdGhhdCBib3R0b20g
aXMgemVyby4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCb3R0b21Qcm92aWRlcj4KICAgICB2b2lk
IHJlcGxhY2VXaXRoQm90dG9tKGNvbnN0IEJvdHRvbVByb3ZpZGVyJik7CiAgICAgCkBAIC0zMjEs
NiArMzI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJVG9GOgogICAgICAgICBjYXNlIEJp
dHdpc2VDYXN0OgogICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBEZXBlbmQ6CiAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkobnVtQXJncyAhPSAxKSkKICAgICAgICAgICAgICAgICBi
YWRLaW5kKGtpbmQsIG51bUFyZ3MpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDM4
IEBACiAKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIAorbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK1R5cGUgYmVzdFR5cGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0aCkKK3sK
KyAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgY2FzZSBXaWR0aDg6CisgICAgY2FzZSBXaWR0aDE2
OgorICAgIGNhc2UgV2lkdGgzMjoKKyAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgIGNh
c2UgR1A6CisgICAgICAgICAgICByZXR1cm4gSW50MzI7CisgICAgICAgIGNhc2UgRlA6CisgICAg
ICAgICAgICByZXR1cm4gRmxvYXQ7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgY2FzZSBXaWR0aDY0Ogor
ICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJl
dHVybiBJbnQ2NDsKKyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBEb3VibGU7
CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIFZvaWQ7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIFZvaWQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCiBuYW1l
c3BhY2UgV1RGIHsKIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6
QjM6OldpZHRoIHdpZHRoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Miw2ICs2MiwxOCBAQCBpbmxpbmUgV2lkdGggd2lkdGhGb3JUeXBlKFR5
cGUgdHlwZSkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAoraW5saW5lIFdpZHRoIGNh
bm9uaWNhbFdpZHRoKFdpZHRoIHdpZHRoKQoreworICAgIHJldHVybiBzdGQ6Om1heChXaWR0aDMy
LCB3aWR0aCk7Cit9CisKK2lubGluZSBib29sIGlzQ2Fub25pY2FsV2lkdGgoV2lkdGggd2lkdGgp
Cit7CisgICAgcmV0dXJuIHdpZHRoID49IFdpZHRoMzI7Cit9CisKK1R5cGUgYmVzdFR5cGUoQmFu
ayBiYW5rLCBXaWR0aCB3aWR0aCk7CisKIGlubGluZSBXaWR0aCBjb25zZXJ2YXRpdmVXaWR0aChC
YW5rIGJhbmspCiB7CiAgICAgcmV0dXJuIGJhbmsgPT0gR1AgPyBwb2ludGVyV2lkdGgoKSA6IFdp
ZHRoNjQ7CkBAIC05Myw2ICsxMDUsMjAgQEAgaW5saW5lIFdpZHRoIHdpZHRoRm9yQnl0ZXModW5z
aWduZWQgYnl0ZQogICAgIH0KIH0KIAoraW5saW5lIHVpbnQ2NF90IG1hc2soV2lkdGggd2lkdGgp
Cit7CisgICAgc3dpdGNoICh3aWR0aCkgeworICAgIGNhc2UgV2lkdGg4OgorICAgICAgICByZXR1
cm4gMHgwMDAwMDAwMDAwMDAwMGZmbGx1OworICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgcmV0
dXJuIDB4MDAwMDAwMDAwMDAwZmZmZmxsdTsKKyAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgIHJl
dHVybiAweDAwMDAwMDAwZmZmZmZmZmZsbHU7CisgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICBy
ZXR1cm4gMHhmZmZmZmZmZmZmZmZmZmZmbGx1OworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDcgQEAg
dW5zaWduZWQgQXJnOjpqc0hhc2goKSBjb25zdAogICAgIGNhc2UgUmVsQ29uZDoKICAgICBjYXNl
IFJlc0NvbmQ6CiAgICAgY2FzZSBEb3VibGVDb25kOgorICAgIGNhc2UgU3RhdHVzQ29uZDoKICAg
ICBjYXNlIFdpZHRoQXJnOgogICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1fb2Zmc2V0KTsKICAgICAgICAgYnJlYWs7CkBAIC0xODIsNiArMTgzLDkgQEAgdm9pZCBBcmc6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAg
ICAgIG91dC5wcmludChhc0RvdWJsZUNvbmRpdGlvbigpKTsKICAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgU3RhdHVzQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzU3RhdHVzQ29uZGl0aW9uKCkp
OworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBvdXQucHJpbnQo
cG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI0MSw2ICsyNDUs
OSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAgICAgY2FzZSBB
cmc6OkRvdWJsZUNvbmQ6CiAgICAgICAgIG91dC5wcmludCgiRG91YmxlQ29uZCIpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBcmc6OlN0YXR1c0NvbmQ6CisgICAgICAgIG91dC5wcmludCgi
U3RhdHVzQ29uZCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OlNwZWNpYWw6CiAg
ICAgICAgIG91dC5wcmludCgiU3BlY2lhbCIpOwogICAgICAgICByZXR1cm47CkBAIC0yODUsNiAr
MjkyLDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZwogICAgIGNh
c2UgQXJnOjpFYXJseURlZjoKICAgICAgICAgb3V0LnByaW50KCJFYXJseURlZiIpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBcmc6OkVhcmx5WkRlZjoKKyAgICAgICAgb3V0LnByaW50KCJF
YXJseVpEZWYiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpTY3JhdGNoOgogICAg
ICAgICBvdXQucHJpbnQoIlNjcmF0Y2giKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgUmVsQ29uZCwKICAgICAgICAgUmVzQ29uZCwKICAgICAg
ICAgRG91YmxlQ29uZCwKKyAgICAgICAgU3RhdHVzQ29uZCwKICAgICAgICAgU3BlY2lhbCwKICAg
ICAgICAgV2lkdGhBcmcKICAgICB9OwpAQCAtMTUxLDYgKzE1Miw4IEBAIHB1YmxpYzoKICAgICAg
ICAgLy8gYXMgVXNlIGhhcyB1bmRlZmluZWQgYmVoYXZpb3I6IHRoZSB1c2UgbWF5IGhhcHBlbiBi
ZWZvcmUgdGhlIGRlZiwgb3IgaXQgbWF5IGhhcHBlbiBhZnRlcgogICAgICAgICAvLyBpdC4KICAg
ICAgICAgRWFybHlEZWYsCisgICAgICAgICAgICAKKyAgICAgICAgRWFybHlaRGVmLAogCiAgICAg
ICAgIC8vIFNvbWUgaW5zdHJ1Y3Rpb25zIG5lZWQgYSBzY3JhdGNoIHJlZ2lzdGVyLiBXZSBtb2Rl
bCB0aGlzIGJ5IHNheWluZyB0aGF0IHRoZSB0ZW1wb3JhcnkgaXMKICAgICAgICAgLy8gZGVmaW5l
ZCBlYXJseSBhbmQgdXNlZCBsYXRlLiBUaGlzIHJvbGUgaW1wbGllcyB0aGF0LgpAQCAtMTg2LDYg
KzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZUFk
ZHI6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMjA2LDYgKzIxMCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBVc2VBZGRy
OgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAg
IGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjI4LDYgKzIzMyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNh
c2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJu
IHJvbGU7CiAgICAgICAgIGNhc2UgVXNlOgogICAgICAgICAgICAgcmV0dXJuIENvbGRVc2U7CkBA
IC0yNTMsNiArMjU5LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgogICAg
ICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2Ug
RWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjc0LDYgKzI4MSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgRWFybHlE
ZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjk0LDYgKzMwMiw3
IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6CiAg
ICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICBj
YXNlIFNjcmF0Y2g6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzE1
LDYgKzMyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBF
YXJseVpEZWY6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CkBAIC0zMzAsNiArMzQwLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFVz
ZUFkZHI6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAg
ICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAgY2Fz
ZSBMYXRlQ29sZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM1OCw2ICszNjks
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgWkRl
ZjoKICAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtNTMzLDYgKzU0NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCisgICAgc3RhdGljIEFyZyBzdGF0dXNDb25kKE1hY3JvQXNzZW1ibGVyOjpTdGF0
dXNDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IFN0YXR1c0NvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9
IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBzdGF0aWMg
QXJnIHNwZWNpYWwoQWlyOjpTcGVjaWFsKiBzcGVjaWFsKQogICAgIHsKICAgICAgICAgQXJnIHJl
c3VsdDsKQEAgLTY1OCwxMiArNjc4LDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBEb3VibGVDb25kOwogICAgIH0KIAorICAgIGJvb2wgaXNTdGF0dXNDb25kKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3RhdHVzQ29uZDsKKyAgICB9CisKICAg
ICBib29sIGlzQ29uZGl0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCgp
KSB7CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAg
ICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtODUxLDYgKzg3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAg
ICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKKyAgICAgICAgY2Fz
ZSBTdGF0dXNDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CiAgICAgICAgIGNhc2UgV2lkdGhB
cmc6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg3Miw2ICs4OTksNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBj
YXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgY2FzZSBT
cGVjaWFsOgogICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICBjYXNlIEludmFsaWQ6CkBA
IC0xMDU4LDYgKzEwODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAg
ICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2Ug
U3RhdHVzQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBjYXNlIFdpZHRoQXJn
OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTc3LDYgKzEyMDYsMTIgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRp
dGlvbj4obV9vZmZzZXQpOwogICAgIH0KICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6U3RhdHVz
Q29uZGl0aW9uIGFzU3RhdHVzQ29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc1N0YXR1c0NvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2Vt
Ymxlcjo6U3RhdHVzQ29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorICAgIAogICAgIC8vIFRl
bGxzIHlvdSBpZiB0aGUgQXJnIGlzIGludmVydGlibGUuIE9ubHkgY29uZGl0aW9uIGFyZ3VtZW50
cyBhcmUgaW52ZXJ0aWJsZSwgYW5kIGV2ZW4gZm9yIHRob3NlLCB0aGVyZQogICAgIC8vIGFyZSBh
IGZldyBleGNlcHRpb25zIC0gbm90YWJseSBPdmVyZmxvdyBhbmQgU2lnbmVkLgogICAgIGJvb2wg
aXNJbnZlcnRpYmxlKCkgY29uc3QKQEAgLTExODQsNiArMTIxOSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgc3dpdGNoIChraW5kKCkpIHsKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNl
IERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXI6OmlzSW52ZXJ0aWJsZShhc1Jlc3VsdENvbmRpdGlvbigpKTsKQEAgLTEyMDQsNiAr
MTI0MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiByZXNDb25kKE1hY3JvQXNzZW1i
bGVyOjppbnZlcnQoYXNSZXN1bHRDb25kaXRpb24oKSkpOwogICAgICAgICBjYXNlIERvdWJsZUNv
bmQ6CiAgICAgICAgICAgICByZXR1cm4gZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0
KGFzRG91YmxlQ29uZGl0aW9uKCkpKTsKKyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgorICAgICAg
ICAgICAgcmV0dXJuIHN0YXR1c0NvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc1N0YXR1c0Nv
bmRpdGlvbigpKSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAy
MTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1LDE5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UKIAogY29uc3QgY2hhciogY29uc3QgQmFzaWNCbG9jazo6ZHVtcFByZWZp
eCA9ICIjIjsKIAordm9pZCBCYXNpY0Jsb2NrOjpzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9j
ayB0YXJnZXQpCit7CisgICAgbV9zdWNjZXNzb3JzLnJlc2l6ZSgxKTsKKyAgICBtX3N1Y2Nlc3Nv
cnNbMF0gPSB0YXJnZXQ7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6c2V0U3VjY2Vzc29ycyhGcmVx
dWVudGVkQmxvY2sgdGFrZW4sIEZyZXF1ZW50ZWRCbG9jayBub3RUYWtlbikKK3sKKyAgICBtX3N1
Y2Nlc3NvcnMucmVzaXplKDIpOworICAgIG1fc3VjY2Vzc29yc1swXSA9IHRha2VuOworICAgIG1f
c3VjY2Vzc29yc1sxXSA9IG5vdFRha2VuOworfQorCiBib29sIEJhc2ljQmxvY2s6OmFkZFByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNz
b3IodGhpcywgYmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJC
YXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMsMTEg
QEAKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7Citu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNz
IEdlbmVyaWNCbG9ja0luc2VydGlvblNldDsKKworbmFtZXNwYWNlIEFpciB7CiAKIGNsYXNzIEJs
b2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgQ29kZTsKQEAgLTk5LDYgKzEwMyw5IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9z
dWNjZXNzb3JzOyB9CiAgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1f
c3VjY2Vzc29yczsgfQogCisgICAgdm9pZCBzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayk7
CisgICAgdm9pZCBzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jaywgRnJlcXVlbnRlZEJsb2Nr
KTsKKwogICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7IH0KICAgICBCYXNpY0Jsb2NrKiYg
c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCku
YmxvY2soKTsgfQogICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29y
TGlzdD4gc3VjY2Vzc29yQmxvY2tzKCkKQEAgLTEzMyw2ICsxNDAsNyBAQCBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKICAgICBmcmllbmQgY2xhc3MgQ29kZTsK
ICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lPiBm
cmllbmQgY2xhc3MgQjM6OkdlbmVyaWNCbG9ja0luc2VydGlvblNldDsKICAgICAKICAgICBCYXNp
Y0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9j
a0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyQmxvY2tJbnNlcnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgPHd0Zi9CdWJibGVTb3J0Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9u
U2V0KENvZGUgJmNvZGUpCisgICAgOiBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQoY29kZS5tX2Js
b2NrcykKK3sKK30KKworQmxvY2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpCit7
Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJ
bnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNHZW5l
cmljQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSA8
d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBJbnNlcnRpb25TZXQ7
CisKK3R5cGVkZWYgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+OjpCbG9ja0lu
c2VydGlvbiBCbG9ja0luc2VydGlvbjsKKworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgOiBwdWJs
aWMgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+IHsKK3B1YmxpYzoKKyAgICBC
bG9ja0luc2VydGlvblNldChDb2RlJik7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAg
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IGltcGxlbWVudCBCMzo6QmxvY2tJ
bnNlcnRpb25TZXQncyBzcGxpdEZvcndhcmQoKS4KK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckR1bXBBc0pTLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckR1bXBBc0pTLmNwcAkocmV2aXNpb24gMjEyOTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEdW1wQXNKUy5jcHAJKG5vbmV4aXN0
ZW50KQpAQCAtMSwyNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBaXJEdW1w
QXNKUy5oIgotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQotI2luY2x1ZGUgIkFpckNvZGUuaCIKLSNp
bmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLUNTdHJpbmcgdmFyTmFtZUZvckJs
b2NrQXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICByZXR1cm4gdG9DU3RyaW5nKCJiYiIs
IGluZGV4KTsKLX0KLQotQ1N0cmluZyB2YXJOYW1lKEJhc2ljQmxvY2sqIGJsb2NrKQotewotICAg
IHJldHVybiB2YXJOYW1lRm9yQmxvY2tBdEluZGV4KGJsb2NrLT5pbmRleCgpKTsKLX0KLQotQ1N0
cmluZyB2YXJOYW1lRm9yU3RhY2tTbG90QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBy
ZXR1cm4gdG9DU3RyaW5nKCJzbG90IiwgaW5kZXgpOwotfQotCi1DU3RyaW5nIHZhck5hbWUoU3Rh
Y2tTbG90KiBzbG90KQotewotICAgIHJldHVybiB2YXJOYW1lRm9yU3RhY2tTbG90QXRJbmRleChz
bG90LT5pbmRleCgpKTsKLX0KLQotQ1N0cmluZyB2YXJOYW1lKFJlZyByZWcpCi17Ci0gICAgcmV0
dXJuIHRvQ1N0cmluZygiUmVnLiIsIHJlZy5kZWJ1Z05hbWUoKSk7Ci19Ci0KLUNTdHJpbmcgdmFy
TmFtZUZvclRtcFdpdGhCYW5rQW5kSW5kZXgoQmFuayBiYW5rLCB1bnNpZ25lZCBpbmRleCkKLXsK
LSAgICByZXR1cm4gdG9DU3RyaW5nKGJhbmsgPT0gRlAgPyAiZiIgOiAiIiwgInRtcCIsIGluZGV4
KTsKLX0KLQotQ1N0cmluZyB2YXJOYW1lKFRtcCB0bXApCi17Ci0gICAgaWYgKHRtcC5pc1JlZygp
KQotICAgICAgICByZXR1cm4gdmFyTmFtZSh0bXAucmVnKCkpOwotICAgIHJldHVybiB2YXJOYW1l
Rm9yVG1wV2l0aEJhbmtBbmRJbmRleChBcmcodG1wKS5iYW5rKCksIHRtcC50bXBJbmRleCgpKTsK
LX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQgZHVtcEFzSlMoQ29kZSYgY29k
ZSwgUHJpbnRTdHJlYW0mIG91dCkKLXsKLSAgICBvdXQucHJpbnRsbigibGV0IGNvZGUgPSBuZXcg
Q29kZSgpOyIpOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2RlLnNpemUo
KTsgKytpKQotICAgICAgICBvdXQucHJpbnRsbigibGV0ICIsIHZhck5hbWVGb3JCbG9ja0F0SW5k
ZXgoaSksICIgPSBjb2RlLmFkZEJsb2NrKCk7Iik7Ci0gICAgCi0gICAgb3V0LnByaW50bG4oImxl
dCBoYXNoOyIpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGUuc3RhY2tTbG90
cygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGNvZGUuc3RhY2tT
bG90cygpW2ldOwotICAgICAgICBpZiAoc2xvdCkgewotICAgICAgICAgICAgb3V0LnByaW50bG4o
ImxldCAiLCB2YXJOYW1lKHNsb3QpLCAiID0gY29kZS5hZGRTdGFja1Nsb3QoIiwgc2xvdC0+Ynl0
ZVNpemUoKSwgIiwgIiwgc2xvdC0+a2luZCgpLCAiKTsiKTsKLSAgICAgICAgICAgIGlmIChzbG90
LT5vZmZzZXRGcm9tRlAoKSkKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRsbih2YXJOYW1lKHNs
b3QpLCAiLnNldE9mZnNldEZyb21GUCgiLCBzbG90LT5vZmZzZXRGcm9tRlAoKSwgIik7Iik7Ci0g
ICAgICAgICAgICBvdXQucHJpbnRsbigiaGFzaCA9ICIsIHZhck5hbWUoc2xvdCksICIuaGFzaCgp
OyIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oImlmIChoYXNoICE9ICIsIHNsb3QtPmpzSGFz
aCgpLCAiKSIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIiAgICB0aHJvdyBuZXcgRXJyb3Io
XCJCYWQgaGFzaDogXCIgKyBoYXNoKTsiKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBv
dXQucHJpbnRsbigiY29kZS5hZGRTdGFja1Nsb3QoMSwgU3BpbGwpOyIpOwotICAgIH0KLSAgICAK
LSAgICBmb3JFYWNoQmFuaygKLSAgICAgICAgWyZdIChCYW5rIGJhbmspIHsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGNvZGUubnVtVG1wcyhiYW5rKTsgaS0tOykgewotICAgICAgICAg
ICAgICAgIG91dC5wcmludGxuKAotICAgICAgICAgICAgICAgICAgICAibGV0ICIsIHZhck5hbWVG
b3JUbXBXaXRoQmFua0FuZEluZGV4KGJhbmssIGkpLCAiID0gY29kZS5uZXdUbXAoIiwgYmFuaywg
Iik7Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIAotICAgIG91dC5wcmludGxu
KCJsZXQgaW5zdDsiKTsKLSAgICBvdXQucHJpbnRsbigibGV0IGFyZzsiKTsKLSAgICAKLSAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBmb3IgKEZyZXF1ZW50ZWRC
bG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICBvdXQu
cHJpbnRsbigKLSAgICAgICAgICAgICAgICB2YXJOYW1lKGJsb2NrKSwgIi5zdWNjZXNzb3JzLnB1
c2gobmV3IEZyZXF1ZW50ZWRCbG9jaygiLAotICAgICAgICAgICAgICAgIHZhck5hbWUoc3VjY2Vz
c29yLmJsb2NrKCkpLCAiLCAiLCBzdWNjZXNzb3IuZnJlcXVlbmN5KCksICIpKTsiKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJs
b2NrLT5wcmVkZWNlc3NvcnMoKSkKLSAgICAgICAgICAgIG91dC5wcmludGxuKHZhck5hbWUoYmxv
Y2spLCAiLnByZWRlY2Vzc29ycy5wdXNoKCIsIHZhck5hbWUocHJlZGVjZXNzb3IpLCAiKTsiKTsK
LSAgICAgICAgCi0gICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgewotICAgICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGRvIHNvbWV0aGluZyBmb3IgZmxhZ3MuCi0gICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNzUxCi0g
ICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdCA9IG5ldyBJbnN0KCIsIGluc3Qua2luZC5vcGNv
ZGUsICIpOyIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCi0g
ICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlLCBCYW5rLCBXaWR0aCkgewot
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBcmc6OkludmFsaWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlRt
cDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRl
VG1wKCIsIHZhck5hbWUoYXJnLnRtcCgpKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6SW1tOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImFyZyA9
IEFyZy5jcmVhdGVJbW0oIiwgYXJnLnZhbHVlKCksICIpOyIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBBcmc6OkJpZ0ltbToKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxu
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmcgPSBBcmcuY3JlYXRlQmlnSW1tKCIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oYXJnLnZh
bHVlKCkpLCAiLCAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KGFyZy52YWx1ZSgpID4+IDMyKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6Qml0SW1tOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImFy
ZyA9IEFyZy5jcmVhdGVCaXRJbW0oIiwgYXJnLnZhbHVlKCksICIpOyIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OkJpdEltbTY0OgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0
LnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZyA9IEFyZy5jcmVhdGVC
aXRJbW02NCgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMy
X3Q+KGFyZy52YWx1ZSgpKSwgIiwgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQzMl90PihhcmcudmFsdWUoKSA+PiAzMiksICIpOyIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OkFkZHI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnRsbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJnID0gQXJnLmNyZWF0ZUFkZHIo
IiwgdmFyTmFtZShhcmcuYmFzZSgpKSwgIiwgIiwgYXJnLm9mZnNldCgpLCAiKTsiKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKLSAgICAgICAgICAgICAgICAgICAgICAg
IG91dC5wcmludGxuKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmcgPSBBcmcuY3Jl
YXRlU3RhY2soIiwgdmFyTmFtZShhcmcuc3RhY2tTbG90KCkpLCAiLCAiLCBhcmcub2Zmc2V0KCks
ICIpOyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0ZUNhbGxBcmcoIiwg
YXJnLm9mZnNldCgpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpJbmRl
eDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJhcmcgPSBBcmcuY3JlYXRlSW5kZXgoIiwgdmFyTmFtZShhcmcuYmFzZSgp
KSwgIiwgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJOYW1lKGFyZy5pbmRleCgp
KSwgIiwgIiwgYXJnLnNjYWxlKCksICIsICIsIGFyZy5vZmZzZXQoKSwgIik7Iik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFyZzo6UmVsQ29uZDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRlUmVsQ29uZCgiLCBhcmcuYXNSZWxhdGlvbmFs
Q29uZGl0aW9uKCksICIpOyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlJlc0Nv
bmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0
ZVJlc0NvbmQoIiwgYXJnLmFzUmVzdWx0Q29uZGl0aW9uKCksICIpOyIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OkRvdWJsZUNvbmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0ZURvdWJsZUNvbmQoIiwgYXJnLmFzRG91YmxlQ29u
ZGl0aW9uKCksICIpOyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNwZWNpYWw6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0ZVNw
ZWNpYWwoKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aEFyZzoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRlV2lkdGhB
cmcoIiwgYXJnLndpZHRoKCksICIpOyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmFyZ3MucHVzaChhcmcpOyIpOwotICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5zdC5raW5kLm9wY29k
ZSA9PSBQYXRjaCkgewotICAgICAgICAgICAgICAgIGlmIChpbnN0Lmhhc05vbkFyZ0VmZmVjdHMo
KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImluc3QucGF0Y2hIYXNOb25BcmdF
ZmZlY3RzID0gdHJ1ZTsiKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBvdXQu
cHJpbnRsbigiaW5zdC5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncyA9IG5ldyBTZXQoKTsiKTsKLSAg
ICAgICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MgPSBuZXcg
U2V0KCk7Iik7Ci0gICAgICAgICAgICAgICAgaW5zdC5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygp
LmZvckVhY2goCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImluc3QuZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3Mu
YWRkKCIsIHZhck5hbWUocmVnKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICAgIGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKLSAgICAgICAg
ICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnRsbigiaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MuYWRkKCIsIHZhck5hbWUocmVnKSwgIik7
Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIG91dC5wcmludGxuKCJpbnN0LnBhdGNoQXJnRGF0YSA9IFtdOyIpOwotICAgICAgICAg
ICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmLCBB
cmc6OlJvbGUgcm9sZSwgQmFuayBiYW5rLCBXaWR0aCB3aWR0aCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3Qu
cGF0Y2hBcmdEYXRhLnB1c2goe3JvbGU6IEFyZy4iLCByb2xlLCAiLCB0eXBlOiAiLCBiYW5rLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHdpZHRoOiAiLCB3aWR0aCwgIn0pOyIpOwot
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUgPT0gQ0NhbGwgfHwgaW5zdC5raW5kLm9wY29k
ZSA9PSBDb2xkQ0NhbGwpIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdC5jQ2Fs
bFR5cGUgPSAiLCBpbnN0Lm9yaWdpbi0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBvdXQucHJp
bnRsbigiaW5zdC5jQ2FsbEFyZ1R5cGVzID0gW107Iik7Ci0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IGluc3Qub3JpZ2luLT5udW1DaGlsZHJlbigpOyArK2kpCi0gICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmNDYWxsQXJnVHlwZXMucHVzaCgiLCBp
bnN0Lm9yaWdpbi0+Y2hpbGQoaSktPnR5cGUoKSwgIik7Iik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCJoYXNoID0gaW5zdC5oYXNoKCk7Iik7
Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiaWYgKGhhc2ggIT0gIiwgaW5zdC5qc0hhc2goKSwg
IikiKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCIgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFk
IGhhc2g6IFwiICsgaGFzaCk7Iik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG91dC5wcmlu
dGxuKHZhck5hbWUoYmxvY2spLCAiLmFwcGVuZChpbnN0KTsiKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgotCi0jZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEdW1wQXNK
Uy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRHVtcEFz
SlMuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJEdW1wQXNKUy5oCShub25leGlzdGVudCkKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVO
QUJMRShCM19KSVQpCi0KLSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewotCi1jbGFzcyBDb2RlOwotCi0v
LyBUaGlzIGlzIHVzZWQgZm9yIGJlbmNobWFya2luZy4gVmFyaW91cyBvcGVyYXRpb25zIG9uIEFp
ciBhcmUgaW50ZXJlc3RpbmcgZnJvbSBhIGJlbmNobWFya2luZwotLy8gc3RhbmRwb2ludC4gV2Ug
Y2FuIHdyaXRlIHNvbWUgQWlyIHBoYXNlcyBpbiBKUyBhbmQgdGhlbiB1c2UgdGhhdCB0byBiZW5j
aG1hcmsgSlMuIFRoZSBiZW5jaG1hcmsKLS8vIGlzIGNhbGxlZCBKU0FpciwgYW5kIGl0J3MgaW4g
UGVyZm9ybWFuY2VUZXN0cy9KU0Fpci4KLXZvaWQgZHVtcEFzSlMoQ29kZSYsIFByaW50U3RyZWFt
Jik7Ci0KLX0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKLQotI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNs
dWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5oIgogI2luY2x1ZGUgIkFp
ckFsbG9jYXRlU3RhY2suaCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlyRHVt
cEFzSlMuaCIKICNpbmNsdWRlICJBaXJFbGltaW5hdGVEZWFkQ29kZS5oIgogI2luY2x1ZGUgIkFp
ckZpeE9idmlvdXNTcGlsbHMuaCIKICNpbmNsdWRlICJBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFs
bHMuaCIKQEAgLTczLDYgKzcyLDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBj
b2RlKQogICAgICAgICBkYXRhTG9nKCJJbml0aWFsIGFpcjpcbiIpOwogICAgICAgICBkYXRhTG9n
KGNvZGUpOwogICAgIH0KKyAgICAKKyAgICBzaW1wbGlmeUNGRyhjb2RlKTsKIAogICAgIGxvd2Vy
TWFjcm9zKGNvZGUpOwogCkBAIC0xMDcsMjMgKzEwOCwxMSBAQCB2b2lkIHByZXBhcmVGb3JHZW5l
cmF0aW9uKENvZGUmIGNvZGUpCiAgICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlmeSB3aGlj
aCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0uCiAgICAgaGFuZGxlQ2Fs
bGVlU2F2ZXMoY29kZSk7CiAgICAgCi0gICAgaWYgKE9wdGlvbnM6OmR1bXBBaXJBc0pTQmVmb3Jl
QWxsb2NhdGVTdGFjaygpKSB7Ci0gICAgICAgIGRhdGFMb2coIkR1bXBpbmcgQWlyIGFzIEpTIGJl
Zm9yZSBhbGxvY2F0ZVN0YWNrOlxuIik7Ci0gICAgICAgIGR1bXBBc0pTKGNvZGUsIFdURjo6ZGF0
YUZpbGUoKSk7Ci0gICAgICAgIGRhdGFMb2coIkFpciBoYXNoOiAiLCBjb2RlLmpzSGFzaCgpLCAi
XG4iKTsKLSAgICB9Ci0KICAgICAvLyBUaGlzIHR1cm5zIGFsbCBTdGFjayBhbmQgQ2FsbEFyZyBB
cmdzIGludG8gQWRkciBhcmdzIHRoYXQgdXNlIHRoZSBmcmFtZSBwb2ludGVyLiBJdCBkb2VzCiAg
ICAgLy8gdGhpcyBieSBmaXJzdC1maXQgYWxsb2NhdGluZyBzdGFjayBzbG90cy4gSXQgc2hvdWxk
IGJlIHByZXR0eSBkYXJuIGNsb3NlIHRvIG9wdGltYWwsIHNvIHdlCiAgICAgLy8gc2hvdWxkbid0
IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB2ZXJ5IG11Y2guCiAgICAgYWxsb2NhdGVTdGFjayhj
b2RlKTsKICAgICAKLSAgICBpZiAoT3B0aW9uczo6ZHVtcEFpckFmdGVyQWxsb2NhdGVTdGFjaygp
KSB7Ci0gICAgICAgIGRhdGFMb2coIkR1bXBpbmcgQWlyIGFmdGVyIGFsbG9jYXRlU3RhY2s6XG4i
KTsKLSAgICAgICAgZGF0YUxvZyhjb2RlKTsKLSAgICAgICAgZGF0YUxvZygiQWlyIGhhc2g6ICIs
IGNvZGUuanNIYXNoKCksICJcbiIpOwotICAgIH0KLQogICAgIC8vIElmIHdlIGNvYWxlc2NlZCBt
b3ZlcyB0aGVuIHdlIGNhbiB1bmJyZWFrIGNyaXRpY2FsIGVkZ2VzLiBUaGlzIGlzIHRoZSBtYWlu
IHJlYXNvbiBmb3IgdGhpcwogICAgIC8vIHBoYXNlLgogICAgIHNpbXBsaWZ5Q0ZHKGNvZGUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNiArMjc3LDY1IEBAIGlubGluZSBib29s
IGlzWDg2VURpdjY0VmFsaWQoY29uc3QgSW5zdCYKICAgICByZXR1cm4gaXNYODZEaXZIZWxwZXJW
YWxpZChpbnN0KTsKIH0KIAoraW5saW5lIGJvb2wgaXNBdG9taWNTdHJvbmdDQVNWYWxpZChjb25z
dCBJbnN0JiBpbnN0KQoreworI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgc3dpdGNo
IChpbnN0LmFyZ3Muc2l6ZSgpKSB7CisgICAgY2FzZSAzOgorICAgICAgICByZXR1cm4gaW5zdC5h
cmdzWzBdID09IFRtcChYODZSZWdpc3RlcnM6OmVheCk7CisgICAgY2FzZSA1OgorICAgICAgICBy
ZXR1cm4gaW5zdC5hcmdzWzFdID09IFRtcChYODZSZWdpc3RlcnM6OmVheCk7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNlbmRpZiAvLyBDUFUoWDg2KSB8fCBD
UFUoWDg2XzY0KQorfQorCitpbmxpbmUgYm9vbCBpc0JyYW5jaEF0b21pY1N0cm9uZ0NBU1ZhbGlk
KGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGluc3QuYXJnc1sxXSA9PSBUbXAoWDg2
UmVnaXN0ZXJzOjplYXgpOworfQorCitpbmxpbmUgYm9vbCBpc0F0b21pY1N0cm9uZ0NBUzhWYWxp
ZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc0F0b21pY1N0cm9uZ0NBU1ZhbGlk
KGluc3QpOworfQorCitpbmxpbmUgYm9vbCBpc0F0b21pY1N0cm9uZ0NBUzE2VmFsaWQoY29uc3Qg
SW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNBdG9taWNTdHJvbmdDQVNWYWxpZChpbnN0KTsK
K30KKworaW5saW5lIGJvb2wgaXNBdG9taWNTdHJvbmdDQVMzMlZhbGlkKGNvbnN0IEluc3QmIGlu
c3QpCit7CisgICAgcmV0dXJuIGlzQXRvbWljU3Ryb25nQ0FTVmFsaWQoaW5zdCk7Cit9CisKK2lu
bGluZSBib29sIGlzQXRvbWljU3Ryb25nQ0FTNjRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQorewor
ICAgIHJldHVybiBpc0F0b21pY1N0cm9uZ0NBU1ZhbGlkKGluc3QpOworfQorCitpbmxpbmUgYm9v
bCBpc0JyYW5jaEF0b21pY1N0cm9uZ0NBUzhWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAg
IHJldHVybiBpc0JyYW5jaEF0b21pY1N0cm9uZ0NBU1ZhbGlkKGluc3QpOworfQorCitpbmxpbmUg
Ym9vbCBpc0JyYW5jaEF0b21pY1N0cm9uZ0NBUzE2VmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sK
KyAgICByZXR1cm4gaXNCcmFuY2hBdG9taWNTdHJvbmdDQVNWYWxpZChpbnN0KTsKK30KKworaW5s
aW5lIGJvb2wgaXNCcmFuY2hBdG9taWNTdHJvbmdDQVMzMlZhbGlkKGNvbnN0IEluc3QmIGluc3Qp
Cit7CisgICAgcmV0dXJuIGlzQnJhbmNoQXRvbWljU3Ryb25nQ0FTVmFsaWQoaW5zdCk7Cit9CisK
K2lubGluZSBib29sIGlzQnJhbmNoQXRvbWljU3Ryb25nQ0FTNjRWYWxpZChjb25zdCBJbnN0JiBp
bnN0KQoreworICAgIHJldHVybiBpc0JyYW5jaEF0b21pY1N0cm9uZ0NBU1ZhbGlkKGluc3QpOwor
fQorCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bj
b2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29k
ZS5vcGNvZGVzCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE3LDYgKzExNyw3IEBAIEFkZDMyIFU6
RzozMiwgVVpEOkc6MzIKICAgICB4ODY6IEltbSwgSW5kZXgKICAgICBJbW0sIFRtcAogICAgIHg4
NjogQWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKICAg
ICB4ODY6IFRtcCwgSW5kZXgKIApAQCAtMTM1LDkgKzEzNiwxMiBAQCB4ODY6IEFkZDE2IFU6Rzox
NiwgVUQ6RzoxNgogNjQ6IEFkZDY0IFU6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCiAgICAg
eDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKICAgICBJbW0sIFRtcAogICAgIHg4
NjogQWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKKyAg
ICB4ODY6IFRtcCwgSW5kZXgKIAogNjQ6IEFkZDY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAg
ICBJbW0sIFRtcCwgVG1wCkBAIC0xNjYsOSArMTcwLDEyIEBAIHg4NjogQWRkRmxvYXQgVTpGOjMy
LCBVRDpGOjMyCiBTdWIzMiBVOkc6MzIsIFVaRDpHOjMyCiAgICAgVG1wLCBUbXAKICAgICB4ODY6
IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAogICAgIEltbSwgVG1wCiAgICAgeDg2OiBB
ZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgorICAgIHg4
NjogVG1wLCBJbmRleAogCiBhcm02NDogU3ViMzIgVTpHOjMyLCBVOkc6MzIsIEQ6RzozMgogICAg
IFRtcCwgVG1wLCBUbXAKQEAgLTE3Niw5ICsxODMsMTIgQEAgYXJtNjQ6IFN1YjMyIFU6RzozMiwg
VTpHOjMyLCBEOkc6MzIKIDY0OiBTdWI2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRtcAog
ICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CiAgICAgSW1tLCBUbXAKICAg
ICB4ODY6IEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcAogICAgIHg4NjogVG1wLCBBZGRy
CisgICAgeDg2OiBUbXAsIEluZGV4CiAKIGFybTY0OiBTdWI2NCBVOkc6NjQsIFU6Rzo2NCwgRDpH
OjY0CiAgICAgVG1wLCBUbXAsIFRtcApAQCAtMjA0LDkgKzIxNCwxMiBAQCB4ODY6IFN1YkZsb2F0
IFU6RjozMiwgVUQ6RjozMgogTmVnMzIgVVpEOkc6MzIKICAgICBUbXAKICAgICB4ODY6IEFkZHIK
KyAgICB4ODY6IEluZGV4CiAKIDY0OiBOZWc2NCBVRDpHOjY0CiAgICAgVG1wCisgICAgeDg2OiBB
ZGRyCisgICAgeDg2OiBJbmRleAogCiBhcm02NDogTmVnYXRlRG91YmxlIFU6Rjo2NCwgRDpGOjY0
CiAgICAgVG1wLCBUbXAKQEAgLTMzMCw4ICszNDMsMTEgQEAgQW5kMzIgVTpHOjMyLCBVWkQ6Rzoz
MgogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIFRtcAogICAgIHg4NjogVG1wLCBBZGRyCisg
ICAgeDg2OiBUbXAsIEluZGV4CiAgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBU
bXAKICAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAogCiA2NDogQW5kNjQg
VTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBUbXAKQEAgLTMzOSw3ICszNTUs
MTMgQEAgQW5kMzIgVTpHOjMyLCBVWkQ6RzozMgogCiB4ODZfNjQ6IEFuZDY0IFU6Rzo2NCwgVUQ6
Rzo2NAogICAgIFRtcCwgVG1wCi0gICAgeDg2OiBJbW0sIFRtcAorICAgIEltbSwgVG1wCisgICAg
SW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgK
KyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCiAKIEFuZERvdWJsZSBVOkY6NjQsIFU6Rjo2
NCwgRDpGOjY0CiAgICAgVG1wLCBUbXAsIFRtcApAQCAtNDU5LDggKzQ4MSwxMSBAQCBPcjMyIFU6
RzozMiwgVVpEOkc6MzIKICAgICBUbXAsIFRtcAogICAgIHg4NjogSW1tLCBUbXAKICAgICB4ODY6
IFRtcCwgQWRkcgorICAgIHg4NjogVG1wLCBJbmRleAogICAgIHg4NjogQWRkciwgVG1wCisgICAg
eDg2OiBJbmRleCwgVG1wCiAgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgK
IAogNjQ6IE9yNjQgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBUbXAKQEAg
LTQ2OSw2ICs0OTQsMTIgQEAgT3IzMiBVOkc6MzIsIFVaRDpHOjMyCiA2NDogT3I2NCBVOkc6NjQs
IFVEOkc6NjQKICAgICBUbXAsIFRtcAogICAgIHg4NjogSW1tLCBUbXAKKyAgICB4ODY6IEltbSwg
QWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorICAgIHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBU
bXAsIEluZGV4CisgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBUbXAKIAogWG9y
MzIgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCwgVG1wCkBAIC00ODAsOCAr
NTExLDExIEBAIFhvcjMyIFU6RzozMiwgVVpEOkc6MzIKICAgICBUbXAsIFRtcAogICAgIHg4Njog
SW1tLCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgorICAgIHg4NjogVG1wLCBJbmRleAogICAgIHg4
NjogQWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1wCiAgICAgeDg2OiBJbW0sIEFkZHIKKyAg
ICB4ODY6IEltbSwgSW5kZXgKIAogNjQ6IFhvcjY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAg
ICBUbXAsIFRtcCwgVG1wCkBAIC00OTAsNiArNTI0LDExIEBAIFhvcjMyIFU6RzozMiwgVVpEOkc6
MzIKIDY0OiBYb3I2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRtcAogICAgIHg4NjogVG1w
LCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4CisgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6
IEluZGV4LCBUbXAKKyAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAogICAg
IHg4NjogSW1tLCBUbXAKIAogYXJtNjQ6IE5vdDMyIFU6RzozMiwgWkQ6RzozMgpAQCAtNDk4LDEz
ICs1MzcsMTUgQEAgYXJtNjQ6IE5vdDMyIFU6RzozMiwgWkQ6RzozMgogeDg2OiBOb3QzMiBVWkQ6
RzozMgogICAgIFRtcAogICAgIEFkZHIKKyAgICBJbmRleAogCiBhcm02NDogTm90NjQgVTpHOjY0
LCBEOkc6NjQKICAgICBUbXAsIFRtcAogCi14ODY6IE5vdDY0IFVEOkc6NjQKK3g4Nl82NDogTm90
NjQgVUQ6Rzo2NAogICAgIFRtcAogICAgIEFkZHIKKyAgICBJbmRleAogCiBhcm02NDogQWJzRG91
YmxlIFU6Rjo2NCwgRDpGOjY0CiAgICAgVG1wLCBUbXAKQEAgLTY2OCwyNyArNzA5LDM4MSBAQCBM
b2FkOCBVOkc6OCwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9h
ZEFjcTggVTpHOjgsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIFN0
b3JlOCBVOkc6OCwgRDpHOjgKICAgICBUbXAsIEluZGV4CiAgICAgVG1wLCBBZGRyCiAgICAgeDg2
OiBJbW0sIEluZGV4CiAgICAgeDg2OiBJbW0sIEFkZHIKIAorU3RvcmVSZWw4IFU6Rzo4LCBEOkc6
OAorICAgIFRtcCwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKyAg
ICB4ODY6IEltbSwgQWRkcgorCiBMb2FkOFNpZ25lZEV4dGVuZFRvMzIgVTpHOjgsIFpEOkc6MzIK
ICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3E4U2lnbmVkRXh0ZW5kVG8z
MiBVOkc6OCwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogTG9hZDE2
IFU6RzoxNiwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9hZEFj
cTE2IFU6RzoxNiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogTG9h
ZDE2U2lnbmVkRXh0ZW5kVG8zMiBVOkc6MTYsIFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJ
bmRleCwgVG1wCiAKK0xvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIgVTpHOjE2LCBaRDpHOjMyCisg
ICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBTdG9yZTE2IFU6RzoxNiwgRDpHOjE2CiAg
ICAgVG1wLCBJbmRleAogICAgIFRtcCwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorICAgIHg4
NjogSW1tLCBBZGRyCisKK1N0b3JlUmVsMTYgVTpHOjE2LCBEOkc6MTYKKyAgICBUbXAsIEluZGV4
CisgICAgVG1wLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIK
KworTG9hZEFjcTMyIFU6RzozMiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBU
bXAKKworU3RvcmVSZWwzMiBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAs
IEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKworNjQ6IExv
YWRBY3E2NCBVOkc6NjQsIFpEOkc6NjQKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisK
KzY0OiBTdG9yZVJlbDY0IFU6Rzo2NCwgWkQ6Rzo2NAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwg
SW5kZXgKKyAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorCisjIFRoZSBm
aXJzdCBvcGVyYW5kIGlzIHJheC4KK3g4NjogQXRvbWljU3Ryb25nQ0FTOCBVOkc6MzIsIFVEOkc6
OCwgVTpHOjgsIFVEOkc6OCwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRy
LCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9t
aWNTdHJvbmdDQVMxNiBVOkc6MzIsIFVEOkc6MTYsIFU6RzozMiwgVUQ6RzoxNiwgWkQ6Rzo4Cisg
ICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAq
LCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVMzMiBVOkc6MzIsIFVEOkc6
MzIsIFU6RzozMiwgVUQ6RzozMiwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBB
ZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2XzY0
OiBBdG9taWNTdHJvbmdDQVM2NCBVOkc6MzIsIFVEOkc6NjQsIFU6Rzo2NCwgVUQ6Rzo2NCwgWkQ6
Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25k
LCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVM4IFVEOkc6OCwg
VTpHOjgsIFVEOkc6OAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgK
KworeDg2OiBBdG9taWNTdHJvbmdDQVMxNiBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYKKyAgICBU
bXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljU3Ryb25n
Q0FTMzIgVUQ6RzozMiwgVTpHOjMyLCBVRDpHOjMyCisgICAgVG1wKiwgVG1wLCBBZGRyCisgICAg
VG1wKiwgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1N0cm9uZ0NBUzY0IFVEOkc6NjQsIFU6
Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgK
KworeDg2OiBCcmFuY2hBdG9taWNTdHJvbmdDQVM4IFU6RzozMiwgVUQ6Rzo4LCBVOkc6OCwgVUQ6
Rzo4IC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIKKyAgICBTdGF0dXND
b25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNoQXRvbWljU3Ryb25nQ0FTMTYgVTpH
OjMyLCBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYgL2JyYW5jaAorICAgIFN0YXR1c0NvbmQsIFRt
cCosIFRtcCwgQWRkcgorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBC
cmFuY2hBdG9taWNTdHJvbmdDQVMzMiBVOkc6MzIsIFVEOkc6MzIsIFU6RzozMiwgVUQ6RzozMiAv
YnJhbmNoCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyCisgICAgU3RhdHVzQ29uZCwg
VG1wKiwgVG1wLCBJbmRleAorCit4ODZfNjQ6IEJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0IFU6Rzoz
MiwgVUQ6Rzo2NCwgVTpHOjY0LCBVRDpHOjY0IC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAq
LCBUbXAsIEFkZHIKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQXRv
bWljQWRkOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAg
IFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNBZGQxNiBVOkc6MTYsIFVE
Okc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAg
VG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FkZDMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwg
QWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4
Nl82NDogQXRvbWljQWRkNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisgICAgSW1t
LCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNTdWI4
IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1N1YjE2IFU6RzoxNiwgVUQ6RzoxNgor
ICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIElu
ZGV4CisKK3g4NjogQXRvbWljU3ViMzIgVTpHOjMyLCBVRDpHOjMyCisgICAgSW1tLCBBZGRyCisg
ICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBB
dG9taWNTdWI2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FuZDggVTpHOjgs
IFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljQW5kMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1t
LCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKwor
eDg2OiBBdG9taWNBbmQzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0s
IEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY0Fu
ZDY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljT3I4IFU6Rzo4LCBVRDpHOjgK
KyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJ
bmRleAorCit4ODY6IEF0b21pY09yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisg
ICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9t
aWNPcjMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAg
ICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljT3I2NCBVOkc6NjQs
IFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisg
ICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hvcjggVTpHOjgsIFVEOkc6OAorICAgIEltbSwg
QWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4
NjogQXRvbWljWG9yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJ
bmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNYb3IzMiBV
Okc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1hvcjY0IFU6Rzo2NCwgVUQ6Rzo2
NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAs
IEluZGV4CisKK3g4NjogQXRvbWljTmVnOCBVRDpHOjgKKyAgICBBZGRyCisgICAgSW5kZXgKKwor
eDg2OiBBdG9taWNOZWcxNiBVRDpHOjE2CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogQXRv
bWljTmVnMzIgVUQ6RzozMgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODZfNjQ6IEF0b21pY05l
ZzY0IFVEOkc6NjQKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOb3Q4IFVEOkc6
OAorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY05vdDE2IFVEOkc6MTYKKyAgICBB
ZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOb3QzMiBVRDpHOjMyCisgICAgQWRkcgorICAg
IEluZGV4CisKK3g4Nl82NDogQXRvbWljTm90NjQgVUQ6Rzo2NAorICAgIEFkZHIKKyAgICBJbmRl
eAorCit4ODY6IEF0b21pY1hjaGdBZGQ4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBBZGRyCisg
ICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQxNiBVRDpHOjE2LCBVRDpHOjE2Cisg
ICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQzMiBVRDpH
OjMyLCBVRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0
b21pY1hjaGdBZGQ2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJ
bmRleAorCit4ODY6IEF0b21pY1hjaGc4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBBZGRyCisg
ICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGcxNiBVRDpHOjE2LCBVRDpHOjE2CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGczMiBVRDpHOjMyLCBV
RDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1hj
aGc2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCith
cm02NDogTG9hZExpbms4IFU6Rzo4LCBaRDpHOjgKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwg
VG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTggVTpHOjgsIFpEOkc6OAorICAgIEFkZHIsIFRtcAor
ICAgIEluZGV4LCBUbXAKKworIyBTdXBlciBjb25mdXNpbmcgZmFjdDogdGhpcyByZXR1cm5zIDAg
dG8gbWVhbiBzdWNjZXNzLCAxIHRvIG1lYW4gZmFpbHVyZS4KK2FybTY0OiBTdG9yZUNvbmQ4IFU6
Rzo4LCBEOkc6OCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwg
VG1wCisKK2FybTY0OiBTdG9yZUNvbmRSZWw4IFU6Rzo4LCBEOkc6OCwgRVpEOkc6OAorICAgIFRt
cCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGluazE2IFU6
RzoxNiwgWkQ6RzoxNgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IExv
YWRMaW5rQWNxMTYgVTpHOjE2LCBaRDpHOjE2CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRt
cAorCithcm02NDogU3RvcmVDb25kMTYgVTpHOjE2LCBEOkc6MTYsIEVaRDpHOjgKKyAgICBUbXAs
IEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kUmVsMTYg
VTpHOjE2LCBEOkc6MTYsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5k
ZXgsIFRtcAorCithcm02NDogTG9hZExpbmszMiBVOkc6MzIsIFpEOkc6MzIKKyAgICBBZGRyLCBU
bXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTMyIFU6RzozMiwgWkQ6Rzoz
MgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZDMyIFU6
RzozMiwgRDpHOjMyLCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4
LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDMyIFU6RzozMiwgRDpHOjMyLCBFWkQ6Rzo4Cisg
ICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5r
NjQgVTpHOjY0LCBaRDpHOjY0CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02
NDogTG9hZExpbmtBY3E2NCBVOkc6NjQsIFpEOkc6NjQKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRl
eCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQ2NCBVOkc6NjQsIEQ6Rzo2NCwgRVpEOkc6OAorICAg
IFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmRS
ZWw2NCBVOkc6NjQsIEQ6Rzo2NCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1w
LCBJbmRleCwgVG1wCisKK2FybTY0OiBEZXBlbmQzMiBVOkc6MzIsIEQ6RzozMgorICAgIFRtcCwg
VG1wCisKK2FybTY0OiBEZXBlbmQ2NCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wCiAKIENv
bXBhcmUzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCiAgICAgUmVsQ29uZCwgVG1w
LCBUbXAsIFRtcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6
ZUJsb2NrT3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTc3LDYgKzE3NywxMCBAQCB2b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2Rl
JiBjb2RlKQogICAgICAgICBjYXNlIEJyYW5jaFN1YjY0OgogICAgICAgICBjYXNlIEJyYW5jaE5l
ZzMyOgogICAgICAgICBjYXNlIEJyYW5jaE5lZzY0OgorICAgICAgICBjYXNlIEJyYW5jaEF0b21p
Y1N0cm9uZ0NBUzg6CisgICAgICAgIGNhc2UgQnJhbmNoQXRvbWljU3Ryb25nQ0FTMTY6CisgICAg
ICAgIGNhc2UgQnJhbmNoQXRvbWljU3Ryb25nQ0FTMzI6CisgICAgICAgIGNhc2UgQnJhbmNoQXRv
bWljU3Ryb25nQ0FTNjQ6CiAgICAgICAgICAgICBpZiAoY29kZS5maW5kTmV4dEJsb2NrKGJsb2Nr
KSA9PSBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkgJiYgYnJhbmNoLmFyZ3NbMF0uaXNJbnZlcnRp
YmxlKCkpIHsKICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoYmxvY2stPnN1Y2Nlc3NvcigwKSwg
YmxvY2stPnN1Y2Nlc3NvcigxKSk7CiAgICAgICAgICAgICAgICAgYnJhbmNoLmFyZ3NbMF0gPSBi
cmFuY2guYXJnc1swXS5pbnZlcnRlZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNlLmNwcAkocmV2aXNpb24gMjEyOTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHZvaWQgcGFkSW50ZXJmZXJlbmNlKENvZGUm
IGNvZGUpCiAgICAgICAgICAgICAgICAgWyZdIChBcmcmLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywg
V2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OkVhcmx5WkRlZjoKICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vhcmx5RGVmID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6TGF0ZVVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU1LDYgKzE1NSw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUp
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlQ29sZFVzZToKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OlNjcmF0Y2g6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJn
OjpFYXJseURlZjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5WkRlZjoKICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGNvZGUucmVnc0luUHJpb3JpdHlP
cmRlcihiYW5rKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3Jl
LmdldChyZWcpICYmICFzZXRBZnRlci5nZXQocmVnKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsMTQgKzUxLDQ5IEBAIGNsYXNzIEFyZwogICAgICAgICBAYmFuayA9IGJh
bmsKICAgICAgICAgQHdpZHRoID0gd2lkdGgKICAgICBlbmQKLQotICAgIGRlZiB3aWR0aENvZGUK
KyAgICAKKyAgICBkZWYgc2VsZi53aWR0aENvZGUod2lkdGgpCiAgICAgICAgIGlmIHdpZHRoID09
ICJQdHIiCiAgICAgICAgICAgICAicG9pbnRlcldpZHRoKCkiCiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICJXaWR0aCN7d2lkdGh9IgogICAgICAgICBlbmQKICAgICBlbmQKKworICAgIGRlZiB3
aWR0aENvZGUKKyAgICAgICAgQXJnLndpZHRoQ29kZSh3aWR0aCkKKyAgICBlbmQKKyAgICAKKyAg
ICBkZWYgc2VsZi5yb2xlQ29kZShyb2xlKQorICAgICAgICBjYXNlIHJvbGUKKyAgICAgICAgd2hl
biAiVSIKKyAgICAgICAgICAgICJVc2UiCisgICAgICAgIHdoZW4gIkQiCisgICAgICAgICAgICAi
RGVmIgorICAgICAgICB3aGVuICJaRCIKKyAgICAgICAgICAgICJaRGVmIgorICAgICAgICB3aGVu
ICJVRCIKKyAgICAgICAgICAgICJVc2VEZWYiCisgICAgICAgIHdoZW4gIlVaRCIKKyAgICAgICAg
ICAgICJVc2VaRGVmIgorICAgICAgICB3aGVuICJVQSIKKyAgICAgICAgICAgICJVc2VBZGRyIgor
ICAgICAgICB3aGVuICJTIgorICAgICAgICAgICAgIlNjcmF0Y2giCisgICAgICAgIHdoZW4gIkVE
IgorICAgICAgICAgICAgIkVhcmx5RGVmIgorICAgICAgICB3aGVuICJFWkQiCisgICAgICAgICAg
ICAiRWFybHlaRGVmIgorICAgICAgICB3aGVuICJMVSIKKyAgICAgICAgICAgICJMYXRlVXNlIgor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbmQKKyAgICBlbmQKKyAg
ICAKKyAgICBkZWYgcm9sZUNvZGUKKyAgICAgICAgQXJnLnJvbGVDb2RlKHJvbGUpCisgICAgZW5k
CiBlbmQKIAogY2xhc3MgT3ZlcmxvYWQKQEAgLTE4Miw3ICsyMTcsNyBAQCBkZWYgbGV4KHN0ciwg
ZmlsZU5hbWUpCiBlbmQKIAogZGVmIGlzUm9sZSh0b2tlbikKLSAgICB0b2tlbiA9fiAvXEEoKFUp
fChEKXwoVUQpfChaRCl8KFVaRCl8KFVBKXwoUykpXFovCisgICAgdG9rZW4gPX4gL1xBKChVKXwo
RCl8KFVEKXwoWkQpfChVWkQpfChVQSl8KFMpfChFRCl8KEVaRCl8KExVKSlcWi8KIGVuZAogCiBk
ZWYgaXNHRih0b2tlbikKQEAgLTE5MCw3ICsyMjUsNyBAQCBkZWYgaXNHRih0b2tlbikKIGVuZAog
CiBkZWYgaXNLaW5kKHRva2VuKQotICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1t
KXwoQml0SW1tKXwoQml0SW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8
KERvdWJsZUNvbmQpKVxaLworICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwo
Qml0SW1tKXwoQml0SW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERv
dWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KIGVuZAogCiBkZWYgaXNBcmNoKHRva2VuKQpAQCAt
MjY0LDcgKzI5OSw3IEBAIGNsYXNzIFBhcnNlcgogCiAgICAgZGVmIGNvbnN1bWVLaW5kCiAgICAg
ICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwotICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBr
aW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVs
Q29uZCwgUmVzQ29uZCwgb3IgRG91YmxlQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAg
ICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdEltbSwgQml0
SW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9y
IFN0YXR1c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCiAgICAgICAgIGFkdmFuY2UKICAg
ICAgICAgcmVzdWx0CiAgICAgZW5kCkBAIC02MzQsMjggKzY2OSw3IEBAIHdyaXRlSCgiT3Bjb2Rl
VXRpbHMiKSB7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5l
YWNoX3dpdGhfaW5kZXggewogICAgICAgICAgICAgICAgIHwgYXJnLCBpbmRleCB8Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgcm9sZSA9IG5pbAotICAgICAgICAgICAgICAgIGNh
c2UgYXJnLnJvbGUKLSAgICAgICAgICAgICAgICB3aGVuICJVIgotICAgICAgICAgICAgICAgICAg
ICByb2xlID0gIlVzZSIKLSAgICAgICAgICAgICAgICB3aGVuICJEIgotICAgICAgICAgICAgICAg
ICAgICByb2xlID0gIkRlZiIKLSAgICAgICAgICAgICAgICB3aGVuICJaRCIKLSAgICAgICAgICAg
ICAgICAgICAgcm9sZSA9ICJaRGVmIgotICAgICAgICAgICAgICAgIHdoZW4gIlVEIgotICAgICAg
ICAgICAgICAgICAgICByb2xlID0gIlVzZURlZiIKLSAgICAgICAgICAgICAgICB3aGVuICJVWkQi
Ci0gICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlWkRlZiIKLSAgICAgICAgICAgICAgICB3
aGVuICJVQSIKLSAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VBZGRyIgotICAgICAgICAg
ICAgICAgIHdoZW4gIlMiCi0gICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiU2NyYXRjaCIKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAg
ICAgICAgZW5kCi0KLSAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1sje2lu
ZGV4fV0sIEFyZzo6I3tyb2xlfSwgI3thcmcuYmFua31QLCAje2FyZy53aWR0aENvZGV9KTsiCisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRleH1dLCBBcmc6OiN7
YXJnLnJvbGVDb2RlfSwgI3thcmcuYmFua31QLCAje2FyZy53aWR0aENvZGV9KTsiCiAgICAgICAg
ICAgICB9CiAgICAgICAgIGVuZAogICAgIH0KQEAgLTgxOSw2ICs4MzMsNyBAQCB3cml0ZUgoIk9w
Y29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgogICAgICAg
ICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCiAgICAgICAgICAgICAgICAgd2hlbiAiRG91YmxlQ29u
ZCIKKyAgICAgICAgICAgICAgICB3aGVuICJTdGF0dXNDb25kIgogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgIlVuZXhwZWN0ZWQga2luZDogI3traW5kLm5h
bWV9IgogICAgICAgICAgICAgICAgIGVuZApAQCAtMTEwNSw2ICsxMTIwLDggQEAgd3JpdGVIKCJP
cGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3Nb
I3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiRG91
YmxlQ29uZCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0u
YXNEb3VibGVDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICB3aGVuICJTdGF0dXNDb25kIgor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1N0YXR1c0Nv
bmRpdGlvbigpIgogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgfQogCkBAIC0xMTQ4
LDI3ICsxMTY1LDcgQEAgRmlsZS5vcGVuKCJKU0Fpcl9vcGNvZGUuanMiLCAidyIpIHsKICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToi
IGlmIG5lZWRPdmVybG9hZFN3aXRjaAogICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVy
ZS5lYWNoX3dpdGhfaW5kZXggewogICAgICAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXggfAot
ICAgICAgICAgICAgICAgICAgICByb2xlID0gbmlsCi0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
YXJnLnJvbGUKLSAgICAgICAgICAgICAgICAgICAgd2hlbiAiVSIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJvbGUgPSAiVXNlIgotICAgICAgICAgICAgICAgICAgICB3aGVuICJEIgotICAgICAg
ICAgICAgICAgICAgICAgICAgcm9sZSA9ICJEZWYiCi0gICAgICAgICAgICAgICAgICAgIHdoZW4g
IlpEIgotICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJaRGVmIgotICAgICAgICAgICAg
ICAgICAgICB3aGVuICJVRCIKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlRGVm
IgotICAgICAgICAgICAgICAgICAgICB3aGVuICJVWkQiCi0gICAgICAgICAgICAgICAgICAgICAg
ICByb2xlID0gIlVzZVpEZWYiCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gIlVBIgotICAgICAg
ICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VBZGRyIgotICAgICAgICAgICAgICAgICAgICB3
aGVuICJTIgotICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJTY3JhdGNoIgotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAg
ICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiaW5zdC52aXNpdEFyZygje2luZGV4fSwgZnVuYywgQXJnLiN7cm9sZX0s
ICN7YXJnLmJhbmt9UCwgI3thcmcud2lkdGh9KTsiCisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiaW5zdC52aXNpdEFyZygje2luZGV4fSwgZnVuYywgQXJnLiN7YXJnLnJvbGVDb2RlfSwg
I3thcmcuYmFua31QLCAje2FyZy53aWR0aH0pOyIKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
Myw5ICs0MTMsNiBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJv
b2wsIGR1bXBNb2R1bGVMb2FkaW5nU3RhdGUsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGJvb2wsIGV4cG9zZUludGVybmFsTW9kdWxlTG9hZGVyLCBmYWxzZSwgTm9ybWFsLCAiZXhw
b3NlIHRoZSBpbnRlcm5hbCBtb2R1bGUgbG9hZGVyIG9iamVjdCB0byB0aGUgZ2xvYmFsIHNwYWNl
IGZvciBkZWJ1Z2dpbmciKSBcCiAgICAgXAotICAgIHYoYm9vbCwgZHVtcEFpckFzSlNCZWZvcmVB
bGxvY2F0ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihib29sLCBkdW1w
QWlyQWZ0ZXJBbGxvY2F0ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgXAog
ICAgIHYoYm9vbCwgdXNlU3VwZXJTYW1wbGVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgXAogICAgIHYoYm9vbCwgcmVwb3J0TExJbnRTdGF0cywgZmFsc2UsIENvbmZpZ3VyYWJsZSwg
IlJlcG9ydHMgTExJbnQgc3RhdGlzdGljcyIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303015</attachid>
            <date>2017-02-28 17:28:54 -0800</date>
            <delta_ts>2017-03-01 10:33:46 -0800</delta_ts>
            <desc>it just passed some WeakCAS tests!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>270761</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMyBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkwRjJDNjNDMDFFNjYwRUE3MDBDMTM4
MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCRjFFNjYwRUE1MDBDMTM4MzkgLyogQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGMkM2M0MyMUU2NjRBNUMwMEMxMzgzOSAv
KiBCM05hdGl2ZVRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQzYzQzExRTY2NEE1QTAwQzEzODM5IC8qIEIzTmF0aXZlVHJhaXRzLmggKi87
IH07CiAJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERCMTk4MzJE
MzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCAqLzsgfTsKIAkJMEYyRDREREUxOTgzMkQz
NDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERDMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNj
b3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYyRDRERTgxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJENERFNTE5ODMyREFDMDA3RDRC
MTkgLyogVG9UaGlzU3RhdHVzLmNwcCAqLzsgfTsKQEAgLTIyNDMsOCArMjI1MCw2IEBACiAJCURD
MjE0MzA4MUNBMzJFNTgwMDBBODg2OSAvKiBJQ1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMjE0MzA1MUNBMzJFNTIwMDBBODg2OSAvKiBJ
Q1N0YXRzLmNwcCAqLzsgfTsKIAkJREMzRDJCMEExRDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzNEMkIw
OTFEMzQzMTYxMDBCQTkxOEMgLyogSGVhcENlbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEQzNEMkIwQzFEMzQzNzcwMDBCQTkxOEMgLyogSGVh
cENlbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
REMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8qIEhlYXBDZWxsLmNwcCAqLzsgfTsKLQkJREM0NTRC
OEMxRDAwRTgyMjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNDU0QjhBMUQwMEU4MUYwMDRDMThBRiAvKiBB
aXJEdW1wQXNKUy5jcHAgKi87IH07Ci0JCURDNDU0QjhEMUQwMEU4MjQwMDRDMThBRiAvKiBBaXJE
dW1wQXNKUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
REM0NTRCOEIxRDAwRTgxRjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmggKi87IH07CiAJCURDNjA1
QjVEMUNFMjZFQTAwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjU5MUNFMjZFOTgwMDU5MzcxOCAv
KiBQcm9maWxlckV2ZW50LmNwcCAqLzsgfTsKIAkJREM2MDVCNUUxQ0UyNkVBMjAwNTkzNzE4IC8q
IFByb2ZpbGVyRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IERDNjA1QjVBMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREM2MDVCNUYxQ0Uy
NkVBNTAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjVCMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxl
clVJRC5jcHAgKi87IH07CkBAIC0yNzY0LDYgKzI3NjksMTMgQEAKIAkJMEYyQzYzQUMxRTYwQUUz
QzAwQzEzODM5IC8qIEIzQmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M0JhbmsuaDsgcGF0aCA9IGIzL0IzQmFuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjJDNjNBRDFFNjBBRTNDMDBDMTM4MzkgLyogQjNXaWR0aC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dpZHRoLmNwcDsgcGF0aCA9IGIzL0IzV2lkdGguY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNjNBRTFFNjBBRTNEMDBDMTM4Mzkg
LyogQjNXaWR0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dpZHRoLmg7
IHBhdGggPSBiMy9CM1dpZHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2
M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQXRvbWljVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBdG9t
aWNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I0MUU2MzQz
RTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzQXRvbWljVmFsdWUuaDsgcGF0aCA9IGIzL0IzQXRvbWljVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2Vu
ZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0dlbmVyaWNCbG9ja0lu
c2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCOTFFNjM0
NDA4MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMv
YWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBh
dGggPSBiMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQzYzQkYxRTY2MEVBNTAwQzEzODM5IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0MxMUU2
NjRBNUEwMEMxMzgzOSAvKiBCM05hdGl2ZVRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM05hdGl2ZVRyYWl0cy5oOyBwYXRoID0gYjMvQjNOYXRpdmVUcmFpdHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREIxOTgzMkQzNDAwN0Q0QjE5IC8q
IERlYnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGVidWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkQ0RERD
MTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNDc3OCw4ICs0NzkwLDYgQEAKIAkJREMyMTQzMDYxQ0EzMkU1MjAwMEE4ODY5IC8q
IElDU3RhdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSUNTdGF0cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzNEMkIwOTFEMzQzMTYxMDBCQTkxOEMgLyog
SGVhcENlbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcENlbGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8q
IEhlYXBDZWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBD
ZWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJREM0NTRCOEExRDAwRTgxRjAw
NEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEFpckR1bXBBc0pTLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJEdW1wQXNKUy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURDNDU0QjhCMUQwMEU4MUYwMDRDMThBRiAvKiBB
aXJEdW1wQXNKUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJEdW1wQXNK
Uy5oOyBwYXRoID0gYjMvYWlyL0FpckR1bXBBc0pTLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCURDNjA1QjU5MUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyRXZlbnQuY3BwOyBwYXRo
ID0gcHJvZmlsZXIvUHJvZmlsZXJFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCURDNjA1QjVBMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyRXZlbnQuaDsgcGF0aCA9IHByb2ZpbGVy
L1Byb2ZpbGVyRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREM2MDVCNUIx
Q0UyNkU5ODAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyVUlELmNwcDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVy
VUlELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyOTIsNiArNTMwMiw4IEBA
CiAJCQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKIAkJCQkwRkVDODRCNDFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEYyQzYz
QjMxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3BwICovLAorCQkJCTBGMkM2M0I0
MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi8sCiAJCQkJMEYyQzYzQUIxRTYw
QUUzQzAwQzEzODM5IC8qIEIzQmFuay5jcHAgKi8sCiAJCQkJMEYyQzYzQUMxRTYwQUUzQzAwQzEz
ODM5IC8qIEIzQmFuay5oICovLAogCQkJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suY3BwICovLApAQCAtNTM1NCw2ICs1MzY2LDcgQEAKIAkJCQkwRkVDODRDRDFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLywKIAkJCQkwRkVDODRDRTFCREFD
REFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8sCiAJCQkJMEZFQzg0Q0YxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzR2VuZXJhdGUuaCAqLywKKwkJCQkwRjJDNjNCNTFFNjM0M0U4MDBDMTM4Mzkg
LyogQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRkVDODREMDFCREFDREFD
MDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1QkYx
QkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCAqLywKIAkJCQkwRkVDODVDMDFCRTE2
N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuaCAqLywKQEAgLTUzNzgsNiArNTM5MSw3IEBACiAJ
CQkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLywKIAkJCQkw
RjMzOEUwMzFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmNwcCAqLywKIAkJCQkw
RjMzOEUwNDFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggKi8sCisJCQkJMEYy
QzYzQzExRTY2NEE1QTAwQzEzODM5IC8qIEIzTmF0aXZlVHJhaXRzLmggKi8sCiAJCQkJMEYzMzhF
MDUxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0LmggKi8sCiAJCQkJMEYzMzhF
MDYxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5jcHAgKi8sCiAJCQkJMEYz
MzhFMDcxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5oICovLApAQCAtNTQ2
OSw2ICs1NDgzLDggQEAKIAkJCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5s
aW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2Nr
LmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5o
ICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNl
dC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0
aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29y
a2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdD
b252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC01NDgwLDggKzU0OTYsNiBAQAogCQkJCTBGMTBGMUEy
MUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCAqLywKIAkJCQk3OUFCQjE3QjFFNUNDQjU3
MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmNwcCAqLywKIAkJCQk3OUFCQjE3QzFFNUNDQjU3
MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmggKi8sCi0JCQkJREM0NTRCOEExRDAwRTgxRjAw
NEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCAqLywKLQkJCQlEQzQ1NEI4QjFEMDBFODFGMDA0QzE4
QUYgLyogQWlyRHVtcEFzSlMuaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyog
QWlyRWxpbWluYXRlRGVhZENvZGUuY3BwICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYy
OSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oICovLAogCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5jcHAgKi8sCkBAIC03MzI2LDYgKzczNDAsNyBAQAogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRjFGRTUxQjE5MjJBM0JDMDA2
OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLywKKwkJCQkwRjJDNjNCRjFFNjYwRUE1MDBDMTM4Mzkg
LyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8sCiAJCQkJODYwMTYxREYwRjNBODNDMTAw
Rjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCAqLywKIAkJCQkwRjM3MzA5MDFDMENE
NzBDMDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggKi8sCiAJCQkJ
ODY0MDkyM0IxNTZFRUQzQjAwNTY2Q0IyIC8qIEFSTTY0QXNzZW1ibGVyLmggKi8sCkBAIC03MzU0
LDggKzczNjksOCBAQAogCQkJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2Vt
Ymxlck1JUFMuaCAqLywKIAkJCQlGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmNwcCAqLywKIAkJCQlGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyogTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmggKi8sCi0JCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi8sCisJCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJQTdBNEFFMDcxNzk3M0IyNjAwNTYxMkIx
IC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLywKIAkJCQk4NjAxNjFFMjBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3NzE4
NUE4RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywKQEAg
LTc5NDMsNyArNzk1OCw2IEBACiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckND
YWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTBGMUEzMUM0MjBCRjAwMDFDMDdE
MiAvKiBBaXJDdXN0b20uaCBpbiBIZWFkZXJzICovLAotCQkJCURDNDU0QjhEMUQwMEU4MjQwMDRD
MThBRiAvKiBBaXJEdW1wQXNKUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NTcwMzkxQkU0NEM5
MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjYxODMyRDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTc5NTYsNiArNzk3MCw3IEBACiAJCQkJMEZFQzg1ODAxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTgxMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3
RDcxRDlEQzQ0MjAwMUI5ODI1IC8qIEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2
M0JDMUU2MzQ0MEMwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjY4NEQ0MzgxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQ
cmVzc3VyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQ3LDYgKzgwNjIs
NyBAQAogCQkJCTQzNDIyQTYzMUMxNThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQ
dHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8q
IEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQjgxRTYzNDNG
NzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjMzOEUwRTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYzM0ZDRkMxQzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2QjhBRDkxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRl
VGFpbHMuaCBpbiBIZWFkZXJzICovLApAQCAtODIzNyw2ICs4MjUzLDcgQEAKIAkJCQlBNzdBNDIz
RTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJDNjNDMjFFNjY0QTVD
MDBDMTM4MzkgLyogQjNOYXRpdmVUcmFpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3
MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAy
QzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywK
QEAgLTgzNjYsNiArODM4Myw3IEBACiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERG
R09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdG
NTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
MzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3
MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKQEAgLTk3OTIsNiArOTgx
MCw3IEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJ
CQkJMEZGQTU0OTcxNkI4ODM1MDAwQjNBOTgyIC8qIEE2NERPcGNvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYyQzYzQzAxRTY2MEVBNzAwQzEzODM5IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUQ0OTM3QzMxRERCRTYxNDAwNzdDODA3IC8qIEFi
c3RyYWN0TW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVGMEY0MTREMTA2
MzkwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzNzBCNEY1
MUJGMjYyMDIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRCYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTgwMiw3ICs5ODIxLDYgQEAKIAkJCQkwRkVD
ODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJREM0NTRCOEMxRDAwRTgyMjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDU3MDM4MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYxODMyQzFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0REUxQ0Ux
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0xMDI0OCw2ICsxMDI2Niw3IEBACiAJCQkJOUU3Mjk0MDcxOTBGMDFBNTAwMUE5MUI1IC8q
IEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QjcxODVC
OEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEYyQzYzQjYxRTYzNDNFQTAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVk
U2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1
QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQw
RTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTEwMjY2LDYgKzEwMjg1LDcgQEAKIAkJCQlFMzVFMDM1RjFCN0FCNDNFMDA3M0FE
MkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MzI0MzhCMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRCNjExODgwOURENTAwNjhBNDZEIC8qIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJDNjNCQjFFNjM0NDBB
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU1MTY1RDIxQkRGMEI5ODAwM0I3NUMxIC8qIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3Bl
Y3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdB
NDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiIC8vIEhhdmUgdG8g
YnJlYWsgd2l0aCBzdHlsZSBiZWNhdXNlIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpcyBhIHNo
YWR5IGhlYWRlci4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBYnN0cmFjdE1hY3JvQXNzZW1i
bGVyQmFzZTo6U3RhdHVzQ29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmRp
dGlvbikgeworICAgIGNhc2UgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJhc2U6OlN1Y2Nlc3M6Cisg
ICAgICAgIG91dC5wcmludCgiU3VjY2VzcyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyQmFzZTo6RmFpbHVyZToKKyAgICAgICAgb3V0LnByaW50KCJG
YWlsdXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMiwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHd0
Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9tLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
NTAsOCArNTEsMjggQEAgbmFtZXNwYWNlIERGRyB7CiBzdHJ1Y3QgT1NSRXhpdDsKIH0KIAorY2xh
c3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJhc2UgeworcHVibGljOgorICAgIGVudW0gU3RhdHVz
Q29uZGl0aW9uIHsKKyAgICAgICAgU3VjY2VzcywKKyAgICAgICAgRmFpbHVyZQorICAgIH07Cisg
ICAgCisgICAgc3RhdGljIFN0YXR1c0NvbmRpdGlvbiBpbnZlcnQoU3RhdHVzQ29uZGl0aW9uIGNv
bmRpdGlvbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgICAgIGNh
c2UgU3VjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBGYWlsdXJlOworICAgICAgICBjYXNlIEZh
aWx1cmU6CisgICAgICAgICAgICByZXR1cm4gU3VjY2VzczsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gU3VjY2VzczsKKyAg
ICB9Cit9OworCiB0ZW1wbGF0ZSA8Y2xhc3MgQXNzZW1ibGVyVHlwZSwgY2xhc3MgTWFjcm9Bc3Nl
bWJsZXJUeXBlPgotY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlciB7CitjbGFzcyBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJCYXNlIHsKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZSwg
TWFjcm9Bc3NlbWJsZXJUeXBlPiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyVHlwZTsKICAgICB0eXBl
ZGVmIEFzc2VtYmxlclR5cGUgQXNzZW1ibGVyVHlwZV9UOwpAQCAtMTEwOCwzICsxMTI5LDE2IEBA
IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZSwgTWEKICNlbmRpZiAvLyBFTkFC
TEUoQVNTRU1CTEVSKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKKworI2lmIEVOQUJMRShBU1NFTUJM
RVIpCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJh
c2U6OlN0YXR1c0NvbmRpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEFTU0VNQkxFUikKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMi0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTM2LDYgKzEzNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IHR3b1RvVGhlMzI7IC8vIFRoaXMgaXMgc3VwZXIgdXNlZnVsIGZvciBzb21lIGRvdWJsZSBjb2Rl
LgogCiAgICAgLy8gVXRpbGl0aWVzIHVzZWQgYnkgdGhlIERGRyBKSVQuCisgICAgdXNpbmcgQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlckJhc2U6OmludmVydDsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxl
ckJhc2U6OmludmVydDsKICAgICAKICAgICBzdGF0aWMgRG91YmxlQ29uZGl0aW9uIGludmVydChE
b3VibGVDb25kaXRpb24gY29uZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3MSw2ICsxNzEsMTEgQEAgcHVi
bGljOgogICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBk
ZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZDMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfbXIoc3JjLm9mZnNldCwgc3Jj
LmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIGFk
ZDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CkBAIC0yNTEsMTYgKzI1
Niw3MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgc3Jj
LCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcm0oc3Jj
LCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZDE2KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7
CisgICAgfQorCisgICAgdm9pZCBhbmQxNihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRl
c3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ4
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5hbmRiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmQ4KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmFuZGJfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4
LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIGFuZDMyKEFkZHJlc3Mgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX21yKHNyYy5vZmZz
ZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDMyKEJhc2VJbmRleCBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfbXIo
c3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9
CisKICAgICB2b2lkIGFuZDMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKICAg
ICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgYW5kMzIoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRs
X2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDE2KFRydXN0ZWRJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHdf
aW0oc3RhdGljX2Nhc3Q8aW50MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kd19pbShzdGF0
aWNfY2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgYW5k
OChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5hbmRiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDgoVHJ1c3RlZElt
bTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5h
bmRiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAg
ICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBk
ZXN0KQogICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC00NTYsNiArNTE2LDMxIEBA
IHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubmVnbF9tKHNyY0Rlc3Qub2Zmc2V0LCBzcmNE
ZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgbmVnMzIoQmFzZUluZGV4IHNyY0Rlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWdsX20oc3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3Qu
YmFzZSwgc3JjRGVzdC5pbmRleCwgc3JjRGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBu
ZWcxNihBZGRyZXNzIHNyY0Rlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWd3X20o
c3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBuZWcxNihC
YXNlSW5kZXggc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZ3dfbShzcmNE
ZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlLCBzcmNEZXN0LmluZGV4LCBzcmNEZXN0LnNjYWxlKTsK
KyAgICB9CisKKyAgICB2b2lkIG5lZzgoQWRkcmVzcyBzcmNEZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubmVnYl9tKHNyY0Rlc3Qub2Zmc2V0LCBzcmNEZXN0LmJhc2UpOworICAgIH0K
KworICAgIHZvaWQgbmVnOChCYXNlSW5kZXggc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm5lZ2JfbShzcmNEZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlLCBzcmNEZXN0LmluZGV4
LCBzcmNEZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9ycihzcmMs
IGRlc3QpOwpAQCAtNDcxLDE2ICs1NTYsNzEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxl
ci5vcmxfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lk
IG9yMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIub3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwg
ZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjE2KFJlZ2lzdGVySUQgc3JjLCBBZGRy
ZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcndfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMTYoUmVnaXN0ZXJJRCBzcmMs
IEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X3JtKHNyYywg
ZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQor
CisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAg
IH0KKworICAgIHZvaWQgb3I4KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2Us
IGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgb3IzMihBZGRyZXNz
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX21y
KHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIG9yMzIoQmFz
ZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7
CisgICAgfQorCiAgICAgdm9pZCBvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVz
cykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9pbShpbW0ubV92YWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjMyKFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMTYoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3
X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X2ltKHN0YXRp
Y19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjgo
VHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIub3JiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIg
aW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9p
bShzdGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9p
ZCBvcjMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC02NTQsMTYgKzc5NCw3MSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3ViMTYoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19p
bShzdGF0aWNfY2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UpOworICAgIH0KKworICAgIHZvaWQgc3ViOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX2ltKHN0YXRpY19j
YXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
KyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9pbShpbW0ubV92YWx1ZSwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7
CisgICAgfQorCisgICAgdm9pZCBzdWIxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YndfaW0oc3RhdGljX2Nhc3Q8aW50
MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjgoVHJ1c3RlZElt
bTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5z
dWJiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAg
ICB2b2lkIHN1YjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAg
ICBtX2Fzc2VtYmxlci5zdWJsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9
CiAKKyAgICB2b2lkIHN1YjMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5p
bmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIHN1YjMyKFJlZ2lzdGVy
SUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX3Jt
KHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdWIxNihS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c3Vid19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQg
c3ViOChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc3ViYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAg
IHZvaWQgc3ViMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuc3VibF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3Qu
aW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgc3ViMTYoUmVnaXN0ZXJJRCBz
cmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19ybShz
cmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAg
IH0KKworICAgIHZvaWQgc3ViOChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCB4b3IzMihSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
eG9ybF9ycihzcmMsIGRlc3QpOwpAQCAtNjc3LDYgKzg3Miw1MCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci54b3JsX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRl
eCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubm90bF9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgs
IGRlc3Quc2NhbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3Js
X2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0
LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJl
c3MgZGVzdCkKKyAgICB7CisgICAgICAgIGltbS5tX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50MTZf
dD4oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gLTEpCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5ub3R3X20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcndfaW0oaW1tLm1fdmFsdWUsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9yMTYoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBpbW0ubV92YWx1ZSA9IHN0YXRp
Y19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09
IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci54b3J3X2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBk
ZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgaW1tLm1fdmFsdWUgPSBzdGF0
aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09
IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm90Yl9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JiX2ltKGltbS5t
X3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgo
VHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBpbW0ubV92
YWx1ZSA9IHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoaW1t
Lm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3RiX20oZGVzdC5vZmZz
ZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmJfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBk
ZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgeG9y
MzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYg
KGltbS5tX3ZhbHVlID09IC0xKQpAQCAtNjkwLDExICs5MjksNDEgQEAgcHVibGljOgogICAgICAg
ICBtX2Fzc2VtYmxlci54b3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAg
fQogCisgICAgdm9pZCB4b3IzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci54b3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCB4b3IxNihSZWdp
c3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9y
d19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9y
MTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIueG9yd19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRl
c3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywgQWRkcmVz
cyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yYl9ybShzcmMsIGRlc3Qub2Zm
c2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywg
QmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JiX3JtKHNyYywg
ZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQor
CiAgICAgdm9pZCB4b3IzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAg
ICAgICAgbV9hc3NlbWJsZXIueG9ybF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CiAg
ICAgfQogICAgIAorICAgIHZvaWQgeG9yMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9tcihzcmMub2Zmc2V0LCBzcmMuYmFz
ZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIHhv
cjMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAg
IHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC03NDEsNiArMTAxMCwzMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vdGxfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdDMyKEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm90bF9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Qu
c2NhbGUpOworICAgIH0KKworICAgIHZvaWQgbm90MTYoQWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0K
KworICAgIHZvaWQgbm90MTYoQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3R3X20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2Fs
ZSk7CisgICAgfQorCisgICAgdm9pZCBub3Q4KEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5vdGJfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAg
ICB2b2lkIG5vdDgoQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5u
b3RiX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7Cisg
ICAgfQorCiAgICAgdm9pZCBzcXJ0RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJ
RCBkc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zcXJ0c2RfcnIoc3JjLCBkc3QpOwpA
QCAtMTA3MSw0MiArMTM2NSwyMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0b3JlMTYoUmVnaXN0
ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQogICAgIHsKLSNpZiBDUFUoWDg2KQotICAgICAg
ICAvLyBPbiAzMi1iaXQgeDg2IHdlIGNhbiBvbmx5IHN0b3JlIGZyb20gdGhlIGZpcnN0IDQgcmVn
aXN0ZXJzOwotICAgICAgICAvLyBlc3AuLmVkaSBhcmUgbWFwcGVkIHRvIHRoZSAnaCcgcmVnaXN0
ZXJzIQotICAgICAgICBpZiAoc3JjID49IDQpIHsKLSAgICAgICAgICAgIC8vIFBpY2sgYSB0ZW1w
b3JhcnkgcmVnaXN0ZXIuCi0gICAgICAgICAgICBSZWdpc3RlcklEIHRlbXAgPSBnZXRVbnVzZWRS
ZWdpc3RlcihhZGRyZXNzKTsKLQotICAgICAgICAgICAgLy8gU3dhcCB0byB0aGUgdGVtcG9yYXJ5
IHJlZ2lzdGVyIHRvIHBlcmZvcm0gdGhlIHN0b3JlLgotICAgICAgICAgICAgc3dhcChzcmMsIHRl
bXApOwotICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d19ybSh0ZW1wLCBhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKLSAgICAgICAg
ICAgIHN3YXAoc3JjLCB0ZW1wKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2Vu
ZGlmCiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdndfcm0oc3JjLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKICAgICB9CiAKICAgICB2
b2lkIHN0b3JlMTYoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0jaWYg
Q1BVKFg4NikKLSAgICAgICAgLy8gT24gMzItYml0IHg4NiB3ZSBjYW4gb25seSBzdG9yZSBmcm9t
IHRoZSBmaXJzdCA0IHJlZ2lzdGVyczsKLSAgICAgICAgLy8gZXNwLi5lZGkgYXJlIG1hcHBlZCB0
byB0aGUgJ2gnIHJlZ2lzdGVycyEKLSAgICAgICAgaWYgKHNyYyA+PSA0KSB7Ci0gICAgICAgICAg
ICAvLyBQaWNrIGEgdGVtcG9yYXJ5IHJlZ2lzdGVyLgotICAgICAgICAgICAgUmVnaXN0ZXJJRCB0
ZW1wID0gZ2V0VW51c2VkUmVnaXN0ZXIoYWRkcmVzcyk7Ci0KLSAgICAgICAgICAgIC8vIFN3YXAg
dG8gdGhlIHRlbXBvcmFyeSByZWdpc3RlciB0byBwZXJmb3JtIHRoZSBzdG9yZS4KLSAgICAgICAg
ICAgIHN3YXAoc3JjLCB0ZW1wKTsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdndfcm0odGVt
cCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7Ci0gICAgICAgICAgICBzd2FwKHNyYywg
dGVtcCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgogICAgICAgICBt
X2Fzc2VtYmxlci5tb3Z3X3JtKHNyYywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAg
ICAgfQogCisgICAgdm9pZCBzdG9yZTE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92d19pbShzdGF0aWNfY2FzdDxpbnQx
Nl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
aW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUxNihUcnVzdGVk
SW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5t
b3Z3X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSk7CisgICAgfQogCiAgICAgLy8gRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9u
OgogICAgIC8vCkBAIC0yNzQzLDc0ICszMDE4LDgzOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX2ltKDAsIDAsIFg4NlJlZ2lz
dGVyczo6ZXNwKTsKICAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM4KFN0YXR1
c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklE
IG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsm
XSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsgfSk7CisgICAgfQogCi0gICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhh
dCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9ybWFsIHN0b3Jlcy4gU28sIGl0J3MgYSBuby1vcCBv
biB4ODYuCi0gICAgdm9pZCBzdG9yZUZlbmNlKCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzgo
U3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKICAg
ICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgcmVz
dWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZz
ZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOwogICAg
IH0KIAotICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVudHMgbW90aW9u
IG9mIG5vcm1hbCBsb2Fkcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4ODYuCi0gICAgdm9pZCBsb2Fk
RmVuY2UoKQorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgeworICAgICAgICBhdG9taWNTdHJv
bmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIu
Y21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFi
ZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAg
dm9pZCBhdG9taWNTdHJvbmdDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBl
eHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3Ms
IFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBsYWNl
V2l0aEp1bXAoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCBkZXN0aW5hdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4
cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3JtKG5l
d1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsgfSk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgbWF4SnVt
cFJlcGxhY2VtZW50U2l6ZSgpCisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0Nv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5l
d1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFg4NkFzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpOworICAgICAg
ICBhdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsg
bV9hc3NlbWJsZXIuY21weGNoZ2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UpOyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IHBhdGNoYWJsZUp1bXBT
aXplKCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5k
ZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgewotICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjpwYXRjaGFibGVKdW1wU2l6ZSgpOworICAgICAgICBhdG9taWNTdHJvbmdDQVMo
Y29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNo
Z2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5k
ZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c0Zsb2F0aW5nUG9pbnRSb3VuZGluZygpCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM4KFJlZ2lz
dGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRk
cmVzcykKICAgICB7Ci0gICAgICAgIGlmIChzX3NzZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVj
a1N0YXRlOjpOb3RDaGVja2VkKQotICAgICAgICAgICAgdXBkYXRlRWF4MUVjeEZsYWdzKCk7Ci0g
ICAgICAgIHJldHVybiBzX3NzZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVja1N0YXRlOjpTZXQ7
CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3Nl
bWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Up
OyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FWWCgpCisgICAgdm9pZCBh
dG9taWNTdHJvbmdDQVM4KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQg
bmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgLy8gQVZYIHN0aWxs
IGNhdXNlcyBteXN0ZXJpb3VzIHJlZ3Jlc3Npb25zIGFuZCB0aG9zZSByZWdyZXNzaW9ucyBjYW4g
YmUgbWFzc2l2ZS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdG9taWNTdHJvbmdD
QVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1Zh
bHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsgfSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdXBkYXRlRWF4MUVjeEZsYWdz
KCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0gICAgICAg
IGludCBmbGFncyA9IDA7Ci0jaWYgQ09NUElMRVIoTVNWQykKLSAgICAgICAgaW50IGNwdUluZm9b
NF07Ci0gICAgICAgIF9fY3B1aWQoY3B1SW5mbywgMHgxKTsKLSAgICAgICAgZmxhZ3MgPSBjcHVJ
bmZvWzJdOwotI2VsaWYgQ09NUElMRVIoR0NDX09SX0NMQU5HKQotI2lmIENQVShYODZfNjQpCi0g
ICAgICAgIGFzbSAoCi0gICAgICAgICAgICAibW92bCAkMHgxLCAlJWVheDsiCi0gICAgICAgICAg
ICAiY3B1aWQ7IgotICAgICAgICAgICAgIm1vdmwgJSVlY3gsICUwOyIKLSAgICAgICAgICAgIDog
Ij1nIiAoZmxhZ3MpCi0gICAgICAgICAgICA6Ci0gICAgICAgICAgICA6ICIlZWF4IiwgIiVlYngi
LCAiJWVjeCIsICIlZWR4IgotICAgICAgICAgICAgKTsKLSNlbHNlCi0gICAgICAgIGFzbSAoCi0g
ICAgICAgICAgICAibW92bCAkMHgxLCAlJWVheDsiCi0gICAgICAgICAgICAicHVzaGwgJSVlYng7
IgotICAgICAgICAgICAgImNwdWlkOyIKLSAgICAgICAgICAgICJwb3BsICUlZWJ4OyIKLSAgICAg
ICAgICAgICJtb3ZsICUlZWN4LCAlMDsiCi0gICAgICAgICAgICA6ICI9ZyIgKGZsYWdzKQotICAg
ICAgICAgICAgOgotICAgICAgICAgICAgOiAiJWVheCIsICIlZWN4IiwgIiVlZHgiCi0gICAgICAg
ICAgICApOwotI2VuZGlmCisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3Vs
dCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2
KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5k
UmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOwor
ICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMzIoUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxl
ci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0p
OworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMzIoUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNz
ZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hBdG9taWNTdHJvbmdDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRv
bWljU3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVz
dWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZz
ZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdD
QVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3Jt
KG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNv
bmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdW
YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIo
U3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBi
cmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNz
ZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
KTsgfSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVMzMihTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNo
QXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxl
ci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWlj
V2Vha0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1
bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVM4KGNvbmQsIGV4cGVjdGVkQW5kUmVz
dWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21p
Y1dlYWtDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVz
dWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBy
ZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVM4KGNvbmQsIGV4cGVjdGVkQW5k
UmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0
b21pY1dlYWtDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklE
IHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzE2KGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lk
IGF0b21pY1dlYWtDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lz
dGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMTYoY29uZCwgZXhw
ZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAg
IHZvaWQgYXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJl
Z2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMzIoY29uZCwg
ZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKwor
ICAgIHZvaWQgYXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVz
cywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMzMihj
b25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzgo
Y29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVM4KGNvbmQs
IGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2hBdG9taWNXZWFrQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
ZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBl
Y3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoQXRvbWljV2Vha0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVj
dGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBlY3Rl
ZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
QXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVk
QW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIoY29uZCwgZXhwZWN0ZWRBbmRS
ZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21p
Y1dlYWtDQVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJl
c3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIoY29uZCwgZXhwZWN0ZWRBbmRSZXN1
bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ4
KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY0FkZDgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDgoaW1tLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ4KFJlZ2lzdGVySUQgcmVn
LCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIGFkZDgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNB
ZGQ4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY0FkZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkMTYoaW1t
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQxNihUcnVzdGVkSW1t
MzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgYWRkMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNBZGQxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQxNihyZWcsIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5k
ZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
YWRkMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQzMihU
cnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQWRkMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKGltbSwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMzIoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgYWRkMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNBZGQzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKHJlZywgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1Yjgo
aW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWI4KFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBzdWI4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgYXRvbWljU3ViOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI4KHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViOChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1
YjgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWIxNihUcnVz
dGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIHN1YjE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljU3ViMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjE2KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMTYoUmVnaXN0ZXJJRCByZWcs
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgc3ViMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNT
dWIxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjE2KHJlZywgYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljU3ViMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWIzMihp
bW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjMyKFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBzdWIzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1N1YjMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjMyKHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMzIoUmVnaXN0ZXJJRCByZWcsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBzdWIzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDgo
VHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhbmQ4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQW5kOChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kOChpbW0sIGFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDgoUmVnaXN0ZXJJRCByZWcs
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgYW5kOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0Fu
ZDgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ4KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljQW5kMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQxNihpbW0s
IGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDE2KFRydXN0ZWRJbW0z
MiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBhbmQxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY0FuZDE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDE2KHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMTYoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRl
eCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBh
bmQxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDMyKFRy
dXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNBbmQzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIoaW1tLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQzMihSZWdpc3RlcklEIHJl
ZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBhbmQzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y0FuZDMyKFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNPcjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgoaW1t
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjgoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG9yOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY09yOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNPcjgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgocmVnLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgb3IxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y09yMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMTYocmVn
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFJlZ2lzdGVySUQg
cmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgb3IxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY09yMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjMyKGltbSwgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljT3IzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXgg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3Iz
MihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yMzIoUmVnaXN0
ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgb3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY09yMzIoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjMyKHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhv
cjgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3I4KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3I4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljWG9yOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I4KHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yOChSZWdpc3RlcklEIHJlZywgQmFzZUlu
ZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IHhvcjgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3IxNihU
cnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljWG9yMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KGltbSwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMTYoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgeG9yMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNYb3IxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KHJlZywgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3Iz
MihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjMyKFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3IzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hvcjMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjMyKHJlZywgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMzIoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICB4b3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05l
ZzgoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBuZWc4KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzgo
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIG5lZzgoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMTYo
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBuZWcxNihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWcxNihC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgbmVnMTYoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMzIo
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBuZWczMihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWczMihC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgbmVnMzIoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90OChB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIG5vdDgoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90OChCYXNl
SW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAg
ICAgbm90OChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3QxNihBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG5vdDE2KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDE2KEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBub3QxNihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3QzMihBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG5vdDMyKGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDMyKEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBub3QzMihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkOChS
ZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkYl9ybShyZWcsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGdBZGQ4
KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGJfcm0ocmVnLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkMTYoUmVnaXN0ZXJJRCByZWcsIEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIueGFkZHdfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkMTYoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBtX2Fzc2VtYmxlci54YWRkd19ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY1hjaGdBZGQzMihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkbF9y
bShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1hjaGdBZGQzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhh
ZGRsX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwg
YWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzgoUmVnaXN0
ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGJfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnOChSZWdpc3Rl
cklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdiX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljWGNoZzE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LnhjaGd3X3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljWGNoZzE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIueGNoZ3dfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnMzIo
UmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0ocmVnLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnMzIo
UmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ybShyZWcsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3E4KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBsb2FkOChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxvYWRBY3E4KEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IGxvYWQ4KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZEFjcThTaWduZWRF
eHRlbmRUbzMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBs
b2FkOFNpZ25lZEV4dGVuZFRvMzIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBs
b2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbG9hZDhTaWduZWRFeHRlbmRUbzMyKHNyYywgZGVzdCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgbG9hZEFjcTE2KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBsb2FkMTYoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBs
b2FkQWNxMTYoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bG9hZDE2KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZEFjcTE2U2lnbmVk
RXh0ZW5kVG8zMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihzcmMsIGRlc3QpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3EzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgbG9hZEFjcTMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGxvYWQzMihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsOChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmU4KHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw4KFJlZ2lzdGVySUQgc3JjLCBC
YXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIHN0b3JlOChzcmMsIGRlc3QpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHN0b3JlUmVsOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3Qp
CisgICAgeworICAgICAgICBzdG9yZTgoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzdG9yZVJlbDgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAg
ICAgICBzdG9yZTgoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVJlbDE2
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KHNy
YywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwxNihSZWdpc3RlcklEIHNy
YywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KHNyYywgZGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KGltbSwgZGVzdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc3RvcmVSZWwxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAg
ICB7CisgICAgICAgIHN0b3JlMTYoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
dG9yZVJlbDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBz
dG9yZTMyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihSZWdp
c3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTMyKHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihUcnVzdGVkSW1tMzIgaW1t
LCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTMyKGltbSwgZGVzdCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIHN0b3JlMzIoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisg
ICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhhdCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9y
bWFsIHN0b3Jlcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4ODYuCisgICAgdm9pZCBzdG9yZUZlbmNl
KCkKKyAgICB7CisgICAgfQorCisgICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhhdCBpdCBw
cmV2ZW50cyBtb3Rpb24gb2Ygbm9ybWFsIGxvYWRzLiBTbywgaXQncyBhIG5vLW9wIG9uIHg4Ni4K
KyAgICB2b2lkIGxvYWRGZW5jZSgpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJl
cGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9j
YXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVw
bGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGVzdGlu
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJk
aWZmX3QgbWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCk7CisgICAgfQorCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBwYXRjaGFibGVKdW1wU2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjpwYXRjaGFibGVKdW1wU2l6ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzRmxvYXRpbmdQb2ludFJvdW5kaW5nKCkKKyAgICB7CisgICAgICAgIGlmIChzX3Nz
ZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVja1N0YXRlOjpOb3RDaGVja2VkKQorICAgICAgICAg
ICAgdXBkYXRlRWF4MUVjeEZsYWdzKCk7CisgICAgICAgIHJldHVybiBzX3NzZTRfMUNoZWNrU3Rh
dGUgPT0gQ1BVSURDaGVja1N0YXRlOjpTZXQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgc3Vw
cG9ydHNBVlgoKQorICAgIHsKKyAgICAgICAgLy8gQVZYIHN0aWxsIGNhdXNlcyBteXN0ZXJpb3Vz
IHJlZ3Jlc3Npb25zIGFuZCB0aG9zZSByZWdyZXNzaW9ucyBjYW4gYmUgbWFzc2l2ZS4KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUVheDFFY3hG
bGFncygpCisgICAgeworICAgICAgICBpbnQgZmxhZ3MgPSAwOworI2lmIENPTVBJTEVSKE1TVkMp
CisgICAgICAgIGludCBjcHVJbmZvWzRdOworICAgICAgICBfX2NwdWlkKGNwdUluZm8sIDB4MSk7
CisgICAgICAgIGZsYWdzID0gY3B1SW5mb1syXTsKKyNlbGlmIENPTVBJTEVSKEdDQ19PUl9DTEFO
RykKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBhc20gKAorICAgICAgICAgICAgIm1vdmwgJDB4
MSwgJSVlYXg7IgorICAgICAgICAgICAgImNwdWlkOyIKKyAgICAgICAgICAgICJtb3ZsICUlZWN4
LCAlMDsiCisgICAgICAgICAgICA6ICI9ZyIgKGZsYWdzKQorICAgICAgICAgICAgOgorICAgICAg
ICAgICAgOiAiJWVheCIsICIlZWJ4IiwgIiVlY3giLCAiJWVkeCIKKyAgICAgICAgICAgICk7Cisj
ZWxzZQorICAgICAgICBhc20gKAorICAgICAgICAgICAgIm1vdmwgJDB4MSwgJSVlYXg7IgorICAg
ICAgICAgICAgInB1c2hsICUlZWJ4OyIKKyAgICAgICAgICAgICJjcHVpZDsiCisgICAgICAgICAg
ICAicG9wbCAlJWVieDsiCisgICAgICAgICAgICAibW92bCAlJWVjeCwgJTA7IgorICAgICAgICAg
ICAgOiAiPWciIChmbGFncykKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgIDogIiVlYXgiLCAi
JWVjeCIsICIlZWR4IgorICAgICAgICAgICAgKTsKKyNlbmRpZgogI2VuZGlmIC8vIENPTVBJTEVS
KEdDQ19PUl9DTEFORykKICAgICAgICAgc19zc2U0XzFDaGVja1N0YXRlID0gKGZsYWdzICYgKDEg
PDwgMTkpKSA/IENQVUlEQ2hlY2tTdGF0ZTo6U2V0IDogQ1BVSURDaGVja1N0YXRlOjpDbGVhcjsK
ICAgICAgICAgc19hdnhDaGVja1N0YXRlID0gKGZsYWdzICYgKDEgPDwgMjgpKSA/IENQVUlEQ2hl
Y2tTdGF0ZTo6U2V0IDogQ1BVSURDaGVja1N0YXRlOjpDbGVhcjsKQEAgLTI4MzEsNiArMzg3MCwx
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxYODZBc3NlbWJsZXI6
OkNvbmRpdGlvbj4oY29uZCk7CiAgICAgfQogCisgICAgWDg2QXNzZW1ibGVyOjpDb25kaXRpb24g
eDg2Q29uZGl0aW9uKFN0YXR1c0NvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25kKSB7CisgICAgICAgIGNhc2UgU3VjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBYODZB
c3NlbWJsZXI6OkNvbmRpdGlvbkU7CisgICAgICAgIGNhc2UgRmFpbHVyZToKKyAgICAgICAgICAg
IHJldHVybiBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbk5FOworICAgICAgICB9CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6
OkNvbmRpdGlvbkU7CisgICAgfQorCiAgICAgdm9pZCBzZXQzMihYODZBc3NlbWJsZXI6OkNvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogI2lmIENQVShYODYpCkBAIC0yOTI1
LDYgKzM5NzYsMzUgQEAgcHJvdGVjdGVkOgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihzaXpl
T2ZSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIHNyY0lzTm9uWmVyby5saW5rKHRoaXMpOwogICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgYXRvbWljU3Ry
b25nQ0FTKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0
LCBSZWdpc3RlcklEIHJlc3VsdCwgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3
YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBmdW5jKCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRS
ZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgc2V0MzIoeDg2Q29uZGl0aW9uKGNv
bmQpLCByZXN1bHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
dm9pZCBhdG9taWNTdHJvbmdDQVMoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgY29uc3Qg
RnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJl
Z2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBmdW5j
KCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIEp1bXAgYnJhbmNoQXRv
bWljU3Ryb25nQ0FTKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5k
UmVzdWx0LCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgc3dhcChleHBlY3RlZEFu
ZFJlc3VsdCwgWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIGZ1bmMoKTsKKyAgICAgICAgc3dhcChleHBlY3RlZEFuZFJlc3VsdCwgWDg2UmVn
aXN0ZXJzOjplYXgpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29u
ZGl0aW9uKGNvbmQpKSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIC8vIE9ubHkgTWFjcm9Bc3Nl
bWJsZXJYODYgc2hvdWxkIGJlIHVzaW5nIHRoZSBmb2xsb3dpbmcgbWV0aG9kOyBTU0UyIGlzIGFs
d2F5cyBhdmFpbGFibGUgb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2NCwxMSArMjY0LDIxIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7
CiAgICAgfQogCisgICAgdm9pZCBhZGQ2NChCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNl
LCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBhZGQ2NChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkcV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQg
YWRkNjQoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYWRkcV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgs
IGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgYWRkNjQoQWJzb2x1dGVBZGRyZXNzIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHNy
Yy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKQEAgLTMwNiw2ICszMTYsMTQgQEAgcHVibGlj
OgogICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBhZGQ2NChUcnVzdGVkSW1t
MzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlmIChpbW0ubV92YWx1
ZSA9PSAxKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuaW5jcV9tKGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9
CisKICAgICB2b2lkIGFkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRy
ZXNzKQogICAgIHsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBz
Y3JhdGNoUmVnaXN0ZXIoKSk7CkBAIC0zNDIsMTEgKzM2MCw0MSBAQCBwdWJsaWM6CiAgICAgICAg
IG1fYXNzZW1ibGVyLmFuZHFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDY0
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5hbmRxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmQ2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5hbmRxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRl
eCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ2NChBZGRyZXNzIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9tcihzcmMub2Zm
c2V0LCBzcmMuYmFzZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhbmQ2NChCYXNlSW5kZXgg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX21y
KHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAg
fQorCiAgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3Qp
CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX2lyKGltbS5tX3ZhbHVlLCBzcmNEZXN0
KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfaW0oaW1tLm1fdmFsdWUsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX2lt
KGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNj
YWxlKTsKKyAgICB9CisKICAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3Rl
cklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBpbnRwdHJfdCBpbnRWYWx1ZSA9IGltbS5hc0lu
dHB0cigpOwpAQCAtNTUyLDExICs2MDAsNTEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxl
ci5uZWdxX3IoZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBuZWc2NChBZGRyZXNzIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWdxX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7
CisgICAgfQorCisgICAgdm9pZCBuZWc2NChCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5lZ3FfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBk
ZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9ycihzcmMsIGRlc3Qp
OwogICAgIH0KIAorICAgIHZvaWQgb3I2NChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9ybShzcmMsIGRlc3Qub2Zmc2V0
LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQg
b3I2NChBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIub3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIG9yNjQoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIub3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5z
Y2FsZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEFk
ZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9pbShpbW0ubV92YWx1
ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JxX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBk
ZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVn
aXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgaWYgKGltbS5tX3ZhbHVlIDw9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpCkBAIC02MTksMTYgKzcwNywzMSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3ViNjQoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJx
X2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHN1YjY0KEFkZHJlc3Mgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX21yKHNy
Yy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjY0KEJhc2VJ
bmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1
YnFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsK
KyAgICB9CisKICAgICB2b2lkIHN1YjY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdWI2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX3JtKHNyYywgZGVzdC5vZmZz
ZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9p
ZCB4b3I2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAg
bV9hc3NlbWJsZXIueG9ycV9ycihzcmMsIGRlc3QpOwpAQCAtNjUxLDYgKzc1NCwzMSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjY0KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfcm0oc3JjLCBkZXN0Lm9mZnNl
dCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lk
IHhvcjY0KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54b3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIHhvcjY0KEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnhvcnFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwg
c3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfaW0oaW1t
Lm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9y
NjQoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54b3JxX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0
LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnhv
cnFfaXIoaW1tLm1fdmFsdWUsIHNyY0Rlc3QpOwpAQCAtNjY2LDYgKzc5NCwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vdHFfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdDY0KEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm90cV9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Qu
c2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgbG9hZDY0KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNz
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX21yKGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGRlc3QpOwpAQCAtNzI1LDYgKzg1OCwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfaTMybShpbW0ubV92YWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdG9yZTY0KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92cV9pMzJtKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBh
ZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHN0b3JlNjQo
VHJ1c3RlZEltbTY0IGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAg
ICBpZiAoQ0FOX1NJR05fRVhURU5EXzMyXzY0KGltbS5tX3ZhbHVlKSkgewpAQCAtMTI5NCw3ICsx
NDMyLDI1NSBAQCBwdWJsaWM6CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjptb3Zl
KFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKICAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpicmFuY2hUZXN0OChjb25kLCBBZGRy
ZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSwgbWFzazgpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVk
QW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVl
LCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBh
dG9taWNTdHJvbmdDQVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lz
dGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVj
dGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1Zh
bHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM2NChSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsm
XSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM2NChSZWdp
c3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXgg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3Vs
dCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9
CiAKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FT
KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hncV9ybShu
ZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25k
LCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFs
dWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Mu
c2NhbGUpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVM2NChTdGF0dXNDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdW
YWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAg
IGF0b21pY1N0cm9uZ0NBUzY0KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRk
cmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVM2NChTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVl
LCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljV2Vha0NB
UzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBS
ZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1
cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1Zh
bHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM2NChT
dGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0
ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4g
YnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVl
LCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY0FkZDY0KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgYWRkNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNBZGQ2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkNjQoaW1tLCBhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ2
NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDY0KFJlZ2lz
dGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvY2soKTsKKyAgICAgICAgYWRkNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNTdWI2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjY0KGltbSwgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViNjQoVHJ1c3RlZEltbTMyIGltbSwg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIHN1YjY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWlj
U3ViNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNTdWI2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjY0KHJl
ZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBhbmQ2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY0FuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ2NChpbW0sIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDY0KFJlZ2lzdGVySUQgcmVnLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IGFuZDY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQo
UmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhbmQ2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY09yNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjY0KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I2NChUcnVzdGVkSW1tMzIgaW1t
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgb3I2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y09yNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY09yNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjY0KHJlZywg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yNjQoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICB4b3I2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1hvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I2NChpbW0sIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjY0KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhv
cjY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yNjQoUmVn
aXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3I2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY05lZzY0KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnNjQoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljTmVnNjQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY05vdDY0KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90NjQoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljTm90NjQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hjaGdBZGQ2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54
YWRkcV9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY1hjaGdBZGQ2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLnhhZGRxX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzY0
KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JtKHJlZywgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzY0
KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3Ffcm0ocmVnLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBsb2FkQWNxNjQoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGxvYWQ2NChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGxvYWRBY3E2NChCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBsb2FkNjQoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVJlbDY0
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KHNy
YywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw2NChSZWdpc3RlcklEIHNy
YywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KHNyYywgZGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KGltbSwgZGVzdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc3RvcmVSZWw2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAg
ICB7CisgICAgICAgIHN0b3JlNjQoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCB0
cnVuY2F0ZURvdWJsZVRvVWludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmN2dHRzZDJzaXFfcnIoc3JjLCBkZXN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZB
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5MCwxNiArMTkwLDIwIEBAIHBy
aXZhdGU6CiAgICAgICAgIE9QX0FERF9Fdkd2ICAgICAgICAgICAgICAgICAgICAgPSAweDAxLAog
ICAgICAgICBPUF9BRERfR3ZFdiAgICAgICAgICAgICAgICAgICAgID0gMHgwMywKICAgICAgICAg
T1BfQUREX0VBWEl2ICAgICAgICAgICAgICAgICAgICA9IDB4MDUsCisgICAgICAgIE9QX09SX0V2
R2IgICAgICAgICAgICAgICAgICAgICAgPSAweDA4LAogICAgICAgICBPUF9PUl9Fdkd2ICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwOSwKICAgICAgICAgT1BfT1JfR3ZFdiAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MEIsCiAgICAgICAgIE9QX09SX0VBWEl2ICAgICAgICAgICAgICAgICAgICAg
PSAweDBELAogICAgICAgICBPUF8yQllURV9FU0NBUEUgICAgICAgICAgICAgICAgID0gMHgwRiwK
KyAgICAgICAgT1BfQU5EX0V2R2IgICAgICAgICAgICAgICAgICAgICA9IDB4MjAsCiAgICAgICAg
IE9QX0FORF9Fdkd2ICAgICAgICAgICAgICAgICAgICAgPSAweDIxLAogICAgICAgICBPUF9BTkRf
R3ZFdiAgICAgICAgICAgICAgICAgICAgID0gMHgyMywKKyAgICAgICAgT1BfU1VCX0V2R2IgICAg
ICAgICAgICAgICAgICAgICA9IDB4MjgsCiAgICAgICAgIE9QX1NVQl9Fdkd2ICAgICAgICAgICAg
ICAgICAgICAgPSAweDI5LAogICAgICAgICBPUF9TVUJfR3ZFdiAgICAgICAgICAgICAgICAgICAg
ID0gMHgyQiwKICAgICAgICAgT1BfU1VCX0VBWEl2ICAgICAgICAgICAgICAgICAgICA9IDB4MkQs
CiAgICAgICAgIFBSRV9QUkVESUNUX0JSQU5DSF9OT1RfVEFLRU4gICAgPSAweDJFLAorICAgICAg
ICBPUF9YT1JfRXZHYiAgICAgICAgICAgICAgICAgICAgID0gMHgzMCwKICAgICAgICAgT1BfWE9S
X0V2R3YgICAgICAgICAgICAgICAgICAgICA9IDB4MzEsCiAgICAgICAgIE9QX1hPUl9HdkV2ICAg
ICAgICAgICAgICAgICAgICAgPSAweDMzLAogICAgICAgICBPUF9YT1JfRUFYSXYgICAgICAgICAg
ICAgICAgICAgID0gMHgzNSwKQEAgLTIyMyw2ICsyMjcsNyBAQCBwcml2YXRlOgogICAgICAgICBP
UF9HUk9VUDFfRXZJYiAgICAgICAgICAgICAgICAgID0gMHg4MywKICAgICAgICAgT1BfVEVTVF9F
YkdiICAgICAgICAgICAgICAgICAgICA9IDB4ODQsCiAgICAgICAgIE9QX1RFU1RfRXZHdiAgICAg
ICAgICAgICAgICAgICAgPSAweDg1LAorICAgICAgICBPUF9YQ0hHX0V2R2IgICAgICAgICAgICAg
ICAgICAgID0gMHg4NiwKICAgICAgICAgT1BfWENIR19Fdkd2ICAgICAgICAgICAgICAgICAgICA9
IDB4ODcsCiAgICAgICAgIE9QX01PVl9FYkdiICAgICAgICAgICAgICAgICAgICAgPSAweDg4LAog
ICAgICAgICBPUF9NT1ZfRXZHdiAgICAgICAgICAgICAgICAgICAgID0gMHg4OSwKQEAgLTI1Miw2
ICsyNTcsNyBAQCBwcml2YXRlOgogICAgICAgICBQUkVfU1NFX0YyICAgICAgICAgICAgICAgICAg
ICAgID0gMHhGMiwKICAgICAgICAgUFJFX1NTRV9GMyAgICAgICAgICAgICAgICAgICAgICA9IDB4
RjMsCiAgICAgICAgIE9QX0hMVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweEY0LAorICAg
ICAgICBPUF9HUk9VUDNfRWIgICAgICAgICAgICAgICAgICAgID0gMHhGNiwKICAgICAgICAgT1Bf
R1JPVVAzX0ViSWIgICAgICAgICAgICAgICAgICA9IDB4RjYsCiAgICAgICAgIE9QX0dST1VQM19F
diAgICAgICAgICAgICAgICAgICAgPSAweEY3LAogICAgICAgICBPUF9HUk9VUDNfRXZJeiAgICAg
ICAgICAgICAgICAgID0gMHhGNywgLy8gT1BfR1JPVVAzX0V2IGhhcyBhbiBpbW1lZGlhdGUsIHdo
ZW4gaW5zdHJ1Y3Rpb24gaXMgYSB0ZXN0LiAKQEAgLTI5MCw2ICsyOTYsOCBAQCBwcml2YXRlOgog
ICAgICAgICBPUF9TRVRDQyAgICAgICAgICAgID0gMHg5MCwKICAgICAgICAgT1AyXzNCWVRFX0VT
Q0FQRV9BRSA9IDB4QUUsCiAgICAgICAgIE9QMl9JTVVMX0d2RXYgICAgICAgPSAweEFGLAorICAg
ICAgICBPUDJfQ01QWENIR2IgICAgICAgID0gMHhCMCwKKyAgICAgICAgT1AyX0NNUFhDSEcgICAg
ICAgICA9IDB4QjEsCiAgICAgICAgIE9QMl9NT1ZaWF9HdkViICAgICAgPSAweEI2LAogICAgICAg
ICBPUDJfQlNGICAgICAgICAgICAgID0gMHhCQywKICAgICAgICAgT1AyX1RaQ05UICAgICAgICAg
ICA9IDB4QkMsCkBAIC0yOTgsNiArMzA2LDggQEAgcHJpdmF0ZToKICAgICAgICAgT1AyX01PVlNY
X0d2RWIgICAgICA9IDB4QkUsCiAgICAgICAgIE9QMl9NT1ZaWF9HdkV3ICAgICAgPSAweEI3LAog
ICAgICAgICBPUDJfTU9WU1hfR3ZFdyAgICAgID0gMHhCRiwKKyAgICAgICAgT1AyX1hBRERiICAg
ICAgICAgICA9IDB4QzAsCisgICAgICAgIE9QMl9YQUREICAgICAgICAgICAgPSAweEMxLAogICAg
ICAgICBPUDJfUEVYVFJXX0dkVWRJYiAgID0gMHhDNSwKICAgICAgICAgT1AyX1BTTExRX1VkcUli
ICAgICA9IDB4NzMsCiAgICAgICAgIE9QMl9QU1JMUV9VZHFJYiAgICAgPSAweDczLApAQCAtNDQw
LDYgKzQ1MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9B
RERfR3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGFkZGxf
bXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0FERF9HdkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9Cisg
ICAgCiAjaWYgIUNQVShYODZfNjQpCiAgICAgdm9pZCBhZGRsX21yKGNvbnN0IHZvaWQqIGFkZHIs
IFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTU2MiwxMSArNTc3LDIxIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0d2RXYsIGRzdCwgYmFzZSwgb2Zm
c2V0KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0d2RXYsIGRzdCwgYmFzZSwg
aW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYWRkcV9ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CiAKKyAgICB2b2lkIGFkZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNj
YWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYWRkcV9pcihpbnQgaW1tLCBSZWdpc3Rl
cklEIGRzdCkKICAgICB7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7
CkBAIC01OTEsNiArNjE2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTMyKGltbSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICB2b2lkIGFkZHFfaW0oaW50
IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgewor
ICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQ
MV9PUF9BREQsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9y
bWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfQURELCBiYXNl
LCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlh
dGUzMihpbW0pOworICAgICAgICB9CisgICAgfQogI2Vsc2UKICAgICB2b2lkIGFkZGxfaW0oaW50
IGltbSwgY29uc3Qgdm9pZCogYWRkcikKICAgICB7CkBAIC02MTQsMTEgKzY1MCw0MyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfR3ZFdiwgZHN0LCBiYXNl
LCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgYW5kbF9tcihpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0d2RXYsIGRzdCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYW5kbF9ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAg
ICAgfQogCisgICAgdm9pZCBhbmRsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBhbmR3X3JtKFJlZ2lzdGVySUQgc3JjLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5w
cmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIGFuZGxfcm0oc3JjLCBvZmZzZXQsIGJh
c2UpOworICAgIH0KKworICAgIHZvaWQgYW5kd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIGFu
ZGxfcm0oc3JjLCBvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmRiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0V2R2IsIHNyYywgYmFz
ZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZGJfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9FdkdiLCBzcmMsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIGFuZGxfaXIoaW50
IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5E
XzhfMzIoaW1tKSkgewpAQCAtNjQxLDYgKzcwOSw1MyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAKKyAgICB2b2lkIGFuZGxfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FO
X1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2
SXosIEdST1VQMV9PUF9BTkQsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIGFuZHdfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAg
ICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBvZmZzZXQp
OworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBH
Uk9VUDFfT1BfQU5ELCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1t
ZWRpYXRlMTYoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYW5kd19pbShpbnQg
aW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBz
Y2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpF
KTsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX0FORCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRp
YXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUs
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUxNihpbW0pOworICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCBhbmRiX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9H
Uk9VUDFfRWJJYiwgR1JPVVAxX09QX0FORCwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKworICAgIHZvaWQgYW5kYl9pbShpbnQgaW1t
LCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2Fs
ZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwg
R1JPVVAxX09QX0FORCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICBtX2Zv
cm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2
b2lkIGFuZHFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTY1
Nyw2ICs3NzIsNDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRl
MzIoaW1tKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHZvaWQgYW5kcV9tcihpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wNjQoT1BfQU5EX0d2RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3Rl
cklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQU5EX0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgYW5kcV9ybShSZWdpc3RlcklEIHNyYywgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIGFuZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKworICAgIHZvaWQgYW5kcV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkg
eworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdS
T1VQMV9PUF9BTkQsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1l
ZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX0FORCwgYmFzZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2b2lkIGFuZHFfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FO
X1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9BTkQsIGJhc2UsIGluZGV4LCBzY2FsZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQ
MV9Fdkl6LCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAg
ICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQog
I2Vsc2UKICAgICB2b2lkIGFuZGxfaW0oaW50IGltbSwgY29uc3Qgdm9pZCogYWRkcikKICAgICB7
CkBAIC03MDMsNiArODYwLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0dST1VQNV9FdiwgR1JPVVAxX09QX0FERCwgYmFzZSwgb2Zmc2V0KTsK
ICAgICB9CisKKyAgICB2b2lkIGluY3FfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcDY0KE9QX0dST1VQNV9FdiwgR1JPVVAxX09QX0FERCwgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KICNlbmRpZiAvLyBDUFUoWDg2XzY0KQogCiAgICAgdm9pZCBuZWds
X3IoUmVnaXN0ZXJJRCBkc3QpCkBAIC03MTUsNiArODc3LDE2IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JPVVAzX09QX05F
RywgZHN0KTsKICAgICB9CisKKyAgICB2b2lkIG5lZ3FfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNf
RXYsIEdST1VQM19PUF9ORUcsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBuZWdx
X20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYs
IEdST1VQM19PUF9ORUcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5k
aWYKIAogICAgIHZvaWQgbmVnbF9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKQEAgLTcy
Miw2ICs4OTQsMzMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1Bf
R1JPVVAzX0V2LCBHUk9VUDNfT1BfTkVHLCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZv
aWQgbmVnbF9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQ
M19FdiwgR1JPVVAzX09QX05FRywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0K
KworICAgIHZvaWQgbmVnd19tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbmVn
bF9tKG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBuZWd3X20oaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG5lZ2xf
bShvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBuZWdiX20o
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQM19FYiwgR1JPVVAzX09QX05FRywgYmFzZSwgb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICB2b2lkIG5lZ2JfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcChPUF9HUk9VUDNfRWIsIEdST1VQM19PUF9ORUcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICB9CisKICAgICB2b2lkIG5vdGxfcihSZWdpc3RlcklEIGRzdCkKICAgICB7CiAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1Qs
IGRzdCk7CkBAIC03MzIsNiArOTMxLDMzIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQM19FdiwgR1JPVVAzX09QX05PVCwgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdGxfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG5vdHdfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIG5vdGxfbShvZmZzZXQsIGJhc2UpOworICAgIH0KKworICAgIHZvaWQgbm90d19t
KGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOwor
ICAgICAgICBub3RsX20ob2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAg
IHZvaWQgbm90Yl9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRWIsIEdST1VQM19PUF9OT1QsIGJhc2Us
IG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBub3RiX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0ViLCBHUk9VUDNfT1BfTk9ULCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2b2lkIG5v
dHFfcihSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC03NDIsNiArOTY4LDExIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JP
VVAzX09QX05PVCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CisKKyAgICB2b2lkIG5vdHFfbShpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JPVVAz
X09QX05PVCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KICNlbmRpZgogCiAg
ICAgdm9pZCBvcmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpAQCAtNzU0LDEx
ICs5ODUsNDMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1Jf
R3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgb3JsX21yKGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9PUl9H
dkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lk
IG9ybF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAg
IHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R3YsIHNyYywgYmFzZSwg
b2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIG9ybF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfRXZHdiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBvcndfcm0oUmVnaXN0ZXJJ
RCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgb3JsX3JtKHNyYywgb2Zm
c2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yd19ybShSZWdpc3RlcklEIHNyYywgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAg
ICAgIG9ybF9ybShzcmMsIG9mZnNldCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R2IsIHNyYywg
YmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yYl9ybShSZWdpc3RlcklEIHNyYywg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfRXZHYiwgc3JjLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBvcmxfaXIoaW50
IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5E
XzhfMzIoaW1tKSkgewpAQCAtNzg0LDEyICsxMDQ3LDEwMSBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICB2b2lkIG9ybF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIGlmIChD
QU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9F
dkl6LCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIG9yd19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAg
IGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJeiwgR1JP
VVAxX09QX09SLCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRp
YXRlMTYoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgb3J3X2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOwor
ICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIGlu
ZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgo
aW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX09SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNl
dCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBvcmJfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9F
YkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7
CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwgR1JPVVAxX09Q
X09SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0KQogICAgIHZvaWQgb3JxX3Jy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcDY0KE9QX09SX0V2R3YsIHNyYywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lk
IG9ycV9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfT1JfR3ZFdiwgZHN0LCBiYXNl
LCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgb3JxX21yKGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX09SX0d2RXYsIGRzdCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgb3JxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9PUl9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7Cisg
ICAgfQorCisgICAgdm9pZCBvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfT1JfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBvcnFfaW0oaW50IGltbSwgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84
XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQ
MV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX09SLCBiYXNlLCBv
ZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgb3JxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
aWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9Q
X0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAg
ICB9CisKICAgICB2b2lkIG9ycV9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAg
ICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC04MzEsMTEgKzExODMs
NDMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0d2RXYs
IGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YmxfbXIoaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9HdkV2
LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIHN1
Ymxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7
CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBv
ZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgc3VibF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwg
aW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgc3Vid19ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3AoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIHN1Yndfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
cHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3Ao
T1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwor
ICAgIHZvaWQgc3ViYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9FdkdiLCBz
cmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBzdWJiX3JtKFJlZ2lzdGVySUQg
c3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBz
Y2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHYiwg
c3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBzdWJs
X2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdO
X0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTg2MSw2ICsxMjQ1LDUzIEBAIHB1YmxpYzoKICAgICAg
ICAgfQogICAgIH0KIAorICAgIHZvaWQgc3VibF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9TVUIsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9H
Uk9VUDFfRXZJeiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOwor
ICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgc3Vid19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9TVUIsIGJhc2Us
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0V2SXosIEdST1VQMV9PUF9TVUIsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWJ3
X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1Bf
U1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9TVUIsIGJhc2UsIGluZGV4
LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTE2KGlt
bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHN1YmJfaW0oaW50IGltbSwgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX0dST1VQMV9FYkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBvZmZzZXQpOworICAgICAg
ICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCisgICAgdm9pZCBzdWJiX2lt
KGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQ
MV9FYkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0
KQogICAgIHZvaWQgc3VicV9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ewpAQCAtODcyLDExICsxMzAzLDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfU1VCX0d2RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2
b2lkIHN1YnFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4
LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfU1VCX0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKwogICAgIHZvaWQgc3VicV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQo
T1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YnFf
cm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
NjQoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0K
KwogICAgIHZvaWQgc3VicV9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAg
ICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC05MDEsNiArMTM0MiwxNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOwogICAg
ICAgICB9CiAgICAgfQorCisgICAgdm9pZCBzdWJxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAg
ICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGlt
bSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZz
ZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAg
fQorICAgIH0KICNlbHNlCiAgICAgdm9pZCBzdWJsX2ltKGludCBpbW0sIGNvbnN0IHZvaWQqIGFk
ZHIpCiAgICAgewpAQCAtOTI0LDExICsxMzc2LDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX1hPUl9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CiAgICAgfQog
CisgICAgdm9pZCB4b3JsX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLm9uZUJ5dGVPcChPUF9YT1JfR3ZFdiwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgfQorCiAgICAgdm9pZCB4b3JsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3AoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHhv
cmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0
ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hPUl9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CisKICAgICB2b2lkIHhvcmxfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTk0
MCw2ICsxNDAyLDc1IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgeG9y
bF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5k
ZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihp
bW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIs
IEdST1VQMV9PUF9YT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1hPUiwg
YmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1t
ZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgeG9yd19ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICB4b3JsX3JtKHNy
Yywgb2Zmc2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcndfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNj
YWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUp
OworICAgICAgICB4b3JsX3JtKHNyYywgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAg
IH0KKworICAgIHZvaWQgeG9yd19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9YT1IsIGJhc2Us
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0V2SXosIEdST1VQMV9PUF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB4b3J3
X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1Bf
WE9SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9YT1IsIGJhc2UsIGluZGV4
LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTE2KGlt
bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHhvcmJfcm0oUmVnaXN0ZXJJRCBzcmMs
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcChPUF9YT1JfRXZHYiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAg
IHZvaWQgeG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfWE9SX0V2R2IsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKworICAgIHZvaWQgeG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0ViSWIsIEdST1VQMV9PUF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVy
LmltbWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcmJfaW0oaW50IGltbSwgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQ
MV9PUF9YT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0
ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKwogICAgIHZvaWQgeG9ybF9pcihpbnQgaW1tLCBS
ZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihp
bW0pKSB7CkBAIC05NzQsMTEgKzE1MDUsNDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
ICAgIAorICAgIHZvaWQgeG9ycV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9P
UF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4
KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCB4b3JxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9T
SUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFf
RXZJeiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKICAgICB2b2lkIHhvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hPUl9F
dkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCB4b3JxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hP
Ul9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIHhvcnFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YT1JfR3ZFdiwgZGVz
dCwgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcnFfbXIoaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hPUl9HdkV2
LCBkZXN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAg
ICB2b2lkIGx6Y250X3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKQEAgLTE1ODYs
MTEgKzIxNTMsMzggQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgeGNoZ2Jfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R2IsIHNyYywgYmFzZSwgb2Zmc2V0KTsK
KyAgICB9CisKKyAgICB2b2lkIHhjaGdiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R2IsIHNyYywgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgeGNoZ3dfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQg
eGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVn
aXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJl
Zml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1Bf
WENIR19Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAg
ICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBz
cmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCB4Y2hnbF9ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2
LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICNpZiBDUFUoWDg2
XzY0KQogICAgIHZvaWQgeGNoZ3FfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQog
ICAgIHsKQEAgLTE2MDYsNiArMjIwMCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CisKKyAgICB2b2lkIHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIG1vdmxfcnIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpAQCAtMTczMSw2ICsyMzMwLDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wOChPUF9NT1ZfRXZHdiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBtb3Z3X2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
LnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0dST1VQMTFfRXZJeiwgR1JPVVAxMV9NT1YsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1f
Zm9ybWF0dGVyLmltbWVkaWF0ZTE2KGltbSk7CisgICAgfQorCisgICAgdm9pZCBtb3Z3X2ltKGlu
dCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50
IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJ
WkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxMV9Fdkl6LCBHUk9V
UDExX01PViwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGUxNihpbW0pOworICAgIH0KKwogICAgIHZvaWQgbW92bF9FQVhtKGNvbnN0IHZv
aWQqIGFkZHIpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfTU9WX092
RUFYKTsKQEAgLTE4MDAsNiArMjQxMywxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVy
LmltbWVkaWF0ZTMyKGltbSk7CiAgICAgfQogCisgICAgdm9pZCBtb3ZxX2kzMm0oaW50IGltbSwg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDExX0V2SXos
IEdST1VQMTFfTU9WLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIG1fZm9y
bWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgfQorCiAgICAgdm9pZCBtb3ZxX2k2NHIoaW50
NjRfdCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfTU9WX0VBWEl2LCBkc3QpOwpAQCAtMjc3NSw2ICszMzk0LDkwIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9MT0NLKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBjbXB4Y2hnYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfQ01QWENI
R2IsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnYl9y
bShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklE
IGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4
KE9QMl9DTVBYQ0hHYiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY21weGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BF
UkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9DTVBYQ0hHLCBz
cmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY21weGNoZ3dfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNy
YywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNt
cHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFz
ZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnbF9ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcs
IHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGNtcHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Up
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfQ01QWENIRywgc3Jj
LCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9D
TVBYQ0hHLCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCB4YWRkYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfWEFERGIsIHNy
YywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkYl9ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBp
bnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KE9QMl9YQURE
Yiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgeGFkZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9YQURELCBzcmMsIGJhc2UsIG9mZnNldCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRsX3JtKFJlZ2lzdGVySUQgc3JjLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50
d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCB4YWRkbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci50d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2
NChPUDJfWEFERCwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhh
ZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5
dGVPcDY0KE9QMl9YQURELCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCBtZmVuY2UoKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIudGhy
ZWVCeXRlT3AoT1AyXzNCWVRFX0VTQ0FQRV9BRSwgT1AzX01GRU5DRSk7CkBAIC0zNzUxLDYgKzQ0
NTQsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHdyaXRlci5yZWdpc3Rlck1vZFJNKGdyb3Vw
T3AsIHJtKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgdHdvQnl0ZU9wOChUd29CeXRlT3Bj
b2RlSUQgb3Bjb2RlLCBpbnQgcmVnLCBSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFNpbmdsZUluc3RydWN0aW9uQnVmZmVyV3JpdGVyIHdyaXRlciht
X2J1ZmZlcik7CisgICAgICAgICAgICB3cml0ZXIuZW1pdFJleElmKGJ5dGVSZWdSZXF1aXJlc1Jl
eChyZWcsIGJhc2UpLCByZWcsIDAsIGJhc2UpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5dGVV
bmNoZWNrZWQoT1BfMkJZVEVfRVNDQVBFKTsKKyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRlVW5j
aGVja2VkKG9wY29kZSk7CisgICAgICAgICAgICB3cml0ZXIubWVtb3J5TW9kUk0ocmVnLCBiYXNl
LCBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB0d29CeXRlT3A4KFR3b0J5dGVP
cGNvZGVJRCBvcGNvZGUsIGludCByZWcsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlLCBpbnQgb2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBTaW5nbGVJ
bnN0cnVjdGlvbkJ1ZmZlcldyaXRlciB3cml0ZXIobV9idWZmZXIpOworICAgICAgICAgICAgd3Jp
dGVyLmVtaXRSZXhJZihieXRlUmVnUmVxdWlyZXNSZXgocmVnKSB8fCByZWdSZXF1aXJlc1JleChp
bmRleCwgYmFzZSksIHJlZywgaW5kZXgsIGJhc2UpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5
dGVVbmNoZWNrZWQoT1BfMkJZVEVfRVNDQVBFKTsKKyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRl
VW5jaGVja2VkKG9wY29kZSk7CisgICAgICAgICAgICB3cml0ZXIubWVtb3J5TW9kUk0ocmVnLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBJbW1l
ZGlhdGVzOgogICAgICAgICAvLwogICAgICAgICAvLyBBbiBpbW1lZGFpdGUgc2hvdWxkIGJlIGFw
cGVuZGVkIHdoZXJlIGFwcHJvcHJpYXRlIGFmdGVyIGFuIG9wIGhhcyBiZWVuIGVtaXR0ZWQuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQXRvbWlj
VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitBdG9taWNWYWx1ZTo6fkF0b21pY1ZhbHVlKCkKK3sKK30KKworV2lkdGggQXRv
bWljVmFsdWU6OmFjY2Vzc1dpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93aWR0aDsKK30K
Kwordm9pZCBBdG9taWNWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoY29tbWEsICJ3aWR0aCA9ICIsIG1f
d2lkdGgpOworICAgIAorICAgIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShjb21tYSwgb3V0KTsKK30K
KworVmFsdWUqIEF0b21pY1ZhbHVlOjpjbG9uZUltcGwoKSBjb25zdAoreworICAgIHJldHVybiBu
ZXcgQXRvbWljVmFsdWUoKnRoaXMpOworfQorCitBdG9taWNWYWx1ZTo6QXRvbWljVmFsdWUoS2lu
ZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBXaWR0aCB3aWR0aCwgVmFsdWUqIG9wZXJhbmQsIFZhbHVl
KiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNrZWRPcGNv
ZGUsIGtpbmQsIG9wZXJhbmQtPnR5cGUoKSwgb3JpZ2luLCBvZmZzZXQsIG9wZXJhbmQsIHBvaW50
ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIHNldEZlbmNlUmFuZ2UoSGVhcFJhbmdl
Ojp0b3AoKSk7CisgICAgCisgICAgQVNTRVJUKGJlc3RUeXBlKEdQLCBvcGVyYXRpb25XaWR0aCgp
KSA9PSBvcGVyYXRpb25UeXBlKCkpOworICAgIAorICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkg
eworICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAg
Y2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRv
bWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworQXRvbWlj
VmFsdWU6OkF0b21pY1ZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgV2lkdGggd2lkdGgs
IFZhbHVlKiBleHBlY3RlZFZhbHVlLCBWYWx1ZSogbmV3VmFsdWUsIFZhbHVlKiBwb2ludGVyLCBp
bnQzMl90IG9mZnNldCkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIGtp
bmQub3Bjb2RlKCkgPT0gQXRvbWljV2Vha0NBUyA/IEludDMyIDogZXhwZWN0ZWRWYWx1ZS0+dHlw
ZSgpLCBvcmlnaW4sIG9mZnNldCwgZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUsIHBvaW50ZXIpCisg
ICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIHNldEZlbmNlUmFuZ2UoSGVhcFJhbmdlOjp0b3Ao
KSk7CisgICAgCisgICAgQVNTRVJUKGJlc3RUeXBlKEdQLCBvcGVyYXRpb25XaWR0aCgpKSA9PSBv
cGVyYXRpb25UeXBlKCkpOworCisgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7CisgICAgY2Fz
ZSBBdG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKyNpbmNsdWRlICJCM1dpZHRoLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBBdG9taWNW
YWx1ZSA6IHB1YmxpYyBNZW1vcnlWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNj
ZXB0cyhLaW5kIGtpbmQpCisgICAgeworICAgICAgICByZXR1cm4gaXNBdG9taWMoa2luZC5vcGNv
ZGUoKSk7CisgICAgfQorICAgIAorICAgIH5BdG9taWNWYWx1ZSgpOworICAgIAorICAgIFR5cGUg
b3BlcmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNoaWxkKDApLT50eXBlKCk7IH0KKyAgICAK
KyAgICBXaWR0aCBvcGVyYXRpb25XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAg
ICAKKyAgICAvLyBTeW5vbnltIGZvciBvcGVyYXRpb25XaWR0aCgpLCBpZiB5b3UncmUgYWNjZXNz
aW5nIHZpYSBNZW1vcnlWYWx1ZS4KKyAgICBXaWR0aCBhY2Nlc3NXaWR0aCgpIGNvbnN0IG92ZXJy
aWRlOworICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwg
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBWYWx1ZSogY2xvbmVJbXBs
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9j
ZWR1cmU7CisgICAgCisgICAgQXRvbWljVmFsdWUoS2luZCwgT3JpZ2luLCBXaWR0aCwgVmFsdWUq
IG9wZXJhbmQsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAgIAorICAg
IEF0b21pY1ZhbHVlKEtpbmQsIE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBleHBlY3RlZFZhbHVlLCBW
YWx1ZSogbmV3VmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAg
IAorICAgIFdpZHRoIG1fd2lkdGg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDcgQEAgY2xh
c3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBJbnNlcnRpb25TZXQ7CiBjbGFzcyBQcm9jZWR1
cmU7CiBjbGFzcyBWYWx1ZTsKK3RlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBHZW5lcmljQmxvY2tJ
bnNlcnRpb25TZXQ7CiAKIGNsYXNzIEJhc2ljQmxvY2sgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEJhc2ljQmxvY2spOwpAQCAtMTU4LDYgKzE1OSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7
CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4gZnJp
ZW5kIGNsYXNzIEdlbmVyaWNCbG9ja0luc2VydGlvblNldDsKICAgICAKICAgICAvLyBJbnN0YW50
aWF0ZSB2aWEgUHJvY2VkdXJlLgogICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJs
ZSBmcmVxdWVuY3kpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNl
cnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Js
b2NrSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDM1ICsz
NiwxMyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIEJsb2NrSW5zZXJ0aW9u
U2V0OjpCbG9ja0luc2VydGlvblNldChQcm9jZWR1cmUgJnByb2MpCi0gICAgOiBtX3Byb2MocHJv
YykKKyAgICA6IEdlbmVyaWNCbG9ja0luc2VydGlvblNldChwcm9jLm1fYmxvY2tzKQorICAgICwg
bV9wcm9jKHByb2MpCiB7CiB9CiAKIEJsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25T
ZXQoKSB7IH0KIAotdm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KEJsb2NrSW5zZXJ0aW9u
JiYgaW5zZXJ0aW9uKQotewotICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoV1RGTW92ZShpbnNlcnRp
b24pKTsKLX0KLQotQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCh1bnNpZ25l
ZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNC
bG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIGZyZXF1ZW5jeSkpOwotICAgIEJh
c2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOwotICAgIGluc2VydChCbG9ja0luc2VydGlv
bihpbmRleCwgV1RGTW92ZShibG9jaykpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1CYXNp
Y0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9y
ZSwgZG91YmxlIGZyZXF1ZW5jeSkKLXsKLSAgICByZXR1cm4gaW5zZXJ0KGJlZm9yZS0+aW5kZXgo
KSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGJlZm9yZS0+ZnJlcXVlbmN5
KCkpOwotfQotCi1CYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QWZ0ZXIoQmFz
aWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBmcmVxdWVuY3kpCi17Ci0gICAgcmV0dXJuIGluc2VydChh
ZnRlci0+aW5kZXgoKSArIDEsIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBh
ZnRlci0+ZnJlcXVlbmN5KCkpOwotfQotCiBCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6
c3BsaXRGb3J3YXJkKAogICAgIEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCYgdmFsdWVJbmRl
eCwgSW5zZXJ0aW9uU2V0KiBpbnNlcnRpb25TZXQsIGRvdWJsZSBmcmVxdWVuY3kpCiB7CkBAIC0x
MDIsMzIgKzgwLDYgQEAgQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6OnNwbGl0Rm9ydwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgQmxvY2tJbnNlcnRpb25TZXQ6OmV4ZWN1dGUo
KQotewotICAgIGlmIChtX2luc2VydGlvbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgLy8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBp
biBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBiZWZvcmUKLSAgICAvLyBydW5u
aW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMuIFdlIHN0cm9uZ2x5IHByZWZlciBhIHN0YWJsZSBz
b3J0IGFuZCB3ZSB3YW50IGl0IHRvIGJlCi0gICAgLy8gZmFzdCwgc28gd2UgdXNlIGJ1YmJsZSBz
b3J0LgotICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5l
bmQoKSk7Ci0KLSAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX3Byb2MubV9ibG9ja3MsIG1faW5zZXJ0
aW9ucyk7Ci0gICAgCi0gICAgLy8gUHJ1bmUgb3V0IGVtcHR5IGVudHJpZXMuIFRoaXMgaXNuJ3Qg
c3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBpdCdzCi0gICAgLy8gaGVhbHRoeSB0byBrZWVwIHRoZSBi
bG9jayBsaXN0IGZyb20gZ3Jvd2luZy4KLSAgICBtX3Byb2MubV9ibG9ja3MucmVtb3ZlQWxsTWF0
Y2hpbmcoCi0gICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+JiBibG9ja1B0
cikgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gIWJsb2NrUHRyOwotICAgICAgICB9KTsK
LSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGlu
ZGljZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvYy5tX2Jsb2Nrcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgbV9wcm9jLm1fYmxvY2tzW2ldLT5tX2luZGV4ID0gaTsKLSAgICAK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKICNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxv
Y2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCbG9ja0luc2VydGlvblNldC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzR2VuZXJpY0Js
b2NrSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlIDx3
dGYvSW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzUsMjYgKzM2LDEz
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBJbnNlcnRpb25TZXQ7
CiAKLXR5cGVkZWYgV1RGOjpJbnNlcnRpb248c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBC
bG9ja0luc2VydGlvbjsKK3R5cGVkZWYgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxv
Y2s+OjpCbG9ja0luc2VydGlvbiBCbG9ja0luc2VydGlvbjsKIAotY2xhc3MgQmxvY2tJbnNlcnRp
b25TZXQgeworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgOiBwdWJsaWMgR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0PEJhc2ljQmxvY2s+IHsKIHB1YmxpYzoKICAgICBCbG9ja0luc2VydGlvblNldChQ
cm9jZWR1cmUmKTsKICAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKICAgICAKLSAgICB2b2lkIGlu
c2VydChCbG9ja0luc2VydGlvbiYmKTsKLQotICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBh
IGdpdmVuIGluZGV4LgotICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91
YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOwotCi0gICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBiZWZv
cmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNzIHRoZSBmcmVxdWVu
Y3kKLSAgICAvLyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0byBqdXN0IHVzZSB0
aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCi0gICAgLy8gdXN1YWxs
eSB3aGF0IHlvdSB3YW50LgotICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2Nr
KiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLQotICAgIC8vIEluc2VydHMgYSBu
ZXcgYmxvY2sgYWZ0ZXIgdGhlIGdpdmVuIGJsb2NrLgotICAgIEJhc2ljQmxvY2sqIGluc2VydEFm
dGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7Ci0KICAgICAv
LyBBIGhlbHBlciB0byBzcGxpdCBhIGJsb2NrIHdoZW4gZm9yd2FyZCBpdGVyYXRpbmcgb3ZlciBp
dC4gSXQgY3JlYXRlcyBhIG5ldyBibG9jayB0byBob2xkCiAgICAgLy8gZXZlcnl0aGluZyBiZWZv
cmUgdGhlIGluc3RydWN0aW9uIGF0IHZhbHVlSW5kZXguIFRoZSBjdXJyZW50IGJsb2NrIGlzIGxl
ZnQgd2l0aAogICAgIC8vIGV2ZXJ5dGhpbmcgYXQgYW5kIGFmdGVyIHZhbHVlSW5kZXguIElmIHRo
ZSBvcHRpb25hbCBJbnNlcnRpb25TZXQgaXMgcHJvdmlkZWQsIGl0IHdpbGwgZ2V0CkBAIC04MCwx
MiArNjgsOSBAQCBwdWJsaWM6CiAgICAgQmFzaWNCbG9jayogc3BsaXRGb3J3YXJkKAogICAgICAg
ICBCYXNpY0Jsb2NrKiwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIEluc2VydGlvblNldCogPSBudWxs
cHRyLAogICAgICAgICBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7Ci0gICAgCi0gICAgYm9vbCBl
eGVjdXRlKCk7CiAKIHByaXZhdGU6CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7Ci0gICAgVmVjdG9y
PEJsb2NrSW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsOCBAQCBib29sIEVmZmVjdHM6OmludGVyZmVyZXMo
Y29uc3QgRWZmZWN0cyYgCiAgICAgICAgIHx8IGludGVyZmVyZXNXaXRoV3JpdGVzUGlubmVkKG90
aGVyLCAqdGhpcykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKICAg
ICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVyLnJlYWRzKQotICAgICAgICB8fCByZWFkcy5v
dmVybGFwcyhvdGhlci53cml0ZXMpOworICAgICAgICB8fCByZWFkcy5vdmVybGFwcyhvdGhlci53
cml0ZXMpCisgICAgICAgIHx8IChmZW5jZSAmJiBvdGhlci5mZW5jZSk7CiB9CiAKIGJvb2wgRWZm
ZWN0czo6b3BlcmF0b3I9PShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAgLTk1LDcgKzk2
LDggQEAgYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0IEVmZmVjdHMmIAogICAgICAgICAm
JiB3cml0ZXNQaW5uZWQgPT0gb3RoZXIud3JpdGVzUGlubmVkCiAgICAgICAgICYmIHJlYWRzUGlu
bmVkID09IG90aGVyLnJlYWRzUGlubmVkCiAgICAgICAgICYmIHdyaXRlcyA9PSBvdGhlci53cml0
ZXMKLSAgICAgICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHM7CisgICAgICAgICYmIHJlYWRzID09
IG90aGVyLnJlYWRzCisgICAgICAgICYmIGZlbmNlID09IG90aGVyLmZlbmNlOwogfQogCiBib29s
IEVmZmVjdHM6Om9wZXJhdG9yIT0oY29uc3QgRWZmZWN0cyYgb3RoZXIpIGNvbnN0CkBAIC0xMjAs
NiArMTIyLDggQEAgdm9pZCBFZmZlY3RzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbgogICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJXcml0ZXNQaW5uZWQiKTsKICAgICBpZiAocmVhZHNQaW5u
ZWQpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlJlYWRzUGlubmVkIik7CisgICAgaWYgKGZl
bmNlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJGZW5jZSIpOwogICAgIGlmICh3cml0ZXMp
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlczoiLCB3cml0ZXMpOwogICAgIGlmIChy
ZWFkcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkod29ya2luZyBj
b3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgc3RydWN0IEVmZmVjdHMgewogICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMxNzMKICAgICBib29sIHJlYWRzUGlu
bmVkIHsgZmFsc2UgfTsKICAgICBib29sIHdyaXRlc1Bpbm5lZCB7IGZhbHNlIH07CisgICAgCisg
ICAgLy8gTWVtb3J5IGZlbmNlcyBjYW5ub3QgYmUgcmVvcmRlcmVkIGFyb3VuZCBlYWNoIG90aGVy
IHJlZ2FyZGxlc3Mgb2YgdGhlaXIgZWZmZWN0cy4gVGhpcyBpcyBmbGFnZ2VkCisgICAgLy8gaWYg
dGhlIG9wZXJhdGlvbiBpcyBhIG1lbW9yeSBmZW5jZS4KKyAgICBib29sIGZlbmNlIHsgZmFsc2Ug
fTsKIAogICAgIEhlYXBSYW5nZSB3cml0ZXM7CiAgICAgSGVhcFJhbmdlIHJlYWRzOwpAQCAtODks
NiArOTMsNyBAQCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IEhlYXBS
YW5nZTo6dG9wKCk7CiAgICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAg
IHJlc3VsdC53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVl
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMTAzLDcgKzEwOCw3IEBAIHN0
cnVjdCBFZmZlY3RzIHsKIAogICAgIGJvb2wgbXVzdEV4ZWN1dGUoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRlcm1pbmFsIHx8IGV4aXRzU2lkZXdheXMgfHwgd3JpdGVzTG9jYWxTdGF0
ZSB8fCB3cml0ZXMgfHwgd3JpdGVzUGlubmVkOworICAgICAgICByZXR1cm4gdGVybWluYWwgfHwg
ZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQaW5u
ZWQgfHwgZmVuY2U7CiAgICAgfQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHJlb3JkZXJpbmcg
aW5zdHJ1Y3Rpb25zIHdpdGggdGhlc2UgcmVzcGVjdGl2ZSBlZmZlY3RzIHdvdWxkIGNoYW5nZSBw
cm9ncmFtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTQyLDYgKzE0Miw3IEBAIHN0cnVjdCBJbXB1cmVCbG9ja0Rh
dGEgewogCiAgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiByZWFkczsgLy8gVGhpcyBvbmx5IGdldHMg
dXNlZCBmb3IgZm9yd2FyZCBzdG9yZSBlbGltaW5hdGlvbi4KICAgICBSYW5nZVNldDxIZWFwUmFu
Z2U+IHdyaXRlczsgLy8gVGhpcyBnZXRzIHVzZWQgZm9yIGJvdGggbG9hZCBhbmQgc3RvcmUgZWxp
bWluYXRpb24uCisgICAgYm9vbCBmZW5jZTsKIAogICAgIE1lbW9yeVZhbHVlTWFwIHN0b3Jlc0F0
SGVhZDsKICAgICBNZW1vcnlWYWx1ZU1hcCBtZW1vcnlWYWx1ZXNBdFRhaWw7CkBAIC0xNzQsMTIg
KzE3NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KG1lbW9yeSAmJiBtZW1vcnktPmlzU3RvcmUoKQogICAgICAgICAgICAgICAgICAgICAmJiAhZGF0
YS5yZWFkcy5vdmVybGFwcyhtZW1vcnktPnJhbmdlKCkpCi0gICAgICAgICAgICAgICAgICAgICYm
ICFkYXRhLndyaXRlcy5vdmVybGFwcyhtZW1vcnktPnJhbmdlKCkpKQorICAgICAgICAgICAgICAg
ICAgICAmJiAhZGF0YS53cml0ZXMub3ZlcmxhcHMobWVtb3J5LT5yYW5nZSgpKQorICAgICAgICAg
ICAgICAgICAgICAmJiAoIWRhdGEuZmVuY2UgfHwgIW1lbW9yeS0+aGFzRmVuY2UoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGRhdGEuc3RvcmVzQXRIZWFkLmFkZChtZW1vcnkpOwogICAgICAgICAg
ICAgICAgIGRhdGEucmVhZHMuYWRkKGVmZmVjdHMucmVhZHMpOwogCiAgICAgICAgICAgICAgICAg
aWYgKEhlYXBSYW5nZSB3cml0ZXMgPSBlZmZlY3RzLndyaXRlcykKICAgICAgICAgICAgICAgICAg
ICAgY2xvYmJlcihkYXRhLCB3cml0ZXMpOworICAgICAgICAgICAgICAgIGRhdGEuZmVuY2UgfD0g
ZWZmZWN0cy5mZW5jZTsKIAogICAgICAgICAgICAgICAgIGlmIChtZW1vcnkpCiAgICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmFkZChtZW1vcnkpOwpAQCAtNDQ1LDgg
KzQ0OCw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgZGF0YUxvZygiQmFkIG1lbW9yeSB2YWx1ZTogIiwgZGVlcER1bXAobV9wcm9jLCBtX3Zh
bHVlKSwgIlxuIik7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC00NzgsNiArNDc5LDkgQEAg
cHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CiAgICAgYm9vbCBmaW5kU3Rv
cmVBZnRlckNsb2JiZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXIm
IGZpbHRlcikKICAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+
aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAg
IC8vIFdlIGNhbiBlbGltaW5hdGUgYSBzdG9yZSBpZiBldmVyeSBmb3J3YXJkIHBhdGggaGl0cyBh
IHN0b3JlIHRvIHRoZSBzYW1lIGxvY2F0aW9uIGJlZm9yZQogICAgICAgICAvLyBoaXR0aW5nIGFu
eSBvcGVyYXRpb24gdGhhdCBvYnNlcnZlcyB0aGUgc3RvcmUuIFRoaXMgc2VhcmNoIHNlZW1zIGxp
a2UgaXQgc2hvdWxkIGJlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSwgYnV0IGluIHRoZSBvdmVyd2hl
bG1pbmcgbWFqb3JpdHkgb2YgY2FzZXMgaXQgd2lsbCBhbG1vc3QgaW1tZWRpYXRlbHkgaGl0IGFu
IApAQCAtNjE0LDYgKzYxOCwxMiBAQCBwcml2YXRlOgogICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcgYmFja3dhcmQgZm9yICIsICpw
dHIsICIuLi5cbiIpOwogICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpLT5oYXNGZW5jZSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgR2l2aW5nIHVwIGJlY2F1c2UgZmVuY2VzLlxuIik7CisgICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAoTWVt
b3J5VmFsdWUqIG1hdGNoID0gbV9kYXRhLm1lbW9yeVZhbHVlc0F0VGFpbC5maW5kKHB0ciwgZmls
dGVyKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEZvdW5kICIsICptYXRjaCwgIiBsb2NhbGx5LlxuIik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYg
KzkyLDcgQEAgdm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CiAgICAg
fQogCisgICAgLy8gVGhpcyBwdXRzIHRoZSBJUiBpbiBxdWlya3MgbW9kZS4KICAgICBsb3dlck1h
Y3Jvcyhwcm9jZWR1cmUpOwogCiAgICAgaWYgKG9wdExldmVsID49IDEpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNl
dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNC
bG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlB1cmVOYU4uaCIKKyNpbmNsdWRlIDx3
dGYvQnViYmxlU29ydC5oPgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBJ
bnNlcnRpb25TZXQ7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CitjbGFzcyBHZW5l
cmljQmxvY2tJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIHR5cGVkZWYgV1RGOjpJbnNlcnRp
b248c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBCbG9ja0luc2VydGlvbjsKKyAgICAKKyAg
ICBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQoVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Js
b2NrPj4mIGJsb2NrcykKKyAgICAgICAgOiBtX2Jsb2NrcyhibG9ja3MpCisgICAgeworICAgIH0K
KyAgICAKKyAgICB2b2lkIGluc2VydChCbG9ja0luc2VydGlvbiYmIGluc2VydGlvbikKKyAgICB7
CisgICAgICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoV1RGTW92ZShpbnNlcnRpb24pKTsKKyAgICB9
CisKKyAgICAvLyBJbnNlcnQgYSBuZXcgYmxvY2sgYXQgYSBnaXZlbiBpbmRleC4KKyAgICBCYXNp
Y0Jsb2NrKiBpbnNlcnQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQor
ICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNp
Y0Jsb2NrKFVJTlRfTUFYLCBmcmVxdWVuY3kpKTsKKyAgICAgICAgQmFzaWNCbG9jayogcmVzdWx0
ID0gYmxvY2suZ2V0KCk7CisgICAgICAgIGluc2VydChCbG9ja0luc2VydGlvbihpbmRleCwgV1RG
TW92ZShibG9jaykpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvLyBJ
bnNlcnRzIGEgbmV3IGJsb2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVzdWFsbHkgeW91IHdp
bGwgbm90IHBhc3MgdGhlIGZyZXF1ZW5jeQorICAgIC8vIGFyZ3VtZW50LiBQYXNzaW5nIFBOYU4g
Y2F1c2VzIHVzIHRvIGp1c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdiZWZvcmUnIGJsb2Nr
LiBUaGF0J3MKKyAgICAvLyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCisgICAgQmFzaWNCbG9jayog
aW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4p
CisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0KGJlZm9yZS0+aW5kZXgoKSwgZnJlcXVlbmN5
ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGJlZm9yZS0+ZnJlcXVlbmN5KCkpOworICAgIH0K
KworICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYWZ0ZXIgdGhlIGdpdmVuIGJsb2NrLgorICAg
IEJhc2ljQmxvY2sqIGluc2VydEFmdGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVl
bmN5ID0gUE5hTikKKyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnQoYWZ0ZXItPmluZGV4KCkg
KyAxLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYWZ0ZXItPmZyZXF1ZW5j
eSgpKTsKKyAgICB9CisKKyAgICBib29sIGV4ZWN1dGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1f
aW5zZXJ0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgICAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFu
eSBvcmRlci4gU28sIHdlIG5lZWQgdG8gc29ydCB0aGVtIGJlZm9yZQorICAgICAgICAvLyBydW5u
aW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMuIFdlIHN0cm9uZ2x5IHByZWZlciBhIHN0YWJsZSBz
b3J0IGFuZCB3ZSB3YW50IGl0IHRvIGJlCisgICAgICAgIC8vIGZhc3QsIHNvIHdlIHVzZSBidWJi
bGUgc29ydC4KKyAgICAgICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNl
cnRpb25zLmVuZCgpKTsKKyAgICAgICAgCisgICAgICAgIGV4ZWN1dGVJbnNlcnRpb25zKG1fYmxv
Y2tzLCBtX2luc2VydGlvbnMpOworICAgICAgICAKKyAgICAgICAgLy8gUHJ1bmUgb3V0IGVtcHR5
IGVudHJpZXMuIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBpdCdzCisgICAgICAg
IC8vIGhlYWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCisgICAgICAg
IG1fYmxvY2tzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgWyZdIChzdGQ6OnVuaXF1
ZV9wdHI8QmFzaWNCbG9jaz4mIGJsb2NrUHRyKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gIWJsb2NrUHRyOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMuCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIG1fYmxvY2tzW2ldLT5tX2luZGV4ID0gaTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2lj
QmxvY2s+PiYgbV9ibG9ja3M7CisgICAgVmVjdG9yPEJsb2NrSW5zZXJ0aW9uLCA4PiBtX2luc2Vy
dGlvbnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOwogICAgIH0KICAgICAKKyAgICBIZWFwUmFuZ2Ugb3BlcmF0b3J8
KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSGVh
cFJhbmdlKAorICAgICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwgb3RoZXIubV9iZWdpbiksCisg
ICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQpKTsKKyAgICB9CisgICAgCiAg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW4gIT0gbV9l
bmQ7IH0KIAogICAgIHVuc2lnbmVkIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbjsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuY3BwCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNiArNTgsMTEgQEAgVmFsdWUqIEluc2VydGlvblNl
dDo6aW5zZXJ0Qm90dG9tKHNpemVfdAogICAgIHJldHVybiBpbnNlcnRCb3R0b20oaW5kZXgsIGxp
a2VWYWx1ZS0+b3JpZ2luKCksIGxpa2VWYWx1ZS0+dHlwZSgpKTsKIH0KIAorVmFsdWUqIEluc2Vy
dGlvblNldDo6aW5zZXJ0Q2xvbmUoc2l6ZV90IGluZGV4LCBWYWx1ZSogdmFsdWUpCit7CisgICAg
cmV0dXJuIGluc2VydFZhbHVlKGluZGV4LCBtX3Byb2NlZHVyZS5jbG9uZSh2YWx1ZSkpOworfQor
CiB2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykKIHsKICAgICBi
dWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSw2ICs3MSw4IEBAIHB1YmxpYzoKIAogICAgIFZhbHVlKiBpbnNlcnRC
b3R0b20oc2l6ZV90IGluZGV4LCBPcmlnaW4sIFR5cGUpOwogICAgIFZhbHVlKiBpbnNlcnRCb3R0
b20oc2l6ZV90IGluZGV4LCBWYWx1ZSopOworICAgIAorICAgIFZhbHVlKiBpbnNlcnRDbG9uZShz
aXplX3QgaW5kZXgsIFZhbHVlKik7CiAKICAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxMSArMjksMTMgQEAKICNpZiBFTkFCTEUoQjNfSklU
KQogCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCisjaW5jbHVk
ZSAiQjNBdG9taWNWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNp
bmNsdWRlICJCM0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgi
CiAjaW5jbHVkZSAiQjNDYXNlQ29sbGVjdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJCM0NvbnN0
UHRyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0ZlbmNlVmFsdWUuaCIKICNpbmNsdWRlICJCM0luc2Vy
dGlvblNldElubGluZXMuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAi
QjNQYXRjaHBvaW50VmFsdWUuaCIKQEAgLTQyLDYgKzQ0LDcgQEAKICNpbmNsdWRlICJCM1N0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcy5oIgogI2luY2x1ZGUgIkIzU3dpdGNoVmFsdWUuaCIKICNpbmNs
dWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCiAjaW5jbHVk
ZSAiQjNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCkBAIC01OCwxMSArNjEsMTQgQEAgcHVibGljOgogICAgICAgICA6IG1f
cHJvYyhwcm9jKQogICAgICAgICAsIG1fYmxvY2tJbnNlcnRpb25TZXQocHJvYykKICAgICAgICAg
LCBtX2luc2VydGlvblNldChwcm9jKQorICAgICAgICAsIG1fdXNlQ291bnRzKHByb2MpCiAgICAg
ewogICAgIH0KIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtX3Byb2MuaGFzUXVpcmtzKCkpOworICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwogICAgICAg
ICAgICAgcHJvY2Vzc0N1cnJlbnRCbG9jaygpOwpAQCAtNzIsNiArNzgsMTAgQEAgcHVibGljOgog
ICAgICAgICAgICAgbV9wcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAgICAgICAgICAgICBtX3By
b2MuaW52YWxpZGF0ZUNGRygpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGlz
IGluZGljYXRlcyB0aGF0IHdlJ3ZlIAorICAgICAgICBtX3Byb2Muc2V0SGFzUXVpcmtzKHRydWUp
OworICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgICB9CiAgICAgCkBAIC0x
ODUsNyArMTk1LDk2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICAgICAgaWYgKGlzWDg2
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbG9hZC1sb2FkIGZlbmNlLiBU
aGlzIGNvZGVnZW5zIHRvIG5vdGhpbmcgb24gWDg2LiBXZSB1c2UgaXQgdG8gdGVsbCB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgLy8gY29tcGlsZXIgbm90IHRvIGJsb2NrIGxvYWQgbW90aW9uLgor
ICAgICAgICAgICAgICAgICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxGZW5jZVZhbHVlPihtX2luZGV4LCBtX29yaWdpbik7CisgICAgICAgICAgICAgICAgICAg
IGZlbmNlLT5yZWFkID0gSGVhcFJhbmdlKCk7CisgICAgICAgICAgICAgICAgICAgIGZlbmNlLT53
cml0ZSA9IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAvLyBLaWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNob3VsZCB1bmxvY2sgYSBidW5j
aCBvZiBjb2RlIHNpbXBsaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5y
ZXBsYWNlV2l0aEJvdHRvbShtX2luc2VydGlvblNldCwgbV9pbmRleCk7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KIAorICAgICAg
ICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgY2FzZSBBdG9taWNTdHJvbmdD
QVM6IHsKKyAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0
b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgICAgIFdpZHRo
IHdpZHRoID0gYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChpc0Nhbm9uaWNhbFdpZHRoKHdpZHRoKSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFsdWUqIGV4
cGVjdGVkVmFsdWUgPSBhdG9taWMtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIE9uIEFSTSwgdGhlIGxvYWQgcGFydCBvZiB0aGUgQ0FTIGRvZXMgYSBsb2Fk
IHdpdGggemVybyBleHRlbnNpb24uIFRoZXJlZm9yZSwgd2UgbmVlZAorICAgICAgICAgICAgICAg
IC8vIHRvIHplcm8tZXh0ZW5kIHRoZSBpbnB1dC4KKyAgICAgICAgICAgICAgICBWYWx1ZSogbWFz
a2VkRXhwZWN0ZWRWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAg
ICAgICAgICAgICAgIG1faW5kZXgsIEJpdEFuZCwgbV9vcmlnaW4sIGV4cGVjdGVkVmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENvbnN0YW50KG1faW5k
ZXgsIGV4cGVjdGVkVmFsdWUsIG1hc2sod2lkdGgpKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgYXRvbWljLT5jaGlsZCgwKSA9IG1hc2tlZEV4cGVjdGVkVmFsdWU7CisgICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNo
Z0FkZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAgICAgICAgIGNhc2Ug
QXRvbWljWGNoZ09yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgICAgICAg
ICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnOiB7Cisg
ICAgICAgICAgICAgICAgLy8gT24gWDg2LCB0aGVzZSBtYXkgYWN0dWFsbHkgcmV0dXJuIGdhcmJh
Z2UgaW4gdGhlIGhpZ2ggYml0cy4gT24gQVJNNjQsIHRoZXNlIHNvcnRhCisgICAgICAgICAgICAg
ICAgLy8gemVyby1leHRlbmQgdGhlaXIgaGlnaCBiaXRzLCBleGNlcHQgdGhhdCB0aGUgaGlnaCBi
aXRzIG1pZ2h0IGdldCBwb2xsdXRlZCBieSBoaWdoCisgICAgICAgICAgICAgICAgLy8gYml0cyBp
biB0aGUgb3BlcmFuZC4gLiBTbywgZWl0aGVyIHdheSwgd2UgbmVlZCB0byB0aHJvdyBhIHNpZ24t
ZXh0ZW5kIG9uIHRoZXNlCisgICAgICAgICAgICAgICAgLy8gdGhpbmdzLgorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5vcGNvZGUoKSA9PSBBdG9taWNYY2hnU3ViICYmIG1fdXNlQ291bnRzLm51
bVVzZXMobV92YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9uIHg4NiwgeGNo
Z2FkZCBpcyBiZXR0ZXIgdGhhbiB4Y2hnc3ViIGlmIGl0IGhhcyBhbnkgdXNlcnMuCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5zZXRLaW5kVW5zYWZlbHkoQXRvbWljWGNoZ0FkZCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwg
TmVnLCBtX29yaWdpbiwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBib29sIGV4ZW1wdCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvbWlj
WGNoZ1N1YjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAg
ICAgICAgICAgICAgICAgICAgZXhlbXB0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGV4ZW1wdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRv
bWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICAgICAgV2lkdGgg
d2lkdGggPSBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKGlzQ2Fub25pY2FsV2lkdGgod2lkdGgpKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYWx1ZSogbmV3
VmFsdWUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4LCBzaWduRXh0ZW5kT3Bjb2RlKHdpZHRoKSwgbV9vcmlnaW4sCisgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENsb25lKG1faW5kZXgsIG1fdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElk
ZW50aXR5KG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
QEAgLTQ3MCw2ICs1NjksNyBAQCBwcml2YXRlOgogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAg
IEJsb2NrSW5zZXJ0aW9uU2V0IG1fYmxvY2tJbnNlcnRpb25TZXQ7CiAgICAgSW5zZXJ0aW9uU2V0
IG1faW5zZXJ0aW9uU2V0OworICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBCYXNpY0Js
b2NrKiBtX2Jsb2NrOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgVmFsdWUqIG1fdmFsdWU7
CkBAIC00NzcsMjEgKzU3NywxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jaGFuZ2VkIHsgZmFs
c2UgfTsKIH07CiAKLWJvb2wgbG93ZXJNYWNyb3NJbXBsKFByb2NlZHVyZSYgcHJvYykKLXsKLSAg
ICBMb3dlck1hY3JvcyBsb3dlck1hY3Jvcyhwcm9jKTsKLSAgICByZXR1cm4gbG93ZXJNYWNyb3Mu
cnVuKCk7Ci19Ci0KIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiBib29sIGxvd2VyTWFjcm9z
KFByb2NlZHVyZSYgcHJvYykKIHsKLSAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywgImxv
d2VyTWFjcm9zIik7Ci0gICAgYm9vbCByZXN1bHQgPSBsb3dlck1hY3Jvc0ltcGwocHJvYyk7Ci0g
ICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWxvd2Vy
TWFjcm9zSW1wbChwcm9jKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBMb3dlck1hY3JvcyBs
b3dlck1hY3Jvcyhwcm9jKTsKKyAgICByZXR1cm4gbG93ZXJNYWNyb3MucnVuKCk7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3NB
ZnRlck9wdGltaXphdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsMTUgKzE1NiwxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBSb3RMOiB7CiAgICAgICAgICAgICAgICAgLy8g
QVJNNjQgZG9lc24ndCBoYXZlIGEgcm90YXRlIGxlZnQuCiAgICAgICAgICAgICAgICAgaWYgKGlz
QVJNNjQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWYWx1ZSogbmV3U2hpZnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KG1faW5kZXgsIE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiByb3RhdGUgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIFJvdFIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVl
LT5jaGlsZCgwKSwgbmV3U2hpZnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
cmVwbGFjZVdpdGhJZGVudGl0eShyb3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG5l
d1NoaWZ0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBOZWcsIG1fdmFs
dWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlKiByb3RhdGUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIFJvdFIs
IG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbmV3U2hpZnQpOworICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KHJvdGF0ZSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjEyOTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDEyICsyOCwxNCBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUg
IkFpckJsb2NrSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlyQ0NhbGxTcGVjaWFsLmgiCiAj
aW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1
ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCiAjaW5jbHVk
ZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3Qu
aCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKQEAgLTcyLDYgKzc0LDE2IEBAIG5hbWVzcGFj
ZSB7CiAKIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCisvLyBGSVhNRTogV2Ugd291bGRu
J3QgbmVlZCB0aGlzIGlmIEFpciBzdXBwb3J0ZWQgV2lkdGggbW9kaWZpZXJzIGluIEFpcjo6S2lu
ZC4KKy8vIE9PUFMhISEgKG5lZWQgYSBidWcgVVJMKQorI2RlZmluZSBPUENPREVfRk9SX1dJRFRI
KG9wY29kZSwgd2lkdGgpICggXAorICAgICh3aWR0aCkgPT0gV2lkdGg4ID8gb3Bjb2RlICMjIDgg
OiBcCisgICAgKHdpZHRoKSA9PSBXaWR0aDE2ID8gb3Bjb2RlICMjIDE2IDogXAorICAgICh3aWR0
aCkgPT0gV2lkdGgzMiA/IG9wY29kZSAjIyAzMiA6IFwKKyAgICBvcGNvZGUgIyMgNjQpCisjZGVm
aW5lIE9QQ09ERV9GT1JfQ0FOT05JQ0FMX1dJRFRIKG9wY29kZSwgd2lkdGgpICggXAorICAgICh3
aWR0aCkgPT0gV2lkdGg2NCA/IG9wY29kZSAjIyA2NCA6IG9wY29kZSAjIyAzMikKKwogY2xhc3Mg
TG93ZXJUb0FpciB7CiBwdWJsaWM6CiAgICAgTG93ZXJUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVy
ZSkKQEAgLTgzLDYgKzk1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2RvbWluYXRvcnMocHJv
Y2VkdXJlLmRvbWluYXRvcnMoKSkKICAgICAgICAgLCBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCiAg
ICAgICAgICwgbV9jb2RlKHByb2NlZHVyZS5jb2RlKCkpCisgICAgICAgICwgbV9ibG9ja0luc2Vy
dGlvblNldChtX2NvZGUpCisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICAgICAgLCBt
X2VheChYODZSZWdpc3RlcnM6OmVheCkKKyAgICAgICAgLCBtX2VjeChYODZSZWdpc3RlcnM6OmVj
eCkKKyAgICAgICAgLCBtX2VkeChYODZSZWdpc3RlcnM6OmVkeCkKKyNlbmRpZgogICAgIHsKICAg
ICB9CiAKQEAgLTEyNCwxNCArMTQyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gaG9pc3RlZCBh
ZGRyZXNzIGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxv
b3AuCiAgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUuYmxv
Y2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7Ci0gICAgICAg
ICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgotICAgICAgICAgICAgbV9pbnN0cy5yZXNpemUoMCk7
CiAKICAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9jayk7CiAK
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvd2Vy
aW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KKyAg
ICAgICAgICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3Vj
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNj
ZXNzb3JzKCkuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9j
ayhtX2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3ko
KSkpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2NrcyBpbiBy
ZXZlcnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hhdCBhbGxv
d3MgdXMKICAgICAgICAgICAgIC8vIHRvIG1hdGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5LgogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgewpAQCAtMTQ5
LDE5ICsxNzEsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBtX2luc3RzIGNv
bnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcwotICAgICAgICAgICAg
Ly8gaXQgaW4gcmV2ZXJzZS4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5zdHMu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9pbnN0
c1tpXSkKLSAgICAgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5hcHBlbmRJ
bnN0KFdURk1vdmUoaW5zdCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KLSAgICAgICAg
ICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29y
cygpKSB7Ci0gICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNzb3Jz
KCkuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayhtX2Js
b2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3koKSkpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKG1f
YmxvY2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fYmxv
Y2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwogCiAgICAgICAgIEFpcjo6SW5zZXJ0aW9uU2V0IGlu
c2VydGlvblNldChtX2NvZGUpOwogICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBtX3Byb2xvZ3Vl
KQpAQCAtNTYyLDExICs1NzUsMTkgQEAgcHJpdmF0ZToKICAgICAKICAgICBBcmdQcm9taXNlIGxv
YWRQcm9taXNlQW55T3Bjb2RlKFZhbHVlKiBsb2FkVmFsdWUpCiAgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChsb2FkVmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpKTsKICAgICAgICAgaWYgKCFj
YW5CZUludGVybmFsKGxvYWRWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7CiAgICAg
ICAgIGlmIChjcm9zc2VzSW50ZXJmZXJlbmNlKGxvYWRWYWx1ZSkpCiAgICAgICAgICAgICByZXR1
cm4gQXJnKCk7Ci0gICAgICAgIEFyZ1Byb21pc2UgcmVzdWx0KGFkZHIobG9hZFZhbHVlKSwgbG9h
ZFZhbHVlKTsKKyAgICAgICAgLy8gT24geDg2LCBhbGwgbG9hZHMgaGF2ZSBmZW5jZXMuIERvaW5n
IHRoaXMga2luZCBvZiBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gd2lsbCBtb3ZlIHRoZSBsb2FkLAor
ICAgICAgICAvLyBidXQgdGhhdCdzIGZpbmUgYmVjYXVzZSBvdXIgaW50ZXJmZXJlbmNlIGFuYWx5
c2lzIHN0b3BzIHRoZSBtb3Rpb24gb2YgZmVuY2VzIGFyb3VuZCBvdGhlcgorICAgICAgICAvLyBm
ZW5jZXMuIFNvLCBhbnkgbG9hZCBtb3Rpb24gd2UgaW50cm9kdWNlIGhlcmUgd291bGQgbm90IGJl
IG9ic2VydmFibGUuCisgICAgICAgIGlmICghaXNYODYoKSAmJiBsb2FkVmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpLT5oYXNGZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAg
ICBBcmcgbG9hZEFkZHIgPSBhZGRyKGxvYWRWYWx1ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGxvYWRBZGRyKTsKKyAgICAgICAgQXJnUHJvbWlzZSByZXN1bHQobG9hZEFkZHIsIGxvYWRWYWx1
ZSk7CiAgICAgICAgIGlmIChsb2FkVmFsdWUtPnRyYXBzKCkpCiAgICAgICAgICAgICByZXN1bHQu
c2V0VHJhcHModHJ1ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC04OTgsMTEgKzkxOSw5
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotI2lmIENQVShY
ODYpIHx8IENQVShYODZfNjQpCiAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAodmFsdWUpLCB0bXAo
bV92YWx1ZSkpOwotICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGFtb3VudCksIFRtcChYODZSZWdp
c3RlcnM6OmVjeCkpOwotICAgICAgICBhcHBlbmQob3Bjb2RlLCBUbXAoWDg2UmVnaXN0ZXJzOjpl
Y3gpLCB0bXAobV92YWx1ZSkpOwotI2VuZGlmCisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAoYW1v
dW50KSwgbV9lY3gpOworICAgICAgICBhcHBlbmQob3Bjb2RlLCBtX2VjeCwgdG1wKG1fdmFsdWUp
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGUzMiwgQWlyOjpPcGNv
ZGUgb3Bjb2RlNjQ+CkBAIC05MzEsMTAgKzk1MCwxNiBAQCBwcml2YXRlOgogICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUzMiwgQWlyOjpPcGNvZGUgb3Bjb2RlNjQsIENvbW11dGF0aXZpdHkgY29t
bXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgogICAgIGJvb2wgdHJ5QXBwZW5kU3RvcmVCaW5P
cChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQogICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpOworICAgICAgICAKICAgICAgICAgQWlyOjpP
cGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShvcGNvZGUzMiwgb3Bjb2RlNjQsIGxlZnQt
PnR5cGUoKSk7CiAgICAgICAgIGlmIChvcGNvZGUgPT0gQWlyOjpPb3BzKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAgICAgLy8gT24geDg2LCBhbGwgc3RvcmVzIGhh
dmUgZmVuY2VzLCBhbmQgdGhpcyBpc24ndCByZW9yZGVyaW5nIHRoZSBzdG9yZSBpdHNlbGYuCisg
ICAgICAgIGlmICghaXNYODYoKSAmJiBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVu
Y2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIEFyZyBz
dG9yZUFkZHIgPSBhZGRyKG1fdmFsdWUpOwogICAgICAgICBBU1NFUlQoc3RvcmVBZGRyKTsKIApA
QCAtOTk0LDExICsxMDE5LDUwIEBAIHByaXZhdGU6CiAKICAgICAgICAgcmV0dXJuIEluc3QobW92
ZSwgbV92YWx1ZSwgdG1wKHZhbHVlKSwgZGVzdCk7CiAgICAgfQorICAgIAorICAgIEFpcjo6T3Bj
b2RlIHN0b3JlT3Bjb2RlKFdpZHRoIHdpZHRoLCBCYW5rIGJhbmssIGJvb2wgcmVsZWFzZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBXaWR0aDg6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChiYW5rID09IEdQKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZWxlYXNlID8gU3RvcmVSZWw4IDogQWlyOjpTdG9yZTg7CisgICAgICAgIGNhc2UgV2lkdGgxNjoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhbmsgPT0gR1ApOworICAgICAgICAgICAgcmV0
dXJuIHJlbGVhc2UgPyBTdG9yZVJlbDE2IDogQWlyOjpTdG9yZTE2OworICAgICAgICBjYXNlIFdp
ZHRoMzI6CisgICAgICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgICAgIGNhc2UgR1A6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBTdG9yZVJlbDMyIDogTW92ZTMyOwor
ICAgICAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVs
ZWFzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1vdmVGbG9hdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpczY0Qml0KCkpOworICAgICAgICAgICAgc3dpdGNoIChiYW5rKSB7Cisg
ICAgICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlID8gU3Rv
cmVSZWw2NCA6IE1vdmU7CisgICAgICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFyZWxlYXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW92ZURvdWJs
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bj
b2RlIHN0b3JlT3Bjb2RlKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVl
KiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1lbW9yeS0+aXNTdG9yZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0b3JlT3Bjb2RlKG1lbW9y
eS0+bG9hZFN0b3JlV2lkdGgoKSwgbWVtb3J5LT5hY2Nlc3NCYW5rKCksIG1lbW9yeS0+aGFzRmVu
Y2UoKSk7CisgICAgfQogCiAgICAgSW5zdCBjcmVhdGVTdG9yZShWYWx1ZSogdmFsdWUsIGNvbnN0
IEFyZyYgZGVzdCkKICAgICB7Ci0gICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVPcGNvZGUgPSBtb3Zl
Rm9yVHlwZSh2YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVN0b3JlKG1vdmVP
cGNvZGUsIHZhbHVlLCBkZXN0KTsKKyAgICAgICAgQWlyOjpPcGNvZGUgbW92ZU9wY29kZSA9IHN0
b3JlT3Bjb2RlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVN0b3JlKG1vdmVPcGNvZGUs
IHZhbHVlLT5jaGlsZCgwKSwgZGVzdCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJncz4KQEAgLTEwMDYsNyArMTA3MCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBh
cHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIGNyZWF0ZVN0b3JlKHN0ZDo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLikpKTsKICAgICB9Ci0KKyAgICAKICAgICBBaXI6Ok9wY29kZSBtb3ZlRm9yVHlw
ZShUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTEwNzMsNyAr
MTEzNyw0MSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5k
KGluc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmlzaEFwcGVuZGluZ0luc3RydWN0aW9u
cyhBaXI6OkJhc2ljQmxvY2sqIHRhcmdldCkKKyAgICB7CisgICAgICAgIC8vIE5vdyBhcHBlbmQg
dGhlIGluc3RydWN0aW9ucy4gbV9pbnN0cyBjb250YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIs
IHNvIHdlIHByb2Nlc3MKKyAgICAgICAgLy8gaXQgaW4gcmV2ZXJzZS4KKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9pbnN0cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGZvciAoSW5z
dCYgaW5zdCA6IG1faW5zdHNbaV0pCisgICAgICAgICAgICAgICAgdGFyZ2V0LT5hcHBlbmRJbnN0
KFdURk1vdmUoaW5zdCkpOworICAgICAgICB9CisgICAgICAgIG1faW5zdHMucmVzaXplKDApOwor
ICAgIH0KKyAgICAKKyAgICBBaXI6OkJhc2ljQmxvY2sqIG5ld0Jsb2NrKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEFmdGVyKG1fYmxvY2tUb0Jsb2Nr
W21fYmxvY2tdKTsKKyAgICB9CiAKKyAgICAvLyBOT1RFOiBUaGlzIHdpbGwgY3JlYXRlIGEgY29u
dGludWF0aW9uIGJsb2NrIChgbmV4dEJsb2NrYCkgKmFmdGVyKiBhbnkgYmxvY2tzIHlvdSd2ZSBj
cmVhdGVkIHVzaW5nCisgICAgLy8gbmV3QmxvY2soKS4gU28sIGl0J3MgcHJlZmVyYWJsZSB0byBj
cmVhdGUgYWxsIG9mIHlvdXIgYmxvY2tzIHVwZnJvbnQgdXNpbmcgbmV3QmxvY2soKS4gQWxzbyBu
b3RlCisgICAgLy8gdGhhdCBhbnkgY29kZSB5b3UgZW1pdCBiZWZvcmUgdGhpcyB3aWxsIGJlIHBy
ZXBlbmRlZCB0byB0aGUgY29udGludWF0aW9uLCBhbmQgYW55IGNvZGUgeW91IGVtaXQKKyAgICAv
LyBhZnRlciB0aGlzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHByZXZpb3VzIGJsb2NrLgorICAg
IHZvaWQgc3BsaXRCbG9jayhBaXI6OkJhc2ljQmxvY2sqJiBwcmV2aW91c0Jsb2NrLCBBaXI6OkJh
c2ljQmxvY2sqJiBuZXh0QmxvY2spCisgICAgeworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ibG9ja1RvQmxvY2tbbV9ibG9ja107CisgICAgICAgIAorICAgICAgICBwcmV2aW91
c0Jsb2NrID0gYmxvY2s7CisgICAgICAgIG5leHRCbG9jayA9IG1fYmxvY2tJbnNlcnRpb25TZXQu
aW5zZXJ0QWZ0ZXIoYmxvY2spOworICAgICAgICAKKyAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5z
dHJ1Y3Rpb25zKG5leHRCbG9jayk7CisgICAgICAgIG5leHRCbG9jay0+c3VjY2Vzc29ycygpID0g
YmxvY2stPnN1Y2Nlc3NvcnMoKTsKKyAgICAgICAgYmxvY2stPnN1Y2Nlc3NvcnMoKS5jbGVhcigp
OworICAgICAgICAKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoVmVjdG9yPEluc3Q+KCkpOworICAg
IH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CiAgICAgVCogZW5zdXJlU3BlY2lhbChUKiYgZmllbGQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50
cykKICAgICB7CkBAIC0xMTIzLDcgKzEyMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKICAgICAg
ICAgICAgICAgICBhcmcgPSBBcmc6OmNhbGxBcmcodmFsdWUucmVwKCkub2Zmc2V0RnJvbVNQKCkp
OwotICAgICAgICAgICAgICAgIGFwcGVuZFN0b3JlKHZhbHVlLnZhbHVlKCksIGFyZyk7CisgICAg
ICAgICAgICAgICAgYXBwZW5kU3RvcmUobW92ZUZvclR5cGUodmFsdWUudmFsdWUoKS0+dHlwZSgp
KSwgdmFsdWUudmFsdWUoKSwgYXJnKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTE5NjEsNiArMjA1OSwzMDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCisgICAgdm9pZCBhcHBlbmRYODZEaXYoQjM6Ok9wY29kZSBvcCkKKyAgICB7Cisg
ICAgICAgIEFpcjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJsZVdvcmQ7CisgICAgICAgIEFpcjo6T3Bj
b2RlIGRpdjsKKyAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBJbnQzMjoKKyAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBYODZDb252ZXJ0VG9E
b3VibGVXb3JkMzI7CisgICAgICAgICAgICBkaXYgPSBYODZEaXYzMjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29y
ZCA9IFg4NkNvbnZlcnRUb1F1YWRXb3JkNjQ7CisgICAgICAgICAgICBkaXYgPSBYODZEaXY2NDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIEFTU0VSVChvcCA9PSBEaXYgfHwgb3AgPT0gTW9kKTsKKyAgICAgICAgVG1wIHJl
c3VsdCA9IG9wID09IERpdiA/IG1fZWF4IDogbV9lZHg7CisKKyAgICAgICAgYXBwZW5kKE1vdmUs
IHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIG1fZWF4KTsKKyAgICAgICAgYXBwZW5kKGNvbnZlcnRU
b0RvdWJsZVdvcmQsIG1fZWF4LCBtX2VkeCk7CisgICAgICAgIGFwcGVuZChkaXYsIG1fZWF4LCBt
X2VkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCByZXN1
bHQsIHRtcChtX3ZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRYODZVRGl2KEIzOjpP
cGNvZGUgb3ApCisgICAgeworICAgICAgICBBaXI6Ok9wY29kZSBkaXYgPSBtX3ZhbHVlLT50eXBl
KCkgPT0gSW50MzIgPyBYODZVRGl2MzIgOiBYODZVRGl2NjQ7CisKKyAgICAgICAgQVNTRVJUKG9w
ID09IFVEaXYgfHwgb3AgPT0gVU1vZCk7CisgICAgICAgIFRtcCByZXN1bHQgPSBvcCA9PSBVRGl2
ID8gbV9lYXggOiBtX2VkeDsKKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNo
aWxkKDApKSwgbV9lYXgpOworICAgICAgICBhcHBlbmQoWG9yNjQsIG1fZWR4LCBtX2VkeCk7Cisg
ICAgICAgIGFwcGVuZChkaXYsIG1fZWF4LCBtX2VkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7
CisgICAgICAgIGFwcGVuZChNb3ZlLCByZXN1bHQsIHRtcChtX3ZhbHVlKSk7CisgICAgfQorICAg
IAorICAgIEFpcjo6T3Bjb2RlIGxvYWRMaW5rT3Bjb2RlKFdpZHRoIHdpZHRoLCBib29sIGZlbmNl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZlbmNlID8gT1BDT0RFX0ZPUl9XSURUSChMb2FkTGlu
a0FjcSwgd2lkdGgpIDogT1BDT0RFX0ZPUl9XSURUSChMb2FkTGluaywgd2lkdGgpOworICAgIH0K
KyAgICAKKyAgICBBaXI6Ok9wY29kZSBzdG9yZUNvbmRPcGNvZGUoV2lkdGggd2lkdGgsIGJvb2wg
ZmVuY2UpCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2UgPyBPUENPREVfRk9SX1dJRFRIKFN0
b3JlQ29uZFJlbCwgd2lkdGgpIDogT1BDT0RFX0ZPUl9XSURUSChTdG9yZUNvbmQsIHdpZHRoKTsK
KyAgICB9CisgICAgCisgICAgLy8gVGhpcyBjYW4gZW1pdCBjb2RlIGZvciB0aGUgZm9sbG93aW5n
IHBhdHRlcm5zOgorICAgIC8vIEF0b21pY1dlYWtDQVMKKyAgICAvLyBCaXRYb3IoQXRvbWljV2Vh
a0NBUywgMSkKKyAgICAvLyBBdG9taWNTdHJvbmdDQVMKKyAgICAvLyBFcXVhbChBdG9taWNTdHJv
bmdDQVMsIGV4cGVjdGVkKQorICAgIC8vIE5vdEVxdWFsKEF0b21pY1N0cm9uZ0NBUywgZXhwZWN0
ZWQpCisgICAgLy8gQnJhbmNoKEF0b21pY1dlYWtDQVMpCisgICAgLy8gQnJhbmNoKEVxdWFsKEF0
b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpKQorICAgIC8vIEJyYW5jaChOb3RFcXVhbChBdG9taWNT
dHJvbmdDQVMsIGV4cGVjdGVkKSkKKyAgICAvLworICAgIC8vIEl0IGFzc3VtZXMgdGhhdCBhdG9t
aWNWYWx1ZSBwb2ludHMgdG8gdGhlIENBUywgYW5kIG1fdmFsdWUgcG9pbnRzIHRvIHRoZSBpbnN0
cnVjdGlvbiBiZWluZworICAgIC8vIGdlbmVyYXRlZC4gSXQgYXNzdW1lcyB0aGF0IHlvdSd2ZSBj
b25zdW1lZCBldmVyeXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29uc3VtZWQuCisgICAgdm9pZCBh
cHBlbmRDQVMoVmFsdWUqIGF0b21pY1ZhbHVlLCBib29sIGludmVydCkKKyAgICB7CisgICAgICAg
IEF0b21pY1ZhbHVlKiBhdG9taWMgPSBhdG9taWNWYWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGF0b21pYyk7CisgICAgICAgIAorICAgICAgICBib29sIGlz
QnJhbmNoID0gbV92YWx1ZS0+b3Bjb2RlKCkgPT0gQnJhbmNoOworICAgICAgICBib29sIGlzU3Ry
b25nID0gYXRvbWljLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVM7CisgICAgICAgIGJvb2wg
cmV0dXJuc09sZFZhbHVlID0gbV92YWx1ZS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTOwor
ICAgICAgICAKKyAgICAgICAgV2lkdGggd2lkdGggPSBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCk7
CisgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihhdG9taWMpOworCisgICAgICAgIFRtcCB2YWx1
ZVJlc3VsdFRtcDsKKyAgICAgICAgVG1wIGJvb2xSZXN1bHRUbXA7CisgICAgICAgIGlmIChyZXR1
cm5zT2xkVmFsdWUpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbnZlcnQpOworICAg
ICAgICAgICAgdmFsdWVSZXN1bHRUbXAgPSB0bXAobV92YWx1ZSk7CisgICAgICAgICAgICBib29s
UmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNCcmFu
Y2gpIHsKKyAgICAgICAgICAgIHZhbHVlUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7Cisg
ICAgICAgICAgICBib29sUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVJlc3VsdFRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOwor
ICAgICAgICAgICAgYm9vbFJlc3VsdFRtcCA9IHRtcChtX3ZhbHVlKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgVG1wIHN1Y2Nlc3NCb29sUmVzdWx0VG1wOworICAgICAgICBpZiAoaXNT
dHJvbmcgJiYgIWlzQnJhbmNoKQorICAgICAgICAgICAgc3VjY2Vzc0Jvb2xSZXN1bHRUbXAgPSBt
X2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3VjY2Vzc0Jvb2xS
ZXN1bHRUbXAgPSBib29sUmVzdWx0VG1wOworCisgICAgICAgIFRtcCBleHBlY3RlZFZhbHVlVG1w
ID0gdG1wKGF0b21pYy0+Y2hpbGQoMCkpOworICAgICAgICBUbXAgbmV3VmFsdWVUbXAgPSB0bXAo
YXRvbWljLT5jaGlsZCgxKSk7CisgICAgICAgIAorICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9j
ayBzdWNjZXNzOworICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayBmYWlsdXJlOworICAgICAg
ICBpZiAoaXNCcmFuY2gpIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBtX2Jsb2NrVG9CbG9ja1tt
X2Jsb2NrXS0+c3VjY2Vzc29yKGludmVydCk7CisgICAgICAgICAgICBmYWlsdXJlID0gbV9ibG9j
a1RvQmxvY2tbbV9ibG9ja10tPnN1Y2Nlc3NvcighaW52ZXJ0KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92
ZUZvclR5cGUoYXRvbWljLT5vcGVyYXRpb25UeXBlKCkpLCBpbW1PclRtcChhdG9taWMtPmNoaWxk
KDApKSwgbV9lYXgpOworICAgICAgICAgICAgaWYgKHJldHVybnNPbGRWYWx1ZSkgeworICAgICAg
ICAgICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKEF0b21pY1N0cm9uZ0NBUywgd2lkdGgp
LCBtX2VheCwgbmV3VmFsdWVUbXAsIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIGFwcGVuZChy
ZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT5vcGVyYXRpb25UeXBlKCkpLCBtX2VheCwgdmFsdWVS
ZXN1bHRUbXApOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0JyYW5jaCkgeworICAgICAgICAg
ICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKEJyYW5jaEF0b21pY1N0cm9uZ0NBUywgd2lk
dGgpLCBBcmc6OnN0YXR1c0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlN1Y2Nlc3MpLCBtX2VheCwgbmV3
VmFsdWVUbXAsIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Jsb2NrW21fYmxv
Y2tdLT5zZXRTdWNjZXNzb3JzKHN1Y2Nlc3MsIGZhaWx1cmUpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgYXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljU3Ryb25nQ0FT
LCB3aWR0aCksIEFyZzo6c3RhdHVzQ29uZChpbnZlcnQgPyBNYWNyb0Fzc2VtYmxlcjo6RmFpbHVy
ZSA6IE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNzKSwgbV9lYXgsIHRtcChhdG9taWMtPmNoaWxkKDEp
KSwgYWRkcmVzcywgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7CisgICAgICAg
IC8vIFdlIHdpc2ggdG8gZW1pdDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQmxvY2sgI3JlbG9v
cDoKKyAgICAgICAgLy8gICAgIExvYWRMaW5rCisgICAgICAgIC8vICAgICBCcmFuY2ggTm90RXF1
YWwKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiBUaGVuOiNmYWlsLCBFbHNlOiAjc3RvcmUKKyAg
ICAgICAgLy8gQmxvY2sgI3N0b3JlOgorICAgICAgICAvLyAgICAgU3RvcmVDb25kCisgICAgICAg
IC8vICAgICBYb3IgJDEsICVyZXN1bHQgICAgPC0tLSBvbmx5IGlmICFpbnZlcnQKKyAgICAgICAg
Ly8gICAgIEp1bXAKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiAjZG9uZQorICAgICAgICAvLyBC
bG9jayAjZmFpbDoKKyAgICAgICAgLy8gICAgIE1vdmUgJGludmVydCwgJXJlc3VsdAorICAgICAg
ICAvLyAgICAgSnVtcAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6ICNkb25lCisgICAgICAgIC8v
IEJsb2NrICNkb25lOgorICAgICAgICAKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiByZWxvb3BC
bG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3RvcmVCbG9jayA9
IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3VjY2Vzc0Jsb2NrID0gbnVs
bHB0cjsKKyAgICAgICAgaWYgKCFpc0JyYW5jaCAmJiBpc1N0cm9uZykKKyAgICAgICAgICAgIHN1
Y2Nlc3NCbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogZmFpbEJs
b2NrID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKCFpc0JyYW5jaCkKKyAgICAgICAgICAgIGZhaWxC
bG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3Ryb25nRmFpbEJs
b2NrOworICAgICAgICBpZiAoaXNTdHJvbmcpCisgICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2sg
PSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayBjb21wYXJpc29uRmFp
bDsKKyAgICAgICAgQWlyOjpGcmVxdWVudGVkQmxvY2sgd2Vha0ZhaWw7CisgICAgICAgIGlmIChp
c1N0cm9uZykgeworICAgICAgICAgICAgY29tcGFyaXNvbkZhaWwgPSBzdHJvbmdGYWlsQmxvY2s7
CisgICAgICAgICAgICB3ZWFrRmFpbCA9IHJlbG9vcEJsb2NrOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGlzQnJhbmNoKQorICAgICAgICAgICAgICAgIGNvbXBhcmlzb25GYWls
ID0gZmFpbHVyZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wYXJpc29u
RmFpbCA9IGZhaWxCbG9jazsKKyAgICAgICAgICAgIHdlYWtGYWlsID0gZmFpbHVyZTsKKyAgICAg
ICAgfQorICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGJlZ2luQmxvY2s7CisgICAgICAgIEFpcjo6
QmFzaWNCbG9jayogZG9uZUJsb2NrOworICAgICAgICBzcGxpdEJsb2NrKGJlZ2luQmxvY2ssIGRv
bmVCbG9jayk7CisgICAgICAgIAorICAgICAgICBhcHBlbmQoQWlyOjpKdW1wKTsKKyAgICAgICAg
YmVnaW5CbG9jay0+c2V0U3VjY2Vzc29ycyhyZWxvb3BCbG9jayk7CisgICAgICAgIAorICAgICAg
ICByZWxvb3BCbG9jay0+YXBwZW5kKGxvYWRMaW5rT3Bjb2RlKHdpZHRoLCBhdG9taWMtPmhhc0Zl
bmNlKCkpLCBtX3ZhbHVlLCB2YWx1ZVJlc3VsdFRtcCwgYWRkcmVzcyk7CisgICAgICAgIHJlbG9v
cEJsb2NrLT5hcHBlbmQoT1BDT0RFX0ZPUl9DQU5PTklDQUxfV0lEVEgoQnJhbmNoLCB3aWR0aCks
IG1fdmFsdWUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCB2YWx1ZVJl
c3VsdFRtcCwgZXhwZWN0ZWRWYWx1ZVRtcCk7CisgICAgICAgIHJlbG9vcEJsb2NrLT5zZXRTdWNj
ZXNzb3JzKGNvbXBhcmlzb25GYWlsLCBzdG9yZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIHN0
b3JlQmxvY2stPmFwcGVuZChzdG9yZUNvbmRPcGNvZGUod2lkdGgsIGF0b21pYy0+aGFzRmVuY2Uo
KSksIG1fdmFsdWUsIG5ld1ZhbHVlVG1wLCBhZGRyZXNzLCBzdWNjZXNzQm9vbFJlc3VsdFRtcCk7
CisgICAgICAgIGlmIChpc0JyYW5jaCkgeworICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5k
KEJyYW5jaFRlc3QzMiwgbV92YWx1ZSwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJv
KSwgYm9vbFJlc3VsdFRtcCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgICAgIHN0b3JlQmxv
Y2stPnNldFN1Y2Nlc3NvcnMoc3VjY2Vzcywgd2Vha0ZhaWwpOworICAgICAgICAgICAgZG9uZUJs
b2NrLT5zdWNjZXNzb3JzKCkuY2xlYXIoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFk
b25lQmxvY2stPnNpemUoKSk7CisgICAgICAgICAgICBkb25lQmxvY2stPmFwcGVuZChBaXI6Ok9v
cHMsIG1fdmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGlzU3Ryb25n
KSB7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwgbV92
YWx1ZSwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgc3VjY2Vzc0Jvb2xSZXN1
bHRUbXAsIEFyZzo6Yml0SW1tKC0xKSk7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+c2V0
U3VjY2Vzc29ycyhzdWNjZXNzQmxvY2ssIHJlbG9vcEJsb2NrKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBzdWNjZXNzQmxvY2stPmFwcGVuZChNb3ZlLCBtX3ZhbHVlLCBBcmc6
OmltbSghaW52ZXJ0KSwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICAgICAgc3VjY2Vzc0Js
b2NrLT5hcHBlbmQoQWlyOjpKdW1wLCBtX3ZhbHVlKTsKKyAgICAgICAgICAgICAgICBzdWNjZXNz
QmxvY2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFpbnZlcnQpCisgICAgICAgICAgICAgICAgICAgIHN0b3JlQmxv
Y2stPmFwcGVuZChYb3IzMiwgbV92YWx1ZSwgQXJnOjpiaXRJbW0oMSksIGJvb2xSZXN1bHRUbXAs
IGJvb2xSZXN1bHRUbXApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0b3Jl
QmxvY2stPmFwcGVuZChBaXI6Okp1bXAsIG1fdmFsdWUpOworICAgICAgICAgICAgICAgIHN0b3Jl
QmxvY2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZmFpbEJsb2NrLT5hcHBlbmQoTW92ZSwgbV92YWx1ZSwgQXJnOjpp
bW0oaW52ZXJ0KSwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICBmYWlsQmxvY2stPmFwcGVu
ZChBaXI6Okp1bXAsIG1fdmFsdWUpOworICAgICAgICAgICAgZmFpbEJsb2NrLT5zZXRTdWNjZXNz
b3JzKGRvbmVCbG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpc1N0cm9u
ZykgeworICAgICAgICAgICAgVG1wIHRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAg
ICAgc3Ryb25nRmFpbEJsb2NrLT5hcHBlbmQoc3RvcmVDb25kT3Bjb2RlKHdpZHRoLCBhdG9taWMt
Pmhhc0ZlbmNlKCkpLCBtX3ZhbHVlLCB2YWx1ZVJlc3VsdFRtcCwgYWRkcmVzcywgdG1wKTsKKyAg
ICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwgbV92YWx1ZSwg
QXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgdG1wLCBBcmc6OmJpdEltbSgtMSkp
OworICAgICAgICAgICAgc3Ryb25nRmFpbEJsb2NrLT5zZXRTdWNjZXNzb3JzKGZhaWxCbG9jaywg
cmVsb29wQmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgYXBwZW5kVm9p
ZEF0b21pYyhBaXI6Ok9wY29kZSBhdG9taWNPcGNvZGUpCisgICAgeworICAgICAgICBpZiAobV91
c2VDb3VudHMubnVtVXNlcyhtX3ZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihtX3ZhbHVlKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChpc1ZhbGlkRm9ybShhdG9taWNPcGNvZGUsIEFyZzo6SW1tLCBhZGRyZXNzLmtp
bmQoKSkgJiYgaW1tKG1fdmFsdWUtPmNoaWxkKDApKSkgeworICAgICAgICAgICAgYXBwZW5kKGF0
b21pY09wY29kZSwgaW1tKG1fdmFsdWUtPmNoaWxkKDApKSwgYWRkcmVzcyk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzVmFsaWRG
b3JtKGF0b21pY09wY29kZSwgQXJnOjpUbXAsIGFkZHJlc3Mua2luZCgpKSkgeworICAgICAgICAg
ICAgYXBwZW5kKGF0b21pY09wY29kZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgYWRkcmVzcyk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kR2VuZXJhbEF0b21pYyhB
aXI6Ok9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0g
bV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgIAorICAgICAgICBBcmcgYWRkcmVz
cyA9IGFkZHIobV92YWx1ZSk7CisgICAgICAgIFRtcCBvbGRWYWx1ZSA9IG1fY29kZS5uZXdUbXAo
R1ApOworICAgICAgICBUbXAgbmV3VmFsdWUgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFdlIG5lZWQgYSBDQVMgbG9vcCBvciBhIExML1NDIGxvb3AuIFVzaW5nIHBy
ZXBhcmUvYXR0ZW1wdCBqYXJnb24sIHdlIHdhbnQ6CisgICAgICAgIC8vCisgICAgICAgIC8vIEJs
b2NrICNyZWxvb3A6CisgICAgICAgIC8vICAgICBQcmVwYXJlCisgICAgICAgIC8vICAgICBvcGNv
ZGUKKyAgICAgICAgLy8gICAgIEF0dGVtcHQKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiBUaGVu
OiNkb25lLCBFbHNlOiNyZWxvb3AKKyAgICAgICAgLy8gQmxvY2sgI2RvbmU6CisgICAgICAgIC8v
ICAgICBNb3ZlIG9sZFZhbHVlLCByZXN1bHQKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChyZWxh
eGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCBvbGRWYWx1ZSwgdG1wKGF0b21pYykpOwor
ICAgICAgICAKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiByZWxvb3BCbG9jayA9IG5ld0Jsb2Nr
KCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogYmVnaW5CbG9jazsKKyAgICAgICAgQWlyOjpC
YXNpY0Jsb2NrKiBkb25lQmxvY2s7CisgICAgICAgIHNwbGl0QmxvY2soYmVnaW5CbG9jaywgZG9u
ZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChBaXI6Okp1bXApOworICAgICAgICBi
ZWdpbkJsb2NrLT5zZXRTdWNjZXNzb3JzKHJlbG9vcEJsb2NrKTsKKyAgICAgICAgCisgICAgICAg
IEFpcjo6T3Bjb2RlIHByZXBhcmVPcGNvZGU7CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkgeworICAgICAgICAgICAg
Y2FzZSBXaWR0aDg6CisgICAgICAgICAgICAgICAgcHJlcGFyZU9wY29kZSA9IExvYWQ4U2lnbmVk
RXh0ZW5kVG8zMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2lk
dGgxNjoKKyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTG9hZDE2U2lnbmVkRXh0ZW5k
VG8zMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2lkdGgzMjoK
KyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTW92ZTMyOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAgICAgICAgIHByZXBh
cmVPcGNvZGUgPSBNb3ZlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsK
KyAgICAgICAgICAgIG9wY29kZSA9IGxvYWRMaW5rT3Bjb2RlKGF0b21pYy0+b3BlcmF0aW9uV2lk
dGgoKSwgYXRvbWljLT5oYXNGZW5jZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZWxvb3BCbG9j
ay0+YXBwZW5kKHByZXBhcmVPcGNvZGUsIG1fdmFsdWUsIGFkZHJlc3MsIG9sZFZhbHVlKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChvcGNvZGUgIT0gQWlyOjpOb3ApIHsKKyAgICAgICAgICAgIGlm
IChpbW0oYXRvbWljLT5jaGlsZCgwKSkgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwg
QXJnOjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5k
KG9wY29kZSwgbV92YWx1ZSwgaW1tKGF0b21pYy0+Y2hpbGQoMCkpLCBvbGRWYWx1ZSwgbmV3VmFs
dWUpOworICAgICAgICAgICAgZWxzZSBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwg
QXJnOjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5k
KG9wY29kZSwgbV92YWx1ZSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCBvbGRWYWx1ZSwgbmV3VmFs
dWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVsb29wQmxvY2stPmFw
cGVuZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCBtX3ZhbHVlLCBvbGRWYWx1
ZSwgbmV3VmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChpbW0oYXRvbWljLT5jaGlsZCgwKSkg
JiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpUbXApKQorICAgICAgICAgICAg
ICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKG9wY29kZSwgbV92YWx1ZSwgaW1tKGF0b21pYy0+
Y2hpbGQoMCkpLCBuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKG9wY29kZSwgbV92YWx1ZSwgdG1wKGF0b21pYy0+
Y2hpbGQoMCkpLCBuZXdWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgQWlyOjpPcGNvZGUgY2FzT3Bjb2RlID0gT1BD
T0RFX0ZPUl9XSURUSChCcmFuY2hBdG9taWNTdHJvbmdDQVMsIGF0b21pYy0+b3BlcmF0aW9uV2lk
dGgoKSk7CisgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlw
ZShhdG9taWMtPnR5cGUoKSksIG1fdmFsdWUsIG9sZFZhbHVlLCBtX2VheCk7CisgICAgICAgICAg
ICByZWxvb3BCbG9jay0+YXBwZW5kKGNhc09wY29kZSwgbV92YWx1ZSwgQXJnOjpzdGF0dXNDb25k
KE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNzKSwgbV9lYXgsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7Cisg
ICAgICAgICAgICBUbXAgYm9vbFJlc3VsdCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAg
ICAgcmVsb29wQmxvY2stPmFwcGVuZChzdG9yZUNvbmRPcGNvZGUoYXRvbWljLT5vcGVyYXRpb25X
aWR0aCgpLCBhdG9taWMtPmhhc0ZlbmNlKCkpLCBtX3ZhbHVlLCBuZXdWYWx1ZSwgYWRkcmVzcywg
Ym9vbFJlc3VsdCk7CisgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3Qz
MiwgbV92YWx1ZSwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYm9vbFJlc3Vs
dCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgfQorICAgICAgICByZWxvb3BCbG9jay0+c2V0
U3VjY2Vzc29ycyhkb25lQmxvY2ssIHJlbG9vcEJsb2NrKTsKKyAgICB9CisgICAgCiAgICAgdm9p
ZCBsb3dlcigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CkBA
IC0xOTcxLDMwICsyMzcxLDUwIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIExvYWQ6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92
YWx1ZSwgbW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVl
KSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gbV92
YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUg
PSBBaXI6Ok9vcHM7CisgICAgICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKSB7CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChtZW1vcnktPnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNh
c2UgSW50MzI6CisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IExvYWRBY3EzMjsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAg
ICAgICAgICAgICAgICAgb3Bjb2RlID0gTG9hZEFjcTY0OworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBvcGNv
ZGUgPSBtb3ZlRm9yVHlwZShtZW1vcnktPnR5cGUoKSk7CisgICAgICAgICAgICBhcHBlbmQodHJh
cHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1f
dmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIExvYWQ4UzogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdCht
X3ZhbHVlLCBMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRt
cChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIg
OiBMb2FkOFNpZ25lZEV4dGVuZFRvMzI7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0
KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIExvYWQ4Wjog
ewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkOCwgbV92YWx1
ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29k
ZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRB
Y3E4IDogTG9hZDg7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9w
Y29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIExvYWQxNlM6IHsKLSAgICAgICAg
ICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMiwg
bV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/
IExvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIgOiBMb2FkMTZTaWduZWRFeHRlbmRUbzMyOworICAg
ICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFk
ZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBMb2FkMTZaOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBp
bmdJbnN0KG1fdmFsdWUsIExvYWQxNiwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFs
dWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1v
cnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3ExNiA6IExvYWQxNjsKKyAgICAgICAgICAg
IGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFs
dWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotCisg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBZGQ6IHsKICAgICAgICAgICAgIGlmICh0cnlBcHBl
bmRMZWEoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMDkyLDcgKzI1MTIsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzQ2hpbGwoKSkKICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOwogICAgICAgICAgICAgaWYgKGlzSW50KG1f
dmFsdWUtPnR5cGUoKSkgJiYgaXNYODYoKSkgewotICAgICAgICAgICAgICAgIGxvd2VyWDg2RGl2
KERpdik7CisgICAgICAgICAgICAgICAgYXBwZW5kWDg2RGl2KERpdik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQVNTRVJUKCFpc1g4NigpIHx8
IGlzRmxvYXQobV92YWx1ZS0+dHlwZSgpKSk7CkBAIC0yMTAzLDcgKzI1MjMsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgIGNhc2UgVURpdjogewogICAgICAgICAgICAgaWYgKGlzSW50KG1fdmFsdWUt
PnR5cGUoKSkgJiYgaXNYODYoKSkgewotICAgICAgICAgICAgICAgIGxvd2VyWDg2VURpdihVRGl2
KTsKKyAgICAgICAgICAgICAgICBhcHBlbmRYODZVRGl2KFVEaXYpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMjExNywxMyArMjUzNywxMyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIE1vZDogewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYo
KSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV92YWx1ZS0+aXNDaGlsbCgpKTsKLSAg
ICAgICAgICAgIGxvd2VyWDg2RGl2KE1vZCk7CisgICAgICAgICAgICBhcHBlbmRYODZEaXYoTW9k
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVU1vZDog
ewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7Ci0gICAgICAgICAgICBsb3dl
clg4NlVEaXYoVU1vZCk7CisgICAgICAgICAgICBhcHBlbmRYODZVRGl2KFVNb2QpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIxNjIsMTAgKzI1ODIsMjggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBhcHBlbmRVbk9wPE5vdDMyLCBOb3Q2ND4obV92YWx1ZS0+Y2hp
bGQoMCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gVGhpcyBwYXR0ZXJuIGlzIHN1cGVyIHVzZWZ1bCBvbiBib3Ro
IHg4NiBhbmQgQVJNNjQsIHNpbmNlIHRoZSBpbnZlcnNpb24gb2YgdGhlIENBUyByZXN1bHQKKyAg
ICAgICAgICAgIC8vIGNhbiBiZSBkb25lIHdpdGggemVybyBjb3N0IG9uIHg4NiAoanVzdCBmbGlw
IHRoZSBzZXQgZnJvbSBFIHRvIE5FKSBhbmQgaXQncyBhIHByb2dyZXNzaW9uCisgICAgICAgICAg
ICAvLyBvbiBBUk02NCAoc2luY2UgU1RYIHJldHVybnMgMCBvbiBzdWNjZXNzLCBzbyBvcmRpbmFy
aWx5IHdlIGhhdmUgdG8gZmxpcCBpdCkuCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MSktPmlzSW50KDEpCisgICAgICAgICAgICAgICAgJiYgaXNBdG9taWNDQVMobV92YWx1ZS0+Y2hp
bGQoMCktPm9wY29kZSgpKQorICAgICAgICAgICAgICAgICYmIGNhbkJlSW50ZXJuYWwobV92YWx1
ZS0+Y2hpbGQoMCkpKSB7CisgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobV92YWx1ZS0+
Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIGFwcGVuZENBUyhtX3ZhbHVlLT5jaGlsZCgwKSwg
dHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCiAgICAgICAgICAgICBhcHBlbmRCaW5PcDxYb3IzMiwgWG9yNjQsIFhvckRvdWJsZSwgWG9y
RmxvYXQsIENvbW11dGF0aXZlPigKICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwg
bV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBEZXBlbmQ6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGlzQVJNNjQoKSk7CisgICAgICAgICAgICBhcHBlbmRVbk9wPERlcGVuZDMyLCBEZXBlbmQ2
ND4obV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBTaGw6IHsKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+
aXNJbnQzMigxKSkgewpAQCAtMjI2Niw3ICsyNzA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGFwcGVuZFN0b3JlKHZhbHVlVG9T
dG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBlbmRTdG9yZShtX3ZhbHVlLCBh
ZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMjg3
LDcgKzI3MjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kU3RvcmUoQWly
OjpTdG9yZTgsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBl
bmRTdG9yZShtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC0yMzA4LDcgKzI3NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYXBwZW5kU3RvcmUoQWlyOjpTdG9yZTE2LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkp
OworICAgICAgICAgICAgYXBwZW5kU3RvcmUobV92YWx1ZSwgYWRkcihtX3ZhbHVlKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjQxNiw3ICsyODU0LDIyIEBAIHByaXZh
dGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEVxdWFsOgotICAgICAgICBjYXNlIE5vdEVx
dWFsOgorICAgICAgICBjYXNlIE5vdEVxdWFsOiB7CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUworICAgICAgICAgICAgICAgICYm
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKQorICAgICAg
ICAgICAgICAgICYmIGNhbkJlSW50ZXJuYWwobV92YWx1ZS0+Y2hpbGQoMCkpKSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKCFtX2xvY2tlZC5jb250YWlucyhtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMSkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5zKG1fdmFs
dWUtPmNoaWxkKDEpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY29tbWl0
SW50ZXJuYWwobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIGFwcGVuZENBUyht
X3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+b3Bjb2RlKCkgPT0gTm90RXF1YWwpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKG1fdmFsdWUpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
TGVzc1RoYW46CiAgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CiAgICAgICAgIGNhc2UgTGVzc0Vx
dWFsOgpAQCAtMjcyNyw2ICszMTgwLDQwIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIEJyYW5jaDogeworICAgICAgICAgICAgaWYgKGNhbkJlSW50ZXJuYWwobV92YWx1ZS0+
Y2hpbGQoMCkpKSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIGJyYW5jaENoaWxkID0gbV92YWx1
ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChicmFuY2hDaGlsZC0+b3Bjb2Rl
KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAgICAgICAg
ICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAg
YXBwZW5kQ0FTKGJyYW5jaENoaWxkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNTdHJv
bmdDQVM6CisgICAgICAgICAgICAgICAgICAgIC8vIEEgYnJhbmNoIGlzIGEgY29tcGFyaXNvbiB0
byB6ZXJvLgorICAgICAgICAgICAgICAgICAgICBpZiAoYnJhbmNoQ2hpbGQtPmNoaWxkKDApLT5p
c0ludCgwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwoYnJhbmNo
Q2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ0FTKGJyYW5jaENoaWxkLCB0
cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgICAgICAgICBjYXNlIE5vdEVxdWFs
OgorICAgICAgICAgICAgICAgICAgICBpZiAoYnJhbmNoQ2hpbGQtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBBdG9taWNTdHJvbmdDQVMKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGNhbkJlSW50
ZXJuYWwoYnJhbmNoQ2hpbGQtPmNoaWxkKDApKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYg
YnJhbmNoQ2hpbGQtPmNoaWxkKDApLT5jaGlsZCgwKSA9PSBicmFuY2hDaGlsZC0+Y2hpbGQoMSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkLT5jaGls
ZCgwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRDQVMoYnJhbmNoQ2hpbGQtPmNo
aWxkKDApLCBicmFuY2hDaGlsZC0+b3Bjb2RlKCkgPT0gTm90RXF1YWwpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVu
ZChjcmVhdGVCcmFuY2gobV92YWx1ZS0+Y2hpbGQoMCkpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMjc4NCw3ICszMjcxLDgxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBh
cHBlbmQoQWlyOjpFbnRyeVN3aXRjaCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAgIGNhc2Ug
QXRvbWljU3Ryb25nQ0FTOiB7CisgICAgICAgICAgICBhcHBlbmRDQVMobV92YWx1ZSwgZmFsc2Up
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBBdG9taWNYY2hnQWRkOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0g
bV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0
b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY0FkZCwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgp
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBB
cmcgYWRkcmVzcyA9IGFkZHIoYXRvbWljKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29k
ZSA9IE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljWGNoZ0FkZCwgYXRvbWljLT5vcGVyYXRpb25XaWR0
aCgpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBhZGRy
ZXNzLmtpbmQoKSkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBl
KGF0b21pYy0+dHlwZSgpKSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCB0bXAoYXRvbWljKSk7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGF0b21pYyksIGFkZHJlc3MpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXBwZW5k
R2VuZXJhbEF0b21pYyhPUENPREVfRk9SX0NBTk9OSUNBTF9XSURUSChBZGQsIGF0b21pYy0+b3Bl
cmF0aW9uV2lkdGgoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKKyAgICAg
ICAgY2FzZSBBdG9taWNYY2hnU3ViOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWlj
ID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9p
ZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY1N1YiwgYXRvbWljLT5vcGVyYXRpb25XaWR0
aCgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfQ0FOT05JQ0FMX1dJRFRIKFN1YiwgYXRv
bWljLT5vcGVyYXRpb25XaWR0aCgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6IHsKKyAgICAgICAgICAg
IEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAg
ICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljQW5kLCBh
dG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9DQU5P
TklDQUxfV0lEVEgoQW5kLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljWGNo
Z09yOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRv
bWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9S
X1dJRFRIKEF0b21pY09yLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9t
aWMoT1BDT0RFX0ZPUl9DQU5PTklDQUxfV0lEVEgoT3IsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgo
KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBBdG9taWNYY2hnWG9yOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWlj
ID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9p
ZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY1hvciwgYXRvbWljLT5vcGVyYXRpb25XaWR0
aCgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfQ0FOT05JQ0FMX1dJRFRIKFhvciwgYXRv
bWljLT5vcGVyYXRpb25XaWR0aCgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hjaGc6IHsKKyAgICAgICAgICAgIEF0
b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisgICAgICAgICAg
ICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBPUENPREVfRk9SX1dJRFRIKEF0b21pY1hjaGcsIGF0b21p
Yy0+b3BlcmF0aW9uV2lkdGgoKSk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2Rl
LCBBcmc6OlRtcCwgYWRkcmVzcy5raW5kKCkpKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKHJl
bGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUoKSksIHRtcChhdG9taWMtPmNoaWxkKDApKSwg
dG1wKGF0b21pYykpOworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChhdG9taWMp
LCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9DQU5P
TklDQUxfV0lEVEgoWG9yLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjc5Miw2NCArMzM1Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBjb3VsZCBub3QgbG93ZXIgIiwgZGVlcER1bXAobV9w
cm9jZWR1cmUsIG1fdmFsdWUpLCAiXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9Ci0KLSAgICB2b2lkIGxvd2VyWDg2RGl2KEIzOjpPcGNvZGUgb3ApCi0g
ICAgewotI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCi0gICAgICAgIFRtcCBlYXggPSBUbXAo
WDg2UmVnaXN0ZXJzOjplYXgpOwotICAgICAgICBUbXAgZWR4ID0gVG1wKFg4NlJlZ2lzdGVyczo6
ZWR4KTsKLQotICAgICAgICBBaXI6Ok9wY29kZSBjb252ZXJ0VG9Eb3VibGVXb3JkOwotICAgICAg
ICBBaXI6Ok9wY29kZSBkaXY7Ci0gICAgICAgIHN3aXRjaCAobV92YWx1ZS0+dHlwZSgpKSB7Ci0g
ICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2
Q29udmVydFRvRG91YmxlV29yZDMyOwotICAgICAgICAgICAgZGl2ID0gWDg2RGl2MzI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIGNvbnZlcnRU
b0RvdWJsZVdvcmQgPSBYODZDb252ZXJ0VG9RdWFkV29yZDY0OwotICAgICAgICAgICAgZGl2ID0g
WDg2RGl2NjQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBBU1NFUlQob3AgPT0gRGl2IHx8IG9wID09IE1vZCk7Ci0gICAg
ICAgIFg4NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCByZXN1bHQgPSBvcCA9PSBEaXYgPyBYODZSZWdp
c3RlcnM6OmVheCA6IFg4NlJlZ2lzdGVyczo6ZWR4OwotCi0gICAgICAgIGFwcGVuZChNb3ZlLCB0
bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBlYXgpOwotICAgICAgICBhcHBlbmQoY29udmVydFRvRG91
YmxlV29yZCwgZWF4LCBlZHgpOwotICAgICAgICBhcHBlbmQoZGl2LCBlYXgsIGVkeCwgdG1wKG1f
dmFsdWUtPmNoaWxkKDEpKSk7Ci0gICAgICAgIGFwcGVuZChNb3ZlLCBUbXAocmVzdWx0KSwgdG1w
KG1fdmFsdWUpKTsKLQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAg
VU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICB2b2lkIGxv
d2VyWDg2VURpdihCMzo6T3Bjb2RlIG9wKQotICAgIHsKLSNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2
XzY0KQotICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4KTsKLSAgICAgICAg
VG1wIGVkeCA9IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7Ci0KLSAgICAgICAgQWlyOjpPcGNvZGUg
ZGl2ID0gbV92YWx1ZS0+dHlwZSgpID09IEludDMyID8gWDg2VURpdjMyIDogWDg2VURpdjY0Owot
Ci0gICAgICAgIEFTU0VSVChvcCA9PSBVRGl2IHx8IG9wID09IFVNb2QpOwotICAgICAgICBYODZS
ZWdpc3RlcnM6OlJlZ2lzdGVySUQgcmVzdWx0ID0gb3AgPT0gVURpdiA/IFg4NlJlZ2lzdGVyczo6
ZWF4IDogWDg2UmVnaXN0ZXJzOjplZHg7Ci0KLSAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChtX3Zh
bHVlLT5jaGlsZCgwKSksIGVheCk7Ci0gICAgICAgIGFwcGVuZChYb3I2NCwgZWR4LCBlZHgpOwot
ICAgICAgICBhcHBlbmQoZGl2LCBlYXgsIGVkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7Ci0g
ICAgICAgIGFwcGVuZChNb3ZlLCBUbXAocmVzdWx0KSwgdG1wKG1fdmFsdWUpKTsKLSNlbHNlCi0g
ICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9S
TSgpOwotI2VuZGlmCi0gICAgfQotCisgICAgCiAgICAgSW5kZXhTZXQ8VmFsdWU+IG1fbG9ja2Vk
OyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBBaXIuCiAgICAg
SW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRo
YXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSogd2l0aCBhIG5v
bi1udWxsIFRtcCBpcyAicGlubmVkIi4KICAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBtX3BoaVRv
VG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgpAQCAtMjg2NCw3ICszMzY4LDcgQEAg
cHJpdmF0ZToKIAogICAgIFZlY3RvcjxWZWN0b3I8SW5zdCwgND4+IG1faW5zdHM7CiAgICAgVmVj
dG9yPEluc3Q+IG1fcHJvbG9ndWU7Ci0KKyAgICAKICAgICBCMzo6QmFzaWNCbG9jayogbV9ibG9j
azsKICAgICBib29sIG1faXNSYXJlOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CkBAIC0yODc1LDYg
KzMzNzksMTIgQEAgcHJpdmF0ZToKIAogICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CiAgICAg
Q29kZSYgbV9jb2RlOworCisgICAgQWlyOjpCbG9ja0luc2VydGlvblNldCBtX2Jsb2NrSW5zZXJ0
aW9uU2V0OworCisgICAgVG1wIG1fZWF4OworICAgIFRtcCBtX2VjeDsKKyAgICBUbXAgbV9lZHg7
CiB9OwogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MzAgKzM0LDQ4IEBAIE1lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQogewogfQogCitUeXBlIE1l
bW9yeVZhbHVlOjphY2Nlc3NUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAoaXNMb2FkKCkpCisgICAg
ICAgIHJldHVybiB0eXBlKCk7CisgICAgLy8gVGhpcyBoYXBwZW5zIHRvIHdvcmsgZm9yIGF0b21p
Y3MsIHRvby4gVGhhdCdzIHdoeSBBdG9taWNWYWx1ZSBkb2VzIG5vdCBuZWVkIHRvIG92ZXJyaWRl
IHRoaXMuCisgICAgcmV0dXJuIGNoaWxkKDApLT50eXBlKCk7Cit9CisKK0JhbmsgTWVtb3J5VmFs
dWU6OmFjY2Vzc0JhbmsoKSBjb25zdAoreworICAgIHJldHVybiBiYW5rRm9yVHlwZShhY2Nlc3NU
eXBlKCkpOworfQorCiBzaXplX3QgTWVtb3J5VmFsdWU6OmFjY2Vzc0J5dGVTaXplKCkgY29uc3QK
IHsKKyAgICByZXR1cm4gYnl0ZXMoYWNjZXNzV2lkdGgoKSk7Cit9CisKK1dpZHRoIE1lbW9yeVZh
bHVlOjpsb2FkU3RvcmVXaWR0aCgpIGNvbnN0Cit7CiAgICAgc3dpdGNoIChvcGNvZGUoKSkgewog
ICAgIGNhc2UgTG9hZDhaOgogICAgIGNhc2UgTG9hZDhTOgogICAgIGNhc2UgU3RvcmU4OgotICAg
ICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIFdpZHRoODsKICAgICBjYXNlIExvYWQxNlo6
CiAgICAgY2FzZSBMb2FkMTZTOgogICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgcmV0dXJuIDI7
CisgICAgICAgIHJldHVybiBXaWR0aDE2OwogICAgIGNhc2UgTG9hZDoKLSAgICAgICAgcmV0dXJu
IHNpemVvZlR5cGUodHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlwZSh0eXBlKCkp
OwogICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgIHJldHVybiBzaXplb2ZUeXBlKGNoaWxkKDApLT50
eXBlKCkpOworICAgICAgICByZXR1cm4gd2lkdGhGb3JUeXBlKGNoaWxkKDApLT50eXBlKCkpOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gV2lkdGg4OwogICAgIH0KIH0KIAogV2lkdGgg
TWVtb3J5VmFsdWU6OmFjY2Vzc1dpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gd2lkdGhGb3JC
eXRlcyhhY2Nlc3NCeXRlU2l6ZSgpKTsKKyAgICByZXR1cm4gbG9hZFN0b3JlV2lkdGgoKTsKIH0K
IAogdm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKQEAgLTY1LDggKzgzLDExIEBAIHZvaWQgTWVtb3J5VmFsdWU6OmR1
bXBNZXRhKENvbW1hUHJpbnRlciYKICAgICBpZiAobV9vZmZzZXQpCiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKICAgICBpZiAoKGlzTG9hZCgpICYmIGVm
ZmVjdHMoKS5yZWFkcyAhPSByYW5nZSgpKQotICAgICAgICB8fCAoaXNTdG9yZSgpICYmIGVmZmVj
dHMoKS53cml0ZXMgIT0gcmFuZ2UoKSkpCisgICAgICAgIHx8IChpc1N0b3JlKCkgJiYgZWZmZWN0
cygpLndyaXRlcyAhPSByYW5nZSgpKQorICAgICAgICB8fCBmZW5jZVJhbmdlKCkpCiAgICAgICAg
IG91dC5wcmludChjb21tYSwgInJhbmdlID0gIiwgcmFuZ2UoKSk7CisgICAgaWYgKGZlbmNlUmFu
Z2UoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZmVuY2VSYW5nZSA9ICIsIGZlbmNlUmFu
Z2UoKSk7CiB9CiAKIFZhbHVlKiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKQEAgLTc0
LDYgKzk1LDU4IEBAIFZhbHVlKiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKICAgICBy
ZXR1cm4gbmV3IE1lbW9yeVZhbHVlKCp0aGlzKTsKIH0KIAorLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
TG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhh
dmUgYSBzdWZmaXggdGhhdAorLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KK01lbW9y
eVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0KQorICAgIDogVmFsdWUoQ2hlY2tlZE9wY29k
ZSwga2luZCwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAgICwgbV9vZmZzZXQob2Zmc2V0KQor
eworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIHN3aXRjaCAoa2luZC5vcGNv
ZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExvYWQxNlo6
CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgY2Fz
ZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgQVNTRVJUKHR5cGUg
PT0gVm9pZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorfQorCisvLyBVc2Ug
dGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KK01l
bW9yeVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBw
b2ludGVyLCBpbnQzMl90IG9mZnNldCkKKyAgICA6IE1lbW9yeVZhbHVlKGtpbmQsIEludDMyLCBv
cmlnaW4sIHBvaW50ZXIsIG9mZnNldCkKK3sKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewor
ICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBMb2FkOFo6Cisg
ICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2Ug
TG9hZDE2UzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIFVzZSB0
aGlzIGZvcm0gZm9yIHN0b3Jlcy4KK01lbW9yeVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtpbmQs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zm
c2V0KQorICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2YWx1
ZSwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAgICBBU1NFUlQoQjM6Omlz
U3RvcmUoa2luZC5vcGNvZGUoKSkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAog
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDQ4ICsyNywxNyBAQAog
CiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzQmFuay5oIgogI2luY2x1ZGUgIkIz
SGVhcFJhbmdlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKIAotLy8gRklYTUU6IFdlIHdhbnQgdG8gYWxsb3cgZmVuY2VkIG1lbW9yeSBh
Y2Nlc3NlcyBvbiBBUk0uCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYyMzQ5Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeVZhbHVlIDogcHVibGlj
IFZhbHVlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKEtpbmQga2luZCkKICAg
ICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICBjYXNlIExvYWQ4
WjoKLSAgICAgICAgY2FzZSBMb2FkOFM6Ci0gICAgICAgIGNhc2UgTG9hZDE2WjoKLSAgICAgICAg
Y2FzZSBMb2FkMTZTOgotICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAgIGNhc2UgU3RvcmU4Ogot
ICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzU3RvcmUoS2luZCBraW5kKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgU3Rv
cmU4OgotICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzTG9hZChLaW5kIGtp
bmQpCi0gICAgewotICAgICAgICByZXR1cm4gYWNjZXB0cyhraW5kKSAmJiAhaXNTdG9yZShraW5k
KTsKKyAgICAgICAgcmV0dXJuIGlzTWVtb3J5QWNjZXNzKGtpbmQub3Bjb2RlKCkpOwogICAgIH0K
IAogICAgIH5NZW1vcnlWYWx1ZSgpOwpAQCAtNzgsNzYgKzQ3LDU2IEBAIHB1YmxpYzoKIAogICAg
IGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlOyB9CiAgICAg
dm9pZCBzZXRSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKSB7IG1fcmFuZ2UgPSByYW5nZTsg
fQorICAgIAorICAgIC8vIFRoaXMgaXMgYW4gYWxpYXMgZm9yIHJhbmdlLgorICAgIGNvbnN0IEhl
YXBSYW5nZSYgYWNjZXNzUmFuZ2UoKSBjb25zdCB7IHJldHVybiByYW5nZSgpOyB9CisgICAgdm9p
ZCBzZXRBY2Nlc3NSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKSB7IHNldFJhbmdlKHJhbmdl
KTsgfQorICAgIAorICAgIGNvbnN0IEhlYXBSYW5nZSYgZmVuY2VSYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZmVuY2VSYW5nZTsgfQorICAgIHZvaWQgc2V0RmVuY2VSYW5nZShjb25zdCBIZWFwUmFu
Z2UmIHJhbmdlKSB7IG1fZmVuY2VSYW5nZSA9IHJhbmdlOyB9CisKKyAgICBib29sIGlzU3RvcmUo
KSBjb25zdCB7IHJldHVybiBCMzo6aXNTdG9yZShvcGNvZGUoKSk7IH0KKyAgICBib29sIGlzTG9h
ZCgpIGNvbnN0IHsgcmV0dXJuIEIzOjppc0xvYWQob3Bjb2RlKCkpOyB9CiAKLSAgICBib29sIGlz
U3RvcmUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVm9pZDsgfQotICAgIGJvb2wgaXNMb2Fk
KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpICE9IFZvaWQ7IH0KKyAgICBib29sIGhhc0ZlbmNlKCkg
Y29uc3QgeyByZXR1cm4gISFmZW5jZVJhbmdlKCk7IH0KIAorICAgIFR5cGUgYWNjZXNzVHlwZSgp
IGNvbnN0OworICAgIEJhbmsgYWNjZXNzQmFuaygpIGNvbnN0OwogICAgIHNpemVfdCBhY2Nlc3NC
eXRlU2l6ZSgpIGNvbnN0OwotICAgIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CisgICAgCisg
ICAgLy8gU2xpZ2h0bHkgZmFzdGVyIHZlcnNpb24gb2YgYWNjZXNzV2lkdGgsIGlmIHlvdSBrbm93
IHRoYXQgeW91J3JlIHdvcmtpbmcgd2l0aCBhIGxvYWQgb3Igc3RvcmUuCisgICAgV2lkdGggbG9h
ZFN0b3JlV2lkdGgoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIFdpZHRoIGFjY2Vzc1dpZHRo
KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYg
Y29tbWEsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkdW1wTWV0YShD
b21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVmFsdWUq
IGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgIE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIEtpbmQga2luZCwg
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IG9mZnNldCwgQXJndW1lbnRzLi4uIGFy
Z3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmln
aW4sIGFyZ3VtZW50cy4uLikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAg
IH0KKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKLQorICAgIAog
ICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9y
IGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKICAgICAvLyBkZXNjcmli
ZXMgdGhlIHJldHVybmVkIHR5cGUpLgotICAgIE1lbW9yeVZhbHVlKEtpbmQga2luZCwgVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQot
ICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUsIG9yaWdpbiwgcG9pbnRl
cikKLSAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5nZShIZWFwUmFu
Z2U6OnRvcCgpKQotICAgIHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBMb2FkOgot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMb2FkOFo6Ci0gICAgICAg
ICAgICBjYXNlIExvYWQ4UzoKLSAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKLSAgICAgICAgICAg
IGNhc2UgTG9hZDE2UzoKLSAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAg
ICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKHR5cGUgPT0gVm9pZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIFR5cGUs
IE9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CiAKICAgICAvLyBV
c2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4K
LSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVy
LCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDogTWVtb3J5VmFsdWUoa2luZCwgSW50MzIs
IG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KQotICAgIHsKLSAgICB9CisgICAgTWVtb3J5VmFsdWUo
S2luZCwgT3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKTsKIAogICAg
IC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zm
c2V0ID0gMCkKLSAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCBWb2lkLCBvcmln
aW4sIHZhbHVlLCBwb2ludGVyKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAg
LCBtX3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCi0gICAgewotICAgICAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkgewotICAgICAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgICAg
IGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCisgICAgTWVtb3J5VmFs
dWUoS2luZCwgT3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9m
ZnNldCA9IDApOworICAgIAogICAgIGludDMyX3QgbV9vZmZzZXQgeyAwIH07Ci0gICAgSGVhcFJh
bmdlIG1fcmFuZ2U7CisgICAgSGVhcFJhbmdlIG1fcmFuZ2UgeyBIZWFwUmFuZ2U6OnRvcCgpIH07
CisgICAgSGVhcFJhbmdlIG1fZmVuY2VSYW5nZSB7IEhlYXBSYW5nZSgpIH07CiB9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM05h
dGl2ZVRyYWl0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM05h
dGl2ZVRyYWl0cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M05hdGl2ZVRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFuay5oIgorI2luY2x1ZGUgIkIzVHlw
ZS5oIgorI2luY2x1ZGUgIkIzV2lkdGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTmF0aXZlVHJhaXRzOworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBOYXRpdmVUcmFpdHM8aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0IEJhbmsg
YmFuayA9IEdQOworICAgIHN0YXRpYyBjb25zdCBXaWR0aCB3aWR0aCA9IFdpZHRoODsKKyAgICBz
dGF0aWMgY29uc3QgVHlwZSB0eXBlID0gSW50MzI7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBO
YXRpdmVUcmFpdHM8dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBHUDsK
KyAgICBzdGF0aWMgY29uc3QgV2lkdGggd2lkdGggPSBXaWR0aDg7CisgICAgc3RhdGljIGNvbnN0
IFR5cGUgdHlwZSA9IEludDMyOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVHJhaXRz
PGludDE2X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgQmFuayBiYW5rID0gR1A7CisgICAgc3RhdGlj
IGNvbnN0IFdpZHRoIHdpZHRoID0gV2lkdGgxNjsKKyAgICBzdGF0aWMgY29uc3QgVHlwZSB0eXBl
ID0gSW50MzI7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVUcmFpdHM8dWludDE2X3Q+
IHsKKyAgICBzdGF0aWMgY29uc3QgQmFuayBiYW5rID0gR1A7CisgICAgc3RhdGljIGNvbnN0IFdp
ZHRoIHdpZHRoID0gV2lkdGgxNjsKKyAgICBzdGF0aWMgY29uc3QgVHlwZSB0eXBlID0gSW50MzI7
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVUcmFpdHM8aW50MzJfdD4geworICAgIHN0
YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBHUDsKKyAgICBzdGF0aWMgY29uc3QgV2lkdGggd2lkdGgg
PSBXaWR0aDMyOworICAgIHN0YXRpYyBjb25zdCBUeXBlIHR5cGUgPSBJbnQzMjsKK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IE5hdGl2ZVRyYWl0czx1aW50MzJfdD4geworICAgIHN0YXRpYyBjb25z
dCBCYW5rIGJhbmsgPSBHUDsKKyAgICBzdGF0aWMgY29uc3QgV2lkdGggd2lkdGggPSBXaWR0aDMy
OworICAgIHN0YXRpYyBjb25zdCBUeXBlIHR5cGUgPSBJbnQzMjsKK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IE5hdGl2ZVRyYWl0czxpbnQ2NF90PiB7CisgICAgc3RhdGljIGNvbnN0IEJhbmsgYmFu
ayA9IEdQOworICAgIHN0YXRpYyBjb25zdCBXaWR0aCB3aWR0aCA9IFdpZHRoNjQ7CisgICAgc3Rh
dGljIGNvbnN0IFR5cGUgdHlwZSA9IEludDY0OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0
aXZlVHJhaXRzPHVpbnQ2NF90PiB7CisgICAgc3RhdGljIGNvbnN0IEJhbmsgYmFuayA9IEdQOwor
ICAgIHN0YXRpYyBjb25zdCBXaWR0aCB3aWR0aCA9IFdpZHRoNjQ7CisgICAgc3RhdGljIGNvbnN0
IFR5cGUgdHlwZSA9IEludDY0OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVHJhaXRz
PGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0IEJhbmsgYmFuayA9IEZQOworICAgIHN0YXRpYyBj
b25zdCBXaWR0aCB3aWR0aCA9IFdpZHRoMzI7CisgICAgc3RhdGljIGNvbnN0IFR5cGUgdHlwZSA9
IEZsb2F0OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVHJhaXRzPGRvdWJsZT4gewor
ICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBGUDsKKyAgICBzdGF0aWMgY29uc3QgV2lkdGgg
d2lkdGggPSBXaWR0aDY0OworICAgIHN0YXRpYyBjb25zdCBUeXBlIHR5cGUgPSBEb3VibGU7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMjEy
OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTY4LDYgKzY4LDIzIEBAIHN0ZDo6b3B0aW9uYWw8T3Bjb2RlPiBpbnZlcnRlZENv
bXBhcmUoT3AKICAgICB9CiB9CiAKK09wY29kZSBzdG9yZU9wY29kZShCYW5rIGJhbmssIFdpZHRo
IHdpZHRoKQoreworICAgIHN3aXRjaCAoYmFuaykgeworICAgIGNhc2UgR1A6CisgICAgICAgIHN3
aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBXaWR0aDg6CisgICAgICAgICAgICByZXR1cm4g
U3RvcmU4OworICAgICAgICBjYXNlIFdpZHRoMTY6CisgICAgICAgICAgICByZXR1cm4gU3RvcmUx
NjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTdG9yZTsKKyAgICAgICAg
fQorICAgIGNhc2UgRlA6CisgICAgICAgIHJldHVybiBTdG9yZTsKKyAgICB9Cit9CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMwogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTI2Myw2ICsyODAsMzMg
QEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wYwogICAgIGNhc2UgU3Rv
cmU6CiAgICAgICAgIG91dC5wcmludCgiU3RvcmUiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAgb3V0LnByaW50KCJBdG9taWNXZWFrQ0FTIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgb3V0LnBy
aW50KCJBdG9taWNTdHJvbmdDQVMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXRvbWlj
WGNoZ0FkZDoKKyAgICAgICAgb3V0LnByaW50KCJBdG9taWNYY2hnQWRkIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgIG91dC5wcmludCgiQXRvbWlj
WGNoZ0FuZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAg
ICAgIG91dC5wcmludCgiQXRvbWljWGNoZ09yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEF0b21pY1hjaGdTdWI6CisgICAgICAgIG91dC5wcmludCgiQXRvbWljWGNoZ1N1YiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICBvdXQucHJpbnQo
IkF0b21pY1hjaGdYb3IiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXRvbWljWGNoZzoK
KyAgICAgICAgb3V0LnByaW50KCJBdG9taWNYY2hnIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIERlcGVuZDoKKyAgICAgICAgb3V0LnByaW50KCJEZXBlbmQiKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgV2FzbUFkZHJlc3M6CiAgICAgICAgIG91dC5wcmludCgiV2FzbUFkZHJlc3Mi
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bj
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAK
ICNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlICJCM1dpZHRoLmgiCiAjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC04Miw3ICs4
Myw2IEBAIGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgTW9kLCAvLyBBbGwgYmV0cyBhcmUg
b2ZmIGFzIHRvIHdoYXQgd2lsbCBoYXBwZW4gd2hlbiB5b3UgZXhlY3V0ZSB0aGlzIGZvciAtMl4z
MSUtMSBhbmQgeCUwLgogICAgIFVNb2QsCiAKLQogICAgIC8vIFBvbHltb3JwaGljIG5lZ2F0aW9u
LiBOb3RlIHRoYXQgd2Ugb25seSBuZWVkIHRoaXMgZm9yIGZsb2F0aW5nIHBvaW50LCBzaW5jZSBp
bnRlZ2VyIG5lZ2F0aW9uCiAgICAgLy8gaXMgZXhhY3RseSBsaWtlIFN1YigwLCB4KS4gQnV0IHRo
YXQncyBub3QgdHJ1ZSBmb3IgZmxvYXRpbmcgcG9pbnQuIFN1YigwLCAwKSBpcyAwLCB3aGlsZQog
ICAgIC8vIE5lZygwKSBpcyAtMC4gQWxzbywgd2UgY2Fub25pY2FsaXplIFN1YigwLCB4KSBpbnRv
IE5lZyh4KSBpbiBjYXNlIG9mIGludGVnZXJzLgpAQCAtMTYyLDYgKzE2MiwxMDcgQEAgZW51bSBP
cGNvZGUgOiBpbnQxNl90IHsKICAgICBTdG9yZTE2LAogICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9y
cGhpYyBzdG9yZSBmb3IgSW50MzIsIEludDY0LCBGbG9hdCwgYW5kIERvdWJsZS4KICAgICBTdG9y
ZSwKKyAgICAKKyAgICAvLyBBdG9taWMgY29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgYSBi
b29sZWFuLiBNYXkgY2hvb3NlIHRvIGRvIG5vdGhpbmcgYW5kIHJldHVybiBmYWxzZS4gWW91IGNh
bgorICAgIC8vIHVzdWFsbHkgYXNzdW1lIHRoYXQgdGhpcyBpcyBmYXN0ZXIgYW5kIHJlc3VsdHMg
aW4gbGVzcyBjb2RlIHRoYW4gQXRvbWljU3Ryb25nQ0FTLCB0aG91Z2ggdGhhdCdzCisgICAgLy8g
bm90IG5lY2Vzc2FyaWx5IHRydWUgb24gSW50ZWwsIGlmIGluc3RydWN0aW9uIHNlbGVjdGlvbiBk
b2VzIGl0cyBqb2IuIEltYWdpbmUgdGhhdCB0aGlzIG9wY29kZSBpcworICAgIC8vIGFzIGlmIHlv
dSBkaWQgdGhpcyBhdG9taWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICAvLyBib29sIEF0b21pY1dlYWtDQVMoVCBleHBlY3RlZFZhbHVlLCBUIG5ld1ZhbHVl
LCBUKiBwdHIpCisgICAgLy8geworICAgIC8vICAgICBpZiAoIXJhbmQoKSkKKyAgICAvLyAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gUmVhbCB3b3JsZCBleGFtcGxlIG9mIHRoaXM6IGNvbnRleHQg
c3dpdGNoIG9uIEFSTSB3aGlsZSBkb2luZyBDQVMuCisgICAgLy8gICAgIGlmICgqcHRyICE9IGV4
cGVjdGVkVmFsdWUpCisgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gICAgICpw
dHIgPSBuZXdWYWx1ZTsKKyAgICAvLyAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gfQorICAgIC8v
CisgICAgLy8gTm90ZSB0aGF0IGFsbCBhdG9taWNzIHB1dCB0aGUgcG9pbnRlciBsYXN0IHRvIGJl
IGNvbnNpc3RlbnQgd2l0aCBob3cgbG9hZHMgYW5kIHN0b3JlcyB3b3JrLiBUaGlzCisgICAgLy8g
aXMgYSBnb29meSB0cmFkaXRpb24sIGJ1dCBpdCdzIGhhcm1sZXNzLCBhbmQgYmV0dGVyIHRoYW4g
YmVpbmcgaW5jb25zaXN0ZW50LgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHdlYWsgQ0FTIGhh
cyBubyBmZW5jaW5nIGd1YXJhbnRlZXMgd2hlbiBpdCBmYWlscy4gVGhpcyBtZWFucyB0aGF0IHRo
ZSBmb2xsb3dpbmcKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbiBpcyBhbHdheXMgdmFsaWQ6CisgICAg
Ly8KKyAgICAvLyBCZWZvcmU6CisgICAgLy8KKyAgICAvLyAgICAgICAgIEJyYW5jaChBdG9taWNX
ZWFrQ0FTKGV4cGVjdGVkLCBuZXcsIHB0cikpCisgICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhl
bjojc3VjY2VzcywgRWxzZTojZmFpbAorICAgIC8vCisgICAgLy8gQWZ0ZXI6CisgICAgLy8KKyAg
ICAvLyAgICAgICAgIEJyYW5jaChFcXVhbChMb2FkKHB0ciksIGV4cGVjdGVkKSkKKyAgICAvLyAg
ICAgICBTdWNjZXNzb3JzOiBUaGVuOiNhdHRlbXB0LCBFbHNlOiNmYWlsCisgICAgLy8gICAgIEJC
I2F0dGVtcHQ6CisgICAgLy8gICAgICAgICBCcmFuY2goQXRvbWljV2Vha0NBUyhleHBlY3RlZCwg
bmV3LCBwdHIpKQorICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I3N1Y2Nlc3MsIEVsc2U6
I2ZhaWwKKyAgICAvLworICAgIC8vIEJvdGgga2luZHMgb2YgQ0FTIGZvciBub24tY2Fub25pY2Fs
IHdpZHRocyAoV2lkdGg4IGFuZCBXaWR0aDE2KSBpZ25vcmUgdGhlIGlycmVsZXZhbnQgYml0cyBv
ZiB0aGUKKyAgICAvLyBpbnB1dC4KKyAgICBBdG9taWNXZWFrQ0FTLAorICAgIAorICAgIC8vIEF0
b21pYyBjb21wYXJlIGFuZCBzd2FwIHRoYXQgcmV0dXJucyB0aGUgb2xkIHZhbHVlLiBEb2VzIG5v
dCBoYXZlIHRoZSBub25kZXRlcm1pbmlzbSBvZiBXZWFrQ0FTLgorICAgIC8vIFRoaXMgaXMgYSBi
aXQgbW9yZSBjb2RlIGFuZCBhIGJpdCBzbG93ZXIgaW4gc29tZSBjYXNlcywgdGhvdWdoIG5vdCBi
eSBhIGxvdC4gSW1hZ2luZSB0aGF0IHRoaXMKKyAgICAvLyBvcGNvZGUgaXMgYXMgaWYgeW91IGRp
ZCB0aGlzIGF0b21pY2FsbHk6CisgICAgLy8KKyAgICAvLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIC8vIFQgQXRvbWljU3Ryb25nQ0FTKFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSwgVCog
cHRyKQorICAgIC8vIHsKKyAgICAvLyAgICAgVCBvbGRWYWx1ZSA9ICpwdHI7CisgICAgLy8gICAg
IGlmIChvbGRWYWx1ZSA9PSBleHBlY3RlZFZhbHVlKQorICAgIC8vICAgICAgICAgKnB0ciA9IG5l
d1ZhbHVlOworICAgIC8vICAgICByZXR1cm4gb2xkVmFsdWUKKyAgICAvLyB9CisgICAgLy8KKyAg
ICAvLyBOb3RlIHRoYXQgQXRvbWljV2Vha0NBUyBhbmQgQXRvbWljU3Ryb25nQ0FTIHNvcnQgb2Yg
aGF2ZSB0aGlzIGtpbmQgb2YgZXF1aXZhbGVuY2U6CisgICAgLy8KKyAgICAvLyBBdG9taWNXZWFr
Q0FTKEBleHAsIEBuZXcsIEBwdHIpID09IEVxdWFsKEF0b21pY1N0cm9uZ0NBUyhAZXhwLCBAbmV3
LCBAcHRyKSwgQGV4cCkKKyAgICAvLworICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhlIFdlYWtDQVMg
ZG9lcyBub3Qgc3B1cmlvdXNseSBmYWlsLCBvZiBjb3Vyc2UuCisgICAgQXRvbWljU3Ryb25nQ0FT
LAorICAgIAorICAgIC8vIEF0b21pY2FsbHkgX19fIGEgbWVtb3J5IGxvY2F0aW9uIGFuZCByZXR1
cm4gdGhlIG9sZCB2YWx1ZS4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQG9sZFZhbHVlID0gQXRv
bWljWGNoZ19fXyhAb3BlcmFuZCwgQHB0cikKKyAgICAvLworICAgIC8vIEZvciBub24tY2Fub25p
Y2FsIHdpZHRocyAoV2lkdGg4IGFuZCBXaWR0aDE2KSwgdGhlc2UgcmV0dXJuIHNpZ24tZXh0ZW5k
ZWQgcmVzdWx0cyBhbmQgaWdub3JlIHRoZQorICAgIC8vIGlycmVsZXZhbnQgYml0cyBvZiB0aGVp
ciBpbnB1dHMuCisgICAgQXRvbWljWGNoZ0FkZCwKKyAgICBBdG9taWNYY2hnQW5kLAorICAgIEF0
b21pY1hjaGdPciwKKyAgICBBdG9taWNYY2hnU3ViLAorICAgIEF0b21pY1hjaGdYb3IsCisgICAg
CisgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBoYXZlIEF0b21pY1hjaGdOZWcgYW5kIEF0
b21pY1hjaGdOb3QuCisgICAgCisgICAgLy8gQXRvbWljYWxseSBleGNoYW5nZSBhIHZhbHVlIHdp
dGggYSBtZW1vcnkgbG9jYXRpb24uIFN5bnRheDoKKyAgICAvLworICAgIC8vIEBvbGRWYWx1ZSA9
IEF0b21pY1hjaGcoQG5ld1ZhbHVlLCBAcHRyKQorICAgIEF0b21pY1hjaGcsCisgICAgCisgICAg
Ly8gSW50cm9kdWNlIGFuIGludmlzaWJsZSBkZXBlbmRlbmN5IGZvciBibG9ja2luZyBtb3Rpb24g
b2YgbG9hZHMgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3RoZXIuIFN5bnRheDoKKyAgICAvLworICAg
IC8vIEByZXN1bHQgPSBEZXBlbmQoQHBoYW50b20pCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIGV2
ZW50dWFsbHkgY29kZWdlbmVyYXRlZCB0byBoYXZlIGxvY2FsIHNlbWFudGljcyBhcyBpZiB3ZSBk
aWQ6CisgICAgLy8KKyAgICAvLyBAcmVzdWx0ID0gJDAKKyAgICAvLworICAgIC8vIEJ1dCBpdCBl
bnN1cmVzIHRoYXQgdGhlIHVzZXJzIG9mIEByZXN1bHQgY2Fubm90IGV4ZWN1dGUgdW50aWwgQHBo
YW50b20gaXMgY29tcHV0ZWQuCisgICAgLy8KKyAgICAvLyBUaGUgY29tcGlsZXIgaXMgbm90IGFs
bG93ZWQgdG8gcmVhc29uIGFib3V0IHRoZSBmYWN0IHRoYXQgRGVwZW5kIGNvZGVnZW5lcmF0ZXMg
dGhpcyB3YXkuIEFueSBraW5kCisgICAgLy8gb2YgdHJhbnNmb3JtYXRpb24gb3IgYW5hbHlzaXMg
dGhhdCByZWxpZXMgb24gdGhlIGluc2lnaHQgdGhhdCBEZXBlbmQgaXMgcmVhbGx5IHplcm8gaXMg
dW5zb3VuZCwKKyAgICAvLyBiZWNhdXNlIGl0IHVubG9ja3MgcmVvcmRlcmluZyBvZiB1c2VycyBv
ZiBAcmVzdWx0IGFuZCBAcGhhbnRvbS4KKyAgICAvLworICAgIC8vIE9uIFg4NiwgdGhpcyBpcyBs
b3dlcmVkIHRvIGEgbG9hZC1sb2FkIGZlbmNlIGFuZCBAcmVzdWx0IHVzZXMgQHBoYW50b20gZGly
ZWN0bHkuCisgICAgLy8KKyAgICAvLyBPbiBBUk0sIHRoaXMgaXMgbG93ZXJlZCBhcyBpZiBsaWtl
OgorICAgIC8vCisgICAgLy8gQHJlc3VsdCA9IEJpdFhvcihAcGhhbnRvbSwgQHBoYW50b20pCisg
ICAgLy8KKyAgICAvLyBFeGNlcHQgdGhhdCB0aGUgY29tcGlsZXIgbmV2ZXIgZ2V0cyBhbiBvcHBv
cnR1bml0eSB0byBzaW1wbGlmeSBvdXQgdGhlIEJpdFhvci4KKyAgICBEZXBlbmQsCiAKICAgICAv
LyBUaGlzIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsIGFkZHJlc3Mgb2YgYSBXYXNtIG1l
bW9yeSBvcGVyYXRpb24uIEl0IHRha2VzIGFuIEludFB0cgogICAgIC8vIGFuZCBhIHBpbm5lZCBy
ZWdpc3RlciB0aGVuIGNvbXB1dGVzIHRoZSBhcHByb3ByaWF0ZSBJbnRQdHIgYWRkcmVzcy4gRm9y
IHRoZSB1c2UtY2FzZSBvZgpAQCAtMzAxLDYgKzQwMiwxMTIgQEAgaW5saW5lIGJvb2wgaXNEZWZp
bml0ZWx5VGVybWluYWwoT3Bjb2RlIAogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgaXNMb2FkKE9w
Y29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIExvYWQ4WjoK
KyAgICBjYXNlIExvYWQ4UzoKKyAgICBjYXNlIExvYWQxNlo6CisgICAgY2FzZSBMb2FkMTZTOgor
ICAgIGNhc2UgTG9hZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNTdG9yZShPcGNvZGUg
b3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBTdG9yZTg6CisgICAg
Y2FzZSBTdG9yZTE2OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29s
IGlzTG9hZFN0b3JlKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICBjYXNlIExvYWQ4WjoKKyAgICBjYXNlIExvYWQ4UzoKKyAgICBjYXNlIExvYWQxNlo6CisgICAg
Y2FzZSBMb2FkMTZTOgorICAgIGNhc2UgTG9hZDoKKyAgICBjYXNlIFN0b3JlODoKKyAgICBjYXNl
IFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNB
dG9taWMoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2Ug
QXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICBjYXNlIEF0b21p
Y1hjaGdBZGQ6CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09y
OgorICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAg
Y2FzZSBBdG9taWNYY2hnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0F0b21pY0NBUyhP
cGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBBdG9taWNX
ZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUg
Ym9vbCBpc0F0b21pY1hjaGcoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkg
eworICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAg
Y2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRv
bWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBi
b29sIGlzTWVtb3J5QWNjZXNzKE9wY29kZSBvcGNvZGUpCit7CisgICAgcmV0dXJuIGlzQXRvbWlj
KG9wY29kZSkgfHwgaXNMb2FkU3RvcmUob3Bjb2RlKTsKK30KKworaW5saW5lIE9wY29kZSBzaWdu
RXh0ZW5kT3Bjb2RlKFdpZHRoIHdpZHRoKQoreworICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICBj
YXNlIFdpZHRoODoKKyAgICAgICAgcmV0dXJuIFNFeHQ4OworICAgIGNhc2UgV2lkdGgxNjoKKyAg
ICAgICAgcmV0dXJuIFNFeHQxNjsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gT29wczsKKyAgICB9Cit9CisKK0pTX0VY
UE9SVF9QUklWQVRFIE9wY29kZSBzdG9yZU9wY29kZShCYW5rIGJhbmssIFdpZHRoIHdpZHRoKTsK
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDIsNiArMjAyLDggQEAgdm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgYwogICAgICAgICB9CiAgICAgICAgIGRhdGFMb2coIiAgICAiLCBkZWVwRHVtcCgqdGhpcywg
dmFsdWUpLCAiXG4iKTsKICAgICB9CisgICAgaWYgKGhhc1F1aXJrcygpKQorICAgICAgICBvdXQu
cHJpbnQoIkhhcyBRdWlya3M6IFRydWVcbiIpOwogICAgIGlmICh2YXJpYWJsZXMoKS5zaXplKCkp
IHsKICAgICAgICAgb3V0LnByaW50KCJWYXJpYWJsZXM6XG4iKTsKICAgICAgICAgZm9yIChWYXJp
YWJsZSogdmFyaWFibGUgOiB2YXJpYWJsZXMoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3IEBAIHB1
YmxpYzoKICAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoT3JpZ2luLCBUeXBlLCBpbnQ2NF90IHZh
bHVlKTsKICAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoVmFsdWUqLCBpbnQ2NF90IHZhbHVlKTsK
IAorICAgIC8vIFlvdSdyZSBndWFyYW50ZWVkIHRoYXQgYm90dG9tIGlzIHplcm8uCiAgICAgVmFs
dWUqIGFkZEJvdHRvbShPcmlnaW4sIFR5cGUpOwogICAgIFZhbHVlKiBhZGRCb3R0b20oVmFsdWUq
KTsKIApAQCAtMTk1LDYgKzE5NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gYWxpdmUuIEdyZWF0IGZv
ciBjb21waWxlci1nZW5lcmF0ZWQgZGF0YSBzZWN0aW9ucywgbGlrZSBzd2l0Y2gganVtcCB0YWJs
ZXMgYW5kIGNvbnN0YW50IHBvb2xzLgogICAgIC8vIFRoaXMgcmV0dXJucyBtZW1vcnkgdGhhdCBo
YXMgYmVlbiB6ZXJvLWluaXRpYWxpemVkLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFk
ZERhdGFTZWN0aW9uKHNpemVfdCk7CisgICAgCisgICAgLy8gU29tZSBvcGVyYXRpb25zIGFyZSBz
cGVjaWZpZWQgaW4gQjMgSVIgdG8gYmVoYXZlIG9uZSB3YXkgYnV0IG9uIHRoaXMgZ2l2ZW4gQ1BV
IHRoZXkgYmVoYXZlIGEKKyAgICAvLyBkaWZmZXJlbnQgd2F5LiBXaGVuIHRydWUsIHRob3NlIEIz
IElSIG9wcyBzd2l0Y2ggdG8gYmVoYXZpbmcgdGhlIENQVSB3YXksIGFuZCB0aGUgb3B0aW1pemVy
IG1heQorICAgIC8vIHN0YXJ0IHRha2luZyBhZHZhbnRhZ2Ugb2YgaXQuCisgICAgYm9vbCBoYXNR
dWlya3MoKSBjb25zdCB7IHJldHVybiBtX2hhc1F1aXJrczsgfQorICAgIHZvaWQgc2V0SGFzUXVp
cmtzKGJvb2wgdmFsdWUpIHsgbV9oYXNRdWlya3MgPSB2YWx1ZTsgfQogCiAgICAgT3BhcXVlQnlw
cm9kdWN0cyYgYnlwcm9kdWN0cygpIHsgcmV0dXJuICptX2J5cHJvZHVjdHM7IH0KIApAQCAtMjUy
LDYgKzI1OSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChQcmludFN0
cmVhbSYsIE9yaWdpbik+PiBtX29yaWdpblByaW50ZXI7CiAgICAgY29uc3Qgdm9pZCogbV9mcm9u
dGVuZERhdGE7CiAgICAgUENUb09yaWdpbk1hcCBtX3BjVG9PcmlnaW5NYXA7CisgICAgYm9vbCBt
X2hhc1F1aXJrcyB7IGZhbHNlIH07CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRl
ICJCM0NvbXB1dGVEaXZpc2lvbk1hZ2ljLmgiCkBAIC02MDIsNyArNjAzLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIE5lZzoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTmVnKGNvbnN0YW50KQog
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiAtY29uc3RhbnQKQEAgLTEyOTUsNiArMTI5NiwxNiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9wcm9jLmhh
c1F1aXJrcygpKSB7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChBdG9taWNY
Y2hnX19fKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXworICAg
ICAgICAgICAgICAgIGlmIChpc0F0b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgp
KQorICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRvbWljVmFs
dWU+KCktPm9wZXJhdGlvbldpZHRoKCkgPT0gV2lkdGg4KSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIFNFeHQxNjoKQEAgLTEzNDMsNiArMTM1NCwxNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbV9wcm9jLmhhc1F1aXJrcygpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoQXRvbWljWGNoZ19fXykKKyAgICAg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEF0b21pY1hjaGdfX18KKyAgICAgICAgICAgICAgICBp
ZiAoaXNBdG9taWNYY2hnKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVlPigpLT5vcGVyYXRp
b25XaWR0aCgpID09IFdpZHRoMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJ
ZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGNhc2UgU0V4dDMyOgpAQCAtMjEwMSwyMiArMjEyMiwyNSBAQCBwcml2YXRlOgogICAg
ICAgICBBU1NFUlQobV92YWx1ZS0+bnVtQ2hpbGRyZW4oKSA+PSAyKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIExlYXZlIGl0IGFsb25lIGlmIHRoZSByaWdodCBjaGlsZCBpcyBhIGNvbnN0YW50Lgot
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgaWYg
KG1fdmFsdWUtPmNoaWxkKDEpLT5pc0NvbnN0YW50KCkKKyAgICAgICAgICAgIHx8IG1fdmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzQ29uc3RhbnQo
KSkgeworICAgICAgICBhdXRvIHN3YXAgPSBbJl0gKCkgewogICAgICAgICAgICAgc3RkOjpzd2Fw
KG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KKyAgICAgICAg
fTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNDb25zdGFudCgp
KQorICAgICAgICAgICAgcmV0dXJuIHN3YXAoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKQorICAgICAgICAgICAg
cmV0dXJuIHN3YXAoKTsKKyAgICAgICAgCiAgICAgICAgIC8vIFNvcnQgdGhlIG9wZXJhbmRzLiBU
aGlzIGlzIGFuIGltcG9ydGFudCBjYW5vbmljYWxpemF0aW9uLiBXZSB1c2UgdGhlIGluZGV4IGlu
c3RlYWQgb2YKICAgICAgICAgLy8gdGhlIGFkZHJlc3MgdG8gbWFrZSB0aGlzIGF0IGxlYXN0IHNs
aWdodGx5IGRldGVybWluaXN0aWMuCi0gICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aW5k
ZXgoKSA+IG1fdmFsdWUtPmNoaWxkKDEpLT5pbmRleCgpKSB7Ci0gICAgICAgICAgICBzdGQ6OnN3
YXAobV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pbmRleCgpID4gbV92YWx1ZS0+Y2hpbGQoMSktPmluZGV4
KCkpCisgICAgICAgICAgICByZXR1cm4gc3dhcCgpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCByZWFsbHkgYmUgYSBmb3J3YXJkIGFuYWx5c2lzLiBJbnN0ZWFkLCB3ZSB1c2Vz
IGEgYm91bmRlZC1zZWFyY2ggYmFja3dhcmRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAK
ICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisj
aW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMu
aCIKICNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgi
CkBAIC0zNDYsNiArMzQ3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJB
dCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09
IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2Uo
dmFsdWUpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBMb2FkOgpAQCAtMzUzLDYgKzM1
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRy
ZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAg
ICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBTdG9yZTg6CkBAIC0zNjIsNiArMzY1LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IElu
dDMyLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5j
aGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAg
ICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBTdG9yZToKQEAgLTM2OSw4ICszNzMsNDkgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwg
KnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBl
KCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgdmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVT
dGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5k
KCkuaXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5udW1DaGlsZHJlbigpID09IDMsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1
ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9p
bnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0
b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NB
UzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxk
cmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxk
KDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
aXNJbnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgICAgICAgICBjYXNl
IEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAg
ICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoK
KyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSgh
dmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgw
KS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlz
SW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOworICAgICAg
ICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBEZXBlbmQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
IXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5j
aGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtQWRkcmVzczoKICAgICAgICAgICAgICAg
ICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUp
KTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAo
IkF0ICIsICp2YWx1ZSkpOwpAQCAtNTM3LDYgKzU4MiwyMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZUZlbmNl
KFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpCisg
ICAgICAgICAgICBWQUxJREFURShtZW1vcnktPmFjY2Vzc0JhbmsoKSA9PSBHUCwgKCJGZW5jZSBh
dCAiLCAqbWVtb3J5KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGVBdG9taWMoVmFs
dWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IHZhbHVlLT5h
czxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgCisgICAgICAgIFZBTElEQVRFKGJlc3RUeXBlKEdQ
LCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpID09IGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgIH0KIAogICAgIHZvaWQgdmFsaWRhdGVTdGFja0FjY2VzcyhW
YWx1ZSogdmFsdWUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNw
cAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQp
CiAKICNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKyNpbmNsdWRlICJCM0F0b21pY1Zh
bHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQm90
dG9tUHJvdmlkZXIuaCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKQEAgLTUxMCw2ICs1MTEs
NyBAQCBib29sIFZhbHVlOjpyZXR1cm5zQm9vbCgpIGNvbnN0CiAgICAgY2FzZSBBYm92ZUVxdWFs
OgogICAgIGNhc2UgQmVsb3dFcXVhbDoKICAgICBjYXNlIEVxdWFsT3JVbm9yZGVyZWQ6CisgICAg
Y2FzZSBBdG9taWNXZWFrQ0FTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFBoaToK
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgc3RvcnkgaGVyZS4KQEAgLTU4OSw2
ICs1OTEsNyBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICBjYXNlIEJlbG93
RXF1YWw6CiAgICAgY2FzZSBFcXVhbE9yVW5vcmRlcmVkOgogICAgIGNhc2UgU2VsZWN0OgorICAg
IGNhc2UgRGVwZW5kOgogICAgICAgICBicmVhazsKICAgICBjYXNlIERpdjoKICAgICBjYXNlIFVE
aXY6CkBAIC02MDAsMTYgKzYwMyw0NCBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QK
ICAgICBjYXNlIExvYWQ4UzoKICAgICBjYXNlIExvYWQxNlo6CiAgICAgY2FzZSBMb2FkMTZTOgot
ICAgIGNhc2UgTG9hZDoKLSAgICAgICAgcmVzdWx0LnJlYWRzID0gYXM8TWVtb3J5VmFsdWU+KCkt
PnJhbmdlKCk7CisgICAgY2FzZSBMb2FkOiB7CisgICAgICAgIGNvbnN0IE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSBhczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5
LT5yYW5nZSgpOworICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKSB7CisgICAgICAgICAg
ICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5mZW5jZVJhbmdlKCk7CisgICAgICAgICAgICByZXN1
bHQuZmVuY2UgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5k
ZW50ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgU3RvcmU4OgogICAg
IGNhc2UgU3RvcmUxNjoKLSAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXN1bHQud3JpdGVzID0g
YXM8TWVtb3J5VmFsdWU+KCktPnJhbmdlKCk7CisgICAgY2FzZSBTdG9yZTogeworICAgICAgICBj
b25zdCBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gYXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIHJl
c3VsdC53cml0ZXMgPSBtZW1vcnktPnJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0Zl
bmNlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+ZmVuY2VSYW5nZSgp
OworICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgY2Fz
ZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21p
Y1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9y
OgorICAgIGNhc2UgQXRvbWljWGNoZzogeworICAgICAgICBjb25zdCBBdG9taWNWYWx1ZSogYXRv
bWljID0gYXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgIHJlc3VsdC5yZWFkcyA9IGF0b21pYy0+
cmFuZ2UoKSB8IGF0b21pYy0+ZmVuY2VSYW5nZSgpOworICAgICAgICByZXN1bHQud3JpdGVzID0g
YXRvbWljLT5yYW5nZSgpIHwgYXRvbWljLT5mZW5jZVJhbmdlKCk7CisgICAgICAgIGlmIChhdG9t
aWMtPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAg
ICByZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIH0K
ICAgICBjYXNlIFdhc21BZGRyZXNzOgogICAgICAgICByZXN1bHQucmVhZHNQaW5uZWQgPSB0cnVl
OwogICAgICAgICBicmVhazsKQEAgLTYxNywxOCArNjQ4LDcgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZm
ZWN0cygpIGNvbnN0CiAgICAgICAgIGNvbnN0IEZlbmNlVmFsdWUqIGZlbmNlID0gYXM8RmVuY2VW
YWx1ZT4oKTsKICAgICAgICAgcmVzdWx0LnJlYWRzID0gZmVuY2UtPnJlYWQ7CiAgICAgICAgIHJl
c3VsdC53cml0ZXMgPSBmZW5jZS0+d3JpdGU7Ci0gICAgICAgIAotICAgICAgICAvLyBQcmV2ZW50
IGtpbGxpbmcgb2YgZmVuY2VzIHRoYXQgY2xhaW0gbm90IHRvIHdyaXRlIGFueXRoaW5nLiBJdCdz
IGEgYml0IHdlaXJkIHRoYXQgd2UgdXNlCi0gICAgICAgIC8vIGxvY2FsIHN0YXRlIGFzIHRoZSB3
YXkgdG8gZG8gdGhpcywgYnV0IGl0IGhhcHBlbnMgdG8gd29yazogd2UgbXVzdCBhc3N1bWUgdGhh
dCB3ZSBjYW5ub3QKLSAgICAgICAgLy8ga2lsbCB3cml0ZXNMb2NhbFN0YXRlIHVubGVzcyB3ZSB1
bmRlcnN0YW5kcyBleGFjdGx5IHdoYXQgdGhlIGluc3RydWN0aW9uIGlzIGRvaW5nIChsaWtlCi0g
ICAgICAgIC8vIHRoZSB3YXkgdGhhdCBmaXhTU0EgdW5kZXJzdGFuZHMgU2V0L0dldCBhbmQgdGhl
IHdheSB0aGF0IHJlZHVjZVN0cmVuZ3RoIGFuZCBvdGhlcnMKLSAgICAgICAgLy8gdW5kZXJzdGFu
ZCBVcHNpbG9uKS4gVGhpcyB3b3VsZCBvbmx5IGJlY29tZSBhIHByb2JsZW0gaWYgd2UgaGFkIHNv
bWUgYW5hbHlzaXMgdGhhdCB3YXMKLSAgICAgICAgLy8gbG9va2luZyB0byB1c2UgdGhlIHdyaXRl
c0xvY2FsU3RhdGUgYml0IHRvIGludmFsaWRhdGUgYSBDU0Ugb3ZlciBsb2NhbCBzdGF0ZSBvcGVy
YXRpb25zLgotICAgICAgICAvLyBUaGVuIGEgRmVuY2Ugd291bGQgbG9vayBibG9jaywgc2F5LCB0
aGUgZWxpbWluYXRpb24gb2YgYSByZWR1bmRhbnQgR2V0LiBCdXQgaXQgbGlrZQotICAgICAgICAv
LyB0aGF0J3Mgbm90IGF0IGFsbCBob3cgb3VyIG9wdGltaXphdGlvbnMgZm9yIFNldC9HZXQvVXBz
aWxvbi9QaGkgd29yayAtIHRoZXkgZ3JvayB0aGVpcgotICAgICAgICAvLyBvcGVyYXRpb25zIGRl
ZXBseSBlbm91Z2ggdGhhdCB0aGV5IGhhdmUgbm8gbmVlZCB0byBjaGVjayB0aGlzIGJpdCAtIHNv
IHRoaXMgY2hlYXQgaXMKLSAgICAgICAgLy8gZmluZS4KLSAgICAgICAgcmVzdWx0LndyaXRlc0xv
Y2FsU3RhdGUgPSB0cnVlOworICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBDQ2FsbDoKQEAgLTY5NCw2ICs3MTQsNyBAQCBWYWx1ZUtl
eSBWYWx1ZTo6a2V5KCkgY29uc3QKICAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgQml0d2lzZUNh
c3Q6CiAgICAgY2FzZSBOZWc6CisgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAgIHJldHVybiBWYWx1
ZUtleShraW5kKCksIHR5cGUoKSwgY2hpbGQoMCkpOwogICAgIGNhc2UgQWRkOgogICAgIGNhc2Ug
U3ViOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OCw2ICs2OCwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKS5vcGNvZGUoKTsgfQogICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUg
a2luZCBpcyBtZWFudCB0byBiZSBpbW11dGFibGUuIERvIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0
IHRoaXMgaXMgc2FmZS4gSXQncyBub3QKKyAgICAvLyB1c3VhbGx5IHNhZmUuCisgICAgdm9pZCBz
ZXRLaW5kVW5zYWZlbHkoS2luZCBraW5kKSB7IG1fa2luZCA9IGtpbmQ7IH0KKyAgICAKICAgICAv
LyBJdCdzIGdvb2QgcHJhY3RpY2UgdG8gbWlycm9yIEtpbmQgbWV0aG9kcyBoZXJlLCBzbyB5b3Ug
Y2FuIHNheSB2YWx1ZS0+aXNCbGFoKCkKICAgICAvLyBpbnN0ZWFkIG9mIHZhbHVlLT5raW5kKCku
aXNCbGFoKCkuCiAgICAgYm9vbCBpc0NoaWxsKCkgY29uc3QgeyByZXR1cm4ga2luZCgpLmlzQ2hp
bGwoKTsgfQpAQCAtMTA3LDYgKzExMSw4IEBAIHB1YmxpYzoKICAgICAvLyB2YWx1ZXMgd2l0aCBJ
ZGVudGl0aWVzIG9uIGJvdHRvbSBjb25zdGFudHMuIEZvciB0aGlzIHJlYXNvbiwgdGhpcyB0YWtl
cyBhIGNhbGxiYWNrIHRoYXQgaXMKICAgICAvLyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYm90
dG9tcy4gVGhlcmUncyBhIHV0aWxpdHkgZm9yIHRoaXMsIHNlZSBCM0JvdHRvbVByb3ZpZGVyLmgu
IFlvdQogICAgIC8vIGNhbiBhbHNvIGFjY2VzcyB0aGF0IHV0aWxpdHkgdXNpbmcgcmVwbGFjZVdp
dGhCb3R0b20oSW5zZXJ0aW9uU2V0Jiwgc2l6ZV90KS4KKyAgICAvLworICAgIC8vIFlvdSdyZSBn
dWFyYW50ZWVkIHRoYXQgYm90dG9tIGlzIHplcm8uCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQm90
dG9tUHJvdmlkZXI+CiAgICAgdm9pZCByZXBsYWNlV2l0aEJvdHRvbShjb25zdCBCb3R0b21Qcm92
aWRlciYpOwogICAgIApAQCAtMzIxLDYgKzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
SVRvRjoKICAgICAgICAgY2FzZSBCaXR3aXNlQ2FzdDoKICAgICAgICAgY2FzZSBCcmFuY2g6Cisg
ICAgICAgIGNhc2UgRGVwZW5kOgogICAgICAgICAgICAgaWYgKFVOTElLRUxZKG51bUFyZ3MgIT0g
MSkpCiAgICAgICAgICAgICAgICAgYmFkS2luZChraW5kLCBudW1BcmdzKTsKICAgICAgICAgICAg
IGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmNwcAkocmV2aXNpb24g
MjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCwzOCBAQAogCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CiAKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitUeXBlIGJlc3RUeXBlKEJhbmsg
YmFuaywgV2lkdGggd2lkdGgpCit7CisgICAgc3dpdGNoICh3aWR0aCkgeworICAgIGNhc2UgV2lk
dGg4OgorICAgIGNhc2UgV2lkdGgxNjoKKyAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgIHN3aXRj
aCAoYmFuaykgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIEludDMyOwor
ICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIEZsb2F0OworICAgICAgICB9Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWb2lk
OworICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgIGNh
c2UgR1A6CisgICAgICAgICAgICByZXR1cm4gSW50NjQ7CisgICAgICAgIGNhc2UgRlA6CisgICAg
ICAgICAgICByZXR1cm4gRG91YmxlOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWb2lkOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBWb2lkOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKwogbmFtZXNwYWNlIFdURiB7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBKU0M6OkIzOjpXaWR0aCB3aWR0aCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzV2lkdGguaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzV2lkdGguaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsMTggQEAgaW5saW5l
IFdpZHRoIHdpZHRoRm9yVHlwZShUeXBlIHR5cGUpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKK2lubGluZSBXaWR0aCBjYW5vbmljYWxXaWR0aChXaWR0aCB3aWR0aCkKK3sKKyAgICBy
ZXR1cm4gc3RkOjptYXgoV2lkdGgzMiwgd2lkdGgpOworfQorCitpbmxpbmUgYm9vbCBpc0Nhbm9u
aWNhbFdpZHRoKFdpZHRoIHdpZHRoKQoreworICAgIHJldHVybiB3aWR0aCA+PSBXaWR0aDMyOwor
fQorCitUeXBlIGJlc3RUeXBlKEJhbmsgYmFuaywgV2lkdGggd2lkdGgpOworCiBpbmxpbmUgV2lk
dGggY29uc2VydmF0aXZlV2lkdGgoQmFuayBiYW5rKQogewogICAgIHJldHVybiBiYW5rID09IEdQ
ID8gcG9pbnRlcldpZHRoKCkgOiBXaWR0aDY0OwpAQCAtOTMsNiArMTA1LDIwIEBAIGlubGluZSBX
aWR0aCB3aWR0aEZvckJ5dGVzKHVuc2lnbmVkIGJ5dGUKICAgICB9CiB9CiAKK2lubGluZSB1aW50
NjRfdCBtYXNrKFdpZHRoIHdpZHRoKQoreworICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICBjYXNl
IFdpZHRoODoKKyAgICAgICAgcmV0dXJuIDB4MDAwMDAwMDAwMDAwMDBmZmxsdTsKKyAgICBjYXNl
IFdpZHRoMTY6CisgICAgICAgIHJldHVybiAweDAwMDAwMDAwMDAwMGZmZmZsbHU7CisgICAgY2Fz
ZSBXaWR0aDMyOgorICAgICAgICByZXR1cm4gMHgwMDAwMDAwMGZmZmZmZmZmbGx1OworICAgIGNh
c2UgV2lkdGg2NDoKKyAgICAgICAgcmV0dXJuIDB4ZmZmZmZmZmZmZmZmZmZmZmxsdTsKKyAgICB9
Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisj
aW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMu
aCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgi
CkBAIC00NCw2ICs0NSw3IEBACiAjaW5jbHVkZSAiQjNNYXRoRXh0cmFzLmgiCiAjaW5jbHVkZSAi
QjNNZW1vcnlWYWx1ZS5oIgogI2luY2x1ZGUgIkIzTW92ZUNvbnN0YW50cy5oIgorI2luY2x1ZGUg
IkIzTmF0aXZlVHJhaXRzLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlICJC
M1JlZHVjZVN0cmVuZ3RoLmgiCiAjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCkBAIC0xMzc5
MSw3ICsxMzc5Myw3IEBAIHZvaWQgdGVzdFRyYXBwaW5nU3RvcmVFbGltaW5hdGlvbigpCiAgICAg
Y29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpOwogICAgIHVuc2lnbmVkIHN0b3JlQ291bnQgPSAwOwog
ICAgIGZvciAoVmFsdWUqIHZhbHVlIDogcHJvYy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoTWVt
b3J5VmFsdWU6OmlzU3RvcmUodmFsdWUtPm9wY29kZSgpKSkKKyAgICAgICAgaWYgKGlzU3RvcmUo
dmFsdWUtPm9wY29kZSgpKSkKICAgICAgICAgICAgIHN0b3JlQ291bnQrKzsKICAgICB9CiAgICAg
Q0hFQ0tfRVEoc3RvcmVDb3VudCwgMnUpOwpAQCAtMTQyNzcsNiArMTQyNzksMTAzIEBAIHZvaWQg
dGVzdE9wdGltaXplTWF0ZXJpYWxpemF0aW9uKCkKICAgICBDSEVDSyhmb3VuZCk7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRlc3RBdG9taWNXZWFrQ0FTKCkKK3sKKyAgICBUeXBl
IHR5cGUgPSBOYXRpdmVUcmFpdHM8VD46OnR5cGU7CisgICAgV2lkdGggd2lkdGggPSBOYXRpdmVU
cmFpdHM8VD46OndpZHRoOworICAgIAorICAgIGF1dG8gY2hlY2tEaXNhc3NlbWJseSA9IFsmXSAo
Q29tcGlsYXRpb24mIGNvbXBpbGF0aW9uKSB7CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAg
ICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbihjb21waWxhdGlvbiwgImxvY2siKTsKKyAgICAg
ICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKGNvbXBpbGF0aW9uLCAiY21weGNoZyIpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAKKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAg
ICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Js
b2NrKiByZWxvb3AgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGRvbmUg
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIAorICAgICAgICBWYWx1ZSogcHRyID0gcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOworICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEp1bXAsIE9y
aWdpbigpKTsKKyAgICAgICAgcm9vdC0+c2V0U3VjY2Vzc29ycyhyZWxvb3ApOworICAgICAgICAK
KyAgICAgICAgcmVsb29wLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQnJh
bmNoLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJlbG9vcC0+YXBwZW5kTmV3PEF0b21pY1ZhbHVl
PigKKyAgICAgICAgICAgICAgICBwcm9jLCBBdG9taWNXZWFrQ0FTLCBPcmlnaW4oKSwgd2lkdGgs
CisgICAgICAgICAgICAgICAgcmVsb29wLT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4o
KSwgdHlwZSwgNDIpLAorICAgICAgICAgICAgICAgIHJlbG9vcC0+YXBwZW5kSW50Q29uc3RhbnQo
cHJvYywgT3JpZ2luKCksIHR5cGUsIDB4YmVlZiksCisgICAgICAgICAgICAgICAgcHRyKSk7Cisg
ICAgICAgIHJlbG9vcC0+c2V0U3VjY2Vzc29ycyhkb25lLCByZWxvb3ApOworICAgICAgICAKKyAg
ICAgICAgZG9uZS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKKyAg
ICAgICAgCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGNoZWNr
RGlzYXNzZW1ibHkoKmNvZGUpOworICAgICAgICBUIHZhbHVlID0gNDI7CisgICAgICAgIGludm9r
ZTx2b2lkPigqY29kZSwgJnZhbHVlKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWUsIHN0YXRpY19j
YXN0PFQ+KDB4YmVlZikpOworICAgIH0KKyAgICAKKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBw
cm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAg
ICBCYXNpY0Jsb2NrKiBzdWNjID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2Nr
KiBmYWlsID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgVmFsdWUqIHB0ciA9
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXRvbWljVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEF0b21pY1dlYWtDQVMsIE9y
aWdpbigpLCB3aWR0aCwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChw
cm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZElu
dENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCAweGJlZWYpLAorICAgICAgICAgICAgICAg
IHB0cikpOworICAgICAgICByb290LT5zZXRTdWNjZXNzb3JzKHN1Y2MsIGZhaWwpOworICAgICAg
ICAKKyAgICAgICAgc3VjYy0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIHN0b3JlT3Bjb2RlKEdQLCB3aWR0aCksIE9yaWdpbigpLAorICAgICAgICAgICAgc3VjYy0+
YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDEwMCksCisgICAgICAgICAg
ICBwdHIpOworICAgICAgICBzdWNjLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCkpOworICAgICAgICAKKyAgICAgICAgZmFpbC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgICAgIGNoZWNrRGlzYXNzZW1ibHkoKmNvZGUpOworICAgICAgICBUIHZhbHVl
ID0gNDI7CisgICAgICAgIHdoaWxlICh2YWx1ZSA9PSA0MikKKyAgICAgICAgICAgIGludm9rZTx2
b2lkPigqY29kZSwgJnZhbHVlKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWUsIHN0YXRpY19jYXN0
PFQ+KDEwMCkpOworICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PFQ+KDMwMCk7CisgICAgICAg
IGludm9rZTx2b2lkPigqY29kZSwgJnZhbHVlKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWUsIHN0
YXRpY19jYXN0PFQ+KDMwMCkpOworICAgIH0KKyAgICAKKyAgICB7CisgICAgICAgIFByb2NlZHVy
ZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBdG9taWNWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgcHJvYywgQXRvbWljV2Vha0NBUywgT3JpZ2luKCksIHdpZHRoLAorICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCA0
MiksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2lu
KCksIHR5cGUsIDQyKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsKKyAgICAg
ICAgCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGNoZWNrRGlz
YXNzZW1ibHkoKmNvZGUpOworICAgICAgICBUIHZhbHVlID0gNDI7CisgICAgICAgIHdoaWxlICgh
aW52b2tlPGJvb2w+KCpjb2RlLCAmdmFsdWUpKSB7IH0KKyAgICAgICAgCisgICAgICAgIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8VD4oMzAwKTsKKyAgICAgICAgQ0hFQ0soIWludm9rZTxib29sPigqY29k
ZSwgJnZhbHVlKSk7CisgICAgfQorfQorCiB2b2lkIHRlc3RXYXNtQm91bmRzQ2hlY2sodW5zaWdu
ZWQgb2Zmc2V0KQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMTQzNzAsNiArMTQ0NjksMTMg
QEAgZG91YmxlIG5lZ2F0aXZlWmVybygpCiAgICAgcmV0dXJuIC16ZXJvKCk7CiB9CiAKKyNkZWZp
bmUgUlVOX05PVyh0ZXN0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYg
KCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YUxvZygjdGVzdCAi
Li4uXG4iKTsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGVzdDsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YUxvZygjdGVzdCAiOiBPSyFcbiIpOyAg
ICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKICNkZWZpbmUgUlVOKHRlc3QpIGRv
IHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rl
c3QpKSAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKQEAgLTE0NDIxLDkgKzE0NTI3LDcgQEAgdm9pZCBydW4oY29uc3Qg
Y2hhciogZmlsdGVyKQogICAgICAgICByZXR1cm4gIWZpbHRlciB8fCAhIXN0cmNhc2VzdHIodGVz
dE5hbWUsIGZpbHRlcik7CiAgICAgfTsKIAotICAgIC8vIFdlIHJ1biB0aGlzIHRlc3QgZmlyc3Qg
YmVjYXVzZSBpdCBmaWRkbGVzIHdpdGggc29tZQotICAgIC8vIEpTQyBvcHRpb25zLgotICAgIHRl
c3RUZXJtaW5hbFBhdGNocG9pbnRUaGF0TmVlZHNUb0JlU3BpbGxlZDIoKTsKKyAgICBSVU5fTk9X
KHRlc3RUZXJtaW5hbFBhdGNocG9pbnRUaGF0TmVlZHNUb0JlU3BpbGxlZDIoKSk7CiAKICAgICBS
VU4odGVzdDQyKCkpOwogICAgIFJVTih0ZXN0TG9hZDQyKCkpOwpAQCAtMTU4MzEsNiArMTU5MzUs
MTEgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0TG9hZEJhc2VJ
bmRleFNoaWZ0MigpKTsKICAgICBSVU4odGVzdExvYWRCYXNlSW5kZXhTaGlmdDMyKCkpOwogICAg
IFJVTih0ZXN0T3B0aW1pemVNYXRlcmlhbGl6YXRpb24oKSk7CisgICAgCisgICAgUlVOKHRlc3RB
dG9taWNXZWFrQ0FTPGludDhfdD4oKSk7CisgICAgUlVOKHRlc3RBdG9taWNXZWFrQ0FTPGludDE2
X3Q+KCkpOworICAgIFJVTih0ZXN0QXRvbWljV2Vha0NBUzxpbnQzMl90PigpKTsKKyAgICBSVU4o
dGVzdEF0b21pY1dlYWtDQVM8aW50NjRfdD4oKSk7CiAKICAgICBSVU4odGVzdFdhc21Cb3VuZHND
aGVjaygwKSk7CiAgICAgUlVOKHRlc3RXYXNtQm91bmRzQ2hlY2soMTAwKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMiw2ICsxMDIsNyBAQCB1bnNpZ25lZCBBcmc6OmpzSGFzaCgpIGNvbnN0CiAgICAgY2FzZSBS
ZWxDb25kOgogICAgIGNhc2UgUmVzQ29uZDoKICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgY2Fz
ZSBTdGF0dXNDb25kOgogICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgIHJlc3VsdCArPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9vZmZzZXQpOwogICAgICAgICBicmVhazsKQEAgLTE4Miw2ICsx
ODMsOSBAQCB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIGNhc2Ug
RG91YmxlQ29uZDoKICAgICAgICAgb3V0LnByaW50KGFzRG91YmxlQ29uZGl0aW9uKCkpOwogICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTdGF0dXNDb25kOgorICAgICAgICBvdXQucHJpbnQoYXNT
dGF0dXNDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNwZWNpYWw6CiAg
ICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFsKCkpKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMjQxLDYgKzI0NSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBBcmcKICAgICBjYXNlIEFyZzo6RG91YmxlQ29uZDoKICAgICAgICAgb3V0LnByaW50KCJEb3Vi
bGVDb25kIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6U3RhdHVzQ29uZDoKKyAg
ICAgICAgb3V0LnByaW50KCJTdGF0dXNDb25kIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNl
IEFyZzo6U3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsIik7CiAgICAgICAgIHJl
dHVybjsKQEAgLTI4NSw2ICsyOTIsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgQXJnCiAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgogICAgICAgICBvdXQucHJpbnQoIkVh
cmx5RGVmIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6RWFybHlaRGVmOgorICAg
ICAgICBvdXQucHJpbnQoIkVhcmx5WkRlZiIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBB
cmc6OlNjcmF0Y2g6CiAgICAgICAgIG91dC5wcmludCgiU2NyYXRjaCIpOwogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDYgKzgyLDcgQEAgcHVibGljOgogICAgICAgICBSZWxDb25kLAogICAgICAg
ICBSZXNDb25kLAogICAgICAgICBEb3VibGVDb25kLAorICAgICAgICBTdGF0dXNDb25kLAogICAg
ICAgICBTcGVjaWFsLAogICAgICAgICBXaWR0aEFyZwogICAgIH07CkBAIC0xNTEsNiArMTUyLDgg
QEAgcHVibGljOgogICAgICAgICAvLyBhcyBVc2UgaGFzIHVuZGVmaW5lZCBiZWhhdmlvcjogdGhl
IHVzZSBtYXkgaGFwcGVuIGJlZm9yZSB0aGUgZGVmLCBvciBpdCBtYXkgaGFwcGVuIGFmdGVyCiAg
ICAgICAgIC8vIGl0LgogICAgICAgICBFYXJseURlZiwKKyAgICAgICAgICAgIAorICAgICAgICBF
YXJseVpEZWYsCiAKICAgICAgICAgLy8gU29tZSBpbnN0cnVjdGlvbnMgbmVlZCBhIHNjcmF0Y2gg
cmVnaXN0ZXIuIFdlIG1vZGVsIHRoaXMgYnkgc2F5aW5nIHRoYXQgdGhlIHRlbXBvcmFyeSBpcwog
ICAgICAgICAvLyBkZWZpbmVkIGVhcmx5IGFuZCB1c2VkIGxhdGUuIFRoaXMgcm9sZSBpbXBsaWVz
IHRoYXQuCkBAIC0xODYsNiArMTg5LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFpEZWY6CiAg
ICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2Fz
ZSBFYXJseVpEZWY6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMDYsNiArMjEwLDcgQEAgcHVibGljOgogICAg
ICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAgY2FzZSBF
YXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMjgsNiAr
MjMzLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgU2Ny
YXRjaDoKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAg
ICAgICAgICAgICByZXR1cm4gcm9sZTsKICAgICAgICAgY2FzZSBVc2U6CiAgICAgICAgICAgICBy
ZXR1cm4gQ29sZFVzZTsKQEAgLTI1Myw2ICsyNTksNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
TGF0ZUNvbGRVc2U6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAgY2FzZSBFYXJseURl
ZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNzQsNiArMjgxLDcg
QEAgcHVibGljOgogICAgICAgICBjYXNlIFpEZWY6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAg
ICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0yOTQsNiArMzAyLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFpEZWY6CiAgICAgICAg
IGNhc2UgVXNlWkRlZjoKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJs
eVpEZWY6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CkBAIC0zMTUsNiArMzI0LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIExhdGVD
b2xkVXNlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEVhcmx5RGVm
OgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTMzMCw2ICszNDAsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBMYXRlVXNlOgogICAgICAgICBj
YXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgY2FzZSBTY3Jh
dGNoOgogICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMzU4LDYgKzM2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAgICAgIGNhc2Ug
RWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01MzMsNiArNTQ1LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBzdGF0aWMgQXJnIHN0YXR1c0NvbmQoTWFj
cm9Bc3NlbWJsZXI6OlN0YXR1c0NvbmRpdGlvbiBjb25kaXRpb24pCisgICAgeworICAgICAgICBB
cmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3RhdHVzQ29uZDsKKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKwogICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNpYWwqIHNwZWNpYWwpCiAgICAg
ewogICAgICAgICBBcmcgcmVzdWx0OwpAQCAtNjU4LDEyICs2NzgsMTggQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4ga2luZCgpID09IERvdWJsZUNvbmQ7CiAgICAgfQogCisgICAgYm9vbCBpc1N0
YXR1c0NvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTdGF0dXND
b25kOworICAgIH0KKwogICAgIGJvb2wgaXNDb25kaXRpb24oKSBjb25zdAogICAgIHsKICAgICAg
ICAgc3dpdGNoIChraW5kKCkpIHsKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNl
IFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKKyAgICAgICAgY2FzZSBTdGF0dXND
b25kOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC04NTEsNiArODc3LDcgQEAgcHVibGljOgogICAgICAgICBj
YXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVD
b25kOgorICAgICAgICBjYXNlIFN0YXR1c0NvbmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKICAg
ICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtODcyLDYg
Kzg5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIFJl
c0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKKyAgICAgICAgY2FzZSBTdGF0dXNDb25k
OgogICAgICAgICBjYXNlIFNwZWNpYWw6CiAgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAg
IGNhc2UgSW52YWxpZDoKQEAgLTEwNTgsNiArMTA4Niw3IEBAIHB1YmxpYzoKICAgICAgICAgY2Fz
ZSBSZWxDb25kOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29u
ZDoKKyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CiAgICAg
ICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNzcsNiAr
MTIwNiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlQ29uZGl0aW9uPihtX29mZnNldCk7CiAgICAgfQogICAgIAorICAgIE1hY3Jv
QXNzZW1ibGVyOjpTdGF0dXNDb25kaXRpb24gYXNTdGF0dXNDb25kaXRpb24oKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzU3RhdHVzQ29uZCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PE1hY3JvQXNzZW1ibGVyOjpTdGF0dXNDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9
CisgICAgCiAgICAgLy8gVGVsbHMgeW91IGlmIHRoZSBBcmcgaXMgaW52ZXJ0aWJsZS4gT25seSBj
b25kaXRpb24gYXJndW1lbnRzIGFyZSBpbnZlcnRpYmxlLCBhbmQgZXZlbiBmb3IgdGhvc2UsIHRo
ZXJlCiAgICAgLy8gYXJlIGEgZmV3IGV4Y2VwdGlvbnMgLSBub3RhYmx5IE92ZXJmbG93IGFuZCBT
aWduZWQuCiAgICAgYm9vbCBpc0ludmVydGlibGUoKSBjb25zdApAQCAtMTE4NCw2ICsxMjE5LDcg
QEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewogICAgICAgICBjYXNlIFJlbENv
bmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKKyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6aXNJbnZlcnRpYmxlKGFzUmVzdWx0Q29uZGl0aW9u
KCkpOwpAQCAtMTIwNCw2ICsxMjQwLDggQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIHJl
c0NvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc1Jlc3VsdENvbmRpdGlvbigpKSk7CiAgICAg
ICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgICAgIHJldHVybiBkb3VibGVDb25kKE1hY3Jv
QXNzZW1ibGVyOjppbnZlcnQoYXNEb3VibGVDb25kaXRpb24oKSkpOworICAgICAgICBjYXNlIFN0
YXR1c0NvbmQ6CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6
aW52ZXJ0KGFzU3RhdHVzQ29uZGl0aW9uKCkpKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gQXJn
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9j
ay5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNiArMzUsMTkgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogCiBjb25zdCBjaGFyKiBjb25zdCBCYXNp
Y0Jsb2NrOjpkdW1wUHJlZml4ID0gIiMiOwogCit2b2lkIEJhc2ljQmxvY2s6OnNldFN1Y2Nlc3Nv
cnMoRnJlcXVlbnRlZEJsb2NrIHRhcmdldCkKK3sKKyAgICBtX3N1Y2Nlc3NvcnMucmVzaXplKDEp
OworICAgIG1fc3VjY2Vzc29yc1swXSA9IHRhcmdldDsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpz
ZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayB0YWtlbiwgRnJlcXVlbnRlZEJsb2NrIG5vdFRh
a2VuKQoreworICAgIG1fc3VjY2Vzc29ycy5yZXNpemUoMik7CisgICAgbV9zdWNjZXNzb3JzWzBd
ID0gdGFrZW47CisgICAgbV9zdWNjZXNzb3JzWzFdID0gbm90VGFrZW47Cit9CisKIGJvb2wgQmFz
aWNCbG9jazo6YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgcmV0dXJu
IEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMyw3ICszMywxMSBAQAogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZT4gY2xhc3MgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0OworCituYW1lc3BhY2Ug
QWlyIHsKIAogY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBDb2RlOwpAQCAtOTksNiAr
MTAzLDkgQEAgcHVibGljOgogICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBj
b25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KICAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNz
b3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CiAKKyAgICB2b2lkIHNldFN1Y2Nlc3NvcnMo
RnJlcXVlbnRlZEJsb2NrKTsKKyAgICB2b2lkIHNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2Nr
LCBGcmVxdWVudGVkQmxvY2spOworCiAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sodW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsgfQog
ICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4g
c3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CiAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNp
Y0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKQpAQCAtMTMzLDYgKzE0MCw3
IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIGZy
aWVuZCBjbGFzcyBDb2RlOwogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWU+IGZyaWVuZCBjbGFzcyBCMzo6R2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0
OwogICAgIAogICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9u
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJs
b2NrSW5zZXJ0aW9uU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJCbG9ja0luc2VydGlvblNldC5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNs
dWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSA8d3RmL0J1YmJsZVNvcnQuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitCbG9ja0luc2VydGlvblNl
dDo6QmxvY2tJbnNlcnRpb25TZXQoQ29kZSAmY29kZSkKKyAgICA6IEdlbmVyaWNCbG9ja0luc2Vy
dGlvblNldChjb2RlLm1fYmxvY2tzKQoreworfQorCitCbG9ja0luc2VydGlvblNldDo6fkJsb2Nr
SW5zZXJ0aW9uU2V0KCkKK3sKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckNv
ZGUuaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Ns
YXNzIEluc2VydGlvblNldDsKKwordHlwZWRlZiBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFz
aWNCbG9jaz46OkJsb2NrSW5zZXJ0aW9uIEJsb2NrSW5zZXJ0aW9uOworCitjbGFzcyBCbG9ja0lu
c2VydGlvblNldCA6IHB1YmxpYyBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz4g
eworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0aW9uU2V0KENvZGUmKTsKKyAgICB+QmxvY2tJbnNl
cnRpb25TZXQoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgaW1w
bGVtZW50IEIzOjpCbG9ja0luc2VydGlvblNldCdzIHNwbGl0Rm9yd2FyZCgpLgorfTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRHVtcEFzSlMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRHVtcEFzSlMuY3BwCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckR1bXBB
c0pTLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDI0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkFpckR1bXBBc0pTLmgiCi0KLSNpZiBFTkFCTEUoQjNfSklUKQotCi0jaW5jbHVk
ZSAiQWlyQ29kZS5oIgotI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKLQotbmFtZXNwYWNlIHsKLQotQ1N0
cmluZyB2YXJOYW1lRm9yQmxvY2tBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVy
biB0b0NTdHJpbmcoImJiIiwgaW5kZXgpOwotfQotCi1DU3RyaW5nIHZhck5hbWUoQmFzaWNCbG9j
ayogYmxvY2spCi17Ci0gICAgcmV0dXJuIHZhck5hbWVGb3JCbG9ja0F0SW5kZXgoYmxvY2stPmlu
ZGV4KCkpOwotfQotCi1DU3RyaW5nIHZhck5hbWVGb3JTdGFja1Nsb3RBdEluZGV4KHVuc2lnbmVk
IGluZGV4KQotewotICAgIHJldHVybiB0b0NTdHJpbmcoInNsb3QiLCBpbmRleCk7Ci19Ci0KLUNT
dHJpbmcgdmFyTmFtZShTdGFja1Nsb3QqIHNsb3QpCi17Ci0gICAgcmV0dXJuIHZhck5hbWVGb3JT
dGFja1Nsb3RBdEluZGV4KHNsb3QtPmluZGV4KCkpOwotfQotCi1DU3RyaW5nIHZhck5hbWUoUmVn
IHJlZykKLXsKLSAgICByZXR1cm4gdG9DU3RyaW5nKCJSZWcuIiwgcmVnLmRlYnVnTmFtZSgpKTsK
LX0KLQotQ1N0cmluZyB2YXJOYW1lRm9yVG1wV2l0aEJhbmtBbmRJbmRleChCYW5rIGJhbmssIHVu
c2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiB0b0NTdHJpbmcoYmFuayA9PSBGUCA/ICJmIiA6
ICIiLCAidG1wIiwgaW5kZXgpOwotfQotCi1DU3RyaW5nIHZhck5hbWUoVG1wIHRtcCkKLXsKLSAg
ICBpZiAodG1wLmlzUmVnKCkpCi0gICAgICAgIHJldHVybiB2YXJOYW1lKHRtcC5yZWcoKSk7Ci0g
ICAgcmV0dXJuIHZhck5hbWVGb3JUbXBXaXRoQmFua0FuZEluZGV4KEFyZyh0bXApLmJhbmsoKSwg
dG1wLnRtcEluZGV4KCkpOwotfQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBk
dW1wQXNKUyhDb2RlJiBjb2RlLCBQcmludFN0cmVhbSYgb3V0KQotewotICAgIG91dC5wcmludGxu
KCJsZXQgY29kZSA9IG5ldyBDb2RlKCk7Iik7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvZGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIG91dC5wcmludGxuKCJsZXQgIiwgdmFy
TmFtZUZvckJsb2NrQXRJbmRleChpKSwgIiA9IGNvZGUuYWRkQmxvY2soKTsiKTsKLSAgICAKLSAg
ICBvdXQucHJpbnRsbigibGV0IGhhc2g7Iik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RhY2tTbG90KiBz
bG90ID0gY29kZS5zdGFja1Nsb3RzKClbaV07Ci0gICAgICAgIGlmIChzbG90KSB7Ci0gICAgICAg
ICAgICBvdXQucHJpbnRsbigibGV0ICIsIHZhck5hbWUoc2xvdCksICIgPSBjb2RlLmFkZFN0YWNr
U2xvdCgiLCBzbG90LT5ieXRlU2l6ZSgpLCAiLCAiLCBzbG90LT5raW5kKCksICIpOyIpOwotICAg
ICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKQotICAgICAgICAgICAgICAgIG91dC5w
cmludGxuKHZhck5hbWUoc2xvdCksICIuc2V0T2Zmc2V0RnJvbUZQKCIsIHNsb3QtPm9mZnNldEZy
b21GUCgpLCAiKTsiKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCJoYXNoID0gIiwgdmFyTmFt
ZShzbG90KSwgIi5oYXNoKCk7Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiaWYgKGhhc2gg
IT0gIiwgc2xvdC0+anNIYXNoKCksICIpIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiICAg
IHRocm93IG5ldyBFcnJvcihcIkJhZCBoYXNoOiBcIiArIGhhc2gpOyIpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIG91dC5wcmludGxuKCJjb2RlLmFkZFN0YWNrU2xvdCgxLCBTcGlsbCk7
Iik7Ci0gICAgfQotICAgIAotICAgIGZvckVhY2hCYW5rKAotICAgICAgICBbJl0gKEJhbmsgYmFu
aykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZS5udW1UbXBzKGJhbmspOyBp
LS07KSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAg
ICJsZXQgIiwgdmFyTmFtZUZvclRtcFdpdGhCYW5rQW5kSW5kZXgoYmFuaywgaSksICIgPSBjb2Rl
Lm5ld1RtcCgiLCBiYW5rLCAiKTsiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAg
Ci0gICAgb3V0LnByaW50bG4oImxldCBpbnN0OyIpOwotICAgIG91dC5wcmludGxuKCJsZXQgYXJn
OyIpOwotICAgIAotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAg
IGZvciAoRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsK
LSAgICAgICAgICAgIG91dC5wcmludGxuKAotICAgICAgICAgICAgICAgIHZhck5hbWUoYmxvY2sp
LCAiLnN1Y2Nlc3NvcnMucHVzaChuZXcgRnJlcXVlbnRlZEJsb2NrKCIsCi0gICAgICAgICAgICAg
ICAgdmFyTmFtZShzdWNjZXNzb3IuYmxvY2soKSksICIsICIsIHN1Y2Nlc3Nvci5mcmVxdWVuY3ko
KSwgIikpOyIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRlY2Vzc29ycygpKQotICAgICAgICAgICAgb3V0LnBy
aW50bG4odmFyTmFtZShibG9jayksICIucHJlZGVjZXNzb3JzLnB1c2goIiwgdmFyTmFtZShwcmVk
ZWNlc3NvciksICIpOyIpOwotICAgICAgICAKLSAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJs
b2NrKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZG8gc29tZXRoaW5nIGZv
ciBmbGFncy4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI3NTEKLSAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0ID0gbmV3IEluc3Qo
IiwgaW5zdC5raW5kLm9wY29kZSwgIik7Iik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlu
c3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUs
IEJhbmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkg
ewotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6SW52YWxpZDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBjYXNlIEFyZzo6VG1wOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4o
ImFyZyA9IEFyZy5jcmVhdGVUbXAoIiwgdmFyTmFtZShhcmcudG1wKCkpLCAiKTsiKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpJbW06Ci0gICAgICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0ZUltbSgiLCBhcmcudmFsdWUoKSwgIik7Iik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6QmlnSW1tOgotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZyA9IEFy
Zy5jcmVhdGVCaWdJbW0oIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQzMl90PihhcmcudmFsdWUoKSksICIsICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oYXJnLnZhbHVlKCkgPj4gMzIpLCAiKTsiKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpCaXRJbW06Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBvdXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0ZUJpdEltbSgiLCBhcmcudmFsdWUoKSwgIik7
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Qml0SW1tNjQ6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBvdXQucHJpbnRsbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
YXJnID0gQXJnLmNyZWF0ZUJpdEltbTY0KCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MzJfdD4oYXJnLnZhbHVlKCkpLCAiLCAiLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KGFyZy52YWx1ZSgpID4+IDMyKSwgIik7
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6QWRkcjoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG91dC5wcmludGxuKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmcg
PSBBcmcuY3JlYXRlQWRkcigiLCB2YXJOYW1lKGFyZy5iYXNlKCkpLCAiLCAiLCBhcmcub2Zmc2V0
KCksICIpOyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgotICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImFyZyA9IEFyZy5jcmVhdGVTdGFjaygiLCB2YXJOYW1lKGFyZy5zdGFja1Nsb3QoKSksICIs
ICIsIGFyZy5vZmZzZXQoKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
Q2FsbEFyZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcu
Y3JlYXRlQ2FsbEFyZygiLCBhcmcub2Zmc2V0KCksICIpOyIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBBcmc6OkluZGV4OgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4o
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZyA9IEFyZy5jcmVhdGVJbmRleCgiLCB2
YXJOYW1lKGFyZy5iYXNlKCkpLCAiLCAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ck5hbWUoYXJnLmluZGV4KCkpLCAiLCAiLCBhcmcuc2NhbGUoKSwgIiwgIiwgYXJnLm9mZnNldCgp
LCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpSZWxDb25kOgotICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImFyZyA9IEFyZy5jcmVhdGVSZWxDb25kKCIs
IGFyZy5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6UmVzQ29uZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxu
KCJhcmcgPSBBcmcuY3JlYXRlUmVzQ29uZCgiLCBhcmcuYXNSZXN1bHRDb25kaXRpb24oKSwgIik7
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RG91YmxlQ29uZDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRlRG91YmxlQ29uZCgi
LCBhcmcuYXNEb3VibGVDb25kaXRpb24oKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6U3BlY2lhbDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJh
cmcgPSBBcmcuY3JlYXRlU3BlY2lhbCgpOyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OldpZHRoQXJnOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImFyZyA9
IEFyZy5jcmVhdGVXaWR0aEFyZygiLCBhcmcud2lkdGgoKSwgIik7Iik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImluc3QuYXJncy5wdXNoKGFy
Zyk7Iik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGluc3Qu
aGFzTm9uQXJnRWZmZWN0cygpKQotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiaW5z
dC5wYXRjaEhhc05vbkFyZ0VmZmVjdHMgPSB0cnVlOyIpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzID0g
bmV3IFNldCgpOyIpOwotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmV4dHJhQ2xv
YmJlcmVkUmVncyA9IG5ldyBTZXQoKTsiKTsKLSAgICAgICAgICAgICAgICBpbnN0LmV4dHJhRWFy
bHlDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKLSAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcg
cmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdC5leHRyYUVh
cmx5Q2xvYmJlcmVkUmVncy5hZGQoIiwgdmFyTmFtZShyZWcpLCAiKTsiKTsKLSAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKS5m
b3JFYWNoKAotICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncy5hZGQoIiwg
dmFyTmFtZShyZWcpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImluc3QucGF0Y2hBcmdEYXRhID0g
W107Iik7Ci0gICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAgICAgICAgICAgICAg
ICAgICBbJl0gKEFyZyYsIEFyZzo6Um9sZSByb2xlLCBCYW5rIGJhbmssIFdpZHRoIHdpZHRoKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW5zdC5wYXRjaEFyZ0RhdGEucHVzaCh7cm9sZTogQXJnLiIsIHJvbGUsICIs
IHR5cGU6ICIsIGJhbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgd2lkdGg6ICIs
IHdpZHRoLCAifSk7Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5zdC5raW5kLm9wY29kZSA9PSBDQ2FsbCB8
fCBpbnN0LmtpbmQub3Bjb2RlID09IENvbGRDQ2FsbCkgewotICAgICAgICAgICAgICAgIG91dC5w
cmludGxuKCJpbnN0LmNDYWxsVHlwZSA9ICIsIGluc3Qub3JpZ2luLT50eXBlKCkpOwotICAgICAg
ICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmNDYWxsQXJnVHlwZXMgPSBbXTsiKTsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgaW5zdC5vcmlnaW4tPm51bUNoaWxk
cmVuKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImluc3QuY0NhbGxB
cmdUeXBlcy5wdXNoKCIsIGluc3Qub3JpZ2luLT5jaGlsZChpKS0+dHlwZSgpLCAiKTsiKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgb3V0LnByaW50bG4oImhhc2gg
PSBpbnN0Lmhhc2goKTsiKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCJpZiAoaGFzaCAhPSAi
LCBpbnN0LmpzSGFzaCgpLCAiKSIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIiAgICB0aHJv
dyBuZXcgRXJyb3IoXCJCYWQgaGFzaDogXCIgKyBoYXNoKTsiKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgb3V0LnByaW50bG4odmFyTmFtZShibG9jayksICIuYXBwZW5kKGluc3QpOyIpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi19IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCi0K
LSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckR1bXBBc0pTLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJEdW1wQXNKUy5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckR1bXBBc0pTLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7Ci0K
LWNsYXNzIENvZGU7Ci0KLS8vIFRoaXMgaXMgdXNlZCBmb3IgYmVuY2htYXJraW5nLiBWYXJpb3Vz
IG9wZXJhdGlvbnMgb24gQWlyIGFyZSBpbnRlcmVzdGluZyBmcm9tIGEgYmVuY2htYXJraW5nCi0v
LyBzdGFuZHBvaW50LiBXZSBjYW4gd3JpdGUgc29tZSBBaXIgcGhhc2VzIGluIEpTIGFuZCB0aGVu
IHVzZSB0aGF0IHRvIGJlbmNobWFyayBKUy4gVGhlIGJlbmNobWFyawotLy8gaXMgY2FsbGVkIEpT
QWlyLCBhbmQgaXQncyBpbiBQZXJmb3JtYW5jZVRlc3RzL0pTQWlyLgotdm9pZCBkdW1wQXNKUyhD
b2RlJiwgUHJpbnRTdHJlYW0mKTsKLQotfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgot
Ci0jZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNiBAQAogI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5n
LmgiCiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIK
LSNpbmNsdWRlICJBaXJEdW1wQXNKUy5oIgogI2luY2x1ZGUgIkFpckVsaW1pbmF0ZURlYWRDb2Rl
LmgiCiAjaW5jbHVkZSAiQWlyRml4T2J2aW91c1NwaWxscy5oIgogI2luY2x1ZGUgIkFpckZpeFBh
cnRpYWxSZWdpc3RlclN0YWxscy5oIgpAQCAtNzMsNiArNzIsOCBAQCB2b2lkIHByZXBhcmVGb3JH
ZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgICAgIGRhdGFMb2coIkluaXRpYWwgYWlyOlxuIik7
CiAgICAgICAgIGRhdGFMb2coY29kZSk7CiAgICAgfQorICAgIAorICAgIHNpbXBsaWZ5Q0ZHKGNv
ZGUpOwogCiAgICAgbG93ZXJNYWNyb3MoY29kZSk7CiAKQEAgLTEwNywyMyArMTA4LDExIEBAIHZv
aWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKICAgICAvLyBkb2VzIHRoaW5ncyBs
aWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMgdGhl
bS4KICAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKICAgICAKLSAgICBpZiAoT3B0aW9uczo6
ZHVtcEFpckFzSlNCZWZvcmVBbGxvY2F0ZVN0YWNrKCkpIHsKLSAgICAgICAgZGF0YUxvZygiRHVt
cGluZyBBaXIgYXMgSlMgYmVmb3JlIGFsbG9jYXRlU3RhY2s6XG4iKTsKLSAgICAgICAgZHVtcEFz
SlMoY29kZSwgV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgZGF0YUxvZygiQWlyIGhhc2g6ICIs
IGNvZGUuanNIYXNoKCksICJcbiIpOwotICAgIH0KLQogICAgIC8vIFRoaXMgdHVybnMgYWxsIFN0
YWNrIGFuZCBDYWxsQXJnIEFyZ3MgaW50byBBZGRyIGFyZ3MgdGhhdCB1c2UgdGhlIGZyYW1lIHBv
aW50ZXIuIEl0IGRvZXMKICAgICAvLyB0aGlzIGJ5IGZpcnN0LWZpdCBhbGxvY2F0aW5nIHN0YWNr
IHNsb3RzLiBJdCBzaG91bGQgYmUgcHJldHR5IGRhcm4gY2xvc2UgdG8gb3B0aW1hbCwgc28gd2UK
ICAgICAvLyBzaG91bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHZlcnkgbXVjaC4KICAg
ICBhbGxvY2F0ZVN0YWNrKGNvZGUpOwogICAgIAotICAgIGlmIChPcHRpb25zOjpkdW1wQWlyQWZ0
ZXJBbGxvY2F0ZVN0YWNrKCkpIHsKLSAgICAgICAgZGF0YUxvZygiRHVtcGluZyBBaXIgYWZ0ZXIg
YWxsb2NhdGVTdGFjazpcbiIpOwotICAgICAgICBkYXRhTG9nKGNvZGUpOwotICAgICAgICBkYXRh
TG9nKCJBaXIgaGFzaDogIiwgY29kZS5qc0hhc2goKSwgIlxuIik7Ci0gICAgfQotCiAgICAgLy8g
SWYgd2UgY29hbGVzY2VkIG1vdmVzIHRoZW4gd2UgY2FuIHVuYnJlYWsgY3JpdGljYWwgZWRnZXMu
IFRoaXMgaXMgdGhlIG1haW4gcmVhc29uIGZvciB0aGlzCiAgICAgLy8gcGhhc2UuCiAgICAgc2lt
cGxpZnlDRkcoY29kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw2ICsyNzcs
NjUgQEAgaW5saW5lIGJvb2wgaXNYODZVRGl2NjRWYWxpZChjb25zdCBJbnN0JgogICAgIHJldHVy
biBpc1g4NkRpdkhlbHBlclZhbGlkKGluc3QpOwogfQogCitpbmxpbmUgYm9vbCBpc0F0b21pY1N0
cm9uZ0NBU1ZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4
Nl82NCkKKyAgICBzd2l0Y2ggKGluc3QuYXJncy5zaXplKCkpIHsKKyAgICBjYXNlIDM6CisgICAg
ICAgIHJldHVybiBpbnN0LmFyZ3NbMF0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBj
YXNlIDU6CisgICAgICAgIHJldHVybiBpbnN0LmFyZ3NbMV0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6
ZWF4KTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI2VuZGlm
IC8vIENQVShYODYpIHx8IENQVShYODZfNjQpCit9CisKK2lubGluZSBib29sIGlzQnJhbmNoQXRv
bWljU3Ryb25nQ0FTVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaW5zdC5h
cmdzWzFdID09IFRtcChYODZSZWdpc3RlcnM6OmVheCk7Cit9CisKK2lubGluZSBib29sIGlzQXRv
bWljU3Ryb25nQ0FTOFZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzQXRv
bWljU3Ryb25nQ0FTVmFsaWQoaW5zdCk7Cit9CisKK2lubGluZSBib29sIGlzQXRvbWljU3Ryb25n
Q0FTMTZWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc0F0b21pY1N0cm9u
Z0NBU1ZhbGlkKGluc3QpOworfQorCitpbmxpbmUgYm9vbCBpc0F0b21pY1N0cm9uZ0NBUzMyVmFs
aWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNBdG9taWNTdHJvbmdDQVNWYWxp
ZChpbnN0KTsKK30KKworaW5saW5lIGJvb2wgaXNBdG9taWNTdHJvbmdDQVM2NFZhbGlkKGNvbnN0
IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzQXRvbWljU3Ryb25nQ0FTVmFsaWQoaW5zdCk7
Cit9CisKK2lubGluZSBib29sIGlzQnJhbmNoQXRvbWljU3Ryb25nQ0FTOFZhbGlkKGNvbnN0IElu
c3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzQnJhbmNoQXRvbWljU3Ryb25nQ0FTVmFsaWQoaW5z
dCk7Cit9CisKK2lubGluZSBib29sIGlzQnJhbmNoQXRvbWljU3Ryb25nQ0FTMTZWYWxpZChjb25z
dCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc0JyYW5jaEF0b21pY1N0cm9uZ0NBU1ZhbGlk
KGluc3QpOworfQorCitpbmxpbmUgYm9vbCBpc0JyYW5jaEF0b21pY1N0cm9uZ0NBUzMyVmFsaWQo
Y29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNCcmFuY2hBdG9taWNTdHJvbmdDQVNW
YWxpZChpbnN0KTsKK30KKworaW5saW5lIGJvb2wgaXNCcmFuY2hBdG9taWNTdHJvbmdDQVM2NFZh
bGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzQnJhbmNoQXRvbWljU3Ryb25n
Q0FTVmFsaWQoaW5zdCk7Cit9CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAog
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAg
LTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNiAr
MTE3LDcgQEAgQWRkMzIgVTpHOjMyLCBVWkQ6RzozMgogICAgIHg4NjogSW1tLCBJbmRleAogICAg
IEltbSwgVG1wCiAgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBUbXAKICAgICB4
ODY6IFRtcCwgQWRkcgogICAgIHg4NjogVG1wLCBJbmRleAogCkBAIC0xMzUsOSArMTM2LDEyIEBA
IHg4NjogQWRkMTYgVTpHOjE2LCBVRDpHOjE2CiA2NDogQWRkNjQgVTpHOjY0LCBVRDpHOjY0CiAg
ICAgVG1wLCBUbXAKICAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAogICAg
IEltbSwgVG1wCiAgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBUbXAKICAgICB4
ODY6IFRtcCwgQWRkcgorICAgIHg4NjogVG1wLCBJbmRleAogCiA2NDogQWRkNjQgVTpHOjY0LCBV
Okc6NjQsIEQ6Rzo2NAogICAgIEltbSwgVG1wLCBUbXAKQEAgLTE2Niw5ICsxNzAsMTIgQEAgeDg2
OiBBZGRGbG9hdCBVOkY6MzIsIFVEOkY6MzIKIFN1YjMyIFU6RzozMiwgVVpEOkc6MzIKICAgICBU
bXAsIFRtcAogICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CiAgICAgSW1t
LCBUbXAKICAgICB4ODY6IEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcAogICAgIHg4Njog
VG1wLCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4CiAKIGFybTY0OiBTdWIzMiBVOkc6MzIsIFU6
RzozMiwgRDpHOjMyCiAgICAgVG1wLCBUbXAsIFRtcApAQCAtMTc2LDkgKzE4MywxMiBAQCBhcm02
NDogU3ViMzIgVTpHOjMyLCBVOkc6MzIsIEQ6RzozMgogNjQ6IFN1YjY0IFU6Rzo2NCwgVUQ6Rzo2
NAogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgK
ICAgICBJbW0sIFRtcAogICAgIHg4NjogQWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1wCiAg
ICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwgSW5kZXgKIAogYXJtNjQ6IFN1YjY0IFU6
Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcCwgVG1wCkBAIC0yMDQsOSArMjE0LDEy
IEBAIHg4NjogU3ViRmxvYXQgVTpGOjMyLCBVRDpGOjMyCiBOZWczMiBVWkQ6RzozMgogICAgIFRt
cAogICAgIHg4NjogQWRkcgorICAgIHg4NjogSW5kZXgKIAogNjQ6IE5lZzY0IFVEOkc6NjQKICAg
ICBUbXAKKyAgICB4ODY6IEFkZHIKKyAgICB4ODY6IEluZGV4CiAKIGFybTY0OiBOZWdhdGVEb3Vi
bGUgVTpGOjY0LCBEOkY6NjQKICAgICBUbXAsIFRtcApAQCAtMzMwLDggKzM0MywxMSBAQCBBbmQz
MiBVOkc6MzIsIFVaRDpHOjMyCiAgICAgVG1wLCBUbXAKICAgICB4ODY6IEltbSwgVG1wCiAgICAg
eDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwgSW5kZXgKICAgICB4ODY6IEFkZHIsIFRtcAor
ICAgIHg4NjogSW5kZXgsIFRtcAogICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIElu
ZGV4CiAKIDY0OiBBbmQ2NCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRt
cApAQCAtMzM5LDcgKzM1NSwxMyBAQCBBbmQzMiBVOkc6MzIsIFVaRDpHOjMyCiAKIHg4Nl82NDog
QW5kNjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKLSAgICB4ODY6IEltbSwgVG1wCisg
ICAgSW1tLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRy
CisgICAgVG1wLCBJbmRleAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKIAogQW5kRG91
YmxlIFU6Rjo2NCwgVTpGOjY0LCBEOkY6NjQKICAgICBUbXAsIFRtcCwgVG1wCkBAIC00NTksOCAr
NDgxLDExIEBAIE9yMzIgVTpHOjMyLCBVWkQ6RzozMgogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJ
bW0sIFRtcAogICAgIHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4CiAgICAgeDg2
OiBBZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBUbXAKICAgICB4ODY6IEltbSwgQWRkcgorICAg
IHg4NjogSW1tLCBJbmRleAogCiA2NDogT3I2NCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAg
VG1wLCBUbXAsIFRtcApAQCAtNDY5LDYgKzQ5NCwxMiBAQCBPcjMyIFU6RzozMiwgVVpEOkc6MzIK
IDY0OiBPcjY0IFU6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIFRt
cAorICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisgICAgeDg2OiBUbXAs
IEFkZHIKKyAgICB4ODY6IFRtcCwgSW5kZXgKKyAgICB4ODY6IEFkZHIsIFRtcAorICAgIHg4Njog
SW5kZXgsIFRtcAogCiBYb3IzMiBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1w
LCBUbXAKQEAgLTQ4MCw4ICs1MTEsMTEgQEAgWG9yMzIgVTpHOjMyLCBVWkQ6RzozMgogICAgIFRt
cCwgVG1wCiAgICAgeDg2OiBJbW0sIFRtcAogICAgIHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBU
bXAsIEluZGV4CiAgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBUbXAKICAgICB4
ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAogCiA2NDogWG9yNjQgVTpHOjY0LCBV
Okc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBUbXAKQEAgLTQ5MCw2ICs1MjQsMTEgQEAgWG9y
MzIgVTpHOjMyLCBVWkQ6RzozMgogNjQ6IFhvcjY0IFU6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwg
VG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwgSW5kZXgKKyAgICB4ODY6IEFk
ZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcAorICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2
OiBJbW0sIEluZGV4CiAgICAgeDg2OiBJbW0sIFRtcAogCiBhcm02NDogTm90MzIgVTpHOjMyLCBa
RDpHOjMyCkBAIC00OTgsMTMgKzUzNywxNSBAQCBhcm02NDogTm90MzIgVTpHOjMyLCBaRDpHOjMy
CiB4ODY6IE5vdDMyIFVaRDpHOjMyCiAgICAgVG1wCiAgICAgQWRkcgorICAgIEluZGV4CiAKIGFy
bTY0OiBOb3Q2NCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wCiAKLXg4NjogTm90NjQgVUQ6
Rzo2NAoreDg2XzY0OiBOb3Q2NCBVRDpHOjY0CiAgICAgVG1wCiAgICAgQWRkcgorICAgIEluZGV4
CiAKIGFybTY0OiBBYnNEb3VibGUgVTpGOjY0LCBEOkY6NjQKICAgICBUbXAsIFRtcApAQCAtNjY4
LDI3ICs3MDksMzgzIEBAIExvYWQ4IFU6Rzo4LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAg
SW5kZXgsIFRtcAogCitMb2FkQWNxOCBVOkc6OCwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAg
IEluZGV4LCBUbXAKKwogU3RvcmU4IFU6Rzo4LCBEOkc6OAogICAgIFRtcCwgSW5kZXgKICAgICBU
bXAsIEFkZHIKICAgICB4ODY6IEltbSwgSW5kZXgKICAgICB4ODY6IEltbSwgQWRkcgogCitTdG9y
ZVJlbDggVTpHOjgsIEQ6Rzo4CisgICAgVG1wLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIHg4
NjogSW1tLCBJbmRleAorICAgIHg4NjogSW1tLCBBZGRyCisKIExvYWQ4U2lnbmVkRXh0ZW5kVG8z
MiBVOkc6OCwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9hZEFj
cThTaWduZWRFeHRlbmRUbzMyIFU6Rzo4LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5k
ZXgsIFRtcAorCiBMb2FkMTYgVTpHOjE2LCBaRDpHOjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5k
ZXgsIFRtcAogCitMb2FkQWNxMTYgVTpHOjE2LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAg
SW5kZXgsIFRtcAorCiBMb2FkMTZTaWduZWRFeHRlbmRUbzMyIFU6RzoxNiwgWkQ6RzozMgogICAg
IEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9hZEFjcTE2U2lnbmVkRXh0ZW5kVG8zMiBV
Okc6MTYsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIFN0b3JlMTYg
VTpHOjE2LCBEOkc6MTYKICAgICBUbXAsIEluZGV4CiAgICAgVG1wLCBBZGRyCisgICAgeDg2OiBJ
bW0sIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKworU3RvcmVSZWwxNiBVOkc6MTYsIEQ6Rzox
NgorICAgIFRtcCwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKyAg
ICB4ODY6IEltbSwgQWRkcgorCitMb2FkQWNxMzIgVTpHOjMyLCBaRDpHOjMyCisgICAgQWRkciwg
VG1wCisgICAgSW5kZXgsIFRtcAorCitTdG9yZVJlbDMyIFU6RzozMiwgWkQ6RzozMgorICAgIFRt
cCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKyAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1t
LCBJbmRleAorCis2NDogTG9hZEFjcTY0IFU6Rzo2NCwgWkQ6Rzo2NAorICAgIEFkZHIsIFRtcAor
ICAgIEluZGV4LCBUbXAKKworNjQ6IFN0b3JlUmVsNjQgVTpHOjY0LCBaRDpHOjY0CisgICAgVG1w
LCBBZGRyCisgICAgVG1wLCBJbmRleAorICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0s
IEluZGV4CisKKyMgVGhlIGZpcnN0IG9wZXJhbmQgaXMgcmF4LgorIyBGSVhNRTogVGhpcyBmb3Jt
dWxhdGlvbiBtZWFucyB0aGF0IHRoZSBib29sZWFuIHJlc3VsdCBjYW5ub3QgYmUgcHV0IGluIGVh
eCwgZXZlbiB0aG91Z2ggYWxsIHVzZXJzCisjIG9mIHRoaXMgd291bGQgYmUgT0sgd2l0aCB0aGF0
LgoreDg2OiBBdG9taWNTdHJvbmdDQVM4IFU6RzozMiwgVUQ6Rzo4LCBVOkc6OCwgVUQ6Rzo4LCBa
RDpHOjgKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIsIFRtcAorICAgIFN0YXR1c0Nv
bmQsIFRtcCosIFRtcCwgSW5kZXgsIFRtcAorCit4ODY6IEF0b21pY1N0cm9uZ0NBUzE2IFU6Rzoz
MiwgVUQ6RzoxNiwgVTpHOjMyLCBVRDpHOjE2LCBaRDpHOjgKKyAgICBTdGF0dXNDb25kLCBUbXAq
LCBUbXAsIEFkZHIsIFRtcAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgsIFRtcAor
Cit4ODY6IEF0b21pY1N0cm9uZ0NBUzMyIFU6RzozMiwgVUQ6RzozMiwgVTpHOjMyLCBVRDpHOjMy
LCBaRDpHOjgKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIsIFRtcAorICAgIFN0YXR1
c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgsIFRtcAorCit4ODZfNjQ6IEF0b21pY1N0cm9uZ0NBUzY0
IFU6RzozMiwgVUQ6Rzo2NCwgVTpHOjY0LCBVRDpHOjY0LCBaRDpHOjgKKyAgICBTdGF0dXNDb25k
LCBUbXAqLCBUbXAsIEFkZHIsIFRtcAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgs
IFRtcAorCit4ODY6IEF0b21pY1N0cm9uZ0NBUzggVUQ6Rzo4LCBVOkc6OCwgVUQ6Rzo4CisgICAg
VG1wKiwgVG1wLCBBZGRyCisgICAgVG1wKiwgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1N0cm9u
Z0NBUzE2IFVEOkc6MTYsIFU6RzozMiwgVUQ6RzoxNgorICAgIFRtcCosIFRtcCwgQWRkcgorICAg
IFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNTdHJvbmdDQVMzMiBVRDpHOjMyLCBVOkc6
MzIsIFVEOkc6MzIKKyAgICBUbXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisK
K3g4Nl82NDogQXRvbWljU3Ryb25nQ0FTNjQgVUQ6Rzo2NCwgVTpHOjY0LCBVRDpHOjY0CisgICAg
VG1wKiwgVG1wLCBBZGRyCisgICAgVG1wKiwgVG1wLCBJbmRleAorCit4ODY6IEJyYW5jaEF0b21p
Y1N0cm9uZ0NBUzggVTpHOjMyLCBVRDpHOjgsIFU6Rzo4LCBVRDpHOjggL2JyYW5jaAorICAgIFN0
YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkcgorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5k
ZXgKKworeDg2OiBCcmFuY2hBdG9taWNTdHJvbmdDQVMxNiBVOkc6MzIsIFVEOkc6MTYsIFU6Rzoz
MiwgVUQ6RzoxNiAvYnJhbmNoCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyCisgICAg
U3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRleAorCit4ODY6IEJyYW5jaEF0b21pY1N0cm9uZ0NB
UzMyIFU6RzozMiwgVUQ6RzozMiwgVTpHOjMyLCBVRDpHOjMyIC9icmFuY2gKKyAgICBTdGF0dXND
b25kLCBUbXAqLCBUbXAsIEFkZHIKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisK
K3g4Nl82NDogQnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQgVTpHOjMyLCBVRDpHOjY0LCBVOkc6NjQs
IFVEOkc6NjQgL2JyYW5jaAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkcgorICAgIFN0
YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNBZGQ4IFU6Rzo4LCBVRDpH
OjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1w
LCBJbmRleAorCit4ODY6IEF0b21pY0FkZDE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRk
cgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Njog
QXRvbWljQWRkMzIgVTpHOjMyLCBVRDpHOjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRl
eAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNBZGQ2NCBV
Okc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1N1YjggVTpHOjgsIFVEOkc6OAorICAg
IEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4
CisKK3g4NjogQXRvbWljU3ViMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAg
SW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNT
dWIzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1N1YjY0IFU6Rzo2NCwg
VUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljQW5kOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2
OiBBdG9taWNBbmQxNiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIElu
ZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FuZDMyIFU6
RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljQW5kNjQgVTpHOjY0LCBVRDpHOjY0
CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwg
SW5kZXgKKworeDg2OiBBdG9taWNPcjggVTpHOjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAg
IEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWlj
T3IxNiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY09yMzIgVTpHOjMyLCBVRDpH
OjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRt
cCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNPcjY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwg
QWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4
NjogQXRvbWljWG9yOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRl
eAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNYb3IxNiBVOkc6
MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRy
CisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hvcjMyIFU6RzozMiwgVUQ6RzozMgorICAg
IEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4
CisKK3g4Nl82NDogQXRvbWljWG9yNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisg
ICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9t
aWNOZWc4IFVEOkc6OAorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY05lZzE2IFVE
Okc6MTYKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOZWczMiBVRDpHOjMyCisg
ICAgQWRkcgorICAgIEluZGV4CisKK3g4Nl82NDogQXRvbWljTmVnNjQgVUQ6Rzo2NAorICAgIEFk
ZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY05vdDggVUQ6Rzo4CisgICAgQWRkcgorICAgIElu
ZGV4CisKK3g4NjogQXRvbWljTm90MTYgVUQ6RzoxNgorICAgIEFkZHIKKyAgICBJbmRleAorCit4
ODY6IEF0b21pY05vdDMyIFVEOkc6MzIKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2XzY0OiBB
dG9taWNOb3Q2NCBVRDpHOjY0CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogQXRvbWljWGNo
Z0FkZDggVUQ6Rzo4LCBVRDpHOjgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4
NjogQXRvbWljWGNoZ0FkZDE2IFVEOkc6MTYsIFVEOkc6MTYKKyAgICBUbXAsIEFkZHIKKyAgICBU
bXAsIEluZGV4CisKK3g4NjogQXRvbWljWGNoZ0FkZDMyIFVEOkc6MzIsIFVEOkc6MzIKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljWGNoZ0FkZDY0IFVEOkc6
NjQsIFVEOkc6NjQKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWlj
WGNoZzggVUQ6Rzo4LCBVRDpHOjgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4
NjogQXRvbWljWGNoZzE2IFVEOkc6MTYsIFVEOkc6MTYKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAs
IEluZGV4CisKK3g4NjogQXRvbWljWGNoZzMyIFVEOkc6MzIsIFVEOkc6MzIKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljWGNoZzY0IFVEOkc6NjQsIFVEOkc6
NjQKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK2FybTY0OiBMb2FkTGluazggVTpH
OjgsIFpEOkc6OAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRM
aW5rQWNxOCBVOkc6OCwgWkQ6Rzo4CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCisj
IFN1cGVyIGNvbmZ1c2luZyBmYWN0OiB0aGlzIHJldHVybnMgMCB0byBtZWFuIHN1Y2Nlc3MsIDEg
dG8gbWVhbiBmYWlsdXJlLgorYXJtNjQ6IFN0b3JlQ29uZDggVTpHOjgsIEQ6Rzo4LCBFWkQ6Rzo4
CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3Jl
Q29uZFJlbDggVTpHOjgsIEQ6Rzo4LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBU
bXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rMTYgVTpHOjE2LCBaRDpHOjE2CisgICAg
QWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmtBY3ExNiBVOkc6MTYs
IFpEOkc6MTYKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNv
bmQxNiBVOkc6MTYsIEQ6RzoxNiwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1w
LCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmRSZWwxNiBVOkc6MTYsIEQ6RzoxNiwgRVpE
Okc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBM
b2FkTGluazMyIFU6RzozMiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAK
KworYXJtNjQ6IExvYWRMaW5rQWNxMzIgVTpHOjMyLCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisg
ICAgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kMzIgVTpHOjMyLCBEOkc6MzIsIEVaRDpH
OjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3Rv
cmVDb25kUmVsMzIgVTpHOjMyLCBEOkc6MzIsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAor
ICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbms2NCBVOkc6NjQsIFpEOkc6NjQK
KyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTY0IFU6
Rzo2NCwgWkQ6Rzo2NAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0
b3JlQ29uZDY0IFU6Rzo2NCwgRDpHOjY0LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAg
ICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDY0IFU6Rzo2NCwgRDpHOjY0
LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJt
NjQ6IERlcGVuZDMyIFU6RzozMiwgRDpHOjMyCisgICAgVG1wLCBUbXAKKworYXJtNjQ6IERlcGVu
ZDY0IFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAKIAogQ29tcGFyZTMyIFU6RzozMiwgVTpH
OjMyLCBVOkc6MzIsIFpEOkc6MzIKICAgICBSZWxDb25kLCBUbXAsIFRtcCwgVG1wCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2Nr
T3JkZXIuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzcsNiAr
MTc3LDEwIEBAIHZvaWQgb3B0aW1pemVCbG9ja09yZGVyKENvZGUmIGNvZGUpCiAgICAgICAgIGNh
c2UgQnJhbmNoU3ViNjQ6CiAgICAgICAgIGNhc2UgQnJhbmNoTmVnMzI6CiAgICAgICAgIGNhc2Ug
QnJhbmNoTmVnNjQ6CisgICAgICAgIGNhc2UgQnJhbmNoQXRvbWljU3Ryb25nQ0FTODoKKyAgICAg
ICAgY2FzZSBCcmFuY2hBdG9taWNTdHJvbmdDQVMxNjoKKyAgICAgICAgY2FzZSBCcmFuY2hBdG9t
aWNTdHJvbmdDQVMzMjoKKyAgICAgICAgY2FzZSBCcmFuY2hBdG9taWNTdHJvbmdDQVM2NDoKICAg
ICAgICAgICAgIGlmIChjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spID09IGJsb2NrLT5zdWNjZXNz
b3JCbG9jaygwKSAmJiBicmFuY2guYXJnc1swXS5pc0ludmVydGlibGUoKSkgewogICAgICAgICAg
ICAgICAgIHN0ZDo6c3dhcChibG9jay0+c3VjY2Vzc29yKDApLCBibG9jay0+c3VjY2Vzc29yKDEp
KTsKICAgICAgICAgICAgICAgICBicmFuY2guYXJnc1swXSA9IGJyYW5jaC5hcmdzWzBdLmludmVy
dGVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBhZEludGVyZmVy
ZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQ
YWRJbnRlcmZlcmVuY2UuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDYgKzQ4LDcgQEAgdm9pZCBwYWRJbnRlcmZlcmVuY2UoQ29kZSYgY29kZSkKICAgICAgICAgICAg
ICAgICBbJl0gKEFyZyYsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgewogICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6
OkVhcmx5RGVmOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlaRGVmOgogICAg
ICAgICAgICAgICAgICAgICAgICAgaGFzRWFybHlEZWYgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlVXNlOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVy
eXRoaW5nLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1
LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBBcmc6OkxhdGVDb2xkVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
U2NyYXRjaDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlaRGVmOgogICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChSZWcgcmVnIDogY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFm
dGVyLmdldChyZWcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVy
LnNldChyZWcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2Vu
ZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bj
b2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNCAr
NTEsNDkgQEAgY2xhc3MgQXJnCiAgICAgICAgIEBiYW5rID0gYmFuawogICAgICAgICBAd2lkdGgg
PSB3aWR0aAogICAgIGVuZAotCi0gICAgZGVmIHdpZHRoQ29kZQorICAgIAorICAgIGRlZiBzZWxm
LndpZHRoQ29kZSh3aWR0aCkKICAgICAgICAgaWYgd2lkdGggPT0gIlB0ciIKICAgICAgICAgICAg
ICJwb2ludGVyV2lkdGgoKSIKICAgICAgICAgZWxzZQogICAgICAgICAgICAgIldpZHRoI3t3aWR0
aH0iCiAgICAgICAgIGVuZAogICAgIGVuZAorCisgICAgZGVmIHdpZHRoQ29kZQorICAgICAgICBB
cmcud2lkdGhDb2RlKHdpZHRoKQorICAgIGVuZAorICAgIAorICAgIGRlZiBzZWxmLnJvbGVDb2Rl
KHJvbGUpCisgICAgICAgIGNhc2Ugcm9sZQorICAgICAgICB3aGVuICJVIgorICAgICAgICAgICAg
IlVzZSIKKyAgICAgICAgd2hlbiAiRCIKKyAgICAgICAgICAgICJEZWYiCisgICAgICAgIHdoZW4g
IlpEIgorICAgICAgICAgICAgIlpEZWYiCisgICAgICAgIHdoZW4gIlVEIgorICAgICAgICAgICAg
IlVzZURlZiIKKyAgICAgICAgd2hlbiAiVVpEIgorICAgICAgICAgICAgIlVzZVpEZWYiCisgICAg
ICAgIHdoZW4gIlVBIgorICAgICAgICAgICAgIlVzZUFkZHIiCisgICAgICAgIHdoZW4gIlMiCisg
ICAgICAgICAgICAiU2NyYXRjaCIKKyAgICAgICAgd2hlbiAiRUQiCisgICAgICAgICAgICAiRWFy
bHlEZWYiCisgICAgICAgIHdoZW4gIkVaRCIKKyAgICAgICAgICAgICJFYXJseVpEZWYiCisgICAg
ICAgIHdoZW4gIkxVIgorICAgICAgICAgICAgIkxhdGVVc2UiCisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJhaXNlCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiByb2xlQ29k
ZQorICAgICAgICBBcmcucm9sZUNvZGUocm9sZSkKKyAgICBlbmQKIGVuZAogCiBjbGFzcyBPdmVy
bG9hZApAQCAtMTgyLDcgKzIxNyw3IEBAIGRlZiBsZXgoc3RyLCBmaWxlTmFtZSkKIGVuZAogCiBk
ZWYgaXNSb2xlKHRva2VuKQotICAgIHRva2VuID1+IC9cQSgoVSl8KEQpfChVRCl8KFpEKXwoVVpE
KXwoVUEpfChTKSlcWi8KKyAgICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpfChaRCl8KFVaRCl8
KFVBKXwoUyl8KEVEKXwoRVpEKXwoTFUpKVxaLwogZW5kCiAKIGRlZiBpc0dGKHRva2VuKQpAQCAt
MTkwLDcgKzIyNSw3IEBAIGRlZiBpc0dGKHRva2VuKQogZW5kCiAKIGRlZiBpc0tpbmQodG9rZW4p
Ci0gICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02
NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCkpXFovCisg
ICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8
KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCl8KFN0YXR1c0Nv
bmQpKVxaLwogZW5kCiAKIGRlZiBpc0FyY2godG9rZW4pCkBAIC0yNjQsNyArMjk5LDcgQEAgY2xh
c3MgUGFyc2VyCiAKICAgICBkZWYgY29uc3VtZUtpbmQKICAgICAgICAgcmVzdWx0ID0gdG9rZW4u
c3RyaW5nCi0gICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgQmlnSW1tLCBC
aXRJbW0sIEJpdEltbTY0LCBUbXAsIEFkZHIsIEluZGV4LCBSZWxDb25kLCBSZXNDb25kLCBvciBE
b3VibGVDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAgICBwYXJzZUVycm9yKCJF
eHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgVG1wLCBBZGRyLCBJ
bmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgRG91YmxlQ29uZCwgb3IgU3RhdHVzQ29uZCkiKSB1bmxl
c3MgaXNLaW5kKHJlc3VsdCkKICAgICAgICAgYWR2YW5jZQogICAgICAgICByZXN1bHQKICAgICBl
bmQKQEAgLTYzNCwyOCArNjY5LDcgQEAgd3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmVhY2hfd2l0aF9pbmRleCB7CiAg
ICAgICAgICAgICAgICAgfCBhcmcsIGluZGV4IHwKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICByb2xlID0gbmlsCi0gICAgICAgICAgICAgICAgY2FzZSBhcmcucm9sZQotICAgICAg
ICAgICAgICAgIHdoZW4gIlUiCi0gICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlIgotICAg
ICAgICAgICAgICAgIHdoZW4gIkQiCi0gICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiRGVmIgot
ICAgICAgICAgICAgICAgIHdoZW4gIlpEIgotICAgICAgICAgICAgICAgICAgICByb2xlID0gIlpE
ZWYiCi0gICAgICAgICAgICAgICAgd2hlbiAiVUQiCi0gICAgICAgICAgICAgICAgICAgIHJvbGUg
PSAiVXNlRGVmIgotICAgICAgICAgICAgICAgIHdoZW4gIlVaRCIKLSAgICAgICAgICAgICAgICAg
ICAgcm9sZSA9ICJVc2VaRGVmIgotICAgICAgICAgICAgICAgIHdoZW4gIlVBIgotICAgICAgICAg
ICAgICAgICAgICByb2xlID0gIlVzZUFkZHIiCi0gICAgICAgICAgICAgICAgd2hlbiAiUyIKLSAg
ICAgICAgICAgICAgICAgICAgcm9sZSA9ICJTY3JhdGNoIgotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICBlbmQKLQotICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiZnVuY3RvcihhcmdzWyN7aW5kZXh9XSwgQXJnOjoje3JvbGV9
LCAje2FyZy5iYW5rfVAsICN7YXJnLndpZHRoQ29kZX0pOyIKKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImZ1bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3thcmcucm9sZUNvZGV9LCAje2Fy
Zy5iYW5rfVAsICN7YXJnLndpZHRoQ29kZX0pOyIKICAgICAgICAgICAgIH0KICAgICAgICAgZW5k
CiAgICAgfQpAQCAtODE5LDYgKzgzMyw3IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewog
ICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVz
Q29uZCIKICAgICAgICAgICAgICAgICB3aGVuICJEb3VibGVDb25kIgorICAgICAgICAgICAgICAg
IHdoZW4gIlN0YXR1c0NvbmQiCiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICByYWlzZSAiVW5leHBlY3RlZCBraW5kOiAje2tpbmQubmFtZX0iCiAgICAgICAgICAgICAg
ICAgZW5kCkBAIC0xMTA1LDYgKzExMjAsOCBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsK
ICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZXN1bHRD
b25kaXRpb24oKSIKICAgICAgICAgICAgICAgICB3aGVuICJEb3VibGVDb25kIgogICAgICAgICAg
ICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0RvdWJsZUNvbmRpdGlvbigp
IgorICAgICAgICAgICAgICAgIHdoZW4gIlN0YXR1c0NvbmQiCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzU3RhdHVzQ29uZGl0aW9uKCkiCiAgICAgICAg
ICAgICAgICAgZW5kCiAgICAgICAgICAgICB9CiAKQEAgLTExNDgsMjcgKzExNjUsNyBAQCBGaWxl
Lm9wZW4oIkpTQWlyX29wY29kZS5qcyIsICJ3IikgewogICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dp
dGNoCiAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmVhY2hfd2l0aF9pbmRleCB7
CiAgICAgICAgICAgICAgICAgICAgIHwgYXJnLCBpbmRleCB8Ci0gICAgICAgICAgICAgICAgICAg
IHJvbGUgPSBuaWwKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBhcmcucm9sZQotICAgICAgICAg
ICAgICAgICAgICB3aGVuICJVIgotICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2Ui
Ci0gICAgICAgICAgICAgICAgICAgIHdoZW4gIkQiCi0gICAgICAgICAgICAgICAgICAgICAgICBy
b2xlID0gIkRlZiIKLSAgICAgICAgICAgICAgICAgICAgd2hlbiAiWkQiCi0gICAgICAgICAgICAg
ICAgICAgICAgICByb2xlID0gIlpEZWYiCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gIlVEIgot
ICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VEZWYiCi0gICAgICAgICAgICAgICAg
ICAgIHdoZW4gIlVaRCIKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlWkRlZiIK
LSAgICAgICAgICAgICAgICAgICAgd2hlbiAiVUEiCi0gICAgICAgICAgICAgICAgICAgICAgICBy
b2xlID0gIlVzZUFkZHIiCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gIlMiCi0gICAgICAgICAg
ICAgICAgICAgICAgICByb2xlID0gIlNjcmF0Y2giCi0gICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgICAgIGVuZAot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpbnN0
LnZpc2l0QXJnKCN7aW5kZXh9LCBmdW5jLCBBcmcuI3tyb2xlfSwgI3thcmcuYmFua31QLCAje2Fy
Zy53aWR0aH0pOyIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpbnN0LnZpc2l0QXJn
KCN7aW5kZXh9LCBmdW5jLCBBcmcuI3thcmcucm9sZUNvZGV9LCAje2FyZy5iYW5rfVAsICN7YXJn
LndpZHRofSk7IgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImJyZWFrOyIKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDkgKzQxMyw2IEBAIHR5cGVk
ZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgZHVtcE1vZHVsZUxvYWRp
bmdTdGF0ZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZXhwb3NlSW50
ZXJuYWxNb2R1bGVMb2FkZXIsIGZhbHNlLCBOb3JtYWwsICJleHBvc2UgdGhlIGludGVybmFsIG1v
ZHVsZSBsb2FkZXIgb2JqZWN0IHRvIHRoZSBnbG9iYWwgc3BhY2UgZm9yIGRlYnVnZ2luZyIpIFwK
ICAgICBcCi0gICAgdihib29sLCBkdW1wQWlyQXNKU0JlZm9yZUFsbG9jYXRlU3RhY2ssIGZhbHNl
LCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIGR1bXBBaXJBZnRlckFsbG9jYXRlU3Rh
Y2ssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICBcCiAgICAgdihib29sLCB1c2VTdXBl
clNhbXBsZXIsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgdihib29sLCBy
ZXBvcnRMTEludFN0YXRzLCBmYWxzZSwgQ29uZmlndXJhYmxlLCAiUmVwb3J0cyBMTEludCBzdGF0
aXN0aWNzIikgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303078</attachid>
            <date>2017-03-01 10:33:46 -0800</date>
            <delta_ts>2017-03-01 13:37:10 -0800</delta_ts>
            <desc>added tests for strong cas</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>278537</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMyBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkwRjJDNjNDMDFFNjYwRUE3MDBDMTM4
MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCRjFFNjYwRUE1MDBDMTM4MzkgLyogQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGMkM2M0MyMUU2NjRBNUMwMEMxMzgzOSAv
KiBCM05hdGl2ZVRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQzYzQzExRTY2NEE1QTAwQzEzODM5IC8qIEIzTmF0aXZlVHJhaXRzLmggKi87
IH07CiAJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERCMTk4MzJE
MzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCAqLzsgfTsKIAkJMEYyRDREREUxOTgzMkQz
NDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERDMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNj
b3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYyRDRERTgxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJENERFNTE5ODMyREFDMDA3RDRC
MTkgLyogVG9UaGlzU3RhdHVzLmNwcCAqLzsgfTsKQEAgLTIyNDMsOCArMjI1MCw2IEBACiAJCURD
MjE0MzA4MUNBMzJFNTgwMDBBODg2OSAvKiBJQ1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMjE0MzA1MUNBMzJFNTIwMDBBODg2OSAvKiBJ
Q1N0YXRzLmNwcCAqLzsgfTsKIAkJREMzRDJCMEExRDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzNEMkIw
OTFEMzQzMTYxMDBCQTkxOEMgLyogSGVhcENlbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEQzNEMkIwQzFEMzQzNzcwMDBCQTkxOEMgLyogSGVh
cENlbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
REMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8qIEhlYXBDZWxsLmNwcCAqLzsgfTsKLQkJREM0NTRC
OEMxRDAwRTgyMjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNDU0QjhBMUQwMEU4MUYwMDRDMThBRiAvKiBB
aXJEdW1wQXNKUy5jcHAgKi87IH07Ci0JCURDNDU0QjhEMUQwMEU4MjQwMDRDMThBRiAvKiBBaXJE
dW1wQXNKUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
REM0NTRCOEIxRDAwRTgxRjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmggKi87IH07CiAJCURDNjA1
QjVEMUNFMjZFQTAwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjU5MUNFMjZFOTgwMDU5MzcxOCAv
KiBQcm9maWxlckV2ZW50LmNwcCAqLzsgfTsKIAkJREM2MDVCNUUxQ0UyNkVBMjAwNTkzNzE4IC8q
IFByb2ZpbGVyRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IERDNjA1QjVBMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREM2MDVCNUYxQ0Uy
NkVBNTAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjVCMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxl
clVJRC5jcHAgKi87IH07CkBAIC0yNzY0LDYgKzI3NjksMTMgQEAKIAkJMEYyQzYzQUMxRTYwQUUz
QzAwQzEzODM5IC8qIEIzQmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M0JhbmsuaDsgcGF0aCA9IGIzL0IzQmFuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjJDNjNBRDFFNjBBRTNDMDBDMTM4MzkgLyogQjNXaWR0aC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dpZHRoLmNwcDsgcGF0aCA9IGIzL0IzV2lkdGguY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNjNBRTFFNjBBRTNEMDBDMTM4Mzkg
LyogQjNXaWR0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dpZHRoLmg7
IHBhdGggPSBiMy9CM1dpZHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2
M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQXRvbWljVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBdG9t
aWNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I0MUU2MzQz
RTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzQXRvbWljVmFsdWUuaDsgcGF0aCA9IGIzL0IzQXRvbWljVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2Vu
ZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0dlbmVyaWNCbG9ja0lu
c2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCOTFFNjM0
NDA4MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMv
YWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBh
dGggPSBiMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQzYzQkYxRTY2MEVBNTAwQzEzODM5IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0MxMUU2
NjRBNUEwMEMxMzgzOSAvKiBCM05hdGl2ZVRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM05hdGl2ZVRyYWl0cy5oOyBwYXRoID0gYjMvQjNOYXRpdmVUcmFpdHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREIxOTgzMkQzNDAwN0Q0QjE5IC8q
IERlYnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGVidWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkQ0RERD
MTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNDc3OCw4ICs0NzkwLDYgQEAKIAkJREMyMTQzMDYxQ0EzMkU1MjAwMEE4ODY5IC8q
IElDU3RhdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSUNTdGF0cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzNEMkIwOTFEMzQzMTYxMDBCQTkxOEMgLyog
SGVhcENlbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcENlbGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8q
IEhlYXBDZWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBD
ZWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJREM0NTRCOEExRDAwRTgxRjAw
NEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEFpckR1bXBBc0pTLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJEdW1wQXNKUy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURDNDU0QjhCMUQwMEU4MUYwMDRDMThBRiAvKiBB
aXJEdW1wQXNKUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJEdW1wQXNK
Uy5oOyBwYXRoID0gYjMvYWlyL0FpckR1bXBBc0pTLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCURDNjA1QjU5MUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyRXZlbnQuY3BwOyBwYXRo
ID0gcHJvZmlsZXIvUHJvZmlsZXJFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCURDNjA1QjVBMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyRXZlbnQuaDsgcGF0aCA9IHByb2ZpbGVy
L1Byb2ZpbGVyRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREM2MDVCNUIx
Q0UyNkU5ODAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyVUlELmNwcDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVy
VUlELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyOTIsNiArNTMwMiw4IEBA
CiAJCQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKIAkJCQkwRkVDODRCNDFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEYyQzYz
QjMxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3BwICovLAorCQkJCTBGMkM2M0I0
MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi8sCiAJCQkJMEYyQzYzQUIxRTYw
QUUzQzAwQzEzODM5IC8qIEIzQmFuay5jcHAgKi8sCiAJCQkJMEYyQzYzQUMxRTYwQUUzQzAwQzEz
ODM5IC8qIEIzQmFuay5oICovLAogCQkJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suY3BwICovLApAQCAtNTM1NCw2ICs1MzY2LDcgQEAKIAkJCQkwRkVDODRDRDFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLywKIAkJCQkwRkVDODRDRTFCREFD
REFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8sCiAJCQkJMEZFQzg0Q0YxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzR2VuZXJhdGUuaCAqLywKKwkJCQkwRjJDNjNCNTFFNjM0M0U4MDBDMTM4Mzkg
LyogQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRkVDODREMDFCREFDREFD
MDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1QkYx
QkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCAqLywKIAkJCQkwRkVDODVDMDFCRTE2
N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuaCAqLywKQEAgLTUzNzgsNiArNTM5MSw3IEBACiAJ
CQkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLywKIAkJCQkw
RjMzOEUwMzFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmNwcCAqLywKIAkJCQkw
RjMzOEUwNDFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggKi8sCisJCQkJMEYy
QzYzQzExRTY2NEE1QTAwQzEzODM5IC8qIEIzTmF0aXZlVHJhaXRzLmggKi8sCiAJCQkJMEYzMzhF
MDUxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0LmggKi8sCiAJCQkJMEYzMzhF
MDYxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5jcHAgKi8sCiAJCQkJMEYz
MzhFMDcxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5oICovLApAQCAtNTQ2
OSw2ICs1NDgzLDggQEAKIAkJCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5s
aW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2Nr
LmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5o
ICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNl
dC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0
aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29y
a2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdD
b252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC01NDgwLDggKzU0OTYsNiBAQAogCQkJCTBGMTBGMUEy
MUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCAqLywKIAkJCQk3OUFCQjE3QjFFNUNDQjU3
MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmNwcCAqLywKIAkJCQk3OUFCQjE3QzFFNUNDQjU3
MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmggKi8sCi0JCQkJREM0NTRCOEExRDAwRTgxRjAw
NEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCAqLywKLQkJCQlEQzQ1NEI4QjFEMDBFODFGMDA0QzE4
QUYgLyogQWlyRHVtcEFzSlMuaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyog
QWlyRWxpbWluYXRlRGVhZENvZGUuY3BwICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYy
OSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oICovLAogCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5jcHAgKi8sCkBAIC03MzI2LDYgKzczNDAsNyBAQAogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRjFGRTUxQjE5MjJBM0JDMDA2
OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLywKKwkJCQkwRjJDNjNCRjFFNjYwRUE1MDBDMTM4Mzkg
LyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8sCiAJCQkJODYwMTYxREYwRjNBODNDMTAw
Rjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCAqLywKIAkJCQkwRjM3MzA5MDFDMENE
NzBDMDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggKi8sCiAJCQkJ
ODY0MDkyM0IxNTZFRUQzQjAwNTY2Q0IyIC8qIEFSTTY0QXNzZW1ibGVyLmggKi8sCkBAIC03MzU0
LDggKzczNjksOCBAQAogCQkJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2Vt
Ymxlck1JUFMuaCAqLywKIAkJCQlGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmNwcCAqLywKIAkJCQlGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyogTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmggKi8sCi0JCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi8sCisJCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJQTdBNEFFMDcxNzk3M0IyNjAwNTYxMkIx
IC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLywKIAkJCQk4NjAxNjFFMjBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3NzE4
NUE4RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywKQEAg
LTc5NDMsNyArNzk1OCw2IEBACiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckND
YWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTBGMUEzMUM0MjBCRjAwMDFDMDdE
MiAvKiBBaXJDdXN0b20uaCBpbiBIZWFkZXJzICovLAotCQkJCURDNDU0QjhEMUQwMEU4MjQwMDRD
MThBRiAvKiBBaXJEdW1wQXNKUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NTcwMzkxQkU0NEM5
MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjYxODMyRDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTc5NTYsNiArNzk3MCw3IEBACiAJCQkJMEZFQzg1ODAxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTgxMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3
RDcxRDlEQzQ0MjAwMUI5ODI1IC8qIEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2
M0JDMUU2MzQ0MEMwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjY4NEQ0MzgxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQ
cmVzc3VyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQ3LDYgKzgwNjIs
NyBAQAogCQkJCTQzNDIyQTYzMUMxNThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQ
dHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8q
IEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQjgxRTYzNDNG
NzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjMzOEUwRTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYzM0ZDRkMxQzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2QjhBRDkxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRl
VGFpbHMuaCBpbiBIZWFkZXJzICovLApAQCAtODIzNyw2ICs4MjUzLDcgQEAKIAkJCQlBNzdBNDIz
RTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJDNjNDMjFFNjY0QTVD
MDBDMTM4MzkgLyogQjNOYXRpdmVUcmFpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3
MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAy
QzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywK
QEAgLTgzNjYsNiArODM4Myw3IEBACiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERG
R09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdG
NTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
MzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3
MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKQEAgLTk3OTIsNiArOTgx
MCw3IEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJ
CQkJMEZGQTU0OTcxNkI4ODM1MDAwQjNBOTgyIC8qIEE2NERPcGNvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYyQzYzQzAxRTY2MEVBNzAwQzEzODM5IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUQ0OTM3QzMxRERCRTYxNDAwNzdDODA3IC8qIEFi
c3RyYWN0TW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVGMEY0MTREMTA2
MzkwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzNzBCNEY1
MUJGMjYyMDIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRCYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTgwMiw3ICs5ODIxLDYgQEAKIAkJCQkwRkVD
ODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJREM0NTRCOEMxRDAwRTgyMjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDU3MDM4MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYxODMyQzFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0REUxQ0Ux
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0xMDI0OCw2ICsxMDI2Niw3IEBACiAJCQkJOUU3Mjk0MDcxOTBGMDFBNTAwMUE5MUI1IC8q
IEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QjcxODVC
OEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEYyQzYzQjYxRTYzNDNFQTAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVk
U2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1
QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQw
RTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTEwMjY2LDYgKzEwMjg1LDcgQEAKIAkJCQlFMzVFMDM1RjFCN0FCNDNFMDA3M0FE
MkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MzI0MzhCMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRCNjExODgwOURENTAwNjhBNDZEIC8qIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJDNjNCQjFFNjM0NDBB
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU1MTY1RDIxQkRGMEI5ODAwM0I3NUMxIC8qIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3Bl
Y3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdB
NDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiIC8vIEhhdmUgdG8g
YnJlYWsgd2l0aCBzdHlsZSBiZWNhdXNlIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpcyBhIHNo
YWR5IGhlYWRlci4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBYnN0cmFjdE1hY3JvQXNzZW1i
bGVyQmFzZTo6U3RhdHVzQ29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmRp
dGlvbikgeworICAgIGNhc2UgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJhc2U6OlN1Y2Nlc3M6Cisg
ICAgICAgIG91dC5wcmludCgiU3VjY2VzcyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyQmFzZTo6RmFpbHVyZToKKyAgICAgICAgb3V0LnByaW50KCJG
YWlsdXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMiwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHd0
Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9tLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
NTAsOCArNTEsMjggQEAgbmFtZXNwYWNlIERGRyB7CiBzdHJ1Y3QgT1NSRXhpdDsKIH0KIAorY2xh
c3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJhc2UgeworcHVibGljOgorICAgIGVudW0gU3RhdHVz
Q29uZGl0aW9uIHsKKyAgICAgICAgU3VjY2VzcywKKyAgICAgICAgRmFpbHVyZQorICAgIH07Cisg
ICAgCisgICAgc3RhdGljIFN0YXR1c0NvbmRpdGlvbiBpbnZlcnQoU3RhdHVzQ29uZGl0aW9uIGNv
bmRpdGlvbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgICAgIGNh
c2UgU3VjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBGYWlsdXJlOworICAgICAgICBjYXNlIEZh
aWx1cmU6CisgICAgICAgICAgICByZXR1cm4gU3VjY2VzczsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gU3VjY2VzczsKKyAg
ICB9Cit9OworCiB0ZW1wbGF0ZSA8Y2xhc3MgQXNzZW1ibGVyVHlwZSwgY2xhc3MgTWFjcm9Bc3Nl
bWJsZXJUeXBlPgotY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlciB7CitjbGFzcyBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJCYXNlIHsKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZSwg
TWFjcm9Bc3NlbWJsZXJUeXBlPiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyVHlwZTsKICAgICB0eXBl
ZGVmIEFzc2VtYmxlclR5cGUgQXNzZW1ibGVyVHlwZV9UOwpAQCAtMTEwOCwzICsxMTI5LDE2IEBA
IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZSwgTWEKICNlbmRpZiAvLyBFTkFC
TEUoQVNTRU1CTEVSKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKKworI2lmIEVOQUJMRShBU1NFTUJM
RVIpCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJh
c2U6OlN0YXR1c0NvbmRpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEFTU0VNQkxFUikKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMi0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTM2LDYgKzEzNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IHR3b1RvVGhlMzI7IC8vIFRoaXMgaXMgc3VwZXIgdXNlZnVsIGZvciBzb21lIGRvdWJsZSBjb2Rl
LgogCiAgICAgLy8gVXRpbGl0aWVzIHVzZWQgYnkgdGhlIERGRyBKSVQuCisgICAgdXNpbmcgQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlckJhc2U6OmludmVydDsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxl
ckJhc2U6OmludmVydDsKICAgICAKICAgICBzdGF0aWMgRG91YmxlQ29uZGl0aW9uIGludmVydChE
b3VibGVDb25kaXRpb24gY29uZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3MSw2ICsxNzEsMTEgQEAgcHVi
bGljOgogICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBk
ZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZDMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfbXIoc3JjLm9mZnNldCwgc3Jj
LmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIGFk
ZDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CkBAIC0yNTEsMTYgKzI1
Niw3MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgc3Jj
LCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcm0oc3Jj
LCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZDE2KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7
CisgICAgfQorCisgICAgdm9pZCBhbmQxNihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRl
c3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ4
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5hbmRiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmQ4KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmFuZGJfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4
LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIGFuZDMyKEFkZHJlc3Mgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX21yKHNyYy5vZmZz
ZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDMyKEJhc2VJbmRleCBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfbXIo
c3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9
CisKICAgICB2b2lkIGFuZDMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKICAg
ICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgYW5kMzIoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRs
X2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDE2KFRydXN0ZWRJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHdf
aW0oc3RhdGljX2Nhc3Q8aW50MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kd19pbShzdGF0
aWNfY2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgYW5k
OChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5hbmRiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDgoVHJ1c3RlZElt
bTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5h
bmRiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAg
ICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBk
ZXN0KQogICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC00NTYsNiArNTE2LDMxIEBA
IHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubmVnbF9tKHNyY0Rlc3Qub2Zmc2V0LCBzcmNE
ZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgbmVnMzIoQmFzZUluZGV4IHNyY0Rlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWdsX20oc3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3Qu
YmFzZSwgc3JjRGVzdC5pbmRleCwgc3JjRGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBu
ZWcxNihBZGRyZXNzIHNyY0Rlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWd3X20o
c3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBuZWcxNihC
YXNlSW5kZXggc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZ3dfbShzcmNE
ZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlLCBzcmNEZXN0LmluZGV4LCBzcmNEZXN0LnNjYWxlKTsK
KyAgICB9CisKKyAgICB2b2lkIG5lZzgoQWRkcmVzcyBzcmNEZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubmVnYl9tKHNyY0Rlc3Qub2Zmc2V0LCBzcmNEZXN0LmJhc2UpOworICAgIH0K
KworICAgIHZvaWQgbmVnOChCYXNlSW5kZXggc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm5lZ2JfbShzcmNEZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlLCBzcmNEZXN0LmluZGV4
LCBzcmNEZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9ycihzcmMs
IGRlc3QpOwpAQCAtNDcxLDE2ICs1NTYsNzEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxl
ci5vcmxfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lk
IG9yMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIub3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwg
ZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjE2KFJlZ2lzdGVySUQgc3JjLCBBZGRy
ZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcndfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMTYoUmVnaXN0ZXJJRCBzcmMs
IEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X3JtKHNyYywg
ZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQor
CisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAg
IH0KKworICAgIHZvaWQgb3I4KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2Us
IGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgb3IzMihBZGRyZXNz
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX21y
KHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIG9yMzIoQmFz
ZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7
CisgICAgfQorCiAgICAgdm9pZCBvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVz
cykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9pbShpbW0ubV92YWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjMyKFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMTYoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3
X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X2ltKHN0YXRp
Y19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjgo
VHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIub3JiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIg
aW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9p
bShzdGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9p
ZCBvcjMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC02NTQsMTYgKzc5NCw3MSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3ViMTYoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19p
bShzdGF0aWNfY2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UpOworICAgIH0KKworICAgIHZvaWQgc3ViOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX2ltKHN0YXRpY19j
YXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
KyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9pbShpbW0ubV92YWx1ZSwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7
CisgICAgfQorCisgICAgdm9pZCBzdWIxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YndfaW0oc3RhdGljX2Nhc3Q8aW50
MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjgoVHJ1c3RlZElt
bTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5z
dWJiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAg
ICB2b2lkIHN1YjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAg
ICBtX2Fzc2VtYmxlci5zdWJsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9
CiAKKyAgICB2b2lkIHN1YjMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5p
bmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIHN1YjMyKFJlZ2lzdGVy
SUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX3Jt
KHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdWIxNihS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c3Vid19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQg
c3ViOChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc3ViYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAg
IHZvaWQgc3ViMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuc3VibF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3Qu
aW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgc3ViMTYoUmVnaXN0ZXJJRCBz
cmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19ybShz
cmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAg
IH0KKworICAgIHZvaWQgc3ViOChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCB4b3IzMihSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
eG9ybF9ycihzcmMsIGRlc3QpOwpAQCAtNjc3LDYgKzg3Miw1MCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci54b3JsX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRl
eCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubm90bF9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgs
IGRlc3Quc2NhbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3Js
X2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0
LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJl
c3MgZGVzdCkKKyAgICB7CisgICAgICAgIGltbS5tX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50MTZf
dD4oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gLTEpCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5ub3R3X20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcndfaW0oaW1tLm1fdmFsdWUsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9yMTYoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBpbW0ubV92YWx1ZSA9IHN0YXRp
Y19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09
IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci54b3J3X2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBk
ZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgaW1tLm1fdmFsdWUgPSBzdGF0
aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09
IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm90Yl9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JiX2ltKGltbS5t
X3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgo
VHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBpbW0ubV92
YWx1ZSA9IHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoaW1t
Lm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3RiX20oZGVzdC5vZmZz
ZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmJfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBk
ZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgeG9y
MzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYg
KGltbS5tX3ZhbHVlID09IC0xKQpAQCAtNjkwLDExICs5MjksNDEgQEAgcHVibGljOgogICAgICAg
ICBtX2Fzc2VtYmxlci54b3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAg
fQogCisgICAgdm9pZCB4b3IzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci54b3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCB4b3IxNihSZWdp
c3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9y
d19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9y
MTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIueG9yd19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRl
c3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywgQWRkcmVz
cyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yYl9ybShzcmMsIGRlc3Qub2Zm
c2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywg
QmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JiX3JtKHNyYywg
ZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQor
CiAgICAgdm9pZCB4b3IzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAg
ICAgICAgbV9hc3NlbWJsZXIueG9ybF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CiAg
ICAgfQogICAgIAorICAgIHZvaWQgeG9yMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9tcihzcmMub2Zmc2V0LCBzcmMuYmFz
ZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIHhv
cjMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAg
IHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC03NDEsNiArMTAxMCwzMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vdGxfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdDMyKEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm90bF9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Qu
c2NhbGUpOworICAgIH0KKworICAgIHZvaWQgbm90MTYoQWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0K
KworICAgIHZvaWQgbm90MTYoQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3R3X20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2Fs
ZSk7CisgICAgfQorCisgICAgdm9pZCBub3Q4KEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5vdGJfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAg
ICB2b2lkIG5vdDgoQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5u
b3RiX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7Cisg
ICAgfQorCiAgICAgdm9pZCBzcXJ0RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJ
RCBkc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zcXJ0c2RfcnIoc3JjLCBkc3QpOwpA
QCAtMTA3MSw0MiArMTM2NSwyMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0b3JlMTYoUmVnaXN0
ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQogICAgIHsKLSNpZiBDUFUoWDg2KQotICAgICAg
ICAvLyBPbiAzMi1iaXQgeDg2IHdlIGNhbiBvbmx5IHN0b3JlIGZyb20gdGhlIGZpcnN0IDQgcmVn
aXN0ZXJzOwotICAgICAgICAvLyBlc3AuLmVkaSBhcmUgbWFwcGVkIHRvIHRoZSAnaCcgcmVnaXN0
ZXJzIQotICAgICAgICBpZiAoc3JjID49IDQpIHsKLSAgICAgICAgICAgIC8vIFBpY2sgYSB0ZW1w
b3JhcnkgcmVnaXN0ZXIuCi0gICAgICAgICAgICBSZWdpc3RlcklEIHRlbXAgPSBnZXRVbnVzZWRS
ZWdpc3RlcihhZGRyZXNzKTsKLQotICAgICAgICAgICAgLy8gU3dhcCB0byB0aGUgdGVtcG9yYXJ5
IHJlZ2lzdGVyIHRvIHBlcmZvcm0gdGhlIHN0b3JlLgotICAgICAgICAgICAgc3dhcChzcmMsIHRl
bXApOwotICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d19ybSh0ZW1wLCBhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKLSAgICAgICAg
ICAgIHN3YXAoc3JjLCB0ZW1wKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2Vu
ZGlmCiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdndfcm0oc3JjLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKICAgICB9CiAKICAgICB2
b2lkIHN0b3JlMTYoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0jaWYg
Q1BVKFg4NikKLSAgICAgICAgLy8gT24gMzItYml0IHg4NiB3ZSBjYW4gb25seSBzdG9yZSBmcm9t
IHRoZSBmaXJzdCA0IHJlZ2lzdGVyczsKLSAgICAgICAgLy8gZXNwLi5lZGkgYXJlIG1hcHBlZCB0
byB0aGUgJ2gnIHJlZ2lzdGVycyEKLSAgICAgICAgaWYgKHNyYyA+PSA0KSB7Ci0gICAgICAgICAg
ICAvLyBQaWNrIGEgdGVtcG9yYXJ5IHJlZ2lzdGVyLgotICAgICAgICAgICAgUmVnaXN0ZXJJRCB0
ZW1wID0gZ2V0VW51c2VkUmVnaXN0ZXIoYWRkcmVzcyk7Ci0KLSAgICAgICAgICAgIC8vIFN3YXAg
dG8gdGhlIHRlbXBvcmFyeSByZWdpc3RlciB0byBwZXJmb3JtIHRoZSBzdG9yZS4KLSAgICAgICAg
ICAgIHN3YXAoc3JjLCB0ZW1wKTsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdndfcm0odGVt
cCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7Ci0gICAgICAgICAgICBzd2FwKHNyYywg
dGVtcCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgogICAgICAgICBt
X2Fzc2VtYmxlci5tb3Z3X3JtKHNyYywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAg
ICAgfQogCisgICAgdm9pZCBzdG9yZTE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92d19pbShzdGF0aWNfY2FzdDxpbnQx
Nl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
aW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUxNihUcnVzdGVk
SW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5t
b3Z3X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSk7CisgICAgfQogCiAgICAgLy8gRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9u
OgogICAgIC8vCkBAIC0yNzQzLDc0ICszMDE4LDgzOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX2ltKDAsIDAsIFg4NlJlZ2lz
dGVyczo6ZXNwKTsKICAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM4KFN0YXR1
c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklE
IG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsm
XSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsgfSk7CisgICAgfQogCi0gICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhh
dCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9ybWFsIHN0b3Jlcy4gU28sIGl0J3MgYSBuby1vcCBv
biB4ODYuCi0gICAgdm9pZCBzdG9yZUZlbmNlKCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzgo
U3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKICAg
ICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgcmVz
dWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZz
ZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOwogICAg
IH0KIAotICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVudHMgbW90aW9u
IG9mIG5vcm1hbCBsb2Fkcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4ODYuCi0gICAgdm9pZCBsb2Fk
RmVuY2UoKQorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgeworICAgICAgICBhdG9taWNTdHJv
bmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIu
Y21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFi
ZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAg
dm9pZCBhdG9taWNTdHJvbmdDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBl
eHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3Ms
IFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBsYWNl
V2l0aEp1bXAoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCBkZXN0aW5hdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4
cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3JtKG5l
d1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsgfSk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgbWF4SnVt
cFJlcGxhY2VtZW50U2l6ZSgpCisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0Nv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5l
d1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFg4NkFzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpOworICAgICAg
ICBhdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsg
bV9hc3NlbWJsZXIuY21weGNoZ2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UpOyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IHBhdGNoYWJsZUp1bXBT
aXplKCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5k
ZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgewotICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjpwYXRjaGFibGVKdW1wU2l6ZSgpOworICAgICAgICBhdG9taWNTdHJvbmdDQVMo
Y29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNo
Z2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5k
ZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c0Zsb2F0aW5nUG9pbnRSb3VuZGluZygpCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM4KFJlZ2lz
dGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRk
cmVzcykKICAgICB7Ci0gICAgICAgIGlmIChzX3NzZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVj
a1N0YXRlOjpOb3RDaGVja2VkKQotICAgICAgICAgICAgdXBkYXRlRWF4MUVjeEZsYWdzKCk7Ci0g
ICAgICAgIHJldHVybiBzX3NzZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVja1N0YXRlOjpTZXQ7
CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3Nl
bWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Up
OyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FWWCgpCisgICAgdm9pZCBh
dG9taWNTdHJvbmdDQVM4KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQg
bmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgLy8gQVZYIHN0aWxs
IGNhdXNlcyBteXN0ZXJpb3VzIHJlZ3Jlc3Npb25zIGFuZCB0aG9zZSByZWdyZXNzaW9ucyBjYW4g
YmUgbWFzc2l2ZS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdG9taWNTdHJvbmdD
QVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1Zh
bHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsgfSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdXBkYXRlRWF4MUVjeEZsYWdz
KCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0gICAgICAg
IGludCBmbGFncyA9IDA7Ci0jaWYgQ09NUElMRVIoTVNWQykKLSAgICAgICAgaW50IGNwdUluZm9b
NF07Ci0gICAgICAgIF9fY3B1aWQoY3B1SW5mbywgMHgxKTsKLSAgICAgICAgZmxhZ3MgPSBjcHVJ
bmZvWzJdOwotI2VsaWYgQ09NUElMRVIoR0NDX09SX0NMQU5HKQotI2lmIENQVShYODZfNjQpCi0g
ICAgICAgIGFzbSAoCi0gICAgICAgICAgICAibW92bCAkMHgxLCAlJWVheDsiCi0gICAgICAgICAg
ICAiY3B1aWQ7IgotICAgICAgICAgICAgIm1vdmwgJSVlY3gsICUwOyIKLSAgICAgICAgICAgIDog
Ij1nIiAoZmxhZ3MpCi0gICAgICAgICAgICA6Ci0gICAgICAgICAgICA6ICIlZWF4IiwgIiVlYngi
LCAiJWVjeCIsICIlZWR4IgotICAgICAgICAgICAgKTsKLSNlbHNlCi0gICAgICAgIGFzbSAoCi0g
ICAgICAgICAgICAibW92bCAkMHgxLCAlJWVheDsiCi0gICAgICAgICAgICAicHVzaGwgJSVlYng7
IgotICAgICAgICAgICAgImNwdWlkOyIKLSAgICAgICAgICAgICJwb3BsICUlZWJ4OyIKLSAgICAg
ICAgICAgICJtb3ZsICUlZWN4LCAlMDsiCi0gICAgICAgICAgICA6ICI9ZyIgKGZsYWdzKQotICAg
ICAgICAgICAgOgotICAgICAgICAgICAgOiAiJWVheCIsICIlZWN4IiwgIiVlZHgiCi0gICAgICAg
ICAgICApOwotI2VuZGlmCisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3Vs
dCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2
KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5k
UmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOwor
ICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMzIoUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxl
ci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0p
OworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMzIoUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNz
ZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hBdG9taWNTdHJvbmdDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRv
bWljU3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVz
dWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZz
ZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdD
QVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3Jt
KG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNv
bmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdW
YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIo
U3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBi
cmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNz
ZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
KTsgfSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVMzMihTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNo
QXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxl
ci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWlj
V2Vha0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1
bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVM4KGNvbmQsIGV4cGVjdGVkQW5kUmVz
dWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21p
Y1dlYWtDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVz
dWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBy
ZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVM4KGNvbmQsIGV4cGVjdGVkQW5k
UmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0
b21pY1dlYWtDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklE
IHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzE2KGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lk
IGF0b21pY1dlYWtDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lz
dGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMTYoY29uZCwgZXhw
ZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAg
IHZvaWQgYXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJl
Z2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMzIoY29uZCwg
ZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKwor
ICAgIHZvaWQgYXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVz
cywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMzMihj
b25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzgo
Y29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVM4KGNvbmQs
IGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2hBdG9taWNXZWFrQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
ZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBl
Y3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoQXRvbWljV2Vha0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVj
dGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBlY3Rl
ZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
QXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVk
QW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIoY29uZCwgZXhwZWN0ZWRBbmRS
ZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21p
Y1dlYWtDQVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJl
c3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIoY29uZCwgZXhwZWN0ZWRBbmRSZXN1
bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ4
KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY0FkZDgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDgoaW1tLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ4KFJlZ2lzdGVySUQgcmVn
LCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIGFkZDgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNB
ZGQ4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY0FkZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkMTYoaW1t
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQxNihUcnVzdGVkSW1t
MzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgYWRkMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNBZGQxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQxNihyZWcsIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5k
ZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
YWRkMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQzMihU
cnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQWRkMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKGltbSwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMzIoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgYWRkMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNBZGQzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKHJlZywgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1Yjgo
aW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWI4KFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBzdWI4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgYXRvbWljU3ViOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI4KHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViOChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1
YjgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWIxNihUcnVz
dGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIHN1YjE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljU3ViMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjE2KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMTYoUmVnaXN0ZXJJRCByZWcs
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgc3ViMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNT
dWIxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjE2KHJlZywgYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljU3ViMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWIzMihp
bW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjMyKFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBzdWIzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1N1YjMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjMyKHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMzIoUmVnaXN0ZXJJRCByZWcsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBzdWIzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDgo
VHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhbmQ4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQW5kOChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kOChpbW0sIGFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDgoUmVnaXN0ZXJJRCByZWcs
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgYW5kOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0Fu
ZDgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ4KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljQW5kMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQxNihpbW0s
IGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDE2KFRydXN0ZWRJbW0z
MiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBhbmQxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY0FuZDE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDE2KHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMTYoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRl
eCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBh
bmQxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDMyKFRy
dXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNBbmQzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIoaW1tLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQzMihSZWdpc3RlcklEIHJl
ZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBhbmQzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y0FuZDMyKFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNPcjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgoaW1t
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjgoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG9yOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY09yOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNPcjgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgocmVnLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgb3IxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y09yMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMTYocmVn
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFJlZ2lzdGVySUQg
cmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgb3IxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY09yMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjMyKGltbSwgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljT3IzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXgg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3Iz
MihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yMzIoUmVnaXN0
ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgb3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY09yMzIoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjMyKHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhv
cjgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3I4KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3I4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljWG9yOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I4KHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yOChSZWdpc3RlcklEIHJlZywgQmFzZUlu
ZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IHhvcjgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3IxNihU
cnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljWG9yMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KGltbSwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMTYoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgeG9yMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNYb3IxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KHJlZywgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3Iz
MihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjMyKFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3IzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hvcjMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjMyKHJlZywgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMzIoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICB4b3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05l
ZzgoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBuZWc4KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzgo
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIG5lZzgoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMTYo
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBuZWcxNihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWcxNihC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgbmVnMTYoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMzIo
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBuZWczMihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWczMihC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgbmVnMzIoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90OChB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIG5vdDgoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90OChCYXNl
SW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAg
ICAgbm90OChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3QxNihBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG5vdDE2KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDE2KEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBub3QxNihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3QzMihBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG5vdDMyKGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDMyKEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBub3QzMihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkOChS
ZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkYl9ybShyZWcsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGdBZGQ4
KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGJfcm0ocmVnLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkMTYoUmVnaXN0ZXJJRCByZWcsIEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIueGFkZHdfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkMTYoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBtX2Fzc2VtYmxlci54YWRkd19ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY1hjaGdBZGQzMihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkbF9y
bShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1hjaGdBZGQzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhh
ZGRsX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwg
YWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzgoUmVnaXN0
ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGJfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnOChSZWdpc3Rl
cklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdiX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljWGNoZzE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LnhjaGd3X3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljWGNoZzE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIueGNoZ3dfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnMzIo
UmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0ocmVnLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnMzIo
UmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ybShyZWcsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3E4KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBsb2FkOChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxvYWRBY3E4KEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IGxvYWQ4KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZEFjcThTaWduZWRF
eHRlbmRUbzMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBs
b2FkOFNpZ25lZEV4dGVuZFRvMzIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBs
b2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbG9hZDhTaWduZWRFeHRlbmRUbzMyKHNyYywgZGVzdCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgbG9hZEFjcTE2KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBsb2FkMTYoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBs
b2FkQWNxMTYoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bG9hZDE2KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZEFjcTE2U2lnbmVk
RXh0ZW5kVG8zMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihzcmMsIGRlc3QpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3EzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgbG9hZEFjcTMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGxvYWQzMihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsOChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmU4KHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw4KFJlZ2lzdGVySUQgc3JjLCBC
YXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIHN0b3JlOChzcmMsIGRlc3QpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHN0b3JlUmVsOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3Qp
CisgICAgeworICAgICAgICBzdG9yZTgoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzdG9yZVJlbDgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAg
ICAgICBzdG9yZTgoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVJlbDE2
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KHNy
YywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwxNihSZWdpc3RlcklEIHNy
YywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KHNyYywgZGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KGltbSwgZGVzdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc3RvcmVSZWwxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAg
ICB7CisgICAgICAgIHN0b3JlMTYoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
dG9yZVJlbDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBz
dG9yZTMyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihSZWdp
c3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTMyKHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihUcnVzdGVkSW1tMzIgaW1t
LCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTMyKGltbSwgZGVzdCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIHN0b3JlMzIoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisg
ICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhhdCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9y
bWFsIHN0b3Jlcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4ODYuCisgICAgdm9pZCBzdG9yZUZlbmNl
KCkKKyAgICB7CisgICAgfQorCisgICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhhdCBpdCBw
cmV2ZW50cyBtb3Rpb24gb2Ygbm9ybWFsIGxvYWRzLiBTbywgaXQncyBhIG5vLW9wIG9uIHg4Ni4K
KyAgICB2b2lkIGxvYWRGZW5jZSgpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJl
cGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9j
YXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVw
bGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGVzdGlu
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJk
aWZmX3QgbWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCk7CisgICAgfQorCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBwYXRjaGFibGVKdW1wU2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjpwYXRjaGFibGVKdW1wU2l6ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzRmxvYXRpbmdQb2ludFJvdW5kaW5nKCkKKyAgICB7CisgICAgICAgIGlmIChzX3Nz
ZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVja1N0YXRlOjpOb3RDaGVja2VkKQorICAgICAgICAg
ICAgdXBkYXRlRWF4MUVjeEZsYWdzKCk7CisgICAgICAgIHJldHVybiBzX3NzZTRfMUNoZWNrU3Rh
dGUgPT0gQ1BVSURDaGVja1N0YXRlOjpTZXQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgc3Vw
cG9ydHNBVlgoKQorICAgIHsKKyAgICAgICAgLy8gQVZYIHN0aWxsIGNhdXNlcyBteXN0ZXJpb3Vz
IHJlZ3Jlc3Npb25zIGFuZCB0aG9zZSByZWdyZXNzaW9ucyBjYW4gYmUgbWFzc2l2ZS4KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUVheDFFY3hG
bGFncygpCisgICAgeworICAgICAgICBpbnQgZmxhZ3MgPSAwOworI2lmIENPTVBJTEVSKE1TVkMp
CisgICAgICAgIGludCBjcHVJbmZvWzRdOworICAgICAgICBfX2NwdWlkKGNwdUluZm8sIDB4MSk7
CisgICAgICAgIGZsYWdzID0gY3B1SW5mb1syXTsKKyNlbGlmIENPTVBJTEVSKEdDQ19PUl9DTEFO
RykKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBhc20gKAorICAgICAgICAgICAgIm1vdmwgJDB4
MSwgJSVlYXg7IgorICAgICAgICAgICAgImNwdWlkOyIKKyAgICAgICAgICAgICJtb3ZsICUlZWN4
LCAlMDsiCisgICAgICAgICAgICA6ICI9ZyIgKGZsYWdzKQorICAgICAgICAgICAgOgorICAgICAg
ICAgICAgOiAiJWVheCIsICIlZWJ4IiwgIiVlY3giLCAiJWVkeCIKKyAgICAgICAgICAgICk7Cisj
ZWxzZQorICAgICAgICBhc20gKAorICAgICAgICAgICAgIm1vdmwgJDB4MSwgJSVlYXg7IgorICAg
ICAgICAgICAgInB1c2hsICUlZWJ4OyIKKyAgICAgICAgICAgICJjcHVpZDsiCisgICAgICAgICAg
ICAicG9wbCAlJWVieDsiCisgICAgICAgICAgICAibW92bCAlJWVjeCwgJTA7IgorICAgICAgICAg
ICAgOiAiPWciIChmbGFncykKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgIDogIiVlYXgiLCAi
JWVjeCIsICIlZWR4IgorICAgICAgICAgICAgKTsKKyNlbmRpZgogI2VuZGlmIC8vIENPTVBJTEVS
KEdDQ19PUl9DTEFORykKICAgICAgICAgc19zc2U0XzFDaGVja1N0YXRlID0gKGZsYWdzICYgKDEg
PDwgMTkpKSA/IENQVUlEQ2hlY2tTdGF0ZTo6U2V0IDogQ1BVSURDaGVja1N0YXRlOjpDbGVhcjsK
ICAgICAgICAgc19hdnhDaGVja1N0YXRlID0gKGZsYWdzICYgKDEgPDwgMjgpKSA/IENQVUlEQ2hl
Y2tTdGF0ZTo6U2V0IDogQ1BVSURDaGVja1N0YXRlOjpDbGVhcjsKQEAgLTI4MzEsNiArMzg3MCwx
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxYODZBc3NlbWJsZXI6
OkNvbmRpdGlvbj4oY29uZCk7CiAgICAgfQogCisgICAgWDg2QXNzZW1ibGVyOjpDb25kaXRpb24g
eDg2Q29uZGl0aW9uKFN0YXR1c0NvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25kKSB7CisgICAgICAgIGNhc2UgU3VjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBYODZB
c3NlbWJsZXI6OkNvbmRpdGlvbkU7CisgICAgICAgIGNhc2UgRmFpbHVyZToKKyAgICAgICAgICAg
IHJldHVybiBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbk5FOworICAgICAgICB9CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6
OkNvbmRpdGlvbkU7CisgICAgfQorCiAgICAgdm9pZCBzZXQzMihYODZBc3NlbWJsZXI6OkNvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogI2lmIENQVShYODYpCkBAIC0yOTI1
LDYgKzM5NzYsMzUgQEAgcHJvdGVjdGVkOgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihzaXpl
T2ZSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIHNyY0lzTm9uWmVyby5saW5rKHRoaXMpOwogICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgYXRvbWljU3Ry
b25nQ0FTKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0
LCBSZWdpc3RlcklEIHJlc3VsdCwgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3
YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBmdW5jKCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRS
ZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgc2V0MzIoeDg2Q29uZGl0aW9uKGNv
bmQpLCByZXN1bHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
dm9pZCBhdG9taWNTdHJvbmdDQVMoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgY29uc3Qg
RnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJl
Z2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBmdW5j
KCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIEp1bXAgYnJhbmNoQXRv
bWljU3Ryb25nQ0FTKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5k
UmVzdWx0LCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgc3dhcChleHBlY3RlZEFu
ZFJlc3VsdCwgWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIGZ1bmMoKTsKKyAgICAgICAgc3dhcChleHBlY3RlZEFuZFJlc3VsdCwgWDg2UmVn
aXN0ZXJzOjplYXgpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29u
ZGl0aW9uKGNvbmQpKSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIC8vIE9ubHkgTWFjcm9Bc3Nl
bWJsZXJYODYgc2hvdWxkIGJlIHVzaW5nIHRoZSBmb2xsb3dpbmcgbWV0aG9kOyBTU0UyIGlzIGFs
d2F5cyBhdmFpbGFibGUgb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2NCwxMSArMjY0LDIxIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7
CiAgICAgfQogCisgICAgdm9pZCBhZGQ2NChCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNl
LCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBhZGQ2NChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkcV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQg
YWRkNjQoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYWRkcV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgs
IGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgYWRkNjQoQWJzb2x1dGVBZGRyZXNzIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHNy
Yy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKQEAgLTMwNiw2ICszMTYsMTQgQEAgcHVibGlj
OgogICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBhZGQ2NChUcnVzdGVkSW1t
MzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlmIChpbW0ubV92YWx1
ZSA9PSAxKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuaW5jcV9tKGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9
CisKICAgICB2b2lkIGFkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRy
ZXNzKQogICAgIHsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBz
Y3JhdGNoUmVnaXN0ZXIoKSk7CkBAIC0zNDIsMTEgKzM2MCw0MSBAQCBwdWJsaWM6CiAgICAgICAg
IG1fYXNzZW1ibGVyLmFuZHFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDY0
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5hbmRxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmQ2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5hbmRxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRl
eCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ2NChBZGRyZXNzIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9tcihzcmMub2Zm
c2V0LCBzcmMuYmFzZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhbmQ2NChCYXNlSW5kZXgg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX21y
KHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAg
fQorCiAgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3Qp
CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX2lyKGltbS5tX3ZhbHVlLCBzcmNEZXN0
KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfaW0oaW1tLm1fdmFsdWUsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX2lt
KGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNj
YWxlKTsKKyAgICB9CisKICAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3Rl
cklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBpbnRwdHJfdCBpbnRWYWx1ZSA9IGltbS5hc0lu
dHB0cigpOwpAQCAtNTUyLDExICs2MDAsNTEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxl
ci5uZWdxX3IoZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBuZWc2NChBZGRyZXNzIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWdxX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7
CisgICAgfQorCisgICAgdm9pZCBuZWc2NChCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5lZ3FfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBk
ZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9ycihzcmMsIGRlc3Qp
OwogICAgIH0KIAorICAgIHZvaWQgb3I2NChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9ybShzcmMsIGRlc3Qub2Zmc2V0
LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQg
b3I2NChBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIub3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIG9yNjQoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIub3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5z
Y2FsZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEFk
ZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9pbShpbW0ubV92YWx1
ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JxX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBk
ZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVn
aXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgaWYgKGltbS5tX3ZhbHVlIDw9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpCkBAIC02MTksMTYgKzcwNywzMSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3ViNjQoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJx
X2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHN1YjY0KEFkZHJlc3Mgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX21yKHNy
Yy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjY0KEJhc2VJ
bmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1
YnFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsK
KyAgICB9CisKICAgICB2b2lkIHN1YjY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdWI2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX3JtKHNyYywgZGVzdC5vZmZz
ZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9p
ZCB4b3I2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAg
bV9hc3NlbWJsZXIueG9ycV9ycihzcmMsIGRlc3QpOwpAQCAtNjUxLDYgKzc1NCwzMSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjY0KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfcm0oc3JjLCBkZXN0Lm9mZnNl
dCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lk
IHhvcjY0KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54b3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIHhvcjY0KEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnhvcnFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwg
c3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfaW0oaW1t
Lm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9y
NjQoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54b3JxX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0
LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnhv
cnFfaXIoaW1tLm1fdmFsdWUsIHNyY0Rlc3QpOwpAQCAtNjY2LDYgKzc5NCwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vdHFfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdDY0KEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm90cV9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Qu
c2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgbG9hZDY0KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNz
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX21yKGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGRlc3QpOwpAQCAtNzI1LDYgKzg1OCwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfaTMybShpbW0ubV92YWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdG9yZTY0KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92cV9pMzJtKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBh
ZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHN0b3JlNjQo
VHJ1c3RlZEltbTY0IGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAg
ICBpZiAoQ0FOX1NJR05fRVhURU5EXzMyXzY0KGltbS5tX3ZhbHVlKSkgewpAQCAtMTI5NCw3ICsx
NDMyLDI1NSBAQCBwdWJsaWM6CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjptb3Zl
KFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKICAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpicmFuY2hUZXN0OChjb25kLCBBZGRy
ZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSwgbWFzazgpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVk
QW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVl
LCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBh
dG9taWNTdHJvbmdDQVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lz
dGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVj
dGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1Zh
bHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM2NChSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsm
XSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM2NChSZWdp
c3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXgg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3Vs
dCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9
CiAKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FT
KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hncV9ybShu
ZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25k
LCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFs
dWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Mu
c2NhbGUpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVM2NChTdGF0dXNDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdW
YWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAg
IGF0b21pY1N0cm9uZ0NBUzY0KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRk
cmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVM2NChTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVl
LCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljV2Vha0NB
UzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBS
ZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1
cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1Zh
bHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM2NChT
dGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0
ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4g
YnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVl
LCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY0FkZDY0KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgYWRkNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNBZGQ2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkNjQoaW1tLCBhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ2
NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDY0KFJlZ2lz
dGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvY2soKTsKKyAgICAgICAgYWRkNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNTdWI2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjY0KGltbSwgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViNjQoVHJ1c3RlZEltbTMyIGltbSwg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIHN1YjY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWlj
U3ViNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNTdWI2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjY0KHJl
ZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBhbmQ2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY0FuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ2NChpbW0sIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDY0KFJlZ2lzdGVySUQgcmVnLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IGFuZDY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQo
UmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhbmQ2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY09yNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjY0KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I2NChUcnVzdGVkSW1tMzIgaW1t
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgb3I2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y09yNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY09yNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjY0KHJlZywg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yNjQoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICB4b3I2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1hvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I2NChpbW0sIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjY0KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhv
cjY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yNjQoUmVn
aXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3I2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY05lZzY0KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnNjQoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljTmVnNjQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY05vdDY0KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90NjQoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljTm90NjQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hjaGdBZGQ2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54
YWRkcV9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY1hjaGdBZGQ2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLnhhZGRxX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzY0
KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JtKHJlZywgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzY0
KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3Ffcm0ocmVnLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBsb2FkQWNxNjQoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGxvYWQ2NChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGxvYWRBY3E2NChCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBsb2FkNjQoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVJlbDY0
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KHNy
YywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw2NChSZWdpc3RlcklEIHNy
YywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KHNyYywgZGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KGltbSwgZGVzdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc3RvcmVSZWw2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAg
ICB7CisgICAgICAgIHN0b3JlNjQoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCB0
cnVuY2F0ZURvdWJsZVRvVWludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmN2dHRzZDJzaXFfcnIoc3JjLCBkZXN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZB
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5MCwxNiArMTkwLDIwIEBAIHBy
aXZhdGU6CiAgICAgICAgIE9QX0FERF9Fdkd2ICAgICAgICAgICAgICAgICAgICAgPSAweDAxLAog
ICAgICAgICBPUF9BRERfR3ZFdiAgICAgICAgICAgICAgICAgICAgID0gMHgwMywKICAgICAgICAg
T1BfQUREX0VBWEl2ICAgICAgICAgICAgICAgICAgICA9IDB4MDUsCisgICAgICAgIE9QX09SX0V2
R2IgICAgICAgICAgICAgICAgICAgICAgPSAweDA4LAogICAgICAgICBPUF9PUl9Fdkd2ICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwOSwKICAgICAgICAgT1BfT1JfR3ZFdiAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MEIsCiAgICAgICAgIE9QX09SX0VBWEl2ICAgICAgICAgICAgICAgICAgICAg
PSAweDBELAogICAgICAgICBPUF8yQllURV9FU0NBUEUgICAgICAgICAgICAgICAgID0gMHgwRiwK
KyAgICAgICAgT1BfQU5EX0V2R2IgICAgICAgICAgICAgICAgICAgICA9IDB4MjAsCiAgICAgICAg
IE9QX0FORF9Fdkd2ICAgICAgICAgICAgICAgICAgICAgPSAweDIxLAogICAgICAgICBPUF9BTkRf
R3ZFdiAgICAgICAgICAgICAgICAgICAgID0gMHgyMywKKyAgICAgICAgT1BfU1VCX0V2R2IgICAg
ICAgICAgICAgICAgICAgICA9IDB4MjgsCiAgICAgICAgIE9QX1NVQl9Fdkd2ICAgICAgICAgICAg
ICAgICAgICAgPSAweDI5LAogICAgICAgICBPUF9TVUJfR3ZFdiAgICAgICAgICAgICAgICAgICAg
ID0gMHgyQiwKICAgICAgICAgT1BfU1VCX0VBWEl2ICAgICAgICAgICAgICAgICAgICA9IDB4MkQs
CiAgICAgICAgIFBSRV9QUkVESUNUX0JSQU5DSF9OT1RfVEFLRU4gICAgPSAweDJFLAorICAgICAg
ICBPUF9YT1JfRXZHYiAgICAgICAgICAgICAgICAgICAgID0gMHgzMCwKICAgICAgICAgT1BfWE9S
X0V2R3YgICAgICAgICAgICAgICAgICAgICA9IDB4MzEsCiAgICAgICAgIE9QX1hPUl9HdkV2ICAg
ICAgICAgICAgICAgICAgICAgPSAweDMzLAogICAgICAgICBPUF9YT1JfRUFYSXYgICAgICAgICAg
ICAgICAgICAgID0gMHgzNSwKQEAgLTIyMyw2ICsyMjcsNyBAQCBwcml2YXRlOgogICAgICAgICBP
UF9HUk9VUDFfRXZJYiAgICAgICAgICAgICAgICAgID0gMHg4MywKICAgICAgICAgT1BfVEVTVF9F
YkdiICAgICAgICAgICAgICAgICAgICA9IDB4ODQsCiAgICAgICAgIE9QX1RFU1RfRXZHdiAgICAg
ICAgICAgICAgICAgICAgPSAweDg1LAorICAgICAgICBPUF9YQ0hHX0V2R2IgICAgICAgICAgICAg
ICAgICAgID0gMHg4NiwKICAgICAgICAgT1BfWENIR19Fdkd2ICAgICAgICAgICAgICAgICAgICA9
IDB4ODcsCiAgICAgICAgIE9QX01PVl9FYkdiICAgICAgICAgICAgICAgICAgICAgPSAweDg4LAog
ICAgICAgICBPUF9NT1ZfRXZHdiAgICAgICAgICAgICAgICAgICAgID0gMHg4OSwKQEAgLTI1Miw2
ICsyNTcsNyBAQCBwcml2YXRlOgogICAgICAgICBQUkVfU1NFX0YyICAgICAgICAgICAgICAgICAg
ICAgID0gMHhGMiwKICAgICAgICAgUFJFX1NTRV9GMyAgICAgICAgICAgICAgICAgICAgICA9IDB4
RjMsCiAgICAgICAgIE9QX0hMVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweEY0LAorICAg
ICAgICBPUF9HUk9VUDNfRWIgICAgICAgICAgICAgICAgICAgID0gMHhGNiwKICAgICAgICAgT1Bf
R1JPVVAzX0ViSWIgICAgICAgICAgICAgICAgICA9IDB4RjYsCiAgICAgICAgIE9QX0dST1VQM19F
diAgICAgICAgICAgICAgICAgICAgPSAweEY3LAogICAgICAgICBPUF9HUk9VUDNfRXZJeiAgICAg
ICAgICAgICAgICAgID0gMHhGNywgLy8gT1BfR1JPVVAzX0V2IGhhcyBhbiBpbW1lZGlhdGUsIHdo
ZW4gaW5zdHJ1Y3Rpb24gaXMgYSB0ZXN0LiAKQEAgLTI5MCw2ICsyOTYsOCBAQCBwcml2YXRlOgog
ICAgICAgICBPUF9TRVRDQyAgICAgICAgICAgID0gMHg5MCwKICAgICAgICAgT1AyXzNCWVRFX0VT
Q0FQRV9BRSA9IDB4QUUsCiAgICAgICAgIE9QMl9JTVVMX0d2RXYgICAgICAgPSAweEFGLAorICAg
ICAgICBPUDJfQ01QWENIR2IgICAgICAgID0gMHhCMCwKKyAgICAgICAgT1AyX0NNUFhDSEcgICAg
ICAgICA9IDB4QjEsCiAgICAgICAgIE9QMl9NT1ZaWF9HdkViICAgICAgPSAweEI2LAogICAgICAg
ICBPUDJfQlNGICAgICAgICAgICAgID0gMHhCQywKICAgICAgICAgT1AyX1RaQ05UICAgICAgICAg
ICA9IDB4QkMsCkBAIC0yOTgsNiArMzA2LDggQEAgcHJpdmF0ZToKICAgICAgICAgT1AyX01PVlNY
X0d2RWIgICAgICA9IDB4QkUsCiAgICAgICAgIE9QMl9NT1ZaWF9HdkV3ICAgICAgPSAweEI3LAog
ICAgICAgICBPUDJfTU9WU1hfR3ZFdyAgICAgID0gMHhCRiwKKyAgICAgICAgT1AyX1hBRERiICAg
ICAgICAgICA9IDB4QzAsCisgICAgICAgIE9QMl9YQUREICAgICAgICAgICAgPSAweEMxLAogICAg
ICAgICBPUDJfUEVYVFJXX0dkVWRJYiAgID0gMHhDNSwKICAgICAgICAgT1AyX1BTTExRX1VkcUli
ICAgICA9IDB4NzMsCiAgICAgICAgIE9QMl9QU1JMUV9VZHFJYiAgICAgPSAweDczLApAQCAtNDQw
LDYgKzQ1MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9B
RERfR3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGFkZGxf
bXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0FERF9HdkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9Cisg
ICAgCiAjaWYgIUNQVShYODZfNjQpCiAgICAgdm9pZCBhZGRsX21yKGNvbnN0IHZvaWQqIGFkZHIs
IFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTU2MiwxMSArNTc3LDIxIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0d2RXYsIGRzdCwgYmFzZSwgb2Zm
c2V0KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0d2RXYsIGRzdCwgYmFzZSwg
aW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYWRkcV9ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CiAKKyAgICB2b2lkIGFkZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNj
YWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYWRkcV9pcihpbnQgaW1tLCBSZWdpc3Rl
cklEIGRzdCkKICAgICB7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7
CkBAIC01OTEsNiArNjE2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTMyKGltbSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICB2b2lkIGFkZHFfaW0oaW50
IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgewor
ICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQ
MV9PUF9BREQsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9y
bWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfQURELCBiYXNl
LCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlh
dGUzMihpbW0pOworICAgICAgICB9CisgICAgfQogI2Vsc2UKICAgICB2b2lkIGFkZGxfaW0oaW50
IGltbSwgY29uc3Qgdm9pZCogYWRkcikKICAgICB7CkBAIC02MTQsMTEgKzY1MCw0MyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfR3ZFdiwgZHN0LCBiYXNl
LCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgYW5kbF9tcihpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0d2RXYsIGRzdCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYW5kbF9ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAg
ICAgfQogCisgICAgdm9pZCBhbmRsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBhbmR3X3JtKFJlZ2lzdGVySUQgc3JjLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5w
cmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIGFuZGxfcm0oc3JjLCBvZmZzZXQsIGJh
c2UpOworICAgIH0KKworICAgIHZvaWQgYW5kd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIGFu
ZGxfcm0oc3JjLCBvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmRiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0V2R2IsIHNyYywgYmFz
ZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZGJfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9FdkdiLCBzcmMsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIGFuZGxfaXIoaW50
IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5E
XzhfMzIoaW1tKSkgewpAQCAtNjQxLDYgKzcwOSw1MyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAKKyAgICB2b2lkIGFuZGxfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FO
X1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2
SXosIEdST1VQMV9PUF9BTkQsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIGFuZHdfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAg
ICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBvZmZzZXQp
OworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBH
Uk9VUDFfT1BfQU5ELCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1t
ZWRpYXRlMTYoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYW5kd19pbShpbnQg
aW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBz
Y2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpF
KTsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX0FORCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRp
YXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUs
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUxNihpbW0pOworICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCBhbmRiX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9H
Uk9VUDFfRWJJYiwgR1JPVVAxX09QX0FORCwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKworICAgIHZvaWQgYW5kYl9pbShpbnQgaW1t
LCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2Fs
ZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwg
R1JPVVAxX09QX0FORCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICBtX2Zv
cm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2
b2lkIGFuZHFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTY1
Nyw2ICs3NzIsNDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRl
MzIoaW1tKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHZvaWQgYW5kcV9tcihpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wNjQoT1BfQU5EX0d2RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3Rl
cklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQU5EX0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgYW5kcV9ybShSZWdpc3RlcklEIHNyYywgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIGFuZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKworICAgIHZvaWQgYW5kcV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkg
eworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdS
T1VQMV9PUF9BTkQsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1l
ZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX0FORCwgYmFzZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2b2lkIGFuZHFfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FO
X1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9BTkQsIGJhc2UsIGluZGV4LCBzY2FsZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQ
MV9Fdkl6LCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAg
ICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQog
I2Vsc2UKICAgICB2b2lkIGFuZGxfaW0oaW50IGltbSwgY29uc3Qgdm9pZCogYWRkcikKICAgICB7
CkBAIC03MDMsNiArODYwLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0dST1VQNV9FdiwgR1JPVVAxX09QX0FERCwgYmFzZSwgb2Zmc2V0KTsK
ICAgICB9CisKKyAgICB2b2lkIGluY3FfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcDY0KE9QX0dST1VQNV9FdiwgR1JPVVAxX09QX0FERCwgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KICNlbmRpZiAvLyBDUFUoWDg2XzY0KQogCiAgICAgdm9pZCBuZWds
X3IoUmVnaXN0ZXJJRCBkc3QpCkBAIC03MTUsNiArODc3LDE2IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JPVVAzX09QX05F
RywgZHN0KTsKICAgICB9CisKKyAgICB2b2lkIG5lZ3FfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNf
RXYsIEdST1VQM19PUF9ORUcsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBuZWdx
X20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYs
IEdST1VQM19PUF9ORUcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5k
aWYKIAogICAgIHZvaWQgbmVnbF9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKQEAgLTcy
Miw2ICs4OTQsMzMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1Bf
R1JPVVAzX0V2LCBHUk9VUDNfT1BfTkVHLCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZv
aWQgbmVnbF9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQ
M19FdiwgR1JPVVAzX09QX05FRywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0K
KworICAgIHZvaWQgbmVnd19tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbmVn
bF9tKG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBuZWd3X20oaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG5lZ2xf
bShvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBuZWdiX20o
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQM19FYiwgR1JPVVAzX09QX05FRywgYmFzZSwgb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICB2b2lkIG5lZ2JfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcChPUF9HUk9VUDNfRWIsIEdST1VQM19PUF9ORUcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICB9CisKICAgICB2b2lkIG5vdGxfcihSZWdpc3RlcklEIGRzdCkKICAgICB7CiAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1Qs
IGRzdCk7CkBAIC03MzIsNiArOTMxLDMzIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQM19FdiwgR1JPVVAzX09QX05PVCwgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdGxfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG5vdHdfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIG5vdGxfbShvZmZzZXQsIGJhc2UpOworICAgIH0KKworICAgIHZvaWQgbm90d19t
KGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOwor
ICAgICAgICBub3RsX20ob2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAg
IHZvaWQgbm90Yl9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRWIsIEdST1VQM19PUF9OT1QsIGJhc2Us
IG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBub3RiX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0ViLCBHUk9VUDNfT1BfTk9ULCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2b2lkIG5v
dHFfcihSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC03NDIsNiArOTY4LDExIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JP
VVAzX09QX05PVCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CisKKyAgICB2b2lkIG5vdHFfbShpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JPVVAz
X09QX05PVCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KICNlbmRpZgogCiAg
ICAgdm9pZCBvcmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpAQCAtNzU0LDEx
ICs5ODUsNDMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1Jf
R3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgb3JsX21yKGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9PUl9H
dkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lk
IG9ybF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAg
IHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R3YsIHNyYywgYmFzZSwg
b2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIG9ybF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfRXZHdiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBvcndfcm0oUmVnaXN0ZXJJ
RCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgb3JsX3JtKHNyYywgb2Zm
c2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yd19ybShSZWdpc3RlcklEIHNyYywgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAg
ICAgIG9ybF9ybShzcmMsIG9mZnNldCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R2IsIHNyYywg
YmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yYl9ybShSZWdpc3RlcklEIHNyYywg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfRXZHYiwgc3JjLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBvcmxfaXIoaW50
IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5E
XzhfMzIoaW1tKSkgewpAQCAtNzg0LDEyICsxMDQ3LDEwMSBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICB2b2lkIG9ybF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIGlmIChD
QU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9F
dkl6LCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIG9yd19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAg
IGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJeiwgR1JP
VVAxX09QX09SLCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRp
YXRlMTYoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgb3J3X2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOwor
ICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIGlu
ZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgo
aW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX09SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNl
dCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBvcmJfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9F
YkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7
CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwgR1JPVVAxX09Q
X09SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0KQogICAgIHZvaWQgb3JxX3Jy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcDY0KE9QX09SX0V2R3YsIHNyYywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lk
IG9ycV9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfT1JfR3ZFdiwgZHN0LCBiYXNl
LCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgb3JxX21yKGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX09SX0d2RXYsIGRzdCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgb3JxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9PUl9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7Cisg
ICAgfQorCisgICAgdm9pZCBvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfT1JfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBvcnFfaW0oaW50IGltbSwgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84
XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQ
MV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX09SLCBiYXNlLCBv
ZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgb3JxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
aWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9Q
X0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAg
ICB9CisKICAgICB2b2lkIG9ycV9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAg
ICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC04MzEsMTEgKzExODMs
NDMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0d2RXYs
IGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YmxfbXIoaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9HdkV2
LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIHN1
Ymxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7
CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBv
ZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgc3VibF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwg
aW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgc3Vid19ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3AoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIHN1Yndfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
cHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3Ao
T1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwor
ICAgIHZvaWQgc3ViYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9FdkdiLCBz
cmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBzdWJiX3JtKFJlZ2lzdGVySUQg
c3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBz
Y2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHYiwg
c3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBzdWJs
X2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdO
X0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTg2MSw2ICsxMjQ1LDUzIEBAIHB1YmxpYzoKICAgICAg
ICAgfQogICAgIH0KIAorICAgIHZvaWQgc3VibF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9TVUIsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9H
Uk9VUDFfRXZJeiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOwor
ICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgc3Vid19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9TVUIsIGJhc2Us
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0V2SXosIEdST1VQMV9PUF9TVUIsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWJ3
X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1Bf
U1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9TVUIsIGJhc2UsIGluZGV4
LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTE2KGlt
bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHN1YmJfaW0oaW50IGltbSwgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX0dST1VQMV9FYkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBvZmZzZXQpOworICAgICAg
ICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCisgICAgdm9pZCBzdWJiX2lt
KGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQ
MV9FYkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0
KQogICAgIHZvaWQgc3VicV9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ewpAQCAtODcyLDExICsxMzAzLDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfU1VCX0d2RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2
b2lkIHN1YnFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4
LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfU1VCX0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKwogICAgIHZvaWQgc3VicV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQo
T1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YnFf
cm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
NjQoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0K
KwogICAgIHZvaWQgc3VicV9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAg
ICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC05MDEsNiArMTM0MiwxNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOwogICAg
ICAgICB9CiAgICAgfQorCisgICAgdm9pZCBzdWJxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAg
ICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGlt
bSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZz
ZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAg
fQorICAgIH0KICNlbHNlCiAgICAgdm9pZCBzdWJsX2ltKGludCBpbW0sIGNvbnN0IHZvaWQqIGFk
ZHIpCiAgICAgewpAQCAtOTI0LDExICsxMzc2LDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX1hPUl9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CiAgICAgfQog
CisgICAgdm9pZCB4b3JsX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLm9uZUJ5dGVPcChPUF9YT1JfR3ZFdiwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgfQorCiAgICAgdm9pZCB4b3JsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3AoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHhv
cmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0
ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hPUl9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CisKICAgICB2b2lkIHhvcmxfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTk0
MCw2ICsxNDAyLDc1IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgeG9y
bF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5k
ZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihp
bW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIs
IEdST1VQMV9PUF9YT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1hPUiwg
YmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1t
ZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgeG9yd19ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICB4b3JsX3JtKHNy
Yywgb2Zmc2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcndfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNj
YWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUp
OworICAgICAgICB4b3JsX3JtKHNyYywgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAg
IH0KKworICAgIHZvaWQgeG9yd19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9YT1IsIGJhc2Us
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0V2SXosIEdST1VQMV9PUF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB4b3J3
X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1Bf
WE9SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9YT1IsIGJhc2UsIGluZGV4
LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTE2KGlt
bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHhvcmJfcm0oUmVnaXN0ZXJJRCBzcmMs
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcChPUF9YT1JfRXZHYiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAg
IHZvaWQgeG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfWE9SX0V2R2IsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKworICAgIHZvaWQgeG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0ViSWIsIEdST1VQMV9PUF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVy
LmltbWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcmJfaW0oaW50IGltbSwgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQ
MV9PUF9YT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0
ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKwogICAgIHZvaWQgeG9ybF9pcihpbnQgaW1tLCBS
ZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihp
bW0pKSB7CkBAIC05NzQsMTEgKzE1MDUsNDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
ICAgIAorICAgIHZvaWQgeG9ycV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9P
UF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4
KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCB4b3JxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9T
SUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFf
RXZJeiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKICAgICB2b2lkIHhvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hPUl9F
dkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCB4b3JxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hP
Ul9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIHhvcnFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YT1JfR3ZFdiwgZGVz
dCwgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcnFfbXIoaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hPUl9HdkV2
LCBkZXN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAg
ICB2b2lkIGx6Y250X3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKQEAgLTE1ODYs
MTEgKzIxNTMsMzggQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgeGNoZ2Jfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R2IsIHNyYywgYmFzZSwgb2Zmc2V0KTsK
KyAgICB9CisKKyAgICB2b2lkIHhjaGdiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R2IsIHNyYywgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgeGNoZ3dfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQg
eGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVn
aXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJl
Zml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1Bf
WENIR19Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAg
ICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBz
cmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCB4Y2hnbF9ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2
LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICNpZiBDUFUoWDg2
XzY0KQogICAgIHZvaWQgeGNoZ3FfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQog
ICAgIHsKQEAgLTE2MDYsNiArMjIwMCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CisKKyAgICB2b2lkIHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIG1vdmxfcnIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpAQCAtMTczMSw2ICsyMzMwLDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wOChPUF9NT1ZfRXZHdiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBtb3Z3X2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
LnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0dST1VQMTFfRXZJeiwgR1JPVVAxMV9NT1YsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1f
Zm9ybWF0dGVyLmltbWVkaWF0ZTE2KGltbSk7CisgICAgfQorCisgICAgdm9pZCBtb3Z3X2ltKGlu
dCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50
IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJ
WkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxMV9Fdkl6LCBHUk9V
UDExX01PViwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGUxNihpbW0pOworICAgIH0KKwogICAgIHZvaWQgbW92bF9FQVhtKGNvbnN0IHZv
aWQqIGFkZHIpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfTU9WX092
RUFYKTsKQEAgLTE4MDAsNiArMjQxMywxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVy
LmltbWVkaWF0ZTMyKGltbSk7CiAgICAgfQogCisgICAgdm9pZCBtb3ZxX2kzMm0oaW50IGltbSwg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDExX0V2SXos
IEdST1VQMTFfTU9WLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIG1fZm9y
bWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgfQorCiAgICAgdm9pZCBtb3ZxX2k2NHIoaW50
NjRfdCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfTU9WX0VBWEl2LCBkc3QpOwpAQCAtMjc3NSw2ICszMzk0LDkwIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9MT0NLKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBjbXB4Y2hnYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfQ01QWENI
R2IsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnYl9y
bShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklE
IGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4
KE9QMl9DTVBYQ0hHYiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY21weGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BF
UkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9DTVBYQ0hHLCBz
cmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY21weGNoZ3dfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNy
YywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNt
cHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFz
ZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnbF9ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcs
IHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGNtcHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Up
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfQ01QWENIRywgc3Jj
LCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9D
TVBYQ0hHLCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCB4YWRkYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfWEFERGIsIHNy
YywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkYl9ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBp
bnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KE9QMl9YQURE
Yiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgeGFkZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9YQURELCBzcmMsIGJhc2UsIG9mZnNldCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRsX3JtKFJlZ2lzdGVySUQgc3JjLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50
d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCB4YWRkbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci50d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2
NChPUDJfWEFERCwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhh
ZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5
dGVPcDY0KE9QMl9YQURELCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCBtZmVuY2UoKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIudGhy
ZWVCeXRlT3AoT1AyXzNCWVRFX0VTQ0FQRV9BRSwgT1AzX01GRU5DRSk7CkBAIC0zNzUxLDYgKzQ0
NTQsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHdyaXRlci5yZWdpc3Rlck1vZFJNKGdyb3Vw
T3AsIHJtKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgdHdvQnl0ZU9wOChUd29CeXRlT3Bj
b2RlSUQgb3Bjb2RlLCBpbnQgcmVnLCBSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFNpbmdsZUluc3RydWN0aW9uQnVmZmVyV3JpdGVyIHdyaXRlciht
X2J1ZmZlcik7CisgICAgICAgICAgICB3cml0ZXIuZW1pdFJleElmKGJ5dGVSZWdSZXF1aXJlc1Jl
eChyZWcsIGJhc2UpLCByZWcsIDAsIGJhc2UpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5dGVV
bmNoZWNrZWQoT1BfMkJZVEVfRVNDQVBFKTsKKyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRlVW5j
aGVja2VkKG9wY29kZSk7CisgICAgICAgICAgICB3cml0ZXIubWVtb3J5TW9kUk0ocmVnLCBiYXNl
LCBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB0d29CeXRlT3A4KFR3b0J5dGVP
cGNvZGVJRCBvcGNvZGUsIGludCByZWcsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlLCBpbnQgb2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBTaW5nbGVJ
bnN0cnVjdGlvbkJ1ZmZlcldyaXRlciB3cml0ZXIobV9idWZmZXIpOworICAgICAgICAgICAgd3Jp
dGVyLmVtaXRSZXhJZihieXRlUmVnUmVxdWlyZXNSZXgocmVnKSB8fCByZWdSZXF1aXJlc1JleChp
bmRleCwgYmFzZSksIHJlZywgaW5kZXgsIGJhc2UpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5
dGVVbmNoZWNrZWQoT1BfMkJZVEVfRVNDQVBFKTsKKyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRl
VW5jaGVja2VkKG9wY29kZSk7CisgICAgICAgICAgICB3cml0ZXIubWVtb3J5TW9kUk0ocmVnLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBJbW1l
ZGlhdGVzOgogICAgICAgICAvLwogICAgICAgICAvLyBBbiBpbW1lZGFpdGUgc2hvdWxkIGJlIGFw
cGVuZGVkIHdoZXJlIGFwcHJvcHJpYXRlIGFmdGVyIGFuIG9wIGhhcyBiZWVuIGVtaXR0ZWQuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQXRvbWlj
VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitBdG9taWNWYWx1ZTo6fkF0b21pY1ZhbHVlKCkKK3sKK30KKworV2lkdGggQXRv
bWljVmFsdWU6OmFjY2Vzc1dpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93aWR0aDsKK30K
Kwordm9pZCBBdG9taWNWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoY29tbWEsICJ3aWR0aCA9ICIsIG1f
d2lkdGgpOworICAgIAorICAgIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShjb21tYSwgb3V0KTsKK30K
KworVmFsdWUqIEF0b21pY1ZhbHVlOjpjbG9uZUltcGwoKSBjb25zdAoreworICAgIHJldHVybiBu
ZXcgQXRvbWljVmFsdWUoKnRoaXMpOworfQorCitBdG9taWNWYWx1ZTo6QXRvbWljVmFsdWUoS2lu
ZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBXaWR0aCB3aWR0aCwgVmFsdWUqIG9wZXJhbmQsIFZhbHVl
KiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNrZWRPcGNv
ZGUsIGtpbmQsIG9wZXJhbmQtPnR5cGUoKSwgb3JpZ2luLCBvZmZzZXQsIG9wZXJhbmQsIHBvaW50
ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIHNldEZlbmNlUmFuZ2UoSGVhcFJhbmdl
Ojp0b3AoKSk7CisgICAgCisgICAgQVNTRVJUKGJlc3RUeXBlKEdQLCBvcGVyYXRpb25XaWR0aCgp
KSA9PSBvcGVyYXRpb25UeXBlKCkpOworICAgIAorICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkg
eworICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAg
Y2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRv
bWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworQXRvbWlj
VmFsdWU6OkF0b21pY1ZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgV2lkdGggd2lkdGgs
IFZhbHVlKiBleHBlY3RlZFZhbHVlLCBWYWx1ZSogbmV3VmFsdWUsIFZhbHVlKiBwb2ludGVyLCBp
bnQzMl90IG9mZnNldCkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIGtp
bmQub3Bjb2RlKCkgPT0gQXRvbWljV2Vha0NBUyA/IEludDMyIDogZXhwZWN0ZWRWYWx1ZS0+dHlw
ZSgpLCBvcmlnaW4sIG9mZnNldCwgZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUsIHBvaW50ZXIpCisg
ICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIHNldEZlbmNlUmFuZ2UoSGVhcFJhbmdlOjp0b3Ao
KSk7CisgICAgCisgICAgQVNTRVJUKGJlc3RUeXBlKEdQLCBvcGVyYXRpb25XaWR0aCgpKSA9PSBv
cGVyYXRpb25UeXBlKCkpOworCisgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7CisgICAgY2Fz
ZSBBdG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKyNpbmNsdWRlICJCM1dpZHRoLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBBdG9taWNW
YWx1ZSA6IHB1YmxpYyBNZW1vcnlWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNj
ZXB0cyhLaW5kIGtpbmQpCisgICAgeworICAgICAgICByZXR1cm4gaXNBdG9taWMoa2luZC5vcGNv
ZGUoKSk7CisgICAgfQorICAgIAorICAgIH5BdG9taWNWYWx1ZSgpOworICAgIAorICAgIFR5cGUg
b3BlcmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGNoaWxkKDApLT50eXBlKCk7IH0KKyAgICAK
KyAgICBXaWR0aCBvcGVyYXRpb25XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAg
ICAKKyAgICAvLyBTeW5vbnltIGZvciBvcGVyYXRpb25XaWR0aCgpLCBpZiB5b3UncmUgYWNjZXNz
aW5nIHZpYSBNZW1vcnlWYWx1ZS4KKyAgICBXaWR0aCBhY2Nlc3NXaWR0aCgpIGNvbnN0IG92ZXJy
aWRlOworICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwg
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBWYWx1ZSogY2xvbmVJbXBs
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9j
ZWR1cmU7CisgICAgCisgICAgQXRvbWljVmFsdWUoS2luZCwgT3JpZ2luLCBXaWR0aCwgVmFsdWUq
IG9wZXJhbmQsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAgIAorICAg
IEF0b21pY1ZhbHVlKEtpbmQsIE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBleHBlY3RlZFZhbHVlLCBW
YWx1ZSogbmV3VmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApOworICAg
IAorICAgIFdpZHRoIG1fd2lkdGg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDcgQEAgY2xh
c3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBJbnNlcnRpb25TZXQ7CiBjbGFzcyBQcm9jZWR1
cmU7CiBjbGFzcyBWYWx1ZTsKK3RlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBHZW5lcmljQmxvY2tJ
bnNlcnRpb25TZXQ7CiAKIGNsYXNzIEJhc2ljQmxvY2sgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEJhc2ljQmxvY2spOwpAQCAtMTU4LDYgKzE1OSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7
CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4gZnJp
ZW5kIGNsYXNzIEdlbmVyaWNCbG9ja0luc2VydGlvblNldDsKICAgICAKICAgICAvLyBJbnN0YW50
aWF0ZSB2aWEgUHJvY2VkdXJlLgogICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJs
ZSBmcmVxdWVuY3kpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNl
cnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Js
b2NrSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDM1ICsz
NiwxMyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIEJsb2NrSW5zZXJ0aW9u
U2V0OjpCbG9ja0luc2VydGlvblNldChQcm9jZWR1cmUgJnByb2MpCi0gICAgOiBtX3Byb2MocHJv
YykKKyAgICA6IEdlbmVyaWNCbG9ja0luc2VydGlvblNldChwcm9jLm1fYmxvY2tzKQorICAgICwg
bV9wcm9jKHByb2MpCiB7CiB9CiAKIEJsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25T
ZXQoKSB7IH0KIAotdm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KEJsb2NrSW5zZXJ0aW9u
JiYgaW5zZXJ0aW9uKQotewotICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoV1RGTW92ZShpbnNlcnRp
b24pKTsKLX0KLQotQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCh1bnNpZ25l
ZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNC
bG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIGZyZXF1ZW5jeSkpOwotICAgIEJh
c2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOwotICAgIGluc2VydChCbG9ja0luc2VydGlv
bihpbmRleCwgV1RGTW92ZShibG9jaykpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1CYXNp
Y0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9y
ZSwgZG91YmxlIGZyZXF1ZW5jeSkKLXsKLSAgICByZXR1cm4gaW5zZXJ0KGJlZm9yZS0+aW5kZXgo
KSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGJlZm9yZS0+ZnJlcXVlbmN5
KCkpOwotfQotCi1CYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QWZ0ZXIoQmFz
aWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBmcmVxdWVuY3kpCi17Ci0gICAgcmV0dXJuIGluc2VydChh
ZnRlci0+aW5kZXgoKSArIDEsIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBh
ZnRlci0+ZnJlcXVlbmN5KCkpOwotfQotCiBCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6
c3BsaXRGb3J3YXJkKAogICAgIEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCYgdmFsdWVJbmRl
eCwgSW5zZXJ0aW9uU2V0KiBpbnNlcnRpb25TZXQsIGRvdWJsZSBmcmVxdWVuY3kpCiB7CkBAIC0x
MDIsMzIgKzgwLDYgQEAgQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6OnNwbGl0Rm9ydwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgQmxvY2tJbnNlcnRpb25TZXQ6OmV4ZWN1dGUo
KQotewotICAgIGlmIChtX2luc2VydGlvbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgLy8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBp
biBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBiZWZvcmUKLSAgICAvLyBydW5u
aW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMuIFdlIHN0cm9uZ2x5IHByZWZlciBhIHN0YWJsZSBz
b3J0IGFuZCB3ZSB3YW50IGl0IHRvIGJlCi0gICAgLy8gZmFzdCwgc28gd2UgdXNlIGJ1YmJsZSBz
b3J0LgotICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5l
bmQoKSk7Ci0KLSAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX3Byb2MubV9ibG9ja3MsIG1faW5zZXJ0
aW9ucyk7Ci0gICAgCi0gICAgLy8gUHJ1bmUgb3V0IGVtcHR5IGVudHJpZXMuIFRoaXMgaXNuJ3Qg
c3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBpdCdzCi0gICAgLy8gaGVhbHRoeSB0byBrZWVwIHRoZSBi
bG9jayBsaXN0IGZyb20gZ3Jvd2luZy4KLSAgICBtX3Byb2MubV9ibG9ja3MucmVtb3ZlQWxsTWF0
Y2hpbmcoCi0gICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+JiBibG9ja1B0
cikgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gIWJsb2NrUHRyOwotICAgICAgICB9KTsK
LSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGlu
ZGljZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvYy5tX2Jsb2Nrcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgbV9wcm9jLm1fYmxvY2tzW2ldLT5tX2luZGV4ID0gaTsKLSAgICAK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKICNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxv
Y2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCbG9ja0luc2VydGlvblNldC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzR2VuZXJpY0Js
b2NrSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlIDx3
dGYvSW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzUsMjYgKzM2LDEz
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBJbnNlcnRpb25TZXQ7
CiAKLXR5cGVkZWYgV1RGOjpJbnNlcnRpb248c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBC
bG9ja0luc2VydGlvbjsKK3R5cGVkZWYgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxv
Y2s+OjpCbG9ja0luc2VydGlvbiBCbG9ja0luc2VydGlvbjsKIAotY2xhc3MgQmxvY2tJbnNlcnRp
b25TZXQgeworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgOiBwdWJsaWMgR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0PEJhc2ljQmxvY2s+IHsKIHB1YmxpYzoKICAgICBCbG9ja0luc2VydGlvblNldChQ
cm9jZWR1cmUmKTsKICAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKICAgICAKLSAgICB2b2lkIGlu
c2VydChCbG9ja0luc2VydGlvbiYmKTsKLQotICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBh
IGdpdmVuIGluZGV4LgotICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91
YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOwotCi0gICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBiZWZv
cmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNzIHRoZSBmcmVxdWVu
Y3kKLSAgICAvLyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0byBqdXN0IHVzZSB0
aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCi0gICAgLy8gdXN1YWxs
eSB3aGF0IHlvdSB3YW50LgotICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2Nr
KiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLQotICAgIC8vIEluc2VydHMgYSBu
ZXcgYmxvY2sgYWZ0ZXIgdGhlIGdpdmVuIGJsb2NrLgotICAgIEJhc2ljQmxvY2sqIGluc2VydEFm
dGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7Ci0KICAgICAv
LyBBIGhlbHBlciB0byBzcGxpdCBhIGJsb2NrIHdoZW4gZm9yd2FyZCBpdGVyYXRpbmcgb3ZlciBp
dC4gSXQgY3JlYXRlcyBhIG5ldyBibG9jayB0byBob2xkCiAgICAgLy8gZXZlcnl0aGluZyBiZWZv
cmUgdGhlIGluc3RydWN0aW9uIGF0IHZhbHVlSW5kZXguIFRoZSBjdXJyZW50IGJsb2NrIGlzIGxl
ZnQgd2l0aAogICAgIC8vIGV2ZXJ5dGhpbmcgYXQgYW5kIGFmdGVyIHZhbHVlSW5kZXguIElmIHRo
ZSBvcHRpb25hbCBJbnNlcnRpb25TZXQgaXMgcHJvdmlkZWQsIGl0IHdpbGwgZ2V0CkBAIC04MCwx
MiArNjgsOSBAQCBwdWJsaWM6CiAgICAgQmFzaWNCbG9jayogc3BsaXRGb3J3YXJkKAogICAgICAg
ICBCYXNpY0Jsb2NrKiwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIEluc2VydGlvblNldCogPSBudWxs
cHRyLAogICAgICAgICBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7Ci0gICAgCi0gICAgYm9vbCBl
eGVjdXRlKCk7CiAKIHByaXZhdGU6CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7Ci0gICAgVmVjdG9y
PEJsb2NrSW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsOCBAQCBib29sIEVmZmVjdHM6OmludGVyZmVyZXMo
Y29uc3QgRWZmZWN0cyYgCiAgICAgICAgIHx8IGludGVyZmVyZXNXaXRoV3JpdGVzUGlubmVkKG90
aGVyLCAqdGhpcykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKICAg
ICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVyLnJlYWRzKQotICAgICAgICB8fCByZWFkcy5v
dmVybGFwcyhvdGhlci53cml0ZXMpOworICAgICAgICB8fCByZWFkcy5vdmVybGFwcyhvdGhlci53
cml0ZXMpCisgICAgICAgIHx8IChmZW5jZSAmJiBvdGhlci5mZW5jZSk7CiB9CiAKIGJvb2wgRWZm
ZWN0czo6b3BlcmF0b3I9PShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QKQEAgLTk1LDcgKzk2
LDggQEAgYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0IEVmZmVjdHMmIAogICAgICAgICAm
JiB3cml0ZXNQaW5uZWQgPT0gb3RoZXIud3JpdGVzUGlubmVkCiAgICAgICAgICYmIHJlYWRzUGlu
bmVkID09IG90aGVyLnJlYWRzUGlubmVkCiAgICAgICAgICYmIHdyaXRlcyA9PSBvdGhlci53cml0
ZXMKLSAgICAgICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHM7CisgICAgICAgICYmIHJlYWRzID09
IG90aGVyLnJlYWRzCisgICAgICAgICYmIGZlbmNlID09IG90aGVyLmZlbmNlOwogfQogCiBib29s
IEVmZmVjdHM6Om9wZXJhdG9yIT0oY29uc3QgRWZmZWN0cyYgb3RoZXIpIGNvbnN0CkBAIC0xMjAs
NiArMTIyLDggQEAgdm9pZCBFZmZlY3RzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbgogICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJXcml0ZXNQaW5uZWQiKTsKICAgICBpZiAocmVhZHNQaW5u
ZWQpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlJlYWRzUGlubmVkIik7CisgICAgaWYgKGZl
bmNlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJGZW5jZSIpOwogICAgIGlmICh3cml0ZXMp
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlczoiLCB3cml0ZXMpOwogICAgIGlmIChy
ZWFkcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkod29ya2luZyBj
b3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgc3RydWN0IEVmZmVjdHMgewogICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMxNzMKICAgICBib29sIHJlYWRzUGlu
bmVkIHsgZmFsc2UgfTsKICAgICBib29sIHdyaXRlc1Bpbm5lZCB7IGZhbHNlIH07CisgICAgCisg
ICAgLy8gTWVtb3J5IGZlbmNlcyBjYW5ub3QgYmUgcmVvcmRlcmVkIGFyb3VuZCBlYWNoIG90aGVy
IHJlZ2FyZGxlc3Mgb2YgdGhlaXIgZWZmZWN0cy4gVGhpcyBpcyBmbGFnZ2VkCisgICAgLy8gaWYg
dGhlIG9wZXJhdGlvbiBpcyBhIG1lbW9yeSBmZW5jZS4KKyAgICBib29sIGZlbmNlIHsgZmFsc2Ug
fTsKIAogICAgIEhlYXBSYW5nZSB3cml0ZXM7CiAgICAgSGVhcFJhbmdlIHJlYWRzOwpAQCAtODks
NiArOTMsNyBAQCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IEhlYXBS
YW5nZTo6dG9wKCk7CiAgICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAg
IHJlc3VsdC53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVl
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMTAzLDcgKzEwOCw3IEBAIHN0
cnVjdCBFZmZlY3RzIHsKIAogICAgIGJvb2wgbXVzdEV4ZWN1dGUoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRlcm1pbmFsIHx8IGV4aXRzU2lkZXdheXMgfHwgd3JpdGVzTG9jYWxTdGF0
ZSB8fCB3cml0ZXMgfHwgd3JpdGVzUGlubmVkOworICAgICAgICByZXR1cm4gdGVybWluYWwgfHwg
ZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQaW5u
ZWQgfHwgZmVuY2U7CiAgICAgfQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHJlb3JkZXJpbmcg
aW5zdHJ1Y3Rpb25zIHdpdGggdGhlc2UgcmVzcGVjdGl2ZSBlZmZlY3RzIHdvdWxkIGNoYW5nZSBw
cm9ncmFtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTQyLDYgKzE0Miw3IEBAIHN0cnVjdCBJbXB1cmVCbG9ja0Rh
dGEgewogCiAgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiByZWFkczsgLy8gVGhpcyBvbmx5IGdldHMg
dXNlZCBmb3IgZm9yd2FyZCBzdG9yZSBlbGltaW5hdGlvbi4KICAgICBSYW5nZVNldDxIZWFwUmFu
Z2U+IHdyaXRlczsgLy8gVGhpcyBnZXRzIHVzZWQgZm9yIGJvdGggbG9hZCBhbmQgc3RvcmUgZWxp
bWluYXRpb24uCisgICAgYm9vbCBmZW5jZTsKIAogICAgIE1lbW9yeVZhbHVlTWFwIHN0b3Jlc0F0
SGVhZDsKICAgICBNZW1vcnlWYWx1ZU1hcCBtZW1vcnlWYWx1ZXNBdFRhaWw7CkBAIC0xNzQsMTIg
KzE3NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KG1lbW9yeSAmJiBtZW1vcnktPmlzU3RvcmUoKQogICAgICAgICAgICAgICAgICAgICAmJiAhZGF0
YS5yZWFkcy5vdmVybGFwcyhtZW1vcnktPnJhbmdlKCkpCi0gICAgICAgICAgICAgICAgICAgICYm
ICFkYXRhLndyaXRlcy5vdmVybGFwcyhtZW1vcnktPnJhbmdlKCkpKQorICAgICAgICAgICAgICAg
ICAgICAmJiAhZGF0YS53cml0ZXMub3ZlcmxhcHMobWVtb3J5LT5yYW5nZSgpKQorICAgICAgICAg
ICAgICAgICAgICAmJiAoIWRhdGEuZmVuY2UgfHwgIW1lbW9yeS0+aGFzRmVuY2UoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGRhdGEuc3RvcmVzQXRIZWFkLmFkZChtZW1vcnkpOwogICAgICAgICAg
ICAgICAgIGRhdGEucmVhZHMuYWRkKGVmZmVjdHMucmVhZHMpOwogCiAgICAgICAgICAgICAgICAg
aWYgKEhlYXBSYW5nZSB3cml0ZXMgPSBlZmZlY3RzLndyaXRlcykKICAgICAgICAgICAgICAgICAg
ICAgY2xvYmJlcihkYXRhLCB3cml0ZXMpOworICAgICAgICAgICAgICAgIGRhdGEuZmVuY2UgfD0g
ZWZmZWN0cy5mZW5jZTsKIAogICAgICAgICAgICAgICAgIGlmIChtZW1vcnkpCiAgICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmFkZChtZW1vcnkpOwpAQCAtNDQ1LDgg
KzQ0OCw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgZGF0YUxvZygiQmFkIG1lbW9yeSB2YWx1ZTogIiwgZGVlcER1bXAobV9wcm9jLCBtX3Zh
bHVlKSwgIlxuIik7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC00NzgsNiArNDc5LDkgQEAg
cHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CiAgICAgYm9vbCBmaW5kU3Rv
cmVBZnRlckNsb2JiZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXIm
IGZpbHRlcikKICAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+
aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAg
IC8vIFdlIGNhbiBlbGltaW5hdGUgYSBzdG9yZSBpZiBldmVyeSBmb3J3YXJkIHBhdGggaGl0cyBh
IHN0b3JlIHRvIHRoZSBzYW1lIGxvY2F0aW9uIGJlZm9yZQogICAgICAgICAvLyBoaXR0aW5nIGFu
eSBvcGVyYXRpb24gdGhhdCBvYnNlcnZlcyB0aGUgc3RvcmUuIFRoaXMgc2VhcmNoIHNlZW1zIGxp
a2UgaXQgc2hvdWxkIGJlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSwgYnV0IGluIHRoZSBvdmVyd2hl
bG1pbmcgbWFqb3JpdHkgb2YgY2FzZXMgaXQgd2lsbCBhbG1vc3QgaW1tZWRpYXRlbHkgaGl0IGFu
IApAQCAtNjE0LDYgKzYxOCwxMiBAQCBwcml2YXRlOgogICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcgYmFja3dhcmQgZm9yICIsICpw
dHIsICIuLi5cbiIpOwogICAgICAgICAKKyAgICAgICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpLT5oYXNGZW5jZSgpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgR2l2aW5nIHVwIGJlY2F1c2UgZmVuY2VzLlxuIik7CisgICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAoTWVt
b3J5VmFsdWUqIG1hdGNoID0gbV9kYXRhLm1lbW9yeVZhbHVlc0F0VGFpbC5maW5kKHB0ciwgZmls
dGVyKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEZvdW5kICIsICptYXRjaCwgIiBsb2NhbGx5LlxuIik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYg
KzkyLDcgQEAgdm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CiAgICAg
fQogCisgICAgLy8gVGhpcyBwdXRzIHRoZSBJUiBpbiBxdWlya3MgbW9kZS4KICAgICBsb3dlck1h
Y3Jvcyhwcm9jZWR1cmUpOwogCiAgICAgaWYgKG9wdExldmVsID49IDEpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNCbG9ja0luc2VydGlvblNl
dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNC
bG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlB1cmVOYU4uaCIKKyNpbmNsdWRlIDx3
dGYvQnViYmxlU29ydC5oPgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBJ
bnNlcnRpb25TZXQ7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CitjbGFzcyBHZW5l
cmljQmxvY2tJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIHR5cGVkZWYgV1RGOjpJbnNlcnRp
b248c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBCbG9ja0luc2VydGlvbjsKKyAgICAKKyAg
ICBHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQoVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Js
b2NrPj4mIGJsb2NrcykKKyAgICAgICAgOiBtX2Jsb2NrcyhibG9ja3MpCisgICAgeworICAgIH0K
KyAgICAKKyAgICB2b2lkIGluc2VydChCbG9ja0luc2VydGlvbiYmIGluc2VydGlvbikKKyAgICB7
CisgICAgICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoV1RGTW92ZShpbnNlcnRpb24pKTsKKyAgICB9
CisKKyAgICAvLyBJbnNlcnQgYSBuZXcgYmxvY2sgYXQgYSBnaXZlbiBpbmRleC4KKyAgICBCYXNp
Y0Jsb2NrKiBpbnNlcnQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQor
ICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNp
Y0Jsb2NrKFVJTlRfTUFYLCBmcmVxdWVuY3kpKTsKKyAgICAgICAgQmFzaWNCbG9jayogcmVzdWx0
ID0gYmxvY2suZ2V0KCk7CisgICAgICAgIGluc2VydChCbG9ja0luc2VydGlvbihpbmRleCwgV1RG
TW92ZShibG9jaykpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvLyBJ
bnNlcnRzIGEgbmV3IGJsb2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVzdWFsbHkgeW91IHdp
bGwgbm90IHBhc3MgdGhlIGZyZXF1ZW5jeQorICAgIC8vIGFyZ3VtZW50LiBQYXNzaW5nIFBOYU4g
Y2F1c2VzIHVzIHRvIGp1c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdiZWZvcmUnIGJsb2Nr
LiBUaGF0J3MKKyAgICAvLyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCisgICAgQmFzaWNCbG9jayog
aW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4p
CisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0KGJlZm9yZS0+aW5kZXgoKSwgZnJlcXVlbmN5
ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGJlZm9yZS0+ZnJlcXVlbmN5KCkpOworICAgIH0K
KworICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYWZ0ZXIgdGhlIGdpdmVuIGJsb2NrLgorICAg
IEJhc2ljQmxvY2sqIGluc2VydEFmdGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVl
bmN5ID0gUE5hTikKKyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnQoYWZ0ZXItPmluZGV4KCkg
KyAxLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYWZ0ZXItPmZyZXF1ZW5j
eSgpKTsKKyAgICB9CisKKyAgICBib29sIGV4ZWN1dGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1f
aW5zZXJ0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgICAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFu
eSBvcmRlci4gU28sIHdlIG5lZWQgdG8gc29ydCB0aGVtIGJlZm9yZQorICAgICAgICAvLyBydW5u
aW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMuIFdlIHN0cm9uZ2x5IHByZWZlciBhIHN0YWJsZSBz
b3J0IGFuZCB3ZSB3YW50IGl0IHRvIGJlCisgICAgICAgIC8vIGZhc3QsIHNvIHdlIHVzZSBidWJi
bGUgc29ydC4KKyAgICAgICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNl
cnRpb25zLmVuZCgpKTsKKyAgICAgICAgCisgICAgICAgIGV4ZWN1dGVJbnNlcnRpb25zKG1fYmxv
Y2tzLCBtX2luc2VydGlvbnMpOworICAgICAgICAKKyAgICAgICAgLy8gUHJ1bmUgb3V0IGVtcHR5
IGVudHJpZXMuIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBpdCdzCisgICAgICAg
IC8vIGhlYWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCisgICAgICAg
IG1fYmxvY2tzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgWyZdIChzdGQ6OnVuaXF1
ZV9wdHI8QmFzaWNCbG9jaz4mIGJsb2NrUHRyKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gIWJsb2NrUHRyOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMuCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIG1fYmxvY2tzW2ldLT5tX2luZGV4ID0gaTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2lj
QmxvY2s+PiYgbV9ibG9ja3M7CisgICAgVmVjdG9yPEJsb2NrSW5zZXJ0aW9uLCA4PiBtX2luc2Vy
dGlvbnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOwogICAgIH0KICAgICAKKyAgICBIZWFwUmFuZ2Ugb3BlcmF0b3J8
KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSGVh
cFJhbmdlKAorICAgICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwgb3RoZXIubV9iZWdpbiksCisg
ICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQpKTsKKyAgICB9CisgICAgCiAg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW4gIT0gbV9l
bmQ7IH0KIAogICAgIHVuc2lnbmVkIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbjsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuY3BwCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNiArNTgsMTEgQEAgVmFsdWUqIEluc2VydGlvblNl
dDo6aW5zZXJ0Qm90dG9tKHNpemVfdAogICAgIHJldHVybiBpbnNlcnRCb3R0b20oaW5kZXgsIGxp
a2VWYWx1ZS0+b3JpZ2luKCksIGxpa2VWYWx1ZS0+dHlwZSgpKTsKIH0KIAorVmFsdWUqIEluc2Vy
dGlvblNldDo6aW5zZXJ0Q2xvbmUoc2l6ZV90IGluZGV4LCBWYWx1ZSogdmFsdWUpCit7CisgICAg
cmV0dXJuIGluc2VydFZhbHVlKGluZGV4LCBtX3Byb2NlZHVyZS5jbG9uZSh2YWx1ZSkpOworfQor
CiB2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykKIHsKICAgICBi
dWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSw2ICs3MSw4IEBAIHB1YmxpYzoKIAogICAgIFZhbHVlKiBpbnNlcnRC
b3R0b20oc2l6ZV90IGluZGV4LCBPcmlnaW4sIFR5cGUpOwogICAgIFZhbHVlKiBpbnNlcnRCb3R0
b20oc2l6ZV90IGluZGV4LCBWYWx1ZSopOworICAgIAorICAgIFZhbHVlKiBpbnNlcnRDbG9uZShz
aXplX3QgaW5kZXgsIFZhbHVlKik7CiAKICAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxMSArMjksMTMgQEAKICNpZiBFTkFCTEUoQjNfSklU
KQogCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCisjaW5jbHVk
ZSAiQjNBdG9taWNWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNp
bmNsdWRlICJCM0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgi
CiAjaW5jbHVkZSAiQjNDYXNlQ29sbGVjdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJCM0NvbnN0
UHRyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0ZlbmNlVmFsdWUuaCIKICNpbmNsdWRlICJCM0luc2Vy
dGlvblNldElubGluZXMuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAi
QjNQYXRjaHBvaW50VmFsdWUuaCIKQEAgLTQyLDYgKzQ0LDcgQEAKICNpbmNsdWRlICJCM1N0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcy5oIgogI2luY2x1ZGUgIkIzU3dpdGNoVmFsdWUuaCIKICNpbmNs
dWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCiAjaW5jbHVk
ZSAiQjNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCkBAIC01OCwxMSArNjEsMTQgQEAgcHVibGljOgogICAgICAgICA6IG1f
cHJvYyhwcm9jKQogICAgICAgICAsIG1fYmxvY2tJbnNlcnRpb25TZXQocHJvYykKICAgICAgICAg
LCBtX2luc2VydGlvblNldChwcm9jKQorICAgICAgICAsIG1fdXNlQ291bnRzKHByb2MpCiAgICAg
ewogICAgIH0KIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtX3Byb2MuaGFzUXVpcmtzKCkpOworICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwogICAgICAg
ICAgICAgcHJvY2Vzc0N1cnJlbnRCbG9jaygpOwpAQCAtNzIsNiArNzgsMTAgQEAgcHVibGljOgog
ICAgICAgICAgICAgbV9wcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAgICAgICAgICAgICBtX3By
b2MuaW52YWxpZGF0ZUNGRygpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGlz
IGluZGljYXRlcyB0aGF0IHdlJ3ZlIAorICAgICAgICBtX3Byb2Muc2V0SGFzUXVpcmtzKHRydWUp
OworICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgICB9CiAgICAgCkBAIC0x
ODUsNyArMTk1LDk2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICAgICAgaWYgKGlzWDg2
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbG9hZC1sb2FkIGZlbmNlLiBU
aGlzIGNvZGVnZW5zIHRvIG5vdGhpbmcgb24gWDg2LiBXZSB1c2UgaXQgdG8gdGVsbCB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgLy8gY29tcGlsZXIgbm90IHRvIGJsb2NrIGxvYWQgbW90aW9uLgor
ICAgICAgICAgICAgICAgICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxGZW5jZVZhbHVlPihtX2luZGV4LCBtX29yaWdpbik7CisgICAgICAgICAgICAgICAgICAg
IGZlbmNlLT5yZWFkID0gSGVhcFJhbmdlKCk7CisgICAgICAgICAgICAgICAgICAgIGZlbmNlLT53
cml0ZSA9IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAvLyBLaWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNob3VsZCB1bmxvY2sgYSBidW5j
aCBvZiBjb2RlIHNpbXBsaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5y
ZXBsYWNlV2l0aEJvdHRvbShtX2luc2VydGlvblNldCwgbV9pbmRleCk7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KIAorICAgICAg
ICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgY2FzZSBBdG9taWNTdHJvbmdD
QVM6IHsKKyAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0
b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgICAgIFdpZHRo
IHdpZHRoID0gYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChpc0Nhbm9uaWNhbFdpZHRoKHdpZHRoKSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFsdWUqIGV4
cGVjdGVkVmFsdWUgPSBhdG9taWMtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIE9uIEFSTSwgdGhlIGxvYWQgcGFydCBvZiB0aGUgQ0FTIGRvZXMgYSBsb2Fk
IHdpdGggemVybyBleHRlbnNpb24uIFRoZXJlZm9yZSwgd2UgbmVlZAorICAgICAgICAgICAgICAg
IC8vIHRvIHplcm8tZXh0ZW5kIHRoZSBpbnB1dC4KKyAgICAgICAgICAgICAgICBWYWx1ZSogbWFz
a2VkRXhwZWN0ZWRWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAg
ICAgICAgICAgICAgIG1faW5kZXgsIEJpdEFuZCwgbV9vcmlnaW4sIGV4cGVjdGVkVmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENvbnN0YW50KG1faW5k
ZXgsIGV4cGVjdGVkVmFsdWUsIG1hc2sod2lkdGgpKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgYXRvbWljLT5jaGlsZCgwKSA9IG1hc2tlZEV4cGVjdGVkVmFsdWU7CisgICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNo
Z0FkZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAgICAgICAgIGNhc2Ug
QXRvbWljWGNoZ09yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgICAgICAg
ICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnOiB7Cisg
ICAgICAgICAgICAgICAgLy8gT24gWDg2LCB0aGVzZSBtYXkgYWN0dWFsbHkgcmV0dXJuIGdhcmJh
Z2UgaW4gdGhlIGhpZ2ggYml0cy4gT24gQVJNNjQsIHRoZXNlIHNvcnRhCisgICAgICAgICAgICAg
ICAgLy8gemVyby1leHRlbmQgdGhlaXIgaGlnaCBiaXRzLCBleGNlcHQgdGhhdCB0aGUgaGlnaCBi
aXRzIG1pZ2h0IGdldCBwb2xsdXRlZCBieSBoaWdoCisgICAgICAgICAgICAgICAgLy8gYml0cyBp
biB0aGUgb3BlcmFuZC4gLiBTbywgZWl0aGVyIHdheSwgd2UgbmVlZCB0byB0aHJvdyBhIHNpZ24t
ZXh0ZW5kIG9uIHRoZXNlCisgICAgICAgICAgICAgICAgLy8gdGhpbmdzLgorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5vcGNvZGUoKSA9PSBBdG9taWNYY2hnU3ViICYmIG1fdXNlQ291bnRzLm51
bVVzZXMobV92YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9uIHg4NiwgeGNo
Z2FkZCBpcyBiZXR0ZXIgdGhhbiB4Y2hnc3ViIGlmIGl0IGhhcyBhbnkgdXNlcnMuCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5zZXRLaW5kVW5zYWZlbHkoQXRvbWljWGNoZ0FkZCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwg
TmVnLCBtX29yaWdpbiwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBib29sIGV4ZW1wdCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvbWlj
WGNoZ1N1YjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAg
ICAgICAgICAgICAgICAgICAgZXhlbXB0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGV4ZW1wdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRv
bWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICAgICAgV2lkdGgg
d2lkdGggPSBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKGlzQ2Fub25pY2FsV2lkdGgod2lkdGgpKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYWx1ZSogbmV3
VmFsdWUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4LCBzaWduRXh0ZW5kT3Bjb2RlKHdpZHRoKSwgbV9vcmlnaW4sCisgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENsb25lKG1faW5kZXgsIG1fdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElk
ZW50aXR5KG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
QEAgLTQ3MCw2ICs1NjksNyBAQCBwcml2YXRlOgogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAg
IEJsb2NrSW5zZXJ0aW9uU2V0IG1fYmxvY2tJbnNlcnRpb25TZXQ7CiAgICAgSW5zZXJ0aW9uU2V0
IG1faW5zZXJ0aW9uU2V0OworICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBCYXNpY0Js
b2NrKiBtX2Jsb2NrOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgVmFsdWUqIG1fdmFsdWU7
CkBAIC00NzcsMjEgKzU3NywxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jaGFuZ2VkIHsgZmFs
c2UgfTsKIH07CiAKLWJvb2wgbG93ZXJNYWNyb3NJbXBsKFByb2NlZHVyZSYgcHJvYykKLXsKLSAg
ICBMb3dlck1hY3JvcyBsb3dlck1hY3Jvcyhwcm9jKTsKLSAgICByZXR1cm4gbG93ZXJNYWNyb3Mu
cnVuKCk7Ci19Ci0KIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiBib29sIGxvd2VyTWFjcm9z
KFByb2NlZHVyZSYgcHJvYykKIHsKLSAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywgImxv
d2VyTWFjcm9zIik7Ci0gICAgYm9vbCByZXN1bHQgPSBsb3dlck1hY3Jvc0ltcGwocHJvYyk7Ci0g
ICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWxvd2Vy
TWFjcm9zSW1wbChwcm9jKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBMb3dlck1hY3JvcyBs
b3dlck1hY3Jvcyhwcm9jKTsKKyAgICByZXR1cm4gbG93ZXJNYWNyb3MucnVuKCk7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAkocmV2
aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3NB
ZnRlck9wdGltaXphdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsMTUgKzE1NiwxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBSb3RMOiB7CiAgICAgICAgICAgICAgICAgLy8g
QVJNNjQgZG9lc24ndCBoYXZlIGEgcm90YXRlIGxlZnQuCiAgICAgICAgICAgICAgICAgaWYgKGlz
QVJNNjQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWYWx1ZSogbmV3U2hpZnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KG1faW5kZXgsIE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiByb3RhdGUgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIFJvdFIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVl
LT5jaGlsZCgwKSwgbmV3U2hpZnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
cmVwbGFjZVdpdGhJZGVudGl0eShyb3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG5l
d1NoaWZ0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBOZWcsIG1fdmFs
dWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlKiByb3RhdGUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIFJvdFIs
IG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbmV3U2hpZnQpOworICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KHJvdGF0ZSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjEyOTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDEyICsyOCwxNCBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUg
IkFpckJsb2NrSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlyQ0NhbGxTcGVjaWFsLmgiCiAj
aW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1
ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCiAjaW5jbHVk
ZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3Qu
aCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKQEAgLTcyLDYgKzc0LDE2IEBAIG5hbWVzcGFj
ZSB7CiAKIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCisvLyBGSVhNRTogV2Ugd291bGRu
J3QgbmVlZCB0aGlzIGlmIEFpciBzdXBwb3J0ZWQgV2lkdGggbW9kaWZpZXJzIGluIEFpcjo6S2lu
ZC4KKy8vIE9PUFMhISEgKG5lZWQgYSBidWcgVVJMKQorI2RlZmluZSBPUENPREVfRk9SX1dJRFRI
KG9wY29kZSwgd2lkdGgpICggXAorICAgICh3aWR0aCkgPT0gV2lkdGg4ID8gb3Bjb2RlICMjIDgg
OiBcCisgICAgKHdpZHRoKSA9PSBXaWR0aDE2ID8gb3Bjb2RlICMjIDE2IDogXAorICAgICh3aWR0
aCkgPT0gV2lkdGgzMiA/IG9wY29kZSAjIyAzMiA6IFwKKyAgICBvcGNvZGUgIyMgNjQpCisjZGVm
aW5lIE9QQ09ERV9GT1JfQ0FOT05JQ0FMX1dJRFRIKG9wY29kZSwgd2lkdGgpICggXAorICAgICh3
aWR0aCkgPT0gV2lkdGg2NCA/IG9wY29kZSAjIyA2NCA6IG9wY29kZSAjIyAzMikKKwogY2xhc3Mg
TG93ZXJUb0FpciB7CiBwdWJsaWM6CiAgICAgTG93ZXJUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVy
ZSkKQEAgLTgzLDYgKzk1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2RvbWluYXRvcnMocHJv
Y2VkdXJlLmRvbWluYXRvcnMoKSkKICAgICAgICAgLCBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCiAg
ICAgICAgICwgbV9jb2RlKHByb2NlZHVyZS5jb2RlKCkpCisgICAgICAgICwgbV9ibG9ja0luc2Vy
dGlvblNldChtX2NvZGUpCisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICAgICAgLCBt
X2VheChYODZSZWdpc3RlcnM6OmVheCkKKyAgICAgICAgLCBtX2VjeChYODZSZWdpc3RlcnM6OmVj
eCkKKyAgICAgICAgLCBtX2VkeChYODZSZWdpc3RlcnM6OmVkeCkKKyNlbmRpZgogICAgIHsKICAg
ICB9CiAKQEAgLTEyNCwxNCArMTQyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gaG9pc3RlZCBh
ZGRyZXNzIGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxv
b3AuCiAgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUuYmxv
Y2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7Ci0gICAgICAg
ICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgotICAgICAgICAgICAgbV9pbnN0cy5yZXNpemUoMCk7
CiAKICAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9jayk7CiAK
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvd2Vy
aW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KKyAg
ICAgICAgICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3Vj
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNj
ZXNzb3JzKCkuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9j
ayhtX2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3ko
KSkpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2NrcyBpbiBy
ZXZlcnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hhdCBhbGxv
d3MgdXMKICAgICAgICAgICAgIC8vIHRvIG1hdGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5LgogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgewpAQCAtMTQ5
LDE5ICsxNzEsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBtX2luc3RzIGNv
bnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcwotICAgICAgICAgICAg
Ly8gaXQgaW4gcmV2ZXJzZS4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5zdHMu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9pbnN0
c1tpXSkKLSAgICAgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5hcHBlbmRJ
bnN0KFdURk1vdmUoaW5zdCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KLSAgICAgICAg
ICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29y
cygpKSB7Ci0gICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNzb3Jz
KCkuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayhtX2Js
b2NrVG9CbG9ja1tzdWNjZXNzb3IuYmxvY2soKV0sIHN1Y2Nlc3Nvci5mcmVxdWVuY3koKSkpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKG1f
YmxvY2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fYmxv
Y2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwogCiAgICAgICAgIEFpcjo6SW5zZXJ0aW9uU2V0IGlu
c2VydGlvblNldChtX2NvZGUpOwogICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBtX3Byb2xvZ3Vl
KQpAQCAtNTYyLDExICs1NzUsMTkgQEAgcHJpdmF0ZToKICAgICAKICAgICBBcmdQcm9taXNlIGxv
YWRQcm9taXNlQW55T3Bjb2RlKFZhbHVlKiBsb2FkVmFsdWUpCiAgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChsb2FkVmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpKTsKICAgICAgICAgaWYgKCFj
YW5CZUludGVybmFsKGxvYWRWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7CiAgICAg
ICAgIGlmIChjcm9zc2VzSW50ZXJmZXJlbmNlKGxvYWRWYWx1ZSkpCiAgICAgICAgICAgICByZXR1
cm4gQXJnKCk7Ci0gICAgICAgIEFyZ1Byb21pc2UgcmVzdWx0KGFkZHIobG9hZFZhbHVlKSwgbG9h
ZFZhbHVlKTsKKyAgICAgICAgLy8gT24geDg2LCBhbGwgbG9hZHMgaGF2ZSBmZW5jZXMuIERvaW5n
IHRoaXMga2luZCBvZiBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gd2lsbCBtb3ZlIHRoZSBsb2FkLAor
ICAgICAgICAvLyBidXQgdGhhdCdzIGZpbmUgYmVjYXVzZSBvdXIgaW50ZXJmZXJlbmNlIGFuYWx5
c2lzIHN0b3BzIHRoZSBtb3Rpb24gb2YgZmVuY2VzIGFyb3VuZCBvdGhlcgorICAgICAgICAvLyBm
ZW5jZXMuIFNvLCBhbnkgbG9hZCBtb3Rpb24gd2UgaW50cm9kdWNlIGhlcmUgd291bGQgbm90IGJl
IG9ic2VydmFibGUuCisgICAgICAgIGlmICghaXNYODYoKSAmJiBsb2FkVmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpLT5oYXNGZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAg
ICBBcmcgbG9hZEFkZHIgPSBhZGRyKGxvYWRWYWx1ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGxvYWRBZGRyKTsKKyAgICAgICAgQXJnUHJvbWlzZSByZXN1bHQobG9hZEFkZHIsIGxvYWRWYWx1
ZSk7CiAgICAgICAgIGlmIChsb2FkVmFsdWUtPnRyYXBzKCkpCiAgICAgICAgICAgICByZXN1bHQu
c2V0VHJhcHModHJ1ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC04OTgsMTEgKzkxOSw5
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotI2lmIENQVShY
ODYpIHx8IENQVShYODZfNjQpCiAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAodmFsdWUpLCB0bXAo
bV92YWx1ZSkpOwotICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGFtb3VudCksIFRtcChYODZSZWdp
c3RlcnM6OmVjeCkpOwotICAgICAgICBhcHBlbmQob3Bjb2RlLCBUbXAoWDg2UmVnaXN0ZXJzOjpl
Y3gpLCB0bXAobV92YWx1ZSkpOwotI2VuZGlmCisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAoYW1v
dW50KSwgbV9lY3gpOworICAgICAgICBhcHBlbmQob3Bjb2RlLCBtX2VjeCwgdG1wKG1fdmFsdWUp
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGUzMiwgQWlyOjpPcGNv
ZGUgb3Bjb2RlNjQ+CkBAIC05MzEsMTAgKzk1MCwxNiBAQCBwcml2YXRlOgogICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUzMiwgQWlyOjpPcGNvZGUgb3Bjb2RlNjQsIENvbW11dGF0aXZpdHkgY29t
bXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgogICAgIGJvb2wgdHJ5QXBwZW5kU3RvcmVCaW5P
cChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQogICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpOworICAgICAgICAKICAgICAgICAgQWlyOjpP
cGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShvcGNvZGUzMiwgb3Bjb2RlNjQsIGxlZnQt
PnR5cGUoKSk7CiAgICAgICAgIGlmIChvcGNvZGUgPT0gQWlyOjpPb3BzKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAgICAgLy8gT24geDg2LCBhbGwgc3RvcmVzIGhh
dmUgZmVuY2VzLCBhbmQgdGhpcyBpc24ndCByZW9yZGVyaW5nIHRoZSBzdG9yZSBpdHNlbGYuCisg
ICAgICAgIGlmICghaXNYODYoKSAmJiBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVu
Y2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIEFyZyBz
dG9yZUFkZHIgPSBhZGRyKG1fdmFsdWUpOwogICAgICAgICBBU1NFUlQoc3RvcmVBZGRyKTsKIApA
QCAtOTk0LDExICsxMDE5LDUwIEBAIHByaXZhdGU6CiAKICAgICAgICAgcmV0dXJuIEluc3QobW92
ZSwgbV92YWx1ZSwgdG1wKHZhbHVlKSwgZGVzdCk7CiAgICAgfQorICAgIAorICAgIEFpcjo6T3Bj
b2RlIHN0b3JlT3Bjb2RlKFdpZHRoIHdpZHRoLCBCYW5rIGJhbmssIGJvb2wgcmVsZWFzZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBXaWR0aDg6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChiYW5rID09IEdQKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZWxlYXNlID8gU3RvcmVSZWw4IDogQWlyOjpTdG9yZTg7CisgICAgICAgIGNhc2UgV2lkdGgxNjoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhbmsgPT0gR1ApOworICAgICAgICAgICAgcmV0
dXJuIHJlbGVhc2UgPyBTdG9yZVJlbDE2IDogQWlyOjpTdG9yZTE2OworICAgICAgICBjYXNlIFdp
ZHRoMzI6CisgICAgICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgICAgIGNhc2UgR1A6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBTdG9yZVJlbDMyIDogTW92ZTMyOwor
ICAgICAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVs
ZWFzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1vdmVGbG9hdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpczY0Qml0KCkpOworICAgICAgICAgICAgc3dpdGNoIChiYW5rKSB7Cisg
ICAgICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlID8gU3Rv
cmVSZWw2NCA6IE1vdmU7CisgICAgICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFyZWxlYXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW92ZURvdWJs
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIEFpcjo6T3Bj
b2RlIHN0b3JlT3Bjb2RlKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVl
KiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1lbW9yeS0+aXNTdG9yZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0b3JlT3Bjb2RlKG1lbW9y
eS0+bG9hZFN0b3JlV2lkdGgoKSwgbWVtb3J5LT5hY2Nlc3NCYW5rKCksIG1lbW9yeS0+aGFzRmVu
Y2UoKSk7CisgICAgfQogCiAgICAgSW5zdCBjcmVhdGVTdG9yZShWYWx1ZSogdmFsdWUsIGNvbnN0
IEFyZyYgZGVzdCkKICAgICB7Ci0gICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVPcGNvZGUgPSBtb3Zl
Rm9yVHlwZSh2YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVN0b3JlKG1vdmVP
cGNvZGUsIHZhbHVlLCBkZXN0KTsKKyAgICAgICAgQWlyOjpPcGNvZGUgbW92ZU9wY29kZSA9IHN0
b3JlT3Bjb2RlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVN0b3JlKG1vdmVPcGNvZGUs
IHZhbHVlLT5jaGlsZCgwKSwgZGVzdCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJncz4KQEAgLTEwMDYsNyArMTA3MCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBh
cHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIGNyZWF0ZVN0b3JlKHN0ZDo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLikpKTsKICAgICB9Ci0KKyAgICAKICAgICBBaXI6Ok9wY29kZSBtb3ZlRm9yVHlw
ZShUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTEwNzMsNyAr
MTEzNyw0MSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5k
KGluc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmlzaEFwcGVuZGluZ0luc3RydWN0aW9u
cyhBaXI6OkJhc2ljQmxvY2sqIHRhcmdldCkKKyAgICB7CisgICAgICAgIC8vIE5vdyBhcHBlbmQg
dGhlIGluc3RydWN0aW9ucy4gbV9pbnN0cyBjb250YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIs
IHNvIHdlIHByb2Nlc3MKKyAgICAgICAgLy8gaXQgaW4gcmV2ZXJzZS4KKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9pbnN0cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGZvciAoSW5z
dCYgaW5zdCA6IG1faW5zdHNbaV0pCisgICAgICAgICAgICAgICAgdGFyZ2V0LT5hcHBlbmRJbnN0
KFdURk1vdmUoaW5zdCkpOworICAgICAgICB9CisgICAgICAgIG1faW5zdHMucmVzaXplKDApOwor
ICAgIH0KKyAgICAKKyAgICBBaXI6OkJhc2ljQmxvY2sqIG5ld0Jsb2NrKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEFmdGVyKG1fYmxvY2tUb0Jsb2Nr
W21fYmxvY2tdKTsKKyAgICB9CiAKKyAgICAvLyBOT1RFOiBUaGlzIHdpbGwgY3JlYXRlIGEgY29u
dGludWF0aW9uIGJsb2NrIChgbmV4dEJsb2NrYCkgKmFmdGVyKiBhbnkgYmxvY2tzIHlvdSd2ZSBj
cmVhdGVkIHVzaW5nCisgICAgLy8gbmV3QmxvY2soKS4gU28sIGl0J3MgcHJlZmVyYWJsZSB0byBj
cmVhdGUgYWxsIG9mIHlvdXIgYmxvY2tzIHVwZnJvbnQgdXNpbmcgbmV3QmxvY2soKS4gQWxzbyBu
b3RlCisgICAgLy8gdGhhdCBhbnkgY29kZSB5b3UgZW1pdCBiZWZvcmUgdGhpcyB3aWxsIGJlIHBy
ZXBlbmRlZCB0byB0aGUgY29udGludWF0aW9uLCBhbmQgYW55IGNvZGUgeW91IGVtaXQKKyAgICAv
LyBhZnRlciB0aGlzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHByZXZpb3VzIGJsb2NrLgorICAg
IHZvaWQgc3BsaXRCbG9jayhBaXI6OkJhc2ljQmxvY2sqJiBwcmV2aW91c0Jsb2NrLCBBaXI6OkJh
c2ljQmxvY2sqJiBuZXh0QmxvY2spCisgICAgeworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ibG9ja1RvQmxvY2tbbV9ibG9ja107CisgICAgICAgIAorICAgICAgICBwcmV2aW91
c0Jsb2NrID0gYmxvY2s7CisgICAgICAgIG5leHRCbG9jayA9IG1fYmxvY2tJbnNlcnRpb25TZXQu
aW5zZXJ0QWZ0ZXIoYmxvY2spOworICAgICAgICAKKyAgICAgICAgZmluaXNoQXBwZW5kaW5nSW5z
dHJ1Y3Rpb25zKG5leHRCbG9jayk7CisgICAgICAgIG5leHRCbG9jay0+c3VjY2Vzc29ycygpID0g
YmxvY2stPnN1Y2Nlc3NvcnMoKTsKKyAgICAgICAgYmxvY2stPnN1Y2Nlc3NvcnMoKS5jbGVhcigp
OworICAgICAgICAKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoVmVjdG9yPEluc3Q+KCkpOworICAg
IH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CiAgICAgVCogZW5zdXJlU3BlY2lhbChUKiYgZmllbGQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50
cykKICAgICB7CkBAIC0xMTIzLDcgKzEyMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKICAgICAg
ICAgICAgICAgICBhcmcgPSBBcmc6OmNhbGxBcmcodmFsdWUucmVwKCkub2Zmc2V0RnJvbVNQKCkp
OwotICAgICAgICAgICAgICAgIGFwcGVuZFN0b3JlKHZhbHVlLnZhbHVlKCksIGFyZyk7CisgICAg
ICAgICAgICAgICAgYXBwZW5kU3RvcmUobW92ZUZvclR5cGUodmFsdWUudmFsdWUoKS0+dHlwZSgp
KSwgdmFsdWUudmFsdWUoKSwgYXJnKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTE5NjEsNiArMjA1OSwzMDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCisgICAgdm9pZCBhcHBlbmRYODZEaXYoQjM6Ok9wY29kZSBvcCkKKyAgICB7Cisg
ICAgICAgIEFpcjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJsZVdvcmQ7CisgICAgICAgIEFpcjo6T3Bj
b2RlIGRpdjsKKyAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBJbnQzMjoKKyAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBYODZDb252ZXJ0VG9E
b3VibGVXb3JkMzI7CisgICAgICAgICAgICBkaXYgPSBYODZEaXYzMjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29y
ZCA9IFg4NkNvbnZlcnRUb1F1YWRXb3JkNjQ7CisgICAgICAgICAgICBkaXYgPSBYODZEaXY2NDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIEFTU0VSVChvcCA9PSBEaXYgfHwgb3AgPT0gTW9kKTsKKyAgICAgICAgVG1wIHJl
c3VsdCA9IG9wID09IERpdiA/IG1fZWF4IDogbV9lZHg7CisKKyAgICAgICAgYXBwZW5kKE1vdmUs
IHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIG1fZWF4KTsKKyAgICAgICAgYXBwZW5kKGNvbnZlcnRU
b0RvdWJsZVdvcmQsIG1fZWF4LCBtX2VkeCk7CisgICAgICAgIGFwcGVuZChkaXYsIG1fZWF4LCBt
X2VkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCByZXN1
bHQsIHRtcChtX3ZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRYODZVRGl2KEIzOjpP
cGNvZGUgb3ApCisgICAgeworICAgICAgICBBaXI6Ok9wY29kZSBkaXYgPSBtX3ZhbHVlLT50eXBl
KCkgPT0gSW50MzIgPyBYODZVRGl2MzIgOiBYODZVRGl2NjQ7CisKKyAgICAgICAgQVNTRVJUKG9w
ID09IFVEaXYgfHwgb3AgPT0gVU1vZCk7CisgICAgICAgIFRtcCByZXN1bHQgPSBvcCA9PSBVRGl2
ID8gbV9lYXggOiBtX2VkeDsKKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNo
aWxkKDApKSwgbV9lYXgpOworICAgICAgICBhcHBlbmQoWG9yNjQsIG1fZWR4LCBtX2VkeCk7Cisg
ICAgICAgIGFwcGVuZChkaXYsIG1fZWF4LCBtX2VkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7
CisgICAgICAgIGFwcGVuZChNb3ZlLCByZXN1bHQsIHRtcChtX3ZhbHVlKSk7CisgICAgfQorICAg
IAorICAgIEFpcjo6T3Bjb2RlIGxvYWRMaW5rT3Bjb2RlKFdpZHRoIHdpZHRoLCBib29sIGZlbmNl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZlbmNlID8gT1BDT0RFX0ZPUl9XSURUSChMb2FkTGlu
a0FjcSwgd2lkdGgpIDogT1BDT0RFX0ZPUl9XSURUSChMb2FkTGluaywgd2lkdGgpOworICAgIH0K
KyAgICAKKyAgICBBaXI6Ok9wY29kZSBzdG9yZUNvbmRPcGNvZGUoV2lkdGggd2lkdGgsIGJvb2wg
ZmVuY2UpCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2UgPyBPUENPREVfRk9SX1dJRFRIKFN0
b3JlQ29uZFJlbCwgd2lkdGgpIDogT1BDT0RFX0ZPUl9XSURUSChTdG9yZUNvbmQsIHdpZHRoKTsK
KyAgICB9CisgICAgCisgICAgLy8gVGhpcyBjYW4gZW1pdCBjb2RlIGZvciB0aGUgZm9sbG93aW5n
IHBhdHRlcm5zOgorICAgIC8vIEF0b21pY1dlYWtDQVMKKyAgICAvLyBCaXRYb3IoQXRvbWljV2Vh
a0NBUywgMSkKKyAgICAvLyBBdG9taWNTdHJvbmdDQVMKKyAgICAvLyBFcXVhbChBdG9taWNTdHJv
bmdDQVMsIGV4cGVjdGVkKQorICAgIC8vIE5vdEVxdWFsKEF0b21pY1N0cm9uZ0NBUywgZXhwZWN0
ZWQpCisgICAgLy8gQnJhbmNoKEF0b21pY1dlYWtDQVMpCisgICAgLy8gQnJhbmNoKEVxdWFsKEF0
b21pY1N0cm9uZ0NBUywgZXhwZWN0ZWQpKQorICAgIC8vIEJyYW5jaChOb3RFcXVhbChBdG9taWNT
dHJvbmdDQVMsIGV4cGVjdGVkKSkKKyAgICAvLworICAgIC8vIEl0IGFzc3VtZXMgdGhhdCBhdG9t
aWNWYWx1ZSBwb2ludHMgdG8gdGhlIENBUywgYW5kIG1fdmFsdWUgcG9pbnRzIHRvIHRoZSBpbnN0
cnVjdGlvbiBiZWluZworICAgIC8vIGdlbmVyYXRlZC4gSXQgYXNzdW1lcyB0aGF0IHlvdSd2ZSBj
b25zdW1lZCBldmVyeXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29uc3VtZWQuCisgICAgdm9pZCBh
cHBlbmRDQVMoVmFsdWUqIGF0b21pY1ZhbHVlLCBib29sIGludmVydCkKKyAgICB7CisgICAgICAg
IEF0b21pY1ZhbHVlKiBhdG9taWMgPSBhdG9taWNWYWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGF0b21pYyk7CisgICAgICAgIAorICAgICAgICBib29sIGlz
QnJhbmNoID0gbV92YWx1ZS0+b3Bjb2RlKCkgPT0gQnJhbmNoOworICAgICAgICBib29sIGlzU3Ry
b25nID0gYXRvbWljLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVM7CisgICAgICAgIGJvb2wg
cmV0dXJuc09sZFZhbHVlID0gbV92YWx1ZS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTOwor
ICAgICAgICAKKyAgICAgICAgV2lkdGggd2lkdGggPSBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCk7
CisgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihhdG9taWMpOworCisgICAgICAgIFRtcCB2YWx1
ZVJlc3VsdFRtcDsKKyAgICAgICAgVG1wIGJvb2xSZXN1bHRUbXA7CisgICAgICAgIGlmIChyZXR1
cm5zT2xkVmFsdWUpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbnZlcnQpOworICAg
ICAgICAgICAgdmFsdWVSZXN1bHRUbXAgPSB0bXAobV92YWx1ZSk7CisgICAgICAgICAgICBib29s
UmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNCcmFu
Y2gpIHsKKyAgICAgICAgICAgIHZhbHVlUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7Cisg
ICAgICAgICAgICBib29sUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVJlc3VsdFRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOwor
ICAgICAgICAgICAgYm9vbFJlc3VsdFRtcCA9IHRtcChtX3ZhbHVlKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgVG1wIHN1Y2Nlc3NCb29sUmVzdWx0VG1wOworICAgICAgICBpZiAoaXNT
dHJvbmcgJiYgIWlzQnJhbmNoKQorICAgICAgICAgICAgc3VjY2Vzc0Jvb2xSZXN1bHRUbXAgPSBt
X2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3VjY2Vzc0Jvb2xS
ZXN1bHRUbXAgPSBib29sUmVzdWx0VG1wOworCisgICAgICAgIFRtcCBleHBlY3RlZFZhbHVlVG1w
ID0gdG1wKGF0b21pYy0+Y2hpbGQoMCkpOworICAgICAgICBUbXAgbmV3VmFsdWVUbXAgPSB0bXAo
YXRvbWljLT5jaGlsZCgxKSk7CisgICAgICAgIAorICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9j
ayBzdWNjZXNzOworICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayBmYWlsdXJlOworICAgICAg
ICBpZiAoaXNCcmFuY2gpIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBtX2Jsb2NrVG9CbG9ja1tt
X2Jsb2NrXS0+c3VjY2Vzc29yKGludmVydCk7CisgICAgICAgICAgICBmYWlsdXJlID0gbV9ibG9j
a1RvQmxvY2tbbV9ibG9ja10tPnN1Y2Nlc3NvcighaW52ZXJ0KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92
ZUZvclR5cGUoYXRvbWljLT5vcGVyYXRpb25UeXBlKCkpLCBpbW1PclRtcChhdG9taWMtPmNoaWxk
KDApKSwgbV9lYXgpOworICAgICAgICAgICAgaWYgKHJldHVybnNPbGRWYWx1ZSkgeworICAgICAg
ICAgICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKEF0b21pY1N0cm9uZ0NBUywgd2lkdGgp
LCBtX2VheCwgbmV3VmFsdWVUbXAsIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIGFwcGVuZChy
ZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT5vcGVyYXRpb25UeXBlKCkpLCBtX2VheCwgdmFsdWVS
ZXN1bHRUbXApOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0JyYW5jaCkgeworICAgICAgICAg
ICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKEJyYW5jaEF0b21pY1N0cm9uZ0NBUywgd2lk
dGgpLCBBcmc6OnN0YXR1c0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlN1Y2Nlc3MpLCBtX2VheCwgbmV3
VmFsdWVUbXAsIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Jsb2NrW21fYmxv
Y2tdLT5zZXRTdWNjZXNzb3JzKHN1Y2Nlc3MsIGZhaWx1cmUpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgYXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljU3Ryb25nQ0FT
LCB3aWR0aCksIEFyZzo6c3RhdHVzQ29uZChpbnZlcnQgPyBNYWNyb0Fzc2VtYmxlcjo6RmFpbHVy
ZSA6IE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNzKSwgbV9lYXgsIHRtcChhdG9taWMtPmNoaWxkKDEp
KSwgYWRkcmVzcywgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7CisgICAgICAg
IC8vIFdlIHdpc2ggdG8gZW1pdDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQmxvY2sgI3JlbG9v
cDoKKyAgICAgICAgLy8gICAgIExvYWRMaW5rCisgICAgICAgIC8vICAgICBCcmFuY2ggTm90RXF1
YWwKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiBUaGVuOiNmYWlsLCBFbHNlOiAjc3RvcmUKKyAg
ICAgICAgLy8gQmxvY2sgI3N0b3JlOgorICAgICAgICAvLyAgICAgU3RvcmVDb25kCisgICAgICAg
IC8vICAgICBYb3IgJDEsICVyZXN1bHQgICAgPC0tLSBvbmx5IGlmICFpbnZlcnQKKyAgICAgICAg
Ly8gICAgIEp1bXAKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiAjZG9uZQorICAgICAgICAvLyBC
bG9jayAjZmFpbDoKKyAgICAgICAgLy8gICAgIE1vdmUgJGludmVydCwgJXJlc3VsdAorICAgICAg
ICAvLyAgICAgSnVtcAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6ICNkb25lCisgICAgICAgIC8v
IEJsb2NrICNkb25lOgorICAgICAgICAKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiByZWxvb3BC
bG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3RvcmVCbG9jayA9
IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3VjY2Vzc0Jsb2NrID0gbnVs
bHB0cjsKKyAgICAgICAgaWYgKCFpc0JyYW5jaCAmJiBpc1N0cm9uZykKKyAgICAgICAgICAgIHN1
Y2Nlc3NCbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogZmFpbEJs
b2NrID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKCFpc0JyYW5jaCkKKyAgICAgICAgICAgIGZhaWxC
bG9jayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogc3Ryb25nRmFpbEJs
b2NrOworICAgICAgICBpZiAoaXNTdHJvbmcpCisgICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2sg
PSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayBjb21wYXJpc29uRmFp
bDsKKyAgICAgICAgQWlyOjpGcmVxdWVudGVkQmxvY2sgd2Vha0ZhaWw7CisgICAgICAgIGlmIChp
c1N0cm9uZykgeworICAgICAgICAgICAgY29tcGFyaXNvbkZhaWwgPSBzdHJvbmdGYWlsQmxvY2s7
CisgICAgICAgICAgICB3ZWFrRmFpbCA9IHJlbG9vcEJsb2NrOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGlzQnJhbmNoKQorICAgICAgICAgICAgICAgIGNvbXBhcmlzb25GYWls
ID0gZmFpbHVyZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wYXJpc29u
RmFpbCA9IGZhaWxCbG9jazsKKyAgICAgICAgICAgIHdlYWtGYWlsID0gZmFpbHVyZTsKKyAgICAg
ICAgfQorICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGJlZ2luQmxvY2s7CisgICAgICAgIEFpcjo6
QmFzaWNCbG9jayogZG9uZUJsb2NrOworICAgICAgICBzcGxpdEJsb2NrKGJlZ2luQmxvY2ssIGRv
bmVCbG9jayk7CisgICAgICAgIAorICAgICAgICBhcHBlbmQoQWlyOjpKdW1wKTsKKyAgICAgICAg
YmVnaW5CbG9jay0+c2V0U3VjY2Vzc29ycyhyZWxvb3BCbG9jayk7CisgICAgICAgIAorICAgICAg
ICByZWxvb3BCbG9jay0+YXBwZW5kKGxvYWRMaW5rT3Bjb2RlKHdpZHRoLCBhdG9taWMtPmhhc0Zl
bmNlKCkpLCBtX3ZhbHVlLCB2YWx1ZVJlc3VsdFRtcCwgYWRkcmVzcyk7CisgICAgICAgIHJlbG9v
cEJsb2NrLT5hcHBlbmQoT1BDT0RFX0ZPUl9DQU5PTklDQUxfV0lEVEgoQnJhbmNoLCB3aWR0aCks
IG1fdmFsdWUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCB2YWx1ZVJl
c3VsdFRtcCwgZXhwZWN0ZWRWYWx1ZVRtcCk7CisgICAgICAgIHJlbG9vcEJsb2NrLT5zZXRTdWNj
ZXNzb3JzKGNvbXBhcmlzb25GYWlsLCBzdG9yZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIHN0
b3JlQmxvY2stPmFwcGVuZChzdG9yZUNvbmRPcGNvZGUod2lkdGgsIGF0b21pYy0+aGFzRmVuY2Uo
KSksIG1fdmFsdWUsIG5ld1ZhbHVlVG1wLCBhZGRyZXNzLCBzdWNjZXNzQm9vbFJlc3VsdFRtcCk7
CisgICAgICAgIGlmIChpc0JyYW5jaCkgeworICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5k
KEJyYW5jaFRlc3QzMiwgbV92YWx1ZSwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJv
KSwgYm9vbFJlc3VsdFRtcCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgICAgIHN0b3JlQmxv
Y2stPnNldFN1Y2Nlc3NvcnMoc3VjY2Vzcywgd2Vha0ZhaWwpOworICAgICAgICAgICAgZG9uZUJs
b2NrLT5zdWNjZXNzb3JzKCkuY2xlYXIoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFk
b25lQmxvY2stPnNpemUoKSk7CisgICAgICAgICAgICBkb25lQmxvY2stPmFwcGVuZChBaXI6Ok9v
cHMsIG1fdmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGlzU3Ryb25n
KSB7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwgbV92
YWx1ZSwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgc3VjY2Vzc0Jvb2xSZXN1
bHRUbXAsIEFyZzo6Yml0SW1tKC0xKSk7CisgICAgICAgICAgICAgICAgc3RvcmVCbG9jay0+c2V0
U3VjY2Vzc29ycyhzdWNjZXNzQmxvY2ssIHJlbG9vcEJsb2NrKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBzdWNjZXNzQmxvY2stPmFwcGVuZChNb3ZlLCBtX3ZhbHVlLCBBcmc6
OmltbSghaW52ZXJ0KSwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICAgICAgc3VjY2Vzc0Js
b2NrLT5hcHBlbmQoQWlyOjpKdW1wLCBtX3ZhbHVlKTsKKyAgICAgICAgICAgICAgICBzdWNjZXNz
QmxvY2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFpbnZlcnQpCisgICAgICAgICAgICAgICAgICAgIHN0b3JlQmxv
Y2stPmFwcGVuZChYb3IzMiwgbV92YWx1ZSwgQXJnOjpiaXRJbW0oMSksIGJvb2xSZXN1bHRUbXAs
IGJvb2xSZXN1bHRUbXApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0b3Jl
QmxvY2stPmFwcGVuZChBaXI6Okp1bXAsIG1fdmFsdWUpOworICAgICAgICAgICAgICAgIHN0b3Jl
QmxvY2stPnNldFN1Y2Nlc3NvcnMoZG9uZUJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZmFpbEJsb2NrLT5hcHBlbmQoTW92ZSwgbV92YWx1ZSwgQXJnOjpp
bW0oaW52ZXJ0KSwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICBmYWlsQmxvY2stPmFwcGVu
ZChBaXI6Okp1bXAsIG1fdmFsdWUpOworICAgICAgICAgICAgZmFpbEJsb2NrLT5zZXRTdWNjZXNz
b3JzKGRvbmVCbG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpc1N0cm9u
ZykgeworICAgICAgICAgICAgVG1wIHRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAg
ICAgc3Ryb25nRmFpbEJsb2NrLT5hcHBlbmQoc3RvcmVDb25kT3Bjb2RlKHdpZHRoLCBhdG9taWMt
Pmhhc0ZlbmNlKCkpLCBtX3ZhbHVlLCB2YWx1ZVJlc3VsdFRtcCwgYWRkcmVzcywgdG1wKTsKKyAg
ICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3QzMiwgbV92YWx1ZSwg
QXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgdG1wLCBBcmc6OmJpdEltbSgtMSkp
OworICAgICAgICAgICAgc3Ryb25nRmFpbEJsb2NrLT5zZXRTdWNjZXNzb3JzKGZhaWxCbG9jaywg
cmVsb29wQmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgYXBwZW5kVm9p
ZEF0b21pYyhBaXI6Ok9wY29kZSBhdG9taWNPcGNvZGUpCisgICAgeworICAgICAgICBpZiAobV91
c2VDb3VudHMubnVtVXNlcyhtX3ZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihtX3ZhbHVlKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChpc1ZhbGlkRm9ybShhdG9taWNPcGNvZGUsIEFyZzo6SW1tLCBhZGRyZXNzLmtp
bmQoKSkgJiYgaW1tKG1fdmFsdWUtPmNoaWxkKDApKSkgeworICAgICAgICAgICAgYXBwZW5kKGF0
b21pY09wY29kZSwgaW1tKG1fdmFsdWUtPmNoaWxkKDApKSwgYWRkcmVzcyk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzVmFsaWRG
b3JtKGF0b21pY09wY29kZSwgQXJnOjpUbXAsIGFkZHJlc3Mua2luZCgpKSkgeworICAgICAgICAg
ICAgYXBwZW5kKGF0b21pY09wY29kZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgYWRkcmVzcyk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kR2VuZXJhbEF0b21pYyhB
aXI6Ok9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0g
bV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgIAorICAgICAgICBBcmcgYWRkcmVz
cyA9IGFkZHIobV92YWx1ZSk7CisgICAgICAgIFRtcCBvbGRWYWx1ZSA9IG1fY29kZS5uZXdUbXAo
R1ApOworICAgICAgICBUbXAgbmV3VmFsdWUgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFdlIG5lZWQgYSBDQVMgbG9vcCBvciBhIExML1NDIGxvb3AuIFVzaW5nIHBy
ZXBhcmUvYXR0ZW1wdCBqYXJnb24sIHdlIHdhbnQ6CisgICAgICAgIC8vCisgICAgICAgIC8vIEJs
b2NrICNyZWxvb3A6CisgICAgICAgIC8vICAgICBQcmVwYXJlCisgICAgICAgIC8vICAgICBvcGNv
ZGUKKyAgICAgICAgLy8gICAgIEF0dGVtcHQKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiBUaGVu
OiNkb25lLCBFbHNlOiNyZWxvb3AKKyAgICAgICAgLy8gQmxvY2sgI2RvbmU6CisgICAgICAgIC8v
ICAgICBNb3ZlIG9sZFZhbHVlLCByZXN1bHQKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChyZWxh
eGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCBvbGRWYWx1ZSwgdG1wKGF0b21pYykpOwor
ICAgICAgICAKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiByZWxvb3BCbG9jayA9IG5ld0Jsb2Nr
KCk7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogYmVnaW5CbG9jazsKKyAgICAgICAgQWlyOjpC
YXNpY0Jsb2NrKiBkb25lQmxvY2s7CisgICAgICAgIHNwbGl0QmxvY2soYmVnaW5CbG9jaywgZG9u
ZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChBaXI6Okp1bXApOworICAgICAgICBi
ZWdpbkJsb2NrLT5zZXRTdWNjZXNzb3JzKHJlbG9vcEJsb2NrKTsKKyAgICAgICAgCisgICAgICAg
IEFpcjo6T3Bjb2RlIHByZXBhcmVPcGNvZGU7CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkgeworICAgICAgICAgICAg
Y2FzZSBXaWR0aDg6CisgICAgICAgICAgICAgICAgcHJlcGFyZU9wY29kZSA9IExvYWQ4U2lnbmVk
RXh0ZW5kVG8zMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2lk
dGgxNjoKKyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTG9hZDE2U2lnbmVkRXh0ZW5k
VG8zMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2lkdGgzMjoK
KyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTW92ZTMyOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAgICAgICAgIHByZXBh
cmVPcGNvZGUgPSBNb3ZlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsK
KyAgICAgICAgICAgIG9wY29kZSA9IGxvYWRMaW5rT3Bjb2RlKGF0b21pYy0+b3BlcmF0aW9uV2lk
dGgoKSwgYXRvbWljLT5oYXNGZW5jZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZWxvb3BCbG9j
ay0+YXBwZW5kKHByZXBhcmVPcGNvZGUsIG1fdmFsdWUsIGFkZHJlc3MsIG9sZFZhbHVlKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChvcGNvZGUgIT0gQWlyOjpOb3ApIHsKKyAgICAgICAgICAgIGlm
IChpbW0oYXRvbWljLT5jaGlsZCgwKSkgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwg
QXJnOjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5k
KG9wY29kZSwgbV92YWx1ZSwgaW1tKGF0b21pYy0+Y2hpbGQoMCkpLCBvbGRWYWx1ZSwgbmV3VmFs
dWUpOworICAgICAgICAgICAgZWxzZSBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwg
QXJnOjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5k
KG9wY29kZSwgbV92YWx1ZSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCBvbGRWYWx1ZSwgbmV3VmFs
dWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVsb29wQmxvY2stPmFw
cGVuZChyZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCBtX3ZhbHVlLCBvbGRWYWx1
ZSwgbmV3VmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChpbW0oYXRvbWljLT5jaGlsZCgwKSkg
JiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpUbXApKQorICAgICAgICAgICAg
ICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKG9wY29kZSwgbV92YWx1ZSwgaW1tKGF0b21pYy0+
Y2hpbGQoMCkpLCBuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKG9wY29kZSwgbV92YWx1ZSwgdG1wKGF0b21pYy0+
Y2hpbGQoMCkpLCBuZXdWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgQWlyOjpPcGNvZGUgY2FzT3Bjb2RlID0gT1BD
T0RFX0ZPUl9XSURUSChCcmFuY2hBdG9taWNTdHJvbmdDQVMsIGF0b21pYy0+b3BlcmF0aW9uV2lk
dGgoKSk7CisgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlw
ZShhdG9taWMtPnR5cGUoKSksIG1fdmFsdWUsIG9sZFZhbHVlLCBtX2VheCk7CisgICAgICAgICAg
ICByZWxvb3BCbG9jay0+YXBwZW5kKGNhc09wY29kZSwgbV92YWx1ZSwgQXJnOjpzdGF0dXNDb25k
KE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNzKSwgbV9lYXgsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7Cisg
ICAgICAgICAgICBUbXAgYm9vbFJlc3VsdCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAg
ICAgcmVsb29wQmxvY2stPmFwcGVuZChzdG9yZUNvbmRPcGNvZGUoYXRvbWljLT5vcGVyYXRpb25X
aWR0aCgpLCBhdG9taWMtPmhhc0ZlbmNlKCkpLCBtX3ZhbHVlLCBuZXdWYWx1ZSwgYWRkcmVzcywg
Ym9vbFJlc3VsdCk7CisgICAgICAgICAgICByZWxvb3BCbG9jay0+YXBwZW5kKEJyYW5jaFRlc3Qz
MiwgbV92YWx1ZSwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYm9vbFJlc3Vs
dCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgfQorICAgICAgICByZWxvb3BCbG9jay0+c2V0
U3VjY2Vzc29ycyhkb25lQmxvY2ssIHJlbG9vcEJsb2NrKTsKKyAgICB9CisgICAgCiAgICAgdm9p
ZCBsb3dlcigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CkBA
IC0xOTcxLDMwICsyMzcxLDUwIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIExvYWQ6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92
YWx1ZSwgbW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVl
KSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gbV92
YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUg
PSBBaXI6Ok9vcHM7CisgICAgICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKSB7CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChtZW1vcnktPnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNh
c2UgSW50MzI6CisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IExvYWRBY3EzMjsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAg
ICAgICAgICAgICAgICAgb3Bjb2RlID0gTG9hZEFjcTY0OworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBvcGNv
ZGUgPSBtb3ZlRm9yVHlwZShtZW1vcnktPnR5cGUoKSk7CisgICAgICAgICAgICBhcHBlbmQodHJh
cHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1f
dmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIExvYWQ4UzogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdCht
X3ZhbHVlLCBMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRt
cChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIg
OiBMb2FkOFNpZ25lZEV4dGVuZFRvMzI7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0
KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIExvYWQ4Wjog
ewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkOCwgbV92YWx1
ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29k
ZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRB
Y3E4IDogTG9hZDg7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9w
Y29kZSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIExvYWQxNlM6IHsKLSAgICAgICAg
ICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMiwg
bV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/
IExvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIgOiBMb2FkMTZTaWduZWRFeHRlbmRUbzMyOworICAg
ICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFk
ZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBMb2FkMTZaOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBp
bmdJbnN0KG1fdmFsdWUsIExvYWQxNiwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFs
dWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVlLT5hczxNZW1v
cnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3ExNiA6IExvYWQxNjsKKyAgICAgICAgICAg
IGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFs
dWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotCisg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBZGQ6IHsKICAgICAgICAgICAgIGlmICh0cnlBcHBl
bmRMZWEoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMDkyLDcgKzI1MTIsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzQ2hpbGwoKSkKICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOwogICAgICAgICAgICAgaWYgKGlzSW50KG1f
dmFsdWUtPnR5cGUoKSkgJiYgaXNYODYoKSkgewotICAgICAgICAgICAgICAgIGxvd2VyWDg2RGl2
KERpdik7CisgICAgICAgICAgICAgICAgYXBwZW5kWDg2RGl2KERpdik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQVNTRVJUKCFpc1g4NigpIHx8
IGlzRmxvYXQobV92YWx1ZS0+dHlwZSgpKSk7CkBAIC0yMTAzLDcgKzI1MjMsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgIGNhc2UgVURpdjogewogICAgICAgICAgICAgaWYgKGlzSW50KG1fdmFsdWUt
PnR5cGUoKSkgJiYgaXNYODYoKSkgewotICAgICAgICAgICAgICAgIGxvd2VyWDg2VURpdihVRGl2
KTsKKyAgICAgICAgICAgICAgICBhcHBlbmRYODZVRGl2KFVEaXYpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMjExNywxMyArMjUzNywxMyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIE1vZDogewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYo
KSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV92YWx1ZS0+aXNDaGlsbCgpKTsKLSAg
ICAgICAgICAgIGxvd2VyWDg2RGl2KE1vZCk7CisgICAgICAgICAgICBhcHBlbmRYODZEaXYoTW9k
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVU1vZDog
ewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7Ci0gICAgICAgICAgICBsb3dl
clg4NlVEaXYoVU1vZCk7CisgICAgICAgICAgICBhcHBlbmRYODZVRGl2KFVNb2QpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIxNjIsMTAgKzI1ODIsMjggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBhcHBlbmRVbk9wPE5vdDMyLCBOb3Q2ND4obV92YWx1ZS0+Y2hp
bGQoMCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gVGhpcyBwYXR0ZXJuIGlzIHN1cGVyIHVzZWZ1bCBvbiBib3Ro
IHg4NiBhbmQgQVJNNjQsIHNpbmNlIHRoZSBpbnZlcnNpb24gb2YgdGhlIENBUyByZXN1bHQKKyAg
ICAgICAgICAgIC8vIGNhbiBiZSBkb25lIHdpdGggemVybyBjb3N0IG9uIHg4NiAoanVzdCBmbGlw
IHRoZSBzZXQgZnJvbSBFIHRvIE5FKSBhbmQgaXQncyBhIHByb2dyZXNzaW9uCisgICAgICAgICAg
ICAvLyBvbiBBUk02NCAoc2luY2UgU1RYIHJldHVybnMgMCBvbiBzdWNjZXNzLCBzbyBvcmRpbmFy
aWx5IHdlIGhhdmUgdG8gZmxpcCBpdCkuCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MSktPmlzSW50KDEpCisgICAgICAgICAgICAgICAgJiYgaXNBdG9taWNDQVMobV92YWx1ZS0+Y2hp
bGQoMCktPm9wY29kZSgpKQorICAgICAgICAgICAgICAgICYmIGNhbkJlSW50ZXJuYWwobV92YWx1
ZS0+Y2hpbGQoMCkpKSB7CisgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobV92YWx1ZS0+
Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIGFwcGVuZENBUyhtX3ZhbHVlLT5jaGlsZCgwKSwg
dHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCiAgICAgICAgICAgICBhcHBlbmRCaW5PcDxYb3IzMiwgWG9yNjQsIFhvckRvdWJsZSwgWG9y
RmxvYXQsIENvbW11dGF0aXZlPigKICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwg
bV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBEZXBlbmQ6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGlzQVJNNjQoKSk7CisgICAgICAgICAgICBhcHBlbmRVbk9wPERlcGVuZDMyLCBEZXBlbmQ2
ND4obV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBTaGw6IHsKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+
aXNJbnQzMigxKSkgewpAQCAtMjI2Niw3ICsyNzA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGFwcGVuZFN0b3JlKHZhbHVlVG9T
dG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBlbmRTdG9yZShtX3ZhbHVlLCBh
ZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMjg3
LDcgKzI3MjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kU3RvcmUoQWly
OjpTdG9yZTgsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBl
bmRTdG9yZShtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC0yMzA4LDcgKzI3NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYXBwZW5kU3RvcmUoQWlyOjpTdG9yZTE2LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkp
OworICAgICAgICAgICAgYXBwZW5kU3RvcmUobV92YWx1ZSwgYWRkcihtX3ZhbHVlKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjQxNiw3ICsyODU0LDIyIEBAIHByaXZh
dGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEVxdWFsOgotICAgICAgICBjYXNlIE5vdEVx
dWFsOgorICAgICAgICBjYXNlIE5vdEVxdWFsOiB7CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUworICAgICAgICAgICAgICAgICYm
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKQorICAgICAg
ICAgICAgICAgICYmIGNhbkJlSW50ZXJuYWwobV92YWx1ZS0+Y2hpbGQoMCkpKSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKCFtX2xvY2tlZC5jb250YWlucyhtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMSkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5zKG1fdmFs
dWUtPmNoaWxkKDEpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY29tbWl0
SW50ZXJuYWwobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIGFwcGVuZENBUyht
X3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+b3Bjb2RlKCkgPT0gTm90RXF1YWwpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKG1fdmFsdWUpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
TGVzc1RoYW46CiAgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CiAgICAgICAgIGNhc2UgTGVzc0Vx
dWFsOgpAQCAtMjcyNyw2ICszMTgwLDQwIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIEJyYW5jaDogeworICAgICAgICAgICAgaWYgKGNhbkJlSW50ZXJuYWwobV92YWx1ZS0+
Y2hpbGQoMCkpKSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIGJyYW5jaENoaWxkID0gbV92YWx1
ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChicmFuY2hDaGlsZC0+b3Bjb2Rl
KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAgICAgICAg
ICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAg
YXBwZW5kQ0FTKGJyYW5jaENoaWxkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNTdHJv
bmdDQVM6CisgICAgICAgICAgICAgICAgICAgIC8vIEEgYnJhbmNoIGlzIGEgY29tcGFyaXNvbiB0
byB6ZXJvLgorICAgICAgICAgICAgICAgICAgICBpZiAoYnJhbmNoQ2hpbGQtPmNoaWxkKDApLT5p
c0ludCgwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwoYnJhbmNo
Q2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ0FTKGJyYW5jaENoaWxkLCB0
cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgICAgICAgICBjYXNlIE5vdEVxdWFs
OgorICAgICAgICAgICAgICAgICAgICBpZiAoYnJhbmNoQ2hpbGQtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBBdG9taWNTdHJvbmdDQVMKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGNhbkJlSW50
ZXJuYWwoYnJhbmNoQ2hpbGQtPmNoaWxkKDApKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYg
YnJhbmNoQ2hpbGQtPmNoaWxkKDApLT5jaGlsZCgwKSA9PSBicmFuY2hDaGlsZC0+Y2hpbGQoMSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5jaENoaWxkLT5jaGls
ZCgwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRDQVMoYnJhbmNoQ2hpbGQtPmNo
aWxkKDApLCBicmFuY2hDaGlsZC0+b3Bjb2RlKCkgPT0gTm90RXF1YWwpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVu
ZChjcmVhdGVCcmFuY2gobV92YWx1ZS0+Y2hpbGQoMCkpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMjc4NCw3ICszMjcxLDgxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBh
cHBlbmQoQWlyOjpFbnRyeVN3aXRjaCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAgIGNhc2Ug
QXRvbWljU3Ryb25nQ0FTOiB7CisgICAgICAgICAgICBhcHBlbmRDQVMobV92YWx1ZSwgZmFsc2Up
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBBdG9taWNYY2hnQWRkOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0g
bV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0
b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY0FkZCwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgp
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBB
cmcgYWRkcmVzcyA9IGFkZHIoYXRvbWljKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29k
ZSA9IE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljWGNoZ0FkZCwgYXRvbWljLT5vcGVyYXRpb25XaWR0
aCgpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBhZGRy
ZXNzLmtpbmQoKSkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBl
KGF0b21pYy0+dHlwZSgpKSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkpLCB0bXAoYXRvbWljKSk7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGF0b21pYyksIGFkZHJlc3MpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXBwZW5k
R2VuZXJhbEF0b21pYyhPUENPREVfRk9SX0NBTk9OSUNBTF9XSURUSChBZGQsIGF0b21pYy0+b3Bl
cmF0aW9uV2lkdGgoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKKyAgICAg
ICAgY2FzZSBBdG9taWNYY2hnU3ViOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWlj
ID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9p
ZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY1N1YiwgYXRvbWljLT5vcGVyYXRpb25XaWR0
aCgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfQ0FOT05JQ0FMX1dJRFRIKFN1YiwgYXRv
bWljLT5vcGVyYXRpb25XaWR0aCgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6IHsKKyAgICAgICAgICAg
IEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAg
ICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljQW5kLCBh
dG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9DQU5P
TklDQUxfV0lEVEgoQW5kLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljWGNo
Z09yOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRv
bWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9S
X1dJRFRIKEF0b21pY09yLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9t
aWMoT1BDT0RFX0ZPUl9DQU5PTklDQUxfV0lEVEgoT3IsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgo
KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBBdG9taWNYY2hnWG9yOiB7CisgICAgICAgICAgICBBdG9taWNWYWx1ZSogYXRvbWlj
ID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kVm9p
ZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY1hvciwgYXRvbWljLT5vcGVyYXRpb25XaWR0
aCgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfQ0FOT05JQ0FMX1dJRFRIKFhvciwgYXRv
bWljLT5vcGVyYXRpb25XaWR0aCgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hjaGc6IHsKKyAgICAgICAgICAgIEF0
b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisgICAgICAgICAg
ICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBPUENPREVfRk9SX1dJRFRIKEF0b21pY1hjaGcsIGF0b21p
Yy0+b3BlcmF0aW9uV2lkdGgoKSk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2Rl
LCBBcmc6OlRtcCwgYWRkcmVzcy5raW5kKCkpKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKHJl
bGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUoKSksIHRtcChhdG9taWMtPmNoaWxkKDApKSwg
dG1wKGF0b21pYykpOworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChhdG9taWMp
LCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9DQU5P
TklDQUxfV0lEVEgoWG9yLCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjc5Miw2NCArMzM1Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBjb3VsZCBub3QgbG93ZXIgIiwgZGVlcER1bXAobV9w
cm9jZWR1cmUsIG1fdmFsdWUpLCAiXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9Ci0KLSAgICB2b2lkIGxvd2VyWDg2RGl2KEIzOjpPcGNvZGUgb3ApCi0g
ICAgewotI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCi0gICAgICAgIFRtcCBlYXggPSBUbXAo
WDg2UmVnaXN0ZXJzOjplYXgpOwotICAgICAgICBUbXAgZWR4ID0gVG1wKFg4NlJlZ2lzdGVyczo6
ZWR4KTsKLQotICAgICAgICBBaXI6Ok9wY29kZSBjb252ZXJ0VG9Eb3VibGVXb3JkOwotICAgICAg
ICBBaXI6Ok9wY29kZSBkaXY7Ci0gICAgICAgIHN3aXRjaCAobV92YWx1ZS0+dHlwZSgpKSB7Ci0g
ICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2
Q29udmVydFRvRG91YmxlV29yZDMyOwotICAgICAgICAgICAgZGl2ID0gWDg2RGl2MzI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIGNvbnZlcnRU
b0RvdWJsZVdvcmQgPSBYODZDb252ZXJ0VG9RdWFkV29yZDY0OwotICAgICAgICAgICAgZGl2ID0g
WDg2RGl2NjQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBBU1NFUlQob3AgPT0gRGl2IHx8IG9wID09IE1vZCk7Ci0gICAg
ICAgIFg4NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCByZXN1bHQgPSBvcCA9PSBEaXYgPyBYODZSZWdp
c3RlcnM6OmVheCA6IFg4NlJlZ2lzdGVyczo6ZWR4OwotCi0gICAgICAgIGFwcGVuZChNb3ZlLCB0
bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBlYXgpOwotICAgICAgICBhcHBlbmQoY29udmVydFRvRG91
YmxlV29yZCwgZWF4LCBlZHgpOwotICAgICAgICBhcHBlbmQoZGl2LCBlYXgsIGVkeCwgdG1wKG1f
dmFsdWUtPmNoaWxkKDEpKSk7Ci0gICAgICAgIGFwcGVuZChNb3ZlLCBUbXAocmVzdWx0KSwgdG1w
KG1fdmFsdWUpKTsKLQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAg
VU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICB2b2lkIGxv
d2VyWDg2VURpdihCMzo6T3Bjb2RlIG9wKQotICAgIHsKLSNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2
XzY0KQotICAgICAgICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4KTsKLSAgICAgICAg
VG1wIGVkeCA9IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7Ci0KLSAgICAgICAgQWlyOjpPcGNvZGUg
ZGl2ID0gbV92YWx1ZS0+dHlwZSgpID09IEludDMyID8gWDg2VURpdjMyIDogWDg2VURpdjY0Owot
Ci0gICAgICAgIEFTU0VSVChvcCA9PSBVRGl2IHx8IG9wID09IFVNb2QpOwotICAgICAgICBYODZS
ZWdpc3RlcnM6OlJlZ2lzdGVySUQgcmVzdWx0ID0gb3AgPT0gVURpdiA/IFg4NlJlZ2lzdGVyczo6
ZWF4IDogWDg2UmVnaXN0ZXJzOjplZHg7Ci0KLSAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChtX3Zh
bHVlLT5jaGlsZCgwKSksIGVheCk7Ci0gICAgICAgIGFwcGVuZChYb3I2NCwgZWR4LCBlZHgpOwot
ICAgICAgICBhcHBlbmQoZGl2LCBlYXgsIGVkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7Ci0g
ICAgICAgIGFwcGVuZChNb3ZlLCBUbXAocmVzdWx0KSwgdG1wKG1fdmFsdWUpKTsKLSNlbHNlCi0g
ICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9S
TSgpOwotI2VuZGlmCi0gICAgfQotCisgICAgCiAgICAgSW5kZXhTZXQ8VmFsdWU+IG1fbG9ja2Vk
OyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBBaXIuCiAgICAg
SW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRo
YXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSogd2l0aCBhIG5v
bi1udWxsIFRtcCBpcyAicGlubmVkIi4KICAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBtX3BoaVRv
VG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgpAQCAtMjg2NCw3ICszMzY4LDcgQEAg
cHJpdmF0ZToKIAogICAgIFZlY3RvcjxWZWN0b3I8SW5zdCwgND4+IG1faW5zdHM7CiAgICAgVmVj
dG9yPEluc3Q+IG1fcHJvbG9ndWU7Ci0KKyAgICAKICAgICBCMzo6QmFzaWNCbG9jayogbV9ibG9j
azsKICAgICBib29sIG1faXNSYXJlOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CkBAIC0yODc1LDYg
KzMzNzksMTIgQEAgcHJpdmF0ZToKIAogICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CiAgICAg
Q29kZSYgbV9jb2RlOworCisgICAgQWlyOjpCbG9ja0luc2VydGlvblNldCBtX2Jsb2NrSW5zZXJ0
aW9uU2V0OworCisgICAgVG1wIG1fZWF4OworICAgIFRtcCBtX2VjeDsKKyAgICBUbXAgbV9lZHg7
CiB9OwogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MzAgKzM0LDQ4IEBAIE1lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQogewogfQogCitUeXBlIE1l
bW9yeVZhbHVlOjphY2Nlc3NUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAoaXNMb2FkKCkpCisgICAg
ICAgIHJldHVybiB0eXBlKCk7CisgICAgLy8gVGhpcyBoYXBwZW5zIHRvIHdvcmsgZm9yIGF0b21p
Y3MsIHRvby4gVGhhdCdzIHdoeSBBdG9taWNWYWx1ZSBkb2VzIG5vdCBuZWVkIHRvIG92ZXJyaWRl
IHRoaXMuCisgICAgcmV0dXJuIGNoaWxkKDApLT50eXBlKCk7Cit9CisKK0JhbmsgTWVtb3J5VmFs
dWU6OmFjY2Vzc0JhbmsoKSBjb25zdAoreworICAgIHJldHVybiBiYW5rRm9yVHlwZShhY2Nlc3NU
eXBlKCkpOworfQorCiBzaXplX3QgTWVtb3J5VmFsdWU6OmFjY2Vzc0J5dGVTaXplKCkgY29uc3QK
IHsKKyAgICByZXR1cm4gYnl0ZXMoYWNjZXNzV2lkdGgoKSk7Cit9CisKK1dpZHRoIE1lbW9yeVZh
bHVlOjpsb2FkU3RvcmVXaWR0aCgpIGNvbnN0Cit7CiAgICAgc3dpdGNoIChvcGNvZGUoKSkgewog
ICAgIGNhc2UgTG9hZDhaOgogICAgIGNhc2UgTG9hZDhTOgogICAgIGNhc2UgU3RvcmU4OgotICAg
ICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIFdpZHRoODsKICAgICBjYXNlIExvYWQxNlo6
CiAgICAgY2FzZSBMb2FkMTZTOgogICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgcmV0dXJuIDI7
CisgICAgICAgIHJldHVybiBXaWR0aDE2OwogICAgIGNhc2UgTG9hZDoKLSAgICAgICAgcmV0dXJu
IHNpemVvZlR5cGUodHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlwZSh0eXBlKCkp
OwogICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgIHJldHVybiBzaXplb2ZUeXBlKGNoaWxkKDApLT50
eXBlKCkpOworICAgICAgICByZXR1cm4gd2lkdGhGb3JUeXBlKGNoaWxkKDApLT50eXBlKCkpOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gV2lkdGg4OwogICAgIH0KIH0KIAogV2lkdGgg
TWVtb3J5VmFsdWU6OmFjY2Vzc1dpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gd2lkdGhGb3JC
eXRlcyhhY2Nlc3NCeXRlU2l6ZSgpKTsKKyAgICByZXR1cm4gbG9hZFN0b3JlV2lkdGgoKTsKIH0K
IAogdm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKQEAgLTY1LDggKzgzLDExIEBAIHZvaWQgTWVtb3J5VmFsdWU6OmR1
bXBNZXRhKENvbW1hUHJpbnRlciYKICAgICBpZiAobV9vZmZzZXQpCiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKICAgICBpZiAoKGlzTG9hZCgpICYmIGVm
ZmVjdHMoKS5yZWFkcyAhPSByYW5nZSgpKQotICAgICAgICB8fCAoaXNTdG9yZSgpICYmIGVmZmVj
dHMoKS53cml0ZXMgIT0gcmFuZ2UoKSkpCisgICAgICAgIHx8IChpc1N0b3JlKCkgJiYgZWZmZWN0
cygpLndyaXRlcyAhPSByYW5nZSgpKQorICAgICAgICB8fCBmZW5jZVJhbmdlKCkpCiAgICAgICAg
IG91dC5wcmludChjb21tYSwgInJhbmdlID0gIiwgcmFuZ2UoKSk7CisgICAgaWYgKGZlbmNlUmFu
Z2UoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZmVuY2VSYW5nZSA9ICIsIGZlbmNlUmFu
Z2UoKSk7CiB9CiAKIFZhbHVlKiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKQEAgLTc0
LDYgKzk1LDU4IEBAIFZhbHVlKiBNZW1vcnlWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKICAgICBy
ZXR1cm4gbmV3IE1lbW9yeVZhbHVlKCp0aGlzKTsKIH0KIAorLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
TG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhh
dmUgYSBzdWZmaXggdGhhdAorLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KK01lbW9y
eVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0KQorICAgIDogVmFsdWUoQ2hlY2tlZE9wY29k
ZSwga2luZCwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAgICwgbV9vZmZzZXQob2Zmc2V0KQor
eworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIHN3aXRjaCAoa2luZC5vcGNv
ZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExvYWQxNlo6
CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgY2Fz
ZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgQVNTRVJUKHR5cGUg
PT0gVm9pZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorfQorCisvLyBVc2Ug
dGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KK01l
bW9yeVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBw
b2ludGVyLCBpbnQzMl90IG9mZnNldCkKKyAgICA6IE1lbW9yeVZhbHVlKGtpbmQsIEludDMyLCBv
cmlnaW4sIHBvaW50ZXIsIG9mZnNldCkKK3sKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewor
ICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBMb2FkOFo6Cisg
ICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2Ug
TG9hZDE2UzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIFVzZSB0
aGlzIGZvcm0gZm9yIHN0b3Jlcy4KK01lbW9yeVZhbHVlOjpNZW1vcnlWYWx1ZShLaW5kIGtpbmQs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zm
c2V0KQorICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2YWx1
ZSwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAgICBBU1NFUlQoQjM6Omlz
U3RvcmUoa2luZC5vcGNvZGUoKSkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAog
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDQ4ICsyNywxNyBAQAog
CiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzQmFuay5oIgogI2luY2x1ZGUgIkIz
SGVhcFJhbmdlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKIAotLy8gRklYTUU6IFdlIHdhbnQgdG8gYWxsb3cgZmVuY2VkIG1lbW9yeSBh
Y2Nlc3NlcyBvbiBBUk0uCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYyMzQ5Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeVZhbHVlIDogcHVibGlj
IFZhbHVlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKEtpbmQga2luZCkKICAg
ICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICBjYXNlIExvYWQ4
WjoKLSAgICAgICAgY2FzZSBMb2FkOFM6Ci0gICAgICAgIGNhc2UgTG9hZDE2WjoKLSAgICAgICAg
Y2FzZSBMb2FkMTZTOgotICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAgIGNhc2UgU3RvcmU4Ogot
ICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzU3RvcmUoS2luZCBraW5kKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgU3Rv
cmU4OgotICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzTG9hZChLaW5kIGtp
bmQpCi0gICAgewotICAgICAgICByZXR1cm4gYWNjZXB0cyhraW5kKSAmJiAhaXNTdG9yZShraW5k
KTsKKyAgICAgICAgcmV0dXJuIGlzTWVtb3J5QWNjZXNzKGtpbmQub3Bjb2RlKCkpOwogICAgIH0K
IAogICAgIH5NZW1vcnlWYWx1ZSgpOwpAQCAtNzgsNzYgKzQ3LDU2IEBAIHB1YmxpYzoKIAogICAg
IGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlOyB9CiAgICAg
dm9pZCBzZXRSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKSB7IG1fcmFuZ2UgPSByYW5nZTsg
fQorICAgIAorICAgIC8vIFRoaXMgaXMgYW4gYWxpYXMgZm9yIHJhbmdlLgorICAgIGNvbnN0IEhl
YXBSYW5nZSYgYWNjZXNzUmFuZ2UoKSBjb25zdCB7IHJldHVybiByYW5nZSgpOyB9CisgICAgdm9p
ZCBzZXRBY2Nlc3NSYW5nZShjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKSB7IHNldFJhbmdlKHJhbmdl
KTsgfQorICAgIAorICAgIGNvbnN0IEhlYXBSYW5nZSYgZmVuY2VSYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZmVuY2VSYW5nZTsgfQorICAgIHZvaWQgc2V0RmVuY2VSYW5nZShjb25zdCBIZWFwUmFu
Z2UmIHJhbmdlKSB7IG1fZmVuY2VSYW5nZSA9IHJhbmdlOyB9CisKKyAgICBib29sIGlzU3RvcmUo
KSBjb25zdCB7IHJldHVybiBCMzo6aXNTdG9yZShvcGNvZGUoKSk7IH0KKyAgICBib29sIGlzTG9h
ZCgpIGNvbnN0IHsgcmV0dXJuIEIzOjppc0xvYWQob3Bjb2RlKCkpOyB9CiAKLSAgICBib29sIGlz
U3RvcmUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVm9pZDsgfQotICAgIGJvb2wgaXNMb2Fk
KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpICE9IFZvaWQ7IH0KKyAgICBib29sIGhhc0ZlbmNlKCkg
Y29uc3QgeyByZXR1cm4gISFmZW5jZVJhbmdlKCk7IH0KIAorICAgIFR5cGUgYWNjZXNzVHlwZSgp
IGNvbnN0OworICAgIEJhbmsgYWNjZXNzQmFuaygpIGNvbnN0OwogICAgIHNpemVfdCBhY2Nlc3NC
eXRlU2l6ZSgpIGNvbnN0OwotICAgIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CisgICAgCisg
ICAgLy8gU2xpZ2h0bHkgZmFzdGVyIHZlcnNpb24gb2YgYWNjZXNzV2lkdGgsIGlmIHlvdSBrbm93
IHRoYXQgeW91J3JlIHdvcmtpbmcgd2l0aCBhIGxvYWQgb3Igc3RvcmUuCisgICAgV2lkdGggbG9h
ZFN0b3JlV2lkdGgoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIFdpZHRoIGFjY2Vzc1dpZHRo
KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYg
Y29tbWEsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkdW1wTWV0YShD
b21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVmFsdWUq
IGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgIE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIEtpbmQga2luZCwg
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IG9mZnNldCwgQXJndW1lbnRzLi4uIGFy
Z3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmln
aW4sIGFyZ3VtZW50cy4uLikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAg
IH0KKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKLQorICAgIAog
ICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9y
IGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKICAgICAvLyBkZXNjcmli
ZXMgdGhlIHJldHVybmVkIHR5cGUpLgotICAgIE1lbW9yeVZhbHVlKEtpbmQga2luZCwgVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQot
ICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUsIG9yaWdpbiwgcG9pbnRl
cikKLSAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5nZShIZWFwUmFu
Z2U6OnRvcCgpKQotICAgIHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBMb2FkOgot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMb2FkOFo6Ci0gICAgICAg
ICAgICBjYXNlIExvYWQ4UzoKLSAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKLSAgICAgICAgICAg
IGNhc2UgTG9hZDE2UzoKLSAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAg
ICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgICAgIGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKHR5cGUgPT0gVm9pZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIFR5cGUs
IE9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCk7CiAKICAgICAvLyBV
c2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4K
LSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVy
LCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDogTWVtb3J5VmFsdWUoa2luZCwgSW50MzIs
IG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KQotICAgIHsKLSAgICB9CisgICAgTWVtb3J5VmFsdWUo
S2luZCwgT3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKTsKIAogICAg
IC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zm
c2V0ID0gMCkKLSAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCBWb2lkLCBvcmln
aW4sIHZhbHVlLCBwb2ludGVyKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAg
LCBtX3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCi0gICAgewotICAgICAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkgewotICAgICAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgICAg
IGNhc2UgU3RvcmU6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCisgICAgTWVtb3J5VmFs
dWUoS2luZCwgT3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9m
ZnNldCA9IDApOworICAgIAogICAgIGludDMyX3QgbV9vZmZzZXQgeyAwIH07Ci0gICAgSGVhcFJh
bmdlIG1fcmFuZ2U7CisgICAgSGVhcFJhbmdlIG1fcmFuZ2UgeyBIZWFwUmFuZ2U6OnRvcCgpIH07
CisgICAgSGVhcFJhbmdlIG1fZmVuY2VSYW5nZSB7IEhlYXBSYW5nZSgpIH07CiB9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM05h
dGl2ZVRyYWl0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM05h
dGl2ZVRyYWl0cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M05hdGl2ZVRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFuay5oIgorI2luY2x1ZGUgIkIzVHlw
ZS5oIgorI2luY2x1ZGUgIkIzV2lkdGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTmF0aXZlVHJhaXRzOworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBOYXRpdmVUcmFpdHM8aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0IEJhbmsg
YmFuayA9IEdQOworICAgIHN0YXRpYyBjb25zdCBXaWR0aCB3aWR0aCA9IFdpZHRoODsKKyAgICBz
dGF0aWMgY29uc3QgVHlwZSB0eXBlID0gSW50MzI7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBO
YXRpdmVUcmFpdHM8dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBHUDsK
KyAgICBzdGF0aWMgY29uc3QgV2lkdGggd2lkdGggPSBXaWR0aDg7CisgICAgc3RhdGljIGNvbnN0
IFR5cGUgdHlwZSA9IEludDMyOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVHJhaXRz
PGludDE2X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgQmFuayBiYW5rID0gR1A7CisgICAgc3RhdGlj
IGNvbnN0IFdpZHRoIHdpZHRoID0gV2lkdGgxNjsKKyAgICBzdGF0aWMgY29uc3QgVHlwZSB0eXBl
ID0gSW50MzI7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVUcmFpdHM8dWludDE2X3Q+
IHsKKyAgICBzdGF0aWMgY29uc3QgQmFuayBiYW5rID0gR1A7CisgICAgc3RhdGljIGNvbnN0IFdp
ZHRoIHdpZHRoID0gV2lkdGgxNjsKKyAgICBzdGF0aWMgY29uc3QgVHlwZSB0eXBlID0gSW50MzI7
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVUcmFpdHM8aW50MzJfdD4geworICAgIHN0
YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBHUDsKKyAgICBzdGF0aWMgY29uc3QgV2lkdGggd2lkdGgg
PSBXaWR0aDMyOworICAgIHN0YXRpYyBjb25zdCBUeXBlIHR5cGUgPSBJbnQzMjsKK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IE5hdGl2ZVRyYWl0czx1aW50MzJfdD4geworICAgIHN0YXRpYyBjb25z
dCBCYW5rIGJhbmsgPSBHUDsKKyAgICBzdGF0aWMgY29uc3QgV2lkdGggd2lkdGggPSBXaWR0aDMy
OworICAgIHN0YXRpYyBjb25zdCBUeXBlIHR5cGUgPSBJbnQzMjsKK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IE5hdGl2ZVRyYWl0czxpbnQ2NF90PiB7CisgICAgc3RhdGljIGNvbnN0IEJhbmsgYmFu
ayA9IEdQOworICAgIHN0YXRpYyBjb25zdCBXaWR0aCB3aWR0aCA9IFdpZHRoNjQ7CisgICAgc3Rh
dGljIGNvbnN0IFR5cGUgdHlwZSA9IEludDY0OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0
aXZlVHJhaXRzPHVpbnQ2NF90PiB7CisgICAgc3RhdGljIGNvbnN0IEJhbmsgYmFuayA9IEdQOwor
ICAgIHN0YXRpYyBjb25zdCBXaWR0aCB3aWR0aCA9IFdpZHRoNjQ7CisgICAgc3RhdGljIGNvbnN0
IFR5cGUgdHlwZSA9IEludDY0OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVHJhaXRz
PGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0IEJhbmsgYmFuayA9IEZQOworICAgIHN0YXRpYyBj
b25zdCBXaWR0aCB3aWR0aCA9IFdpZHRoMzI7CisgICAgc3RhdGljIGNvbnN0IFR5cGUgdHlwZSA9
IEZsb2F0OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVHJhaXRzPGRvdWJsZT4gewor
ICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBGUDsKKyAgICBzdGF0aWMgY29uc3QgV2lkdGgg
d2lkdGggPSBXaWR0aDY0OworICAgIHN0YXRpYyBjb25zdCBUeXBlIHR5cGUgPSBEb3VibGU7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMjEy
OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTY4LDYgKzY4LDIzIEBAIHN0ZDo6b3B0aW9uYWw8T3Bjb2RlPiBpbnZlcnRlZENv
bXBhcmUoT3AKICAgICB9CiB9CiAKK09wY29kZSBzdG9yZU9wY29kZShCYW5rIGJhbmssIFdpZHRo
IHdpZHRoKQoreworICAgIHN3aXRjaCAoYmFuaykgeworICAgIGNhc2UgR1A6CisgICAgICAgIHN3
aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBXaWR0aDg6CisgICAgICAgICAgICByZXR1cm4g
U3RvcmU4OworICAgICAgICBjYXNlIFdpZHRoMTY6CisgICAgICAgICAgICByZXR1cm4gU3RvcmUx
NjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTdG9yZTsKKyAgICAgICAg
fQorICAgIGNhc2UgRlA6CisgICAgICAgIHJldHVybiBTdG9yZTsKKyAgICB9Cit9CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMwogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTI2Myw2ICsyODAsMzMg
QEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wYwogICAgIGNhc2UgU3Rv
cmU6CiAgICAgICAgIG91dC5wcmludCgiU3RvcmUiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAgb3V0LnByaW50KCJBdG9taWNXZWFrQ0FTIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgb3V0LnBy
aW50KCJBdG9taWNTdHJvbmdDQVMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXRvbWlj
WGNoZ0FkZDoKKyAgICAgICAgb3V0LnByaW50KCJBdG9taWNYY2hnQWRkIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAgIG91dC5wcmludCgiQXRvbWlj
WGNoZ0FuZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAg
ICAgIG91dC5wcmludCgiQXRvbWljWGNoZ09yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEF0b21pY1hjaGdTdWI6CisgICAgICAgIG91dC5wcmludCgiQXRvbWljWGNoZ1N1YiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICBvdXQucHJpbnQo
IkF0b21pY1hjaGdYb3IiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXRvbWljWGNoZzoK
KyAgICAgICAgb3V0LnByaW50KCJBdG9taWNYY2hnIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIERlcGVuZDoKKyAgICAgICAgb3V0LnByaW50KCJEZXBlbmQiKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgV2FzbUFkZHJlc3M6CiAgICAgICAgIG91dC5wcmludCgiV2FzbUFkZHJlc3Mi
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bj
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAK
ICNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlICJCM1dpZHRoLmgiCiAjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC04Miw3ICs4
Myw2IEBAIGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgTW9kLCAvLyBBbGwgYmV0cyBhcmUg
b2ZmIGFzIHRvIHdoYXQgd2lsbCBoYXBwZW4gd2hlbiB5b3UgZXhlY3V0ZSB0aGlzIGZvciAtMl4z
MSUtMSBhbmQgeCUwLgogICAgIFVNb2QsCiAKLQogICAgIC8vIFBvbHltb3JwaGljIG5lZ2F0aW9u
LiBOb3RlIHRoYXQgd2Ugb25seSBuZWVkIHRoaXMgZm9yIGZsb2F0aW5nIHBvaW50LCBzaW5jZSBp
bnRlZ2VyIG5lZ2F0aW9uCiAgICAgLy8gaXMgZXhhY3RseSBsaWtlIFN1YigwLCB4KS4gQnV0IHRo
YXQncyBub3QgdHJ1ZSBmb3IgZmxvYXRpbmcgcG9pbnQuIFN1YigwLCAwKSBpcyAwLCB3aGlsZQog
ICAgIC8vIE5lZygwKSBpcyAtMC4gQWxzbywgd2UgY2Fub25pY2FsaXplIFN1YigwLCB4KSBpbnRv
IE5lZyh4KSBpbiBjYXNlIG9mIGludGVnZXJzLgpAQCAtMTYyLDYgKzE2MiwxMDcgQEAgZW51bSBP
cGNvZGUgOiBpbnQxNl90IHsKICAgICBTdG9yZTE2LAogICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9y
cGhpYyBzdG9yZSBmb3IgSW50MzIsIEludDY0LCBGbG9hdCwgYW5kIERvdWJsZS4KICAgICBTdG9y
ZSwKKyAgICAKKyAgICAvLyBBdG9taWMgY29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgYSBi
b29sZWFuLiBNYXkgY2hvb3NlIHRvIGRvIG5vdGhpbmcgYW5kIHJldHVybiBmYWxzZS4gWW91IGNh
bgorICAgIC8vIHVzdWFsbHkgYXNzdW1lIHRoYXQgdGhpcyBpcyBmYXN0ZXIgYW5kIHJlc3VsdHMg
aW4gbGVzcyBjb2RlIHRoYW4gQXRvbWljU3Ryb25nQ0FTLCB0aG91Z2ggdGhhdCdzCisgICAgLy8g
bm90IG5lY2Vzc2FyaWx5IHRydWUgb24gSW50ZWwsIGlmIGluc3RydWN0aW9uIHNlbGVjdGlvbiBk
b2VzIGl0cyBqb2IuIEltYWdpbmUgdGhhdCB0aGlzIG9wY29kZSBpcworICAgIC8vIGFzIGlmIHlv
dSBkaWQgdGhpcyBhdG9taWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICAvLyBib29sIEF0b21pY1dlYWtDQVMoVCBleHBlY3RlZFZhbHVlLCBUIG5ld1ZhbHVl
LCBUKiBwdHIpCisgICAgLy8geworICAgIC8vICAgICBpZiAoIXJhbmQoKSkKKyAgICAvLyAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gUmVhbCB3b3JsZCBleGFtcGxlIG9mIHRoaXM6IGNvbnRleHQg
c3dpdGNoIG9uIEFSTSB3aGlsZSBkb2luZyBDQVMuCisgICAgLy8gICAgIGlmICgqcHRyICE9IGV4
cGVjdGVkVmFsdWUpCisgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gICAgICpw
dHIgPSBuZXdWYWx1ZTsKKyAgICAvLyAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gfQorICAgIC8v
CisgICAgLy8gTm90ZSB0aGF0IGFsbCBhdG9taWNzIHB1dCB0aGUgcG9pbnRlciBsYXN0IHRvIGJl
IGNvbnNpc3RlbnQgd2l0aCBob3cgbG9hZHMgYW5kIHN0b3JlcyB3b3JrLiBUaGlzCisgICAgLy8g
aXMgYSBnb29meSB0cmFkaXRpb24sIGJ1dCBpdCdzIGhhcm1sZXNzLCBhbmQgYmV0dGVyIHRoYW4g
YmVpbmcgaW5jb25zaXN0ZW50LgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHdlYWsgQ0FTIGhh
cyBubyBmZW5jaW5nIGd1YXJhbnRlZXMgd2hlbiBpdCBmYWlscy4gVGhpcyBtZWFucyB0aGF0IHRo
ZSBmb2xsb3dpbmcKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbiBpcyBhbHdheXMgdmFsaWQ6CisgICAg
Ly8KKyAgICAvLyBCZWZvcmU6CisgICAgLy8KKyAgICAvLyAgICAgICAgIEJyYW5jaChBdG9taWNX
ZWFrQ0FTKGV4cGVjdGVkLCBuZXcsIHB0cikpCisgICAgLy8gICAgICAgU3VjY2Vzc29yczogVGhl
bjojc3VjY2VzcywgRWxzZTojZmFpbAorICAgIC8vCisgICAgLy8gQWZ0ZXI6CisgICAgLy8KKyAg
ICAvLyAgICAgICAgIEJyYW5jaChFcXVhbChMb2FkKHB0ciksIGV4cGVjdGVkKSkKKyAgICAvLyAg
ICAgICBTdWNjZXNzb3JzOiBUaGVuOiNhdHRlbXB0LCBFbHNlOiNmYWlsCisgICAgLy8gICAgIEJC
I2F0dGVtcHQ6CisgICAgLy8gICAgICAgICBCcmFuY2goQXRvbWljV2Vha0NBUyhleHBlY3RlZCwg
bmV3LCBwdHIpKQorICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I3N1Y2Nlc3MsIEVsc2U6
I2ZhaWwKKyAgICAvLworICAgIC8vIEJvdGgga2luZHMgb2YgQ0FTIGZvciBub24tY2Fub25pY2Fs
IHdpZHRocyAoV2lkdGg4IGFuZCBXaWR0aDE2KSBpZ25vcmUgdGhlIGlycmVsZXZhbnQgYml0cyBv
ZiB0aGUKKyAgICAvLyBpbnB1dC4KKyAgICBBdG9taWNXZWFrQ0FTLAorICAgIAorICAgIC8vIEF0
b21pYyBjb21wYXJlIGFuZCBzd2FwIHRoYXQgcmV0dXJucyB0aGUgb2xkIHZhbHVlLiBEb2VzIG5v
dCBoYXZlIHRoZSBub25kZXRlcm1pbmlzbSBvZiBXZWFrQ0FTLgorICAgIC8vIFRoaXMgaXMgYSBi
aXQgbW9yZSBjb2RlIGFuZCBhIGJpdCBzbG93ZXIgaW4gc29tZSBjYXNlcywgdGhvdWdoIG5vdCBi
eSBhIGxvdC4gSW1hZ2luZSB0aGF0IHRoaXMKKyAgICAvLyBvcGNvZGUgaXMgYXMgaWYgeW91IGRp
ZCB0aGlzIGF0b21pY2FsbHk6CisgICAgLy8KKyAgICAvLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIC8vIFQgQXRvbWljU3Ryb25nQ0FTKFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSwgVCog
cHRyKQorICAgIC8vIHsKKyAgICAvLyAgICAgVCBvbGRWYWx1ZSA9ICpwdHI7CisgICAgLy8gICAg
IGlmIChvbGRWYWx1ZSA9PSBleHBlY3RlZFZhbHVlKQorICAgIC8vICAgICAgICAgKnB0ciA9IG5l
d1ZhbHVlOworICAgIC8vICAgICByZXR1cm4gb2xkVmFsdWUKKyAgICAvLyB9CisgICAgLy8KKyAg
ICAvLyBOb3RlIHRoYXQgQXRvbWljV2Vha0NBUyBhbmQgQXRvbWljU3Ryb25nQ0FTIHNvcnQgb2Yg
aGF2ZSB0aGlzIGtpbmQgb2YgZXF1aXZhbGVuY2U6CisgICAgLy8KKyAgICAvLyBBdG9taWNXZWFr
Q0FTKEBleHAsIEBuZXcsIEBwdHIpID09IEVxdWFsKEF0b21pY1N0cm9uZ0NBUyhAZXhwLCBAbmV3
LCBAcHRyKSwgQGV4cCkKKyAgICAvLworICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhlIFdlYWtDQVMg
ZG9lcyBub3Qgc3B1cmlvdXNseSBmYWlsLCBvZiBjb3Vyc2UuCisgICAgQXRvbWljU3Ryb25nQ0FT
LAorICAgIAorICAgIC8vIEF0b21pY2FsbHkgX19fIGEgbWVtb3J5IGxvY2F0aW9uIGFuZCByZXR1
cm4gdGhlIG9sZCB2YWx1ZS4gU3ludGF4OgorICAgIC8vCisgICAgLy8gQG9sZFZhbHVlID0gQXRv
bWljWGNoZ19fXyhAb3BlcmFuZCwgQHB0cikKKyAgICAvLworICAgIC8vIEZvciBub24tY2Fub25p
Y2FsIHdpZHRocyAoV2lkdGg4IGFuZCBXaWR0aDE2KSwgdGhlc2UgcmV0dXJuIHNpZ24tZXh0ZW5k
ZWQgcmVzdWx0cyBhbmQgaWdub3JlIHRoZQorICAgIC8vIGlycmVsZXZhbnQgYml0cyBvZiB0aGVp
ciBpbnB1dHMuCisgICAgQXRvbWljWGNoZ0FkZCwKKyAgICBBdG9taWNYY2hnQW5kLAorICAgIEF0
b21pY1hjaGdPciwKKyAgICBBdG9taWNYY2hnU3ViLAorICAgIEF0b21pY1hjaGdYb3IsCisgICAg
CisgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBoYXZlIEF0b21pY1hjaGdOZWcgYW5kIEF0
b21pY1hjaGdOb3QuCisgICAgCisgICAgLy8gQXRvbWljYWxseSBleGNoYW5nZSBhIHZhbHVlIHdp
dGggYSBtZW1vcnkgbG9jYXRpb24uIFN5bnRheDoKKyAgICAvLworICAgIC8vIEBvbGRWYWx1ZSA9
IEF0b21pY1hjaGcoQG5ld1ZhbHVlLCBAcHRyKQorICAgIEF0b21pY1hjaGcsCisgICAgCisgICAg
Ly8gSW50cm9kdWNlIGFuIGludmlzaWJsZSBkZXBlbmRlbmN5IGZvciBibG9ja2luZyBtb3Rpb24g
b2YgbG9hZHMgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3RoZXIuIFN5bnRheDoKKyAgICAvLworICAg
IC8vIEByZXN1bHQgPSBEZXBlbmQoQHBoYW50b20pCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIGV2
ZW50dWFsbHkgY29kZWdlbmVyYXRlZCB0byBoYXZlIGxvY2FsIHNlbWFudGljcyBhcyBpZiB3ZSBk
aWQ6CisgICAgLy8KKyAgICAvLyBAcmVzdWx0ID0gJDAKKyAgICAvLworICAgIC8vIEJ1dCBpdCBl
bnN1cmVzIHRoYXQgdGhlIHVzZXJzIG9mIEByZXN1bHQgY2Fubm90IGV4ZWN1dGUgdW50aWwgQHBo
YW50b20gaXMgY29tcHV0ZWQuCisgICAgLy8KKyAgICAvLyBUaGUgY29tcGlsZXIgaXMgbm90IGFs
bG93ZWQgdG8gcmVhc29uIGFib3V0IHRoZSBmYWN0IHRoYXQgRGVwZW5kIGNvZGVnZW5lcmF0ZXMg
dGhpcyB3YXkuIEFueSBraW5kCisgICAgLy8gb2YgdHJhbnNmb3JtYXRpb24gb3IgYW5hbHlzaXMg
dGhhdCByZWxpZXMgb24gdGhlIGluc2lnaHQgdGhhdCBEZXBlbmQgaXMgcmVhbGx5IHplcm8gaXMg
dW5zb3VuZCwKKyAgICAvLyBiZWNhdXNlIGl0IHVubG9ja3MgcmVvcmRlcmluZyBvZiB1c2VycyBv
ZiBAcmVzdWx0IGFuZCBAcGhhbnRvbS4KKyAgICAvLworICAgIC8vIE9uIFg4NiwgdGhpcyBpcyBs
b3dlcmVkIHRvIGEgbG9hZC1sb2FkIGZlbmNlIGFuZCBAcmVzdWx0IHVzZXMgQHBoYW50b20gZGly
ZWN0bHkuCisgICAgLy8KKyAgICAvLyBPbiBBUk0sIHRoaXMgaXMgbG93ZXJlZCBhcyBpZiBsaWtl
OgorICAgIC8vCisgICAgLy8gQHJlc3VsdCA9IEJpdFhvcihAcGhhbnRvbSwgQHBoYW50b20pCisg
ICAgLy8KKyAgICAvLyBFeGNlcHQgdGhhdCB0aGUgY29tcGlsZXIgbmV2ZXIgZ2V0cyBhbiBvcHBv
cnR1bml0eSB0byBzaW1wbGlmeSBvdXQgdGhlIEJpdFhvci4KKyAgICBEZXBlbmQsCiAKICAgICAv
LyBUaGlzIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsIGFkZHJlc3Mgb2YgYSBXYXNtIG1l
bW9yeSBvcGVyYXRpb24uIEl0IHRha2VzIGFuIEludFB0cgogICAgIC8vIGFuZCBhIHBpbm5lZCBy
ZWdpc3RlciB0aGVuIGNvbXB1dGVzIHRoZSBhcHByb3ByaWF0ZSBJbnRQdHIgYWRkcmVzcy4gRm9y
IHRoZSB1c2UtY2FzZSBvZgpAQCAtMzAxLDYgKzQwMiwxMTIgQEAgaW5saW5lIGJvb2wgaXNEZWZp
bml0ZWx5VGVybWluYWwoT3Bjb2RlIAogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgaXNMb2FkKE9w
Y29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIExvYWQ4WjoK
KyAgICBjYXNlIExvYWQ4UzoKKyAgICBjYXNlIExvYWQxNlo6CisgICAgY2FzZSBMb2FkMTZTOgor
ICAgIGNhc2UgTG9hZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNTdG9yZShPcGNvZGUg
b3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBTdG9yZTg6CisgICAg
Y2FzZSBTdG9yZTE2OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29s
IGlzTG9hZFN0b3JlKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICBjYXNlIExvYWQ4WjoKKyAgICBjYXNlIExvYWQ4UzoKKyAgICBjYXNlIExvYWQxNlo6CisgICAg
Y2FzZSBMb2FkMTZTOgorICAgIGNhc2UgTG9hZDoKKyAgICBjYXNlIFN0b3JlODoKKyAgICBjYXNl
IFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNB
dG9taWMoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2Ug
QXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICBjYXNlIEF0b21p
Y1hjaGdBZGQ6CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRvbWljWGNoZ09y
OgorICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAg
Y2FzZSBBdG9taWNYY2hnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0F0b21pY0NBUyhP
cGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBBdG9taWNX
ZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUg
Ym9vbCBpc0F0b21pY1hjaGcoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkg
eworICAgIGNhc2UgQXRvbWljWGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAg
Y2FzZSBBdG9taWNYY2hnT3I6CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRv
bWljWGNoZ1hvcjoKKyAgICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBi
b29sIGlzTWVtb3J5QWNjZXNzKE9wY29kZSBvcGNvZGUpCit7CisgICAgcmV0dXJuIGlzQXRvbWlj
KG9wY29kZSkgfHwgaXNMb2FkU3RvcmUob3Bjb2RlKTsKK30KKworaW5saW5lIE9wY29kZSBzaWdu
RXh0ZW5kT3Bjb2RlKFdpZHRoIHdpZHRoKQoreworICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICBj
YXNlIFdpZHRoODoKKyAgICAgICAgcmV0dXJuIFNFeHQ4OworICAgIGNhc2UgV2lkdGgxNjoKKyAg
ICAgICAgcmV0dXJuIFNFeHQxNjsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gT29wczsKKyAgICB9Cit9CisKK0pTX0VY
UE9SVF9QUklWQVRFIE9wY29kZSBzdG9yZU9wY29kZShCYW5rIGJhbmssIFdpZHRoIHdpZHRoKTsK
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDIsNiArMjAyLDggQEAgdm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgYwogICAgICAgICB9CiAgICAgICAgIGRhdGFMb2coIiAgICAiLCBkZWVwRHVtcCgqdGhpcywg
dmFsdWUpLCAiXG4iKTsKICAgICB9CisgICAgaWYgKGhhc1F1aXJrcygpKQorICAgICAgICBvdXQu
cHJpbnQoIkhhcyBRdWlya3M6IFRydWVcbiIpOwogICAgIGlmICh2YXJpYWJsZXMoKS5zaXplKCkp
IHsKICAgICAgICAgb3V0LnByaW50KCJWYXJpYWJsZXM6XG4iKTsKICAgICAgICAgZm9yIChWYXJp
YWJsZSogdmFyaWFibGUgOiB2YXJpYWJsZXMoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3IEBAIHB1
YmxpYzoKICAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoT3JpZ2luLCBUeXBlLCBpbnQ2NF90IHZh
bHVlKTsKICAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoVmFsdWUqLCBpbnQ2NF90IHZhbHVlKTsK
IAorICAgIC8vIFlvdSdyZSBndWFyYW50ZWVkIHRoYXQgYm90dG9tIGlzIHplcm8uCiAgICAgVmFs
dWUqIGFkZEJvdHRvbShPcmlnaW4sIFR5cGUpOwogICAgIFZhbHVlKiBhZGRCb3R0b20oVmFsdWUq
KTsKIApAQCAtMTk1LDYgKzE5NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gYWxpdmUuIEdyZWF0IGZv
ciBjb21waWxlci1nZW5lcmF0ZWQgZGF0YSBzZWN0aW9ucywgbGlrZSBzd2l0Y2gganVtcCB0YWJs
ZXMgYW5kIGNvbnN0YW50IHBvb2xzLgogICAgIC8vIFRoaXMgcmV0dXJucyBtZW1vcnkgdGhhdCBo
YXMgYmVlbiB6ZXJvLWluaXRpYWxpemVkLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFk
ZERhdGFTZWN0aW9uKHNpemVfdCk7CisgICAgCisgICAgLy8gU29tZSBvcGVyYXRpb25zIGFyZSBz
cGVjaWZpZWQgaW4gQjMgSVIgdG8gYmVoYXZlIG9uZSB3YXkgYnV0IG9uIHRoaXMgZ2l2ZW4gQ1BV
IHRoZXkgYmVoYXZlIGEKKyAgICAvLyBkaWZmZXJlbnQgd2F5LiBXaGVuIHRydWUsIHRob3NlIEIz
IElSIG9wcyBzd2l0Y2ggdG8gYmVoYXZpbmcgdGhlIENQVSB3YXksIGFuZCB0aGUgb3B0aW1pemVy
IG1heQorICAgIC8vIHN0YXJ0IHRha2luZyBhZHZhbnRhZ2Ugb2YgaXQuCisgICAgYm9vbCBoYXNR
dWlya3MoKSBjb25zdCB7IHJldHVybiBtX2hhc1F1aXJrczsgfQorICAgIHZvaWQgc2V0SGFzUXVp
cmtzKGJvb2wgdmFsdWUpIHsgbV9oYXNRdWlya3MgPSB2YWx1ZTsgfQogCiAgICAgT3BhcXVlQnlw
cm9kdWN0cyYgYnlwcm9kdWN0cygpIHsgcmV0dXJuICptX2J5cHJvZHVjdHM7IH0KIApAQCAtMjUy
LDYgKzI1OSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChQcmludFN0
cmVhbSYsIE9yaWdpbik+PiBtX29yaWdpblByaW50ZXI7CiAgICAgY29uc3Qgdm9pZCogbV9mcm9u
dGVuZERhdGE7CiAgICAgUENUb09yaWdpbk1hcCBtX3BjVG9PcmlnaW5NYXA7CisgICAgYm9vbCBt
X2hhc1F1aXJrcyB7IGZhbHNlIH07CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRl
ICJCM0NvbXB1dGVEaXZpc2lvbk1hZ2ljLmgiCkBAIC02MDIsNyArNjAzLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIE5lZzoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTmVnKGNvbnN0YW50KQog
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiAtY29uc3RhbnQKQEAgLTEyOTUsNiArMTI5NiwxNiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9wcm9jLmhh
c1F1aXJrcygpKSB7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChBdG9taWNY
Y2hnX19fKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXworICAg
ICAgICAgICAgICAgIGlmIChpc0F0b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgp
KQorICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRvbWljVmFs
dWU+KCktPm9wZXJhdGlvbldpZHRoKCkgPT0gV2lkdGg4KSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIFNFeHQxNjoKQEAgLTEzNDMsNiArMTM1NCwxNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbV9wcm9jLmhhc1F1aXJrcygpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoQXRvbWljWGNoZ19fXykKKyAgICAg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEF0b21pY1hjaGdfX18KKyAgICAgICAgICAgICAgICBp
ZiAoaXNBdG9taWNYY2hnKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVlPigpLT5vcGVyYXRp
b25XaWR0aCgpID09IFdpZHRoMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJ
ZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGNhc2UgU0V4dDMyOgpAQCAtMjEwMSwyMiArMjEyMiwyNSBAQCBwcml2YXRlOgogICAg
ICAgICBBU1NFUlQobV92YWx1ZS0+bnVtQ2hpbGRyZW4oKSA+PSAyKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIExlYXZlIGl0IGFsb25lIGlmIHRoZSByaWdodCBjaGlsZCBpcyBhIGNvbnN0YW50Lgot
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgaWYg
KG1fdmFsdWUtPmNoaWxkKDEpLT5pc0NvbnN0YW50KCkKKyAgICAgICAgICAgIHx8IG1fdmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzQ29uc3RhbnQo
KSkgeworICAgICAgICBhdXRvIHN3YXAgPSBbJl0gKCkgewogICAgICAgICAgICAgc3RkOjpzd2Fw
KG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KKyAgICAgICAg
fTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNDb25zdGFudCgp
KQorICAgICAgICAgICAgcmV0dXJuIHN3YXAoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKQorICAgICAgICAgICAg
cmV0dXJuIHN3YXAoKTsKKyAgICAgICAgCiAgICAgICAgIC8vIFNvcnQgdGhlIG9wZXJhbmRzLiBU
aGlzIGlzIGFuIGltcG9ydGFudCBjYW5vbmljYWxpemF0aW9uLiBXZSB1c2UgdGhlIGluZGV4IGlu
c3RlYWQgb2YKICAgICAgICAgLy8gdGhlIGFkZHJlc3MgdG8gbWFrZSB0aGlzIGF0IGxlYXN0IHNs
aWdodGx5IGRldGVybWluaXN0aWMuCi0gICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aW5k
ZXgoKSA+IG1fdmFsdWUtPmNoaWxkKDEpLT5pbmRleCgpKSB7Ci0gICAgICAgICAgICBzdGQ6OnN3
YXAobV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pbmRleCgpID4gbV92YWx1ZS0+Y2hpbGQoMSktPmluZGV4
KCkpCisgICAgICAgICAgICByZXR1cm4gc3dhcCgpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCByZWFsbHkgYmUgYSBmb3J3YXJkIGFuYWx5c2lzLiBJbnN0ZWFkLCB3ZSB1c2Vz
IGEgYm91bmRlZC1zZWFyY2ggYmFja3dhcmRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAK
ICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisj
aW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMu
aCIKICNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgi
CkBAIC0zNDYsNiArMzQ3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJB
dCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09
IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2Uo
dmFsdWUpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBMb2FkOgpAQCAtMzUzLDYgKzM1
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRy
ZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAg
ICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBTdG9yZTg6CkBAIC0zNjIsNiArMzY1LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IElu
dDMyLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5j
aGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAg
ICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBTdG9yZToKQEAgLTM2OSw4ICszNzMsNDkgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwg
KnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBl
KCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgdmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVT
dGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5k
KCkuaXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5udW1DaGlsZHJlbigpID09IDMsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1
ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9p
bnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0
b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NB
UzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxk
cmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxk
KDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
aXNJbnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgICAgICAgICBjYXNl
IEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAg
ICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoK
KyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSgh
dmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgw
KS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlz
SW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOworICAgICAg
ICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBEZXBlbmQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
IXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5j
aGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtQWRkcmVzczoKICAgICAgICAgICAgICAg
ICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUp
KTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAo
IkF0ICIsICp2YWx1ZSkpOwpAQCAtNTM3LDYgKzU4MiwyMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZUZlbmNl
KFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpCisg
ICAgICAgICAgICBWQUxJREFURShtZW1vcnktPmFjY2Vzc0JhbmsoKSA9PSBHUCwgKCJGZW5jZSBh
dCAiLCAqbWVtb3J5KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGVBdG9taWMoVmFs
dWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IHZhbHVlLT5h
czxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgCisgICAgICAgIFZBTElEQVRFKGJlc3RUeXBlKEdQ
LCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpID09IGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgIH0KIAogICAgIHZvaWQgdmFsaWRhdGVTdGFja0FjY2VzcyhW
YWx1ZSogdmFsdWUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNw
cAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQp
CiAKICNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKyNpbmNsdWRlICJCM0F0b21pY1Zh
bHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQm90
dG9tUHJvdmlkZXIuaCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKQEAgLTUxMCw2ICs1MTEs
NyBAQCBib29sIFZhbHVlOjpyZXR1cm5zQm9vbCgpIGNvbnN0CiAgICAgY2FzZSBBYm92ZUVxdWFs
OgogICAgIGNhc2UgQmVsb3dFcXVhbDoKICAgICBjYXNlIEVxdWFsT3JVbm9yZGVyZWQ6CisgICAg
Y2FzZSBBdG9taWNXZWFrQ0FTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFBoaToK
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgc3RvcnkgaGVyZS4KQEAgLTU4OSw2
ICs1OTEsNyBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICBjYXNlIEJlbG93
RXF1YWw6CiAgICAgY2FzZSBFcXVhbE9yVW5vcmRlcmVkOgogICAgIGNhc2UgU2VsZWN0OgorICAg
IGNhc2UgRGVwZW5kOgogICAgICAgICBicmVhazsKICAgICBjYXNlIERpdjoKICAgICBjYXNlIFVE
aXY6CkBAIC02MDAsMTYgKzYwMyw0NCBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QK
ICAgICBjYXNlIExvYWQ4UzoKICAgICBjYXNlIExvYWQxNlo6CiAgICAgY2FzZSBMb2FkMTZTOgot
ICAgIGNhc2UgTG9hZDoKLSAgICAgICAgcmVzdWx0LnJlYWRzID0gYXM8TWVtb3J5VmFsdWU+KCkt
PnJhbmdlKCk7CisgICAgY2FzZSBMb2FkOiB7CisgICAgICAgIGNvbnN0IE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSBhczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5
LT5yYW5nZSgpOworICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKSB7CisgICAgICAgICAg
ICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5mZW5jZVJhbmdlKCk7CisgICAgICAgICAgICByZXN1
bHQuZmVuY2UgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5k
ZW50ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgU3RvcmU4OgogICAg
IGNhc2UgU3RvcmUxNjoKLSAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXN1bHQud3JpdGVzID0g
YXM8TWVtb3J5VmFsdWU+KCktPnJhbmdlKCk7CisgICAgY2FzZSBTdG9yZTogeworICAgICAgICBj
b25zdCBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gYXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIHJl
c3VsdC53cml0ZXMgPSBtZW1vcnktPnJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0Zl
bmNlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+ZmVuY2VSYW5nZSgp
OworICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgY2Fz
ZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21p
Y1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9y
OgorICAgIGNhc2UgQXRvbWljWGNoZzogeworICAgICAgICBjb25zdCBBdG9taWNWYWx1ZSogYXRv
bWljID0gYXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgIHJlc3VsdC5yZWFkcyA9IGF0b21pYy0+
cmFuZ2UoKSB8IGF0b21pYy0+ZmVuY2VSYW5nZSgpOworICAgICAgICByZXN1bHQud3JpdGVzID0g
YXRvbWljLT5yYW5nZSgpIHwgYXRvbWljLT5mZW5jZVJhbmdlKCk7CisgICAgICAgIGlmIChhdG9t
aWMtPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAg
ICByZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIH0K
ICAgICBjYXNlIFdhc21BZGRyZXNzOgogICAgICAgICByZXN1bHQucmVhZHNQaW5uZWQgPSB0cnVl
OwogICAgICAgICBicmVhazsKQEAgLTYxNywxOCArNjQ4LDcgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZm
ZWN0cygpIGNvbnN0CiAgICAgICAgIGNvbnN0IEZlbmNlVmFsdWUqIGZlbmNlID0gYXM8RmVuY2VW
YWx1ZT4oKTsKICAgICAgICAgcmVzdWx0LnJlYWRzID0gZmVuY2UtPnJlYWQ7CiAgICAgICAgIHJl
c3VsdC53cml0ZXMgPSBmZW5jZS0+d3JpdGU7Ci0gICAgICAgIAotICAgICAgICAvLyBQcmV2ZW50
IGtpbGxpbmcgb2YgZmVuY2VzIHRoYXQgY2xhaW0gbm90IHRvIHdyaXRlIGFueXRoaW5nLiBJdCdz
IGEgYml0IHdlaXJkIHRoYXQgd2UgdXNlCi0gICAgICAgIC8vIGxvY2FsIHN0YXRlIGFzIHRoZSB3
YXkgdG8gZG8gdGhpcywgYnV0IGl0IGhhcHBlbnMgdG8gd29yazogd2UgbXVzdCBhc3N1bWUgdGhh
dCB3ZSBjYW5ub3QKLSAgICAgICAgLy8ga2lsbCB3cml0ZXNMb2NhbFN0YXRlIHVubGVzcyB3ZSB1
bmRlcnN0YW5kcyBleGFjdGx5IHdoYXQgdGhlIGluc3RydWN0aW9uIGlzIGRvaW5nIChsaWtlCi0g
ICAgICAgIC8vIHRoZSB3YXkgdGhhdCBmaXhTU0EgdW5kZXJzdGFuZHMgU2V0L0dldCBhbmQgdGhl
IHdheSB0aGF0IHJlZHVjZVN0cmVuZ3RoIGFuZCBvdGhlcnMKLSAgICAgICAgLy8gdW5kZXJzdGFu
ZCBVcHNpbG9uKS4gVGhpcyB3b3VsZCBvbmx5IGJlY29tZSBhIHByb2JsZW0gaWYgd2UgaGFkIHNv
bWUgYW5hbHlzaXMgdGhhdCB3YXMKLSAgICAgICAgLy8gbG9va2luZyB0byB1c2UgdGhlIHdyaXRl
c0xvY2FsU3RhdGUgYml0IHRvIGludmFsaWRhdGUgYSBDU0Ugb3ZlciBsb2NhbCBzdGF0ZSBvcGVy
YXRpb25zLgotICAgICAgICAvLyBUaGVuIGEgRmVuY2Ugd291bGQgbG9vayBibG9jaywgc2F5LCB0
aGUgZWxpbWluYXRpb24gb2YgYSByZWR1bmRhbnQgR2V0LiBCdXQgaXQgbGlrZQotICAgICAgICAv
LyB0aGF0J3Mgbm90IGF0IGFsbCBob3cgb3VyIG9wdGltaXphdGlvbnMgZm9yIFNldC9HZXQvVXBz
aWxvbi9QaGkgd29yayAtIHRoZXkgZ3JvayB0aGVpcgotICAgICAgICAvLyBvcGVyYXRpb25zIGRl
ZXBseSBlbm91Z2ggdGhhdCB0aGV5IGhhdmUgbm8gbmVlZCB0byBjaGVjayB0aGlzIGJpdCAtIHNv
IHRoaXMgY2hlYXQgaXMKLSAgICAgICAgLy8gZmluZS4KLSAgICAgICAgcmVzdWx0LndyaXRlc0xv
Y2FsU3RhdGUgPSB0cnVlOworICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBDQ2FsbDoKQEAgLTY5NCw2ICs3MTQsNyBAQCBWYWx1ZUtl
eSBWYWx1ZTo6a2V5KCkgY29uc3QKICAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgQml0d2lzZUNh
c3Q6CiAgICAgY2FzZSBOZWc6CisgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAgIHJldHVybiBWYWx1
ZUtleShraW5kKCksIHR5cGUoKSwgY2hpbGQoMCkpOwogICAgIGNhc2UgQWRkOgogICAgIGNhc2Ug
U3ViOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OCw2ICs2OCwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKS5vcGNvZGUoKTsgfQogICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUg
a2luZCBpcyBtZWFudCB0byBiZSBpbW11dGFibGUuIERvIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0
IHRoaXMgaXMgc2FmZS4gSXQncyBub3QKKyAgICAvLyB1c3VhbGx5IHNhZmUuCisgICAgdm9pZCBz
ZXRLaW5kVW5zYWZlbHkoS2luZCBraW5kKSB7IG1fa2luZCA9IGtpbmQ7IH0KKyAgICAKICAgICAv
LyBJdCdzIGdvb2QgcHJhY3RpY2UgdG8gbWlycm9yIEtpbmQgbWV0aG9kcyBoZXJlLCBzbyB5b3Ug
Y2FuIHNheSB2YWx1ZS0+aXNCbGFoKCkKICAgICAvLyBpbnN0ZWFkIG9mIHZhbHVlLT5raW5kKCku
aXNCbGFoKCkuCiAgICAgYm9vbCBpc0NoaWxsKCkgY29uc3QgeyByZXR1cm4ga2luZCgpLmlzQ2hp
bGwoKTsgfQpAQCAtMTA3LDYgKzExMSw4IEBAIHB1YmxpYzoKICAgICAvLyB2YWx1ZXMgd2l0aCBJ
ZGVudGl0aWVzIG9uIGJvdHRvbSBjb25zdGFudHMuIEZvciB0aGlzIHJlYXNvbiwgdGhpcyB0YWtl
cyBhIGNhbGxiYWNrIHRoYXQgaXMKICAgICAvLyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYm90
dG9tcy4gVGhlcmUncyBhIHV0aWxpdHkgZm9yIHRoaXMsIHNlZSBCM0JvdHRvbVByb3ZpZGVyLmgu
IFlvdQogICAgIC8vIGNhbiBhbHNvIGFjY2VzcyB0aGF0IHV0aWxpdHkgdXNpbmcgcmVwbGFjZVdp
dGhCb3R0b20oSW5zZXJ0aW9uU2V0Jiwgc2l6ZV90KS4KKyAgICAvLworICAgIC8vIFlvdSdyZSBn
dWFyYW50ZWVkIHRoYXQgYm90dG9tIGlzIHplcm8uCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQm90
dG9tUHJvdmlkZXI+CiAgICAgdm9pZCByZXBsYWNlV2l0aEJvdHRvbShjb25zdCBCb3R0b21Qcm92
aWRlciYpOwogICAgIApAQCAtMzIxLDYgKzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
SVRvRjoKICAgICAgICAgY2FzZSBCaXR3aXNlQ2FzdDoKICAgICAgICAgY2FzZSBCcmFuY2g6Cisg
ICAgICAgIGNhc2UgRGVwZW5kOgogICAgICAgICAgICAgaWYgKFVOTElLRUxZKG51bUFyZ3MgIT0g
MSkpCiAgICAgICAgICAgICAgICAgYmFkS2luZChraW5kLCBudW1BcmdzKTsKICAgICAgICAgICAg
IGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmNwcAkocmV2aXNpb24g
MjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCwzOCBAQAogCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CiAKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitUeXBlIGJlc3RUeXBlKEJhbmsg
YmFuaywgV2lkdGggd2lkdGgpCit7CisgICAgc3dpdGNoICh3aWR0aCkgeworICAgIGNhc2UgV2lk
dGg4OgorICAgIGNhc2UgV2lkdGgxNjoKKyAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgIHN3aXRj
aCAoYmFuaykgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIEludDMyOwor
ICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIEZsb2F0OworICAgICAgICB9Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWb2lk
OworICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgIGNh
c2UgR1A6CisgICAgICAgICAgICByZXR1cm4gSW50NjQ7CisgICAgICAgIGNhc2UgRlA6CisgICAg
ICAgICAgICByZXR1cm4gRG91YmxlOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWb2lkOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBWb2lkOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKwogbmFtZXNwYWNlIFdURiB7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBKU0M6OkIzOjpXaWR0aCB3aWR0aCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzV2lkdGguaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzV2lkdGguaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsMTggQEAgaW5saW5l
IFdpZHRoIHdpZHRoRm9yVHlwZShUeXBlIHR5cGUpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKK2lubGluZSBXaWR0aCBjYW5vbmljYWxXaWR0aChXaWR0aCB3aWR0aCkKK3sKKyAgICBy
ZXR1cm4gc3RkOjptYXgoV2lkdGgzMiwgd2lkdGgpOworfQorCitpbmxpbmUgYm9vbCBpc0Nhbm9u
aWNhbFdpZHRoKFdpZHRoIHdpZHRoKQoreworICAgIHJldHVybiB3aWR0aCA+PSBXaWR0aDMyOwor
fQorCitUeXBlIGJlc3RUeXBlKEJhbmsgYmFuaywgV2lkdGggd2lkdGgpOworCiBpbmxpbmUgV2lk
dGggY29uc2VydmF0aXZlV2lkdGgoQmFuayBiYW5rKQogewogICAgIHJldHVybiBiYW5rID09IEdQ
ID8gcG9pbnRlcldpZHRoKCkgOiBXaWR0aDY0OwpAQCAtOTMsNiArMTA1LDIwIEBAIGlubGluZSBX
aWR0aCB3aWR0aEZvckJ5dGVzKHVuc2lnbmVkIGJ5dGUKICAgICB9CiB9CiAKK2lubGluZSB1aW50
NjRfdCBtYXNrKFdpZHRoIHdpZHRoKQoreworICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICBjYXNl
IFdpZHRoODoKKyAgICAgICAgcmV0dXJuIDB4MDAwMDAwMDAwMDAwMDBmZmxsdTsKKyAgICBjYXNl
IFdpZHRoMTY6CisgICAgICAgIHJldHVybiAweDAwMDAwMDAwMDAwMGZmZmZsbHU7CisgICAgY2Fz
ZSBXaWR0aDMyOgorICAgICAgICByZXR1cm4gMHgwMDAwMDAwMGZmZmZmZmZmbGx1OworICAgIGNh
c2UgV2lkdGg2NDoKKyAgICAgICAgcmV0dXJuIDB4ZmZmZmZmZmZmZmZmZmZmZmxsdTsKKyAgICB9
Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisj
aW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMu
aCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgi
CkBAIC00NCw2ICs0NSw3IEBACiAjaW5jbHVkZSAiQjNNYXRoRXh0cmFzLmgiCiAjaW5jbHVkZSAi
QjNNZW1vcnlWYWx1ZS5oIgogI2luY2x1ZGUgIkIzTW92ZUNvbnN0YW50cy5oIgorI2luY2x1ZGUg
IkIzTmF0aXZlVHJhaXRzLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlICJC
M1JlZHVjZVN0cmVuZ3RoLmgiCiAjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCkBAIC0xMzc5
MSw3ICsxMzc5Myw3IEBAIHZvaWQgdGVzdFRyYXBwaW5nU3RvcmVFbGltaW5hdGlvbigpCiAgICAg
Y29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpOwogICAgIHVuc2lnbmVkIHN0b3JlQ291bnQgPSAwOwog
ICAgIGZvciAoVmFsdWUqIHZhbHVlIDogcHJvYy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoTWVt
b3J5VmFsdWU6OmlzU3RvcmUodmFsdWUtPm9wY29kZSgpKSkKKyAgICAgICAgaWYgKGlzU3RvcmUo
dmFsdWUtPm9wY29kZSgpKSkKICAgICAgICAgICAgIHN0b3JlQ291bnQrKzsKICAgICB9CiAgICAg
Q0hFQ0tfRVEoc3RvcmVDb3VudCwgMnUpOwpAQCAtMTQyNzcsNiArMTQyNzksMjk4IEBAIHZvaWQg
dGVzdE9wdGltaXplTWF0ZXJpYWxpemF0aW9uKCkKICAgICBDSEVDSyhmb3VuZCk7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRlc3RBdG9taWNXZWFrQ0FTKCkKK3sKKyAgICBUeXBl
IHR5cGUgPSBOYXRpdmVUcmFpdHM8VD46OnR5cGU7CisgICAgV2lkdGggd2lkdGggPSBOYXRpdmVU
cmFpdHM8VD46OndpZHRoOworICAgIAorICAgIGF1dG8gY2hlY2tEaXNhc3NlbWJseSA9IFsmXSAo
Q29tcGlsYXRpb24mIGNvbXBpbGF0aW9uKSB7CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAg
ICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbihjb21waWxhdGlvbiwgImxvY2siKTsKKyAgICAg
ICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKGNvbXBpbGF0aW9uLCAiY21weGNoZyIpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAKKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAg
ICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Js
b2NrKiByZWxvb3AgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGRvbmUg
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIAorICAgICAgICBWYWx1ZSogcHRyID0gcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOworICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEp1bXAsIE9y
aWdpbigpKTsKKyAgICAgICAgcm9vdC0+c2V0U3VjY2Vzc29ycyhyZWxvb3ApOworICAgICAgICAK
KyAgICAgICAgcmVsb29wLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQnJh
bmNoLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJlbG9vcC0+YXBwZW5kTmV3PEF0b21pY1ZhbHVl
PigKKyAgICAgICAgICAgICAgICBwcm9jLCBBdG9taWNXZWFrQ0FTLCBPcmlnaW4oKSwgd2lkdGgs
CisgICAgICAgICAgICAgICAgcmVsb29wLT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4o
KSwgdHlwZSwgNDIpLAorICAgICAgICAgICAgICAgIHJlbG9vcC0+YXBwZW5kSW50Q29uc3RhbnQo
cHJvYywgT3JpZ2luKCksIHR5cGUsIDB4YmVlZiksCisgICAgICAgICAgICAgICAgcHRyKSk7Cisg
ICAgICAgIHJlbG9vcC0+c2V0U3VjY2Vzc29ycyhkb25lLCByZWxvb3ApOworICAgICAgICAKKyAg
ICAgICAgZG9uZS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKKyAg
ICAgICAgCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGNoZWNr
RGlzYXNzZW1ibHkoKmNvZGUpOworICAgICAgICBUIHZhbHVlID0gNDI7CisgICAgICAgIGludm9r
ZTx2b2lkPigqY29kZSwgJnZhbHVlKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWUsIHN0YXRpY19j
YXN0PFQ+KDB4YmVlZikpOworICAgIH0KKyAgICAKKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBw
cm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAg
ICBCYXNpY0Jsb2NrKiBzdWNjID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2Nr
KiBmYWlsID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgVmFsdWUqIHB0ciA9
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXRvbWljVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEF0b21pY1dlYWtDQVMsIE9y
aWdpbigpLCB3aWR0aCwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChw
cm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZElu
dENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCAweGJlZWYpLAorICAgICAgICAgICAgICAg
IHB0cikpOworICAgICAgICByb290LT5zZXRTdWNjZXNzb3JzKHN1Y2MsIGZhaWwpOworICAgICAg
ICAKKyAgICAgICAgc3VjYy0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIHN0b3JlT3Bjb2RlKEdQLCB3aWR0aCksIE9yaWdpbigpLAorICAgICAgICAgICAgc3VjYy0+
YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDEwMCksCisgICAgICAgICAg
ICBwdHIpOworICAgICAgICBzdWNjLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCkpOworICAgICAgICAKKyAgICAgICAgZmFpbC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgICAgIGNoZWNrRGlzYXNzZW1ibHkoKmNvZGUpOworICAgICAgICBUIHZhbHVl
ID0gNDI7CisgICAgICAgIHdoaWxlICh2YWx1ZSA9PSA0MikKKyAgICAgICAgICAgIGludm9rZTx2
b2lkPigqY29kZSwgJnZhbHVlKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWUsIHN0YXRpY19jYXN0
PFQ+KDEwMCkpOworICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PFQ+KDMwMCk7CisgICAgICAg
IGludm9rZTx2b2lkPigqY29kZSwgJnZhbHVlKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWUsIHN0
YXRpY19jYXN0PFQ+KDMwMCkpOworICAgIH0KKyAgICAKKyAgICB7CisgICAgICAgIFByb2NlZHVy
ZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAg
ICAgICBCYXNpY0Jsb2NrKiBzdWNjID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Js
b2NrKiBmYWlsID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgVmFsdWUqIHB0
ciA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEVxdWFsLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXRvbWljVmFsdWU+KAorICAgICAgICAgICAg
ICAgICAgICBwcm9jLCBBdG9taWNXZWFrQ0FTLCBPcmlnaW4oKSwgd2lkdGgsCisgICAgICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCA0
MiksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9y
aWdpbigpLCB0eXBlLCAweGJlZWYpLAorICAgICAgICAgICAgICAgICAgICBwdHIpLAorICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQzMiwg
MCkpKTsKKyAgICAgICAgcm9vdC0+c2V0U3VjY2Vzc29ycyhmYWlsLCBzdWNjKTsKKyAgICAgICAg
CisgICAgICAgIHN1Y2MtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICBwcm9j
LCBzdG9yZU9wY29kZShHUCwgd2lkdGgpLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHN1Y2MtPmFw
cGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCAxMDApLAorICAgICAgICAgICAg
cHRyKTsKKyAgICAgICAgc3VjYy0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdp
bigpKTsKKyAgICAgICAgCisgICAgICAgIGZhaWwtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSk7CisgICAgICAgIAorICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgICAgICBjaGVja0Rpc2Fzc2VtYmx5KCpjb2RlKTsKKyAgICAgICAgVCB2YWx1ZSA9
IDQyOworICAgICAgICB3aGlsZSAodmFsdWUgPT0gNDIpCisgICAgICAgICAgICBpbnZva2U8dm9p
ZD4oKmNvZGUsICZ2YWx1ZSk7CisgICAgICAgIENIRUNLX0VRKHZhbHVlLCBzdGF0aWNfY2FzdDxU
PigxMDApKTsKKyAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxUPigzMDApOworICAgICAgICBp
bnZva2U8dm9pZD4oKmNvZGUsICZ2YWx1ZSk7CisgICAgICAgIENIRUNLX0VRKHZhbHVlLCBzdGF0
aWNfY2FzdDxUPigzMDApKTsKKyAgICB9CisgICAgCisgICAgeworICAgICAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXRvbWljVmFsdWU+KAorICAgICAg
ICAgICAgICAgIHByb2MsIEF0b21pY1dlYWtDQVMsIE9yaWdpbigpLCB3aWR0aCwKKyAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIp
LAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigp
LCB0eXBlLCAweGJlZWYpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOworICAg
ICAgICAKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgY2hlY2tE
aXNhc3NlbWJseSgqY29kZSk7CisgICAgICAgIFQgdmFsdWUgPSA0MjsKKyAgICAgICAgd2hpbGUg
KCFpbnZva2U8Ym9vbD4oKmNvZGUsICZ2YWx1ZSkpIHsgfQorICAgICAgICBDSEVDSyh2YWx1ZSA9
PSBzdGF0aWNfY2FzdDxUPigweGJlZWYpKTsKKyAgICAgICAgCisgICAgICAgIHZhbHVlID0gc3Rh
dGljX2Nhc3Q8VD4oMzAwKTsKKyAgICAgICAgQ0hFQ0soIWludm9rZTxib29sPigqY29kZSwgJnZh
bHVlKSk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCB0ZXN0QXRvbWlj
U3Ryb25nQ0FTKCkKK3sKKyAgICBUeXBlIHR5cGUgPSBOYXRpdmVUcmFpdHM8VD46OnR5cGU7Cisg
ICAgV2lkdGggd2lkdGggPSBOYXRpdmVUcmFpdHM8VD46OndpZHRoOworICAgIAorICAgIGF1dG8g
Y2hlY2tEaXNhc3NlbWJseSA9IFsmXSAoQ29tcGlsYXRpb24mIGNvbXBpbGF0aW9uKSB7CisgICAg
ICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbihjb21w
aWxhdGlvbiwgImxvY2siKTsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKGNvbXBp
bGF0aW9uLCAiY21weGNoZyIpOworICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICB7CisgICAg
ICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjID0gcHJvYy5hZGRCbG9jaygpOworICAg
ICAgICBCYXNpY0Jsb2NrKiBmYWlsID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAg
ICAgVmFsdWUqIHB0ciA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEVxdWFsLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXRvbWljVmFsdWU+KAor
ICAgICAgICAgICAgICAgICAgICBwcm9jLCBBdG9taWNTdHJvbmdDQVMsIE9yaWdpbigpLCB3aWR0
aCwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3Jp
Z2luKCksIHR5cGUsIDQyKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29u
c3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDB4YmVlZiksCisgICAgICAgICAgICAgICAgICAg
IHB0ciksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3Jp
Z2luKCksIHR5cGUsIDQyKSkpOworICAgICAgICByb290LT5zZXRTdWNjZXNzb3JzKHN1Y2MsIGZh
aWwpOworICAgICAgICAKKyAgICAgICAgc3VjYy0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIHN0b3JlT3Bjb2RlKEdQLCB3aWR0aCksIE9yaWdpbigpLAorICAgICAg
ICAgICAgc3VjYy0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDEwMCks
CisgICAgICAgICAgICBwdHIpOworICAgICAgICBzdWNjLT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IFJldHVybiwgT3JpZ2luKCkpOworICAgICAgICAKKyAgICAgICAgZmFpbC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGNoZWNrRGlzYXNzZW1ibHkoKmNvZGUpOworICAg
ICAgICBUIHZhbHVlID0gNDI7CisgICAgICAgIGludm9rZTx2b2lkPigqY29kZSwgJnZhbHVlKTsK
KyAgICAgICAgQ0hFQ0tfRVEodmFsdWUsIHN0YXRpY19jYXN0PFQ+KDEwMCkpOworICAgICAgICB2
YWx1ZSA9IHN0YXRpY19jYXN0PFQ+KDMwMCk7CisgICAgICAgIGludm9rZTx2b2lkPigqY29kZSwg
JnZhbHVlKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWUsIHN0YXRpY19jYXN0PFQ+KDMwMCkpOwor
ICAgIH0KKyAgICAKKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBzdWNj
ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBmYWlsID0gcHJvYy5hZGRC
bG9jaygpOworICAgICAgICAKKyAgICAgICAgVmFsdWUqIHB0ciA9IHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJyYW5j
aCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICAgICAgICAgIHByb2MsIE5vdEVxdWFsLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8QXRvbWljVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBBdG9t
aWNTdHJvbmdDQVMsIE9yaWdpbigpLCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSwKKyAgICAgICAgICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDB4
YmVlZiksCisgICAgICAgICAgICAgICAgICAgIHB0ciksCisgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSkpOworICAgICAgICBy
b290LT5zZXRTdWNjZXNzb3JzKGZhaWwsIHN1Y2MpOworICAgICAgICAKKyAgICAgICAgc3VjYy0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIHN0b3JlT3Bjb2RlKEdQ
LCB3aWR0aCksIE9yaWdpbigpLAorICAgICAgICAgICAgc3VjYy0+YXBwZW5kSW50Q29uc3RhbnQo
cHJvYywgT3JpZ2luKCksIHR5cGUsIDEwMCksCisgICAgICAgICAgICBwdHIpOworICAgICAgICBz
dWNjLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOworICAgICAgICAK
KyAgICAgICAgZmFpbC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsK
KyAgICAgICAgCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGNo
ZWNrRGlzYXNzZW1ibHkoKmNvZGUpOworICAgICAgICBUIHZhbHVlID0gNDI7CisgICAgICAgIGlu
dm9rZTx2b2lkPigqY29kZSwgJnZhbHVlKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWUsIHN0YXRp
Y19jYXN0PFQ+KDEwMCkpOworICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PFQ+KDMwMCk7Cisg
ICAgICAgIGludm9rZTx2b2lkPigqY29kZSwgJnZhbHVlKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFs
dWUsIHN0YXRpY19jYXN0PFQ+KDMwMCkpOworICAgIH0KKyAgICAKKyAgICB7CisgICAgICAgIFBy
b2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBdG9taWNWYWx1ZT4o
CisgICAgICAgICAgICAgICAgcHJvYywgQXRvbWljU3Ryb25nQ0FTLCBPcmlnaW4oKSwgd2lkdGgs
CisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCks
IHR5cGUsIDQyKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9j
LCBPcmlnaW4oKSwgdHlwZSwgMHhiZWVmKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
ICAgIGNoZWNrRGlzYXNzZW1ibHkoKmNvZGUpOworICAgICAgICBUIHZhbHVlID0gNDI7CisgICAg
ICAgIENIRUNLKGludm9rZTxUPigqY29kZSwgJnZhbHVlKSA9PSA0Mik7CisgICAgICAgIENIRUNL
KHZhbHVlID09IHN0YXRpY19jYXN0PFQ+KDB4YmVlZikpOworICAgICAgICB2YWx1ZSA9IHN0YXRp
Y19jYXN0PFQ+KDMwMCk7CisgICAgICAgIENIRUNLKGludm9rZTxUPigqY29kZSwgJnZhbHVlKSA9
PSBzdGF0aWNfY2FzdDxUPigzMDApKTsKKyAgICAgICAgQ0hFQ0sodmFsdWUgPT0gc3RhdGljX2Nh
c3Q8VD4oMzAwKSk7CisgICAgfQorICAgIAorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBw
cm9jLCBFcXVhbCwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEF0
b21pY1ZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgQXRvbWljU3Ryb25nQ0FTLCBP
cmlnaW4oKSwgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0
YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCA0MiksCisgICAgICAgICAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCAweGJlZWYpLAorICAgICAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCA0MikpKTsKKyAgICAgICAgCisg
ICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGNoZWNrRGlzYXNzZW1i
bHkoKmNvZGUpOworICAgICAgICBUIHZhbHVlID0gNDI7CisgICAgICAgIENIRUNLKGludm9rZTxi
b29sPigqY29kZSwgJnZhbHVlKSk7CisgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8VD4oMzAw
KTsKKyAgICAgICAgQ0hFQ0soIWludm9rZTxib29sPigqY29kZSwgJnZhbHVlKSk7CisgICAgfQor
ICAgIAorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBFcXVhbCwgT3JpZ2luKCks
CisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAg
ICAgICAgcHJvYywgTm90RXF1YWwsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8QXRvbWljVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvYywg
QXRvbWljU3Ryb25nQ0FTLCBPcmlnaW4oKSwgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2lu
KCksIHR5cGUsIDB4YmVlZiksCisgICAgICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpLAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBP
cmlnaW4oKSwgdHlwZSwgNDIpKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICBh
dXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBjaGVja0Rpc2Fzc2VtYmx5KCpjb2Rl
KTsKKyAgICAgICAgVCB2YWx1ZSA9IDQyOworICAgICAgICBDSEVDSyhpbnZva2U8Ym9vbD4oKmNv
ZGUsICZ2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PFQ+KDMwMCk7CisgICAg
ICAgIENIRUNLKCFpbnZva2U8Ym9vbD4oKmNvZGUsICZ2YWx1ZSkpOworICAgIH0KK30KKwogdm9p
ZCB0ZXN0V2FzbUJvdW5kc0NoZWNrKHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICBQcm9jZWR1cmUg
cHJvYzsKQEAgLTE0MzcwLDYgKzE0NjY0LDEzIEBAIGRvdWJsZSBuZWdhdGl2ZVplcm8oKQogICAg
IHJldHVybiAtemVybygpOwogfQogCisjZGVmaW5lIFJVTl9OT1codGVzdCkgZG8geyAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghc2hvdWxkUnVuKCN0ZXN0KSkgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIGRhdGFMb2coI3Rlc3QgIi4uLlxuIik7ICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHRlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IGRhdGFMb2coI3Rlc3QgIjogT0shXG4iKTsgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAo
ZmFsc2UpCiAjZGVmaW5lIFJVTih0ZXN0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgICAgIGlmICghc2hvdWxkUnVuKCN0ZXN0KSkgICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNDQyMSw5
ICsxNDcyMiw3IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICAgICAgcmV0dXJu
ICFmaWx0ZXIgfHwgISFzdHJjYXNlc3RyKHRlc3ROYW1lLCBmaWx0ZXIpOwogICAgIH07CiAKLSAg
ICAvLyBXZSBydW4gdGhpcyB0ZXN0IGZpcnN0IGJlY2F1c2UgaXQgZmlkZGxlcyB3aXRoIHNvbWUK
LSAgICAvLyBKU0Mgb3B0aW9ucy4KLSAgICB0ZXN0VGVybWluYWxQYXRjaHBvaW50VGhhdE5lZWRz
VG9CZVNwaWxsZWQyKCk7CisgICAgUlVOX05PVyh0ZXN0VGVybWluYWxQYXRjaHBvaW50VGhhdE5l
ZWRzVG9CZVNwaWxsZWQyKCkpOwogCiAgICAgUlVOKHRlc3Q0MigpKTsKICAgICBSVU4odGVzdExv
YWQ0MigpKTsKQEAgLTE1ODMxLDYgKzE2MTMwLDE1IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZp
bHRlcikKICAgICBSVU4odGVzdExvYWRCYXNlSW5kZXhTaGlmdDIoKSk7CiAgICAgUlVOKHRlc3RM
b2FkQmFzZUluZGV4U2hpZnQzMigpKTsKICAgICBSVU4odGVzdE9wdGltaXplTWF0ZXJpYWxpemF0
aW9uKCkpOworICAgIAorICAgIFJVTih0ZXN0QXRvbWljV2Vha0NBUzxpbnQ4X3Q+KCkpOworICAg
IFJVTih0ZXN0QXRvbWljV2Vha0NBUzxpbnQxNl90PigpKTsKKyAgICBSVU4odGVzdEF0b21pY1dl
YWtDQVM8aW50MzJfdD4oKSk7CisgICAgUlVOKHRlc3RBdG9taWNXZWFrQ0FTPGludDY0X3Q+KCkp
OworICAgIFJVTih0ZXN0QXRvbWljU3Ryb25nQ0FTPGludDhfdD4oKSk7CisgICAgUlVOKHRlc3RB
dG9taWNTdHJvbmdDQVM8aW50MTZfdD4oKSk7CisgICAgUlVOKHRlc3RBdG9taWNTdHJvbmdDQVM8
aW50MzJfdD4oKSk7CisgICAgUlVOKHRlc3RBdG9taWNTdHJvbmdDQVM8aW50NjRfdD4oKSk7CiAK
ICAgICBSVU4odGVzdFdhc21Cb3VuZHNDaGVjaygwKSk7CiAgICAgUlVOKHRlc3RXYXNtQm91bmRz
Q2hlY2soMTAwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3Bw
CShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsNyBAQCB1bnNpZ25lZCBBcmc6Ompz
SGFzaCgpIGNvbnN0CiAgICAgY2FzZSBSZWxDb25kOgogICAgIGNhc2UgUmVzQ29uZDoKICAgICBj
YXNlIERvdWJsZUNvbmQ6CisgICAgY2FzZSBTdGF0dXNDb25kOgogICAgIGNhc2UgV2lkdGhBcmc6
CiAgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vZmZzZXQpOwogICAg
ICAgICBicmVhazsKQEAgLTE4Miw2ICsxODMsOSBAQCB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgb3V0LnByaW50KGFz
RG91YmxlQ29uZGl0aW9uKCkpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGF0dXNDb25k
OgorICAgICAgICBvdXQucHJpbnQoYXNTdGF0dXNDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIFNwZWNpYWw6CiAgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVj
aWFsKCkpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxLDYgKzI0NSw5IEBAIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFyZzo6RG91YmxlQ29uZDoK
ICAgICAgICAgb3V0LnByaW50KCJEb3VibGVDb25kIik7CiAgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEFyZzo6U3RhdHVzQ29uZDoKKyAgICAgICAgb3V0LnByaW50KCJTdGF0dXNDb25kIik7Cisg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6U3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50
KCJTcGVjaWFsIik7CiAgICAgICAgIHJldHVybjsKQEAgLTI4NSw2ICsyOTIsOSBAQCB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAgICAgY2FzZSBBcmc6OkVhcmx5RGVm
OgogICAgICAgICBvdXQucHJpbnQoIkVhcmx5RGVmIik7CiAgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEFyZzo6RWFybHlaRGVmOgorICAgICAgICBvdXQucHJpbnQoIkVhcmx5WkRlZiIpOworICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OlNjcmF0Y2g6CiAgICAgICAgIG91dC5wcmludCgi
U2NyYXRjaCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDcgQEAgcHVibGljOgog
ICAgICAgICBSZWxDb25kLAogICAgICAgICBSZXNDb25kLAogICAgICAgICBEb3VibGVDb25kLAor
ICAgICAgICBTdGF0dXNDb25kLAogICAgICAgICBTcGVjaWFsLAogICAgICAgICBXaWR0aEFyZwog
ICAgIH07CkBAIC0xNTEsNiArMTUyLDggQEAgcHVibGljOgogICAgICAgICAvLyBhcyBVc2UgaGFz
IHVuZGVmaW5lZCBiZWhhdmlvcjogdGhlIHVzZSBtYXkgaGFwcGVuIGJlZm9yZSB0aGUgZGVmLCBv
ciBpdCBtYXkgaGFwcGVuIGFmdGVyCiAgICAgICAgIC8vIGl0LgogICAgICAgICBFYXJseURlZiwK
KyAgICAgICAgICAgIAorICAgICAgICBFYXJseVpEZWYsCiAKICAgICAgICAgLy8gU29tZSBpbnN0
cnVjdGlvbnMgbmVlZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuIFdlIG1vZGVsIHRoaXMgYnkgc2F5aW5n
IHRoYXQgdGhlIHRlbXBvcmFyeSBpcwogICAgICAgICAvLyBkZWZpbmVkIGVhcmx5IGFuZCB1c2Vk
IGxhdGUuIFRoaXMgcm9sZSBpbXBsaWVzIHRoYXQuCkBAIC0xODYsNiArMTg5LDcgQEAgcHVibGlj
OgogICAgICAgICBjYXNlIFpEZWY6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2Fz
ZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMDYs
NiArMjEwLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2Ug
U2NyYXRjaDoKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0yMjgsNiArMjMzLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFVz
ZUFkZHI6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAg
ICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgICAgICByZXR1cm4gcm9sZTsKICAgICAgICAg
Y2FzZSBVc2U6CiAgICAgICAgICAgICByZXR1cm4gQ29sZFVzZTsKQEAgLTI1Myw2ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CiAgICAgICAgIGNhc2UgU2NyYXRj
aDoKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yNzQsNiArMjgxLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFpEZWY6CiAg
ICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2Fz
ZSBFYXJseVpEZWY6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yOTQsNiArMzAyLDcgQEAgcHVibGljOgogICAg
ICAgICBjYXNlIFpEZWY6CiAgICAgICAgIGNhc2UgVXNlWkRlZjoKICAgICAgICAgY2FzZSBFYXJs
eURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMTUsNiArMzI0LDcgQEAgcHVi
bGljOgogICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAg
ICAgY2FzZSBTY3JhdGNoOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAg
LTMzMCw2ICszNDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAg
Y2FzZSBMYXRlVXNlOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5
WkRlZjoKICAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzU4LDYgKzM2OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNl
IFVzZVpEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01MzMsNiAr
NTQ1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBz
dGF0aWMgQXJnIHN0YXR1c0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlN0YXR1c0NvbmRpdGlvbiBjb25k
aXRpb24pCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gU3RhdHVzQ29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6
OlNwZWNpYWwqIHNwZWNpYWwpCiAgICAgewogICAgICAgICBBcmcgcmVzdWx0OwpAQCAtNjU4LDEy
ICs2NzgsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IERvdWJsZUNvbmQ7
CiAgICAgfQogCisgICAgYm9vbCBpc1N0YXR1c0NvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGtpbmQoKSA9PSBTdGF0dXNDb25kOworICAgIH0KKwogICAgIGJvb2wgaXNDb25kaXRp
b24oKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKICAgICAgICAgY2Fz
ZSBSZWxDb25kOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29u
ZDoKKyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04NTEsNiArODc3
LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgUmVzQ29u
ZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgorICAgICAgICBjYXNlIFN0YXR1c0NvbmQ6CiAg
ICAgICAgIGNhc2UgU3BlY2lhbDoKICAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtODcyLDYgKzg5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBS
ZWxDb25kOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoK
KyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CiAgICAgICAg
IGNhc2UgV2lkdGhBcmc6CiAgICAgICAgIGNhc2UgSW52YWxpZDoKQEAgLTEwNTgsNiArMTA4Niw3
IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIFJlc0NvbmQ6
CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKKyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgogICAg
ICAgICBjYXNlIFNwZWNpYWw6CiAgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTExNzcsNiArMTIwNiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uPihtX29mZnNldCk7
CiAgICAgfQogICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpTdGF0dXNDb25kaXRpb24gYXNTdGF0
dXNDb25kaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU3RhdHVzQ29uZCgp
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpTdGF0dXNDb25k
aXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCiAgICAgLy8gVGVsbHMgeW91IGlmIHRoZSBB
cmcgaXMgaW52ZXJ0aWJsZS4gT25seSBjb25kaXRpb24gYXJndW1lbnRzIGFyZSBpbnZlcnRpYmxl
LCBhbmQgZXZlbiBmb3IgdGhvc2UsIHRoZXJlCiAgICAgLy8gYXJlIGEgZmV3IGV4Y2VwdGlvbnMg
LSBub3RhYmx5IE92ZXJmbG93IGFuZCBTaWduZWQuCiAgICAgYm9vbCBpc0ludmVydGlibGUoKSBj
b25zdApAQCAtMTE4NCw2ICsxMjE5LDcgQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKGtpbmQo
KSkgewogICAgICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKKyAg
ICAgICAgY2FzZSBTdGF0dXNDb25kOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IGNhc2UgUmVzQ29uZDoKICAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6aXNJbnZl
cnRpYmxlKGFzUmVzdWx0Q29uZGl0aW9uKCkpOwpAQCAtMTIwNCw2ICsxMjQwLDggQEAgcHVibGlj
OgogICAgICAgICAgICAgcmV0dXJuIHJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc1Jl
c3VsdENvbmRpdGlvbigpKSk7CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgICAg
IHJldHVybiBkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjppbnZlcnQoYXNEb3VibGVDb25kaXRp
b24oKSkpOworICAgICAgICBjYXNlIFN0YXR1c0NvbmQ6CisgICAgICAgICAgICByZXR1cm4gc3Rh
dHVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0KGFzU3RhdHVzQ29uZGl0aW9uKCkpKTsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzUsNiArMzUsMTkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQog
CiBjb25zdCBjaGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpkdW1wUHJlZml4ID0gIiMiOwogCit2b2lk
IEJhc2ljQmxvY2s6OnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrIHRhcmdldCkKK3sKKyAg
ICBtX3N1Y2Nlc3NvcnMucmVzaXplKDEpOworICAgIG1fc3VjY2Vzc29yc1swXSA9IHRhcmdldDsK
K30KKwordm9pZCBCYXNpY0Jsb2NrOjpzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayB0YWtl
biwgRnJlcXVlbnRlZEJsb2NrIG5vdFRha2VuKQoreworICAgIG1fc3VjY2Vzc29ycy5yZXNpemUo
Mik7CisgICAgbV9zdWNjZXNzb3JzWzBdID0gdGFrZW47CisgICAgbV9zdWNjZXNzb3JzWzFdID0g
bm90VGFrZW47Cit9CisKIGJvb2wgQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9j
ayogYmxvY2spCiB7CiAgICAgcmV0dXJuIEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNp
Y0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMywxMSBAQAogI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKLW5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0OworCituYW1lc3BhY2UgQWlyIHsKIAogY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7
CiBjbGFzcyBDb2RlOwpAQCAtOTksNiArMTAzLDkgQEAgcHVibGljOgogICAgIGNvbnN0IFN1Y2Nl
c3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KICAg
ICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CiAK
KyAgICB2b2lkIHNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKTsKKyAgICB2b2lkIHNldFN1
Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrLCBGcmVxdWVudGVkQmxvY2spOworCiAgICAgQmFzaWNC
bG9jayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nl
c3NvcihpbmRleCkuYmxvY2soKTsgfQogICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1
bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CiAgICAg
U3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JC
bG9ja3MoKQpAQCAtMTMzLDYgKzE0MCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJs
b2NrSW5zZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBjbGFzcyBDb2RlOwogICAgIGZyaWVuZCBjbGFz
cyBJbnNlcnRpb25TZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWU+IGZyaWVuZCBjbGFzcyBCMzo6
R2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0OwogICAgIAogICAgIEJhc2ljQmxvY2sodW5zaWduZWQg
aW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJCbG9ja0luc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSA8d3RmL0J1
YmJsZVNvcnQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitCbG9ja0luc2VydGlvblNldDo6QmxvY2tJbnNlcnRpb25TZXQoQ29kZSAmY29kZSkK
KyAgICA6IEdlbmVyaWNCbG9ja0luc2VydGlvblNldChjb2RlLm1fYmxvY2tzKQoreworfQorCitC
bG9ja0luc2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0KCkKK3sKK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRp
b25TZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckJsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyaWNCbG9ja0luc2VydGlv
blNldC5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEluc2VydGlvblNldDsKKwordHlwZWRlZiBHZW5l
cmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz46OkJsb2NrSW5zZXJ0aW9uIEJsb2NrSW5z
ZXJ0aW9uOworCitjbGFzcyBCbG9ja0luc2VydGlvblNldCA6IHB1YmxpYyBHZW5lcmljQmxvY2tJ
bnNlcnRpb25TZXQ8QmFzaWNCbG9jaz4geworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0aW9uU2V0
KENvZGUmKTsKKyAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKKyAgICAKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGV2ZW50dWFsbHkgaW1wbGVtZW50IEIzOjpCbG9ja0luc2VydGlvblNldCdzIHNw
bGl0Rm9yd2FyZCgpLgorfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyRHVtcEFzSlMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRHVtcEFzSlMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckR1bXBBc0pTLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDI0NSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFpckR1bXBBc0pTLmgiCi0KLSNpZiBF
TkFCTEUoQjNfSklUKQotCi0jaW5jbHVkZSAiQWlyQ29kZS5oIgotI2luY2x1ZGUgIkFpckluc3RJ
bmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKLQotbmFtZXNwYWNlIHsKLQotQ1N0cmluZyB2YXJOYW1lRm9yQmxvY2tBdEluZGV4KHVuc2ln
bmVkIGluZGV4KQotewotICAgIHJldHVybiB0b0NTdHJpbmcoImJiIiwgaW5kZXgpOwotfQotCi1D
U3RyaW5nIHZhck5hbWUoQmFzaWNCbG9jayogYmxvY2spCi17Ci0gICAgcmV0dXJuIHZhck5hbWVG
b3JCbG9ja0F0SW5kZXgoYmxvY2stPmluZGV4KCkpOwotfQotCi1DU3RyaW5nIHZhck5hbWVGb3JT
dGFja1Nsb3RBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiB0b0NTdHJpbmco
InNsb3QiLCBpbmRleCk7Ci19Ci0KLUNTdHJpbmcgdmFyTmFtZShTdGFja1Nsb3QqIHNsb3QpCi17
Ci0gICAgcmV0dXJuIHZhck5hbWVGb3JTdGFja1Nsb3RBdEluZGV4KHNsb3QtPmluZGV4KCkpOwot
fQotCi1DU3RyaW5nIHZhck5hbWUoUmVnIHJlZykKLXsKLSAgICByZXR1cm4gdG9DU3RyaW5nKCJS
ZWcuIiwgcmVnLmRlYnVnTmFtZSgpKTsKLX0KLQotQ1N0cmluZyB2YXJOYW1lRm9yVG1wV2l0aEJh
bmtBbmRJbmRleChCYW5rIGJhbmssIHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiB0b0NT
dHJpbmcoYmFuayA9PSBGUCA/ICJmIiA6ICIiLCAidG1wIiwgaW5kZXgpOwotfQotCi1DU3RyaW5n
IHZhck5hbWUoVG1wIHRtcCkKLXsKLSAgICBpZiAodG1wLmlzUmVnKCkpCi0gICAgICAgIHJldHVy
biB2YXJOYW1lKHRtcC5yZWcoKSk7Ci0gICAgcmV0dXJuIHZhck5hbWVGb3JUbXBXaXRoQmFua0Fu
ZEluZGV4KEFyZyh0bXApLmJhbmsoKSwgdG1wLnRtcEluZGV4KCkpOwotfQotCi19IC8vIGFub255
bW91cyBuYW1lc3BhY2UKLQotdm9pZCBkdW1wQXNKUyhDb2RlJiBjb2RlLCBQcmludFN0cmVhbSYg
b3V0KQotewotICAgIG91dC5wcmludGxuKCJsZXQgY29kZSA9IG5ldyBDb2RlKCk7Iik7Ci0gICAg
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGUuc2l6ZSgpOyArK2kpCi0gICAgICAg
IG91dC5wcmludGxuKCJsZXQgIiwgdmFyTmFtZUZvckJsb2NrQXRJbmRleChpKSwgIiA9IGNvZGUu
YWRkQmxvY2soKTsiKTsKLSAgICAKLSAgICBvdXQucHJpbnRsbigibGV0IGhhc2g7Iik7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gY29kZS5zdGFja1Nsb3RzKClbaV07Ci0gICAg
ICAgIGlmIChzbG90KSB7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigibGV0ICIsIHZhck5hbWUo
c2xvdCksICIgPSBjb2RlLmFkZFN0YWNrU2xvdCgiLCBzbG90LT5ieXRlU2l6ZSgpLCAiLCAiLCBz
bG90LT5raW5kKCksICIpOyIpOwotICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgp
KQotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKHZhck5hbWUoc2xvdCksICIuc2V0T2Zmc2V0
RnJvbUZQKCIsIHNsb3QtPm9mZnNldEZyb21GUCgpLCAiKTsiKTsKLSAgICAgICAgICAgIG91dC5w
cmludGxuKCJoYXNoID0gIiwgdmFyTmFtZShzbG90KSwgIi5oYXNoKCk7Iik7Ci0gICAgICAgICAg
ICBvdXQucHJpbnRsbigiaWYgKGhhc2ggIT0gIiwgc2xvdC0+anNIYXNoKCksICIpIik7Ci0gICAg
ICAgICAgICBvdXQucHJpbnRsbigiICAgIHRocm93IG5ldyBFcnJvcihcIkJhZCBoYXNoOiBcIiAr
IGhhc2gpOyIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG91dC5wcmludGxuKCJjb2Rl
LmFkZFN0YWNrU2xvdCgxLCBTcGlsbCk7Iik7Ci0gICAgfQotICAgIAotICAgIGZvckVhY2hCYW5r
KAotICAgICAgICBbJl0gKEJhbmsgYmFuaykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gY29kZS5udW1UbXBzKGJhbmspOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50
bG4oCi0gICAgICAgICAgICAgICAgICAgICJsZXQgIiwgdmFyTmFtZUZvclRtcFdpdGhCYW5rQW5k
SW5kZXgoYmFuaywgaSksICIgPSBjb2RlLm5ld1RtcCgiLCBiYW5rLCAiKTsiKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSk7Ci0gICAgCi0gICAgb3V0LnByaW50bG4oImxldCBpbnN0OyIpOwot
ICAgIG91dC5wcmludGxuKCJsZXQgYXJnOyIpOwotICAgIAotICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIGZvciAoRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3NvciA6
IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKLSAgICAgICAgICAgIG91dC5wcmludGxuKAotICAgICAg
ICAgICAgICAgIHZhck5hbWUoYmxvY2spLCAiLnN1Y2Nlc3NvcnMucHVzaChuZXcgRnJlcXVlbnRl
ZEJsb2NrKCIsCi0gICAgICAgICAgICAgICAgdmFyTmFtZShzdWNjZXNzb3IuYmxvY2soKSksICIs
ICIsIHN1Y2Nlc3Nvci5mcmVxdWVuY3koKSwgIikpOyIpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRlY2Vzc29y
cygpKQotICAgICAgICAgICAgb3V0LnByaW50bG4odmFyTmFtZShibG9jayksICIucHJlZGVjZXNz
b3JzLnB1c2goIiwgdmFyTmFtZShwcmVkZWNlc3NvciksICIpOyIpOwotICAgICAgICAKLSAgICAg
ICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgZG8gc29tZXRoaW5nIGZvciBmbGFncy4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI3NTEKLSAgICAgICAgICAgIG91dC5w
cmludGxuKCJpbnN0ID0gbmV3IEluc3QoIiwgaW5zdC5raW5kLm9wY29kZSwgIik7Iik7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICBb
Jl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUsIEJhbmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
SW52YWxpZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VG1wOgotICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0LnByaW50bG4oImFyZyA9IEFyZy5jcmVhdGVUbXAoIiwgdmFyTmFtZShh
cmcudG1wKCkpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpJbW06Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0ZUltbSgi
LCBhcmcudmFsdWUoKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Qmln
SW1tOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImFyZyA9IEFyZy5jcmVhdGVCaWdJbW0oIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihhcmcudmFsdWUoKSksICIsICIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oYXJnLnZhbHVl
KCkgPj4gMzIpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpCaXRJbW06
Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0ZUJp
dEltbSgiLCBhcmcudmFsdWUoKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFy
Zzo6Qml0SW1tNjQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiYXJnID0gQXJnLmNyZWF0ZUJpdEltbTY0KCIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oYXJnLnZhbHVlKCkp
LCAiLCAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+
KGFyZy52YWx1ZSgpID4+IDMyKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFy
Zzo6QWRkcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJhcmcgPSBBcmcuY3JlYXRlQWRkcigiLCB2YXJOYW1lKGFyZy5i
YXNlKCkpLCAiLCAiLCBhcmcub2Zmc2V0KCksICIpOyIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBcmc6OlN0YWNrOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZyA9IEFyZy5jcmVhdGVTdGFjaygiLCB2YXJO
YW1lKGFyZy5zdGFja1Nsb3QoKSksICIsICIsIGFyZy5vZmZzZXQoKSwgIik7Iik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKLSAgICAgICAgICAgICAgICAgICAgICAg
IG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRlQ2FsbEFyZygiLCBhcmcub2Zmc2V0KCksICIp
OyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkluZGV4OgotICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImFy
ZyA9IEFyZy5jcmVhdGVJbmRleCgiLCB2YXJOYW1lKGFyZy5iYXNlKCkpLCAiLCAiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhck5hbWUoYXJnLmluZGV4KCkpLCAiLCAiLCBhcmcuc2Nh
bGUoKSwgIiwgIiwgYXJnLm9mZnNldCgpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNh
c2UgQXJnOjpSZWxDb25kOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImFy
ZyA9IEFyZy5jcmVhdGVSZWxDb25kKCIsIGFyZy5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSwgIik7
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6UmVzQ29uZDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRlUmVzQ29uZCgiLCBhcmcu
YXNSZXN1bHRDb25kaXRpb24oKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFy
Zzo6RG91YmxlQ29uZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJhcmcg
PSBBcmcuY3JlYXRlRG91YmxlQ29uZCgiLCBhcmcuYXNEb3VibGVDb25kaXRpb24oKSwgIik7Iik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3BlY2lhbDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRlU3BlY2lhbCgpOyIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoQXJnOgotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50bG4oImFyZyA9IEFyZy5jcmVhdGVXaWR0aEFyZygiLCBhcmcud2lkdGgo
KSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgb3V0LnBy
aW50bG4oImluc3QuYXJncy5wdXNoKGFyZyk7Iik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGluc3QuaGFzTm9uQXJnRWZmZWN0cygpKQotICAgICAgICAgICAg
ICAgICAgICBvdXQucHJpbnRsbigiaW5zdC5wYXRjaEhhc05vbkFyZ0VmZmVjdHMgPSB0cnVlOyIp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmV4
dHJhRWFybHlDbG9iYmVyZWRSZWdzID0gbmV3IFNldCgpOyIpOwotICAgICAgICAgICAgICAgIG91
dC5wcmludGxuKCJpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncyA9IG5ldyBTZXQoKTsiKTsKLSAgICAg
ICAgICAgICAgICBpbnN0LmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKLSAgICAg
ICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnRsbigiaW5zdC5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncy5hZGQoIiwgdmFyTmFtZShy
ZWcpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgaW5z
dC5leHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAotICAgICAgICAgICAgICAgICAgICBbJl0g
KFJlZyByZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmV4
dHJhQ2xvYmJlcmVkUmVncy5hZGQoIiwgdmFyTmFtZShyZWcpLCAiKTsiKTsKLSAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgb3V0LnByaW50
bG4oImluc3QucGF0Y2hBcmdEYXRhID0gW107Iik7Ci0gICAgICAgICAgICAgICAgaW5zdC5mb3JF
YWNoQXJnKAotICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYsIEFyZzo6Um9sZSByb2xlLCBC
YW5rIGJhbmssIFdpZHRoIHdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnRsbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5zdC5wYXRjaEFyZ0RhdGEucHVz
aCh7cm9sZTogQXJnLiIsIHJvbGUsICIsIHR5cGU6ICIsIGJhbmssCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiwgd2lkdGg6ICIsIHdpZHRoLCAifSk7Iik7Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5z
dC5raW5kLm9wY29kZSA9PSBDQ2FsbCB8fCBpbnN0LmtpbmQub3Bjb2RlID09IENvbGRDQ2FsbCkg
ewotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmNDYWxsVHlwZSA9ICIsIGluc3Qu
b3JpZ2luLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmNDYWxs
QXJnVHlwZXMgPSBbXTsiKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgaW5zdC5vcmlnaW4tPm51bUNoaWxkcmVuKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50bG4oImluc3QuY0NhbGxBcmdUeXBlcy5wdXNoKCIsIGluc3Qub3JpZ2luLT5jaGls
ZChpKS0+dHlwZSgpLCAiKTsiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgb3V0LnByaW50bG4oImhhc2ggPSBpbnN0Lmhhc2goKTsiKTsKLSAgICAgICAgICAgIG91
dC5wcmludGxuKCJpZiAoaGFzaCAhPSAiLCBpbnN0LmpzSGFzaCgpLCAiKSIpOwotICAgICAgICAg
ICAgb3V0LnByaW50bG4oIiAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgaGFzaDogXCIgKyBoYXNo
KTsiKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgb3V0LnByaW50bG4odmFyTmFtZShibG9j
ayksICIuYXBwZW5kKGluc3QpOyIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi19IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCi0KLSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckR1bXBBc0pTLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEdW1wQXNKUy5oCShyZXZpc2lvbiAy
MTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckR1bXBBc0pTLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQot
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7Ci0KLWNsYXNzIENvZGU7Ci0KLS8vIFRoaXMgaXMgdXNlZCBm
b3IgYmVuY2htYXJraW5nLiBWYXJpb3VzIG9wZXJhdGlvbnMgb24gQWlyIGFyZSBpbnRlcmVzdGlu
ZyBmcm9tIGEgYmVuY2htYXJraW5nCi0vLyBzdGFuZHBvaW50LiBXZSBjYW4gd3JpdGUgc29tZSBB
aXIgcGhhc2VzIGluIEpTIGFuZCB0aGVuIHVzZSB0aGF0IHRvIGJlbmNobWFyayBKUy4gVGhlIGJl
bmNobWFyawotLy8gaXMgY2FsbGVkIEpTQWlyLCBhbmQgaXQncyBpbiBQZXJmb3JtYW5jZVRlc3Rz
L0pTQWlyLgotdm9pZCBkdW1wQXNKUyhDb2RlJiwgUHJpbnRTdHJlYW0mKTsKLQotfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgotCi0jZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lv
biAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkFpckFsbG9jYXRl
UmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmgiCiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5o
IgogI2luY2x1ZGUgIkFpckNvZGUuaCIKLSNpbmNsdWRlICJBaXJEdW1wQXNKUy5oIgogI2luY2x1
ZGUgIkFpckVsaW1pbmF0ZURlYWRDb2RlLmgiCiAjaW5jbHVkZSAiQWlyRml4T2J2aW91c1NwaWxs
cy5oIgogI2luY2x1ZGUgIkFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIgpAQCAtNzMsNiAr
NzIsOCBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgICAgIGRh
dGFMb2coIkluaXRpYWwgYWlyOlxuIik7CiAgICAgICAgIGRhdGFMb2coY29kZSk7CiAgICAgfQor
ICAgIAorICAgIHNpbXBsaWZ5Q0ZHKGNvZGUpOwogCiAgICAgbG93ZXJNYWNyb3MoY29kZSk7CiAK
QEAgLTEwNywyMyArMTA4LDExIEBAIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29k
ZSkKICAgICAvLyBkb2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1zYXZlcyB3
ZSdyZSB1c2luZyBhbmQgc2F2ZXMgdGhlbS4KICAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsK
ICAgICAKLSAgICBpZiAoT3B0aW9uczo6ZHVtcEFpckFzSlNCZWZvcmVBbGxvY2F0ZVN0YWNrKCkp
IHsKLSAgICAgICAgZGF0YUxvZygiRHVtcGluZyBBaXIgYXMgSlMgYmVmb3JlIGFsbG9jYXRlU3Rh
Y2s6XG4iKTsKLSAgICAgICAgZHVtcEFzSlMoY29kZSwgV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAg
ICAgZGF0YUxvZygiQWlyIGhhc2g6ICIsIGNvZGUuanNIYXNoKCksICJcbiIpOwotICAgIH0KLQog
ICAgIC8vIFRoaXMgdHVybnMgYWxsIFN0YWNrIGFuZCBDYWxsQXJnIEFyZ3MgaW50byBBZGRyIGFy
Z3MgdGhhdCB1c2UgdGhlIGZyYW1lIHBvaW50ZXIuIEl0IGRvZXMKICAgICAvLyB0aGlzIGJ5IGZp
cnN0LWZpdCBhbGxvY2F0aW5nIHN0YWNrIHNsb3RzLiBJdCBzaG91bGQgYmUgcHJldHR5IGRhcm4g
Y2xvc2UgdG8gb3B0aW1hbCwgc28gd2UKICAgICAvLyBzaG91bGRuJ3QgaGF2ZSB0byB3b3JyeSBh
Ym91dCB0aGlzIHZlcnkgbXVjaC4KICAgICBhbGxvY2F0ZVN0YWNrKGNvZGUpOwogICAgIAotICAg
IGlmIChPcHRpb25zOjpkdW1wQWlyQWZ0ZXJBbGxvY2F0ZVN0YWNrKCkpIHsKLSAgICAgICAgZGF0
YUxvZygiRHVtcGluZyBBaXIgYWZ0ZXIgYWxsb2NhdGVTdGFjazpcbiIpOwotICAgICAgICBkYXRh
TG9nKGNvZGUpOwotICAgICAgICBkYXRhTG9nKCJBaXIgaGFzaDogIiwgY29kZS5qc0hhc2goKSwg
IlxuIik7Ci0gICAgfQotCiAgICAgLy8gSWYgd2UgY29hbGVzY2VkIG1vdmVzIHRoZW4gd2UgY2Fu
IHVuYnJlYWsgY3JpdGljYWwgZWRnZXMuIFRoaXMgaXMgdGhlIG1haW4gcmVhc29uIGZvciB0aGlz
CiAgICAgLy8gcGhhc2UuCiAgICAgc2ltcGxpZnlDRkcoY29kZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3Nyw2ICsyNzcsNjUgQEAgaW5saW5lIGJvb2wgaXNYODZVRGl2NjRWYWxp
ZChjb25zdCBJbnN0JgogICAgIHJldHVybiBpc1g4NkRpdkhlbHBlclZhbGlkKGluc3QpOwogfQog
CitpbmxpbmUgYm9vbCBpc0F0b21pY1N0cm9uZ0NBU1ZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7
CisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICBzd2l0Y2ggKGluc3QuYXJncy5zaXpl
KCkpIHsKKyAgICBjYXNlIDM6CisgICAgICAgIHJldHVybiBpbnN0LmFyZ3NbMF0gPT0gVG1wKFg4
NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBjYXNlIDU6CisgICAgICAgIHJldHVybiBpbnN0LmFyZ3Nb
MV0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorI2VuZGlmIC8vIENQVShYODYpIHx8IENQVShYODZfNjQpCit9CisK
K2lubGluZSBib29sIGlzQnJhbmNoQXRvbWljU3Ryb25nQ0FTVmFsaWQoY29uc3QgSW5zdCYgaW5z
dCkKK3sKKyAgICByZXR1cm4gaW5zdC5hcmdzWzFdID09IFRtcChYODZSZWdpc3RlcnM6OmVheCk7
Cit9CisKK2lubGluZSBib29sIGlzQXRvbWljU3Ryb25nQ0FTOFZhbGlkKGNvbnN0IEluc3QmIGlu
c3QpCit7CisgICAgcmV0dXJuIGlzQXRvbWljU3Ryb25nQ0FTVmFsaWQoaW5zdCk7Cit9CisKK2lu
bGluZSBib29sIGlzQXRvbWljU3Ryb25nQ0FTMTZWYWxpZChjb25zdCBJbnN0JiBpbnN0KQorewor
ICAgIHJldHVybiBpc0F0b21pY1N0cm9uZ0NBU1ZhbGlkKGluc3QpOworfQorCitpbmxpbmUgYm9v
bCBpc0F0b21pY1N0cm9uZ0NBUzMyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1
cm4gaXNBdG9taWNTdHJvbmdDQVNWYWxpZChpbnN0KTsKK30KKworaW5saW5lIGJvb2wgaXNBdG9t
aWNTdHJvbmdDQVM2NFZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzQXRv
bWljU3Ryb25nQ0FTVmFsaWQoaW5zdCk7Cit9CisKK2lubGluZSBib29sIGlzQnJhbmNoQXRvbWlj
U3Ryb25nQ0FTOFZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzQnJhbmNo
QXRvbWljU3Ryb25nQ0FTVmFsaWQoaW5zdCk7Cit9CisKK2lubGluZSBib29sIGlzQnJhbmNoQXRv
bWljU3Ryb25nQ0FTMTZWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc0Jy
YW5jaEF0b21pY1N0cm9uZ0NBU1ZhbGlkKGluc3QpOworfQorCitpbmxpbmUgYm9vbCBpc0JyYW5j
aEF0b21pY1N0cm9uZ0NBUzMyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4g
aXNCcmFuY2hBdG9taWNTdHJvbmdDQVNWYWxpZChpbnN0KTsKK30KKworaW5saW5lIGJvb2wgaXNC
cmFuY2hBdG9taWNTdHJvbmdDQVM2NFZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0
dXJuIGlzQnJhbmNoQXRvbWljU3Ryb25nQ0FTVmFsaWQoaW5zdCk7Cit9CisKIH0gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlz
aW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9w
Y29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMTcsNiArMTE3LDcgQEAgQWRkMzIgVTpHOjMyLCBVWkQ6RzozMgog
ICAgIHg4NjogSW1tLCBJbmRleAogICAgIEltbSwgVG1wCiAgICAgeDg2OiBBZGRyLCBUbXAKKyAg
ICB4ODY6IEluZGV4LCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgogICAgIHg4NjogVG1wLCBJbmRl
eAogCkBAIC0xMzUsOSArMTM2LDEyIEBAIHg4NjogQWRkMTYgVTpHOjE2LCBVRDpHOjE2CiA2NDog
QWRkNjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKICAgICB4ODY6IEltbSwgQWRkcgor
ICAgIHg4NjogSW1tLCBJbmRleAogICAgIEltbSwgVG1wCiAgICAgeDg2OiBBZGRyLCBUbXAKKyAg
ICB4ODY6IEluZGV4LCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgorICAgIHg4NjogVG1wLCBJbmRl
eAogCiA2NDogQWRkNjQgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAgIEltbSwgVG1wLCBUbXAK
QEAgLTE2Niw5ICsxNzAsMTIgQEAgeDg2OiBBZGRGbG9hdCBVOkY6MzIsIFVEOkY6MzIKIFN1YjMy
IFU6RzozMiwgVVpEOkc6MzIKICAgICBUbXAsIFRtcAogICAgIHg4NjogSW1tLCBBZGRyCisgICAg
eDg2OiBJbW0sIEluZGV4CiAgICAgSW1tLCBUbXAKICAgICB4ODY6IEFkZHIsIFRtcAorICAgIHg4
NjogSW5kZXgsIFRtcAogICAgIHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4CiAK
IGFybTY0OiBTdWIzMiBVOkc6MzIsIFU6RzozMiwgRDpHOjMyCiAgICAgVG1wLCBUbXAsIFRtcApA
QCAtMTc2LDkgKzE4MywxMiBAQCBhcm02NDogU3ViMzIgVTpHOjMyLCBVOkc6MzIsIEQ6RzozMgog
NjQ6IFN1YjY0IFU6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIEFk
ZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKICAgICBJbW0sIFRtcAogICAgIHg4NjogQWRkciwgVG1w
CisgICAgeDg2OiBJbmRleCwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwg
SW5kZXgKIAogYXJtNjQ6IFN1YjY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRt
cCwgVG1wCkBAIC0yMDQsOSArMjE0LDEyIEBAIHg4NjogU3ViRmxvYXQgVTpGOjMyLCBVRDpGOjMy
CiBOZWczMiBVWkQ6RzozMgogICAgIFRtcAogICAgIHg4NjogQWRkcgorICAgIHg4NjogSW5kZXgK
IAogNjQ6IE5lZzY0IFVEOkc6NjQKICAgICBUbXAKKyAgICB4ODY6IEFkZHIKKyAgICB4ODY6IElu
ZGV4CiAKIGFybTY0OiBOZWdhdGVEb3VibGUgVTpGOjY0LCBEOkY6NjQKICAgICBUbXAsIFRtcApA
QCAtMzMwLDggKzM0MywxMSBAQCBBbmQzMiBVOkc6MzIsIFVaRDpHOjMyCiAgICAgVG1wLCBUbXAK
ICAgICB4ODY6IEltbSwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwgSW5k
ZXgKICAgICB4ODY6IEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcAogICAgIHg4NjogSW1t
LCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CiAKIDY0OiBBbmQ2NCBVOkc6NjQsIFU6Rzo2NCwg
RDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcApAQCAtMzM5LDcgKzM1NSwxMyBAQCBBbmQzMiBVOkc6
MzIsIFVaRDpHOjMyCiAKIHg4Nl82NDogQW5kNjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBU
bXAKLSAgICB4ODY6IEltbSwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJ
bW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorICAgIEFkZHIsIFRtcAor
ICAgIEluZGV4LCBUbXAKIAogQW5kRG91YmxlIFU6Rjo2NCwgVTpGOjY0LCBEOkY6NjQKICAgICBU
bXAsIFRtcCwgVG1wCkBAIC00NTksOCArNDgxLDExIEBAIE9yMzIgVTpHOjMyLCBVWkQ6RzozMgog
ICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIFRtcAogICAgIHg4NjogVG1wLCBBZGRyCisgICAg
eDg2OiBUbXAsIEluZGV4CiAgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBUbXAK
ICAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAogCiA2NDogT3I2NCBVOkc6
NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcApAQCAtNDY5LDYgKzQ5NCwxMiBA
QCBPcjMyIFU6RzozMiwgVVpEOkc6MzIKIDY0OiBPcjY0IFU6Rzo2NCwgVUQ6Rzo2NAogICAgIFRt
cCwgVG1wCiAgICAgeDg2OiBJbW0sIFRtcAorICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJ
bW0sIEluZGV4CisgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwgSW5kZXgKKyAgICB4
ODY6IEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcAogCiBYb3IzMiBVOkc6MzIsIFU6Rzoz
MiwgWkQ6RzozMgogICAgIFRtcCwgVG1wLCBUbXAKQEAgLTQ4MCw4ICs1MTEsMTEgQEAgWG9yMzIg
VTpHOjMyLCBVWkQ6RzozMgogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIFRtcAogICAgIHg4
NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4CiAgICAgeDg2OiBBZGRyLCBUbXAKKyAg
ICB4ODY6IEluZGV4LCBUbXAKICAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRl
eAogCiA2NDogWG9yNjQgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBUbXAK
QEAgLTQ5MCw2ICs1MjQsMTEgQEAgWG9yMzIgVTpHOjMyLCBVWkQ6RzozMgogNjQ6IFhvcjY0IFU6
Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6
IFRtcCwgSW5kZXgKKyAgICB4ODY6IEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcAorICAg
IHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CiAgICAgeDg2OiBJbW0sIFRtcAog
CiBhcm02NDogTm90MzIgVTpHOjMyLCBaRDpHOjMyCkBAIC00OTgsMTMgKzUzNywxNSBAQCBhcm02
NDogTm90MzIgVTpHOjMyLCBaRDpHOjMyCiB4ODY6IE5vdDMyIFVaRDpHOjMyCiAgICAgVG1wCiAg
ICAgQWRkcgorICAgIEluZGV4CiAKIGFybTY0OiBOb3Q2NCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRt
cCwgVG1wCiAKLXg4NjogTm90NjQgVUQ6Rzo2NAoreDg2XzY0OiBOb3Q2NCBVRDpHOjY0CiAgICAg
VG1wCiAgICAgQWRkcgorICAgIEluZGV4CiAKIGFybTY0OiBBYnNEb3VibGUgVTpGOjY0LCBEOkY6
NjQKICAgICBUbXAsIFRtcApAQCAtNjY4LDI3ICs3MDksMzgzIEBAIExvYWQ4IFU6Rzo4LCBaRDpH
OjMyCiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxOCBVOkc6OCwgWkQ6
RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogU3RvcmU4IFU6Rzo4LCBEOkc6
OAogICAgIFRtcCwgSW5kZXgKICAgICBUbXAsIEFkZHIKICAgICB4ODY6IEltbSwgSW5kZXgKICAg
ICB4ODY6IEltbSwgQWRkcgogCitTdG9yZVJlbDggVTpHOjgsIEQ6Rzo4CisgICAgVG1wLCBJbmRl
eAorICAgIFRtcCwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorICAgIHg4NjogSW1tLCBBZGRy
CisKIExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiBVOkc6OCwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAog
ICAgIEluZGV4LCBUbXAKIAorTG9hZEFjcThTaWduZWRFeHRlbmRUbzMyIFU6Rzo4LCBaRDpHOjMy
CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBMb2FkMTYgVTpHOjE2LCBaRDpHOjMy
CiAgICAgQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCitMb2FkQWNxMTYgVTpHOjE2LCBaRDpH
OjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBMb2FkMTZTaWduZWRFeHRlbmRU
bzMyIFU6RzoxNiwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9h
ZEFjcTE2U2lnbmVkRXh0ZW5kVG8zMiBVOkc6MTYsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAg
ICBJbmRleCwgVG1wCisKIFN0b3JlMTYgVTpHOjE2LCBEOkc6MTYKICAgICBUbXAsIEluZGV4CiAg
ICAgVG1wLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKwor
U3RvcmVSZWwxNiBVOkc6MTYsIEQ6RzoxNgorICAgIFRtcCwgSW5kZXgKKyAgICBUbXAsIEFkZHIK
KyAgICB4ODY6IEltbSwgSW5kZXgKKyAgICB4ODY6IEltbSwgQWRkcgorCitMb2FkQWNxMzIgVTpH
OjMyLCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCitTdG9yZVJlbDMy
IFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKyAgICB4ODY6
IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorCis2NDogTG9hZEFjcTY0IFU6Rzo2NCwg
WkQ6Rzo2NAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworNjQ6IFN0b3JlUmVsNjQg
VTpHOjY0LCBaRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorICAgIHg4Njog
SW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4CisKKyMgVGhlIGZpcnN0IG9wZXJhbmQgaXMg
cmF4LgorIyBGSVhNRTogVGhpcyBmb3JtdWxhdGlvbiBtZWFucyB0aGF0IHRoZSBib29sZWFuIHJl
c3VsdCBjYW5ub3QgYmUgcHV0IGluIGVheCwgZXZlbiB0aG91Z2ggYWxsIHVzZXJzCisjIG9mIHRo
aXMgd291bGQgYmUgT0sgd2l0aCB0aGF0LgoreDg2OiBBdG9taWNTdHJvbmdDQVM4IFU6RzozMiwg
VUQ6Rzo4LCBVOkc6OCwgVUQ6Rzo4LCBaRDpHOjgKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAs
IEFkZHIsIFRtcAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgsIFRtcAorCit4ODY6
IEF0b21pY1N0cm9uZ0NBUzE2IFU6RzozMiwgVUQ6RzoxNiwgVTpHOjMyLCBVRDpHOjE2LCBaRDpH
OjgKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIsIFRtcAorICAgIFN0YXR1c0NvbmQs
IFRtcCosIFRtcCwgSW5kZXgsIFRtcAorCit4ODY6IEF0b21pY1N0cm9uZ0NBUzMyIFU6RzozMiwg
VUQ6RzozMiwgVTpHOjMyLCBVRDpHOjMyLCBaRDpHOjgKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBU
bXAsIEFkZHIsIFRtcAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgsIFRtcAorCit4
ODZfNjQ6IEF0b21pY1N0cm9uZ0NBUzY0IFU6RzozMiwgVUQ6Rzo2NCwgVTpHOjY0LCBVRDpHOjY0
LCBaRDpHOjgKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIsIFRtcAorICAgIFN0YXR1
c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgsIFRtcAorCit4ODY6IEF0b21pY1N0cm9uZ0NBUzggVUQ6
Rzo4LCBVOkc6OCwgVUQ6Rzo4CisgICAgVG1wKiwgVG1wLCBBZGRyCisgICAgVG1wKiwgVG1wLCBJ
bmRleAorCit4ODY6IEF0b21pY1N0cm9uZ0NBUzE2IFVEOkc6MTYsIFU6RzozMiwgVUQ6RzoxNgor
ICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNT
dHJvbmdDQVMzMiBVRDpHOjMyLCBVOkc6MzIsIFVEOkc6MzIKKyAgICBUbXAqLCBUbXAsIEFkZHIK
KyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljU3Ryb25nQ0FTNjQgVUQ6Rzo2
NCwgVTpHOjY0LCBVRDpHOjY0CisgICAgVG1wKiwgVG1wLCBBZGRyCisgICAgVG1wKiwgVG1wLCBJ
bmRleAorCit4ODY6IEJyYW5jaEF0b21pY1N0cm9uZ0NBUzggVTpHOjMyLCBVRDpHOjgsIFU6Rzo4
LCBVRDpHOjggL2JyYW5jaAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkcgorICAgIFN0
YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBCcmFuY2hBdG9taWNTdHJvbmdDQVMx
NiBVOkc6MzIsIFVEOkc6MTYsIFU6RzozMiwgVUQ6RzoxNiAvYnJhbmNoCisgICAgU3RhdHVzQ29u
ZCwgVG1wKiwgVG1wLCBBZGRyCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRleAorCit4
ODY6IEJyYW5jaEF0b21pY1N0cm9uZ0NBUzMyIFU6RzozMiwgVUQ6RzozMiwgVTpHOjMyLCBVRDpH
OjMyIC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIKKyAgICBTdGF0dXND
b25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4Nl82NDogQnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQg
VTpHOjMyLCBVRDpHOjY0LCBVOkc6NjQsIFVEOkc6NjQgL2JyYW5jaAorICAgIFN0YXR1c0NvbmQs
IFRtcCosIFRtcCwgQWRkcgorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgKKworeDg2
OiBBdG9taWNBZGQ4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FkZDE2IFU6Rzox
NiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIK
KyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljQWRkMzIgVTpHOjMyLCBVRDpHOjMyCisgICAg
SW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgK
KworeDg2XzY0OiBBdG9taWNBZGQ2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAg
ICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21p
Y1N1YjggVTpHOjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljU3ViMTYgVTpHOjE2LCBVRDpH
OjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRt
cCwgSW5kZXgKKworeDg2OiBBdG9taWNTdWIzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFk
ZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZf
NjQ6IEF0b21pY1N1YjY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwg
SW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljQW5kOCBV
Okc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRk
cgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNBbmQxNiBVOkc6MTYsIFVEOkc6MTYKKyAg
ICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCit4ODY6IEF0b21pY0FuZDMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAg
IEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRv
bWljQW5kNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAor
ICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNPcjggVTpHOjgsIFVE
Okc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBU
bXAsIEluZGV4CisKK3g4NjogQXRvbWljT3IxNiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFk
ZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6
IEF0b21pY09yMzIgVTpHOjMyLCBVRDpHOjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRl
eAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNPcjY0IFU6
Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljWG9yOCBVOkc6OCwgVUQ6Rzo4CisgICAg
SW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgK
KworeDg2OiBBdG9taWNYb3IxNiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJ
bW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hv
cjMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljWG9yNjQgVTpHOjY0LCBV
RDpHOjY0CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAg
IFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNOZWc4IFVEOkc6OAorICAgIEFkZHIKKyAgICBJbmRl
eAorCit4ODY6IEF0b21pY05lZzE2IFVEOkc6MTYKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2
OiBBdG9taWNOZWczMiBVRDpHOjMyCisgICAgQWRkcgorICAgIEluZGV4CisKK3g4Nl82NDogQXRv
bWljTmVnNjQgVUQ6Rzo2NAorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY05vdDgg
VUQ6Rzo4CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogQXRvbWljTm90MTYgVUQ6RzoxNgor
ICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY05vdDMyIFVEOkc6MzIKKyAgICBBZGRy
CisgICAgSW5kZXgKKworeDg2XzY0OiBBdG9taWNOb3Q2NCBVRDpHOjY0CisgICAgQWRkcgorICAg
IEluZGV4CisKK3g4NjogQXRvbWljWGNoZ0FkZDggVUQ6Rzo4LCBVRDpHOjgKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljWGNoZ0FkZDE2IFVEOkc6MTYsIFVEOkc6
MTYKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljWGNoZ0FkZDMy
IFVEOkc6MzIsIFVEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82
NDogQXRvbWljWGNoZ0FkZDY0IFVEOkc6NjQsIFVEOkc6NjQKKyAgICBUbXAsIEFkZHIKKyAgICBU
bXAsIEluZGV4CisKK3g4NjogQXRvbWljWGNoZzggVUQ6Rzo4LCBVRDpHOjgKKyAgICBUbXAsIEFk
ZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljWGNoZzE2IFVEOkc6MTYsIFVEOkc6MTYK
KyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljWGNoZzMyIFVEOkc6
MzIsIFVEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRv
bWljWGNoZzY0IFVEOkc6NjQsIFVEOkc6NjQKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4
CisKK2FybTY0OiBMb2FkTGluazggVTpHOjgsIFpEOkc6OAorICAgIEFkZHIsIFRtcAorICAgIElu
ZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rQWNxOCBVOkc6OCwgWkQ6Rzo4CisgICAgQWRkciwg
VG1wCisgICAgSW5kZXgsIFRtcAorCisjIFN1cGVyIGNvbmZ1c2luZyBmYWN0OiB0aGlzIHJldHVy
bnMgMCB0byBtZWFuIHN1Y2Nlc3MsIDEgdG8gbWVhbiBmYWlsdXJlLgorYXJtNjQ6IFN0b3JlQ29u
ZDggVTpHOjgsIEQ6Rzo4LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIElu
ZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDggVTpHOjgsIEQ6Rzo4LCBFWkQ6Rzo4Cisg
ICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5r
MTYgVTpHOjE2LCBaRDpHOjE2CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02
NDogTG9hZExpbmtBY3ExNiBVOkc6MTYsIFpEOkc6MTYKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRl
eCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQxNiBVOkc6MTYsIEQ6RzoxNiwgRVpEOkc6OAorICAg
IFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmRS
ZWwxNiBVOkc6MTYsIEQ6RzoxNiwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1w
LCBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGluazMyIFU6RzozMiwgWkQ6RzozMgorICAgIEFk
ZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rQWNxMzIgVTpHOjMyLCBa
RDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25k
MzIgVTpHOjMyLCBEOkc6MzIsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwg
SW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kUmVsMzIgVTpHOjMyLCBEOkc6MzIsIEVaRDpH
OjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogTG9h
ZExpbms2NCBVOkc6NjQsIFpEOkc6NjQKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisK
K2FybTY0OiBMb2FkTGlua0FjcTY0IFU6Rzo2NCwgWkQ6Rzo2NAorICAgIEFkZHIsIFRtcAorICAg
IEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZDY0IFU6Rzo2NCwgRDpHOjY0LCBFWkQ6Rzo4
CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3Jl
Q29uZFJlbDY0IFU6Rzo2NCwgRDpHOjY0LCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAg
ICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IERlcGVuZDMyIFU6RzozMiwgRDpHOjMyCisgICAg
VG1wLCBUbXAKKworYXJtNjQ6IERlcGVuZDY0IFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAK
IAogQ29tcGFyZTMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKICAgICBSZWxDb25k
LCBUbXAsIFRtcCwgVG1wCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9w
dGltaXplQmxvY2tPcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xNzcsNiArMTc3LDEwIEBAIHZvaWQgb3B0aW1pemVCbG9ja09yZGVy
KENvZGUmIGNvZGUpCiAgICAgICAgIGNhc2UgQnJhbmNoU3ViNjQ6CiAgICAgICAgIGNhc2UgQnJh
bmNoTmVnMzI6CiAgICAgICAgIGNhc2UgQnJhbmNoTmVnNjQ6CisgICAgICAgIGNhc2UgQnJhbmNo
QXRvbWljU3Ryb25nQ0FTODoKKyAgICAgICAgY2FzZSBCcmFuY2hBdG9taWNTdHJvbmdDQVMxNjoK
KyAgICAgICAgY2FzZSBCcmFuY2hBdG9taWNTdHJvbmdDQVMzMjoKKyAgICAgICAgY2FzZSBCcmFu
Y2hBdG9taWNTdHJvbmdDQVM2NDoKICAgICAgICAgICAgIGlmIChjb2RlLmZpbmROZXh0QmxvY2so
YmxvY2spID09IGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSAmJiBicmFuY2guYXJnc1swXS5pc0lu
dmVydGlibGUoKSkgewogICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChibG9jay0+c3VjY2Vzc29y
KDApLCBibG9jay0+c3VjY2Vzc29yKDEpKTsKICAgICAgICAgICAgICAgICBicmFuY2guYXJnc1sw
XSA9IGJyYW5jaC5hcmdzWzBdLmludmVydGVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCShyZXZpc2lvbiAyMTI5
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgdm9pZCBwYWRJbnRlcmZlcmVuY2Uo
Q29kZSYgY29kZSkKICAgICAgICAgICAgICAgICBbJl0gKEFyZyYsIEFyZzo6Um9sZSByb2xlLCBC
YW5rLCBXaWR0aCkgewogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgorICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6RWFybHlaRGVmOgogICAgICAgICAgICAgICAgICAgICAgICAgaGFzRWFybHlEZWYg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpMYXRlVXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYg
Y29kZSkKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkxhdGVDb2xkVXNlOgogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFyZzo6U2NyYXRjaDoKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OkVhcmx5RGVmOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlaRGVm
OgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogY29kZS5yZWdzSW5Qcmlv
cml0eU9yZGVyKGJhbmspKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRC
ZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwxNCArNTEsNDkgQEAgY2xhc3MgQXJnCiAgICAgICAgIEBiYW5r
ID0gYmFuawogICAgICAgICBAd2lkdGggPSB3aWR0aAogICAgIGVuZAotCi0gICAgZGVmIHdpZHRo
Q29kZQorICAgIAorICAgIGRlZiBzZWxmLndpZHRoQ29kZSh3aWR0aCkKICAgICAgICAgaWYgd2lk
dGggPT0gIlB0ciIKICAgICAgICAgICAgICJwb2ludGVyV2lkdGgoKSIKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgIldpZHRoI3t3aWR0aH0iCiAgICAgICAgIGVuZAogICAgIGVuZAorCisgICAg
ZGVmIHdpZHRoQ29kZQorICAgICAgICBBcmcud2lkdGhDb2RlKHdpZHRoKQorICAgIGVuZAorICAg
IAorICAgIGRlZiBzZWxmLnJvbGVDb2RlKHJvbGUpCisgICAgICAgIGNhc2Ugcm9sZQorICAgICAg
ICB3aGVuICJVIgorICAgICAgICAgICAgIlVzZSIKKyAgICAgICAgd2hlbiAiRCIKKyAgICAgICAg
ICAgICJEZWYiCisgICAgICAgIHdoZW4gIlpEIgorICAgICAgICAgICAgIlpEZWYiCisgICAgICAg
IHdoZW4gIlVEIgorICAgICAgICAgICAgIlVzZURlZiIKKyAgICAgICAgd2hlbiAiVVpEIgorICAg
ICAgICAgICAgIlVzZVpEZWYiCisgICAgICAgIHdoZW4gIlVBIgorICAgICAgICAgICAgIlVzZUFk
ZHIiCisgICAgICAgIHdoZW4gIlMiCisgICAgICAgICAgICAiU2NyYXRjaCIKKyAgICAgICAgd2hl
biAiRUQiCisgICAgICAgICAgICAiRWFybHlEZWYiCisgICAgICAgIHdoZW4gIkVaRCIKKyAgICAg
ICAgICAgICJFYXJseVpEZWYiCisgICAgICAgIHdoZW4gIkxVIgorICAgICAgICAgICAgIkxhdGVV
c2UiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVuZAorICAgIGVu
ZAorICAgIAorICAgIGRlZiByb2xlQ29kZQorICAgICAgICBBcmcucm9sZUNvZGUocm9sZSkKKyAg
ICBlbmQKIGVuZAogCiBjbGFzcyBPdmVybG9hZApAQCAtMTgyLDcgKzIxNyw3IEBAIGRlZiBsZXgo
c3RyLCBmaWxlTmFtZSkKIGVuZAogCiBkZWYgaXNSb2xlKHRva2VuKQotICAgIHRva2VuID1+IC9c
QSgoVSl8KEQpfChVRCl8KFpEKXwoVVpEKXwoVUEpfChTKSlcWi8KKyAgICB0b2tlbiA9fiAvXEEo
KFUpfChEKXwoVUQpfChaRCl8KFVaRCl8KFVBKXwoUyl8KEVEKXwoRVpEKXwoTFUpKVxaLwogZW5k
CiAKIGRlZiBpc0dGKHRva2VuKQpAQCAtMTkwLDcgKzIyNSw3IEBAIGRlZiBpc0dGKHRva2VuKQog
ZW5kCiAKIGRlZiBpc0tpbmQodG9rZW4pCi0gICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChC
aWdJbW0pfChCaXRJbW0pfChCaXRJbW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXND
b25kKXwoRG91YmxlQ29uZCkpXFovCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChCaWdJ
bW0pfChCaXRJbW0pfChCaXRJbW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25k
KXwoRG91YmxlQ29uZCl8KFN0YXR1c0NvbmQpKVxaLwogZW5kCiAKIGRlZiBpc0FyY2godG9rZW4p
CkBAIC0yNjQsNyArMjk5LDcgQEAgY2xhc3MgUGFyc2VyCiAKICAgICBkZWYgY29uc3VtZUtpbmQK
ICAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCi0gICAgICAgIHBhcnNlRXJyb3IoIkV4cGVj
dGVkIGtpbmQgKEltbSwgQmlnSW1tLCBCaXRJbW0sIEJpdEltbTY0LCBUbXAsIEFkZHIsIEluZGV4
LCBSZWxDb25kLCBSZXNDb25kLCBvciBEb3VibGVDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0
KQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1t
LCBCaXRJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgRG91YmxlQ29u
ZCwgb3IgU3RhdHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKICAgICAgICAgYWR2YW5j
ZQogICAgICAgICByZXN1bHQKICAgICBlbmQKQEAgLTYzNCwyOCArNjY5LDcgQEAgd3JpdGVIKCJP
cGNvZGVVdGlscyIpIHsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0
dXJlLmVhY2hfd2l0aF9pbmRleCB7CiAgICAgICAgICAgICAgICAgfCBhcmcsIGluZGV4IHwKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByb2xlID0gbmlsCi0gICAgICAgICAgICAg
ICAgY2FzZSBhcmcucm9sZQotICAgICAgICAgICAgICAgIHdoZW4gIlUiCi0gICAgICAgICAgICAg
ICAgICAgIHJvbGUgPSAiVXNlIgotICAgICAgICAgICAgICAgIHdoZW4gIkQiCi0gICAgICAgICAg
ICAgICAgICAgIHJvbGUgPSAiRGVmIgotICAgICAgICAgICAgICAgIHdoZW4gIlpEIgotICAgICAg
ICAgICAgICAgICAgICByb2xlID0gIlpEZWYiCi0gICAgICAgICAgICAgICAgd2hlbiAiVUQiCi0g
ICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlRGVmIgotICAgICAgICAgICAgICAgIHdoZW4g
IlVaRCIKLSAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VaRGVmIgotICAgICAgICAgICAg
ICAgIHdoZW4gIlVBIgotICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZUFkZHIiCi0gICAg
ICAgICAgICAgICAgd2hlbiAiUyIKLSAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJTY3JhdGNo
IgotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAg
ICAgICAgICAgICBlbmQKLQotICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZnVuY3Rvcihhcmdz
WyN7aW5kZXh9XSwgQXJnOjoje3JvbGV9LCAje2FyZy5iYW5rfVAsICN7YXJnLndpZHRoQ29kZX0p
OyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1sje2luZGV4fV0sIEFy
Zzo6I3thcmcucm9sZUNvZGV9LCAje2FyZy5iYW5rfVAsICN7YXJnLndpZHRoQ29kZX0pOyIKICAg
ICAgICAgICAgIH0KICAgICAgICAgZW5kCiAgICAgfQpAQCAtODE5LDYgKzgzMyw3IEBAIHdyaXRl
SCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCiAg
ICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKICAgICAgICAgICAgICAgICB3aGVuICJEb3Vi
bGVDb25kIgorICAgICAgICAgICAgICAgIHdoZW4gIlN0YXR1c0NvbmQiCiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByYWlzZSAiVW5leHBlY3RlZCBraW5kOiAje2tp
bmQubmFtZX0iCiAgICAgICAgICAgICAgICAgZW5kCkBAIC0xMTA1LDYgKzExMjAsOCBAQCB3cml0
ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
YXJnc1sje2luZGV4fV0uYXNSZXN1bHRDb25kaXRpb24oKSIKICAgICAgICAgICAgICAgICB3aGVu
ICJEb3VibGVDb25kIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5k
ZXh9XS5hc0RvdWJsZUNvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIHdoZW4gIlN0YXR1c0Nv
bmQiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzU3Rh
dHVzQ29uZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICB9CiAKQEAg
LTExNDgsMjcgKzExNjUsNyBAQCBGaWxlLm9wZW4oIkpTQWlyX29wY29kZS5qcyIsICJ3Iikgewog
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5n
dGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCiAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2ln
bmF0dXJlLmVhY2hfd2l0aF9pbmRleCB7CiAgICAgICAgICAgICAgICAgICAgIHwgYXJnLCBpbmRl
eCB8Ci0gICAgICAgICAgICAgICAgICAgIHJvbGUgPSBuaWwKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBhcmcucm9sZQotICAgICAgICAgICAgICAgICAgICB3aGVuICJVIgotICAgICAgICAgICAg
ICAgICAgICAgICAgcm9sZSA9ICJVc2UiCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gIkQiCi0g
ICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIKLSAgICAgICAgICAgICAgICAgICAg
d2hlbiAiWkQiCi0gICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gIlpEZWYiCi0gICAgICAg
ICAgICAgICAgICAgIHdoZW4gIlVEIgotICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJV
c2VEZWYiCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gIlVaRCIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJvbGUgPSAiVXNlWkRlZiIKLSAgICAgICAgICAgICAgICAgICAgd2hlbiAiVUEiCi0g
ICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZUFkZHIiCi0gICAgICAgICAgICAgICAg
ICAgIHdoZW4gIlMiCi0gICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gIlNjcmF0Y2giCi0g
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0g
ICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJpbnN0LnZpc2l0QXJnKCN7aW5kZXh9LCBmdW5jLCBBcmcuI3ty
b2xlfSwgI3thcmcuYmFua31QLCAje2FyZy53aWR0aH0pOyIKKyAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJpbnN0LnZpc2l0QXJnKCN7aW5kZXh9LCBmdW5jLCBBcmcuI3thcmcucm9sZUNv
ZGV9LCAje2FyZy5iYW5rfVAsICN7YXJnLndpZHRofSk7IgogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtNDEzLDkgKzQxMyw2IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAg
IHYoYm9vbCwgZHVtcE1vZHVsZUxvYWRpbmdTdGF0ZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYoYm9vbCwgZXhwb3NlSW50ZXJuYWxNb2R1bGVMb2FkZXIsIGZhbHNlLCBOb3JtYWws
ICJleHBvc2UgdGhlIGludGVybmFsIG1vZHVsZSBsb2FkZXIgb2JqZWN0IHRvIHRoZSBnbG9iYWwg
c3BhY2UgZm9yIGRlYnVnZ2luZyIpIFwKICAgICBcCi0gICAgdihib29sLCBkdW1wQWlyQXNKU0Jl
Zm9yZUFsbG9jYXRlU3RhY2ssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICB2KGJvb2ws
IGR1bXBBaXJBZnRlckFsbG9jYXRlU3RhY2ssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAg
ICBcCiAgICAgdihib29sLCB1c2VTdXBlclNhbXBsZXIsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICBcCiAgICAgdihib29sLCByZXBvcnRMTEludFN0YXRzLCBmYWxzZSwgQ29uZmlndXJh
YmxlLCAiUmVwb3J0cyBMTEludCBzdGF0aXN0aWNzIikgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303109</attachid>
            <date>2017-03-01 13:37:10 -0800</date>
            <delta_ts>2017-03-01 17:40:44 -0800</delta_ts>
            <desc>added acq/rel tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>289743</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMyBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkwRjJDNjNDMDFFNjYwRUE3MDBDMTM4
MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCRjFFNjYwRUE1MDBDMTM4MzkgLyogQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGMkM2M0MyMUU2NjRBNUMwMEMxMzgzOSAv
KiBCM05hdGl2ZVRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQzYzQzExRTY2NEE1QTAwQzEzODM5IC8qIEIzTmF0aXZlVHJhaXRzLmggKi87
IH07CiAJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERCMTk4MzJE
MzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCAqLzsgfTsKIAkJMEYyRDREREUxOTgzMkQz
NDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERDMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNj
b3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYyRDRERTgxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJENERFNTE5ODMyREFDMDA3RDRC
MTkgLyogVG9UaGlzU3RhdHVzLmNwcCAqLzsgfTsKQEAgLTIyNDMsOCArMjI1MCw2IEBACiAJCURD
MjE0MzA4MUNBMzJFNTgwMDBBODg2OSAvKiBJQ1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMjE0MzA1MUNBMzJFNTIwMDBBODg2OSAvKiBJ
Q1N0YXRzLmNwcCAqLzsgfTsKIAkJREMzRDJCMEExRDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzNEMkIw
OTFEMzQzMTYxMDBCQTkxOEMgLyogSGVhcENlbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEQzNEMkIwQzFEMzQzNzcwMDBCQTkxOEMgLyogSGVh
cENlbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
REMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8qIEhlYXBDZWxsLmNwcCAqLzsgfTsKLQkJREM0NTRC
OEMxRDAwRTgyMjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNDU0QjhBMUQwMEU4MUYwMDRDMThBRiAvKiBB
aXJEdW1wQXNKUy5jcHAgKi87IH07Ci0JCURDNDU0QjhEMUQwMEU4MjQwMDRDMThBRiAvKiBBaXJE
dW1wQXNKUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
REM0NTRCOEIxRDAwRTgxRjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmggKi87IH07CiAJCURDNjA1
QjVEMUNFMjZFQTAwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjU5MUNFMjZFOTgwMDU5MzcxOCAv
KiBQcm9maWxlckV2ZW50LmNwcCAqLzsgfTsKIAkJREM2MDVCNUUxQ0UyNkVBMjAwNTkzNzE4IC8q
IFByb2ZpbGVyRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IERDNjA1QjVBMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREM2MDVCNUYxQ0Uy
NkVBNTAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjVCMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxl
clVJRC5jcHAgKi87IH07CkBAIC0yNzY0LDYgKzI3NjksMTMgQEAKIAkJMEYyQzYzQUMxRTYwQUUz
QzAwQzEzODM5IC8qIEIzQmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M0JhbmsuaDsgcGF0aCA9IGIzL0IzQmFuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjJDNjNBRDFFNjBBRTNDMDBDMTM4MzkgLyogQjNXaWR0aC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dpZHRoLmNwcDsgcGF0aCA9IGIzL0IzV2lkdGguY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNjNBRTFFNjBBRTNEMDBDMTM4Mzkg
LyogQjNXaWR0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dpZHRoLmg7
IHBhdGggPSBiMy9CM1dpZHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2
M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQXRvbWljVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBdG9t
aWNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I0MUU2MzQz
RTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzQXRvbWljVmFsdWUuaDsgcGF0aCA9IGIzL0IzQXRvbWljVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2Vu
ZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0dlbmVyaWNCbG9ja0lu
c2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCOTFFNjM0
NDA4MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMv
YWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBh
dGggPSBiMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQzYzQkYxRTY2MEVBNTAwQzEzODM5IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0MxMUU2
NjRBNUEwMEMxMzgzOSAvKiBCM05hdGl2ZVRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM05hdGl2ZVRyYWl0cy5oOyBwYXRoID0gYjMvQjNOYXRpdmVUcmFpdHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREIxOTgzMkQzNDAwN0Q0QjE5IC8q
IERlYnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGVidWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkQ0RERD
MTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNDc3OCw4ICs0NzkwLDYgQEAKIAkJREMyMTQzMDYxQ0EzMkU1MjAwMEE4ODY5IC8q
IElDU3RhdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSUNTdGF0cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzNEMkIwOTFEMzQzMTYxMDBCQTkxOEMgLyog
SGVhcENlbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcENlbGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8q
IEhlYXBDZWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBD
ZWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJREM0NTRCOEExRDAwRTgxRjAw
NEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEFpckR1bXBBc0pTLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJEdW1wQXNKUy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURDNDU0QjhCMUQwMEU4MUYwMDRDMThBRiAvKiBB
aXJEdW1wQXNKUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJEdW1wQXNK
Uy5oOyBwYXRoID0gYjMvYWlyL0FpckR1bXBBc0pTLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCURDNjA1QjU5MUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyRXZlbnQuY3BwOyBwYXRo
ID0gcHJvZmlsZXIvUHJvZmlsZXJFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCURDNjA1QjVBMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyRXZlbnQuaDsgcGF0aCA9IHByb2ZpbGVy
L1Byb2ZpbGVyRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREM2MDVCNUIx
Q0UyNkU5ODAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyVUlELmNwcDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVy
VUlELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyOTIsNiArNTMwMiw4IEBA
CiAJCQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKIAkJCQkwRkVDODRCNDFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEYyQzYz
QjMxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3BwICovLAorCQkJCTBGMkM2M0I0
MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi8sCiAJCQkJMEYyQzYzQUIxRTYw
QUUzQzAwQzEzODM5IC8qIEIzQmFuay5jcHAgKi8sCiAJCQkJMEYyQzYzQUMxRTYwQUUzQzAwQzEz
ODM5IC8qIEIzQmFuay5oICovLAogCQkJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suY3BwICovLApAQCAtNTM1NCw2ICs1MzY2LDcgQEAKIAkJCQkwRkVDODRDRDFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLywKIAkJCQkwRkVDODRDRTFCREFD
REFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8sCiAJCQkJMEZFQzg0Q0YxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzR2VuZXJhdGUuaCAqLywKKwkJCQkwRjJDNjNCNTFFNjM0M0U4MDBDMTM4Mzkg
LyogQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRkVDODREMDFCREFDREFD
MDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1QkYx
QkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCAqLywKIAkJCQkwRkVDODVDMDFCRTE2
N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuaCAqLywKQEAgLTUzNzgsNiArNTM5MSw3IEBACiAJ
CQkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLywKIAkJCQkw
RjMzOEUwMzFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmNwcCAqLywKIAkJCQkw
RjMzOEUwNDFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggKi8sCisJCQkJMEYy
QzYzQzExRTY2NEE1QTAwQzEzODM5IC8qIEIzTmF0aXZlVHJhaXRzLmggKi8sCiAJCQkJMEYzMzhF
MDUxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0LmggKi8sCiAJCQkJMEYzMzhF
MDYxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5jcHAgKi8sCiAJCQkJMEYz
MzhFMDcxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5oICovLApAQCAtNTQ2
OSw2ICs1NDgzLDggQEAKIAkJCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5s
aW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2Nr
LmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5o
ICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNl
dC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0
aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29y
a2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdD
b252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC01NDgwLDggKzU0OTYsNiBAQAogCQkJCTBGMTBGMUEy
MUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCAqLywKIAkJCQk3OUFCQjE3QjFFNUNDQjU3
MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmNwcCAqLywKIAkJCQk3OUFCQjE3QzFFNUNDQjU3
MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmggKi8sCi0JCQkJREM0NTRCOEExRDAwRTgxRjAw
NEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCAqLywKLQkJCQlEQzQ1NEI4QjFEMDBFODFGMDA0QzE4
QUYgLyogQWlyRHVtcEFzSlMuaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyog
QWlyRWxpbWluYXRlRGVhZENvZGUuY3BwICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYy
OSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oICovLAogCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5jcHAgKi8sCkBAIC03MzI2LDYgKzczNDAsNyBAQAogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRjFGRTUxQjE5MjJBM0JDMDA2
OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLywKKwkJCQkwRjJDNjNCRjFFNjYwRUE1MDBDMTM4Mzkg
LyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8sCiAJCQkJODYwMTYxREYwRjNBODNDMTAw
Rjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCAqLywKIAkJCQkwRjM3MzA5MDFDMENE
NzBDMDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggKi8sCiAJCQkJ
ODY0MDkyM0IxNTZFRUQzQjAwNTY2Q0IyIC8qIEFSTTY0QXNzZW1ibGVyLmggKi8sCkBAIC03MzU0
LDggKzczNjksOCBAQAogCQkJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2Vt
Ymxlck1JUFMuaCAqLywKIAkJCQlGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmNwcCAqLywKIAkJCQlGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyogTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmggKi8sCi0JCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi8sCisJCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJQTdBNEFFMDcxNzk3M0IyNjAwNTYxMkIx
IC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLywKIAkJCQk4NjAxNjFFMjBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3NzE4
NUE4RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywKQEAg
LTc5NDMsNyArNzk1OCw2IEBACiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckND
YWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTBGMUEzMUM0MjBCRjAwMDFDMDdE
MiAvKiBBaXJDdXN0b20uaCBpbiBIZWFkZXJzICovLAotCQkJCURDNDU0QjhEMUQwMEU4MjQwMDRD
MThBRiAvKiBBaXJEdW1wQXNKUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NTcwMzkxQkU0NEM5
MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjYxODMyRDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTc5NTYsNiArNzk3MCw3IEBACiAJCQkJMEZFQzg1ODAxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTgxMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3
RDcxRDlEQzQ0MjAwMUI5ODI1IC8qIEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2
M0JDMUU2MzQ0MEMwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjY4NEQ0MzgxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQ
cmVzc3VyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQ3LDYgKzgwNjIs
NyBAQAogCQkJCTQzNDIyQTYzMUMxNThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQ
dHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8q
IEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQjgxRTYzNDNG
NzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjMzOEUwRTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYzM0ZDRkMxQzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2QjhBRDkxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRl
VGFpbHMuaCBpbiBIZWFkZXJzICovLApAQCAtODIzNyw2ICs4MjUzLDcgQEAKIAkJCQlBNzdBNDIz
RTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJDNjNDMjFFNjY0QTVD
MDBDMTM4MzkgLyogQjNOYXRpdmVUcmFpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3
MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAy
QzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywK
QEAgLTgzNjYsNiArODM4Myw3IEBACiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERG
R09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdG
NTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
MzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3
MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKQEAgLTk3OTIsNiArOTgx
MCw3IEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJ
CQkJMEZGQTU0OTcxNkI4ODM1MDAwQjNBOTgyIC8qIEE2NERPcGNvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYyQzYzQzAxRTY2MEVBNzAwQzEzODM5IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUQ0OTM3QzMxRERCRTYxNDAwNzdDODA3IC8qIEFi
c3RyYWN0TW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVGMEY0MTREMTA2
MzkwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzNzBCNEY1
MUJGMjYyMDIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRCYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTgwMiw3ICs5ODIxLDYgQEAKIAkJCQkwRkVD
ODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJREM0NTRCOEMxRDAwRTgyMjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDU3MDM4MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYxODMyQzFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0REUxQ0Ux
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0xMDI0OCw2ICsxMDI2Niw3IEBACiAJCQkJOUU3Mjk0MDcxOTBGMDFBNTAwMUE5MUI1IC8q
IEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QjcxODVC
OEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEYyQzYzQjYxRTYzNDNFQTAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVk
U2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1
QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQw
RTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTEwMjY2LDYgKzEwMjg1LDcgQEAKIAkJCQlFMzVFMDM1RjFCN0FCNDNFMDA3M0FE
MkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MzI0MzhCMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRCNjExODgwOURENTAwNjhBNDZEIC8qIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJDNjNCQjFFNjM0NDBB
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU1MTY1RDIxQkRGMEI5ODAwM0I3NUMxIC8qIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3Bl
Y3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdB
NDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiIC8vIEhhdmUgdG8g
YnJlYWsgd2l0aCBzdHlsZSBiZWNhdXNlIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpcyBhIHNo
YWR5IGhlYWRlci4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBYnN0cmFjdE1hY3JvQXNzZW1i
bGVyQmFzZTo6U3RhdHVzQ29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmRp
dGlvbikgeworICAgIGNhc2UgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJhc2U6OlN1Y2Nlc3M6Cisg
ICAgICAgIG91dC5wcmludCgiU3VjY2VzcyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyQmFzZTo6RmFpbHVyZToKKyAgICAgICAgb3V0LnByaW50KCJG
YWlsdXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMiwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHd0
Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9tLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
NTAsOCArNTEsMjggQEAgbmFtZXNwYWNlIERGRyB7CiBzdHJ1Y3QgT1NSRXhpdDsKIH0KIAorY2xh
c3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJhc2UgeworcHVibGljOgorICAgIGVudW0gU3RhdHVz
Q29uZGl0aW9uIHsKKyAgICAgICAgU3VjY2VzcywKKyAgICAgICAgRmFpbHVyZQorICAgIH07Cisg
ICAgCisgICAgc3RhdGljIFN0YXR1c0NvbmRpdGlvbiBpbnZlcnQoU3RhdHVzQ29uZGl0aW9uIGNv
bmRpdGlvbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgICAgIGNh
c2UgU3VjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBGYWlsdXJlOworICAgICAgICBjYXNlIEZh
aWx1cmU6CisgICAgICAgICAgICByZXR1cm4gU3VjY2VzczsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gU3VjY2VzczsKKyAg
ICB9Cit9OworCiB0ZW1wbGF0ZSA8Y2xhc3MgQXNzZW1ibGVyVHlwZSwgY2xhc3MgTWFjcm9Bc3Nl
bWJsZXJUeXBlPgotY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlciB7CitjbGFzcyBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJCYXNlIHsKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZSwg
TWFjcm9Bc3NlbWJsZXJUeXBlPiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyVHlwZTsKICAgICB0eXBl
ZGVmIEFzc2VtYmxlclR5cGUgQXNzZW1ibGVyVHlwZV9UOwpAQCAtMTEwOCwzICsxMTI5LDE2IEBA
IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZSwgTWEKICNlbmRpZiAvLyBFTkFC
TEUoQVNTRU1CTEVSKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKKworI2lmIEVOQUJMRShBU1NFTUJM
RVIpCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJh
c2U6OlN0YXR1c0NvbmRpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEFTU0VNQkxFUikKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMi0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTM2LDYgKzEzNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IHR3b1RvVGhlMzI7IC8vIFRoaXMgaXMgc3VwZXIgdXNlZnVsIGZvciBzb21lIGRvdWJsZSBjb2Rl
LgogCiAgICAgLy8gVXRpbGl0aWVzIHVzZWQgYnkgdGhlIERGRyBKSVQuCisgICAgdXNpbmcgQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlckJhc2U6OmludmVydDsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxl
ckJhc2U6OmludmVydDsKICAgICAKICAgICBzdGF0aWMgRG91YmxlQ29uZGl0aW9uIGludmVydChE
b3VibGVDb25kaXRpb24gY29uZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3MSw2ICsxNzEsMTEgQEAgcHVi
bGljOgogICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBk
ZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZDMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfbXIoc3JjLm9mZnNldCwgc3Jj
LmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIGFk
ZDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CkBAIC0yNTEsMTYgKzI1
Niw3MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgc3Jj
LCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcm0oc3Jj
LCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZDE2KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7
CisgICAgfQorCisgICAgdm9pZCBhbmQxNihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRl
c3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ4
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5hbmRiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmQ4KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmFuZGJfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4
LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIGFuZDMyKEFkZHJlc3Mgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX21yKHNyYy5vZmZz
ZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDMyKEJhc2VJbmRleCBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfbXIo
c3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9
CisKICAgICB2b2lkIGFuZDMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKICAg
ICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgYW5kMzIoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRs
X2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDE2KFRydXN0ZWRJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHdf
aW0oc3RhdGljX2Nhc3Q8aW50MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kd19pbShzdGF0
aWNfY2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgYW5k
OChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5hbmRiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDgoVHJ1c3RlZElt
bTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5h
bmRiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAg
ICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBk
ZXN0KQogICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC00NTYsNiArNTE2LDMxIEBA
IHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubmVnbF9tKHNyY0Rlc3Qub2Zmc2V0LCBzcmNE
ZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgbmVnMzIoQmFzZUluZGV4IHNyY0Rlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWdsX20oc3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3Qu
YmFzZSwgc3JjRGVzdC5pbmRleCwgc3JjRGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBu
ZWcxNihBZGRyZXNzIHNyY0Rlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWd3X20o
c3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBuZWcxNihC
YXNlSW5kZXggc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZ3dfbShzcmNE
ZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlLCBzcmNEZXN0LmluZGV4LCBzcmNEZXN0LnNjYWxlKTsK
KyAgICB9CisKKyAgICB2b2lkIG5lZzgoQWRkcmVzcyBzcmNEZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubmVnYl9tKHNyY0Rlc3Qub2Zmc2V0LCBzcmNEZXN0LmJhc2UpOworICAgIH0K
KworICAgIHZvaWQgbmVnOChCYXNlSW5kZXggc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm5lZ2JfbShzcmNEZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlLCBzcmNEZXN0LmluZGV4
LCBzcmNEZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9ycihzcmMs
IGRlc3QpOwpAQCAtNDcxLDE2ICs1NTYsNzEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxl
ci5vcmxfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lk
IG9yMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIub3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwg
ZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjE2KFJlZ2lzdGVySUQgc3JjLCBBZGRy
ZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcndfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMTYoUmVnaXN0ZXJJRCBzcmMs
IEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X3JtKHNyYywg
ZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQor
CisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAg
IH0KKworICAgIHZvaWQgb3I4KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2Us
IGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgb3IzMihBZGRyZXNz
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX21y
KHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIG9yMzIoQmFz
ZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7
CisgICAgfQorCiAgICAgdm9pZCBvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVz
cykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9pbShpbW0ubV92YWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjMyKFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMTYoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3
X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X2ltKHN0YXRp
Y19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjgo
VHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIub3JiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIg
aW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9p
bShzdGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9p
ZCBvcjMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC02NTQsMTYgKzc5NCw3MSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3ViMTYoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19p
bShzdGF0aWNfY2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UpOworICAgIH0KKworICAgIHZvaWQgc3ViOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX2ltKHN0YXRpY19j
YXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
KyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9pbShpbW0ubV92YWx1ZSwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7
CisgICAgfQorCisgICAgdm9pZCBzdWIxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YndfaW0oc3RhdGljX2Nhc3Q8aW50
MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjgoVHJ1c3RlZElt
bTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5z
dWJiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAg
ICB2b2lkIHN1YjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAg
ICBtX2Fzc2VtYmxlci5zdWJsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9
CiAKKyAgICB2b2lkIHN1YjMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5p
bmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIHN1YjMyKFJlZ2lzdGVy
SUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX3Jt
KHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdWIxNihS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c3Vid19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQg
c3ViOChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc3ViYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAg
IHZvaWQgc3ViMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuc3VibF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3Qu
aW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgc3ViMTYoUmVnaXN0ZXJJRCBz
cmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19ybShz
cmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAg
IH0KKworICAgIHZvaWQgc3ViOChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCB4b3IzMihSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
eG9ybF9ycihzcmMsIGRlc3QpOwpAQCAtNjc3LDYgKzg3Miw1MCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci54b3JsX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRl
eCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubm90bF9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgs
IGRlc3Quc2NhbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3Js
X2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0
LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJl
c3MgZGVzdCkKKyAgICB7CisgICAgICAgIGltbS5tX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50MTZf
dD4oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gLTEpCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5ub3R3X20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcndfaW0oaW1tLm1fdmFsdWUsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9yMTYoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBpbW0ubV92YWx1ZSA9IHN0YXRp
Y19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09
IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci54b3J3X2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBk
ZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgaW1tLm1fdmFsdWUgPSBzdGF0
aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09
IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm90Yl9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JiX2ltKGltbS5t
X3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgo
VHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBpbW0ubV92
YWx1ZSA9IHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoaW1t
Lm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3RiX20oZGVzdC5vZmZz
ZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmJfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBk
ZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgeG9y
MzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYg
KGltbS5tX3ZhbHVlID09IC0xKQpAQCAtNjkwLDExICs5MjksNDEgQEAgcHVibGljOgogICAgICAg
ICBtX2Fzc2VtYmxlci54b3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAg
fQogCisgICAgdm9pZCB4b3IzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci54b3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCB4b3IxNihSZWdp
c3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9y
d19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9y
MTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIueG9yd19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRl
c3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywgQWRkcmVz
cyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yYl9ybShzcmMsIGRlc3Qub2Zm
c2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywg
QmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JiX3JtKHNyYywg
ZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQor
CiAgICAgdm9pZCB4b3IzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAg
ICAgICAgbV9hc3NlbWJsZXIueG9ybF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CiAg
ICAgfQogICAgIAorICAgIHZvaWQgeG9yMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9tcihzcmMub2Zmc2V0LCBzcmMuYmFz
ZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIHhv
cjMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAg
IHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC03NDEsNiArMTAxMCwzMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vdGxfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdDMyKEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm90bF9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Qu
c2NhbGUpOworICAgIH0KKworICAgIHZvaWQgbm90MTYoQWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0K
KworICAgIHZvaWQgbm90MTYoQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3R3X20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2Fs
ZSk7CisgICAgfQorCisgICAgdm9pZCBub3Q4KEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5vdGJfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAg
ICB2b2lkIG5vdDgoQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5u
b3RiX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7Cisg
ICAgfQorCiAgICAgdm9pZCBzcXJ0RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJ
RCBkc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zcXJ0c2RfcnIoc3JjLCBkc3QpOwpA
QCAtMTA3MSw0MiArMTM2NSwyMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0b3JlMTYoUmVnaXN0
ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQogICAgIHsKLSNpZiBDUFUoWDg2KQotICAgICAg
ICAvLyBPbiAzMi1iaXQgeDg2IHdlIGNhbiBvbmx5IHN0b3JlIGZyb20gdGhlIGZpcnN0IDQgcmVn
aXN0ZXJzOwotICAgICAgICAvLyBlc3AuLmVkaSBhcmUgbWFwcGVkIHRvIHRoZSAnaCcgcmVnaXN0
ZXJzIQotICAgICAgICBpZiAoc3JjID49IDQpIHsKLSAgICAgICAgICAgIC8vIFBpY2sgYSB0ZW1w
b3JhcnkgcmVnaXN0ZXIuCi0gICAgICAgICAgICBSZWdpc3RlcklEIHRlbXAgPSBnZXRVbnVzZWRS
ZWdpc3RlcihhZGRyZXNzKTsKLQotICAgICAgICAgICAgLy8gU3dhcCB0byB0aGUgdGVtcG9yYXJ5
IHJlZ2lzdGVyIHRvIHBlcmZvcm0gdGhlIHN0b3JlLgotICAgICAgICAgICAgc3dhcChzcmMsIHRl
bXApOwotICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d19ybSh0ZW1wLCBhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKLSAgICAgICAg
ICAgIHN3YXAoc3JjLCB0ZW1wKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2Vu
ZGlmCiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdndfcm0oc3JjLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKICAgICB9CiAKICAgICB2
b2lkIHN0b3JlMTYoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0jaWYg
Q1BVKFg4NikKLSAgICAgICAgLy8gT24gMzItYml0IHg4NiB3ZSBjYW4gb25seSBzdG9yZSBmcm9t
IHRoZSBmaXJzdCA0IHJlZ2lzdGVyczsKLSAgICAgICAgLy8gZXNwLi5lZGkgYXJlIG1hcHBlZCB0
byB0aGUgJ2gnIHJlZ2lzdGVycyEKLSAgICAgICAgaWYgKHNyYyA+PSA0KSB7Ci0gICAgICAgICAg
ICAvLyBQaWNrIGEgdGVtcG9yYXJ5IHJlZ2lzdGVyLgotICAgICAgICAgICAgUmVnaXN0ZXJJRCB0
ZW1wID0gZ2V0VW51c2VkUmVnaXN0ZXIoYWRkcmVzcyk7Ci0KLSAgICAgICAgICAgIC8vIFN3YXAg
dG8gdGhlIHRlbXBvcmFyeSByZWdpc3RlciB0byBwZXJmb3JtIHRoZSBzdG9yZS4KLSAgICAgICAg
ICAgIHN3YXAoc3JjLCB0ZW1wKTsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdndfcm0odGVt
cCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7Ci0gICAgICAgICAgICBzd2FwKHNyYywg
dGVtcCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgogICAgICAgICBt
X2Fzc2VtYmxlci5tb3Z3X3JtKHNyYywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAg
ICAgfQogCisgICAgdm9pZCBzdG9yZTE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92d19pbShzdGF0aWNfY2FzdDxpbnQx
Nl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
aW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUxNihUcnVzdGVk
SW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5t
b3Z3X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSk7CisgICAgfQogCiAgICAgLy8gRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9u
OgogICAgIC8vCkBAIC0yNzQzLDc0ICszMDE4LDgzOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX2ltKDAsIDAsIFg4NlJlZ2lz
dGVyczo6ZXNwKTsKICAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM4KFN0YXR1
c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklE
IG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsm
XSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsgfSk7CisgICAgfQogCi0gICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhh
dCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9ybWFsIHN0b3Jlcy4gU28sIGl0J3MgYSBuby1vcCBv
biB4ODYuCi0gICAgdm9pZCBzdG9yZUZlbmNlKCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzgo
U3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKICAg
ICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgcmVz
dWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZz
ZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOwogICAg
IH0KIAotICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVudHMgbW90aW9u
IG9mIG5vcm1hbCBsb2Fkcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4ODYuCi0gICAgdm9pZCBsb2Fk
RmVuY2UoKQorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgeworICAgICAgICBhdG9taWNTdHJv
bmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIu
Y21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFi
ZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAg
dm9pZCBhdG9taWNTdHJvbmdDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBl
eHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3Ms
IFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBsYWNl
V2l0aEp1bXAoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCBkZXN0aW5hdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4
cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3JtKG5l
d1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsgfSk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgbWF4SnVt
cFJlcGxhY2VtZW50U2l6ZSgpCisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0Nv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5l
d1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFg4NkFzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpOworICAgICAg
ICBhdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsg
bV9hc3NlbWJsZXIuY21weGNoZ2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UpOyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IHBhdGNoYWJsZUp1bXBT
aXplKCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5k
ZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgewotICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjpwYXRjaGFibGVKdW1wU2l6ZSgpOworICAgICAgICBhdG9taWNTdHJvbmdDQVMo
Y29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNo
Z2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5k
ZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c0Zsb2F0aW5nUG9pbnRSb3VuZGluZygpCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM4KFJlZ2lz
dGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRk
cmVzcykKICAgICB7Ci0gICAgICAgIGlmIChzX3NzZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVj
a1N0YXRlOjpOb3RDaGVja2VkKQotICAgICAgICAgICAgdXBkYXRlRWF4MUVjeEZsYWdzKCk7Ci0g
ICAgICAgIHJldHVybiBzX3NzZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVja1N0YXRlOjpTZXQ7
CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3Nl
bWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Up
OyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FWWCgpCisgICAgdm9pZCBh
dG9taWNTdHJvbmdDQVM4KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQg
bmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgLy8gQVZYIHN0aWxs
IGNhdXNlcyBteXN0ZXJpb3VzIHJlZ3Jlc3Npb25zIGFuZCB0aG9zZSByZWdyZXNzaW9ucyBjYW4g
YmUgbWFzc2l2ZS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdG9taWNTdHJvbmdD
QVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1Zh
bHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsgfSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdXBkYXRlRWF4MUVjeEZsYWdz
KCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0gICAgICAg
IGludCBmbGFncyA9IDA7Ci0jaWYgQ09NUElMRVIoTVNWQykKLSAgICAgICAgaW50IGNwdUluZm9b
NF07Ci0gICAgICAgIF9fY3B1aWQoY3B1SW5mbywgMHgxKTsKLSAgICAgICAgZmxhZ3MgPSBjcHVJ
bmZvWzJdOwotI2VsaWYgQ09NUElMRVIoR0NDX09SX0NMQU5HKQotI2lmIENQVShYODZfNjQpCi0g
ICAgICAgIGFzbSAoCi0gICAgICAgICAgICAibW92bCAkMHgxLCAlJWVheDsiCi0gICAgICAgICAg
ICAiY3B1aWQ7IgotICAgICAgICAgICAgIm1vdmwgJSVlY3gsICUwOyIKLSAgICAgICAgICAgIDog
Ij1nIiAoZmxhZ3MpCi0gICAgICAgICAgICA6Ci0gICAgICAgICAgICA6ICIlZWF4IiwgIiVlYngi
LCAiJWVjeCIsICIlZWR4IgotICAgICAgICAgICAgKTsKLSNlbHNlCi0gICAgICAgIGFzbSAoCi0g
ICAgICAgICAgICAibW92bCAkMHgxLCAlJWVheDsiCi0gICAgICAgICAgICAicHVzaGwgJSVlYng7
IgotICAgICAgICAgICAgImNwdWlkOyIKLSAgICAgICAgICAgICJwb3BsICUlZWJ4OyIKLSAgICAg
ICAgICAgICJtb3ZsICUlZWN4LCAlMDsiCi0gICAgICAgICAgICA6ICI9ZyIgKGZsYWdzKQotICAg
ICAgICAgICAgOgotICAgICAgICAgICAgOiAiJWVheCIsICIlZWN4IiwgIiVlZHgiCi0gICAgICAg
ICAgICApOwotI2VuZGlmCisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3Vs
dCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2
KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5k
UmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOwor
ICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMzIoUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxl
ci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0p
OworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMzIoUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNz
ZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hBdG9taWNTdHJvbmdDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRv
bWljU3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVz
dWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZz
ZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdD
QVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3Jt
KG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNv
bmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdW
YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIo
U3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBi
cmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNz
ZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
KTsgfSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVMzMihTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNo
QXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxl
ci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWlj
V2Vha0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1
bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVM4KGNvbmQsIGV4cGVjdGVkQW5kUmVz
dWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21p
Y1dlYWtDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVz
dWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBy
ZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVM4KGNvbmQsIGV4cGVjdGVkQW5k
UmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0
b21pY1dlYWtDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklE
IHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzE2KGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lk
IGF0b21pY1dlYWtDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lz
dGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMTYoY29uZCwgZXhw
ZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAg
IHZvaWQgYXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJl
Z2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMzIoY29uZCwg
ZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKwor
ICAgIHZvaWQgYXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVz
cywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMzMihj
b25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzgo
Y29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVM4KGNvbmQs
IGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2hBdG9taWNXZWFrQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
ZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBl
Y3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoQXRvbWljV2Vha0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVj
dGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBlY3Rl
ZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
QXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVk
QW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIoY29uZCwgZXhwZWN0ZWRBbmRS
ZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21p
Y1dlYWtDQVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJl
c3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIoY29uZCwgZXhwZWN0ZWRBbmRSZXN1
bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ4
KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY0FkZDgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDgoaW1tLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ4KFJlZ2lzdGVySUQgcmVn
LCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIGFkZDgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNB
ZGQ4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY0FkZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkMTYoaW1t
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQxNihUcnVzdGVkSW1t
MzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgYWRkMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNBZGQxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQxNihyZWcsIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5k
ZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
YWRkMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQzMihU
cnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQWRkMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKGltbSwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMzIoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgYWRkMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNBZGQzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKHJlZywgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1Yjgo
aW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWI4KFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBzdWI4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgYXRvbWljU3ViOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI4KHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViOChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1
YjgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWIxNihUcnVz
dGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIHN1YjE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljU3ViMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjE2KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMTYoUmVnaXN0ZXJJRCByZWcs
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgc3ViMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNT
dWIxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjE2KHJlZywgYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljU3ViMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWIzMihp
bW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjMyKFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBzdWIzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1N1YjMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjMyKHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMzIoUmVnaXN0ZXJJRCByZWcsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBzdWIzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDgo
VHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhbmQ4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQW5kOChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kOChpbW0sIGFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDgoUmVnaXN0ZXJJRCByZWcs
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgYW5kOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0Fu
ZDgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ4KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljQW5kMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQxNihpbW0s
IGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDE2KFRydXN0ZWRJbW0z
MiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBhbmQxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY0FuZDE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDE2KHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMTYoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRl
eCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBh
bmQxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDMyKFRy
dXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNBbmQzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIoaW1tLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQzMihSZWdpc3RlcklEIHJl
ZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBhbmQzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y0FuZDMyKFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNPcjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgoaW1t
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjgoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG9yOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY09yOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNPcjgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgocmVnLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgb3IxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y09yMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMTYocmVn
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFJlZ2lzdGVySUQg
cmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgb3IxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY09yMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjMyKGltbSwgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljT3IzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXgg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3Iz
MihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yMzIoUmVnaXN0
ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgb3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY09yMzIoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjMyKHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhv
cjgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3I4KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3I4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljWG9yOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I4KHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yOChSZWdpc3RlcklEIHJlZywgQmFzZUlu
ZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IHhvcjgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3IxNihU
cnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljWG9yMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KGltbSwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMTYoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgeG9yMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNYb3IxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KHJlZywgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3Iz
MihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjMyKFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3IzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hvcjMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjMyKHJlZywgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMzIoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICB4b3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05l
ZzgoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBuZWc4KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzgo
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIG5lZzgoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMTYo
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBuZWcxNihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWcxNihC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgbmVnMTYoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMzIo
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBuZWczMihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWczMihC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgbmVnMzIoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90OChB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIG5vdDgoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90OChCYXNl
SW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAg
ICAgbm90OChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3QxNihBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG5vdDE2KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDE2KEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBub3QxNihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3QzMihBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG5vdDMyKGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDMyKEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBub3QzMihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkOChS
ZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkYl9ybShyZWcsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGdBZGQ4
KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGJfcm0ocmVnLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkMTYoUmVnaXN0ZXJJRCByZWcsIEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIueGFkZHdfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkMTYoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBtX2Fzc2VtYmxlci54YWRkd19ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY1hjaGdBZGQzMihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkbF9y
bShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1hjaGdBZGQzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhh
ZGRsX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwg
YWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzgoUmVnaXN0
ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGJfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnOChSZWdpc3Rl
cklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdiX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljWGNoZzE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LnhjaGd3X3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljWGNoZzE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIueGNoZ3dfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnMzIo
UmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0ocmVnLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnMzIo
UmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ybShyZWcsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3E4KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBsb2FkOChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxvYWRBY3E4KEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IGxvYWQ4KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZEFjcThTaWduZWRF
eHRlbmRUbzMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBs
b2FkOFNpZ25lZEV4dGVuZFRvMzIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBs
b2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbG9hZDhTaWduZWRFeHRlbmRUbzMyKHNyYywgZGVzdCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgbG9hZEFjcTE2KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBsb2FkMTYoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBs
b2FkQWNxMTYoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bG9hZDE2KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZEFjcTE2U2lnbmVk
RXh0ZW5kVG8zMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihzcmMsIGRlc3QpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3EzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgbG9hZEFjcTMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGxvYWQzMihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsOChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmU4KHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw4KFJlZ2lzdGVySUQgc3JjLCBC
YXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIHN0b3JlOChzcmMsIGRlc3QpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHN0b3JlUmVsOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3Qp
CisgICAgeworICAgICAgICBzdG9yZTgoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzdG9yZVJlbDgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAg
ICAgICBzdG9yZTgoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVJlbDE2
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KHNy
YywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwxNihSZWdpc3RlcklEIHNy
YywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KHNyYywgZGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KGltbSwgZGVzdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc3RvcmVSZWwxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAg
ICB7CisgICAgICAgIHN0b3JlMTYoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
dG9yZVJlbDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBz
dG9yZTMyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihSZWdp
c3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTMyKHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihUcnVzdGVkSW1tMzIgaW1t
LCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTMyKGltbSwgZGVzdCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIHN0b3JlMzIoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisg
ICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhhdCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9y
bWFsIHN0b3Jlcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4ODYuCisgICAgdm9pZCBzdG9yZUZlbmNl
KCkKKyAgICB7CisgICAgfQorCisgICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhhdCBpdCBw
cmV2ZW50cyBtb3Rpb24gb2Ygbm9ybWFsIGxvYWRzLiBTbywgaXQncyBhIG5vLW9wIG9uIHg4Ni4K
KyAgICB2b2lkIGxvYWRGZW5jZSgpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJl
cGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9j
YXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVw
bGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGVzdGlu
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJk
aWZmX3QgbWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCk7CisgICAgfQorCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBwYXRjaGFibGVKdW1wU2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjpwYXRjaGFibGVKdW1wU2l6ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzRmxvYXRpbmdQb2ludFJvdW5kaW5nKCkKKyAgICB7CisgICAgICAgIGlmIChzX3Nz
ZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVja1N0YXRlOjpOb3RDaGVja2VkKQorICAgICAgICAg
ICAgdXBkYXRlRWF4MUVjeEZsYWdzKCk7CisgICAgICAgIHJldHVybiBzX3NzZTRfMUNoZWNrU3Rh
dGUgPT0gQ1BVSURDaGVja1N0YXRlOjpTZXQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgc3Vw
cG9ydHNBVlgoKQorICAgIHsKKyAgICAgICAgLy8gQVZYIHN0aWxsIGNhdXNlcyBteXN0ZXJpb3Vz
IHJlZ3Jlc3Npb25zIGFuZCB0aG9zZSByZWdyZXNzaW9ucyBjYW4gYmUgbWFzc2l2ZS4KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUVheDFFY3hG
bGFncygpCisgICAgeworICAgICAgICBpbnQgZmxhZ3MgPSAwOworI2lmIENPTVBJTEVSKE1TVkMp
CisgICAgICAgIGludCBjcHVJbmZvWzRdOworICAgICAgICBfX2NwdWlkKGNwdUluZm8sIDB4MSk7
CisgICAgICAgIGZsYWdzID0gY3B1SW5mb1syXTsKKyNlbGlmIENPTVBJTEVSKEdDQ19PUl9DTEFO
RykKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBhc20gKAorICAgICAgICAgICAgIm1vdmwgJDB4
MSwgJSVlYXg7IgorICAgICAgICAgICAgImNwdWlkOyIKKyAgICAgICAgICAgICJtb3ZsICUlZWN4
LCAlMDsiCisgICAgICAgICAgICA6ICI9ZyIgKGZsYWdzKQorICAgICAgICAgICAgOgorICAgICAg
ICAgICAgOiAiJWVheCIsICIlZWJ4IiwgIiVlY3giLCAiJWVkeCIKKyAgICAgICAgICAgICk7Cisj
ZWxzZQorICAgICAgICBhc20gKAorICAgICAgICAgICAgIm1vdmwgJDB4MSwgJSVlYXg7IgorICAg
ICAgICAgICAgInB1c2hsICUlZWJ4OyIKKyAgICAgICAgICAgICJjcHVpZDsiCisgICAgICAgICAg
ICAicG9wbCAlJWVieDsiCisgICAgICAgICAgICAibW92bCAlJWVjeCwgJTA7IgorICAgICAgICAg
ICAgOiAiPWciIChmbGFncykKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgIDogIiVlYXgiLCAi
JWVjeCIsICIlZWR4IgorICAgICAgICAgICAgKTsKKyNlbmRpZgogI2VuZGlmIC8vIENPTVBJTEVS
KEdDQ19PUl9DTEFORykKICAgICAgICAgc19zc2U0XzFDaGVja1N0YXRlID0gKGZsYWdzICYgKDEg
PDwgMTkpKSA/IENQVUlEQ2hlY2tTdGF0ZTo6U2V0IDogQ1BVSURDaGVja1N0YXRlOjpDbGVhcjsK
ICAgICAgICAgc19hdnhDaGVja1N0YXRlID0gKGZsYWdzICYgKDEgPDwgMjgpKSA/IENQVUlEQ2hl
Y2tTdGF0ZTo6U2V0IDogQ1BVSURDaGVja1N0YXRlOjpDbGVhcjsKQEAgLTI4MzEsNiArMzg3MCwx
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxYODZBc3NlbWJsZXI6
OkNvbmRpdGlvbj4oY29uZCk7CiAgICAgfQogCisgICAgWDg2QXNzZW1ibGVyOjpDb25kaXRpb24g
eDg2Q29uZGl0aW9uKFN0YXR1c0NvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25kKSB7CisgICAgICAgIGNhc2UgU3VjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBYODZB
c3NlbWJsZXI6OkNvbmRpdGlvbkU7CisgICAgICAgIGNhc2UgRmFpbHVyZToKKyAgICAgICAgICAg
IHJldHVybiBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbk5FOworICAgICAgICB9CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6
OkNvbmRpdGlvbkU7CisgICAgfQorCiAgICAgdm9pZCBzZXQzMihYODZBc3NlbWJsZXI6OkNvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogI2lmIENQVShYODYpCkBAIC0yOTI1
LDYgKzM5NzYsMzUgQEAgcHJvdGVjdGVkOgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihzaXpl
T2ZSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIHNyY0lzTm9uWmVyby5saW5rKHRoaXMpOwogICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgYXRvbWljU3Ry
b25nQ0FTKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0
LCBSZWdpc3RlcklEIHJlc3VsdCwgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3
YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBmdW5jKCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRS
ZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgc2V0MzIoeDg2Q29uZGl0aW9uKGNv
bmQpLCByZXN1bHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
dm9pZCBhdG9taWNTdHJvbmdDQVMoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgY29uc3Qg
RnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJl
Z2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBmdW5j
KCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIEp1bXAgYnJhbmNoQXRv
bWljU3Ryb25nQ0FTKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5k
UmVzdWx0LCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgc3dhcChleHBlY3RlZEFu
ZFJlc3VsdCwgWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIGZ1bmMoKTsKKyAgICAgICAgc3dhcChleHBlY3RlZEFuZFJlc3VsdCwgWDg2UmVn
aXN0ZXJzOjplYXgpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29u
ZGl0aW9uKGNvbmQpKSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIC8vIE9ubHkgTWFjcm9Bc3Nl
bWJsZXJYODYgc2hvdWxkIGJlIHVzaW5nIHRoZSBmb2xsb3dpbmcgbWV0aG9kOyBTU0UyIGlzIGFs
d2F5cyBhdmFpbGFibGUgb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2NCwxMSArMjY0LDIxIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7
CiAgICAgfQogCisgICAgdm9pZCBhZGQ2NChCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNl
LCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBhZGQ2NChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkcV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQg
YWRkNjQoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYWRkcV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgs
IGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgYWRkNjQoQWJzb2x1dGVBZGRyZXNzIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHNy
Yy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKQEAgLTMwNiw2ICszMTYsMTQgQEAgcHVibGlj
OgogICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBhZGQ2NChUcnVzdGVkSW1t
MzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlmIChpbW0ubV92YWx1
ZSA9PSAxKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuaW5jcV9tKGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9
CisKICAgICB2b2lkIGFkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRy
ZXNzKQogICAgIHsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBz
Y3JhdGNoUmVnaXN0ZXIoKSk7CkBAIC0zNDIsMTEgKzM2MCw0MSBAQCBwdWJsaWM6CiAgICAgICAg
IG1fYXNzZW1ibGVyLmFuZHFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDY0
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5hbmRxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmQ2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5hbmRxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRl
eCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ2NChBZGRyZXNzIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9tcihzcmMub2Zm
c2V0LCBzcmMuYmFzZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhbmQ2NChCYXNlSW5kZXgg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX21y
KHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAg
fQorCiAgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3Qp
CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX2lyKGltbS5tX3ZhbHVlLCBzcmNEZXN0
KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfaW0oaW1tLm1fdmFsdWUsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX2lt
KGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNj
YWxlKTsKKyAgICB9CisKICAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3Rl
cklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBpbnRwdHJfdCBpbnRWYWx1ZSA9IGltbS5hc0lu
dHB0cigpOwpAQCAtNTUyLDExICs2MDAsNTEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxl
ci5uZWdxX3IoZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBuZWc2NChBZGRyZXNzIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWdxX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7
CisgICAgfQorCisgICAgdm9pZCBuZWc2NChCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5lZ3FfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBk
ZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9ycihzcmMsIGRlc3Qp
OwogICAgIH0KIAorICAgIHZvaWQgb3I2NChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9ybShzcmMsIGRlc3Qub2Zmc2V0
LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQg
b3I2NChBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIub3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIG9yNjQoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIub3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5z
Y2FsZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEFk
ZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9pbShpbW0ubV92YWx1
ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JxX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBk
ZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVn
aXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgaWYgKGltbS5tX3ZhbHVlIDw9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpCkBAIC02MTksMTYgKzcwNywzMSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3ViNjQoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJx
X2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHN1YjY0KEFkZHJlc3Mgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX21yKHNy
Yy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjY0KEJhc2VJ
bmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1
YnFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsK
KyAgICB9CisKICAgICB2b2lkIHN1YjY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdWI2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX3JtKHNyYywgZGVzdC5vZmZz
ZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9p
ZCB4b3I2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAg
bV9hc3NlbWJsZXIueG9ycV9ycihzcmMsIGRlc3QpOwpAQCAtNjUxLDYgKzc1NCwzMSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjY0KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfcm0oc3JjLCBkZXN0Lm9mZnNl
dCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lk
IHhvcjY0KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54b3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIHhvcjY0KEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnhvcnFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwg
c3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfaW0oaW1t
Lm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9y
NjQoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54b3JxX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0
LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnhv
cnFfaXIoaW1tLm1fdmFsdWUsIHNyY0Rlc3QpOwpAQCAtNjY2LDYgKzc5NCwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vdHFfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdDY0KEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm90cV9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Qu
c2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgbG9hZDY0KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNz
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX21yKGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGRlc3QpOwpAQCAtNzI1LDYgKzg1OCwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfaTMybShpbW0ubV92YWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdG9yZTY0KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92cV9pMzJtKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBh
ZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHN0b3JlNjQo
VHJ1c3RlZEltbTY0IGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAg
ICBpZiAoQ0FOX1NJR05fRVhURU5EXzMyXzY0KGltbS5tX3ZhbHVlKSkgewpAQCAtMTI5NCw3ICsx
NDMyLDI1NSBAQCBwdWJsaWM6CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjptb3Zl
KFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKICAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpicmFuY2hUZXN0OChjb25kLCBBZGRy
ZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSwgbWFzazgpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVk
QW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVl
LCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBh
dG9taWNTdHJvbmdDQVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lz
dGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVj
dGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1Zh
bHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM2NChSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsm
XSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM2NChSZWdp
c3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXgg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3Vs
dCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9
CiAKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FT
KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hncV9ybShu
ZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25k
LCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFs
dWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Mu
c2NhbGUpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVM2NChTdGF0dXNDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdW
YWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAg
IGF0b21pY1N0cm9uZ0NBUzY0KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRk
cmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVM2NChTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVl
LCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljV2Vha0NB
UzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBS
ZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1
cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1Zh
bHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM2NChT
dGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0
ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4g
YnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVl
LCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY0FkZDY0KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgYWRkNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNBZGQ2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkNjQoaW1tLCBhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ2
NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDY0KFJlZ2lz
dGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvY2soKTsKKyAgICAgICAgYWRkNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNTdWI2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjY0KGltbSwgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViNjQoVHJ1c3RlZEltbTMyIGltbSwg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIHN1YjY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWlj
U3ViNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNTdWI2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjY0KHJl
ZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBhbmQ2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY0FuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ2NChpbW0sIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDY0KFJlZ2lzdGVySUQgcmVnLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IGFuZDY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQo
UmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhbmQ2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY09yNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjY0KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I2NChUcnVzdGVkSW1tMzIgaW1t
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgb3I2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y09yNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY09yNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjY0KHJlZywg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yNjQoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICB4b3I2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1hvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I2NChpbW0sIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjY0KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhv
cjY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yNjQoUmVn
aXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3I2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY05lZzY0KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnNjQoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljTmVnNjQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY05vdDY0KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90NjQoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljTm90NjQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hjaGdBZGQ2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54
YWRkcV9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY1hjaGdBZGQ2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLnhhZGRxX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzY0
KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JtKHJlZywgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzY0
KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3Ffcm0ocmVnLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBsb2FkQWNxNjQoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGxvYWQ2NChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGxvYWRBY3E2NChCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBsb2FkNjQoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVJlbDY0
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KHNy
YywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw2NChSZWdpc3RlcklEIHNy
YywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KHNyYywgZGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KGltbSwgZGVzdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc3RvcmVSZWw2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAg
ICB7CisgICAgICAgIHN0b3JlNjQoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCB0
cnVuY2F0ZURvdWJsZVRvVWludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmN2dHRzZDJzaXFfcnIoc3JjLCBkZXN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZB
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5MCwxNiArMTkwLDIwIEBAIHBy
aXZhdGU6CiAgICAgICAgIE9QX0FERF9Fdkd2ICAgICAgICAgICAgICAgICAgICAgPSAweDAxLAog
ICAgICAgICBPUF9BRERfR3ZFdiAgICAgICAgICAgICAgICAgICAgID0gMHgwMywKICAgICAgICAg
T1BfQUREX0VBWEl2ICAgICAgICAgICAgICAgICAgICA9IDB4MDUsCisgICAgICAgIE9QX09SX0V2
R2IgICAgICAgICAgICAgICAgICAgICAgPSAweDA4LAogICAgICAgICBPUF9PUl9Fdkd2ICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwOSwKICAgICAgICAgT1BfT1JfR3ZFdiAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MEIsCiAgICAgICAgIE9QX09SX0VBWEl2ICAgICAgICAgICAgICAgICAgICAg
PSAweDBELAogICAgICAgICBPUF8yQllURV9FU0NBUEUgICAgICAgICAgICAgICAgID0gMHgwRiwK
KyAgICAgICAgT1BfQU5EX0V2R2IgICAgICAgICAgICAgICAgICAgICA9IDB4MjAsCiAgICAgICAg
IE9QX0FORF9Fdkd2ICAgICAgICAgICAgICAgICAgICAgPSAweDIxLAogICAgICAgICBPUF9BTkRf
R3ZFdiAgICAgICAgICAgICAgICAgICAgID0gMHgyMywKKyAgICAgICAgT1BfU1VCX0V2R2IgICAg
ICAgICAgICAgICAgICAgICA9IDB4MjgsCiAgICAgICAgIE9QX1NVQl9Fdkd2ICAgICAgICAgICAg
ICAgICAgICAgPSAweDI5LAogICAgICAgICBPUF9TVUJfR3ZFdiAgICAgICAgICAgICAgICAgICAg
ID0gMHgyQiwKICAgICAgICAgT1BfU1VCX0VBWEl2ICAgICAgICAgICAgICAgICAgICA9IDB4MkQs
CiAgICAgICAgIFBSRV9QUkVESUNUX0JSQU5DSF9OT1RfVEFLRU4gICAgPSAweDJFLAorICAgICAg
ICBPUF9YT1JfRXZHYiAgICAgICAgICAgICAgICAgICAgID0gMHgzMCwKICAgICAgICAgT1BfWE9S
X0V2R3YgICAgICAgICAgICAgICAgICAgICA9IDB4MzEsCiAgICAgICAgIE9QX1hPUl9HdkV2ICAg
ICAgICAgICAgICAgICAgICAgPSAweDMzLAogICAgICAgICBPUF9YT1JfRUFYSXYgICAgICAgICAg
ICAgICAgICAgID0gMHgzNSwKQEAgLTIyMyw2ICsyMjcsNyBAQCBwcml2YXRlOgogICAgICAgICBP
UF9HUk9VUDFfRXZJYiAgICAgICAgICAgICAgICAgID0gMHg4MywKICAgICAgICAgT1BfVEVTVF9F
YkdiICAgICAgICAgICAgICAgICAgICA9IDB4ODQsCiAgICAgICAgIE9QX1RFU1RfRXZHdiAgICAg
ICAgICAgICAgICAgICAgPSAweDg1LAorICAgICAgICBPUF9YQ0hHX0V2R2IgICAgICAgICAgICAg
ICAgICAgID0gMHg4NiwKICAgICAgICAgT1BfWENIR19Fdkd2ICAgICAgICAgICAgICAgICAgICA9
IDB4ODcsCiAgICAgICAgIE9QX01PVl9FYkdiICAgICAgICAgICAgICAgICAgICAgPSAweDg4LAog
ICAgICAgICBPUF9NT1ZfRXZHdiAgICAgICAgICAgICAgICAgICAgID0gMHg4OSwKQEAgLTI1Miw2
ICsyNTcsNyBAQCBwcml2YXRlOgogICAgICAgICBQUkVfU1NFX0YyICAgICAgICAgICAgICAgICAg
ICAgID0gMHhGMiwKICAgICAgICAgUFJFX1NTRV9GMyAgICAgICAgICAgICAgICAgICAgICA9IDB4
RjMsCiAgICAgICAgIE9QX0hMVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweEY0LAorICAg
ICAgICBPUF9HUk9VUDNfRWIgICAgICAgICAgICAgICAgICAgID0gMHhGNiwKICAgICAgICAgT1Bf
R1JPVVAzX0ViSWIgICAgICAgICAgICAgICAgICA9IDB4RjYsCiAgICAgICAgIE9QX0dST1VQM19F
diAgICAgICAgICAgICAgICAgICAgPSAweEY3LAogICAgICAgICBPUF9HUk9VUDNfRXZJeiAgICAg
ICAgICAgICAgICAgID0gMHhGNywgLy8gT1BfR1JPVVAzX0V2IGhhcyBhbiBpbW1lZGlhdGUsIHdo
ZW4gaW5zdHJ1Y3Rpb24gaXMgYSB0ZXN0LiAKQEAgLTI5MCw2ICsyOTYsOCBAQCBwcml2YXRlOgog
ICAgICAgICBPUF9TRVRDQyAgICAgICAgICAgID0gMHg5MCwKICAgICAgICAgT1AyXzNCWVRFX0VT
Q0FQRV9BRSA9IDB4QUUsCiAgICAgICAgIE9QMl9JTVVMX0d2RXYgICAgICAgPSAweEFGLAorICAg
ICAgICBPUDJfQ01QWENIR2IgICAgICAgID0gMHhCMCwKKyAgICAgICAgT1AyX0NNUFhDSEcgICAg
ICAgICA9IDB4QjEsCiAgICAgICAgIE9QMl9NT1ZaWF9HdkViICAgICAgPSAweEI2LAogICAgICAg
ICBPUDJfQlNGICAgICAgICAgICAgID0gMHhCQywKICAgICAgICAgT1AyX1RaQ05UICAgICAgICAg
ICA9IDB4QkMsCkBAIC0yOTgsNiArMzA2LDggQEAgcHJpdmF0ZToKICAgICAgICAgT1AyX01PVlNY
X0d2RWIgICAgICA9IDB4QkUsCiAgICAgICAgIE9QMl9NT1ZaWF9HdkV3ICAgICAgPSAweEI3LAog
ICAgICAgICBPUDJfTU9WU1hfR3ZFdyAgICAgID0gMHhCRiwKKyAgICAgICAgT1AyX1hBRERiICAg
ICAgICAgICA9IDB4QzAsCisgICAgICAgIE9QMl9YQUREICAgICAgICAgICAgPSAweEMxLAogICAg
ICAgICBPUDJfUEVYVFJXX0dkVWRJYiAgID0gMHhDNSwKICAgICAgICAgT1AyX1BTTExRX1VkcUli
ICAgICA9IDB4NzMsCiAgICAgICAgIE9QMl9QU1JMUV9VZHFJYiAgICAgPSAweDczLApAQCAtNDQw
LDYgKzQ1MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9B
RERfR3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGFkZGxf
bXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0FERF9HdkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9Cisg
ICAgCiAjaWYgIUNQVShYODZfNjQpCiAgICAgdm9pZCBhZGRsX21yKGNvbnN0IHZvaWQqIGFkZHIs
IFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTU2MiwxMSArNTc3LDIxIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0d2RXYsIGRzdCwgYmFzZSwgb2Zm
c2V0KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0d2RXYsIGRzdCwgYmFzZSwg
aW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYWRkcV9ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CiAKKyAgICB2b2lkIGFkZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNj
YWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYWRkcV9pcihpbnQgaW1tLCBSZWdpc3Rl
cklEIGRzdCkKICAgICB7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7
CkBAIC01OTEsNiArNjE2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTMyKGltbSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICB2b2lkIGFkZHFfaW0oaW50
IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgewor
ICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQ
MV9PUF9BREQsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9y
bWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfQURELCBiYXNl
LCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlh
dGUzMihpbW0pOworICAgICAgICB9CisgICAgfQogI2Vsc2UKICAgICB2b2lkIGFkZGxfaW0oaW50
IGltbSwgY29uc3Qgdm9pZCogYWRkcikKICAgICB7CkBAIC02MTQsMTEgKzY1MCw0MyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfR3ZFdiwgZHN0LCBiYXNl
LCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgYW5kbF9tcihpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0d2RXYsIGRzdCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYW5kbF9ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAg
ICAgfQogCisgICAgdm9pZCBhbmRsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBhbmR3X3JtKFJlZ2lzdGVySUQgc3JjLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5w
cmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIGFuZGxfcm0oc3JjLCBvZmZzZXQsIGJh
c2UpOworICAgIH0KKworICAgIHZvaWQgYW5kd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIGFu
ZGxfcm0oc3JjLCBvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmRiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0V2R2IsIHNyYywgYmFz
ZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZGJfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9FdkdiLCBzcmMsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIGFuZGxfaXIoaW50
IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5E
XzhfMzIoaW1tKSkgewpAQCAtNjQxLDYgKzcwOSw1MyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAKKyAgICB2b2lkIGFuZGxfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FO
X1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2
SXosIEdST1VQMV9PUF9BTkQsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIGFuZHdfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAg
ICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBvZmZzZXQp
OworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBH
Uk9VUDFfT1BfQU5ELCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1t
ZWRpYXRlMTYoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYW5kd19pbShpbnQg
aW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBz
Y2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpF
KTsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX0FORCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRp
YXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUs
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUxNihpbW0pOworICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCBhbmRiX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9H
Uk9VUDFfRWJJYiwgR1JPVVAxX09QX0FORCwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKworICAgIHZvaWQgYW5kYl9pbShpbnQgaW1t
LCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2Fs
ZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwg
R1JPVVAxX09QX0FORCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICBtX2Zv
cm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2
b2lkIGFuZHFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTY1
Nyw2ICs3NzIsNDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRl
MzIoaW1tKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHZvaWQgYW5kcV9tcihpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wNjQoT1BfQU5EX0d2RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3Rl
cklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQU5EX0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgYW5kcV9ybShSZWdpc3RlcklEIHNyYywgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIGFuZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKworICAgIHZvaWQgYW5kcV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkg
eworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdS
T1VQMV9PUF9BTkQsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1l
ZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX0FORCwgYmFzZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2b2lkIGFuZHFfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FO
X1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9BTkQsIGJhc2UsIGluZGV4LCBzY2FsZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQ
MV9Fdkl6LCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAg
ICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQog
I2Vsc2UKICAgICB2b2lkIGFuZGxfaW0oaW50IGltbSwgY29uc3Qgdm9pZCogYWRkcikKICAgICB7
CkBAIC03MDMsNiArODYwLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0dST1VQNV9FdiwgR1JPVVAxX09QX0FERCwgYmFzZSwgb2Zmc2V0KTsK
ICAgICB9CisKKyAgICB2b2lkIGluY3FfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcDY0KE9QX0dST1VQNV9FdiwgR1JPVVAxX09QX0FERCwgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KICNlbmRpZiAvLyBDUFUoWDg2XzY0KQogCiAgICAgdm9pZCBuZWds
X3IoUmVnaXN0ZXJJRCBkc3QpCkBAIC03MTUsNiArODc3LDE2IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JPVVAzX09QX05F
RywgZHN0KTsKICAgICB9CisKKyAgICB2b2lkIG5lZ3FfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNf
RXYsIEdST1VQM19PUF9ORUcsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBuZWdx
X20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYs
IEdST1VQM19PUF9ORUcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5k
aWYKIAogICAgIHZvaWQgbmVnbF9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKQEAgLTcy
Miw2ICs4OTQsMzMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1Bf
R1JPVVAzX0V2LCBHUk9VUDNfT1BfTkVHLCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZv
aWQgbmVnbF9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQ
M19FdiwgR1JPVVAzX09QX05FRywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0K
KworICAgIHZvaWQgbmVnd19tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbmVn
bF9tKG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBuZWd3X20oaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG5lZ2xf
bShvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBuZWdiX20o
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQM19FYiwgR1JPVVAzX09QX05FRywgYmFzZSwgb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICB2b2lkIG5lZ2JfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcChPUF9HUk9VUDNfRWIsIEdST1VQM19PUF9ORUcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICB9CisKICAgICB2b2lkIG5vdGxfcihSZWdpc3RlcklEIGRzdCkKICAgICB7CiAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1Qs
IGRzdCk7CkBAIC03MzIsNiArOTMxLDMzIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQM19FdiwgR1JPVVAzX09QX05PVCwgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdGxfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG5vdHdfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIG5vdGxfbShvZmZzZXQsIGJhc2UpOworICAgIH0KKworICAgIHZvaWQgbm90d19t
KGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOwor
ICAgICAgICBub3RsX20ob2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAg
IHZvaWQgbm90Yl9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRWIsIEdST1VQM19PUF9OT1QsIGJhc2Us
IG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBub3RiX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0ViLCBHUk9VUDNfT1BfTk9ULCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2b2lkIG5v
dHFfcihSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC03NDIsNiArOTY4LDExIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JP
VVAzX09QX05PVCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CisKKyAgICB2b2lkIG5vdHFfbShpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JPVVAz
X09QX05PVCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KICNlbmRpZgogCiAg
ICAgdm9pZCBvcmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpAQCAtNzU0LDEx
ICs5ODUsNDMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1Jf
R3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgb3JsX21yKGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9PUl9H
dkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lk
IG9ybF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAg
IHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R3YsIHNyYywgYmFzZSwg
b2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIG9ybF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfRXZHdiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBvcndfcm0oUmVnaXN0ZXJJ
RCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgb3JsX3JtKHNyYywgb2Zm
c2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yd19ybShSZWdpc3RlcklEIHNyYywgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAg
ICAgIG9ybF9ybShzcmMsIG9mZnNldCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R2IsIHNyYywg
YmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yYl9ybShSZWdpc3RlcklEIHNyYywg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfRXZHYiwgc3JjLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBvcmxfaXIoaW50
IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5E
XzhfMzIoaW1tKSkgewpAQCAtNzg0LDEyICsxMDQ3LDEwMSBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICB2b2lkIG9ybF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIGlmIChD
QU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9F
dkl6LCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIG9yd19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAg
IGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJeiwgR1JP
VVAxX09QX09SLCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRp
YXRlMTYoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgb3J3X2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOwor
ICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIGlu
ZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgo
aW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX09SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNl
dCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBvcmJfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9F
YkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7
CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwgR1JPVVAxX09Q
X09SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0KQogICAgIHZvaWQgb3JxX3Jy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcDY0KE9QX09SX0V2R3YsIHNyYywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lk
IG9ycV9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfT1JfR3ZFdiwgZHN0LCBiYXNl
LCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgb3JxX21yKGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX09SX0d2RXYsIGRzdCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgb3JxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9PUl9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7Cisg
ICAgfQorCisgICAgdm9pZCBvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfT1JfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBvcnFfaW0oaW50IGltbSwgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84
XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQ
MV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX09SLCBiYXNlLCBv
ZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgb3JxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
aWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9Q
X0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAg
ICB9CisKICAgICB2b2lkIG9ycV9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAg
ICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC04MzEsMTEgKzExODMs
NDMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0d2RXYs
IGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YmxfbXIoaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9HdkV2
LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIHN1
Ymxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7
CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBv
ZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgc3VibF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwg
aW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgc3Vid19ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3AoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIHN1Yndfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
cHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3Ao
T1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwor
ICAgIHZvaWQgc3ViYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9FdkdiLCBz
cmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBzdWJiX3JtKFJlZ2lzdGVySUQg
c3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBz
Y2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHYiwg
c3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBzdWJs
X2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdO
X0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTg2MSw2ICsxMjQ1LDUzIEBAIHB1YmxpYzoKICAgICAg
ICAgfQogICAgIH0KIAorICAgIHZvaWQgc3VibF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9TVUIsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9H
Uk9VUDFfRXZJeiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOwor
ICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgc3Vid19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9TVUIsIGJhc2Us
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0V2SXosIEdST1VQMV9PUF9TVUIsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWJ3
X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1Bf
U1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9TVUIsIGJhc2UsIGluZGV4
LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTE2KGlt
bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHN1YmJfaW0oaW50IGltbSwgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX0dST1VQMV9FYkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBvZmZzZXQpOworICAgICAg
ICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCisgICAgdm9pZCBzdWJiX2lt
KGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQ
MV9FYkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0
KQogICAgIHZvaWQgc3VicV9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ewpAQCAtODcyLDExICsxMzAzLDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfU1VCX0d2RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2
b2lkIHN1YnFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4
LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfU1VCX0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKwogICAgIHZvaWQgc3VicV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQo
T1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YnFf
cm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
NjQoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0K
KwogICAgIHZvaWQgc3VicV9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAg
ICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC05MDEsNiArMTM0MiwxNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOwogICAg
ICAgICB9CiAgICAgfQorCisgICAgdm9pZCBzdWJxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAg
ICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGlt
bSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZz
ZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAg
fQorICAgIH0KICNlbHNlCiAgICAgdm9pZCBzdWJsX2ltKGludCBpbW0sIGNvbnN0IHZvaWQqIGFk
ZHIpCiAgICAgewpAQCAtOTI0LDExICsxMzc2LDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX1hPUl9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CiAgICAgfQog
CisgICAgdm9pZCB4b3JsX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLm9uZUJ5dGVPcChPUF9YT1JfR3ZFdiwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgfQorCiAgICAgdm9pZCB4b3JsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3AoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHhv
cmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0
ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hPUl9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CisKICAgICB2b2lkIHhvcmxfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTk0
MCw2ICsxNDAyLDc1IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgeG9y
bF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5k
ZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihp
bW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIs
IEdST1VQMV9PUF9YT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1hPUiwg
YmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1t
ZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgeG9yd19ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICB4b3JsX3JtKHNy
Yywgb2Zmc2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcndfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNj
YWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUp
OworICAgICAgICB4b3JsX3JtKHNyYywgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAg
IH0KKworICAgIHZvaWQgeG9yd19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9YT1IsIGJhc2Us
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0V2SXosIEdST1VQMV9PUF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB4b3J3
X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1Bf
WE9SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9YT1IsIGJhc2UsIGluZGV4
LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTE2KGlt
bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHhvcmJfcm0oUmVnaXN0ZXJJRCBzcmMs
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcChPUF9YT1JfRXZHYiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAg
IHZvaWQgeG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfWE9SX0V2R2IsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKworICAgIHZvaWQgeG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0ViSWIsIEdST1VQMV9PUF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVy
LmltbWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcmJfaW0oaW50IGltbSwgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQ
MV9PUF9YT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0
ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKwogICAgIHZvaWQgeG9ybF9pcihpbnQgaW1tLCBS
ZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihp
bW0pKSB7CkBAIC05NzQsMTEgKzE1MDUsNDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
ICAgIAorICAgIHZvaWQgeG9ycV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9P
UF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4
KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCB4b3JxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9T
SUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFf
RXZJeiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKICAgICB2b2lkIHhvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hPUl9F
dkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCB4b3JxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hP
Ul9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIHhvcnFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YT1JfR3ZFdiwgZGVz
dCwgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcnFfbXIoaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hPUl9HdkV2
LCBkZXN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAg
ICB2b2lkIGx6Y250X3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKQEAgLTE1ODYs
MTEgKzIxNTMsMzggQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgeGNoZ2Jfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R2IsIHNyYywgYmFzZSwgb2Zmc2V0KTsK
KyAgICB9CisKKyAgICB2b2lkIHhjaGdiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R2IsIHNyYywgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgeGNoZ3dfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQg
eGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVn
aXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJl
Zml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1Bf
WENIR19Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAg
ICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBz
cmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCB4Y2hnbF9ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2
LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICNpZiBDUFUoWDg2
XzY0KQogICAgIHZvaWQgeGNoZ3FfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQog
ICAgIHsKQEAgLTE2MDYsNiArMjIwMCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CisKKyAgICB2b2lkIHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIG1vdmxfcnIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpAQCAtMTczMSw2ICsyMzMwLDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wOChPUF9NT1ZfRXZHdiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBtb3Z3X2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
LnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0dST1VQMTFfRXZJeiwgR1JPVVAxMV9NT1YsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1f
Zm9ybWF0dGVyLmltbWVkaWF0ZTE2KGltbSk7CisgICAgfQorCisgICAgdm9pZCBtb3Z3X2ltKGlu
dCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50
IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJ
WkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxMV9Fdkl6LCBHUk9V
UDExX01PViwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGUxNihpbW0pOworICAgIH0KKwogICAgIHZvaWQgbW92bF9FQVhtKGNvbnN0IHZv
aWQqIGFkZHIpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfTU9WX092
RUFYKTsKQEAgLTE4MDAsNiArMjQxMywxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVy
LmltbWVkaWF0ZTMyKGltbSk7CiAgICAgfQogCisgICAgdm9pZCBtb3ZxX2kzMm0oaW50IGltbSwg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDExX0V2SXos
IEdST1VQMTFfTU9WLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIG1fZm9y
bWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgfQorCiAgICAgdm9pZCBtb3ZxX2k2NHIoaW50
NjRfdCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfTU9WX0VBWEl2LCBkc3QpOwpAQCAtMjc3NSw2ICszMzk0LDkwIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9MT0NLKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBjbXB4Y2hnYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfQ01QWENI
R2IsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnYl9y
bShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklE
IGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4
KE9QMl9DTVBYQ0hHYiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY21weGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BF
UkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9DTVBYQ0hHLCBz
cmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY21weGNoZ3dfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNy
YywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNt
cHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFz
ZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnbF9ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcs
IHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGNtcHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Up
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfQ01QWENIRywgc3Jj
LCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9D
TVBYQ0hHLCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCB4YWRkYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfWEFERGIsIHNy
YywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkYl9ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBp
bnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KE9QMl9YQURE
Yiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgeGFkZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9YQURELCBzcmMsIGJhc2UsIG9mZnNldCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRsX3JtKFJlZ2lzdGVySUQgc3JjLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50
d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCB4YWRkbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci50d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2
NChPUDJfWEFERCwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhh
ZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5
dGVPcDY0KE9QMl9YQURELCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCBtZmVuY2UoKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIudGhy
ZWVCeXRlT3AoT1AyXzNCWVRFX0VTQ0FQRV9BRSwgT1AzX01GRU5DRSk7CkBAIC0zNzUxLDYgKzQ0
NTQsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHdyaXRlci5yZWdpc3Rlck1vZFJNKGdyb3Vw
T3AsIHJtKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgdHdvQnl0ZU9wOChUd29CeXRlT3Bj
b2RlSUQgb3Bjb2RlLCBpbnQgcmVnLCBSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFNpbmdsZUluc3RydWN0aW9uQnVmZmVyV3JpdGVyIHdyaXRlciht
X2J1ZmZlcik7CisgICAgICAgICAgICB3cml0ZXIuZW1pdFJleElmKGJ5dGVSZWdSZXF1aXJlc1Jl
eChyZWcsIGJhc2UpLCByZWcsIDAsIGJhc2UpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5dGVV
bmNoZWNrZWQoT1BfMkJZVEVfRVNDQVBFKTsKKyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRlVW5j
aGVja2VkKG9wY29kZSk7CisgICAgICAgICAgICB3cml0ZXIubWVtb3J5TW9kUk0ocmVnLCBiYXNl
LCBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB0d29CeXRlT3A4KFR3b0J5dGVP
cGNvZGVJRCBvcGNvZGUsIGludCByZWcsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlLCBpbnQgb2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBTaW5nbGVJ
bnN0cnVjdGlvbkJ1ZmZlcldyaXRlciB3cml0ZXIobV9idWZmZXIpOworICAgICAgICAgICAgd3Jp
dGVyLmVtaXRSZXhJZihieXRlUmVnUmVxdWlyZXNSZXgocmVnKSB8fCByZWdSZXF1aXJlc1JleChp
bmRleCwgYmFzZSksIHJlZywgaW5kZXgsIGJhc2UpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5
dGVVbmNoZWNrZWQoT1BfMkJZVEVfRVNDQVBFKTsKKyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRl
VW5jaGVja2VkKG9wY29kZSk7CisgICAgICAgICAgICB3cml0ZXIubWVtb3J5TW9kUk0ocmVnLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBJbW1l
ZGlhdGVzOgogICAgICAgICAvLwogICAgICAgICAvLyBBbiBpbW1lZGFpdGUgc2hvdWxkIGJlIGFw
cGVuZGVkIHdoZXJlIGFwcHJvcHJpYXRlIGFmdGVyIGFuIG9wIGhhcyBiZWVuIGVtaXR0ZWQuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQXRvbWlj
VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitBdG9taWNWYWx1ZTo6fkF0b21pY1ZhbHVlKCkKK3sKK30KKworV2lkdGggQXRv
bWljVmFsdWU6OmFjY2Vzc1dpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93aWR0aDsKK30K
Kwordm9pZCBBdG9taWNWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoY29tbWEsICJ3aWR0aCA9ICIsIG1f
d2lkdGgpOworICAgIAorICAgIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShjb21tYSwgb3V0KTsKK30K
KworVmFsdWUqIEF0b21pY1ZhbHVlOjpjbG9uZUltcGwoKSBjb25zdAoreworICAgIHJldHVybiBu
ZXcgQXRvbWljVmFsdWUoKnRoaXMpOworfQorCitBdG9taWNWYWx1ZTo6QXRvbWljVmFsdWUoS2lu
ZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBXaWR0aCB3aWR0aCwgVmFsdWUqIG9wZXJhbmQsIFZhbHVl
KiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCwgSGVhcFJhbmdlIHJhbmdlLCBIZWFwUmFuZ2UgZmVu
Y2VSYW5nZSkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIG9wZXJhbmQt
PnR5cGUoKSwgb3JpZ2luLCBvZmZzZXQsIHJhbmdlLCBmZW5jZVJhbmdlLCBvcGVyYW5kLCBwb2lu
dGVyKQorICAgICwgbV93aWR0aCh3aWR0aCkKK3sKKyAgICBBU1NFUlQoYmVzdFR5cGUoR1AsIG9w
ZXJhdGlvbldpZHRoKCkpID09IG9wZXJhdGlvblR5cGUoKSk7CisgICAgCisgICAgc3dpdGNoIChr
aW5kLm9wY29kZSgpKSB7CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWlj
WGNoZ0FuZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6
CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorfQorCitBdG9taWNWYWx1ZTo6QXRvbWljVmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2lu
LCBXaWR0aCB3aWR0aCwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBuZXdWYWx1ZSwgVmFs
dWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0LCBIZWFwUmFuZ2UgcmFuZ2UsIEhlYXBSYW5nZSBm
ZW5jZVJhbmdlKQorICAgIDogTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwga2luZC5v
cGNvZGUoKSA9PSBBdG9taWNXZWFrQ0FTID8gSW50MzIgOiBleHBlY3RlZFZhbHVlLT50eXBlKCks
IG9yaWdpbiwgb2Zmc2V0LCByYW5nZSwgZmVuY2VSYW5nZSwgZXhwZWN0ZWRWYWx1ZSwgbmV3VmFs
dWUsIHBvaW50ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIEFTU0VSVChiZXN0VHlw
ZShHUCwgb3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKworICAgIHN3aXRj
aCAoa2luZC5vcGNvZGUoKSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0
b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0F0b21pY1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQXRvbWljVmFsdWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNBdG9taWNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5j
bHVkZSAiQjNXaWR0aC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgSlNfRVhQT1JUX1BSSVZBVEUgQXRvbWljVmFsdWUgOiBwdWJsaWMgTWVtb3J5VmFsdWUgewor
cHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzQXRvbWljKGtpbmQub3Bjb2RlKCkpOworICAgIH0KKyAgICAKKyAgICB+QXRv
bWljVmFsdWUoKTsKKyAgICAKKyAgICBUeXBlIG9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJldHVy
biBjaGlsZCgwKS0+dHlwZSgpOyB9CisgICAgCisgICAgV2lkdGggb3BlcmF0aW9uV2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgCisgICAgLy8gU3lub255bSBmb3Igb3BlcmF0
aW9uV2lkdGgoKSwgaWYgeW91J3JlIGFjY2Vzc2luZyB2aWEgTWVtb3J5VmFsdWUuCisgICAgV2lk
dGggYWNjZXNzV2lkdGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgCisgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIEF0b21pY1ZhbHVl
KEtpbmQsIE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50
MzJfdCBvZmZzZXQgPSAwLCBIZWFwUmFuZ2UgcmFuZ2UgPSBIZWFwUmFuZ2U6OnRvcCgpLCBIZWFw
UmFuZ2UgZmVuY2VSYW5nZSA9IEhlYXBSYW5nZTo6dG9wKCkpOworICAgIAorICAgIEF0b21pY1Zh
bHVlKEtpbmQsIE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBleHBlY3RlZFZhbHVlLCBWYWx1ZSogbmV3
VmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDAsIEhlYXBSYW5nZSByYW5n
ZSA9IEhlYXBSYW5nZTo6dG9wKCksIEhlYXBSYW5nZSBmZW5jZVJhbmdlID0gSGVhcFJhbmdlOjp0
b3AoKSk7CisgICAgCisgICAgV2lkdGggbV93aWR0aDsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiAr
NDAsNyBAQCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIEluc2VydGlvblNldDsKIGNs
YXNzIFByb2NlZHVyZTsKIGNsYXNzIFZhbHVlOwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIEdl
bmVyaWNCbG9ja0luc2VydGlvblNldDsKIAogY2xhc3MgQmFzaWNCbG9jayB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CkBAIC0xNTgsNiArMTU5LDcgQEAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiAgICAgZnJpZW5kIGNsYXNzIElu
c2VydGlvblNldDsKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lPiBmcmllbmQgY2xhc3MgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0OwogICAgIAogICAg
IC8vIEluc3RhbnRpYXRlIHZpYSBQcm9jZWR1cmUuCiAgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBp
bmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzYsMzUgKzM2LDEzIEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogQmxv
Y2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KFByb2NlZHVyZSAmcHJvYykKLSAgICA6
IG1fcHJvYyhwcm9jKQorICAgIDogR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0KHByb2MubV9ibG9j
a3MpCisgICAgLCBtX3Byb2MocHJvYykKIHsKIH0KIAogQmxvY2tJbnNlcnRpb25TZXQ6On5CbG9j
a0luc2VydGlvblNldCgpIHsgfQogCi12b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoQmxv
Y2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCi17Ci0gICAgbV9pbnNlcnRpb25zLmFwcGVuZChXVEZN
b3ZlKGluc2VydGlvbikpOwotfQotCi1CYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5z
ZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQotewotICAgIHN0ZDo6dW5pcXVl
X3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhVSU5UX01BWCwgZnJlcXVlbmN5
KSk7Ci0gICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7Ci0gICAgaW5zZXJ0KEJs
b2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2NrKSkpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLUJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRCZWZvcmUoQmFzaWNC
bG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5KQotewotICAgIHJldHVybiBpbnNlcnQoYmVm
b3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYmVmb3Jl
LT5mcmVxdWVuY3koKSk7Ci19Ci0KLUJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNl
cnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSkKLXsKLSAgICByZXR1
cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZy
ZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7Ci19Ci0KIEJhc2ljQmxvY2sqIEJsb2NrSW5z
ZXJ0aW9uU2V0OjpzcGxpdEZvcndhcmQoCiAgICAgQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVk
JiB2YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqIGluc2VydGlvblNldCwgZG91YmxlIGZyZXF1ZW5j
eSkKIHsKQEAgLTEwMiwzMiArODAsNiBAQCBCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6
c3BsaXRGb3J3CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBCbG9ja0luc2VydGlvblNl
dDo6ZXhlY3V0ZSgpCi17Ci0gICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdp
dmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5lZWQgdG8gc29ydCB0aGVtIGJlZm9yZQot
ICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVy
IGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8gYmUKLSAgICAvLyBmYXN0LCBzbyB3ZSB1
c2UgYnViYmxlIHNvcnQuCi0gICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9p
bnNlcnRpb25zLmVuZCgpKTsKLQotICAgIGV4ZWN1dGVJbnNlcnRpb25zKG1fcHJvYy5tX2Jsb2Nr
cywgbV9pbnNlcnRpb25zKTsKLSAgICAKLSAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4g
VGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0J3MKLSAgICAvLyBoZWFsdGh5IHRv
IGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5nLgotICAgIG1fcHJvYy5tX2Jsb2Nrcy5y
ZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgWyZdIChzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9j
az4mIGJsb2NrUHRyKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7Ci0g
ICAgICAgIH0pOwotICAgIAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0
aGVpciBuZXcgaW5kaWNlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9jLm1f
YmxvY2tzLnNpemUoKTsgKytpKQotICAgICAgICBtX3Byb2MubV9ibG9ja3NbaV0tPm1faW5kZXgg
PSBpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAi
QjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgog
I2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0z
NSwyNiArMzYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIGNsYXNzIElu
c2VydGlvblNldDsKIAotdHlwZWRlZiBXVEY6Okluc2VydGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFz
aWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOwordHlwZWRlZiBHZW5lcmljQmxvY2tJbnNlcnRpb25T
ZXQ8QmFzaWNCbG9jaz46OkJsb2NrSW5zZXJ0aW9uIEJsb2NrSW5zZXJ0aW9uOwogCi1jbGFzcyBC
bG9ja0luc2VydGlvblNldCB7CitjbGFzcyBCbG9ja0luc2VydGlvblNldCA6IHB1YmxpYyBHZW5l
cmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz4gewogcHVibGljOgogICAgIEJsb2NrSW5z
ZXJ0aW9uU2V0KFByb2NlZHVyZSYpOwogICAgIH5CbG9ja0luc2VydGlvblNldCgpOwogICAgIAot
ICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYpOwotCi0gICAgLy8gSW5zZXJ0IGEgbmV3
IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCi0gICAgQmFzaWNCbG9jayogaW5zZXJ0KHVuc2lnbmVk
IGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7Ci0KLSAgICAvLyBJbnNlcnRzIGEgbmV3
IGJsb2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVzdWFsbHkgeW91IHdpbGwgbm90IHBhc3Mg
dGhlIGZyZXF1ZW5jeQotICAgIC8vIGFyZ3VtZW50LiBQYXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRv
IGp1c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdiZWZvcmUnIGJsb2NrLiBUaGF0J3MKLSAg
ICAvLyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCi0gICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3Jl
KEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOwotCi0gICAgLy8g
SW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2ZW4gYmxvY2suCi0gICAgQmFzaWNCbG9j
ayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFO
KTsKLQogICAgIC8vIEEgaGVscGVyIHRvIHNwbGl0IGEgYmxvY2sgd2hlbiBmb3J3YXJkIGl0ZXJh
dGluZyBvdmVyIGl0LiBJdCBjcmVhdGVzIGEgbmV3IGJsb2NrIHRvIGhvbGQKICAgICAvLyBldmVy
eXRoaW5nIGJlZm9yZSB0aGUgaW5zdHJ1Y3Rpb24gYXQgdmFsdWVJbmRleC4gVGhlIGN1cnJlbnQg
YmxvY2sgaXMgbGVmdCB3aXRoCiAgICAgLy8gZXZlcnl0aGluZyBhdCBhbmQgYWZ0ZXIgdmFsdWVJ
bmRleC4gSWYgdGhlIG9wdGlvbmFsIEluc2VydGlvblNldCBpcyBwcm92aWRlZCwgaXQgd2lsbCBn
ZXQKQEAgLTgwLDEyICs2OCw5IEBAIHB1YmxpYzoKICAgICBCYXNpY0Jsb2NrKiBzcGxpdEZvcndh
cmQoCiAgICAgICAgIEJhc2ljQmxvY2sqLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwgSW5zZXJ0aW9u
U2V0KiA9IG51bGxwdHIsCiAgICAgICAgIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLSAgICAK
LSAgICBib29sIGV4ZWN1dGUoKTsKIAogcHJpdmF0ZToKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsK
LSAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKIH07CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZm
ZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0
cy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vm
ZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw4IEBAIGJvb2wgRWZmZWN0czo6
aW50ZXJmZXJlcyhjb25zdCBFZmZlY3RzJiAKICAgICAgICAgfHwgaW50ZXJmZXJlc1dpdGhXcml0
ZXNQaW5uZWQob3RoZXIsICp0aGlzKQogICAgICAgICB8fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIu
d3JpdGVzKQogICAgICAgICB8fCB3cml0ZXMub3ZlcmxhcHMob3RoZXIucmVhZHMpCi0gICAgICAg
IHx8IHJlYWRzLm92ZXJsYXBzKG90aGVyLndyaXRlcyk7CisgICAgICAgIHx8IHJlYWRzLm92ZXJs
YXBzKG90aGVyLndyaXRlcykKKyAgICAgICAgfHwgKGZlbmNlICYmIG90aGVyLmZlbmNlKTsKIH0K
IAogYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0IEVmZmVjdHMmIG90aGVyKSBjb25zdApA
QCAtOTUsNyArOTYsOCBAQCBib29sIEVmZmVjdHM6Om9wZXJhdG9yPT0oY29uc3QgRWZmZWN0cyYg
CiAgICAgICAgICYmIHdyaXRlc1Bpbm5lZCA9PSBvdGhlci53cml0ZXNQaW5uZWQKICAgICAgICAg
JiYgcmVhZHNQaW5uZWQgPT0gb3RoZXIucmVhZHNQaW5uZWQKICAgICAgICAgJiYgd3JpdGVzID09
IG90aGVyLndyaXRlcwotICAgICAgICAmJiByZWFkcyA9PSBvdGhlci5yZWFkczsKKyAgICAgICAg
JiYgcmVhZHMgPT0gb3RoZXIucmVhZHMKKyAgICAgICAgJiYgZmVuY2UgPT0gb3RoZXIuZmVuY2U7
CiB9CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3IhPShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29u
c3QKQEAgLTEyMCw2ICsxMjIsOCBAQCB2b2lkIEVmZmVjdHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlc1Bpbm5lZCIpOwogICAgIGlm
IChyZWFkc1Bpbm5lZCkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiUmVhZHNQaW5uZWQiKTsK
KyAgICBpZiAoZmVuY2UpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIkZlbmNlIik7CiAgICAg
aWYgKHdyaXRlcykKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiV3JpdGVzOiIsIHdyaXRlcyk7
CiAgICAgaWYgKHJlYWRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBAQCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzE3MwogICAgIGJv
b2wgcmVhZHNQaW5uZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgd3JpdGVzUGlubmVkIHsgZmFsc2Ug
fTsKKyAgICAKKyAgICAvLyBNZW1vcnkgZmVuY2VzIGNhbm5vdCBiZSByZW9yZGVyZWQgYXJvdW5k
IGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVpciBlZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQK
KyAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEgbWVtb3J5IGZlbmNlLgorICAgIGJvb2wgZmVu
Y2UgeyBmYWxzZSB9OwogCiAgICAgSGVhcFJhbmdlIHdyaXRlczsKICAgICBIZWFwUmFuZ2UgcmVh
ZHM7CkBAIC04OSw2ICs5Myw3IEBAIHN0cnVjdCBFZmZlY3RzIHsKICAgICAgICAgcmVzdWx0LnJl
YWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKICAgICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1
ZTsKICAgICAgICAgcmVzdWx0LndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIHJlc3VsdC5m
ZW5jZSA9IHRydWU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0xMDMsNyAr
MTA4LDcgQEAgc3RydWN0IEVmZmVjdHMgewogCiAgICAgYm9vbCBtdXN0RXhlY3V0ZSgpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gdGVybWluYWwgfHwgZXhpdHNTaWRld2F5cyB8fCB3cml0
ZXNMb2NhbFN0YXRlIHx8IHdyaXRlcyB8fCB3cml0ZXNQaW5uZWQ7CisgICAgICAgIHJldHVybiB0
ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRlc0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8
IHdyaXRlc1Bpbm5lZCB8fCBmZW5jZTsKICAgICB9CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
cmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0aGVzZSByZXNwZWN0aXZlIGVmZmVjdHMgd291
bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1p
bmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9u
IDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1
YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDIsNiArMTQyLDcgQEAgc3RydWN0IElt
cHVyZUJsb2NrRGF0YSB7CiAKICAgICBSYW5nZVNldDxIZWFwUmFuZ2U+IHJlYWRzOyAvLyBUaGlz
IG9ubHkgZ2V0cyB1c2VkIGZvciBmb3J3YXJkIHN0b3JlIGVsaW1pbmF0aW9uLgogICAgIFJhbmdl
U2V0PEhlYXBSYW5nZT4gd3JpdGVzOyAvLyBUaGlzIGdldHMgdXNlZCBmb3IgYm90aCBsb2FkIGFu
ZCBzdG9yZSBlbGltaW5hdGlvbi4KKyAgICBib29sIGZlbmNlOwogCiAgICAgTWVtb3J5VmFsdWVN
YXAgc3RvcmVzQXRIZWFkOwogICAgIE1lbW9yeVZhbHVlTWFwIG1lbW9yeVZhbHVlc0F0VGFpbDsK
QEAgLTE3NCwxMiArMTc1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAobWVtb3J5ICYmIG1lbW9yeS0+aXNTdG9yZSgpCiAgICAgICAgICAgICAgICAg
ICAgICYmICFkYXRhLnJlYWRzLm92ZXJsYXBzKG1lbW9yeS0+cmFuZ2UoKSkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgIWRhdGEud3JpdGVzLm92ZXJsYXBzKG1lbW9yeS0+cmFuZ2UoKSkpCisgICAg
ICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRlcy5vdmVybGFwcyhtZW1vcnktPnJhbmdlKCkp
CisgICAgICAgICAgICAgICAgICAgICYmICghZGF0YS5mZW5jZSB8fCAhbWVtb3J5LT5oYXNGZW5j
ZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YS5zdG9yZXNBdEhlYWQuYWRkKG1lbW9yeSk7
CiAgICAgICAgICAgICAgICAgZGF0YS5yZWFkcy5hZGQoZWZmZWN0cy5yZWFkcyk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9IGVmZmVjdHMud3JpdGVzKQogICAgICAg
ICAgICAgICAgICAgICBjbG9iYmVyKGRhdGEsIHdyaXRlcyk7CisgICAgICAgICAgICAgICAgZGF0
YS5mZW5jZSB8PSBlZmZlY3RzLmZlbmNlOwogCiAgICAgICAgICAgICAgICAgaWYgKG1lbW9yeSkK
ICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuYWRkKG1lbW9yeSk7
CkBAIC00NDUsOCArNDQ4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBkYXRhTG9nKCJCYWQgbWVtb3J5IHZhbHVlOiAiLCBkZWVwRHVtcCht
X3Byb2MsIG1fdmFsdWUpLCAiXG4iKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTQ3OCw2
ICs0NzksOSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlcj4KICAgICBi
b29sIGZpbmRTdG9yZUFmdGVyQ2xvYmJlcihWYWx1ZSogcHRyLCBIZWFwUmFuZ2UgcmFuZ2UsIGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpLT5oYXNGZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKICAgICAgICAgLy8gV2UgY2FuIGVsaW1pbmF0ZSBhIHN0b3JlIGlmIGV2ZXJ5IGZvcndhcmQg
cGF0aCBoaXRzIGEgc3RvcmUgdG8gdGhlIHNhbWUgbG9jYXRpb24gYmVmb3JlCiAgICAgICAgIC8v
IGhpdHRpbmcgYW55IG9wZXJhdGlvbiB0aGF0IG9ic2VydmVzIHRoZSBzdG9yZS4gVGhpcyBzZWFy
Y2ggc2VlbXMgbGlrZSBpdCBzaG91bGQgYmUKICAgICAgICAgLy8gZXhwZW5zaXZlLCBidXQgaW4g
dGhlIG92ZXJ3aGVsbWluZyBtYWpvcml0eSBvZiBjYXNlcyBpdCB3aWxsIGFsbW9zdCBpbW1lZGlh
dGVseSBoaXQgYW4gCkBAIC02MTQsNiArNjE4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygqbV92YWx1ZSwgIjogbG9va2luZyBiYWNrd2Fy
ZCBmb3IgIiwgKnB0ciwgIi4uLlxuIik7CiAgICAgICAgIAorICAgICAgICBpZiAobV92YWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBHaXZpbmcgdXAgYmVjYXVzZSBmZW5jZXMu
XG4iKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCiAgICAg
ICAgIGlmIChNZW1vcnlWYWx1ZSogbWF0Y2ggPSBtX2RhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmZp
bmQocHRyLCBmaWx0ZXIpKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgRm91bmQgIiwgKm1hdGNoLCAiIGxvY2FsbHkuXG4iKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTIsNiArOTIsNyBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1
cmUsCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA1MDcKICAgICB9CiAKKyAgICAvLyBUaGlzIHB1dHMgdGhlIElSIGluIHF1aXJrcyBtb2RlLgog
ICAgIGxvd2VyTWFjcm9zKHByb2NlZHVyZSk7CiAKICAgICBpZiAob3B0TGV2ZWwgPj0gMSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiUHVyZU5hTi5oIgor
I2luY2x1ZGUgPHd0Zi9CdWJibGVTb3J0Lmg+CisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIEluc2VydGlvblNldDsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4K
K2NsYXNzIEdlbmVyaWNCbG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBX
VEY6Okluc2VydGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9u
OworICAgIAorICAgIEdlbmVyaWNCbG9ja0luc2VydGlvblNldChWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEJhc2ljQmxvY2s+PiYgYmxvY2tzKQorICAgICAgICA6IG1fYmxvY2tzKGJsb2NrcykKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYgaW5zZXJ0
aW9uKQorICAgIHsKKyAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChXVEZNb3ZlKGluc2VydGlv
bikpOworICAgIH0KKworICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBhIGdpdmVuIGluZGV4
LgorICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5j
eSA9IFBOYU4pCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxv
Y2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIGZyZXF1ZW5jeSkpOworICAgICAgICBCYXNpY0Js
b2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICAgICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9u
KGluZGV4LCBXVEZNb3ZlKGJsb2NrKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYmVmb3JlIHRoZSBnaXZlbiBibG9jay4gVXN1
YWxseSB5b3Ugd2lsbCBub3QgcGFzcyB0aGUgZnJlcXVlbmN5CisgICAgLy8gYXJndW1lbnQuIFBh
c3NpbmcgUE5hTiBjYXVzZXMgdXMgdG8ganVzdCB1c2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgJ2Jl
Zm9yZScgYmxvY2suIFRoYXQncworICAgIC8vIHVzdWFsbHkgd2hhdCB5b3Ugd2FudC4KKyAgICBC
YXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVl
bmN5ID0gUE5hTikKKyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCgp
LCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVuY3ko
KSk7CisgICAgfQorCisgICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2ZW4g
YmxvY2suCisgICAgQmFzaWNCbG9jayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIsIGRv
dWJsZSBmcmVxdWVuY3kgPSBQTmFOKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluc2VydChhZnRl
ci0+aW5kZXgoKSArIDEsIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBhZnRl
ci0+ZnJlcXVlbmN5KCkpOworICAgIH0KKworICAgIGJvb2wgZXhlY3V0ZSgpCisgICAgeworICAg
ICAgICBpZiAobV9pbnNlcnRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGFsbG93IGluc2VydGlvbnMgdG8gYmUgZ2l2ZW4g
dG8gdXMgaW4gYW55IG9yZGVyLiBTbywgd2UgbmVlZCB0byBzb3J0IHRoZW0gYmVmb3JlCisgICAg
ICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVy
IGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8gYmUKKyAgICAgICAgLy8gZmFzdCwgc28g
d2UgdXNlIGJ1YmJsZSBzb3J0LgorICAgICAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdp
bigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworICAgICAgICAKKyAgICAgICAgZXhlY3V0ZUluc2Vy
dGlvbnMobV9ibG9ja3MsIG1faW5zZXJ0aW9ucyk7CisgICAgICAgIAorICAgICAgICAvLyBQcnVu
ZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0
J3MKKyAgICAgICAgLy8gaGVhbHRoeSB0byBrZWVwIHRoZSBibG9jayBsaXN0IGZyb20gZ3Jvd2lu
Zy4KKyAgICAgICAgbV9ibG9ja3MucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBbJl0g
KHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiYgYmxvY2tQdHIpIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNl
cy4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgbV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QmFzaWNCbG9jaz4+JiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24s
IDg+IG1faW5zZXJ0aW9uczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hl
YXBSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBS
YW5nZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNI
ZWFwUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsMTMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgfQogICAgIAorICAgIEhlYXBSYW5n
ZSBvcGVyYXRvcnwoY29uc3QgSGVhcFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBIZWFwUmFuZ2UoCisgICAgICAgICAgICBzdGQ6Om1pbihtX2JlZ2luLCBvdGhlci5t
X2JlZ2luKSwKKyAgICAgICAgICAgIHN0ZDo6bWF4KG1fZW5kLCBvdGhlci5tX2VuZCkpOworICAg
IH0KKyAgICAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9i
ZWdpbiAhPSBtX2VuZDsgfQogCiAgICAgdW5zaWduZWQgYmVnaW4oKSBjb25zdCB7IHJldHVybiBt
X2JlZ2luOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNl
dC5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0lu
c2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw2ICs1OCwxMSBAQCBWYWx1ZSog
SW5zZXJ0aW9uU2V0OjppbnNlcnRCb3R0b20oc2l6ZV90CiAgICAgcmV0dXJuIGluc2VydEJvdHRv
bShpbmRleCwgbGlrZVZhbHVlLT5vcmlnaW4oKSwgbGlrZVZhbHVlLT50eXBlKCkpOwogfQogCitW
YWx1ZSogSW5zZXJ0aW9uU2V0OjppbnNlcnRDbG9uZShzaXplX3QgaW5kZXgsIFZhbHVlKiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gaW5zZXJ0VmFsdWUoaW5kZXgsIG1fcHJvY2VkdXJlLmNsb25lKHZh
bHVlKSk7Cit9CisKIHZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2Nr
KQogewogICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5l
bmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9u
U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDggQEAgcHVibGljOgogCiAgICAgVmFs
dWUqIGluc2VydEJvdHRvbShzaXplX3QgaW5kZXgsIE9yaWdpbiwgVHlwZSk7CiAgICAgVmFsdWUq
IGluc2VydEJvdHRvbShzaXplX3QgaW5kZXgsIFZhbHVlKik7CisgICAgCisgICAgVmFsdWUqIGlu
c2VydENsb25lKHNpemVfdCBpbmRleCwgVmFsdWUqKTsKIAogICAgIHZvaWQgZXhlY3V0ZShCYXNp
Y0Jsb2NrKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jv
cy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyTWFjcm9zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDExICsyOSwxMyBAQAogI2lmIEVO
QUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Uu
aCIKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkIzQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJCM0ND
YWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0Nhc2VDb2xsZWN0aW9uSW5saW5lcy5oIgogI2luY2x1
ZGUgIkIzQ29uc3RQdHJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1
ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIK
ICNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgpAQCAtNDIsNiArNDQsNyBAQAogI2luY2x1
ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCiAjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1
ZS5oIgogI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCisjaW5jbHVkZSAiQjNVc2VDb3VudHMu
aCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5o
IgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTU4LDExICs2MSwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9wcm9jKHByb2MpCiAgICAgICAgICwgbV9ibG9ja0luc2VydGlvblNldChwcm9j
KQogICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KHByb2MpCisgICAgICAgICwgbV91c2VDb3VudHMo
cHJvYykKICAgICB7CiAgICAgfQogCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fcHJvYy5oYXNRdWlya3MoKSk7CisgICAgICAgIAogICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gYmxv
Y2s7CiAgICAgICAgICAgICBwcm9jZXNzQ3VycmVudEJsb2NrKCk7CkBAIC03Miw2ICs3OCwxMCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBtX3Byb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKICAgICAg
ICAgICAgIG1fcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIFRoaXMgaW5kaWNhdGVzIHRoYXQgd2UndmUgCisgICAgICAgIG1fcHJvYy5zZXRIYXNR
dWlya3ModHJ1ZSk7CisgICAgICAgIAogICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0K
ICAgICAKQEAgLTE4NSw3ICsxOTUsMTE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbG9hZC1s
b2FkIGZlbmNlLiBUaGlzIGNvZGVnZW5zIHRvIG5vdGhpbmcgb24gWDg2LiBXZSB1c2UgaXQgdG8g
dGVsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcGlsZXIgbm90IHRvIGJsb2NrIGxv
YWQgbW90aW9uLgorICAgICAgICAgICAgICAgICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxGZW5jZVZhbHVlPihtX2luZGV4LCBtX29yaWdpbik7CisgICAgICAg
ICAgICAgICAgICAgIGZlbmNlLT5yZWFkID0gSGVhcFJhbmdlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGZlbmNlLT53cml0ZSA9IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAvLyBLaWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNob3VsZCB1
bmxvY2sgYSBidW5jaCBvZiBjb2RlIHNpbXBsaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5yZXBsYWNlV2l0aEJvdHRvbShtX2luc2VydGlvblNldCwgbV9pbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgY2FzZSBB
dG9taWNTdHJvbmdDQVM6IHsKKyAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQXRv
bWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAg
ICAgICAgIFdpZHRoIHdpZHRoID0gYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc0Nhbm9uaWNhbFdpZHRoKHdpZHRoKSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgVmFsdWUqIGV4cGVjdGVkVmFsdWUgPSBhdG9taWMtPmNoaWxkKDApOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vIE9uIEFSTSwgdGhlIGxvYWQgcGFydCBvZiB0aGUgQ0FT
IGRvZXMgYSBsb2FkIHdpdGggemVybyBleHRlbnNpb24uIFRoZXJlZm9yZSwgd2UgbmVlZAorICAg
ICAgICAgICAgICAgIC8vIHRvIHplcm8tZXh0ZW5kIHRoZSBpbnB1dC4KKyAgICAgICAgICAgICAg
ICBWYWx1ZSogbWFza2VkRXhwZWN0ZWRWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1
ZT4oCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEJpdEFuZCwgbV9vcmlnaW4sIGV4cGVj
dGVkVmFsdWUsCisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENv
bnN0YW50KG1faW5kZXgsIGV4cGVjdGVkVmFsdWUsIG1hc2sod2lkdGgpKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgYXRvbWljLT5jaGlsZCgwKSA9IG1hc2tlZEV4cGVjdGVk
VmFsdWU7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgQXRvbWljWGNoZ0FkZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAg
ICAgICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnU3Vi
OgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICAgICAgY2FzZSBBdG9t
aWNYY2hnOiB7CisgICAgICAgICAgICAgICAgLy8gT24gWDg2LCB0aGVzZSBtYXkgYWN0dWFsbHkg
cmV0dXJuIGdhcmJhZ2UgaW4gdGhlIGhpZ2ggYml0cy4gT24gQVJNNjQsIHRoZXNlIHNvcnRhCisg
ICAgICAgICAgICAgICAgLy8gemVyby1leHRlbmQgdGhlaXIgaGlnaCBiaXRzLCBleGNlcHQgdGhh
dCB0aGUgaGlnaCBiaXRzIG1pZ2h0IGdldCBwb2xsdXRlZCBieSBoaWdoCisgICAgICAgICAgICAg
ICAgLy8gYml0cyBpbiB0aGUgb3BlcmFuZC4gLiBTbywgZWl0aGVyIHdheSwgd2UgbmVlZCB0byB0
aHJvdyBhIHNpZ24tZXh0ZW5kIG9uIHRoZXNlCisgICAgICAgICAgICAgICAgLy8gdGhpbmdzLgor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5vcGNvZGUoKSA9PSBBdG9taWNYY2hnU3ViICYmIG1f
dXNlQ291bnRzLm51bVVzZXMobV92YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE9uIHg4NiwgeGNoZ2FkZCBpcyBiZXR0ZXIgdGhhbiB4Y2hnc3ViIGlmIGl0IGhhcyBhbnkgdXNl
cnMuCisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5zZXRPcGNvZGVVbnNhZmVseShB
dG9taWNYY2hnQWRkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEp
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4LCBOZWcsIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGJvb2wgZXhlbXB0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1
ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnQW5kOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1hj
aGdYb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBleGVtcHQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAoZXhlbXB0KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEF0
b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAg
ICAgICAgICBXaWR0aCB3aWR0aCA9IGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNDYW5vbmljYWxXaWR0aCh3aWR0aCkpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIFZhbHVlKiBuZXdWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXgsIHNpZ25FeHRlbmRPcGNvZGUod2lkdGgpLCBtX29yaWdp
biwKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q2xvbmUobV9pbmRl
eCwgYXRvbWljKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV92YWx1ZS0+
cmVwbGFjZVdpdGhJZGVudGl0eShuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2Fk
MTZaOiB7CisgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgICAgICAgICBpZiAo
IW1lbW9yeS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gU3ViLXdpZHRoIGxvYWQtYWNxIG9uIEFSTTY0
IGFsd2F5cyBzaWduIGV4dGVuZHMuCisgICAgICAgICAgICAgICAgVmFsdWUqIG5ld0xvYWQgPSBt
X2luc2VydGlvblNldC5pbnNlcnRDbG9uZShtX2luZGV4LCBtZW1vcnkpOworICAgICAgICAgICAg
ICAgIG5ld0xvYWQtPnNldE9wY29kZVVuc2FmZWx5KG1lbW9yeS0+b3Bjb2RlKCkgPT0gTG9hZDha
ID8gTG9hZDhTIDogTG9hZDE2Uyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
VmFsdWUqIG5ld1ZhbHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleCwgQml0QW5kLCBtX29yaWdpbiwgbmV3TG9hZCwKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0SW50Q29uc3RhbnQoCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luZGV4LCBtX29yaWdpbiwgSW50MzIsIG1hc2sobWVtb3J5LT5sb2Fk
U3RvcmVXaWR0aCgpKSkpOwogCisgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJ
ZGVudGl0eShuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CkBAIC00NzAsNiArNTkyLDcgQEAgcHJpdmF0ZToKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKICAg
ICBCbG9ja0luc2VydGlvblNldCBtX2Jsb2NrSW5zZXJ0aW9uU2V0OwogICAgIEluc2VydGlvblNl
dCBtX2luc2VydGlvblNldDsKKyAgICBVc2VDb3VudHMgbV91c2VDb3VudHM7CiAgICAgQmFzaWNC
bG9jayogbV9ibG9jazsKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVl
OwpAQCAtNDc3LDIxICs2MDAsMTIgQEAgcHJpdmF0ZToKICAgICBib29sIG1fY2hhbmdlZCB7IGZh
bHNlIH07CiB9OwogCi1ib29sIGxvd2VyTWFjcm9zSW1wbChQcm9jZWR1cmUmIHByb2MpCi17Ci0g
ICAgTG93ZXJNYWNyb3MgbG93ZXJNYWNyb3MocHJvYyk7Ci0gICAgcmV0dXJuIGxvd2VyTWFjcm9z
LnJ1bigpOwotfQotCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAogYm9vbCBsb3dlck1hY3Jv
cyhQcm9jZWR1cmUmIHByb2MpCiB7Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJs
b3dlck1hY3JvcyIpOwotICAgIGJvb2wgcmVzdWx0ID0gbG93ZXJNYWNyb3NJbXBsKHByb2MpOwot
ICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFsb3dl
ck1hY3Jvc0ltcGwocHJvYykpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgTG93ZXJNYWNyb3Mg
bG93ZXJNYWNyb3MocHJvYyk7CisgICAgcmV0dXJuIGxvd2VyTWFjcm9zLnJ1bigpOwogfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9z
QWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDE1ICsxNTYsMTQg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUm90TDogewogICAgICAgICAgICAgICAgIC8v
IEFSTTY0IGRvZXNuJ3QgaGF2ZSBhIHJvdGF0ZSBsZWZ0LgogICAgICAgICAgICAgICAgIGlmIChp
c0FSTTY0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld1NoaWZ0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
PFZhbHVlPihtX2luZGV4LCBOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgx
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogcm90YXRlID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBSb3RSLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1
ZS0+Y2hpbGQoMCksIG5ld1NoaWZ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUt
PnJlcGxhY2VXaXRoSWRlbnRpdHkocm90YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBu
ZXdTaGlmdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgTmVnLCBtX3Zh
bHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICBW
YWx1ZSogcm90YXRlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBSb3RS
LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG5ld1NoaWZ0KTsKKyAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyb3RhdGUpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIxMjk5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwxMiArMjgsMTQgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRl
ICJBaXJCbG9ja0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgog
I2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKICNpbmNs
dWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgogI2luY2x1
ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQXRvbWljVmFsdWUuaCIKICNp
bmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0
LmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCkBAIC03Miw2ICs3NCwxNiBAQCBuYW1lc3Bh
Y2UgewogCiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAorLy8gRklYTUU6IFdlIHdvdWxk
bid0IG5lZWQgdGhpcyBpZiBBaXIgc3VwcG9ydGVkIFdpZHRoIG1vZGlmaWVycyBpbiBBaXI6Oktp
bmQuCisvLyBPT1BTISEhIChuZWVkIGEgYnVnIFVSTCkKKyNkZWZpbmUgT1BDT0RFX0ZPUl9XSURU
SChvcGNvZGUsIHdpZHRoKSAoIFwKKyAgICAod2lkdGgpID09IFdpZHRoOCA/IG9wY29kZSAjIyA4
IDogXAorICAgICh3aWR0aCkgPT0gV2lkdGgxNiA/IG9wY29kZSAjIyAxNiA6IFwKKyAgICAod2lk
dGgpID09IFdpZHRoMzIgPyBvcGNvZGUgIyMgMzIgOiBcCisgICAgb3Bjb2RlICMjIDY0KQorI2Rl
ZmluZSBPUENPREVfRk9SX0NBTk9OSUNBTF9XSURUSChvcGNvZGUsIHdpZHRoKSAoIFwKKyAgICAo
d2lkdGgpID09IFdpZHRoNjQgPyBvcGNvZGUgIyMgNjQgOiBvcGNvZGUgIyMgMzIpCisKIGNsYXNz
IExvd2VyVG9BaXIgewogcHVibGljOgogICAgIExvd2VyVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1
cmUpCkBAIC04Myw2ICs5NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kb21pbmF0b3JzKHBy
b2NlZHVyZS5kb21pbmF0b3JzKCkpCiAgICAgICAgICwgbV9wcm9jZWR1cmUocHJvY2VkdXJlKQog
ICAgICAgICAsIG1fY29kZShwcm9jZWR1cmUuY29kZSgpKQorICAgICAgICAsIG1fYmxvY2tJbnNl
cnRpb25TZXQobV9jb2RlKQorI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgICAgICwg
bV9lYXgoWDg2UmVnaXN0ZXJzOjplYXgpCisgICAgICAgICwgbV9lY3goWDg2UmVnaXN0ZXJzOjpl
Y3gpCisgICAgICAgICwgbV9lZHgoWDg2UmVnaXN0ZXJzOjplZHgpCisjZW5kaWYKICAgICB7CiAg
ICAgfQogCkBAIC0xMjQsMTQgKzE0MiwxOCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGhvaXN0ZWQg
YWRkcmVzcyBleHByZXNzaW9uIGJlZm9yZSB3ZSBkdXBsaWNhdGUgaXQgYmFjayBpbnRvIHRoZSBs
b29wLgogICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvY2VkdXJlLmJs
b2Nrc0luUHJlT3JkZXIoKSkgewogICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwotICAgICAg
ICAgICAgLy8gUmVzZXQgc29tZSBzdGF0ZS4KLSAgICAgICAgICAgIG1faW5zdHMucmVzaXplKDAp
OwogCiAgICAgICAgICAgICBtX2lzUmFyZSA9ICFtX2Zhc3RXb3JrbGlzdC5zYXcoYmxvY2spOwog
CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMb3dl
cmluZyBCbG9jayAiLCAqYmxvY2ssICI6XG4iKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1cCBjb3JyZWN0bHkuCisg
ICAgICAgICAgICBmb3IgKEIzOjpGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yIDogYmxvY2stPnN1
Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3Vj
Y2Vzc29ycygpLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgQWlyOjpGcmVxdWVudGVkQmxv
Y2sobV9ibG9ja1RvQmxvY2tbc3VjY2Vzc29yLmJsb2NrKCldLCBzdWNjZXNzb3IuZnJlcXVlbmN5
KCkpKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gUHJvY2VzcyBibG9ja3MgaW4g
cmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4gVGhhdCdzIHdoYXQgYWxs
b3dzIHVzCiAgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBlZmZlY3RpdmVseS4KICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsKQEAgLTE0
OSwxOSArMTcxLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGluc3RydWN0aW9ucy4gbV9pbnN0cyBj
b250YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIsIHNvIHdlIHByb2Nlc3MKLSAgICAgICAgICAg
IC8vIGl0IGluIHJldmVyc2UuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luc3Rz
LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IG1faW5z
dHNbaV0pCi0gICAgICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+YXBwZW5k
SW5zdChXVEZNb3ZlKGluc3QpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgdGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1cCBjb3JyZWN0bHkuCi0gICAgICAg
ICAgICBmb3IgKEIzOjpGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3Nv
cnMoKSkgewotICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vzc29y
cygpLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgQWlyOjpGcmVxdWVudGVkQmxvY2sobV9i
bG9ja1RvQmxvY2tbc3VjY2Vzc29yLmJsb2NrKCldLCBzdWNjZXNzb3IuZnJlcXVlbmN5KCkpKTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmlzaEFwcGVuZGluZ0luc3RydWN0aW9ucyht
X2Jsb2NrVG9CbG9ja1tibG9ja10pOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2Js
b2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKIAogICAgICAgICBBaXI6Okluc2VydGlvblNldCBp
bnNlcnRpb25TZXQobV9jb2RlKTsKICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9wcm9sb2d1
ZSkKQEAgLTU2MiwxMSArNTc1LDE5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQXJnUHJvbWlzZSBs
b2FkUHJvbWlzZUFueU9wY29kZShWYWx1ZSogbG9hZFZhbHVlKQogICAgIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQobG9hZFZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSk7CiAgICAgICAgIGlmICgh
Y2FuQmVJbnRlcm5hbChsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwogICAg
ICAgICBpZiAoY3Jvc3Nlc0ludGVyZmVyZW5jZShsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0
dXJuIEFyZygpOwotICAgICAgICBBcmdQcm9taXNlIHJlc3VsdChhZGRyKGxvYWRWYWx1ZSksIGxv
YWRWYWx1ZSk7CisgICAgICAgIC8vIE9uIHg4NiwgYWxsIGxvYWRzIGhhdmUgZmVuY2VzLiBEb2lu
ZyB0aGlzIGtpbmQgb2YgaW5zdHJ1Y3Rpb24gc2VsZWN0aW9uIHdpbGwgbW92ZSB0aGUgbG9hZCwK
KyAgICAgICAgLy8gYnV0IHRoYXQncyBmaW5lIGJlY2F1c2Ugb3VyIGludGVyZmVyZW5jZSBhbmFs
eXNpcyBzdG9wcyB0aGUgbW90aW9uIG9mIGZlbmNlcyBhcm91bmQgb3RoZXIKKyAgICAgICAgLy8g
ZmVuY2VzLiBTbywgYW55IGxvYWQgbW90aW9uIHdlIGludHJvZHVjZSBoZXJlIHdvdWxkIG5vdCBi
ZSBvYnNlcnZhYmxlLgorICAgICAgICBpZiAoIWlzWDg2KCkgJiYgbG9hZFZhbHVlLT5hczxNZW1v
cnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAg
ICAgQXJnIGxvYWRBZGRyID0gYWRkcihsb2FkVmFsdWUpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChsb2FkQWRkcik7CisgICAgICAgIEFyZ1Byb21pc2UgcmVzdWx0KGxvYWRBZGRyLCBsb2FkVmFs
dWUpOwogICAgICAgICBpZiAobG9hZFZhbHVlLT50cmFwcygpKQogICAgICAgICAgICAgcmVzdWx0
LnNldFRyYXBzKHRydWUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODk4LDExICs5MTks
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSNpZiBDUFUo
WDg2KSB8fCBDUFUoWDg2XzY0KQogICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKHZhbHVlKSwgdG1w
KG1fdmFsdWUpKTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChhbW91bnQpLCBUbXAoWDg2UmVn
aXN0ZXJzOjplY3gpKTsKLSAgICAgICAgYXBwZW5kKG9wY29kZSwgVG1wKFg4NlJlZ2lzdGVyczo6
ZWN4KSwgdG1wKG1fdmFsdWUpKTsKLSNlbmRpZgorICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGFt
b3VudCksIG1fZWN4KTsKKyAgICAgICAgYXBwZW5kKG9wY29kZSwgbV9lY3gsIHRtcChtX3ZhbHVl
KSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlMzIsIEFpcjo6T3Bj
b2RlIG9wY29kZTY0PgpAQCAtOTMxLDEwICs5NTAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgQWly
OjpPcGNvZGUgb3Bjb2RlMzIsIEFpcjo6T3Bjb2RlIG9wY29kZTY0LCBDb21tdXRhdGl2aXR5IGNv
bW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KICAgICBib29sIHRyeUFwcGVuZFN0b3JlQmlu
T3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKICAgICB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpKTsKKyAgICAgICAgCiAgICAgICAgIEFpcjo6
T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUob3Bjb2RlMzIsIG9wY29kZTY0LCBsZWZ0
LT50eXBlKCkpOwogICAgICAgICBpZiAob3Bjb2RlID09IEFpcjo6T29wcykKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgCisgICAgICAgIC8vIE9uIHg4NiwgYWxsIHN0b3JlcyBo
YXZlIGZlbmNlcywgYW5kIHRoaXMgaXNuJ3QgcmVvcmRlcmluZyB0aGUgc3RvcmUgaXRzZWxmLgor
ICAgICAgICBpZiAoIWlzWDg2KCkgJiYgbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0Zl
bmNlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAogICAgICAgICBBcmcg
c3RvcmVBZGRyID0gYWRkcihtX3ZhbHVlKTsKICAgICAgICAgQVNTRVJUKHN0b3JlQWRkcik7CiAK
QEAgLTk5NCwxMSArMTAxOSw1MCBAQCBwcml2YXRlOgogCiAgICAgICAgIHJldHVybiBJbnN0KG1v
dmUsIG1fdmFsdWUsIHRtcCh2YWx1ZSksIGRlc3QpOwogICAgIH0KKyAgICAKKyAgICBBaXI6Ok9w
Y29kZSBzdG9yZU9wY29kZShXaWR0aCB3aWR0aCwgQmFuayBiYW5rLCBib29sIHJlbGVhc2UpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFuayA9PSBHUCk7CisgICAgICAgICAgICByZXR1cm4g
cmVsZWFzZSA/IFN0b3JlUmVsOCA6IEFpcjo6U3RvcmU4OworICAgICAgICBjYXNlIFdpZHRoMTY6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChiYW5rID09IEdQKTsKKyAgICAgICAgICAgIHJl
dHVybiByZWxlYXNlID8gU3RvcmVSZWwxNiA6IEFpcjo6U3RvcmUxNjsKKyAgICAgICAgY2FzZSBX
aWR0aDMyOgorICAgICAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgICAgICBjYXNlIEdQ
OgorICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlID8gU3RvcmVSZWwzMiA6IE1vdmUzMjsK
KyAgICAgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJl
bGVhc2UpOworICAgICAgICAgICAgICAgIHJldHVybiBNb3ZlRmxvYXQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaXM2NEJpdCgpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYmFuaykgewor
ICAgICAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0
b3JlUmVsNjQgOiBNb3ZlOworICAgICAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghcmVsZWFzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1vdmVEb3Vi
bGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBBaXI6Ok9w
Y29kZSBzdG9yZU9wY29kZShWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBNZW1vcnlWYWx1
ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChtZW1vcnktPmlzU3RvcmUoKSk7CisgICAgICAgIHJldHVybiBzdG9yZU9wY29kZShtZW1v
cnktPmxvYWRTdG9yZVdpZHRoKCksIG1lbW9yeS0+YWNjZXNzQmFuaygpLCBtZW1vcnktPmhhc0Zl
bmNlKCkpOworICAgIH0KIAogICAgIEluc3QgY3JlYXRlU3RvcmUoVmFsdWUqIHZhbHVlLCBjb25z
dCBBcmcmIGRlc3QpCiAgICAgewotICAgICAgICBBaXI6Ok9wY29kZSBtb3ZlT3Bjb2RlID0gbW92
ZUZvclR5cGUodmFsdWUtPnR5cGUoKSk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTdG9yZShtb3Zl
T3Bjb2RlLCB2YWx1ZSwgZGVzdCk7CisgICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVPcGNvZGUgPSBz
dG9yZU9wY29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiBjcmVhdGVTdG9yZShtb3ZlT3Bjb2Rl
LCB2YWx1ZS0+Y2hpbGQoMCksIGRlc3QpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3M+CkBAIC0xMDA2LDcgKzEwNzAsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
YXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBjcmVhdGVTdG9yZShzdGQ6OmZvcndhcmQ8QXJn
cz4oYXJncykuLi4pKSk7CiAgICAgfQotCisgICAgCiAgICAgQWlyOjpPcGNvZGUgbW92ZUZvclR5
cGUoVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xMDczLDcg
KzExMzcsNDEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVu
ZChpbnN0KTsKICAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2hBcHBlbmRpbmdJbnN0cnVjdGlv
bnMoQWlyOjpCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgeworICAgICAgICAvLyBOb3cgYXBwZW5k
IHRoZSBpbnN0cnVjdGlvbnMuIG1faW5zdHMgY29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVy
LCBzbyB3ZSBwcm9jZXNzCisgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1faW5zdHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBmb3IgKElu
c3QmIGluc3QgOiBtX2luc3RzW2ldKQorICAgICAgICAgICAgICAgIHRhcmdldC0+YXBwZW5kSW5z
dChXVEZNb3ZlKGluc3QpKTsKKyAgICAgICAgfQorICAgICAgICBtX2luc3RzLnJlc2l6ZSgwKTsK
KyAgICB9CisgICAgCisgICAgQWlyOjpCYXNpY0Jsb2NrKiBuZXdCbG9jaygpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRBZnRlcihtX2Jsb2NrVG9CbG9j
a1ttX2Jsb2NrXSk7CisgICAgfQogCisgICAgLy8gTk9URTogVGhpcyB3aWxsIGNyZWF0ZSBhIGNv
bnRpbnVhdGlvbiBibG9jayAoYG5leHRCbG9ja2ApICphZnRlciogYW55IGJsb2NrcyB5b3UndmUg
Y3JlYXRlZCB1c2luZworICAgIC8vIG5ld0Jsb2NrKCkuIFNvLCBpdCdzIHByZWZlcmFibGUgdG8g
Y3JlYXRlIGFsbCBvZiB5b3VyIGJsb2NrcyB1cGZyb250IHVzaW5nIG5ld0Jsb2NrKCkuIEFsc28g
bm90ZQorICAgIC8vIHRoYXQgYW55IGNvZGUgeW91IGVtaXQgYmVmb3JlIHRoaXMgd2lsbCBiZSBw
cmVwZW5kZWQgdG8gdGhlIGNvbnRpbnVhdGlvbiwgYW5kIGFueSBjb2RlIHlvdSBlbWl0CisgICAg
Ly8gYWZ0ZXIgdGhpcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBwcmV2aW91cyBibG9jay4KKyAg
ICB2b2lkIHNwbGl0QmxvY2soQWlyOjpCYXNpY0Jsb2NrKiYgcHJldmlvdXNCbG9jaywgQWlyOjpC
YXNpY0Jsb2NrKiYgbmV4dEJsb2NrKQorICAgIHsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fYmxvY2tUb0Jsb2NrW21fYmxvY2tdOworICAgICAgICAKKyAgICAgICAgcHJldmlv
dXNCbG9jayA9IGJsb2NrOworICAgICAgICBuZXh0QmxvY2sgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0
Lmluc2VydEFmdGVyKGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZpbmlzaEFwcGVuZGluZ0lu
c3RydWN0aW9ucyhuZXh0QmxvY2spOworICAgICAgICBuZXh0QmxvY2stPnN1Y2Nlc3NvcnMoKSA9
IGJsb2NrLT5zdWNjZXNzb3JzKCk7CisgICAgICAgIGJsb2NrLT5zdWNjZXNzb3JzKCkuY2xlYXIo
KTsKKyAgICAgICAgCisgICAgICAgIG1faW5zdHMuYXBwZW5kKFZlY3RvcjxJbnN0PigpKTsKKyAg
ICB9CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRz
PgogICAgIFQqIGVuc3VyZVNwZWNpYWwoVComIGZpZWxkLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVu
dHMpCiAgICAgewpAQCAtMTEyMyw3ICsxMjIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CiAgICAg
ICAgICAgICAgICAgYXJnID0gQXJnOjpjYWxsQXJnKHZhbHVlLnJlcCgpLm9mZnNldEZyb21TUCgp
KTsKLSAgICAgICAgICAgICAgICBhcHBlbmRTdG9yZSh2YWx1ZS52YWx1ZSgpLCBhcmcpOworICAg
ICAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1vdmVGb3JUeXBlKHZhbHVlLnZhbHVlKCktPnR5cGUo
KSksIHZhbHVlLnZhbHVlKCksIGFyZyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0xOTYxLDYgKzIwNTksMzA4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAorICAgIHZvaWQgYXBwZW5kWDg2RGl2KEIzOjpPcGNvZGUgb3ApCisgICAgewor
ICAgICAgICBBaXI6Ok9wY29kZSBjb252ZXJ0VG9Eb3VibGVXb3JkOworICAgICAgICBBaXI6Ok9w
Y29kZSBkaXY7CisgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgIGNh
c2UgSW50MzI6CisgICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2Q29udmVydFRv
RG91YmxlV29yZDMyOworICAgICAgICAgICAgZGl2ID0gWDg2RGl2MzI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdv
cmQgPSBYODZDb252ZXJ0VG9RdWFkV29yZDY0OworICAgICAgICAgICAgZGl2ID0gWDg2RGl2NjQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBBU1NFUlQob3AgPT0gRGl2IHx8IG9wID09IE1vZCk7CisgICAgICAgIFRtcCBy
ZXN1bHQgPSBvcCA9PSBEaXYgPyBtX2VheCA6IG1fZWR4OworCisgICAgICAgIGFwcGVuZChNb3Zl
LCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBtX2VheCk7CisgICAgICAgIGFwcGVuZChjb252ZXJ0
VG9Eb3VibGVXb3JkLCBtX2VheCwgbV9lZHgpOworICAgICAgICBhcHBlbmQoZGl2LCBtX2VheCwg
bV9lZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkpOworICAgICAgICBhcHBlbmQoTW92ZSwgcmVz
dWx0LCB0bXAobV92YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kWDg2VURpdihCMzo6
T3Bjb2RlIG9wKQorICAgIHsKKyAgICAgICAgQWlyOjpPcGNvZGUgZGl2ID0gbV92YWx1ZS0+dHlw
ZSgpID09IEludDMyID8gWDg2VURpdjMyIDogWDg2VURpdjY0OworCisgICAgICAgIEFTU0VSVChv
cCA9PSBVRGl2IHx8IG9wID09IFVNb2QpOworICAgICAgICBUbXAgcmVzdWx0ID0gb3AgPT0gVURp
diA/IG1fZWF4IDogbV9lZHg7CisKKyAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChtX3ZhbHVlLT5j
aGlsZCgwKSksIG1fZWF4KTsKKyAgICAgICAgYXBwZW5kKFhvcjY0LCBtX2VkeCwgbV9lZHgpOwor
ICAgICAgICBhcHBlbmQoZGl2LCBtX2VheCwgbV9lZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkp
OworICAgICAgICBhcHBlbmQoTW92ZSwgcmVzdWx0LCB0bXAobV92YWx1ZSkpOworICAgIH0KKyAg
ICAKKyAgICBBaXI6Ok9wY29kZSBsb2FkTGlua09wY29kZShXaWR0aCB3aWR0aCwgYm9vbCBmZW5j
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmZW5jZSA/IE9QQ09ERV9GT1JfV0lEVEgoTG9hZExp
bmtBY3EsIHdpZHRoKSA6IE9QQ09ERV9GT1JfV0lEVEgoTG9hZExpbmssIHdpZHRoKTsKKyAgICB9
CisgICAgCisgICAgQWlyOjpPcGNvZGUgc3RvcmVDb25kT3Bjb2RlKFdpZHRoIHdpZHRoLCBib29s
IGZlbmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZlbmNlID8gT1BDT0RFX0ZPUl9XSURUSChT
dG9yZUNvbmRSZWwsIHdpZHRoKSA6IE9QQ09ERV9GT1JfV0lEVEgoU3RvcmVDb25kLCB3aWR0aCk7
CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgY2FuIGVtaXQgY29kZSBmb3IgdGhlIGZvbGxvd2lu
ZyBwYXR0ZXJuczoKKyAgICAvLyBBdG9taWNXZWFrQ0FTCisgICAgLy8gQml0WG9yKEF0b21pY1dl
YWtDQVMsIDEpCisgICAgLy8gQXRvbWljU3Ryb25nQ0FTCisgICAgLy8gRXF1YWwoQXRvbWljU3Ry
b25nQ0FTLCBleHBlY3RlZCkKKyAgICAvLyBOb3RFcXVhbChBdG9taWNTdHJvbmdDQVMsIGV4cGVj
dGVkKQorICAgIC8vIEJyYW5jaChBdG9taWNXZWFrQ0FTKQorICAgIC8vIEJyYW5jaChFcXVhbChB
dG9taWNTdHJvbmdDQVMsIGV4cGVjdGVkKSkKKyAgICAvLyBCcmFuY2goTm90RXF1YWwoQXRvbWlj
U3Ryb25nQ0FTLCBleHBlY3RlZCkpCisgICAgLy8KKyAgICAvLyBJdCBhc3N1bWVzIHRoYXQgYXRv
bWljVmFsdWUgcG9pbnRzIHRvIHRoZSBDQVMsIGFuZCBtX3ZhbHVlIHBvaW50cyB0byB0aGUgaW5z
dHJ1Y3Rpb24gYmVpbmcKKyAgICAvLyBnZW5lcmF0ZWQuIEl0IGFzc3VtZXMgdGhhdCB5b3UndmUg
Y29uc3VtZWQgZXZlcnl0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGNvbnN1bWVkLgorICAgIHZvaWQg
YXBwZW5kQ0FTKFZhbHVlKiBhdG9taWNWYWx1ZSwgYm9vbCBpbnZlcnQpCisgICAgeworICAgICAg
ICBBdG9taWNWYWx1ZSogYXRvbWljID0gYXRvbWljVmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChhdG9taWMpOworICAgICAgICAKKyAgICAgICAgYm9vbCBp
c0JyYW5jaCA9IG1fdmFsdWUtPm9wY29kZSgpID09IEJyYW5jaDsKKyAgICAgICAgYm9vbCBpc1N0
cm9uZyA9IGF0b21pYy0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTOworICAgICAgICBib29s
IHJldHVybnNPbGRWYWx1ZSA9IG1fdmFsdWUtPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUzsK
KyAgICAgICAgCisgICAgICAgIFdpZHRoIHdpZHRoID0gYXRvbWljLT5vcGVyYXRpb25XaWR0aCgp
OworICAgICAgICBBcmcgYWRkcmVzcyA9IGFkZHIoYXRvbWljKTsKKworICAgICAgICBUbXAgdmFs
dWVSZXN1bHRUbXA7CisgICAgICAgIFRtcCBib29sUmVzdWx0VG1wOworICAgICAgICBpZiAocmV0
dXJuc09sZFZhbHVlKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW52ZXJ0KTsKKyAg
ICAgICAgICAgIHZhbHVlUmVzdWx0VG1wID0gdG1wKG1fdmFsdWUpOworICAgICAgICAgICAgYm9v
bFJlc3VsdFRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICB9IGVsc2UgaWYgKGlzQnJh
bmNoKSB7CisgICAgICAgICAgICB2YWx1ZVJlc3VsdFRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOwor
ICAgICAgICAgICAgYm9vbFJlc3VsdFRtcCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdmFsdWVSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsK
KyAgICAgICAgICAgIGJvb2xSZXN1bHRUbXAgPSB0bXAobV92YWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFRtcCBzdWNjZXNzQm9vbFJlc3VsdFRtcDsKKyAgICAgICAgaWYgKGlz
U3Ryb25nICYmICFpc0JyYW5jaCkKKyAgICAgICAgICAgIHN1Y2Nlc3NCb29sUmVzdWx0VG1wID0g
bV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1Y2Nlc3NCb29s
UmVzdWx0VG1wID0gYm9vbFJlc3VsdFRtcDsKKworICAgICAgICBUbXAgZXhwZWN0ZWRWYWx1ZVRt
cCA9IHRtcChhdG9taWMtPmNoaWxkKDApKTsKKyAgICAgICAgVG1wIG5ld1ZhbHVlVG1wID0gdG1w
KGF0b21pYy0+Y2hpbGQoMSkpOworICAgICAgICAKKyAgICAgICAgQWlyOjpGcmVxdWVudGVkQmxv
Y2sgc3VjY2VzczsKKyAgICAgICAgQWlyOjpGcmVxdWVudGVkQmxvY2sgZmFpbHVyZTsKKyAgICAg
ICAgaWYgKGlzQnJhbmNoKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gbV9ibG9ja1RvQmxvY2tb
bV9ibG9ja10tPnN1Y2Nlc3NvcihpbnZlcnQpOworICAgICAgICAgICAgZmFpbHVyZSA9IG1fYmxv
Y2tUb0Jsb2NrW21fYmxvY2tdLT5zdWNjZXNzb3IoIWludmVydCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1v
dmVGb3JUeXBlKGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpKSwgaW1tT3JUbXAoYXRvbWljLT5jaGls
ZCgwKSksIG1fZWF4KTsKKyAgICAgICAgICAgIGlmIChyZXR1cm5zT2xkVmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNTdHJvbmdDQVMsIHdpZHRo
KSwgbV9lYXgsIG5ld1ZhbHVlVG1wLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBhcHBlbmQo
cmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpKSwgbV9lYXgsIHZhbHVl
UmVzdWx0VG1wKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNCcmFuY2gpIHsKKyAgICAgICAg
ICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChCcmFuY2hBdG9taWNTdHJvbmdDQVMsIHdp
ZHRoKSwgQXJnOjpzdGF0dXNDb25kKE1hY3JvQXNzZW1ibGVyOjpTdWNjZXNzKSwgbV9lYXgsIG5l
d1ZhbHVlVG1wLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrVG9CbG9ja1ttX2Js
b2NrXS0+c2V0U3VjY2Vzc29ycyhzdWNjZXNzLCBmYWlsdXJlKTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIGFwcGVuZChPUENPREVfRk9SX1dJRFRIKEF0b21pY1N0cm9uZ0NB
Uywgd2lkdGgpLCBBcmc6OnN0YXR1c0NvbmQoaW52ZXJ0ID8gTWFjcm9Bc3NlbWJsZXI6OkZhaWx1
cmUgOiBNYWNyb0Fzc2VtYmxlcjo6U3VjY2VzcyksIG1fZWF4LCB0bXAoYXRvbWljLT5jaGlsZCgx
KSksIGFkZHJlc3MsIGJvb2xSZXN1bHRUbXApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOworICAgICAg
ICAvLyBXZSB3aXNoIHRvIGVtaXQ6CisgICAgICAgIC8vCisgICAgICAgIC8vIEJsb2NrICNyZWxv
b3A6CisgICAgICAgIC8vICAgICBMb2FkTGluaworICAgICAgICAvLyAgICAgQnJhbmNoIE5vdEVx
dWFsCisgICAgICAgIC8vICAgU3VjY2Vzc29yczogVGhlbjojZmFpbCwgRWxzZTogI3N0b3JlCisg
ICAgICAgIC8vIEJsb2NrICNzdG9yZToKKyAgICAgICAgLy8gICAgIFN0b3JlQ29uZAorICAgICAg
ICAvLyAgICAgWG9yICQxLCAlcmVzdWx0ICAgIDwtLS0gb25seSBpZiAhaW52ZXJ0CisgICAgICAg
IC8vICAgICBKdW1wCisgICAgICAgIC8vICAgU3VjY2Vzc29yczogI2RvbmUKKyAgICAgICAgLy8g
QmxvY2sgI2ZhaWw6CisgICAgICAgIC8vICAgICBNb3ZlICRpbnZlcnQsICVyZXN1bHQKKyAgICAg
ICAgLy8gICAgIEp1bXAKKyAgICAgICAgLy8gICBTdWNjZXNzb3JzOiAjZG9uZQorICAgICAgICAv
LyBCbG9jayAjZG9uZToKKyAgICAgICAgCisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogcmVsb29w
QmxvY2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHN0b3JlQmxvY2sg
PSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHN1Y2Nlc3NCbG9jayA9IG51
bGxwdHI7CisgICAgICAgIGlmICghaXNCcmFuY2ggJiYgaXNTdHJvbmcpCisgICAgICAgICAgICBz
dWNjZXNzQmxvY2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGZhaWxC
bG9jayA9IG51bGxwdHI7CisgICAgICAgIGlmICghaXNCcmFuY2gpCisgICAgICAgICAgICBmYWls
QmxvY2sgPSBuZXdCbG9jaygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHN0cm9uZ0ZhaWxC
bG9jazsKKyAgICAgICAgaWYgKGlzU3Ryb25nKQorICAgICAgICAgICAgc3Ryb25nRmFpbEJsb2Nr
ID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpGcmVxdWVudGVkQmxvY2sgY29tcGFyaXNvbkZh
aWw7CisgICAgICAgIEFpcjo6RnJlcXVlbnRlZEJsb2NrIHdlYWtGYWlsOworICAgICAgICBpZiAo
aXNTdHJvbmcpIHsKKyAgICAgICAgICAgIGNvbXBhcmlzb25GYWlsID0gc3Ryb25nRmFpbEJsb2Nr
OworICAgICAgICAgICAgd2Vha0ZhaWwgPSByZWxvb3BCbG9jazsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChpc0JyYW5jaCkKKyAgICAgICAgICAgICAgICBjb21wYXJpc29uRmFp
bCA9IGZhaWx1cmU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGFyaXNv
bkZhaWwgPSBmYWlsQmxvY2s7CisgICAgICAgICAgICB3ZWFrRmFpbCA9IGZhaWx1cmU7CisgICAg
ICAgIH0KKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBiZWdpbkJsb2NrOworICAgICAgICBBaXI6
OkJhc2ljQmxvY2sqIGRvbmVCbG9jazsKKyAgICAgICAgc3BsaXRCbG9jayhiZWdpbkJsb2NrLCBk
b25lQmxvY2spOworICAgICAgICAKKyAgICAgICAgYXBwZW5kKEFpcjo6SnVtcCk7CisgICAgICAg
IGJlZ2luQmxvY2stPnNldFN1Y2Nlc3NvcnMocmVsb29wQmxvY2spOworICAgICAgICAKKyAgICAg
ICAgcmVsb29wQmxvY2stPmFwcGVuZChsb2FkTGlua09wY29kZSh3aWR0aCwgYXRvbWljLT5oYXNG
ZW5jZSgpKSwgbV92YWx1ZSwgYWRkcmVzcywgdmFsdWVSZXN1bHRUbXApOworICAgICAgICByZWxv
b3BCbG9jay0+YXBwZW5kKE9QQ09ERV9GT1JfQ0FOT05JQ0FMX1dJRFRIKEJyYW5jaCwgd2lkdGgp
LCBtX3ZhbHVlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgdmFsdWVS
ZXN1bHRUbXAsIGV4cGVjdGVkVmFsdWVUbXApOworICAgICAgICByZWxvb3BCbG9jay0+c2V0U3Vj
Y2Vzc29ycyhjb21wYXJpc29uRmFpbCwgc3RvcmVCbG9jayk7CisgICAgICAgIAorICAgICAgICBz
dG9yZUJsb2NrLT5hcHBlbmQoc3RvcmVDb25kT3Bjb2RlKHdpZHRoLCBhdG9taWMtPmhhc0ZlbmNl
KCkpLCBtX3ZhbHVlLCBuZXdWYWx1ZVRtcCwgYWRkcmVzcywgc3VjY2Vzc0Jvb2xSZXN1bHRUbXAp
OworICAgICAgICBpZiAoaXNCcmFuY2gpIHsKKyAgICAgICAgICAgIHN0b3JlQmxvY2stPmFwcGVu
ZChCcmFuY2hUZXN0MzIsIG1fdmFsdWUsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVy
byksIGJvb2xSZXN1bHRUbXAsIEFyZzo6Yml0SW1tKC0xKSk7CisgICAgICAgICAgICBzdG9yZUJs
b2NrLT5zZXRTdWNjZXNzb3JzKHN1Y2Nlc3MsIHdlYWtGYWlsKTsKKyAgICAgICAgICAgIGRvbmVC
bG9jay0+c3VjY2Vzc29ycygpLmNsZWFyKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
ZG9uZUJsb2NrLT5zaXplKCkpOworICAgICAgICAgICAgZG9uZUJsb2NrLT5hcHBlbmQoQWlyOjpP
b3BzLCBtX3ZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc1N0cm9u
ZykgeworICAgICAgICAgICAgICAgIHN0b3JlQmxvY2stPmFwcGVuZChCcmFuY2hUZXN0MzIsIG1f
dmFsdWUsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIHN1Y2Nlc3NCb29sUmVz
dWx0VG1wLCBBcmc6OmJpdEltbSgtMSkpOworICAgICAgICAgICAgICAgIHN0b3JlQmxvY2stPnNl
dFN1Y2Nlc3NvcnMoc3VjY2Vzc0Jsb2NrLCByZWxvb3BCbG9jayk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgc3VjY2Vzc0Jsb2NrLT5hcHBlbmQoTW92ZSwgbV92YWx1ZSwgQXJn
OjppbW0oIWludmVydCksIGJvb2xSZXN1bHRUbXApOworICAgICAgICAgICAgICAgIHN1Y2Nlc3NC
bG9jay0+YXBwZW5kKEFpcjo6SnVtcCwgbV92YWx1ZSk7CisgICAgICAgICAgICAgICAgc3VjY2Vz
c0Jsb2NrLT5zZXRTdWNjZXNzb3JzKGRvbmVCbG9jayk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGlmICghaW52ZXJ0KQorICAgICAgICAgICAgICAgICAgICBzdG9yZUJs
b2NrLT5hcHBlbmQoWG9yMzIsIG1fdmFsdWUsIEFyZzo6Yml0SW1tKDEpLCBib29sUmVzdWx0VG1w
LCBib29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdG9y
ZUJsb2NrLT5hcHBlbmQoQWlyOjpKdW1wLCBtX3ZhbHVlKTsKKyAgICAgICAgICAgICAgICBzdG9y
ZUJsb2NrLT5zZXRTdWNjZXNzb3JzKGRvbmVCbG9jayk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZhaWxCbG9jay0+YXBwZW5kKE1vdmUsIG1fdmFsdWUsIEFyZzo6
aW1tKGludmVydCksIGJvb2xSZXN1bHRUbXApOworICAgICAgICAgICAgZmFpbEJsb2NrLT5hcHBl
bmQoQWlyOjpKdW1wLCBtX3ZhbHVlKTsKKyAgICAgICAgICAgIGZhaWxCbG9jay0+c2V0U3VjY2Vz
c29ycyhkb25lQmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXNTdHJv
bmcpIHsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAg
ICAgIHN0cm9uZ0ZhaWxCbG9jay0+YXBwZW5kKHN0b3JlQ29uZE9wY29kZSh3aWR0aCwgYXRvbWlj
LT5oYXNGZW5jZSgpKSwgbV92YWx1ZSwgdmFsdWVSZXN1bHRUbXAsIGFkZHJlc3MsIHRtcCk7Cisg
ICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2stPmFwcGVuZChCcmFuY2hUZXN0MzIsIG1fdmFsdWUs
IEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIHRtcCwgQXJnOjpiaXRJbW0oLTEp
KTsKKyAgICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9jay0+c2V0U3VjY2Vzc29ycyhmYWlsQmxvY2ss
IHJlbG9vcEJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGFwcGVuZFZv
aWRBdG9taWMoQWlyOjpPcGNvZGUgYXRvbWljT3Bjb2RlKQorICAgIHsKKyAgICAgICAgaWYgKG1f
dXNlQ291bnRzLm51bVVzZXMobV92YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBBcmcgYWRkcmVzcyA9IGFkZHIobV92YWx1ZSk7CisgICAgICAgIAor
ICAgICAgICBpZiAoaXNWYWxpZEZvcm0oYXRvbWljT3Bjb2RlLCBBcmc6OkltbSwgYWRkcmVzcy5r
aW5kKCkpICYmIGltbShtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKKyAgICAgICAgICAgIGFwcGVuZChh
dG9taWNPcGNvZGUsIGltbShtX3ZhbHVlLT5jaGlsZCgwKSksIGFkZHJlc3MpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpc1ZhbGlk
Rm9ybShhdG9taWNPcGNvZGUsIEFyZzo6VG1wLCBhZGRyZXNzLmtpbmQoKSkpIHsKKyAgICAgICAg
ICAgIGFwcGVuZChhdG9taWNPcGNvZGUsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIGFkZHJlc3Mp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZEdlbmVyYWxBdG9taWMo
QWlyOjpPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9
IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAKKyAgICAgICAgQXJnIGFkZHJl
c3MgPSBhZGRyKG1fdmFsdWUpOworICAgICAgICBUbXAgb2xkVmFsdWUgPSBtX2NvZGUubmV3VG1w
KEdQKTsKKyAgICAgICAgVG1wIG5ld1ZhbHVlID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAg
IAorICAgICAgICAvLyBXZSBuZWVkIGEgQ0FTIGxvb3Agb3IgYSBMTC9TQyBsb29wLiBVc2luZyBw
cmVwYXJlL2F0dGVtcHQgamFyZ29uLCB3ZSB3YW50OgorICAgICAgICAvLworICAgICAgICAvLyBC
bG9jayAjcmVsb29wOgorICAgICAgICAvLyAgICAgUHJlcGFyZQorICAgICAgICAvLyAgICAgb3Bj
b2RlCisgICAgICAgIC8vICAgICBBdHRlbXB0CisgICAgICAgIC8vICAgU3VjY2Vzc29yczogVGhl
bjojZG9uZSwgRWxzZTojcmVsb29wCisgICAgICAgIC8vIEJsb2NrICNkb25lOgorICAgICAgICAv
LyAgICAgTW92ZSBvbGRWYWx1ZSwgcmVzdWx0CisgICAgICAgIAorICAgICAgICBhcHBlbmQocmVs
YXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgb2xkVmFsdWUsIHRtcChhdG9taWMpKTsK
KyAgICAgICAgCisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogcmVsb29wQmxvY2sgPSBuZXdCbG9j
aygpOworICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIGJlZ2luQmxvY2s7CisgICAgICAgIEFpcjo6
QmFzaWNCbG9jayogZG9uZUJsb2NrOworICAgICAgICBzcGxpdEJsb2NrKGJlZ2luQmxvY2ssIGRv
bmVCbG9jayk7CisgICAgICAgIAorICAgICAgICBhcHBlbmQoQWlyOjpKdW1wKTsKKyAgICAgICAg
YmVnaW5CbG9jay0+c2V0U3VjY2Vzc29ycyhyZWxvb3BCbG9jayk7CisgICAgICAgIAorICAgICAg
ICBBaXI6Ok9wY29kZSBwcmVwYXJlT3Bjb2RlOworICAgICAgICBpZiAoaXNYODYoKSkgeworICAg
ICAgICAgICAgc3dpdGNoIChhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgV2lkdGg4OgorICAgICAgICAgICAgICAgIHByZXBhcmVPcGNvZGUgPSBMb2FkOFNpZ25l
ZEV4dGVuZFRvMzI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdp
ZHRoMTY6CisgICAgICAgICAgICAgICAgcHJlcGFyZU9wY29kZSA9IExvYWQxNlNpZ25lZEV4dGVu
ZFRvMzI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdpZHRoMzI6
CisgICAgICAgICAgICAgICAgcHJlcGFyZU9wY29kZSA9IE1vdmUzMjsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgICAgICAgICBwcmVw
YXJlT3Bjb2RlID0gTW92ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7
CisgICAgICAgICAgICBvcGNvZGUgPSBsb2FkTGlua09wY29kZShhdG9taWMtPm9wZXJhdGlvbldp
ZHRoKCksIGF0b21pYy0+aGFzRmVuY2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVsb29wQmxv
Y2stPmFwcGVuZChwcmVwYXJlT3Bjb2RlLCBtX3ZhbHVlLCBhZGRyZXNzLCBvbGRWYWx1ZSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAob3Bjb2RlICE9IEFpcjo6Tm9wKSB7CisgICAgICAgICAgICBp
ZiAoaW1tKGF0b21pYy0+Y2hpbGQoMCkpICYmIGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0s
IEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVu
ZChvcGNvZGUsIG1fdmFsdWUsIGltbShhdG9taWMtPmNoaWxkKDApKSwgb2xkVmFsdWUsIG5ld1Zh
bHVlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAs
IEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVu
ZChvcGNvZGUsIG1fdmFsdWUsIHRtcChhdG9taWMtPmNoaWxkKDApKSwgb2xkVmFsdWUsIG5ld1Zh
bHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5h
cHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgbV92YWx1ZSwgb2xkVmFs
dWUsIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoaW1tKGF0b21pYy0+Y2hpbGQoMCkp
ICYmIGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIEFyZzo6VG1wKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChvcGNvZGUsIG1fdmFsdWUsIGltbShhdG9taWMt
PmNoaWxkKDApKSwgbmV3VmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChvcGNvZGUsIG1fdmFsdWUsIHRtcChhdG9taWMt
PmNoaWxkKDApKSwgbmV3VmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIGNhc09wY29kZSA9IE9Q
Q09ERV9GT1JfV0lEVEgoQnJhbmNoQXRvbWljU3Ryb25nQ0FTLCBhdG9taWMtPm9wZXJhdGlvbldp
ZHRoKCkpOworICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChyZWxheGVkTW92ZUZvclR5
cGUoYXRvbWljLT50eXBlKCkpLCBtX3ZhbHVlLCBvbGRWYWx1ZSwgbV9lYXgpOworICAgICAgICAg
ICAgcmVsb29wQmxvY2stPmFwcGVuZChjYXNPcGNvZGUsIG1fdmFsdWUsIEFyZzo6c3RhdHVzQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6U3VjY2VzcyksIG1fZWF4LCBuZXdWYWx1ZSwgYWRkcmVzcyk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkpOwor
ICAgICAgICAgICAgVG1wIGJvb2xSZXN1bHQgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAg
ICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQoc3RvcmVDb25kT3Bjb2RlKGF0b21pYy0+b3BlcmF0aW9u
V2lkdGgoKSwgYXRvbWljLT5oYXNGZW5jZSgpKSwgbV92YWx1ZSwgbmV3VmFsdWUsIGFkZHJlc3Ms
IGJvb2xSZXN1bHQpOworICAgICAgICAgICAgcmVsb29wQmxvY2stPmFwcGVuZChCcmFuY2hUZXN0
MzIsIG1fdmFsdWUsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGJvb2xSZXN1
bHQsIEFyZzo6Yml0SW1tKC0xKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVsb29wQmxvY2stPnNl
dFN1Y2Nlc3NvcnMoZG9uZUJsb2NrLCByZWxvb3BCbG9jayk7CisgICAgfQorICAgIAogICAgIHZv
aWQgbG93ZXIoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgewpA
QCAtMTk3MSwzMCArMjM3MSw1MCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBMb2FkOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1f
dmFsdWUsIG1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksIG1fdmFsdWUsIGFkZHIobV92YWx1
ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IG1f
dmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2Rl
ID0gQWlyOjpPb3BzOworICAgICAgICAgICAgaWYgKG1lbW9yeS0+aGFzRmVuY2UoKSkgeworICAg
ICAgICAgICAgICAgIHN3aXRjaCAobWVtb3J5LT50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIEludDMyOgorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBMb2FkQWNxMzI7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW50NjQ6CisgICAg
ICAgICAgICAgICAgICAgIG9wY29kZSA9IExvYWRBY3E2NDsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgb3Bj
b2RlID0gbW92ZUZvclR5cGUobWVtb3J5LT50eXBlKCkpOworICAgICAgICAgICAgYXBwZW5kKHRy
YXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcCht
X3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBMb2FkOFM6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3Qo
bV92YWx1ZSwgTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0
bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG1fdmFsdWUt
PmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpID8gTG9hZEFjcThTaWduZWRFeHRlbmRUbzMy
IDogTG9hZDhTaWduZWRFeHRlbmRUbzMyOworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5z
dChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBMb2FkOFo6
IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9hZDgsIG1fdmFs
dWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNv
ZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2Fk
QWNxOCA6IExvYWQ4OworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBv
cGNvZGUsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBMb2FkMTZTOiB7Ci0gICAgICAg
ICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQxNlNpZ25lZEV4dGVuZFRvMzIs
IG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOworICAgICAgICAgICAgQWly
OjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkg
PyBMb2FkQWNxMTZTaWduZWRFeHRlbmRUbzMyIDogTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMjsKKyAg
ICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBh
ZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDE2WjogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBw
aW5nSW5zdChtX3ZhbHVlLCBMb2FkMTYsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3Zh
bHVlKSkpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbV92YWx1ZS0+YXM8TWVt
b3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkgPyBMb2FkQWNxMTYgOiBMb2FkMTY7CisgICAgICAgICAg
ICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwgYWRkcihtX3Zh
bHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQor
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQWRkOiB7CiAgICAgICAgICAgICBpZiAodHJ5QXBw
ZW5kTGVhKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjA5Miw3ICsyNTEyLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0NoaWxsKCkpCiAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsKICAgICAgICAgICAgIGlmIChpc0ludCht
X3ZhbHVlLT50eXBlKCkpICYmIGlzWDg2KCkpIHsKLSAgICAgICAgICAgICAgICBsb3dlclg4NkRp
dihEaXYpOworICAgICAgICAgICAgICAgIGFwcGVuZFg4NkRpdihEaXYpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVCghaXNYODYoKSB8
fCBpc0Zsb2F0KG1fdmFsdWUtPnR5cGUoKSkpOwpAQCAtMjEwMyw3ICsyNTIzLDcgQEAgcHJpdmF0
ZToKIAogICAgICAgICBjYXNlIFVEaXY6IHsKICAgICAgICAgICAgIGlmIChpc0ludChtX3ZhbHVl
LT50eXBlKCkpICYmIGlzWDg2KCkpIHsKLSAgICAgICAgICAgICAgICBsb3dlclg4NlVEaXYoVURp
dik7CisgICAgICAgICAgICAgICAgYXBwZW5kWDg2VURpdihVRGl2KTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAgLTIxMTcsMTMgKzI1MzcsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBNb2Q6IHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2
KCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdmFsdWUtPmlzQ2hpbGwoKSk7Ci0g
ICAgICAgICAgICBsb3dlclg4NkRpdihNb2QpOworICAgICAgICAgICAgYXBwZW5kWDg2RGl2KE1v
ZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFVNb2Q6
IHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOwotICAgICAgICAgICAgbG93
ZXJYODZVRGl2KFVNb2QpOworICAgICAgICAgICAgYXBwZW5kWDg2VURpdihVTW9kKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMTYyLDEwICsyNTgyLDI4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgYXBwZW5kVW5PcDxOb3QzMiwgTm90NjQ+KG1fdmFsdWUtPmNo
aWxkKDApKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgcGF0dGVybiBpcyBzdXBlciB1c2VmdWwgb24gYm90
aCB4ODYgYW5kIEFSTTY0LCBzaW5jZSB0aGUgaW52ZXJzaW9uIG9mIHRoZSBDQVMgcmVzdWx0Cisg
ICAgICAgICAgICAvLyBjYW4gYmUgZG9uZSB3aXRoIHplcm8gY29zdCBvbiB4ODYgKGp1c3QgZmxp
cCB0aGUgc2V0IGZyb20gRSB0byBORSkgYW5kIGl0J3MgYSBwcm9ncmVzc2lvbgorICAgICAgICAg
ICAgLy8gb24gQVJNNjQgKHNpbmNlIFNUWCByZXR1cm5zIDAgb24gc3VjY2Vzcywgc28gb3JkaW5h
cmlseSB3ZSBoYXZlIHRvIGZsaXAgaXQpLgorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxk
KDEpLT5pc0ludCgxKQorICAgICAgICAgICAgICAgICYmIGlzQXRvbWljQ0FTKG1fdmFsdWUtPmNo
aWxkKDApLT5vcGNvZGUoKSkKKyAgICAgICAgICAgICAgICAmJiBjYW5CZUludGVybmFsKG1fdmFs
dWUtPmNoaWxkKDApKSkgeworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKG1fdmFsdWUt
PmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRDQVMobV92YWx1ZS0+Y2hpbGQoMCks
IHRydWUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAogICAgICAgICAgICAgYXBwZW5kQmluT3A8WG9yMzIsIFhvcjY0LCBYb3JEb3VibGUsIFhv
ckZsb2F0LCBDb21tdXRhdGl2ZT4oCiAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCks
IG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChpc0FSTTY0KCkpOworICAgICAgICAgICAgYXBwZW5kVW5PcDxEZXBlbmQzMiwgRGVwZW5k
NjQ+KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgU2hsOiB7CiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSkt
PmlzSW50MzIoMSkpIHsKQEAgLTIyNjYsNyArMjcwNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhcHBlbmRTdG9yZSh2YWx1ZVRv
U3RvcmUsIGFkZHIobV92YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kU3RvcmUobV92YWx1ZSwg
YWRkcihtX3ZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjI4
Nyw3ICsyNzI1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZFN0b3JlKEFp
cjo6U3RvcmU4LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpOworICAgICAgICAgICAgYXBw
ZW5kU3RvcmUobV92YWx1ZSwgYWRkcihtX3ZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIApAQCAtMjMwOCw3ICsyNzQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGFwcGVuZFN0b3JlKEFpcjo6U3RvcmUxNiwgdmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUp
KTsKKyAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUsIGFkZHIobV92YWx1ZSkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTI0MTYsNyArMjg1NCwyMiBAQCBwcml2
YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBFcXVhbDoKLSAgICAgICAgY2FzZSBOb3RF
cXVhbDoKKyAgICAgICAgY2FzZSBOb3RFcXVhbDogeworICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMKKyAgICAgICAgICAgICAgICAm
JiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkKKyAgICAg
ICAgICAgICAgICAmJiBjYW5CZUludGVybmFsKG1fdmFsdWUtPmNoaWxkKDApKSkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVCghbV9sb2NrZWQuY29udGFpbnMobV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDEpKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2xvY2tlZC5jb250YWlucyhtX3Zh
bHVlLT5jaGlsZCgxKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbW1p
dEludGVybmFsKG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRDQVMo
bV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPm9wY29kZSgpID09IE5vdEVxdWFsKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFyZShtX3ZhbHVlKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNl
IExlc3NUaGFuOgogICAgICAgICBjYXNlIEdyZWF0ZXJUaGFuOgogICAgICAgICBjYXNlIExlc3NF
cXVhbDoKQEAgLTI3MjcsNiArMzE4MCw0MCBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBCcmFuY2g6IHsKKyAgICAgICAgICAgIGlmIChjYW5CZUludGVybmFsKG1fdmFsdWUt
PmNoaWxkKDApKSkgeworICAgICAgICAgICAgICAgIFZhbHVlKiBicmFuY2hDaGlsZCA9IG1fdmFs
dWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIHN3aXRjaCAoYnJhbmNoQ2hpbGQtPm9wY29k
ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAg
ICAgICAgICBjb21taXRJbnRlcm5hbChicmFuY2hDaGlsZCk7CisgICAgICAgICAgICAgICAgICAg
IGFwcGVuZENBUyhicmFuY2hDaGlsZCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljU3Ry
b25nQ0FTOgorICAgICAgICAgICAgICAgICAgICAvLyBBIGJyYW5jaCBpcyBhIGNvbXBhcmlzb24g
dG8gemVyby4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGJyYW5jaENoaWxkLT5jaGlsZCgwKS0+
aXNJbnQoMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGJyYW5j
aENoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENBUyhicmFuY2hDaGlsZCwg
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgICAgICAgICAgY2FzZSBOb3RFcXVh
bDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJyYW5jaENoaWxkLT5jaGlsZCgwKS0+b3Bjb2Rl
KCkgPT0gQXRvbWljU3Ryb25nQ0FTCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBjYW5CZUlu
dGVybmFsKGJyYW5jaENoaWxkLT5jaGlsZCgwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYm
IGJyYW5jaENoaWxkLT5jaGlsZCgwKS0+Y2hpbGQoMCkgPT0gYnJhbmNoQ2hpbGQtPmNoaWxkKDEp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChicmFuY2hDaGlsZCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChicmFuY2hDaGlsZC0+Y2hp
bGQoMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ0FTKGJyYW5jaENoaWxkLT5j
aGlsZCgwKSwgYnJhbmNoQ2hpbGQtPm9wY29kZSgpID09IE5vdEVxdWFsKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBl
bmQoY3JlYXRlQnJhbmNoKG1fdmFsdWUtPmNoaWxkKDApKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTI3ODQsNyArMzI3MSw4MSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YXBwZW5kKEFpcjo6RW50cnlTd2l0Y2gpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICBjYXNl
IEF0b21pY1N0cm9uZ0NBUzogeworICAgICAgICAgICAgYXBwZW5kQ0FTKG1fdmFsdWUsIGZhbHNl
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXRvbWljWGNoZ0FkZDogeworICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9
IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgaWYgKGFwcGVuZFZvaWRB
dG9taWMoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNBZGQsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgo
KSkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
QXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNv
ZGUgPSBPUENPREVfRk9SX1dJRFRIKEF0b21pY1hjaGdBZGQsIGF0b21pYy0+b3BlcmF0aW9uV2lk
dGgoKSk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgYWRk
cmVzcy5raW5kKCkpKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlw
ZShhdG9taWMtPnR5cGUoKSksIHRtcChhdG9taWMtPmNoaWxkKDApKSwgdG1wKGF0b21pYykpOwor
ICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChhdG9taWMpLCBhZGRyZXNzKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGFwcGVu
ZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9DQU5PTklDQUxfV0lEVEgoQWRkLCBhdG9taWMtPm9w
ZXJhdGlvbldpZHRoKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCisgICAg
ICAgIGNhc2UgQXRvbWljWGNoZ1N1YjogeworICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21p
YyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgaWYgKGFwcGVuZFZv
aWRBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNTdWIsIGF0b21pYy0+b3BlcmF0aW9uV2lk
dGgoKSkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgYXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX0NBTk9OSUNBTF9XSURUSChTdWIsIGF0
b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNYY2hnQW5kOiB7CisgICAgICAgICAg
ICBBdG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAg
ICAgICAgICBpZiAoYXBwZW5kVm9pZEF0b21pYyhPUENPREVfRk9SX1dJRFRIKEF0b21pY0FuZCwg
YXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfQ0FO
T05JQ0FMX1dJRFRIKEFuZCwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEF0b21pY1hj
aGdPcjogeworICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0
b21pY1ZhbHVlPigpOworICAgICAgICAgICAgaWYgKGFwcGVuZFZvaWRBdG9taWMoT1BDT0RFX0ZP
Ul9XSURUSChBdG9taWNPciwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRv
bWljKE9QQ09ERV9GT1JfQ0FOT05JQ0FMX1dJRFRIKE9yLCBhdG9taWMtPm9wZXJhdGlvbldpZHRo
KCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQXRvbWljWGNoZ1hvcjogeworICAgICAgICAgICAgQXRvbWljVmFsdWUqIGF0b21p
YyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAgICAgaWYgKGFwcGVuZFZv
aWRBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNYb3IsIGF0b21pYy0+b3BlcmF0aW9uV2lk
dGgoKSkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgYXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX0NBTk9OSUNBTF9XSURUSChYb3IsIGF0
b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNYY2hnOiB7CisgICAgICAgICAgICBB
dG9taWNWYWx1ZSogYXRvbWljID0gbV92YWx1ZS0+YXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEFyZyBhZGRyZXNzID0gYWRkcihhdG9taWMpOworICAgICAgICAg
ICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gT1BDT0RFX0ZPUl9XSURUSChBdG9taWNYY2hnLCBhdG9t
aWMtPm9wZXJhdGlvbldpZHRoKCkpOworICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29k
ZSwgQXJnOjpUbXAsIGFkZHJlc3Mua2luZCgpKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZChy
ZWxheGVkTW92ZUZvclR5cGUoYXRvbWljLT50eXBlKCkpLCB0bXAoYXRvbWljLT5jaGlsZCgwKSks
IHRtcChhdG9taWMpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoYXRvbWlj
KSwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBhcHBlbmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfQ0FO
T05JQ0FMX1dJRFRIKFhvciwgYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI3OTIsNjQgKzMzNTMsNyBAQCBwcml2YXRl
OgogICAgICAgICBkYXRhTG9nKCJGQVRBTDogY291bGQgbm90IGxvd2VyICIsIGRlZXBEdW1wKG1f
cHJvY2VkdXJlLCBtX3ZhbHVlKSwgIlxuIik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQotCi0gICAgdm9pZCBsb3dlclg4NkRpdihCMzo6T3Bjb2RlIG9wKQot
ICAgIHsKLSNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQotICAgICAgICBUbXAgZWF4ID0gVG1w
KFg4NlJlZ2lzdGVyczo6ZWF4KTsKLSAgICAgICAgVG1wIGVkeCA9IFRtcChYODZSZWdpc3RlcnM6
OmVkeCk7Ci0KLSAgICAgICAgQWlyOjpPcGNvZGUgY29udmVydFRvRG91YmxlV29yZDsKLSAgICAg
ICAgQWlyOjpPcGNvZGUgZGl2OwotICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPnR5cGUoKSkgewot
ICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4
NkNvbnZlcnRUb0RvdWJsZVdvcmQzMjsKLSAgICAgICAgICAgIGRpdiA9IFg4NkRpdjMyOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICBjb252ZXJ0
VG9Eb3VibGVXb3JkID0gWDg2Q29udmVydFRvUXVhZFdvcmQ2NDsKLSAgICAgICAgICAgIGRpdiA9
IFg4NkRpdjY0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKG9wID09IERpdiB8fCBvcCA9PSBNb2QpOwotICAg
ICAgICBYODZSZWdpc3RlcnM6OlJlZ2lzdGVySUQgcmVzdWx0ID0gb3AgPT0gRGl2ID8gWDg2UmVn
aXN0ZXJzOjplYXggOiBYODZSZWdpc3RlcnM6OmVkeDsKLQotICAgICAgICBhcHBlbmQoTW92ZSwg
dG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgZWF4KTsKLSAgICAgICAgYXBwZW5kKGNvbnZlcnRUb0Rv
dWJsZVdvcmQsIGVheCwgZWR4KTsKLSAgICAgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHRtcCht
X3ZhbHVlLT5jaGlsZCgxKSkpOwotICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKHJlc3VsdCksIHRt
cChtX3ZhbHVlKSk7Ci0KLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAg
IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdm9pZCBs
b3dlclg4NlVEaXYoQjM6Ok9wY29kZSBvcCkKLSAgICB7Ci0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4
Nl82NCkKLSAgICAgICAgVG1wIGVheCA9IFRtcChYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgICAg
IFRtcCBlZHggPSBUbXAoWDg2UmVnaXN0ZXJzOjplZHgpOwotCi0gICAgICAgIEFpcjo6T3Bjb2Rl
IGRpdiA9IG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IFg4NlVEaXYzMiA6IFg4NlVEaXY2NDsK
LQotICAgICAgICBBU1NFUlQob3AgPT0gVURpdiB8fCBvcCA9PSBVTW9kKTsKLSAgICAgICAgWDg2
UmVnaXN0ZXJzOjpSZWdpc3RlcklEIHJlc3VsdCA9IG9wID09IFVEaXYgPyBYODZSZWdpc3RlcnM6
OmVheCA6IFg4NlJlZ2lzdGVyczo6ZWR4OwotCi0gICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobV92
YWx1ZS0+Y2hpbGQoMCkpLCBlYXgpOwotICAgICAgICBhcHBlbmQoWG9yNjQsIGVkeCwgZWR4KTsK
LSAgICAgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkpOwot
ICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKHJlc3VsdCksIHRtcChtX3ZhbHVlKSk7Ci0jZWxzZQot
ICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZP
Uk0oKTsKLSNlbmRpZgotICAgIH0KLQorICAgIAogICAgIEluZGV4U2V0PFZhbHVlPiBtX2xvY2tl
ZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgogICAg
IEluZGV4TWFwPFZhbHVlLCBUbXA+IG1fdmFsdWVUb1RtcDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0
aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNheSB0aGF0IGEgVmFsdWUqIHdpdGggYSBu
b24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCiAgICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV9waGlU
b1RtcDsgLy8gRWFjaCBQaGkgZ2V0cyBpdHMgb3duIFRtcC4KQEAgLTI4NjQsNyArMzM2OCw3IEBA
IHByaXZhdGU6CiAKICAgICBWZWN0b3I8VmVjdG9yPEluc3QsIDQ+PiBtX2luc3RzOwogICAgIFZl
Y3RvcjxJbnN0PiBtX3Byb2xvZ3VlOwotCisgICAgCiAgICAgQjM6OkJhc2ljQmxvY2sqIG1fYmxv
Y2s7CiAgICAgYm9vbCBtX2lzUmFyZTsKICAgICB1bnNpZ25lZCBtX2luZGV4OwpAQCAtMjg3NSw2
ICszMzc5LDEyIEBAIHByaXZhdGU6CiAKICAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOwogICAg
IENvZGUmIG1fY29kZTsKKworICAgIEFpcjo6QmxvY2tJbnNlcnRpb25TZXQgbV9ibG9ja0luc2Vy
dGlvblNldDsKKworICAgIFRtcCBtX2VheDsKKyAgICBUbXAgbV9lY3g7CisgICAgVG1wIG1fZWR4
OwogfTsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDMwICszNCw0OCBAQCBNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVlKCkKIHsKIH0KIAorVHlwZSBN
ZW1vcnlWYWx1ZTo6YWNjZXNzVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZCgpKQorICAg
ICAgICByZXR1cm4gdHlwZSgpOworICAgIC8vIFRoaXMgaGFwcGVucyB0byB3b3JrIGZvciBhdG9t
aWNzLCB0b28uIFRoYXQncyB3aHkgQXRvbWljVmFsdWUgZG9lcyBub3QgbmVlZCB0byBvdmVycmlk
ZSB0aGlzLgorICAgIHJldHVybiBjaGlsZCgwKS0+dHlwZSgpOworfQorCitCYW5rIE1lbW9yeVZh
bHVlOjphY2Nlc3NCYW5rKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYmFua0ZvclR5cGUoYWNjZXNz
VHlwZSgpKTsKK30KKwogc2l6ZV90IE1lbW9yeVZhbHVlOjphY2Nlc3NCeXRlU2l6ZSgpIGNvbnN0
CiB7CisgICAgcmV0dXJuIGJ5dGVzKGFjY2Vzc1dpZHRoKCkpOworfQorCitXaWR0aCBNZW1vcnlW
YWx1ZTo6bG9hZFN0b3JlV2lkdGgoKSBjb25zdAorewogICAgIHN3aXRjaCAob3Bjb2RlKCkpIHsK
ICAgICBjYXNlIExvYWQ4WjoKICAgICBjYXNlIExvYWQ4UzoKICAgICBjYXNlIFN0b3JlODoKLSAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiBXaWR0aDg7CiAgICAgY2FzZSBMb2FkMTZa
OgogICAgIGNhc2UgTG9hZDE2UzoKICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIHJldHVybiAy
OworICAgICAgICByZXR1cm4gV2lkdGgxNjsKICAgICBjYXNlIExvYWQ6Ci0gICAgICAgIHJldHVy
biBzaXplb2ZUeXBlKHR5cGUoKSk7CisgICAgICAgIHJldHVybiB3aWR0aEZvclR5cGUodHlwZSgp
KTsKICAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXR1cm4gc2l6ZW9mVHlwZShjaGlsZCgwKS0+
dHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlwZShjaGlsZCgwKS0+dHlwZSgpKTsK
ICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIFdpZHRoODsKICAgICB9CiB9CiAKIFdpZHRo
IE1lbW9yeVZhbHVlOjphY2Nlc3NXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHdpZHRoRm9y
Qnl0ZXMoYWNjZXNzQnl0ZVNpemUoKSk7CisgICAgcmV0dXJuIGxvYWRTdG9yZVdpZHRoKCk7CiB9
CiAKIHZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC02NSw4ICs4MywxMSBAQCB2b2lkIE1lbW9yeVZhbHVlOjpk
dW1wTWV0YShDb21tYVByaW50ZXImCiAgICAgaWYgKG1fb2Zmc2V0KQogICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJvZmZzZXQgPSAiLCBtX29mZnNldCk7CiAgICAgaWYgKChpc0xvYWQoKSAmJiBl
ZmZlY3RzKCkucmVhZHMgIT0gcmFuZ2UoKSkKLSAgICAgICAgfHwgKGlzU3RvcmUoKSAmJiBlZmZl
Y3RzKCkud3JpdGVzICE9IHJhbmdlKCkpKQorICAgICAgICB8fCAoaXNTdG9yZSgpICYmIGVmZmVj
dHMoKS53cml0ZXMgIT0gcmFuZ2UoKSkKKyAgICAgICAgfHwgZmVuY2VSYW5nZSgpKQogICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJyYW5nZSA9ICIsIHJhbmdlKCkpOworICAgIGlmIChmZW5jZVJh
bmdlKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImZlbmNlUmFuZ2UgPSAiLCBmZW5jZVJh
bmdlKCkpOwogfQogCiBWYWx1ZSogTWVtb3J5VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CkBAIC03
NCw2ICs5NSw2MiBAQCBWYWx1ZSogTWVtb3J5VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CiAgICAg
cmV0dXJuIG5ldyBNZW1vcnlWYWx1ZSgqdGhpcyk7CiB9CiAKKy8vIFVzZSB0aGlzIGZvcm0gZm9y
IExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBo
YXZlIGEgc3VmZml4IHRoYXQKKy8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCitNZW1v
cnlWYWx1ZTo6TWVtb3J5VmFsdWUoS2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCwgSGVhcFJhbmdlIHJhbmdlLCBIZWFwUmFu
Z2UgZmVuY2VSYW5nZSkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUsIG9y
aWdpbiwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAsIG1fcmFuZ2UocmFu
Z2UpCisgICAgLCBtX2ZlbmNlUmFuZ2UoZmVuY2VSYW5nZSkKK3sKKyAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkgeworICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICAgICAgY2Fz
ZSBMb2FkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAg
ICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBjYXNlIExvYWQx
NlM6CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAg
Y2FzZSBTdG9yZToKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMg
d2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCitNZW1vcnlWYWx1ZTo6TWVtb3J5VmFs
dWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZz
ZXQsIEhlYXBSYW5nZSByYW5nZSwgSGVhcFJhbmdlIGZlbmNlUmFuZ2UpCisgICAgOiBNZW1vcnlW
YWx1ZShraW5kLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQsIHJhbmdlLCBmZW5jZVJh
bmdlKQoreworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIHN3aXRjaCAoa2lu
ZC5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6
CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVz
LgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQsIEhlYXBSYW5nZSByYW5n
ZSwgSGVhcFJhbmdlIGZlbmNlUmFuZ2UpCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5k
LCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICwgbV9vZmZzZXQob2Zmc2V0KQor
ICAgICwgbV9yYW5nZShyYW5nZSkKKyAgICAsIG1fZmVuY2VSYW5nZShmZW5jZVJhbmdlKQorewor
ICAgIEFTU0VSVChCMzo6aXNTdG9yZShraW5kLm9wY29kZSgpKSk7Cit9CisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMwogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNDggKzI3LDE3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNCYW5r
LmgiCiAjaW5jbHVkZSAiQjNIZWFwUmFuZ2UuaCIKICNpbmNsdWRlICJCM1ZhbHVlLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi0vLyBGSVhNRTogV2Ugd2FudCB0byBhbGxv
dyBmZW5jZWQgbWVtb3J5IGFjY2Vzc2VzIG9uIEFSTS4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzNDkKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgTWVt
b3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoS2luZCBraW5kKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7Ci0g
ICAgICAgIGNhc2UgTG9hZDhaOgotICAgICAgICBjYXNlIExvYWQ4UzoKLSAgICAgICAgY2FzZSBM
b2FkMTZaOgotICAgICAgICBjYXNlIExvYWQxNlM6Ci0gICAgICAgIGNhc2UgTG9hZDoKLSAgICAg
ICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9y
ZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaXNT
dG9yZShLaW5kIGtpbmQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsK
LSAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2Fz
ZSBTdG9yZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJv
b2wgaXNMb2FkKEtpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhY2NlcHRzKGtpbmQp
ICYmICFpc1N0b3JlKGtpbmQpOworICAgICAgICByZXR1cm4gaXNNZW1vcnlBY2Nlc3Moa2luZC5v
cGNvZGUoKSk7CiAgICAgfQogCiAgICAgfk1lbW9yeVZhbHVlKCk7CkBAIC03OCw3NiArNDcsNTgg
QEAgcHVibGljOgogCiAgICAgY29uc3QgSGVhcFJhbmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmFuZ2U7IH0KICAgICB2b2lkIHNldFJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsg
bV9yYW5nZSA9IHJhbmdlOyB9CisgICAgCisgICAgLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgcmFu
Z2UuCisgICAgY29uc3QgSGVhcFJhbmdlJiBhY2Nlc3NSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHJh
bmdlKCk7IH0KKyAgICB2b2lkIHNldEFjY2Vzc1JhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2Up
IHsgc2V0UmFuZ2UocmFuZ2UpOyB9CisgICAgCisgICAgY29uc3QgSGVhcFJhbmdlJiBmZW5jZVJh
bmdlKCkgY29uc3QgeyByZXR1cm4gbV9mZW5jZVJhbmdlOyB9CisgICAgdm9pZCBzZXRGZW5jZVJh
bmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9mZW5jZVJhbmdlID0gcmFuZ2U7IH0KKwor
ICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIEIzOjppc1N0b3JlKG9wY29kZSgpKTsg
fQorICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyByZXR1cm4gQjM6OmlzTG9hZChvcGNvZGUoKSk7
IH0KIAotICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBWb2lkOyB9
Ci0gICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgIT0gVm9pZDsgfQorICAg
IGJvb2wgaGFzRmVuY2UoKSBjb25zdCB7IHJldHVybiAhIWZlbmNlUmFuZ2UoKTsgfQogCisgICAg
VHlwZSBhY2Nlc3NUeXBlKCkgY29uc3Q7CisgICAgQmFuayBhY2Nlc3NCYW5rKCkgY29uc3Q7CiAg
ICAgc2l6ZV90IGFjY2Vzc0J5dGVTaXplKCkgY29uc3Q7Ci0gICAgV2lkdGggYWNjZXNzV2lkdGgo
KSBjb25zdDsKKyAgICAKKyAgICAvLyBTbGlnaHRseSBmYXN0ZXIgdmVyc2lvbiBvZiBhY2Nlc3NX
aWR0aCwgaWYgeW91IGtub3cgdGhhdCB5b3UncmUgd29ya2luZyB3aXRoIGEgbG9hZCBvciBzdG9y
ZS4KKyAgICBXaWR0aCBsb2FkU3RvcmVXaWR0aCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwg
V2lkdGggYWNjZXNzV2lkdGgoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZHVtcE1l
dGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBWYWx1ZSogY2xvbmVJbXBsKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29k
ZVRhZywgS2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGludDMyX3Qgb2Zmc2V0
LCBIZWFwUmFuZ2UgcmFuZ2UsIEhlYXBSYW5nZSBmZW5jZVJhbmdlLCBBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUsIG9yaWdp
biwgYXJndW1lbnRzLi4uKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgLCBt
X3JhbmdlKHJhbmdlKQorICAgICAgICAsIG1fZmVuY2VSYW5nZShmZW5jZVJhbmdlKQorICAgIHsK
KyAgICB9CisgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7Ci0KKyAg
ICAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhT
LCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CiAgICAgLy8gZGVz
Y3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQsIFR5
cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0g
MCkKLSAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4sIHBv
aW50ZXIpCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAsIG1fcmFuZ2UoSGVh
cFJhbmdlOjp0b3AoKSkKLSAgICB7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgTG9h
ZDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTG9hZDhaOgotICAg
ICAgICAgICAgY2FzZSBMb2FkOFM6Ci0gICAgICAgICAgICBjYXNlIExvYWQxNlo6Ci0gICAgICAg
ICAgICBjYXNlIExvYWQxNlM6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAg
ICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAg
ICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICBNZW1vcnlWYWx1ZShLaW5kLCBU
eXBlLCBPcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDAsIEhlYXBSYW5n
ZSByYW5nZSA9IEhlYXBSYW5nZTo6dG9wKCksIEhlYXBSYW5nZSBmZW5jZVJhbmdlID0gSGVhcFJh
bmdlKCkpOwogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVy
biB0eXBlIGlzIGltcGxpZWQuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAgICA6IE1lbW9y
eVZhbHVlKGtpbmQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCkKLSAgICB7Ci0gICAg
fQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qg
b2Zmc2V0ID0gMCwgSGVhcFJhbmdlIHJhbmdlID0gSGVhcFJhbmdlOjp0b3AoKSwgSGVhcFJhbmdl
IGZlbmNlUmFuZ2UgPSBIZWFwUmFuZ2UoKSk7CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBz
dG9yZXMuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
dmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDogVmFs
dWUoQ2hlY2tlZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKLSAg
ICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6OnRv
cCgpKQotICAgIHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAg
IHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAg
ICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFsdWUq
IHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwLCBIZWFwUmFuZ2UgcmFu
Z2UgPSBIZWFwUmFuZ2U6OnRvcCgpLCBIZWFwUmFuZ2UgZmVuY2VSYW5nZSA9IEhlYXBSYW5nZSgp
KTsKKyAgICAKICAgICBpbnQzMl90IG1fb2Zmc2V0IHsgMCB9OwotICAgIEhlYXBSYW5nZSBtX3Jh
bmdlOworICAgIEhlYXBSYW5nZSBtX3JhbmdlIHsgSGVhcFJhbmdlOjp0b3AoKSB9OworICAgIEhl
YXBSYW5nZSBtX2ZlbmNlUmFuZ2UgeyBIZWFwUmFuZ2UoKSB9OwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXRpdmVUcmFp
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXRpdmVUcmFp
dHMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXRpdmVU
cmFpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM0JhbmsuaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNp
bmNsdWRlICJCM1dpZHRoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IE5hdGl2ZVRyYWl0czsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgTmF0aXZlVHJhaXRzPGludDhfdD4geworICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBH
UDsKKyAgICBzdGF0aWMgY29uc3QgV2lkdGggd2lkdGggPSBXaWR0aDg7CisgICAgc3RhdGljIGNv
bnN0IFR5cGUgdHlwZSA9IEludDMyOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVHJh
aXRzPHVpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgQmFuayBiYW5rID0gR1A7CisgICAgc3Rh
dGljIGNvbnN0IFdpZHRoIHdpZHRoID0gV2lkdGg4OworICAgIHN0YXRpYyBjb25zdCBUeXBlIHR5
cGUgPSBJbnQzMjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVRyYWl0czxpbnQxNl90
PiB7CisgICAgc3RhdGljIGNvbnN0IEJhbmsgYmFuayA9IEdQOworICAgIHN0YXRpYyBjb25zdCBX
aWR0aCB3aWR0aCA9IFdpZHRoMTY7CisgICAgc3RhdGljIGNvbnN0IFR5cGUgdHlwZSA9IEludDMy
OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVHJhaXRzPHVpbnQxNl90PiB7CisgICAg
c3RhdGljIGNvbnN0IEJhbmsgYmFuayA9IEdQOworICAgIHN0YXRpYyBjb25zdCBXaWR0aCB3aWR0
aCA9IFdpZHRoMTY7CisgICAgc3RhdGljIGNvbnN0IFR5cGUgdHlwZSA9IEludDMyOworfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVHJhaXRzPGludDMyX3Q+IHsKKyAgICBzdGF0aWMgY29u
c3QgQmFuayBiYW5rID0gR1A7CisgICAgc3RhdGljIGNvbnN0IFdpZHRoIHdpZHRoID0gV2lkdGgz
MjsKKyAgICBzdGF0aWMgY29uc3QgVHlwZSB0eXBlID0gSW50MzI7Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBOYXRpdmVUcmFpdHM8dWludDMyX3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgQmFuayBi
YW5rID0gR1A7CisgICAgc3RhdGljIGNvbnN0IFdpZHRoIHdpZHRoID0gV2lkdGgzMjsKKyAgICBz
dGF0aWMgY29uc3QgVHlwZSB0eXBlID0gSW50MzI7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBO
YXRpdmVUcmFpdHM8aW50NjRfdD4geworICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBHUDsK
KyAgICBzdGF0aWMgY29uc3QgV2lkdGggd2lkdGggPSBXaWR0aDY0OworICAgIHN0YXRpYyBjb25z
dCBUeXBlIHR5cGUgPSBJbnQ2NDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVRyYWl0
czx1aW50NjRfdD4geworICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBHUDsKKyAgICBzdGF0
aWMgY29uc3QgV2lkdGggd2lkdGggPSBXaWR0aDY0OworICAgIHN0YXRpYyBjb25zdCBUeXBlIHR5
cGUgPSBJbnQ2NDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVRyYWl0czxmbG9hdD4g
eworICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBGUDsKKyAgICBzdGF0aWMgY29uc3QgV2lk
dGggd2lkdGggPSBXaWR0aDMyOworICAgIHN0YXRpYyBjb25zdCBUeXBlIHR5cGUgPSBGbG9hdDsK
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVRyYWl0czxkb3VibGU+IHsKKyAgICBzdGF0
aWMgY29uc3QgQmFuayBiYW5rID0gRlA7CisgICAgc3RhdGljIGNvbnN0IFdpZHRoIHdpZHRoID0g
V2lkdGg2NDsKKyAgICBzdGF0aWMgY29uc3QgVHlwZSB0eXBlID0gRG91YmxlOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02OCw2ICs2OCwyMyBAQCBzdGQ6Om9wdGlvbmFsPE9wY29kZT4gaW52ZXJ0ZWRDb21wYXJlKE9w
CiAgICAgfQogfQogCitPcGNvZGUgc3RvcmVPcGNvZGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0aCkK
K3sKKyAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICBjYXNlIEdQOgorICAgICAgICBzd2l0Y2ggKHdp
ZHRoKSB7CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAgcmV0dXJuIFN0b3JlODsK
KyAgICAgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICAgICAgcmV0dXJuIFN0b3JlMTY7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gU3RvcmU7CisgICAgICAgIH0KKyAgICBj
YXNlIEZQOgorICAgICAgICByZXR1cm4gU3RvcmU7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKIAogbmFtZXNwYWNlIFdURiB7CkBAIC0yNjMsNiArMjgwLDMzIEBAIHZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGMKICAgICBjYXNlIFN0b3JlOgogICAg
ICAgICBvdXQucHJpbnQoIlN0b3JlIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEF0b21p
Y1dlYWtDQVM6CisgICAgICAgIG91dC5wcmludCgiQXRvbWljV2Vha0NBUyIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAgIG91dC5wcmludCgiQXRv
bWljU3Ryb25nQ0FTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEF0b21pY1hjaGdBZGQ6
CisgICAgICAgIG91dC5wcmludCgiQXRvbWljWGNoZ0FkZCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgICAgICBvdXQucHJpbnQoIkF0b21pY1hjaGdBbmQi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgICAgICBvdXQu
cHJpbnQoIkF0b21pY1hjaGdPciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBdG9taWNY
Y2hnU3ViOgorICAgICAgICBvdXQucHJpbnQoIkF0b21pY1hjaGdTdWIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICAgICAgb3V0LnByaW50KCJBdG9taWNY
Y2hnWG9yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAg
IG91dC5wcmludCgiQXRvbWljWGNoZyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEZXBl
bmQ6CisgICAgICAgIG91dC5wcmludCgiRGVwZW5kIik7CisgICAgICAgIHJldHVybjsKICAgICBj
YXNlIFdhc21BZGRyZXNzOgogICAgICAgICBvdXQucHJpbnQoIldhc21BZGRyZXNzIik7CiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lv
biAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVk
ZSAiQjNUeXBlLmgiCisjaW5jbHVkZSAiQjNXaWR0aC5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtODIsNyArODMsNiBAQCBl
bnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIE1vZCwgLy8gQWxsIGJldHMgYXJlIG9mZiBhcyB0
byB3aGF0IHdpbGwgaGFwcGVuIHdoZW4geW91IGV4ZWN1dGUgdGhpcyBmb3IgLTJeMzElLTEgYW5k
IHglMC4KICAgICBVTW9kLAogCi0KICAgICAvLyBQb2x5bW9ycGhpYyBuZWdhdGlvbi4gTm90ZSB0
aGF0IHdlIG9ubHkgbmVlZCB0aGlzIGZvciBmbG9hdGluZyBwb2ludCwgc2luY2UgaW50ZWdlciBu
ZWdhdGlvbgogICAgIC8vIGlzIGV4YWN0bHkgbGlrZSBTdWIoMCwgeCkuIEJ1dCB0aGF0J3Mgbm90
IHRydWUgZm9yIGZsb2F0aW5nIHBvaW50LiBTdWIoMCwgMCkgaXMgMCwgd2hpbGUKICAgICAvLyBO
ZWcoMCkgaXMgLTAuIEFsc28sIHdlIGNhbm9uaWNhbGl6ZSBTdWIoMCwgeCkgaW50byBOZWcoeCkg
aW4gY2FzZSBvZiBpbnRlZ2Vycy4KQEAgLTE2Miw2ICsxNjIsMTA3IEBAIGVudW0gT3Bjb2RlIDog
aW50MTZfdCB7CiAgICAgU3RvcmUxNiwKICAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMgc3Rv
cmUgZm9yIEludDMyLCBJbnQ2NCwgRmxvYXQsIGFuZCBEb3VibGUuCiAgICAgU3RvcmUsCisgICAg
CisgICAgLy8gQXRvbWljIGNvbXBhcmUgYW5kIHN3YXAgdGhhdCByZXR1cm5zIGEgYm9vbGVhbi4g
TWF5IGNob29zZSB0byBkbyBub3RoaW5nIGFuZCByZXR1cm4gZmFsc2UuIFlvdSBjYW4KKyAgICAv
LyB1c3VhbGx5IGFzc3VtZSB0aGF0IHRoaXMgaXMgZmFzdGVyIGFuZCByZXN1bHRzIGluIGxlc3Mg
Y29kZSB0aGFuIEF0b21pY1N0cm9uZ0NBUywgdGhvdWdoIHRoYXQncworICAgIC8vIG5vdCBuZWNl
c3NhcmlseSB0cnVlIG9uIEludGVsLCBpZiBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gZG9lcyBpdHMg
am9iLiBJbWFnaW5lIHRoYXQgdGhpcyBvcGNvZGUgaXMKKyAgICAvLyBhcyBpZiB5b3UgZGlkIHRo
aXMgYXRvbWljYWxseToKKyAgICAvLworICAgIC8vIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
Ly8gYm9vbCBBdG9taWNXZWFrQ0FTKFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSwgVCogcHRy
KQorICAgIC8vIHsKKyAgICAvLyAgICAgaWYgKCFyYW5kKCkpCisgICAgLy8gICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIFJlYWwgd29ybGQgZXhhbXBsZSBvZiB0aGlzOiBjb250ZXh0IHN3aXRjaCBv
biBBUk0gd2hpbGUgZG9pbmcgQ0FTLgorICAgIC8vICAgICBpZiAoKnB0ciAhPSBleHBlY3RlZFZh
bHVlKQorICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vICAgICAqcHRyID0gbmV3
VmFsdWU7CisgICAgLy8gICAgIHJldHVybiB0cnVlOworICAgIC8vIH0KKyAgICAvLworICAgIC8v
IE5vdGUgdGhhdCBhbGwgYXRvbWljcyBwdXQgdGhlIHBvaW50ZXIgbGFzdCB0byBiZSBjb25zaXN0
ZW50IHdpdGggaG93IGxvYWRzIGFuZCBzdG9yZXMgd29yay4gVGhpcworICAgIC8vIGlzIGEgZ29v
ZnkgdHJhZGl0aW9uLCBidXQgaXQncyBoYXJtbGVzcywgYW5kIGJldHRlciB0aGFuIGJlaW5nIGlu
Y29uc2lzdGVudC4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB3ZWFrIENBUyBoYXMgbm8gZmVu
Y2luZyBndWFyYW50ZWVzIHdoZW4gaXQgZmFpbHMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93
aW5nCisgICAgLy8gdHJhbnNmb3JtYXRpb24gaXMgYWx3YXlzIHZhbGlkOgorICAgIC8vCisgICAg
Ly8gQmVmb3JlOgorICAgIC8vCisgICAgLy8gICAgICAgICBCcmFuY2goQXRvbWljV2Vha0NBUyhl
eHBlY3RlZCwgbmV3LCBwdHIpKQorICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I3N1Y2Nl
c3MsIEVsc2U6I2ZhaWwKKyAgICAvLworICAgIC8vIEFmdGVyOgorICAgIC8vCisgICAgLy8gICAg
ICAgICBCcmFuY2goRXF1YWwoTG9hZChwdHIpLCBleHBlY3RlZCkpCisgICAgLy8gICAgICAgU3Vj
Y2Vzc29yczogVGhlbjojYXR0ZW1wdCwgRWxzZTojZmFpbAorICAgIC8vICAgICBCQiNhdHRlbXB0
OgorICAgIC8vICAgICAgICAgQnJhbmNoKEF0b21pY1dlYWtDQVMoZXhwZWN0ZWQsIG5ldywgcHRy
KSkKKyAgICAvLyAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiNzdWNjZXNzLCBFbHNlOiNmYWlsCisg
ICAgLy8KKyAgICAvLyBCb3RoIGtpbmRzIG9mIENBUyBmb3Igbm9uLWNhbm9uaWNhbCB3aWR0aHMg
KFdpZHRoOCBhbmQgV2lkdGgxNikgaWdub3JlIHRoZSBpcnJlbGV2YW50IGJpdHMgb2YgdGhlCisg
ICAgLy8gaW5wdXQuCisgICAgQXRvbWljV2Vha0NBUywKKyAgICAKKyAgICAvLyBBdG9taWMgY29t
cGFyZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgdGhlIG9sZCB2YWx1ZS4gRG9lcyBub3QgaGF2ZSB0
aGUgbm9uZGV0ZXJtaW5pc20gb2YgV2Vha0NBUy4KKyAgICAvLyBUaGlzIGlzIGEgYml0IG1vcmUg
Y29kZSBhbmQgYSBiaXQgc2xvd2VyIGluIHNvbWUgY2FzZXMsIHRob3VnaCBub3QgYnkgYSBsb3Qu
IEltYWdpbmUgdGhhdCB0aGlzCisgICAgLy8gb3Bjb2RlIGlzIGFzIGlmIHlvdSBkaWQgdGhpcyBh
dG9taWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAvLyBU
IEF0b21pY1N0cm9uZ0NBUyhUIGV4cGVjdGVkVmFsdWUsIFQgbmV3VmFsdWUsIFQqIHB0cikKKyAg
ICAvLyB7CisgICAgLy8gICAgIFQgb2xkVmFsdWUgPSAqcHRyOworICAgIC8vICAgICBpZiAob2xk
VmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZSkKKyAgICAvLyAgICAgICAgICpwdHIgPSBuZXdWYWx1ZTsK
KyAgICAvLyAgICAgcmV0dXJuIG9sZFZhbHVlCisgICAgLy8gfQorICAgIC8vCisgICAgLy8gTm90
ZSB0aGF0IEF0b21pY1dlYWtDQVMgYW5kIEF0b21pY1N0cm9uZ0NBUyBzb3J0IG9mIGhhdmUgdGhp
cyBraW5kIG9mIGVxdWl2YWxlbmNlOgorICAgIC8vCisgICAgLy8gQXRvbWljV2Vha0NBUyhAZXhw
LCBAbmV3LCBAcHRyKSA9PSBFcXVhbChBdG9taWNTdHJvbmdDQVMoQGV4cCwgQG5ldywgQHB0ciks
IEBleHApCisgICAgLy8KKyAgICAvLyBBc3N1bWluZyB0aGF0IHRoZSBXZWFrQ0FTIGRvZXMgbm90
IHNwdXJpb3VzbHkgZmFpbCwgb2YgY291cnNlLgorICAgIEF0b21pY1N0cm9uZ0NBUywKKyAgICAK
KyAgICAvLyBBdG9taWNhbGx5IF9fXyBhIG1lbW9yeSBsb2NhdGlvbiBhbmQgcmV0dXJuIHRoZSBv
bGQgdmFsdWUuIFN5bnRheDoKKyAgICAvLworICAgIC8vIEBvbGRWYWx1ZSA9IEF0b21pY1hjaGdf
X18oQG9wZXJhbmQsIEBwdHIpCisgICAgLy8KKyAgICAvLyBGb3Igbm9uLWNhbm9uaWNhbCB3aWR0
aHMgKFdpZHRoOCBhbmQgV2lkdGgxNiksIHRoZXNlIHJldHVybiBzaWduLWV4dGVuZGVkIHJlc3Vs
dHMgYW5kIGlnbm9yZSB0aGUKKyAgICAvLyBpcnJlbGV2YW50IGJpdHMgb2YgdGhlaXIgaW5wdXRz
LgorICAgIEF0b21pY1hjaGdBZGQsCisgICAgQXRvbWljWGNoZ0FuZCwKKyAgICBBdG9taWNYY2hn
T3IsCisgICAgQXRvbWljWGNoZ1N1YiwKKyAgICBBdG9taWNYY2hnWG9yLAorICAgIAorICAgIC8v
IEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgaGF2ZSBBdG9taWNYY2hnTmVnIGFuZCBBdG9taWNYY2hn
Tm90LgorICAgIAorICAgIC8vIEF0b21pY2FsbHkgZXhjaGFuZ2UgYSB2YWx1ZSB3aXRoIGEgbWVt
b3J5IGxvY2F0aW9uLiBTeW50YXg6CisgICAgLy8KKyAgICAvLyBAb2xkVmFsdWUgPSBBdG9taWNY
Y2hnKEBuZXdWYWx1ZSwgQHB0cikKKyAgICBBdG9taWNYY2hnLAorICAgIAorICAgIC8vIEludHJv
ZHVjZSBhbiBpbnZpc2libGUgZGVwZW5kZW5jeSBmb3IgYmxvY2tpbmcgbW90aW9uIG9mIGxvYWRz
IHdpdGggcmVzcGVjdCB0byBlYWNoIG90aGVyLiBTeW50YXg6CisgICAgLy8KKyAgICAvLyBAcmVz
dWx0ID0gRGVwZW5kKEBwaGFudG9tKQorICAgIC8vCisgICAgLy8gVGhpcyBpcyBldmVudHVhbGx5
IGNvZGVnZW5lcmF0ZWQgdG8gaGF2ZSBsb2NhbCBzZW1hbnRpY3MgYXMgaWYgd2UgZGlkOgorICAg
IC8vCisgICAgLy8gQHJlc3VsdCA9ICQwCisgICAgLy8KKyAgICAvLyBCdXQgaXQgZW5zdXJlcyB0
aGF0IHRoZSB1c2VycyBvZiBAcmVzdWx0IGNhbm5vdCBleGVjdXRlIHVudGlsIEBwaGFudG9tIGlz
IGNvbXB1dGVkLgorICAgIC8vCisgICAgLy8gVGhlIGNvbXBpbGVyIGlzIG5vdCBhbGxvd2VkIHRv
IHJlYXNvbiBhYm91dCB0aGUgZmFjdCB0aGF0IERlcGVuZCBjb2RlZ2VuZXJhdGVzIHRoaXMgd2F5
LiBBbnkga2luZAorICAgIC8vIG9mIHRyYW5zZm9ybWF0aW9uIG9yIGFuYWx5c2lzIHRoYXQgcmVs
aWVzIG9uIHRoZSBpbnNpZ2h0IHRoYXQgRGVwZW5kIGlzIHJlYWxseSB6ZXJvIGlzIHVuc291bmQs
CisgICAgLy8gYmVjYXVzZSBpdCB1bmxvY2tzIHJlb3JkZXJpbmcgb2YgdXNlcnMgb2YgQHJlc3Vs
dCBhbmQgQHBoYW50b20uCisgICAgLy8KKyAgICAvLyBPbiBYODYsIHRoaXMgaXMgbG93ZXJlZCB0
byBhIGxvYWQtbG9hZCBmZW5jZSBhbmQgQHJlc3VsdCB1c2VzIEBwaGFudG9tIGRpcmVjdGx5Lgor
ICAgIC8vCisgICAgLy8gT24gQVJNLCB0aGlzIGlzIGxvd2VyZWQgYXMgaWYgbGlrZToKKyAgICAv
LworICAgIC8vIEByZXN1bHQgPSBCaXRYb3IoQHBoYW50b20sIEBwaGFudG9tKQorICAgIC8vCisg
ICAgLy8gRXhjZXB0IHRoYXQgdGhlIGNvbXBpbGVyIG5ldmVyIGdldHMgYW4gb3Bwb3J0dW5pdHkg
dG8gc2ltcGxpZnkgb3V0IHRoZSBCaXRYb3IuCisgICAgRGVwZW5kLAogCiAgICAgLy8gVGhpcyBp
cyB1c2VkIHRvIGNvbXB1dGUgdGhlIGFjdHVhbCBhZGRyZXNzIG9mIGEgV2FzbSBtZW1vcnkgb3Bl
cmF0aW9uLiBJdCB0YWtlcyBhbiBJbnRQdHIKICAgICAvLyBhbmQgYSBwaW5uZWQgcmVnaXN0ZXIg
dGhlbiBjb21wdXRlcyB0aGUgYXBwcm9wcmlhdGUgSW50UHRyIGFkZHJlc3MuIEZvciB0aGUgdXNl
LWNhc2Ugb2YKQEAgLTMwMSw2ICs0MDIsMTEyIEBAIGlubGluZSBib29sIGlzRGVmaW5pdGVseVRl
cm1pbmFsKE9wY29kZSAKICAgICB9CiB9CiAKK2lubGluZSBib29sIGlzTG9hZChPcGNvZGUgb3Bj
b2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBMb2FkOFo6CisgICAgY2Fz
ZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgorICAgIGNhc2UgTG9hZDE2UzoKKyAgICBjYXNl
IExvYWQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzU3RvcmUoT3Bjb2RlIG9wY29kZSkK
K3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgU3RvcmU4OgorICAgIGNhc2UgU3Rv
cmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0xvYWRT
dG9yZShPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBM
b2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgorICAgIGNhc2UgTG9h
ZDE2UzoKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBTdG9yZTg6CisgICAgY2FzZSBTdG9yZTE2
OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzQXRvbWljKE9w
Y29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIEF0b21pY1dl
YWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgY2FzZSBBdG9taWNYY2hnQWRk
OgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBj
YXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRv
bWljWGNoZzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNBdG9taWNDQVMoT3Bjb2RlIG9w
Y29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoK
KyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNB
dG9taWNYY2hnKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBj
YXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2UgQXRv
bWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hjaGdY
b3I6CisgICAgY2FzZSBBdG9taWNYY2hnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc01l
bW9yeUFjY2VzcyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHJldHVybiBpc0F0b21pYyhvcGNvZGUp
IHx8IGlzTG9hZFN0b3JlKG9wY29kZSk7Cit9CisKK2lubGluZSBPcGNvZGUgc2lnbkV4dGVuZE9w
Y29kZShXaWR0aCB3aWR0aCkKK3sKKyAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgY2FzZSBXaWR0
aDg6CisgICAgICAgIHJldHVybiBTRXh0ODsKKyAgICBjYXNlIFdpZHRoMTY6CisgICAgICAgIHJl
dHVybiBTRXh0MTY7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9vcHM7CisgICAgfQorfQorCitKU19FWFBPUlRfUFJJ
VkFURSBPcGNvZGUgc3RvcmVPcGNvZGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0aCk7CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAy
LDYgKzIwMiw4IEBAIHZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKICAg
ICAgICAgfQogICAgICAgICBkYXRhTG9nKCIgICAgIiwgZGVlcER1bXAoKnRoaXMsIHZhbHVlKSwg
IlxuIik7CiAgICAgfQorICAgIGlmIChoYXNRdWlya3MoKSkKKyAgICAgICAgb3V0LnByaW50KCJI
YXMgUXVpcmtzOiBUcnVlXG4iKTsKICAgICBpZiAodmFyaWFibGVzKCkuc2l6ZSgpKSB7CiAgICAg
ICAgIG91dC5wcmludCgiVmFyaWFibGVzOlxuIik7CiAgICAgICAgIGZvciAoVmFyaWFibGUqIHZh
cmlhYmxlIDogdmFyaWFibGVzKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNyBAQCBwdWJsaWM6CiAg
ICAgVmFsdWUqIGFkZEludENvbnN0YW50KE9yaWdpbiwgVHlwZSwgaW50NjRfdCB2YWx1ZSk7CiAg
ICAgVmFsdWUqIGFkZEludENvbnN0YW50KFZhbHVlKiwgaW50NjRfdCB2YWx1ZSk7CiAKKyAgICAv
LyBZb3UncmUgZ3VhcmFudGVlZCB0aGF0IGJvdHRvbSBpcyB6ZXJvLgogICAgIFZhbHVlKiBhZGRC
b3R0b20oT3JpZ2luLCBUeXBlKTsKICAgICBWYWx1ZSogYWRkQm90dG9tKFZhbHVlKik7CiAKQEAg
LTE5NSw2ICsxOTYsMTIgQEAgcHVibGljOgogICAgIC8vIGFsaXZlLiBHcmVhdCBmb3IgY29tcGls
ZXItZ2VuZXJhdGVkIGRhdGEgc2VjdGlvbnMsIGxpa2Ugc3dpdGNoIGp1bXAgdGFibGVzIGFuZCBj
b25zdGFudCBwb29scy4KICAgICAvLyBUaGlzIHJldHVybnMgbWVtb3J5IHRoYXQgaGFzIGJlZW4g
emVyby1pbml0aWFsaXplZC4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhZGREYXRhU2Vj
dGlvbihzaXplX3QpOworICAgIAorICAgIC8vIFNvbWUgb3BlcmF0aW9ucyBhcmUgc3BlY2lmaWVk
IGluIEIzIElSIHRvIGJlaGF2ZSBvbmUgd2F5IGJ1dCBvbiB0aGlzIGdpdmVuIENQVSB0aGV5IGJl
aGF2ZSBhCisgICAgLy8gZGlmZmVyZW50IHdheS4gV2hlbiB0cnVlLCB0aG9zZSBCMyBJUiBvcHMg
c3dpdGNoIHRvIGJlaGF2aW5nIHRoZSBDUFUgd2F5LCBhbmQgdGhlIG9wdGltaXplciBtYXkKKyAg
ICAvLyBzdGFydCB0YWtpbmcgYWR2YW50YWdlIG9mIGl0LgorICAgIGJvb2wgaGFzUXVpcmtzKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNRdWlya3M7IH0KKyAgICB2b2lkIHNldEhhc1F1aXJrcyhib29s
IHZhbHVlKSB7IG1faGFzUXVpcmtzID0gdmFsdWU7IH0KIAogICAgIE9wYXF1ZUJ5cHJvZHVjdHMm
IGJ5cHJvZHVjdHMoKSB7IHJldHVybiAqbV9ieXByb2R1Y3RzOyB9CiAKQEAgLTI1Miw2ICsyNTks
NyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoUHJpbnRTdHJlYW0mLCBP
cmlnaW4pPj4gbV9vcmlnaW5QcmludGVyOwogICAgIGNvbnN0IHZvaWQqIG1fZnJvbnRlbmREYXRh
OwogICAgIFBDVG9PcmlnaW5NYXAgbV9wY1RvT3JpZ2luTWFwOworICAgIGJvb2wgbV9oYXNRdWly
a3MgeyBmYWxzZSB9OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAy
MTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQog
CisjaW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGlu
ZXMuaCIKICNpbmNsdWRlICJCM0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQjNDb21w
dXRlRGl2aXNpb25NYWdpYy5oIgpAQCAtNjAyLDcgKzYwMyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGJyZWFrOwotCisgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBOZWc6CiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE5lZyhjb25zdGFudCkKICAgICAgICAg
ICAgIC8vIEludG8gdGhpczogLWNvbnN0YW50CkBAIC0xMjk1LDYgKzEyOTYsMTYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fcHJvYy5oYXNRdWlya3Mo
KSkgeworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDgoQXRvbWljWGNoZ19fXykK
KyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEF0b21pY1hjaGdfX18KKyAgICAgICAgICAg
ICAgICBpZiAoaXNBdG9taWNYY2hnKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVlPigpLT5v
cGVyYXRpb25XaWR0aCgpID09IFdpZHRoOCkgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBTRXh0MTY6CkBAIC0xMzQzLDYgKzEzNTQsMTYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIW1fcHJvYy5oYXNRdWlya3MoKSkgeworICAgICAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KEF0b21pY1hjaGdfX18pCisgICAgICAgICAgICAg
ICAgLy8gSW50byB0aGlzOiBBdG9taWNYY2hnX19fCisgICAgICAgICAgICAgICAgaWYgKGlzQXRv
bWljWGNoZyhtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpCisgICAgICAgICAgICAgICAgICAg
ICYmIG1fdmFsdWUtPmNoaWxkKDApLT5hczxBdG9taWNWYWx1ZT4oKS0+b3BlcmF0aW9uV2lkdGgo
KSA9PSBXaWR0aDE2KSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHko
bV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBj
YXNlIFNFeHQzMjoKQEAgLTIxMDEsMjIgKzIxMjIsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgQVNT
RVJUKG1fdmFsdWUtPm51bUNoaWxkcmVuKCkgPj0gMik7CiAgICAgICAgIAogICAgICAgICAvLyBM
ZWF2ZSBpdCBhbG9uZSBpZiB0aGUgcmlnaHQgY2hpbGQgaXMgYSBjb25zdGFudC4KLSAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0NvbnN0YW50KCkpCisgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgxKS0+aXNDb25zdGFudCgpCisgICAgICAgICAgICB8fCBtX3ZhbHVlLT5jaGlsZCgw
KS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKLSAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgYXV0byBzd2FwID0gWyZdICgpIHsKICAgICAgICAgICAgIHN0ZDo6c3dhcChtX3ZhbHVl
LT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCisgICAgICAgIH07CisgICAg
ICAgIAorICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzd2FwKCk7CisgICAgICAgIAorICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMSktPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUykKKyAgICAgICAgICAgIHJldHVybiBz
d2FwKCk7CisgICAgICAgIAogICAgICAgICAvLyBTb3J0IHRoZSBvcGVyYW5kcy4gVGhpcyBpcyBh
biBpbXBvcnRhbnQgY2Fub25pY2FsaXphdGlvbi4gV2UgdXNlIHRoZSBpbmRleCBpbnN0ZWFkIG9m
CiAgICAgICAgIC8vIHRoZSBhZGRyZXNzIHRvIG1ha2UgdGhpcyBhdCBsZWFzdCBzbGlnaHRseSBk
ZXRlcm1pbmlzdGljLgotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmluZGV4KCkgPiBt
X3ZhbHVlLT5jaGlsZCgxKS0+aW5kZXgoKSkgewotICAgICAgICAgICAgc3RkOjpzd2FwKG1fdmFs
dWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+aW5kZXgoKSA+IG1fdmFsdWUtPmNoaWxkKDEpLT5pbmRleCgpKQorICAg
ICAgICAgICAgcmV0dXJuIHN3YXAoKTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgcmVhbGx5IGJlIGEgZm9yd2FyZCBhbmFseXNpcy4gSW5zdGVhZCwgd2UgdXNlcyBhIGJvdW5k
ZWQtc2VhcmNoIGJhY2t3YXJkcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
aWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlk
YXRlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVk
ZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgorI2luY2x1ZGUg
IkIzQXRvbWljVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQjNEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgpAQCAtMzQ2
LDYgKzM0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVt
Q2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZh
bHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsK
ICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTG9hZDoKQEAgLTM1Myw2ICszNTUsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0g
MSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hp
bGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAg
ICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgU3RvcmU4OgpAQCAtMzYyLDYgKzM2NSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQzMiwgKCJB
dCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSkt
PnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICB2YWxpZGF0ZUZlbmNlKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWxp
ZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgU3RvcmU6CkBAIC0zNjksOCArMzczLDQ5IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBv
aW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nl
c3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdG9t
aWNXZWFrQ0FTOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmlzQ2hp
bGwoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+
bnVtQ2hpbGRyZW4oKSA9PSAzLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxk
KDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
aXNJbnQodmFsdWUtPmNoaWxkKDApLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgyKS0+dHlwZSgpID09IHBvaW50ZXJUeXBl
KCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFs
dWUpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaXNDaGlsbCgpLCAoIkF0ICIsICp2
YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09
IDMsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5
cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgxKS0+dHlw
ZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZh
bHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5jaGlsZCgyKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVl
KSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOworICAgICAgICAgICAg
ICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgICAgICAgICAgY2FzZSBBdG9taWNY
Y2hnQW5kOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnT3I6CisgICAgICAgICAgICBjYXNl
IEF0b21pY1hjaGdTdWI6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdYb3I6CisgICAgICAg
ICAgICBjYXNlIEF0b21pY1hjaGc6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5r
aW5kKCkuaXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUo
KSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1
ZS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIHZhbGlkYXRlQXRvbWljKHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICB2YWxpZGF0ZVN0YWNrQWNjZXNzKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgRGVwZW5kOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+
a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCkt
PnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0lu
dCh2YWx1ZS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgV2FzbUFkZHJlc3M6CiAgICAgICAgICAgICAgICAgVkFMSURB
VEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAq
dmFsdWUpKTsKQEAgLTUzNyw2ICs1ODIsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGVGZW5jZShWYWx1ZSog
dmFsdWUpCisgICAgeworICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1l
bW9yeVZhbHVlPigpOworICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKQorICAgICAgICAg
ICAgVkFMSURBVEUobWVtb3J5LT5hY2Nlc3NCYW5rKCkgPT0gR1AsICgiRmVuY2UgYXQgIiwgKm1l
bW9yeSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlQXRvbWljKFZhbHVlKiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSB2YWx1ZS0+YXM8QXRvbWlj
VmFsdWU+KCk7CisgICAgICAgIAorICAgICAgICBWQUxJREFURShiZXN0VHlwZShHUCwgYXRvbWlj
LT5vcGVyYXRpb25XaWR0aCgpKSA9PSBhdG9taWMtPm9wZXJhdGlvblR5cGUoKSwgKCJBdCAiLCAq
dmFsdWUpKTsKKyAgICB9CiAKICAgICB2b2lkIHZhbGlkYXRlU3RhY2tBY2Nlc3MoVmFsdWUqIHZh
bHVlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlz
aW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5j
bHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgog
I2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJCM0JvdHRvbVByb3Zp
ZGVyLmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCkBAIC01MTAsNiArNTExLDcgQEAgYm9v
bCBWYWx1ZTo6cmV0dXJuc0Jvb2woKSBjb25zdAogICAgIGNhc2UgQWJvdmVFcXVhbDoKICAgICBj
YXNlIEJlbG93RXF1YWw6CiAgICAgY2FzZSBFcXVhbE9yVW5vcmRlcmVkOgorICAgIGNhc2UgQXRv
bWljV2Vha0NBUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBQaGk6CiAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHN0b3J5IGhlcmUuCkBAIC01ODksNiArNTkxLDcg
QEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgY2FzZSBCZWxvd0VxdWFsOgog
ICAgIGNhc2UgRXF1YWxPclVub3JkZXJlZDoKICAgICBjYXNlIFNlbGVjdDoKKyAgICBjYXNlIERl
cGVuZDoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBEaXY6CiAgICAgY2FzZSBVRGl2OgpAQCAt
NjAwLDE2ICs2MDMsNDQgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgY2Fz
ZSBMb2FkOFM6CiAgICAgY2FzZSBMb2FkMTZaOgogICAgIGNhc2UgTG9hZDE2UzoKLSAgICBjYXNl
IExvYWQ6Ci0gICAgICAgIHJlc3VsdC5yZWFkcyA9IGFzPE1lbW9yeVZhbHVlPigpLT5yYW5nZSgp
OworICAgIGNhc2UgTG9hZDogeworICAgICAgICBjb25zdCBNZW1vcnlWYWx1ZSogbWVtb3J5ID0g
YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+cmFuZ2Uo
KTsKKyAgICAgICAgaWYgKG1lbW9yeS0+aGFzRmVuY2UoKSkgeworICAgICAgICAgICAgcmVzdWx0
LndyaXRlcyA9IG1lbW9yeS0+ZmVuY2VSYW5nZSgpOworICAgICAgICAgICAgcmVzdWx0LmZlbmNl
ID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICByZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRy
dWU7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIFN0b3JlODoKICAgICBjYXNlIFN0
b3JlMTY6Ci0gICAgY2FzZSBTdG9yZToKLSAgICAgICAgcmVzdWx0LndyaXRlcyA9IGFzPE1lbW9y
eVZhbHVlPigpLT5yYW5nZSgpOworICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAgY29uc3QgTWVt
b3J5VmFsdWUqIG1lbW9yeSA9IGFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICByZXN1bHQud3Jp
dGVzID0gbWVtb3J5LT5yYW5nZSgpOworICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKSB7
CisgICAgICAgICAgICByZXN1bHQucmVhZHMgPSBtZW1vcnktPmZlbmNlUmFuZ2UoKTsKKyAgICAg
ICAgICAgIHJlc3VsdC5mZW5jZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmNv
bnRyb2xEZXBlbmRlbnQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBB
dG9taWNXZWFrQ0FTOgorICAgIGNhc2UgQXRvbWljU3Ryb25nQ0FTOgorICAgIGNhc2UgQXRvbWlj
WGNoZ0FkZDoKKyAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgY2FzZSBBdG9taWNYY2hnT3I6
CisgICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICBj
YXNlIEF0b21pY1hjaGc6IHsKKyAgICAgICAgY29uc3QgQXRvbWljVmFsdWUqIGF0b21pYyA9IGFz
PEF0b21pY1ZhbHVlPigpOworICAgICAgICByZXN1bHQucmVhZHMgPSBhdG9taWMtPnJhbmdlKCkg
fCBhdG9taWMtPmZlbmNlUmFuZ2UoKTsKKyAgICAgICAgcmVzdWx0LndyaXRlcyA9IGF0b21pYy0+
cmFuZ2UoKSB8IGF0b21pYy0+ZmVuY2VSYW5nZSgpOworICAgICAgICBpZiAoYXRvbWljLT5oYXNG
ZW5jZSgpKQorICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0
LmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2Fz
ZSBXYXNtQWRkcmVzczoKICAgICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAg
ICAgYnJlYWs7CkBAIC02MTcsMTggKzY0OCw3IEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBj
b25zdAogICAgICAgICBjb25zdCBGZW5jZVZhbHVlKiBmZW5jZSA9IGFzPEZlbmNlVmFsdWU+KCk7
CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IGZlbmNlLT5yZWFkOwogICAgICAgICByZXN1bHQud3Jp
dGVzID0gZmVuY2UtPndyaXRlOwotICAgICAgICAKLSAgICAgICAgLy8gUHJldmVudCBraWxsaW5n
IG9mIGZlbmNlcyB0aGF0IGNsYWltIG5vdCB0byB3cml0ZSBhbnl0aGluZy4gSXQncyBhIGJpdCB3
ZWlyZCB0aGF0IHdlIHVzZQotICAgICAgICAvLyBsb2NhbCBzdGF0ZSBhcyB0aGUgd2F5IHRvIGRv
IHRoaXMsIGJ1dCBpdCBoYXBwZW5zIHRvIHdvcms6IHdlIG11c3QgYXNzdW1lIHRoYXQgd2UgY2Fu
bm90Ci0gICAgICAgIC8vIGtpbGwgd3JpdGVzTG9jYWxTdGF0ZSB1bmxlc3Mgd2UgdW5kZXJzdGFu
ZHMgZXhhY3RseSB3aGF0IHRoZSBpbnN0cnVjdGlvbiBpcyBkb2luZyAobGlrZQotICAgICAgICAv
LyB0aGUgd2F5IHRoYXQgZml4U1NBIHVuZGVyc3RhbmRzIFNldC9HZXQgYW5kIHRoZSB3YXkgdGhh
dCByZWR1Y2VTdHJlbmd0aCBhbmQgb3RoZXJzCi0gICAgICAgIC8vIHVuZGVyc3RhbmQgVXBzaWxv
bikuIFRoaXMgd291bGQgb25seSBiZWNvbWUgYSBwcm9ibGVtIGlmIHdlIGhhZCBzb21lIGFuYWx5
c2lzIHRoYXQgd2FzCi0gICAgICAgIC8vIGxvb2tpbmcgdG8gdXNlIHRoZSB3cml0ZXNMb2NhbFN0
YXRlIGJpdCB0byBpbnZhbGlkYXRlIGEgQ1NFIG92ZXIgbG9jYWwgc3RhdGUgb3BlcmF0aW9ucy4K
LSAgICAgICAgLy8gVGhlbiBhIEZlbmNlIHdvdWxkIGxvb2sgYmxvY2ssIHNheSwgdGhlIGVsaW1p
bmF0aW9uIG9mIGEgcmVkdW5kYW50IEdldC4gQnV0IGl0IGxpa2UKLSAgICAgICAgLy8gdGhhdCdz
IG5vdCBhdCBhbGwgaG93IG91ciBvcHRpbWl6YXRpb25zIGZvciBTZXQvR2V0L1Vwc2lsb24vUGhp
IHdvcmsgLSB0aGV5IGdyb2sgdGhlaXIKLSAgICAgICAgLy8gb3BlcmF0aW9ucyBkZWVwbHkgZW5v
dWdoIHRoYXQgdGhleSBoYXZlIG5vIG5lZWQgdG8gY2hlY2sgdGhpcyBiaXQgLSBzbyB0aGlzIGNo
ZWF0IGlzCi0gICAgICAgIC8vIGZpbmUuCi0gICAgICAgIHJlc3VsdC53cml0ZXNMb2NhbFN0YXRl
ID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgQ0NhbGw6CkBAIC02OTQsNiArNzE0LDcgQEAgVmFsdWVLZXkgVmFsdWU6
OmtleSgpIGNvbnN0CiAgICAgY2FzZSBDaGVjazoKICAgICBjYXNlIEJpdHdpc2VDYXN0OgogICAg
IGNhc2UgTmVnOgorICAgIGNhc2UgRGVwZW5kOgogICAgICAgICByZXR1cm4gVmFsdWVLZXkoa2lu
ZCgpLCB0eXBlKCksIGNoaWxkKDApKTsKICAgICBjYXNlIEFkZDoKICAgICBjYXNlIFN1YjoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiAr
NjgsMTEgQEAgcHVibGljOgogICAgIAogICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVy
biBraW5kKCkub3Bjb2RlKCk7IH0KICAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIGtpbmQgaXMg
bWVhbnQgdG8gYmUgaW1tdXRhYmxlLiBEbyB0aGlzIHdoZW4geW91IGtub3cgdGhhdCB0aGlzIGlz
IHNhZmUuIEl0J3Mgbm90CisgICAgLy8gdXN1YWxseSBzYWZlLgorICAgIHZvaWQgc2V0S2luZFVu
c2FmZWx5KEtpbmQga2luZCkgeyBtX2tpbmQgPSBraW5kOyB9CisgICAgdm9pZCBzZXRPcGNvZGVV
bnNhZmVseShPcGNvZGUgb3Bjb2RlKSB7IG1fa2luZC5zZXRPcGNvZGUob3Bjb2RlKTsgfQorICAg
IAogICAgIC8vIEl0J3MgZ29vZCBwcmFjdGljZSB0byBtaXJyb3IgS2luZCBtZXRob2RzIGhlcmUs
IHNvIHlvdSBjYW4gc2F5IHZhbHVlLT5pc0JsYWgoKQogICAgIC8vIGluc3RlYWQgb2YgdmFsdWUt
PmtpbmQoKS5pc0JsYWgoKS4KICAgICBib29sIGlzQ2hpbGwoKSBjb25zdCB7IHJldHVybiBraW5k
KCkuaXNDaGlsbCgpOyB9CkBAIC0xMDcsNiArMTEyLDggQEAgcHVibGljOgogICAgIC8vIHZhbHVl
cyB3aXRoIElkZW50aXRpZXMgb24gYm90dG9tIGNvbnN0YW50cy4gRm9yIHRoaXMgcmVhc29uLCB0
aGlzIHRha2VzIGEgY2FsbGJhY2sgdGhhdCBpcwogICAgIC8vIHJlc3BvbnNpYmxlIGZvciBjcmVh
dGluZyBib3R0b21zLiBUaGVyZSdzIGEgdXRpbGl0eSBmb3IgdGhpcywgc2VlIEIzQm90dG9tUHJv
dmlkZXIuaC4gWW91CiAgICAgLy8gY2FuIGFsc28gYWNjZXNzIHRoYXQgdXRpbGl0eSB1c2luZyBy
ZXBsYWNlV2l0aEJvdHRvbShJbnNlcnRpb25TZXQmLCBzaXplX3QpLgorICAgIC8vCisgICAgLy8g
WW91J3JlIGd1YXJhbnRlZWQgdGhhdCBib3R0b20gaXMgemVyby4KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBCb3R0b21Qcm92aWRlcj4KICAgICB2b2lkIHJlcGxhY2VXaXRoQm90dG9tKGNvbnN0IEJv
dHRvbVByb3ZpZGVyJik7CiAgICAgCkBAIC0zMjEsNiArMzI4LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBJVG9GOgogICAgICAgICBjYXNlIEJpdHdpc2VDYXN0OgogICAgICAgICBjYXNlIEJy
YW5jaDoKKyAgICAgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobnVt
QXJncyAhPSAxKSkKICAgICAgICAgICAgICAgICBiYWRLaW5kKGtpbmQsIG51bUFyZ3MpOwogICAg
ICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguY3BwCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDM4IEBACiAKICNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KIAorbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1R5cGUgYmVzdFR5
cGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0aCkKK3sKKyAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAg
Y2FzZSBXaWR0aDg6CisgICAgY2FzZSBXaWR0aDE2OgorICAgIGNhc2UgV2lkdGgzMjoKKyAgICAg
ICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICByZXR1cm4g
SW50MzI7CisgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICByZXR1cm4gRmxvYXQ7CisgICAg
ICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIFZvaWQ7CisgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAg
ICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBJbnQ2NDsKKyAgICAgICAgY2FzZSBG
UDoKKyAgICAgICAgICAgIHJldHVybiBEb3VibGU7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFZvaWQ7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCiBuYW1lc3BhY2UgV1RGIHsKIAogdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6QjM6OldpZHRoIHdpZHRoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2MiwxOCBA
QCBpbmxpbmUgV2lkdGggd2lkdGhGb3JUeXBlKFR5cGUgdHlwZSkKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAoraW5saW5lIFdpZHRoIGNhbm9uaWNhbFdpZHRoKFdpZHRoIHdpZHRoKQor
eworICAgIHJldHVybiBzdGQ6Om1heChXaWR0aDMyLCB3aWR0aCk7Cit9CisKK2lubGluZSBib29s
IGlzQ2Fub25pY2FsV2lkdGgoV2lkdGggd2lkdGgpCit7CisgICAgcmV0dXJuIHdpZHRoID49IFdp
ZHRoMzI7Cit9CisKK1R5cGUgYmVzdFR5cGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0aCk7CisKIGlu
bGluZSBXaWR0aCBjb25zZXJ2YXRpdmVXaWR0aChCYW5rIGJhbmspCiB7CiAgICAgcmV0dXJuIGJh
bmsgPT0gR1AgPyBwb2ludGVyV2lkdGgoKSA6IFdpZHRoNjQ7CkBAIC05Myw2ICsxMDUsMjAgQEAg
aW5saW5lIFdpZHRoIHdpZHRoRm9yQnl0ZXModW5zaWduZWQgYnl0ZQogICAgIH0KIH0KIAoraW5s
aW5lIHVpbnQ2NF90IG1hc2soV2lkdGggd2lkdGgpCit7CisgICAgc3dpdGNoICh3aWR0aCkgewor
ICAgIGNhc2UgV2lkdGg4OgorICAgICAgICByZXR1cm4gMHgwMDAwMDAwMDAwMDAwMGZmbGx1Owor
ICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgcmV0dXJuIDB4MDAwMDAwMDAwMDAwZmZmZmxsdTsK
KyAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgIHJldHVybiAweDAwMDAwMDAwZmZmZmZmZmZsbHU7
CisgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICByZXR1cm4gMHhmZmZmZmZmZmZmZmZmZmZmbGx1
OworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVzcGFjZSBXVEYg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDIxMjk5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKICNpbmNsdWRlICJBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFs
dWUuaCIKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2Nr
SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29tcGls
YXRpb24uaCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJCM01hdGhFeHRyYXMuaCIKICNp
bmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNNb3ZlQ29uc3RhbnRzLmgiCisj
aW5jbHVkZSAiQjNOYXRpdmVUcmFpdHMuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgogI2lu
Y2x1ZGUgIkIzUmVkdWNlU3RyZW5ndGguaCIKICNpbmNsdWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIK
QEAgLTI5Nyw2ICsyOTksMjQgQEAgdm9pZCB0ZXN0TG9hZDQyKCkKICAgICBDSEVDSyhjb21waWxl
QW5kUnVuPGludD4ocHJvYykgPT0gNDIpOwogfQogCit2b2lkIHRlc3RMb2FkQWNxNDIoKQorewor
ICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisgICAgaW50IHggPSA0MjsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
ICZ4KSwKKyAgICAgICAgICAgIDAsIEhlYXBSYW5nZSg0MiksIEhlYXBSYW5nZSg0MikpKTsKKwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAg
ICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsZGEiKTsKKyAgICBDSEVDSyhpbnZva2U8
aW50PigqY29kZSkgPT0gNDIpOworfQorCiB2b2lkIHRlc3RMb2FkV2l0aE9mZnNldEltcGwoaW50
MzJfdCBvZmZzZXQ2NCwgaW50MzJfdCBvZmZzZXQzMikKIHsKICAgICB7CkBAIC01NzQ4LDYgKzU3
NjgsMzUgQEAgdm9pZCB0ZXN0U3RvcmVBZGRMb2FkMzIoaW50IGFtb3VudCkKICAgICBDSEVDSyhz
bG90ID09IDM3ICsgYW1vdW50KTsKIH0KIAordm9pZCB0ZXN0U3RvcmVSZWxBZGRMb2FkQWNxMzIo
aW50IGFtb3VudCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworICAgIGludCBzbG90ID0gMzc7CisgICAgQ29uc3RQdHJWYWx1
ZSogc2xvdFB0ciA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgJnNsb3QpOworICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgIHBy
b2MsIFN0b3JlLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmln
aW4oKSwgc2xvdFB0ciwgMCwgSGVhcFJhbmdlKDQyKSwgSGVhcFJhbmdlKDQyKSksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKSwKKyAgICAgICAg
c2xvdFB0ciwgMCwgSGVhcFJhbmdlKDQyKSwgSGVhcFJhbmdlKDQyKSk7CisgICAgcm9vdC0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAg
ICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwor
CisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKSB7Cisg
ICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGRhIik7CisgICAgICAgIGNoZWNr
VXNlc0luc3RydWN0aW9uKCpjb2RlLCAic3RsIik7CisgICAgfQorICAgIENIRUNLKCFpbnZva2U8
aW50PigqY29kZSwgYW1vdW50KSk7CisgICAgQ0hFQ0soc2xvdCA9PSAzNyArIGFtb3VudCk7Cit9
CisKIHZvaWQgdGVzdFN0b3JlQWRkTG9hZEltbTMyKGludCBhbW91bnQpCiB7CiAgICAgUHJvY2Vk
dXJlIHByb2M7CkBAIC01NzkyLDYgKzU4NDEsNzQgQEAgdm9pZCB0ZXN0U3RvcmVBZGRMb2FkOChp
bnQgYW1vdW50LCBCMzo6TwogICAgIENIRUNLKHNsb3QgPT0gMzcgKyBhbW91bnQpOwogfQogCit2
b2lkIHRlc3RTdG9yZVJlbEFkZExvYWRBY3E4KGludCBhbW91bnQsIEIzOjpPcGNvZGUgbG9hZE9w
Y29kZSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIGludDhfdCBzbG90ID0gMzc7CisgICAgQ29uc3RQdHJWYWx1ZSog
c2xvdFB0ciA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
JnNsb3QpOworICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgIHByb2Ms
IFN0b3JlOCwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBsb2FkT3Bjb2RlLCBPcmlnaW4o
KSwgc2xvdFB0ciwgMCwgSGVhcFJhbmdlKDQyKSwgSGVhcFJhbmdlKDQyKSksCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKSwKKyAgICAgICAgc2xv
dFB0ciwgMCwgSGVhcFJhbmdlKDQyKSwgSGVhcFJhbmdlKDQyKSk7CisgICAgcm9vdC0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAg
ICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOworCisg
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKSB7CisgICAg
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGRhIik7CisgICAgICAgIGNoZWNrVXNl
c0luc3RydWN0aW9uKCpjb2RlLCAic3RsIik7CisgICAgfQorICAgIENIRUNLKCFpbnZva2U8aW50
PigqY29kZSwgYW1vdW50KSk7CisgICAgQ0hFQ0soc2xvdCA9PSAzNyArIGFtb3VudCk7Cit9CisK
K3ZvaWQgdGVzdFN0b3JlUmVsQWRkRmVuY2VMb2FkQWNxOChpbnQgYW1vdW50LCBCMzo6T3Bjb2Rl
IGxvYWRPcGNvZGUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQ4X3Qgc2xvdCA9IDM3OworICAgIENvbnN0UHRy
VmFsdWUqIHNsb3RQdHIgPSByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksICZzbG90KTsKKyAgICBWYWx1ZSogbG9hZGVkVmFsdWUgPSByb290LT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KAorICAgICAgICBwcm9jLCBsb2FkT3Bjb2RlLCBPcmlnaW4oKSwgc2xvdFB0
ciwgMCwgSGVhcFJhbmdlKDQyKSwgSGVhcFJhbmdlKDQyKSk7CisgICAgUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50ID0gcm9vdC0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgVm9p
ZCwgT3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3Jv
U2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAg
ICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKKyAgICAgICAgICAgIGppdC5zdG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMHhiZWVmKSwgJnNsb3QpOworICAgICAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMuZmVuY2UgPSB0
cnVlOworICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgIHByb2MsIFN0
b3JlOCwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgbG9hZGVkVmFsdWUsCisgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRy
dW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKSwKKyAgICAg
ICAgc2xvdFB0ciwgMCwgSGVhcFJhbmdlKDQyKSwgSGVhcFJhbmdlKDQyKSk7CisgICAgcm9vdC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkp
OworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKSB7
CisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGRhIik7CisgICAgICAgIGNo
ZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAic3RsIik7CisgICAgfQorICAgIENIRUNLKCFpbnZv
a2U8aW50PigqY29kZSwgYW1vdW50KSk7CisgICAgQ0hFQ0soc2xvdCA9PSAzNyArIGFtb3VudCk7
Cit9CisKIHZvaWQgdGVzdFN0b3JlQWRkTG9hZEltbTgoaW50IGFtb3VudCwgQjM6Ok9wY29kZSBs
b2FkT3Bjb2RlKQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtNTgzNiw2ICs1OTUzLDM1IEBA
IHZvaWQgdGVzdFN0b3JlQWRkTG9hZDE2KGludCBhbW91bnQsIEIzOjoKICAgICBDSEVDSyhzbG90
ID09IDM3ICsgYW1vdW50KTsKIH0KIAordm9pZCB0ZXN0U3RvcmVSZWxBZGRMb2FkQWNxMTYoaW50
IGFtb3VudCwgQjM6Ok9wY29kZSBsb2FkT3Bjb2RlKQoreworICAgIFByb2NlZHVyZSBwcm9jOwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50MTZfdCBzbG90
ID0gMzc7CisgICAgQ29uc3RQdHJWYWx1ZSogc2xvdFB0ciA9IHJvb3QtPmFwcGVuZE5ldzxDb25z
dFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnNsb3QpOworICAgIHJvb3QtPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4oCisgICAgICAgIHByb2MsIFN0b3JlMTYsIE9yaWdpbigpLAorICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwK
KyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgcHJvYywgbG9hZE9wY29kZSwgT3JpZ2luKCksIHNsb3RQdHIsIDAsIEhlYXBSYW5nZSg0Miks
IEhlYXBSYW5nZSg0MikpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApKSksCisgICAgICAgIHNsb3RQdHIsIDAsIEhlYXBSYW5nZSg0MiksIEhlYXBS
YW5nZSg0MikpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29k
ZSwgImxkYSIpOworICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInN0bCIpOwor
ICAgIH0KKyAgICBDSEVDSyghaW52b2tlPGludD4oKmNvZGUsIGFtb3VudCkpOworICAgIENIRUNL
KHNsb3QgPT0gMzcgKyBhbW91bnQpOworfQorCiB2b2lkIHRlc3RTdG9yZUFkZExvYWRJbW0xNihp
bnQgYW1vdW50LCBCMzo6T3Bjb2RlIGxvYWRPcGNvZGUpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7
CkBAIC01ODc4LDYgKzYwMjQsMzMgQEAgdm9pZCB0ZXN0U3RvcmVBZGRMb2FkNjQoaW50IGFtb3Vu
dCkKICAgICBDSEVDSyhzbG90ID09IDM3MDAwMDAwMDAwbGwgKyBhbW91bnQpOwogfQogCit2b2lk
IHRlc3RTdG9yZVJlbEFkZExvYWRBY3E2NChpbnQgYW1vdW50KQoreworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50NjRf
dCBzbG90ID0gMzcwMDAwMDAwMDBsbDsKKyAgICBDb25zdFB0clZhbHVlKiBzbG90UHRyID0gcm9v
dC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmc2xvdCk7CisgICAg
cm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgcHJvYywgU3RvcmUsIE9yaWdp
bigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywg
QWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
CisgICAgICAgICAgICAgICAgcHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLCBzbG90UHRyLCAw
LCBIZWFwUmFuZ2UoNDIpLCBIZWFwUmFuZ2UoNDIpKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSksCisgICAgICAgIHNsb3RQdHIsIDAsIEhlYXBSYW5nZSg0MiksIEhlYXBSYW5nZSg0Mikp
OworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDApKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgaWYg
KGlzQVJNNjQoKSkgeworICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxkYSIp
OworICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInN0bCIpOworICAgIH0KKyAg
ICBDSEVDSyghaW52b2tlPGludD4oKmNvZGUsIGFtb3VudCkpOworICAgIENIRUNLKHNsb3QgPT0g
MzcwMDAwMDAwMDBsbCArIGFtb3VudCk7Cit9CisKIHZvaWQgdGVzdFN0b3JlQWRkTG9hZEltbTY0
KGludDY0X3QgYW1vdW50KQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMTM3OTEsNyArMTM5
NjQsNyBAQCB2b2lkIHRlc3RUcmFwcGluZ1N0b3JlRWxpbWluYXRpb24oKQogICAgIGNvbXBpbGVB
bmRSdW48aW50Pihwcm9jKTsKICAgICB1bnNpZ25lZCBzdG9yZUNvdW50ID0gMDsKICAgICBmb3Ig
KFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKE1lbW9yeVZhbHVl
Ojppc1N0b3JlKHZhbHVlLT5vcGNvZGUoKSkpCisgICAgICAgIGlmIChpc1N0b3JlKHZhbHVlLT5v
cGNvZGUoKSkpCiAgICAgICAgICAgICBzdG9yZUNvdW50Kys7CiAgICAgfQogICAgIENIRUNLX0VR
KHN0b3JlQ291bnQsIDJ1KTsKQEAgLTE0Mjc3LDYgKzE0NDUwLDMyNiBAQCB2b2lkIHRlc3RPcHRp
bWl6ZU1hdGVyaWFsaXphdGlvbigpCiAgICAgQ0hFQ0soZm91bmQpOwogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgordm9pZCB0ZXN0QXRvbWljV2Vha0NBUygpCit7CisgICAgVHlwZSB0eXBlID0g
TmF0aXZlVHJhaXRzPFQ+Ojp0eXBlOworICAgIFdpZHRoIHdpZHRoID0gTmF0aXZlVHJhaXRzPFQ+
Ojp3aWR0aDsKKyAgICAKKyAgICBhdXRvIGNoZWNrRGlzYXNzZW1ibHkgPSBbJl0gKENvbXBpbGF0
aW9uJiBjb21waWxhdGlvbikgeworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAg
Y2hlY2tVc2VzSW5zdHJ1Y3Rpb24oY29tcGlsYXRpb24sICJsb2NrIik7CisgICAgICAgICAgICBj
aGVja1VzZXNJbnN0cnVjdGlvbihjb21waWxhdGlvbiwgImNtcHhjaGciKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgCisgICAgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogcmVs
b29wID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5h
ZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgVmFsdWUqIHB0ciA9IHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBKdW1wLCBPcmlnaW4oKSk7
CisgICAgICAgIHJvb3QtPnNldFN1Y2Nlc3NvcnMocmVsb29wKTsKKyAgICAgICAgCisgICAgICAg
IHJlbG9vcC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJyYW5jaCwgT3Jp
Z2luKCksCisgICAgICAgICAgICByZWxvb3AtPmFwcGVuZE5ldzxBdG9taWNWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgcHJvYywgQXRvbWljV2Vha0NBUywgT3JpZ2luKCksIHdpZHRoLAorICAgICAg
ICAgICAgICAgIHJlbG9vcC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUs
IDQyKSwKKyAgICAgICAgICAgICAgICByZWxvb3AtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9y
aWdpbigpLCB0eXBlLCAweGJlZWYpLAorICAgICAgICAgICAgICAgIHB0cikpOworICAgICAgICBy
ZWxvb3AtPnNldFN1Y2Nlc3NvcnMoZG9uZSwgcmVsb29wKTsKKyAgICAgICAgCisgICAgICAgIGRv
bmUtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7CisgICAgICAgIAor
ICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBjaGVja0Rpc2Fzc2Vt
Ymx5KCpjb2RlKTsKKyAgICAgICAgVCB2YWx1ZSA9IDQyOworICAgICAgICBpbnZva2U8dm9pZD4o
KmNvZGUsICZ2YWx1ZSk7CisgICAgICAgIENIRUNLX0VRKHZhbHVlLCBzdGF0aWNfY2FzdDxUPigw
eGJlZWYpKTsKKyAgICB9CisgICAgCisgICAgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNC
bG9jayogcmVsb29wID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBkb25l
ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgVmFsdWUqIHB0ciA9IHJvb3Qt
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBKdW1wLCBP
cmlnaW4oKSk7CisgICAgICAgIHJvb3QtPnNldFN1Y2Nlc3NvcnMocmVsb29wKTsKKyAgICAgICAg
CisgICAgICAgIHJlbG9vcC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJy
YW5jaCwgT3JpZ2luKCksCisgICAgICAgICAgICByZWxvb3AtPmFwcGVuZE5ldzxBdG9taWNWYWx1
ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQXRvbWljV2Vha0NBUywgT3JpZ2luKCksIHdpZHRo
LAorICAgICAgICAgICAgICAgIHJlbG9vcC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2lu
KCksIHR5cGUsIDQyKSwKKyAgICAgICAgICAgICAgICByZWxvb3AtPmFwcGVuZEludENvbnN0YW50
KHByb2MsIE9yaWdpbigpLCB0eXBlLCAweGJlZWYpLAorICAgICAgICAgICAgICAgIHB0ciwgMCwg
SGVhcFJhbmdlKDQyKSwgSGVhcFJhbmdlKCkpKTsKKyAgICAgICAgcmVsb29wLT5zZXRTdWNjZXNz
b3JzKGRvbmUsIHJlbG9vcCk7CisgICAgICAgIAorICAgICAgICBkb25lLT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOworICAgICAgICAKKyAgICAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgY2hlY2tEaXNhc3NlbWJseSgqY29kZSk7CisgICAg
ICAgIFQgdmFsdWUgPSA0MjsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpjb2RlLCAmdmFsdWUpOwor
ICAgICAgICBDSEVDS19FUSh2YWx1ZSwgc3RhdGljX2Nhc3Q8VD4oMHhiZWVmKSk7CisgICAgfQor
ICAgIAorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2MgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGZhaWwgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgICAgIAorICAgICAgICBWYWx1ZSogcHRyID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQnJhbmNoLCBPcmln
aW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBdG9taWNWYWx1ZT4oCisgICAgICAg
ICAgICAgICAgcHJvYywgQXRvbWljV2Vha0NBUywgT3JpZ2luKCksIHdpZHRoLAorICAgICAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCA0Miks
CisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCks
IHR5cGUsIDB4YmVlZiksCisgICAgICAgICAgICAgICAgcHRyKSk7CisgICAgICAgIHJvb3QtPnNl
dFN1Y2Nlc3NvcnMoc3VjYywgZmFpbCk7CisgICAgICAgIAorICAgICAgICBzdWNjLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgc3RvcmVPcGNvZGUoR1AsIHdpZHRo
KSwgT3JpZ2luKCksCisgICAgICAgICAgICBzdWNjLT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBP
cmlnaW4oKSwgdHlwZSwgMTAwKSwKKyAgICAgICAgICAgIHB0cik7CisgICAgICAgIHN1Y2MtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7CisgICAgICAgIAorICAgICAg
ICBmYWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOworICAgICAg
ICAKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgY2hlY2tEaXNh
c3NlbWJseSgqY29kZSk7CisgICAgICAgIFQgdmFsdWUgPSA0MjsKKyAgICAgICAgd2hpbGUgKHZh
bHVlID09IDQyKQorICAgICAgICAgICAgaW52b2tlPHZvaWQ+KCpjb2RlLCAmdmFsdWUpOworICAg
ICAgICBDSEVDS19FUSh2YWx1ZSwgc3RhdGljX2Nhc3Q8VD4oMTAwKSk7CisgICAgICAgIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8VD4oMzAwKTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpjb2RlLCAmdmFs
dWUpOworICAgICAgICBDSEVDS19FUSh2YWx1ZSwgc3RhdGljX2Nhc3Q8VD4oMzAwKSk7CisgICAg
fQorICAgIAorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2MgPSBw
cm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGZhaWwgPSBwcm9jLmFkZEJsb2Nr
KCk7CisgICAgICAgIAorICAgICAgICBWYWx1ZSogcHRyID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQnJhbmNoLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgcHJvYywgRXF1YWwsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBdG9taWNWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIEF0b21pY1dlYWtD
QVMsIE9yaWdpbigpLCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50
Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSwKKyAgICAgICAgICAgICAgICAgICAg
cm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDB4YmVlZiksCisg
ICAgICAgICAgICAgICAgICAgIHB0ciksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50
Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCAwKSkpOworICAgICAgICByb290LT5zZXRT
dWNjZXNzb3JzKGZhaWwsIHN1Y2MpOworICAgICAgICAKKyAgICAgICAgc3VjYy0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIHN0b3JlT3Bjb2RlKEdQLCB3aWR0aCks
IE9yaWdpbigpLAorICAgICAgICAgICAgc3VjYy0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3Jp
Z2luKCksIHR5cGUsIDEwMCksCisgICAgICAgICAgICBwdHIpOworICAgICAgICBzdWNjLT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOworICAgICAgICAKKyAgICAgICAg
ZmFpbC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKKyAgICAgICAg
CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGNoZWNrRGlzYXNz
ZW1ibHkoKmNvZGUpOworICAgICAgICBUIHZhbHVlID0gNDI7CisgICAgICAgIHdoaWxlICh2YWx1
ZSA9PSA0MikKKyAgICAgICAgICAgIGludm9rZTx2b2lkPigqY29kZSwgJnZhbHVlKTsKKyAgICAg
ICAgQ0hFQ0tfRVEodmFsdWUsIHN0YXRpY19jYXN0PFQ+KDEwMCkpOworICAgICAgICB2YWx1ZSA9
IHN0YXRpY19jYXN0PFQ+KDMwMCk7CisgICAgICAgIGludm9rZTx2b2lkPigqY29kZSwgJnZhbHVl
KTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWUsIHN0YXRpY19jYXN0PFQ+KDMwMCkpOworICAgIH0K
KyAgICAKKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxBdG9taWNWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQXRvbWljV2Vh
a0NBUywgT3JpZ2luKCksIHdpZHRoLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENv
bnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCA0MiksCisgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDB4YmVlZiksCisgICAgICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSk7CisgICAgICAgIAorICAgICAgICBhdXRvIGNvZGUg
PSBjb21waWxlKHByb2MpOworICAgICAgICBjaGVja0Rpc2Fzc2VtYmx5KCpjb2RlKTsKKyAgICAg
ICAgVCB2YWx1ZSA9IDQyOworICAgICAgICB3aGlsZSAoIWludm9rZTxib29sPigqY29kZSwgJnZh
bHVlKSkgeyB9CisgICAgICAgIENIRUNLKHZhbHVlID09IHN0YXRpY19jYXN0PFQ+KDB4YmVlZikp
OworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxUPigzMDApOworICAgICAg
ICBDSEVDSyghaW52b2tlPGJvb2w+KCpjb2RlLCAmdmFsdWUpKTsKKyAgICB9Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRlc3RBdG9taWNTdHJvbmdDQVMoKQoreworICAgIFR5cGUg
dHlwZSA9IE5hdGl2ZVRyYWl0czxUPjo6dHlwZTsKKyAgICBXaWR0aCB3aWR0aCA9IE5hdGl2ZVRy
YWl0czxUPjo6d2lkdGg7CisgICAgCisgICAgYXV0byBjaGVja0Rpc2Fzc2VtYmx5ID0gWyZdIChD
b21waWxhdGlvbiYgY29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAg
ICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKGNvbXBpbGF0aW9uLCAibG9jayIpOworICAgICAg
ICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oY29tcGlsYXRpb24sICJjbXB4Y2hnIik7CisgICAg
ICAgIH0KKyAgICB9OworICAgIAorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxv
Y2sqIHN1Y2MgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGZhaWwgPSBw
cm9jLmFkZEJsb2NrKCk7CisgICAgICAgIAorICAgICAgICBWYWx1ZSogcHRyID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJv
YywgQnJhbmNoLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICAgICAgcHJvYywgRXF1YWwsIE9yaWdpbigpLAorICAgICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBdG9taWNWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2Ms
IEF0b21pY1N0cm9uZ0NBUywgT3JpZ2luKCksIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICBy
b290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIpLAorICAgICAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlw
ZSwgMHhiZWVmKSwKKyAgICAgICAgICAgICAgICAgICAgcHRyKSwKKyAgICAgICAgICAgICAgICBy
b290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIpKSk7CisgICAg
ICAgIHJvb3QtPnNldFN1Y2Nlc3NvcnMoc3VjYywgZmFpbCk7CisgICAgICAgIAorICAgICAgICBz
dWNjLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgc3RvcmVPcGNv
ZGUoR1AsIHdpZHRoKSwgT3JpZ2luKCksCisgICAgICAgICAgICBzdWNjLT5hcHBlbmRJbnRDb25z
dGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgMTAwKSwKKyAgICAgICAgICAgIHB0cik7CisgICAg
ICAgIHN1Y2MtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7CisgICAg
ICAgIAorICAgICAgICBmYWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2lu
KCkpOworICAgICAgICAKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAg
ICAgY2hlY2tEaXNhc3NlbWJseSgqY29kZSk7CisgICAgICAgIFQgdmFsdWUgPSA0MjsKKyAgICAg
ICAgaW52b2tlPHZvaWQ+KCpjb2RlLCAmdmFsdWUpOworICAgICAgICBDSEVDS19FUSh2YWx1ZSwg
c3RhdGljX2Nhc3Q8VD4oMTAwKSk7CisgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8VD4oMzAw
KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpjb2RlLCAmdmFsdWUpOworICAgICAgICBDSEVDS19F
USh2YWx1ZSwgc3RhdGljX2Nhc3Q8VD4oMzAwKSk7CisgICAgfQorICAgIAorICAgIHsKKyAgICAg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2MgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGZhaWwgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIAorICAgICAg
ICBWYWx1ZSogcHRyID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgTm90RXF1YWws
IE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBdG9taWNWYWx1ZT4o
CisgICAgICAgICAgICAgICAgICAgIHByb2MsIEF0b21pY1N0cm9uZ0NBUywgT3JpZ2luKCksIHdp
ZHRoLAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBP
cmlnaW4oKSwgdHlwZSwgNDIpLAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRD
b25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgMHhiZWVmKSwKKyAgICAgICAgICAgICAgICAg
ICAgcHRyKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBP
cmlnaW4oKSwgdHlwZSwgNDIpKSk7CisgICAgICAgIHJvb3QtPnNldFN1Y2Nlc3NvcnMoZmFpbCwg
c3VjYyk7CisgICAgICAgIAorICAgICAgICBzdWNjLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAor
ICAgICAgICAgICAgcHJvYywgc3RvcmVPcGNvZGUoR1AsIHdpZHRoKSwgT3JpZ2luKCksCisgICAg
ICAgICAgICBzdWNjLT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgMTAw
KSwKKyAgICAgICAgICAgIHB0cik7CisgICAgICAgIHN1Y2MtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgUmV0dXJuLCBPcmlnaW4oKSk7CisgICAgICAgIAorICAgICAgICBmYWlsLT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOworICAgICAgICAKKyAgICAgICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgY2hlY2tEaXNhc3NlbWJseSgqY29kZSk7Cisg
ICAgICAgIFQgdmFsdWUgPSA0MjsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpjb2RlLCAmdmFsdWUp
OworICAgICAgICBDSEVDS19FUSh2YWx1ZSwgc3RhdGljX2Nhc3Q8VD4oMTAwKSk7CisgICAgICAg
IHZhbHVlID0gc3RhdGljX2Nhc3Q8VD4oMzAwKTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpjb2Rl
LCAmdmFsdWUpOworICAgICAgICBDSEVDS19FUSh2YWx1ZSwgc3RhdGljX2Nhc3Q8VD4oMzAwKSk7
CisgICAgfQorICAgIAorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEF0b21pY1ZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBB
dG9taWNTdHJvbmdDQVMsIE9yaWdpbigpLCB3aWR0aCwKKyAgICAgICAgICAgICAgICByb290LT5h
cHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIpLAorICAgICAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCAweGJlZWYp
LAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOworICAgICAgICAKKyAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgY2hlY2tEaXNhc3NlbWJseSgqY29k
ZSk7CisgICAgICAgIFQgdmFsdWUgPSA0MjsKKyAgICAgICAgQ0hFQ0soaW52b2tlPFQ+KCpjb2Rl
LCAmdmFsdWUpID09IDQyKTsKKyAgICAgICAgQ0hFQ0sodmFsdWUgPT0gc3RhdGljX2Nhc3Q8VD4o
MHhiZWVmKSk7CisgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8VD4oMzAwKTsKKyAgICAgICAg
Q0hFQ0soaW52b2tlPFQ+KCpjb2RlLCAmdmFsdWUpID09IHN0YXRpY19jYXN0PFQ+KDMwMCkpOwor
ICAgICAgICBDSEVDSyh2YWx1ZSA9PSBzdGF0aWNfY2FzdDxUPigzMDApKTsKKyAgICB9CisgICAg
CisgICAgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEVxdWFsLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXRvbWljVmFsdWU+KAorICAgICAgICAgICAg
ICAgICAgICBwcm9jLCBBdG9taWNTdHJvbmdDQVMsIE9yaWdpbigpLCB3aWR0aCwKKyAgICAgICAg
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUs
IDQyKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywg
T3JpZ2luKCksIHR5cGUsIDB4YmVlZiksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3Jp
Z2luKCksIHR5cGUsIDQyKSkpOworICAgICAgICAKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKyAgICAgICAgY2hlY2tEaXNhc3NlbWJseSgqY29kZSk7CisgICAgICAgIFQgdmFs
dWUgPSA0MjsKKyAgICAgICAgQ0hFQ0soaW52b2tlPGJvb2w+KCpjb2RlLCAmdmFsdWUpKTsKKyAg
ICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxUPigzMDApOworICAgICAgICBDSEVDSyghaW52b2tl
PGJvb2w+KCpjb2RlLCAmdmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgeworICAgICAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICAgICAgICAgIHByb2MsIEVxdWFsLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBOb3RFcXVhbCwgT3Jp
Z2luKCksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBdG9taWNWYWx1ZT4o
CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jLCBBdG9taWNTdHJvbmdDQVMsIE9yaWdpbigp
LCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50
KHByb2MsIE9yaWdpbigpLCB0eXBlLCA0MiksCisgICAgICAgICAgICAgICAgICAgICAgICByb290
LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgMHhiZWVmKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAgICAgICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCA0MikpLAorICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAwKSkpOworICAgICAgICAgICAgCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgICAgIGNoZWNrRGlzYXNzZW1ibHkoKmNvZGUpOworICAgICAgICBUIHZhbHVlID0gNDI7
CisgICAgICAgIENIRUNLKGludm9rZTxib29sPigqY29kZSwgJnZhbHVlKSk7CisgICAgICAgIHZh
bHVlID0gc3RhdGljX2Nhc3Q8VD4oMzAwKTsKKyAgICAgICAgQ0hFQ0soIWludm9rZTxib29sPigq
Y29kZSwgJnZhbHVlKSk7CisgICAgfQorfQorCiB2b2lkIHRlc3RXYXNtQm91bmRzQ2hlY2sodW5z
aWduZWQgb2Zmc2V0KQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMTQzNzAsNiArMTQ4NjMs
MTMgQEAgZG91YmxlIG5lZ2F0aXZlWmVybygpCiAgICAgcmV0dXJuIC16ZXJvKCk7CiB9CiAKKyNk
ZWZpbmUgUlVOX05PVyh0ZXN0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
aWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YUxvZygjdGVz
dCAiLi4uXG4iKTsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGVzdDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YUxvZygjdGVzdCAiOiBPSyFcbiIp
OyAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKICNkZWZpbmUgUlVOKHRlc3Qp
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKCFzaG91bGRSdW4o
I3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKQEAgLTE0NDIxLDEyICsxNDkyMSwxMSBAQCB2b2lkIHJ1bihj
b25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgICAgIHJldHVybiAhZmlsdGVyIHx8ICEhc3RyY2FzZXN0
cih0ZXN0TmFtZSwgZmlsdGVyKTsKICAgICB9OwogCi0gICAgLy8gV2UgcnVuIHRoaXMgdGVzdCBm
aXJzdCBiZWNhdXNlIGl0IGZpZGRsZXMgd2l0aCBzb21lCi0gICAgLy8gSlNDIG9wdGlvbnMuCi0g
ICAgdGVzdFRlcm1pbmFsUGF0Y2hwb2ludFRoYXROZWVkc1RvQmVTcGlsbGVkMigpOworICAgIFJV
Tl9OT1codGVzdFRlcm1pbmFsUGF0Y2hwb2ludFRoYXROZWVkc1RvQmVTcGlsbGVkMigpKTsKIAog
ICAgIFJVTih0ZXN0NDIoKSk7CiAgICAgUlVOKHRlc3RMb2FkNDIoKSk7CisgICAgUlVOKHRlc3RM
b2FkQWNxNDIoKSk7CiAgICAgUlVOKHRlc3RMb2FkT2Zmc2V0SW1tOU1heCgpKTsKICAgICBSVU4o
dGVzdExvYWRPZmZzZXRJbW05TWF4UGx1c09uZSgpKTsKICAgICBSVU4odGVzdExvYWRPZmZzZXRJ
bW05TWF4UGx1c1R3bygpKTsKQEAgLTE1MDk5LDE2ICsxNTU5OCwyMyBAQCB2b2lkIHJ1bihjb25z
dCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3ROZWczMig1MikpOwogICAgIFJVTih0ZXN0TmVn
UHRyKDUzKSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExvYWQzMig0NikpOworICAgIFJVTih0ZXN0
U3RvcmVSZWxBZGRMb2FkQWNxMzIoNDYpKTsKICAgICBSVU4odGVzdFN0b3JlQWRkTG9hZEltbTMy
KDQ2KSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExvYWQ2NCg0NjAwKSk7CisgICAgUlVOKHRlc3RT
dG9yZVJlbEFkZExvYWRBY3E2NCg0NjAwKSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExvYWRJbW02
NCg0NjAwKSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExvYWQ4KDQsIExvYWQ4WikpOworICAgIFJV
Tih0ZXN0U3RvcmVSZWxBZGRMb2FkQWNxOCg0LCBMb2FkOFopKTsKKyAgICBSVU4odGVzdFN0b3Jl
UmVsQWRkRmVuY2VMb2FkQWNxOCg0LCBMb2FkOFopKTsKICAgICBSVU4odGVzdFN0b3JlQWRkTG9h
ZEltbTgoNCwgTG9hZDhaKSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExvYWQ4KDQsIExvYWQ4Uykp
OworICAgIFJVTih0ZXN0U3RvcmVSZWxBZGRMb2FkQWNxOCg0LCBMb2FkOFMpKTsKICAgICBSVU4o
dGVzdFN0b3JlQWRkTG9hZEltbTgoNCwgTG9hZDhTKSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExv
YWQxNig2LCBMb2FkMTZaKSk7CisgICAgUlVOKHRlc3RTdG9yZVJlbEFkZExvYWRBY3ExNig2LCBM
b2FkMTZaKSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExvYWRJbW0xNig2LCBMb2FkMTZaKSk7CiAg
ICAgUlVOKHRlc3RTdG9yZUFkZExvYWQxNig2LCBMb2FkMTZTKSk7CisgICAgUlVOKHRlc3RTdG9y
ZVJlbEFkZExvYWRBY3ExNig2LCBMb2FkMTZTKSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExvYWRJ
bW0xNig2LCBMb2FkMTZTKSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExvYWQzMkluZGV4KDQ2KSk7
CiAgICAgUlVOKHRlc3RTdG9yZUFkZExvYWRJbW0zMkluZGV4KDQ2KSk7CkBAIC0xNTgzMSw2ICsx
NjMzNywxNSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RMb2Fk
QmFzZUluZGV4U2hpZnQyKCkpOwogICAgIFJVTih0ZXN0TG9hZEJhc2VJbmRleFNoaWZ0MzIoKSk7
CiAgICAgUlVOKHRlc3RPcHRpbWl6ZU1hdGVyaWFsaXphdGlvbigpKTsKKyAgICAKKyAgICBSVU4o
dGVzdEF0b21pY1dlYWtDQVM8aW50OF90PigpKTsKKyAgICBSVU4odGVzdEF0b21pY1dlYWtDQVM8
aW50MTZfdD4oKSk7CisgICAgUlVOKHRlc3RBdG9taWNXZWFrQ0FTPGludDMyX3Q+KCkpOworICAg
IFJVTih0ZXN0QXRvbWljV2Vha0NBUzxpbnQ2NF90PigpKTsKKyAgICBSVU4odGVzdEF0b21pY1N0
cm9uZ0NBUzxpbnQ4X3Q+KCkpOworICAgIFJVTih0ZXN0QXRvbWljU3Ryb25nQ0FTPGludDE2X3Q+
KCkpOworICAgIFJVTih0ZXN0QXRvbWljU3Ryb25nQ0FTPGludDMyX3Q+KCkpOworICAgIFJVTih0
ZXN0QXRvbWljU3Ryb25nQ0FTPGludDY0X3Q+KCkpOwogCiAgICAgUlVOKHRlc3RXYXNtQm91bmRz
Q2hlY2soMCkpOwogICAgIFJVTih0ZXN0V2FzbUJvdW5kc0NoZWNrKDEwMCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNiArMTAyLDcgQEAgdW5zaWduZWQgQXJnOjpqc0hhc2goKSBjb25zdAogICAgIGNhc2Ug
UmVsQ29uZDoKICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgY2FzZSBEb3VibGVDb25kOgorICAgIGNh
c2UgU3RhdHVzQ29uZDoKICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICByZXN1bHQgKz0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fb2Zmc2V0KTsKICAgICAgICAgYnJlYWs7CkBAIC0xODIsNiAr
MTgzLDkgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBjYXNl
IERvdWJsZUNvbmQ6CiAgICAgICAgIG91dC5wcmludChhc0RvdWJsZUNvbmRpdGlvbigpKTsKICAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhdHVzQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFz
U3RhdHVzQ29uZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTcGVjaWFsOgog
ICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTI0MSw2ICsyNDUsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgQXJnCiAgICAgY2FzZSBBcmc6OkRvdWJsZUNvbmQ6CiAgICAgICAgIG91dC5wcmludCgiRG91
YmxlQ29uZCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OlN0YXR1c0NvbmQ6Cisg
ICAgICAgIG91dC5wcmludCgiU3RhdHVzQ29uZCIpOworICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBBcmc6OlNwZWNpYWw6CiAgICAgICAgIG91dC5wcmludCgiU3BlY2lhbCIpOwogICAgICAgICBy
ZXR1cm47CkBAIC0yODUsNiArMjkyLDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIEFyZwogICAgIGNhc2UgQXJnOjpFYXJseURlZjoKICAgICAgICAgb3V0LnByaW50KCJF
YXJseURlZiIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkVhcmx5WkRlZjoKKyAg
ICAgICAgb3V0LnByaW50KCJFYXJseVpEZWYiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
QXJnOjpTY3JhdGNoOgogICAgICAgICBvdXQucHJpbnQoIlNjcmF0Y2giKTsKICAgICAgICAgcmV0
dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAy
MTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgUmVsQ29uZCwKICAgICAg
ICAgUmVzQ29uZCwKICAgICAgICAgRG91YmxlQ29uZCwKKyAgICAgICAgU3RhdHVzQ29uZCwKICAg
ICAgICAgU3BlY2lhbCwKICAgICAgICAgV2lkdGhBcmcKICAgICB9OwpAQCAtMTUxLDYgKzE1Miw4
IEBAIHB1YmxpYzoKICAgICAgICAgLy8gYXMgVXNlIGhhcyB1bmRlZmluZWQgYmVoYXZpb3I6IHRo
ZSB1c2UgbWF5IGhhcHBlbiBiZWZvcmUgdGhlIGRlZiwgb3IgaXQgbWF5IGhhcHBlbiBhZnRlcgog
ICAgICAgICAvLyBpdC4KICAgICAgICAgRWFybHlEZWYsCisgICAgICAgICAgICAKKyAgICAgICAg
RWFybHlaRGVmLAogCiAgICAgICAgIC8vIFNvbWUgaW5zdHJ1Y3Rpb25zIG5lZWQgYSBzY3JhdGNo
IHJlZ2lzdGVyLiBXZSBtb2RlbCB0aGlzIGJ5IHNheWluZyB0aGF0IHRoZSB0ZW1wb3JhcnkgaXMK
ICAgICAgICAgLy8gZGVmaW5lZCBlYXJseSBhbmQgdXNlZCBsYXRlLiBUaGlzIHJvbGUgaW1wbGll
cyB0aGF0LgpAQCAtMTg2LDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgog
ICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNh
c2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjA2LDYgKzIxMCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2Ug
RWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjI4LDYg
KzIzMyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIFNj
cmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgog
ICAgICAgICAgICAgcmV0dXJuIHJvbGU7CiAgICAgICAgIGNhc2UgVXNlOgogICAgICAgICAgICAg
cmV0dXJuIENvbGRVc2U7CkBAIC0yNTMsNiArMjU5LDcgQEAgcHVibGljOgogICAgICAgICBjYXNl
IExhdGVDb2xkVXNlOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgIGNhc2UgRWFybHlE
ZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjc0LDYgKzI4MSw3
IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAg
ICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMjk0LDYgKzMwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAg
ICBjYXNlIFVzZVpEZWY6CiAgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFy
bHlaRGVmOgogICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQpAQCAtMzE1LDYgKzMyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBMYXRl
Q29sZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBFYXJseURl
ZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMzAsNiArMzQwLDcgQEAgcHVibGlj
OgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToKICAgICAgICAg
Y2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgIGNhc2UgU2Ny
YXRjaDoKICAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTM1OCw2ICszNjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNl
IEVhcmx5WkRlZjoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTMzLDYgKzU0NSwxNCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgc3RhdGljIEFyZyBzdGF0dXNDb25kKE1h
Y3JvQXNzZW1ibGVyOjpTdGF0dXNDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAg
QXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YXR1c0NvbmQ7CisgICAgICAg
IHJlc3VsdC5tX29mZnNldCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKICAgICBzdGF0aWMgQXJnIHNwZWNpYWwoQWlyOjpTcGVjaWFsKiBzcGVjaWFsKQogICAg
IHsKICAgICAgICAgQXJnIHJlc3VsdDsKQEAgLTY1OCwxMiArNjc4LDE4IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGtpbmQoKSA9PSBEb3VibGVDb25kOwogICAgIH0KIAorICAgIGJvb2wgaXNT
dGF0dXNDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3RhdHVz
Q29uZDsKKyAgICB9CisKICAgICBib29sIGlzQ29uZGl0aW9uKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHN3aXRjaCAoa2luZCgpKSB7CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2Fz
ZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVz
Q29uZDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODUxLDYgKzg3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAg
Y2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91Ymxl
Q29uZDoKKyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CiAg
ICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg3Miw2
ICs4OTksNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBS
ZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29u
ZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAg
ICBjYXNlIEludmFsaWQ6CkBAIC0xMDU4LDYgKzEwODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNh
c2UgUmVsQ29uZDoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNv
bmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgogICAg
ICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTc3LDYg
KzEyMDYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUNvbmRpdGlvbj4obV9vZmZzZXQpOwogICAgIH0KICAgICAKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6U3RhdHVzQ29uZGl0aW9uIGFzU3RhdHVzQ29uZGl0aW9uKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc1N0YXR1c0NvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6U3RhdHVzQ29uZGl0aW9uPihtX29mZnNldCk7CisgICAg
fQorICAgIAogICAgIC8vIFRlbGxzIHlvdSBpZiB0aGUgQXJnIGlzIGludmVydGlibGUuIE9ubHkg
Y29uZGl0aW9uIGFyZ3VtZW50cyBhcmUgaW52ZXJ0aWJsZSwgYW5kIGV2ZW4gZm9yIHRob3NlLCB0
aGVyZQogICAgIC8vIGFyZSBhIGZldyBleGNlcHRpb25zIC0gbm90YWJseSBPdmVyZmxvdyBhbmQg
U2lnbmVkLgogICAgIGJvb2wgaXNJbnZlcnRpYmxlKCkgY29uc3QKQEAgLTExODQsNiArMTIxOSw3
IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKICAgICAgICAgY2FzZSBSZWxD
b25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgIGNhc2UgU3RhdHVzQ29uZDoK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OmlzSW52ZXJ0aWJsZShhc1Jlc3VsdENvbmRpdGlv
bigpKTsKQEAgLTEyMDQsNiArMTI0MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBy
ZXNDb25kKE1hY3JvQXNzZW1ibGVyOjppbnZlcnQoYXNSZXN1bHRDb25kaXRpb24oKSkpOwogICAg
ICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAgICAgICByZXR1cm4gZG91YmxlQ29uZChNYWNy
b0Fzc2VtYmxlcjo6aW52ZXJ0KGFzRG91YmxlQ29uZGl0aW9uKCkpKTsKKyAgICAgICAgY2FzZSBT
dGF0dXNDb25kOgorICAgICAgICAgICAgcmV0dXJuIHN0YXR1c0NvbmQoTWFjcm9Bc3NlbWJsZXI6
OmludmVydChhc1N0YXR1c0NvbmRpdGlvbigpKSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIEFy
ZygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxv
Y2suY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1LDE5IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UKIAogY29uc3QgY2hhciogY29uc3QgQmFz
aWNCbG9jazo6ZHVtcFByZWZpeCA9ICIjIjsKIAordm9pZCBCYXNpY0Jsb2NrOjpzZXRTdWNjZXNz
b3JzKEZyZXF1ZW50ZWRCbG9jayB0YXJnZXQpCit7CisgICAgbV9zdWNjZXNzb3JzLnJlc2l6ZSgx
KTsKKyAgICBtX3N1Y2Nlc3NvcnNbMF0gPSB0YXJnZXQ7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6
c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sgdGFrZW4sIEZyZXF1ZW50ZWRCbG9jayBub3RU
YWtlbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMucmVzaXplKDIpOworICAgIG1fc3VjY2Vzc29yc1sw
XSA9IHRha2VuOworICAgIG1fc3VjY2Vzc29yc1sxXSA9IG5vdFRha2VuOworfQorCiBib29sIEJh
c2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIHJldHVy
biBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzMsNyArMzMsMTEgQEAKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxh
dGU8dHlwZW5hbWU+IGNsYXNzIEdlbmVyaWNCbG9ja0luc2VydGlvblNldDsKKworbmFtZXNwYWNl
IEFpciB7CiAKIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgQ29kZTsKQEAgLTk5LDYg
KzEwMyw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CiAgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vz
c29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQogCisgICAgdm9pZCBzZXRTdWNjZXNzb3Jz
KEZyZXF1ZW50ZWRCbG9jayk7CisgICAgdm9pZCBzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9j
aywgRnJlcXVlbnRlZEJsb2NrKTsKKwogICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7IH0K
ICAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJu
IHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsgfQogICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFz
aWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCkKQEAgLTEzMyw2ICsxNDAs
NyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKICAgICBm
cmllbmQgY2xhc3MgQ29kZTsKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OworICAgIHRl
bXBsYXRlPHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgQjM6OkdlbmVyaWNCbG9ja0luc2VydGlvblNl
dDsKICAgICAKICAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlv
blNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJC
bG9ja0luc2VydGlvblNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQmxvY2tJbnNlcnRpb25TZXQuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5j
bHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9CdWJibGVTb3J0Lmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQmxvY2tJbnNlcnRpb25T
ZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KENvZGUgJmNvZGUpCisgICAgOiBHZW5lcmljQmxvY2tJbnNl
cnRpb25TZXQoY29kZS5tX2Jsb2NrcykKK3sKK30KKworQmxvY2tJbnNlcnRpb25TZXQ6On5CbG9j
a0luc2VydGlvblNldCgpCit7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJD
b2RlLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBJbnNlcnRpb25TZXQ7CisKK3R5cGVkZWYgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJh
c2ljQmxvY2s+OjpCbG9ja0luc2VydGlvbiBCbG9ja0luc2VydGlvbjsKKworY2xhc3MgQmxvY2tJ
bnNlcnRpb25TZXQgOiBwdWJsaWMgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0PEJhc2ljQmxvY2s+
IHsKK3B1YmxpYzoKKyAgICBCbG9ja0luc2VydGlvblNldChDb2RlJik7CisgICAgfkJsb2NrSW5z
ZXJ0aW9uU2V0KCk7CisgICAgCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IGlt
cGxlbWVudCBCMzo6QmxvY2tJbnNlcnRpb25TZXQncyBzcGxpdEZvcndhcmQoKS4KK307CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckR1bXBBc0pTLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckR1bXBBc0pTLmNwcAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEdW1w
QXNKUy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJBaXJEdW1wQXNKUy5oIgotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQotI2luY2x1
ZGUgIkFpckNvZGUuaCIKLSNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgotCi1uYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLUNT
dHJpbmcgdmFyTmFtZUZvckJsb2NrQXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICByZXR1
cm4gdG9DU3RyaW5nKCJiYiIsIGluZGV4KTsKLX0KLQotQ1N0cmluZyB2YXJOYW1lKEJhc2ljQmxv
Y2sqIGJsb2NrKQotewotICAgIHJldHVybiB2YXJOYW1lRm9yQmxvY2tBdEluZGV4KGJsb2NrLT5p
bmRleCgpKTsKLX0KLQotQ1N0cmluZyB2YXJOYW1lRm9yU3RhY2tTbG90QXRJbmRleCh1bnNpZ25l
ZCBpbmRleCkKLXsKLSAgICByZXR1cm4gdG9DU3RyaW5nKCJzbG90IiwgaW5kZXgpOwotfQotCi1D
U3RyaW5nIHZhck5hbWUoU3RhY2tTbG90KiBzbG90KQotewotICAgIHJldHVybiB2YXJOYW1lRm9y
U3RhY2tTbG90QXRJbmRleChzbG90LT5pbmRleCgpKTsKLX0KLQotQ1N0cmluZyB2YXJOYW1lKFJl
ZyByZWcpCi17Ci0gICAgcmV0dXJuIHRvQ1N0cmluZygiUmVnLiIsIHJlZy5kZWJ1Z05hbWUoKSk7
Ci19Ci0KLUNTdHJpbmcgdmFyTmFtZUZvclRtcFdpdGhCYW5rQW5kSW5kZXgoQmFuayBiYW5rLCB1
bnNpZ25lZCBpbmRleCkKLXsKLSAgICByZXR1cm4gdG9DU3RyaW5nKGJhbmsgPT0gRlAgPyAiZiIg
OiAiIiwgInRtcCIsIGluZGV4KTsKLX0KLQotQ1N0cmluZyB2YXJOYW1lKFRtcCB0bXApCi17Ci0g
ICAgaWYgKHRtcC5pc1JlZygpKQotICAgICAgICByZXR1cm4gdmFyTmFtZSh0bXAucmVnKCkpOwot
ICAgIHJldHVybiB2YXJOYW1lRm9yVG1wV2l0aEJhbmtBbmRJbmRleChBcmcodG1wKS5iYW5rKCks
IHRtcC50bXBJbmRleCgpKTsKLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQg
ZHVtcEFzSlMoQ29kZSYgY29kZSwgUHJpbnRTdHJlYW0mIG91dCkKLXsKLSAgICBvdXQucHJpbnRs
bigibGV0IGNvZGUgPSBuZXcgQ29kZSgpOyIpOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb2RlLnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnRsbigibGV0ICIsIHZh
ck5hbWVGb3JCbG9ja0F0SW5kZXgoaSksICIgPSBjb2RlLmFkZEJsb2NrKCk7Iik7Ci0gICAgCi0g
ICAgb3V0LnByaW50bG4oImxldCBoYXNoOyIpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvZGUuc3RhY2tTbG90cygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0YWNrU2xvdCog
c2xvdCA9IGNvZGUuc3RhY2tTbG90cygpW2ldOwotICAgICAgICBpZiAoc2xvdCkgewotICAgICAg
ICAgICAgb3V0LnByaW50bG4oImxldCAiLCB2YXJOYW1lKHNsb3QpLCAiID0gY29kZS5hZGRTdGFj
a1Nsb3QoIiwgc2xvdC0+Ynl0ZVNpemUoKSwgIiwgIiwgc2xvdC0+a2luZCgpLCAiKTsiKTsKLSAg
ICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkKLSAgICAgICAgICAgICAgICBvdXQu
cHJpbnRsbih2YXJOYW1lKHNsb3QpLCAiLnNldE9mZnNldEZyb21GUCgiLCBzbG90LT5vZmZzZXRG
cm9tRlAoKSwgIik7Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiaGFzaCA9ICIsIHZhck5h
bWUoc2xvdCksICIuaGFzaCgpOyIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oImlmIChoYXNo
ICE9ICIsIHNsb3QtPmpzSGFzaCgpLCAiKSIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIiAg
ICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgaGFzaDogXCIgKyBoYXNoKTsiKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiY29kZS5hZGRTdGFja1Nsb3QoMSwgU3BpbGwp
OyIpOwotICAgIH0KLSAgICAKLSAgICBmb3JFYWNoQmFuaygKLSAgICAgICAgWyZdIChCYW5rIGJh
bmspIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGUubnVtVG1wcyhiYW5rKTsg
aS0tOykgewotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKAotICAgICAgICAgICAgICAgICAg
ICAibGV0ICIsIHZhck5hbWVGb3JUbXBXaXRoQmFua0FuZEluZGV4KGJhbmssIGkpLCAiID0gY29k
ZS5uZXdUbXAoIiwgYmFuaywgIik7Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAg
IAotICAgIG91dC5wcmludGxuKCJsZXQgaW5zdDsiKTsKLSAgICBvdXQucHJpbnRsbigibGV0IGFy
ZzsiKTsKLSAgICAKLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAg
ICBmb3IgKEZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7
Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigKLSAgICAgICAgICAgICAgICB2YXJOYW1lKGJsb2Nr
KSwgIi5zdWNjZXNzb3JzLnB1c2gobmV3IEZyZXF1ZW50ZWRCbG9jaygiLAotICAgICAgICAgICAg
ICAgIHZhck5hbWUoc3VjY2Vzc29yLmJsb2NrKCkpLCAiLCAiLCBzdWNjZXNzb3IuZnJlcXVlbmN5
KCksICIpKTsiKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkKLSAgICAgICAgICAgIG91dC5w
cmludGxuKHZhck5hbWUoYmxvY2spLCAiLnByZWRlY2Vzc29ycy5wdXNoKCIsIHZhck5hbWUocHJl
ZGVjZXNzb3IpLCAiKTsiKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpi
bG9jaykgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGRvIHNvbWV0aGluZyBm
b3IgZmxhZ3MuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYyNzUxCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdCA9IG5ldyBJbnN0
KCIsIGluc3Qua2luZC5vcGNvZGUsICIpOyIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
bnN0LmZvckVhY2hBcmcoCi0gICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xl
LCBCYW5rLCBXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkludmFsaWQ6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBcmc6OlRtcDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxu
KCJhcmcgPSBBcmcuY3JlYXRlVG1wKCIsIHZhck5hbWUoYXJnLnRtcCgpKSwgIik7Iik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6SW1tOgotICAgICAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50bG4oImFyZyA9IEFyZy5jcmVhdGVJbW0oIiwgYXJnLnZhbHVlKCksICIpOyIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkJpZ0ltbToKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dC5wcmludGxuKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmcgPSBB
cmcuY3JlYXRlQmlnSW1tKCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MzJfdD4oYXJnLnZhbHVlKCkpLCAiLCAiLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KGFyZy52YWx1ZSgpID4+IDMyKSwgIik7Iik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Qml0SW1tOgotICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0LnByaW50bG4oImFyZyA9IEFyZy5jcmVhdGVCaXRJbW0oIiwgYXJnLnZhbHVlKCksICIp
OyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkJpdEltbTY0OgotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImFyZyA9IEFyZy5jcmVhdGVCaXRJbW02NCgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDMyX3Q+KGFyZy52YWx1ZSgpKSwgIiwgIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihhcmcudmFsdWUoKSA+PiAzMiksICIp
OyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkFkZHI6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBvdXQucHJpbnRsbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJn
ID0gQXJnLmNyZWF0ZUFkZHIoIiwgdmFyTmFtZShhcmcuYmFzZSgpKSwgIiwgIiwgYXJnLm9mZnNl
dCgpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJhcmcgPSBBcmcuY3JlYXRlU3RhY2soIiwgdmFyTmFtZShhcmcuc3RhY2tTbG90KCkpLCAi
LCAiLCBhcmcub2Zmc2V0KCksICIpOyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6
OkNhbGxBcmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiYXJnID0gQXJn
LmNyZWF0ZUNhbGxBcmcoIiwgYXJnLm9mZnNldCgpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpJbmRleDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxu
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmcgPSBBcmcuY3JlYXRlSW5kZXgoIiwg
dmFyTmFtZShhcmcuYmFzZSgpKSwgIiwgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJOYW1lKGFyZy5pbmRleCgpKSwgIiwgIiwgYXJnLnNjYWxlKCksICIsICIsIGFyZy5vZmZzZXQo
KSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6UmVsQ29uZDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRlUmVsQ29uZCgi
LCBhcmcuYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCksICIpOyIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBBcmc6OlJlc0NvbmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRs
bigiYXJnID0gQXJnLmNyZWF0ZVJlc0NvbmQoIiwgYXJnLmFzUmVzdWx0Q29uZGl0aW9uKCksICIp
OyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkRvdWJsZUNvbmQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0ZURvdWJsZUNvbmQo
IiwgYXJnLmFzRG91YmxlQ29uZGl0aW9uKCksICIpOyIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBcmc6OlNwZWNpYWw6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigi
YXJnID0gQXJnLmNyZWF0ZVNwZWNpYWwoKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
QXJnOjpXaWR0aEFyZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJhcmcg
PSBBcmcuY3JlYXRlV2lkdGhBcmcoIiwgYXJnLndpZHRoKCksICIpOyIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmFyZ3MucHVzaChh
cmcpOyIpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoaW5zdC5raW5kLm9wY29kZSA9PSBQYXRjaCkgewotICAgICAgICAgICAgICAgIGlmIChpbnN0
Lmhhc05vbkFyZ0VmZmVjdHMoKSkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImlu
c3QucGF0Y2hIYXNOb25BcmdFZmZlY3RzID0gdHJ1ZTsiKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdC5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncyA9
IG5ldyBTZXQoKTsiKTsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdC5leHRyYUNs
b2JiZXJlZFJlZ3MgPSBuZXcgU2V0KCk7Iik7Ci0gICAgICAgICAgICAgICAgaW5zdC5leHRyYUVh
cmx5Q2xvYmJlcmVkUmVncygpLmZvckVhY2goCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoUmVn
IHJlZykgewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImluc3QuZXh0cmFF
YXJseUNsb2JiZXJlZFJlZ3MuYWRkKCIsIHZhck5hbWUocmVnKSwgIik7Iik7Ci0gICAgICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCku
Zm9yRWFjaCgKLSAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MuYWRkKCIs
IHZhck5hbWUocmVnKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LnBhdGNoQXJnRGF0YSA9
IFtdOyIpOwotICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAg
ICAgICAgWyZdIChBcmcmLCBBcmc6OlJvbGUgcm9sZSwgQmFuayBiYW5rLCBXaWR0aCB3aWR0aCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImluc3QucGF0Y2hBcmdEYXRhLnB1c2goe3JvbGU6IEFyZy4iLCByb2xlLCAi
LCB0eXBlOiAiLCBiYW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHdpZHRoOiAi
LCB3aWR0aCwgIn0pOyIpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUgPT0gQ0NhbGwg
fHwgaW5zdC5raW5kLm9wY29kZSA9PSBDb2xkQ0NhbGwpIHsKLSAgICAgICAgICAgICAgICBvdXQu
cHJpbnRsbigiaW5zdC5jQ2FsbFR5cGUgPSAiLCBpbnN0Lm9yaWdpbi0+dHlwZSgpKTsKLSAgICAg
ICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdC5jQ2FsbEFyZ1R5cGVzID0gW107Iik7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGluc3Qub3JpZ2luLT5udW1DaGls
ZHJlbigpOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmNDYWxs
QXJnVHlwZXMucHVzaCgiLCBpbnN0Lm9yaWdpbi0+Y2hpbGQoaSktPnR5cGUoKSwgIik7Iik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCJoYXNo
ID0gaW5zdC5oYXNoKCk7Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiaWYgKGhhc2ggIT0g
IiwgaW5zdC5qc0hhc2goKSwgIikiKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCIgICAgdGhy
b3cgbmV3IEVycm9yKFwiQmFkIGhhc2g6IFwiICsgaGFzaCk7Iik7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG91dC5wcmludGxuKHZhck5hbWUoYmxvY2spLCAiLmFwcGVuZChpbnN0KTsiKTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgot
Ci0jZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJEdW1wQXNKUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyRHVtcEFzSlMuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJEdW1wQXNKUy5oCShub25leGlzdGVudCkKQEAgLTEsNDMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewot
Ci1jbGFzcyBDb2RlOwotCi0vLyBUaGlzIGlzIHVzZWQgZm9yIGJlbmNobWFya2luZy4gVmFyaW91
cyBvcGVyYXRpb25zIG9uIEFpciBhcmUgaW50ZXJlc3RpbmcgZnJvbSBhIGJlbmNobWFya2luZwot
Ly8gc3RhbmRwb2ludC4gV2UgY2FuIHdyaXRlIHNvbWUgQWlyIHBoYXNlcyBpbiBKUyBhbmQgdGhl
biB1c2UgdGhhdCB0byBiZW5jaG1hcmsgSlMuIFRoZSBiZW5jaG1hcmsKLS8vIGlzIGNhbGxlZCBK
U0FpciwgYW5kIGl0J3MgaW4gUGVyZm9ybWFuY2VUZXN0cy9KU0Fpci4KLXZvaWQgZHVtcEFzSlMo
Q29kZSYsIFByaW50U3RyZWFtJik7Ci0KLX0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
LQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDYgQEAKICNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmlu
Zy5oIgogI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKICNpbmNsdWRlICJBaXJDb2RlLmgi
Ci0jaW5jbHVkZSAiQWlyRHVtcEFzSlMuaCIKICNpbmNsdWRlICJBaXJFbGltaW5hdGVEZWFkQ29k
ZS5oIgogI2luY2x1ZGUgIkFpckZpeE9idmlvdXNTcGlsbHMuaCIKICNpbmNsdWRlICJBaXJGaXhQ
YXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCIKQEAgLTczLDYgKzcyLDggQEAgdm9pZCBwcmVwYXJlRm9y
R2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAgICAgICBkYXRhTG9nKCJJbml0aWFsIGFpcjpcbiIp
OwogICAgICAgICBkYXRhTG9nKGNvZGUpOwogICAgIH0KKyAgICAKKyAgICBzaW1wbGlmeUNGRyhj
b2RlKTsKIAogICAgIGxvd2VyTWFjcm9zKGNvZGUpOwogCkBAIC0xMDcsMjMgKzEwOCwxMSBAQCB2
b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgLy8gZG9lcyB0aGluZ3Mg
bGlrZSBpZGVudGlmeSB3aGljaCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRo
ZW0uCiAgICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7CiAgICAgCi0gICAgaWYgKE9wdGlvbnM6
OmR1bXBBaXJBc0pTQmVmb3JlQWxsb2NhdGVTdGFjaygpKSB7Ci0gICAgICAgIGRhdGFMb2coIkR1
bXBpbmcgQWlyIGFzIEpTIGJlZm9yZSBhbGxvY2F0ZVN0YWNrOlxuIik7Ci0gICAgICAgIGR1bXBB
c0pTKGNvZGUsIFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgIGRhdGFMb2coIkFpciBoYXNoOiAi
LCBjb2RlLmpzSGFzaCgpLCAiXG4iKTsKLSAgICB9Ci0KICAgICAvLyBUaGlzIHR1cm5zIGFsbCBT
dGFjayBhbmQgQ2FsbEFyZyBBcmdzIGludG8gQWRkciBhcmdzIHRoYXQgdXNlIHRoZSBmcmFtZSBw
b2ludGVyLiBJdCBkb2VzCiAgICAgLy8gdGhpcyBieSBmaXJzdC1maXQgYWxsb2NhdGluZyBzdGFj
ayBzbG90cy4gSXQgc2hvdWxkIGJlIHByZXR0eSBkYXJuIGNsb3NlIHRvIG9wdGltYWwsIHNvIHdl
CiAgICAgLy8gc2hvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB2ZXJ5IG11Y2guCiAg
ICAgYWxsb2NhdGVTdGFjayhjb2RlKTsKICAgICAKLSAgICBpZiAoT3B0aW9uczo6ZHVtcEFpckFm
dGVyQWxsb2NhdGVTdGFjaygpKSB7Ci0gICAgICAgIGRhdGFMb2coIkR1bXBpbmcgQWlyIGFmdGVy
IGFsbG9jYXRlU3RhY2s6XG4iKTsKLSAgICAgICAgZGF0YUxvZyhjb2RlKTsKLSAgICAgICAgZGF0
YUxvZygiQWlyIGhhc2g6ICIsIGNvZGUuanNIYXNoKCksICJcbiIpOwotICAgIH0KLQogICAgIC8v
IElmIHdlIGNvYWxlc2NlZCBtb3ZlcyB0aGVuIHdlIGNhbiB1bmJyZWFrIGNyaXRpY2FsIGVkZ2Vz
LiBUaGlzIGlzIHRoZSBtYWluIHJlYXNvbiBmb3IgdGhpcwogICAgIC8vIHBoYXNlLgogICAgIHNp
bXBsaWZ5Q0ZHKGNvZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNiArMjc3
LDY1IEBAIGlubGluZSBib29sIGlzWDg2VURpdjY0VmFsaWQoY29uc3QgSW5zdCYKICAgICByZXR1
cm4gaXNYODZEaXZIZWxwZXJWYWxpZChpbnN0KTsKIH0KIAoraW5saW5lIGJvb2wgaXNBdG9taWNT
dHJvbmdDQVNWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworI2lmIENQVShYODYpIHx8IENQVShY
ODZfNjQpCisgICAgc3dpdGNoIChpbnN0LmFyZ3Muc2l6ZSgpKSB7CisgICAgY2FzZSAzOgorICAg
ICAgICByZXR1cm4gaW5zdC5hcmdzWzBdID09IFRtcChYODZSZWdpc3RlcnM6OmVheCk7CisgICAg
Y2FzZSA1OgorICAgICAgICByZXR1cm4gaW5zdC5hcmdzWzFdID09IFRtcChYODZSZWdpc3RlcnM6
OmVheCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNlbmRp
ZiAvLyBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorfQorCitpbmxpbmUgYm9vbCBpc0JyYW5jaEF0
b21pY1N0cm9uZ0NBU1ZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGluc3Qu
YXJnc1sxXSA9PSBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpOworfQorCitpbmxpbmUgYm9vbCBpc0F0
b21pY1N0cm9uZ0NBUzhWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc0F0
b21pY1N0cm9uZ0NBU1ZhbGlkKGluc3QpOworfQorCitpbmxpbmUgYm9vbCBpc0F0b21pY1N0cm9u
Z0NBUzE2VmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNBdG9taWNTdHJv
bmdDQVNWYWxpZChpbnN0KTsKK30KKworaW5saW5lIGJvb2wgaXNBdG9taWNTdHJvbmdDQVMzMlZh
bGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzQXRvbWljU3Ryb25nQ0FTVmFs
aWQoaW5zdCk7Cit9CisKK2lubGluZSBib29sIGlzQXRvbWljU3Ryb25nQ0FTNjRWYWxpZChjb25z
dCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc0F0b21pY1N0cm9uZ0NBU1ZhbGlkKGluc3Qp
OworfQorCitpbmxpbmUgYm9vbCBpc0JyYW5jaEF0b21pY1N0cm9uZ0NBUzhWYWxpZChjb25zdCBJ
bnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc0JyYW5jaEF0b21pY1N0cm9uZ0NBU1ZhbGlkKGlu
c3QpOworfQorCitpbmxpbmUgYm9vbCBpc0JyYW5jaEF0b21pY1N0cm9uZ0NBUzE2VmFsaWQoY29u
c3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNCcmFuY2hBdG9taWNTdHJvbmdDQVNWYWxp
ZChpbnN0KTsKK30KKworaW5saW5lIGJvb2wgaXNCcmFuY2hBdG9taWNTdHJvbmdDQVMzMlZhbGlk
KGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzQnJhbmNoQXRvbWljU3Ryb25nQ0FT
VmFsaWQoaW5zdCk7Cit9CisKK2lubGluZSBib29sIGlzQnJhbmNoQXRvbWljU3Ryb25nQ0FTNjRW
YWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc0JyYW5jaEF0b21pY1N0cm9u
Z0NBU1ZhbGlkKGluc3QpOworfQorCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAK
ICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE3LDYg
KzExNyw3IEBAIEFkZDMyIFU6RzozMiwgVVpEOkc6MzIKICAgICB4ODY6IEltbSwgSW5kZXgKICAg
ICBJbW0sIFRtcAogICAgIHg4NjogQWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1wCiAgICAg
eDg2OiBUbXAsIEFkZHIKICAgICB4ODY6IFRtcCwgSW5kZXgKIApAQCAtMTM1LDkgKzEzNiwxMiBA
QCB4ODY6IEFkZDE2IFU6RzoxNiwgVUQ6RzoxNgogNjQ6IEFkZDY0IFU6Rzo2NCwgVUQ6Rzo2NAog
ICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKICAg
ICBJbW0sIFRtcAogICAgIHg4NjogQWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1wCiAgICAg
eDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwgSW5kZXgKIAogNjQ6IEFkZDY0IFU6Rzo2NCwg
VTpHOjY0LCBEOkc6NjQKICAgICBJbW0sIFRtcCwgVG1wCkBAIC0xNjYsOSArMTcwLDEyIEBAIHg4
NjogQWRkRmxvYXQgVTpGOjMyLCBVRDpGOjMyCiBTdWIzMiBVOkc6MzIsIFVaRDpHOjMyCiAgICAg
VG1wLCBUbXAKICAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAogICAgIElt
bSwgVG1wCiAgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBUbXAKICAgICB4ODY6
IFRtcCwgQWRkcgorICAgIHg4NjogVG1wLCBJbmRleAogCiBhcm02NDogU3ViMzIgVTpHOjMyLCBV
Okc6MzIsIEQ6RzozMgogICAgIFRtcCwgVG1wLCBUbXAKQEAgLTE3Niw5ICsxODMsMTIgQEAgYXJt
NjQ6IFN1YjMyIFU6RzozMiwgVTpHOjMyLCBEOkc6MzIKIDY0OiBTdWI2NCBVOkc6NjQsIFVEOkc6
NjQKICAgICBUbXAsIFRtcAogICAgIHg4NjogSW1tLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4
CiAgICAgSW1tLCBUbXAKICAgICB4ODY6IEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcAog
ICAgIHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4CiAKIGFybTY0OiBTdWI2NCBV
Okc6NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcApAQCAtMjA0LDkgKzIxNCwx
MiBAQCB4ODY6IFN1YkZsb2F0IFU6RjozMiwgVUQ6RjozMgogTmVnMzIgVVpEOkc6MzIKICAgICBU
bXAKICAgICB4ODY6IEFkZHIKKyAgICB4ODY6IEluZGV4CiAKIDY0OiBOZWc2NCBVRDpHOjY0CiAg
ICAgVG1wCisgICAgeDg2OiBBZGRyCisgICAgeDg2OiBJbmRleAogCiBhcm02NDogTmVnYXRlRG91
YmxlIFU6Rjo2NCwgRDpGOjY0CiAgICAgVG1wLCBUbXAKQEAgLTMzMCw4ICszNDMsMTEgQEAgQW5k
MzIgVTpHOjMyLCBVWkQ6RzozMgogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIFRtcAogICAg
IHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4CiAgICAgeDg2OiBBZGRyLCBUbXAK
KyAgICB4ODY6IEluZGV4LCBUbXAKICAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJ
bmRleAogCiA2NDogQW5kNjQgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBU
bXAKQEAgLTMzOSw3ICszNTUsMTMgQEAgQW5kMzIgVTpHOjMyLCBVWkQ6RzozMgogCiB4ODZfNjQ6
IEFuZDY0IFU6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCi0gICAgeDg2OiBJbW0sIFRtcAor
ICAgIEltbSwgVG1wCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRk
cgorICAgIFRtcCwgSW5kZXgKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCiAKIEFuZERv
dWJsZSBVOkY6NjQsIFU6Rjo2NCwgRDpGOjY0CiAgICAgVG1wLCBUbXAsIFRtcApAQCAtNDU5LDgg
KzQ4MSwxMSBAQCBPcjMyIFU6RzozMiwgVVpEOkc6MzIKICAgICBUbXAsIFRtcAogICAgIHg4Njog
SW1tLCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgorICAgIHg4NjogVG1wLCBJbmRleAogICAgIHg4
NjogQWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1wCiAgICAgeDg2OiBJbW0sIEFkZHIKKyAg
ICB4ODY6IEltbSwgSW5kZXgKIAogNjQ6IE9yNjQgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAg
IFRtcCwgVG1wLCBUbXAKQEAgLTQ2OSw2ICs0OTQsMTIgQEAgT3IzMiBVOkc6MzIsIFVaRDpHOjMy
CiA2NDogT3I2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRtcAogICAgIHg4NjogSW1tLCBU
bXAKKyAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorICAgIHg4NjogVG1w
LCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4CisgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6
IEluZGV4LCBUbXAKIAogWG9yMzIgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRt
cCwgVG1wCkBAIC00ODAsOCArNTExLDExIEBAIFhvcjMyIFU6RzozMiwgVVpEOkc6MzIKICAgICBU
bXAsIFRtcAogICAgIHg4NjogSW1tLCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgorICAgIHg4Njog
VG1wLCBJbmRleAogICAgIHg4NjogQWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1wCiAgICAg
eDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKIAogNjQ6IFhvcjY0IFU6Rzo2NCwg
VTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcCwgVG1wCkBAIC00OTAsNiArNTI0LDExIEBAIFhv
cjMyIFU6RzozMiwgVVpEOkc6MzIKIDY0OiBYb3I2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAs
IFRtcAogICAgIHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4CisgICAgeDg2OiBB
ZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBUbXAKKyAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4
NjogSW1tLCBJbmRleAogICAgIHg4NjogSW1tLCBUbXAKIAogYXJtNjQ6IE5vdDMyIFU6RzozMiwg
WkQ6RzozMgpAQCAtNDk4LDEzICs1MzcsMTUgQEAgYXJtNjQ6IE5vdDMyIFU6RzozMiwgWkQ6Rzoz
MgogeDg2OiBOb3QzMiBVWkQ6RzozMgogICAgIFRtcAogICAgIEFkZHIKKyAgICBJbmRleAogCiBh
cm02NDogTm90NjQgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcAogCi14ODY6IE5vdDY0IFVE
Okc6NjQKK3g4Nl82NDogTm90NjQgVUQ6Rzo2NAogICAgIFRtcAogICAgIEFkZHIKKyAgICBJbmRl
eAogCiBhcm02NDogQWJzRG91YmxlIFU6Rjo2NCwgRDpGOjY0CiAgICAgVG1wLCBUbXAKQEAgLTY2
OCwyNyArNzA5LDM4MyBAQCBMb2FkOCBVOkc6OCwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAg
IEluZGV4LCBUbXAKIAorTG9hZEFjcTggVTpHOjgsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAg
ICBJbmRleCwgVG1wCisKIFN0b3JlOCBVOkc6OCwgRDpHOjgKICAgICBUbXAsIEluZGV4CiAgICAg
VG1wLCBBZGRyCiAgICAgeDg2OiBJbW0sIEluZGV4CiAgICAgeDg2OiBJbW0sIEFkZHIKIAorU3Rv
cmVSZWw4IFU6Rzo4LCBEOkc6OAorICAgIFRtcCwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICB4
ODY6IEltbSwgSW5kZXgKKyAgICB4ODY6IEltbSwgQWRkcgorCiBMb2FkOFNpZ25lZEV4dGVuZFRv
MzIgVTpHOjgsIFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRB
Y3E4U2lnbmVkRXh0ZW5kVG8zMiBVOkc6OCwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIElu
ZGV4LCBUbXAKKwogTG9hZDE2IFU6RzoxNiwgWkQ6RzozMgogICAgIEFkZHIsIFRtcAogICAgIElu
ZGV4LCBUbXAKIAorTG9hZEFjcTE2IFU6RzoxNiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAg
IEluZGV4LCBUbXAKKwogTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMiBVOkc6MTYsIFpEOkc6MzIKICAg
ICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIg
VTpHOjE2LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCiBTdG9yZTE2
IFU6RzoxNiwgRDpHOjE2CiAgICAgVG1wLCBJbmRleAogICAgIFRtcCwgQWRkcgorICAgIHg4Njog
SW1tLCBJbmRleAorICAgIHg4NjogSW1tLCBBZGRyCisKK1N0b3JlUmVsMTYgVTpHOjE2LCBEOkc6
MTYKKyAgICBUbXAsIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgeDg2OiBJbW0sIEluZGV4Cisg
ICAgeDg2OiBJbW0sIEFkZHIKKworTG9hZEFjcTMyIFU6RzozMiwgWkQ6RzozMgorICAgIEFkZHIs
IFRtcAorICAgIEluZGV4LCBUbXAKKworU3RvcmVSZWwzMiBVOkc6MzIsIFpEOkc6MzIKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IElt
bSwgSW5kZXgKKworNjQ6IExvYWRBY3E2NCBVOkc6NjQsIFpEOkc6NjQKKyAgICBBZGRyLCBUbXAK
KyAgICBJbmRleCwgVG1wCisKKzY0OiBTdG9yZVJlbDY0IFU6Rzo2NCwgWkQ6Rzo2NAorICAgIFRt
cCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKyAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1t
LCBJbmRleAorCisjIFRoZSBmaXJzdCBvcGVyYW5kIGlzIHJheC4KKyMgRklYTUU6IFRoaXMgZm9y
bXVsYXRpb24gbWVhbnMgdGhhdCB0aGUgYm9vbGVhbiByZXN1bHQgY2Fubm90IGJlIHB1dCBpbiBl
YXgsIGV2ZW4gdGhvdWdoIGFsbCB1c2VycworIyBvZiB0aGlzIHdvdWxkIGJlIE9LIHdpdGggdGhh
dC4KK3g4NjogQXRvbWljU3Ryb25nQ0FTOCBVOkc6MzIsIFVEOkc6OCwgVTpHOjgsIFVEOkc6OCwg
WkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXND
b25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVMxNiBVOkc6
MzIsIFVEOkc6MTYsIFU6RzozMiwgVUQ6RzoxNiwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1w
KiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAK
KworeDg2OiBBdG9taWNTdHJvbmdDQVMzMiBVOkc6MzIsIFVEOkc6MzIsIFU6RzozMiwgVUQ6Rzoz
MiwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0
dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2XzY0OiBBdG9taWNTdHJvbmdDQVM2
NCBVOkc6MzIsIFVEOkc6NjQsIFU6Rzo2NCwgVUQ6Rzo2NCwgWkQ6Rzo4CisgICAgU3RhdHVzQ29u
ZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4
LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVM4IFVEOkc6OCwgVTpHOjgsIFVEOkc6OAorICAg
IFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNTdHJv
bmdDQVMxNiBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYKKyAgICBUbXAqLCBUbXAsIEFkZHIKKyAg
ICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljU3Ryb25nQ0FTMzIgVUQ6RzozMiwgVTpH
OjMyLCBVRDpHOjMyCisgICAgVG1wKiwgVG1wLCBBZGRyCisgICAgVG1wKiwgVG1wLCBJbmRleAor
Cit4ODZfNjQ6IEF0b21pY1N0cm9uZ0NBUzY0IFVEOkc6NjQsIFU6Rzo2NCwgVUQ6Rzo2NAorICAg
IFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBCcmFuY2hBdG9t
aWNTdHJvbmdDQVM4IFU6RzozMiwgVUQ6Rzo4LCBVOkc6OCwgVUQ6Rzo4IC9icmFuY2gKKyAgICBT
dGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIElu
ZGV4CisKK3g4NjogQnJhbmNoQXRvbWljU3Ryb25nQ0FTMTYgVTpHOjMyLCBVRDpHOjE2LCBVOkc6
MzIsIFVEOkc6MTYgL2JyYW5jaAorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgQWRkcgorICAg
IFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBCcmFuY2hBdG9taWNTdHJvbmdD
QVMzMiBVOkc6MzIsIFVEOkc6MzIsIFU6RzozMiwgVUQ6RzozMiAvYnJhbmNoCisgICAgU3RhdHVz
Q29uZCwgVG1wKiwgVG1wLCBBZGRyCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBJbmRleAor
Cit4ODZfNjQ6IEJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0IFU6RzozMiwgVUQ6Rzo2NCwgVTpHOjY0
LCBVRDpHOjY0IC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIKKyAgICBT
dGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljQWRkOCBVOkc6OCwgVUQ6
Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRt
cCwgSW5kZXgKKworeDg2OiBBdG9taWNBZGQxNiBVOkc6MTYsIFVEOkc6MTYKKyAgICBJbW0sIEFk
ZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6
IEF0b21pY0FkZDMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5k
ZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljQWRkNjQg
VTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwg
QWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNTdWI4IFU6Rzo4LCBVRDpHOjgKKyAg
ICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCit4ODY6IEF0b21pY1N1YjE2IFU6RzoxNiwgVUQ6RzoxNgorICAgIEltbSwgQWRkcgorICAg
IEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWlj
U3ViMzIgVTpHOjMyLCBVRDpHOjMyCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAg
IFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBBdG9taWNTdWI2NCBVOkc6NjQs
IFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisg
ICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FuZDggVTpHOjgsIFVEOkc6OAorICAgIEltbSwg
QWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4
NjogQXRvbWljQW5kMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJ
bmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNBbmQzMiBV
Okc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY0FuZDY0IFU6Rzo2NCwgVUQ6Rzo2
NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAs
IEluZGV4CisKK3g4NjogQXRvbWljT3I4IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAg
ICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21p
Y09yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAg
IFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNPcjMyIFU6RzozMiwgVUQ6
RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBU
bXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljT3I2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0s
IEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4
ODY6IEF0b21pY1hvcjggVTpHOjgsIFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5k
ZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljWG9yMTYgVTpH
OjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRk
cgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNYb3IzMiBVOkc6MzIsIFVEOkc6MzIKKyAg
ICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRl
eAorCit4ODZfNjQ6IEF0b21pY1hvcjY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgor
ICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRv
bWljTmVnOCBVRDpHOjgKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOZWcxNiBV
RDpHOjE2CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogQXRvbWljTmVnMzIgVUQ6RzozMgor
ICAgIEFkZHIKKyAgICBJbmRleAorCit4ODZfNjQ6IEF0b21pY05lZzY0IFVEOkc6NjQKKyAgICBB
ZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOb3Q4IFVEOkc6OAorICAgIEFkZHIKKyAgICBJ
bmRleAorCit4ODY6IEF0b21pY05vdDE2IFVEOkc6MTYKKyAgICBBZGRyCisgICAgSW5kZXgKKwor
eDg2OiBBdG9taWNOb3QzMiBVRDpHOjMyCisgICAgQWRkcgorICAgIEluZGV4CisKK3g4Nl82NDog
QXRvbWljTm90NjQgVUQ6Rzo2NAorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY1hj
aGdBZGQ4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4
ODY6IEF0b21pY1hjaGdBZGQxNiBVRDpHOjE2LCBVRDpHOjE2CisgICAgVG1wLCBBZGRyCisgICAg
VG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQzMiBVRDpHOjMyLCBVRDpHOjMyCisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1hjaGdBZGQ2NCBVRDpH
OjY0LCBVRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21p
Y1hjaGc4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4
ODY6IEF0b21pY1hjaGcxNiBVRDpHOjE2LCBVRDpHOjE2CisgICAgVG1wLCBBZGRyCisgICAgVG1w
LCBJbmRleAorCit4ODY6IEF0b21pY1hjaGczMiBVRDpHOjMyLCBVRDpHOjMyCisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1hjaGc2NCBVRDpHOjY0LCBVRDpH
OjY0CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCithcm02NDogTG9hZExpbms4IFU6
Rzo4LCBaRDpHOjgKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2Fk
TGlua0FjcTggVTpHOjgsIFpEOkc6OAorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwor
IyBTdXBlciBjb25mdXNpbmcgZmFjdDogdGhpcyByZXR1cm5zIDAgdG8gbWVhbiBzdWNjZXNzLCAx
IHRvIG1lYW4gZmFpbHVyZS4KK2FybTY0OiBTdG9yZUNvbmQ4IFU6Rzo4LCBEOkc6OCwgRVpEOkc6
OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9y
ZUNvbmRSZWw4IFU6Rzo4LCBEOkc6OCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAg
VG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGluazE2IFU6RzoxNiwgWkQ6RzoxNgorICAg
IEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rQWNxMTYgVTpHOjE2
LCBaRDpHOjE2CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVD
b25kMTYgVTpHOjE2LCBEOkc6MTYsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRt
cCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kUmVsMTYgVTpHOjE2LCBEOkc6MTYsIEVa
RDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDog
TG9hZExpbmszMiBVOkc6MzIsIFpEOkc6MzIKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1w
CisKK2FybTY0OiBMb2FkTGlua0FjcTMyIFU6RzozMiwgWkQ6RzozMgorICAgIEFkZHIsIFRtcAor
ICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZDMyIFU6RzozMiwgRDpHOjMyLCBFWkQ6
Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0
b3JlQ29uZFJlbDMyIFU6RzozMiwgRDpHOjMyLCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAK
KyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5rNjQgVTpHOjY0LCBaRDpHOjY0
CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02NDogTG9hZExpbmtBY3E2NCBV
Okc6NjQsIFpEOkc6NjQKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBT
dG9yZUNvbmQ2NCBVOkc6NjQsIEQ6Rzo2NCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisg
ICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmRSZWw2NCBVOkc6NjQsIEQ6Rzo2
NCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2Fy
bTY0OiBEZXBlbmQzMiBVOkc6MzIsIEQ6RzozMgorICAgIFRtcCwgVG1wCisKK2FybTY0OiBEZXBl
bmQ2NCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wCiAKIENvbXBhcmUzMiBVOkc6MzIsIFU6
RzozMiwgVTpHOjMyLCBaRDpHOjMyCiAgICAgUmVsQ29uZCwgVG1wLCBUbXAsIFRtcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9j
a09yZGVyLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTc3LDYg
KzE3NywxMCBAQCB2b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQogICAgICAgICBj
YXNlIEJyYW5jaFN1YjY0OgogICAgICAgICBjYXNlIEJyYW5jaE5lZzMyOgogICAgICAgICBjYXNl
IEJyYW5jaE5lZzY0OgorICAgICAgICBjYXNlIEJyYW5jaEF0b21pY1N0cm9uZ0NBUzg6CisgICAg
ICAgIGNhc2UgQnJhbmNoQXRvbWljU3Ryb25nQ0FTMTY6CisgICAgICAgIGNhc2UgQnJhbmNoQXRv
bWljU3Ryb25nQ0FTMzI6CisgICAgICAgIGNhc2UgQnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQ6CiAg
ICAgICAgICAgICBpZiAoY29kZS5maW5kTmV4dEJsb2NrKGJsb2NrKSA9PSBibG9jay0+c3VjY2Vz
c29yQmxvY2soMCkgJiYgYnJhbmNoLmFyZ3NbMF0uaXNJbnZlcnRpYmxlKCkpIHsKICAgICAgICAg
ICAgICAgICBzdGQ6OnN3YXAoYmxvY2stPnN1Y2Nlc3NvcigwKSwgYmxvY2stPnN1Y2Nlc3Nvcigx
KSk7CiAgICAgICAgICAgICAgICAgYnJhbmNoLmFyZ3NbMF0gPSBicmFuY2guYXJnc1swXS5pbnZl
cnRlZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQYWRJbnRlcmZl
cmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
UGFkSW50ZXJmZXJlbmNlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw2ICs0OCw3IEBAIHZvaWQgcGFkSW50ZXJmZXJlbmNlKENvZGUmIGNvZGUpCiAgICAgICAgICAg
ICAgICAgWyZdIChBcmcmLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJn
OjpFYXJseURlZjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5WkRlZjoKICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc0Vhcmx5RGVmID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZVVzZToK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZl
cnl0aGluZy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1
NSw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpMYXRlQ29sZFVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6
OlNjcmF0Y2g6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5WkRlZjoKICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoUmVnIHJlZyA6IGNvZGUucmVnc0luUHJpb3JpdHlPcmRlcihiYW5rKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpICYmICFzZXRB
ZnRlci5nZXQocmVnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRl
ci5zZXQocmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dl
bmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBjb3B5KQpAQCAtNTEsMTQg
KzUxLDQ5IEBAIGNsYXNzIEFyZwogICAgICAgICBAYmFuayA9IGJhbmsKICAgICAgICAgQHdpZHRo
ID0gd2lkdGgKICAgICBlbmQKLQotICAgIGRlZiB3aWR0aENvZGUKKyAgICAKKyAgICBkZWYgc2Vs
Zi53aWR0aENvZGUod2lkdGgpCiAgICAgICAgIGlmIHdpZHRoID09ICJQdHIiCiAgICAgICAgICAg
ICAicG9pbnRlcldpZHRoKCkiCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICJXaWR0aCN7d2lk
dGh9IgogICAgICAgICBlbmQKICAgICBlbmQKKworICAgIGRlZiB3aWR0aENvZGUKKyAgICAgICAg
QXJnLndpZHRoQ29kZSh3aWR0aCkKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgc2VsZi5yb2xlQ29k
ZShyb2xlKQorICAgICAgICBjYXNlIHJvbGUKKyAgICAgICAgd2hlbiAiVSIKKyAgICAgICAgICAg
ICJVc2UiCisgICAgICAgIHdoZW4gIkQiCisgICAgICAgICAgICAiRGVmIgorICAgICAgICB3aGVu
ICJaRCIKKyAgICAgICAgICAgICJaRGVmIgorICAgICAgICB3aGVuICJVRCIKKyAgICAgICAgICAg
ICJVc2VEZWYiCisgICAgICAgIHdoZW4gIlVaRCIKKyAgICAgICAgICAgICJVc2VaRGVmIgorICAg
ICAgICB3aGVuICJVQSIKKyAgICAgICAgICAgICJVc2VBZGRyIgorICAgICAgICB3aGVuICJTIgor
ICAgICAgICAgICAgIlNjcmF0Y2giCisgICAgICAgIHdoZW4gIkVEIgorICAgICAgICAgICAgIkVh
cmx5RGVmIgorICAgICAgICB3aGVuICJFWkQiCisgICAgICAgICAgICAiRWFybHlaRGVmIgorICAg
ICAgICB3aGVuICJMVSIKKyAgICAgICAgICAgICJMYXRlVXNlIgorICAgICAgICBlbHNlCisgICAg
ICAgICAgICByYWlzZQorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcm9sZUNv
ZGUKKyAgICAgICAgQXJnLnJvbGVDb2RlKHJvbGUpCisgICAgZW5kCiBlbmQKIAogY2xhc3MgT3Zl
cmxvYWQKQEAgLTE4Miw3ICsyMTcsNyBAQCBkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCiBlbmQKIAog
ZGVmIGlzUm9sZSh0b2tlbikKLSAgICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpfChaRCl8KFVa
RCl8KFVBKXwoUykpXFovCisgICAgdG9rZW4gPX4gL1xBKChVKXwoRCl8KFVEKXwoWkQpfChVWkQp
fChVQSl8KFMpfChFRCl8KEVaRCl8KExVKSlcWi8KIGVuZAogCiBkZWYgaXNHRih0b2tlbikKQEAg
LTE5MCw3ICsyMjUsNyBAQCBkZWYgaXNHRih0b2tlbikKIGVuZAogCiBkZWYgaXNLaW5kKHRva2Vu
KQotICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1t
NjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpKVxaLwor
ICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQp
fChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpfChTdGF0dXND
b25kKSlcWi8KIGVuZAogCiBkZWYgaXNBcmNoKHRva2VuKQpAQCAtMjY0LDcgKzI5OSw3IEBAIGNs
YXNzIFBhcnNlcgogCiAgICAgZGVmIGNvbnN1bWVLaW5kCiAgICAgICAgIHJlc3VsdCA9IHRva2Vu
LnN0cmluZwotICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwg
Qml0SW1tLCBCaXRJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgb3Ig
RG91YmxlQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAgcGFyc2VFcnJvcigi
RXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFRtcCwgQWRkciwg
SW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9yIFN0YXR1c0NvbmQpIikgdW5s
ZXNzIGlzS2luZChyZXN1bHQpCiAgICAgICAgIGFkdmFuY2UKICAgICAgICAgcmVzdWx0CiAgICAg
ZW5kCkBAIC02MzQsMjggKzY2OSw3IEBAIHdyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5lYWNoX3dpdGhfaW5kZXggewog
ICAgICAgICAgICAgICAgIHwgYXJnLCBpbmRleCB8Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgcm9sZSA9IG5pbAotICAgICAgICAgICAgICAgIGNhc2UgYXJnLnJvbGUKLSAgICAg
ICAgICAgICAgICB3aGVuICJVIgotICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZSIKLSAg
ICAgICAgICAgICAgICB3aGVuICJEIgotICAgICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIK
LSAgICAgICAgICAgICAgICB3aGVuICJaRCIKLSAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJa
RGVmIgotICAgICAgICAgICAgICAgIHdoZW4gIlVEIgotICAgICAgICAgICAgICAgICAgICByb2xl
ID0gIlVzZURlZiIKLSAgICAgICAgICAgICAgICB3aGVuICJVWkQiCi0gICAgICAgICAgICAgICAg
ICAgIHJvbGUgPSAiVXNlWkRlZiIKLSAgICAgICAgICAgICAgICB3aGVuICJVQSIKLSAgICAgICAg
ICAgICAgICAgICAgcm9sZSA9ICJVc2VBZGRyIgotICAgICAgICAgICAgICAgIHdoZW4gIlMiCi0g
ICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiU2NyYXRjaCIKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgZW5kCi0KLSAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xl
fSwgI3thcmcuYmFua31QLCAje2FyZy53aWR0aENvZGV9KTsiCisgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRleH1dLCBBcmc6OiN7YXJnLnJvbGVDb2RlfSwgI3th
cmcuYmFua31QLCAje2FyZy53aWR0aENvZGV9KTsiCiAgICAgICAgICAgICB9CiAgICAgICAgIGVu
ZAogICAgIH0KQEAgLTgxOSw2ICs4MzMsNyBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsK
ICAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgogICAgICAgICAgICAgICAgIHdoZW4gIlJl
c0NvbmQiCiAgICAgICAgICAgICAgICAgd2hlbiAiRG91YmxlQ29uZCIKKyAgICAgICAgICAgICAg
ICB3aGVuICJTdGF0dXNDb25kIgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgcmFpc2UgIlVuZXhwZWN0ZWQga2luZDogI3traW5kLm5hbWV9IgogICAgICAgICAgICAg
ICAgIGVuZApAQCAtMTEwNSw2ICsxMTIwLDggQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7
CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0
Q29uZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiRG91YmxlQ29uZCIKICAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNEb3VibGVDb25kaXRpb24o
KSIKKyAgICAgICAgICAgICAgICB3aGVuICJTdGF0dXNDb25kIgorICAgICAgICAgICAgICAgICAg
ICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1N0YXR1c0NvbmRpdGlvbigpIgogICAgICAg
ICAgICAgICAgIGVuZAogICAgICAgICAgICAgfQogCkBAIC0xMTQ4LDI3ICsxMTY1LDcgQEAgRmls
ZS5vcGVuKCJKU0Fpcl9vcGNvZGUuanMiLCAidyIpIHsKICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3
aXRjaAogICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5lYWNoX3dpdGhfaW5kZXgg
ewogICAgICAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXggfAotICAgICAgICAgICAgICAgICAg
ICByb2xlID0gbmlsCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgYXJnLnJvbGUKLSAgICAgICAg
ICAgICAgICAgICAgd2hlbiAiVSIKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNl
IgotICAgICAgICAgICAgICAgICAgICB3aGVuICJEIgotICAgICAgICAgICAgICAgICAgICAgICAg
cm9sZSA9ICJEZWYiCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gIlpEIgotICAgICAgICAgICAg
ICAgICAgICAgICAgcm9sZSA9ICJaRGVmIgotICAgICAgICAgICAgICAgICAgICB3aGVuICJVRCIK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlRGVmIgotICAgICAgICAgICAgICAg
ICAgICB3aGVuICJVWkQiCi0gICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZVpEZWYi
Ci0gICAgICAgICAgICAgICAgICAgIHdoZW4gIlVBIgotICAgICAgICAgICAgICAgICAgICAgICAg
cm9sZSA9ICJVc2VBZGRyIgotICAgICAgICAgICAgICAgICAgICB3aGVuICJTIgotICAgICAgICAg
ICAgICAgICAgICAgICAgcm9sZSA9ICJTY3JhdGNoIgotICAgICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgICAgICBlbmQK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaW5z
dC52aXNpdEFyZygje2luZGV4fSwgZnVuYywgQXJnLiN7cm9sZX0sICN7YXJnLmJhbmt9UCwgI3th
cmcud2lkdGh9KTsiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaW5zdC52aXNpdEFy
Zygje2luZGV4fSwgZnVuYywgQXJnLiN7YXJnLnJvbGVDb2RlfSwgI3thcmcuYmFua31QLCAje2Fy
Zy53aWR0aH0pOyIKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJicmVhazsiCiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxMyw5ICs0MTMsNiBAQCB0eXBl
ZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIGR1bXBNb2R1bGVMb2Fk
aW5nU3RhdGUsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGV4cG9zZUlu
dGVybmFsTW9kdWxlTG9hZGVyLCBmYWxzZSwgTm9ybWFsLCAiZXhwb3NlIHRoZSBpbnRlcm5hbCBt
b2R1bGUgbG9hZGVyIG9iamVjdCB0byB0aGUgZ2xvYmFsIHNwYWNlIGZvciBkZWJ1Z2dpbmciKSBc
CiAgICAgXAotICAgIHYoYm9vbCwgZHVtcEFpckFzSlNCZWZvcmVBbGxvY2F0ZVN0YWNrLCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihib29sLCBkdW1wQWlyQWZ0ZXJBbGxvY2F0ZVN0
YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgXAogICAgIHYoYm9vbCwgdXNlU3Vw
ZXJTYW1wbGVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIHYoYm9vbCwg
cmVwb3J0TExJbnRTdGF0cywgZmFsc2UsIENvbmZpZ3VyYWJsZSwgIlJlcG9ydHMgTExJbnQgc3Rh
dGlzdGljcyIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303150</attachid>
            <date>2017-03-01 17:40:44 -0800</date>
            <delta_ts>2017-03-01 20:52:47 -0800</delta_ts>
            <desc>x86 looks solid</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>299679</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMyBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkwRjJDNjNDMDFFNjYwRUE3MDBDMTM4
MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCRjFFNjYwRUE1MDBDMTM4MzkgLyogQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGMkM2M0MyMUU2NjRBNUMwMEMxMzgzOSAv
KiBCM05hdGl2ZVRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQzYzQzExRTY2NEE1QTAwQzEzODM5IC8qIEIzTmF0aXZlVHJhaXRzLmggKi87
IH07CiAJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERCMTk4MzJE
MzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCAqLzsgfTsKIAkJMEYyRDREREUxOTgzMkQz
NDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERDMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNj
b3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYyRDRERTgxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJENERFNTE5ODMyREFDMDA3RDRC
MTkgLyogVG9UaGlzU3RhdHVzLmNwcCAqLzsgfTsKQEAgLTIyNDMsOCArMjI1MCw2IEBACiAJCURD
MjE0MzA4MUNBMzJFNTgwMDBBODg2OSAvKiBJQ1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMjE0MzA1MUNBMzJFNTIwMDBBODg2OSAvKiBJ
Q1N0YXRzLmNwcCAqLzsgfTsKIAkJREMzRDJCMEExRDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzNEMkIw
OTFEMzQzMTYxMDBCQTkxOEMgLyogSGVhcENlbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEQzNEMkIwQzFEMzQzNzcwMDBCQTkxOEMgLyogSGVh
cENlbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
REMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8qIEhlYXBDZWxsLmNwcCAqLzsgfTsKLQkJREM0NTRC
OEMxRDAwRTgyMjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNDU0QjhBMUQwMEU4MUYwMDRDMThBRiAvKiBB
aXJEdW1wQXNKUy5jcHAgKi87IH07Ci0JCURDNDU0QjhEMUQwMEU4MjQwMDRDMThBRiAvKiBBaXJE
dW1wQXNKUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
REM0NTRCOEIxRDAwRTgxRjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmggKi87IH07CiAJCURDNjA1
QjVEMUNFMjZFQTAwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjU5MUNFMjZFOTgwMDU5MzcxOCAv
KiBQcm9maWxlckV2ZW50LmNwcCAqLzsgfTsKIAkJREM2MDVCNUUxQ0UyNkVBMjAwNTkzNzE4IC8q
IFByb2ZpbGVyRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IERDNjA1QjVBMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREM2MDVCNUYxQ0Uy
NkVBNTAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjVCMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxl
clVJRC5jcHAgKi87IH07CkBAIC0yNzY0LDYgKzI3NjksMTMgQEAKIAkJMEYyQzYzQUMxRTYwQUUz
QzAwQzEzODM5IC8qIEIzQmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M0JhbmsuaDsgcGF0aCA9IGIzL0IzQmFuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjJDNjNBRDFFNjBBRTNDMDBDMTM4MzkgLyogQjNXaWR0aC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dpZHRoLmNwcDsgcGF0aCA9IGIzL0IzV2lkdGguY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNjNBRTFFNjBBRTNEMDBDMTM4Mzkg
LyogQjNXaWR0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dpZHRoLmg7
IHBhdGggPSBiMy9CM1dpZHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2
M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQXRvbWljVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBdG9t
aWNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I0MUU2MzQz
RTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzQXRvbWljVmFsdWUuaDsgcGF0aCA9IGIzL0IzQXRvbWljVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2Vu
ZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0dlbmVyaWNCbG9ja0lu
c2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCOTFFNjM0
NDA4MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMv
YWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBh
dGggPSBiMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQzYzQkYxRTY2MEVBNTAwQzEzODM5IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0MxMUU2
NjRBNUEwMEMxMzgzOSAvKiBCM05hdGl2ZVRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM05hdGl2ZVRyYWl0cy5oOyBwYXRoID0gYjMvQjNOYXRpdmVUcmFpdHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREIxOTgzMkQzNDAwN0Q0QjE5IC8q
IERlYnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGVidWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkQ0RERD
MTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNDc3OCw4ICs0NzkwLDYgQEAKIAkJREMyMTQzMDYxQ0EzMkU1MjAwMEE4ODY5IC8q
IElDU3RhdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSUNTdGF0cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzNEMkIwOTFEMzQzMTYxMDBCQTkxOEMgLyog
SGVhcENlbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcENlbGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8q
IEhlYXBDZWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBD
ZWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJREM0NTRCOEExRDAwRTgxRjAw
NEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEFpckR1bXBBc0pTLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJEdW1wQXNKUy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURDNDU0QjhCMUQwMEU4MUYwMDRDMThBRiAvKiBB
aXJEdW1wQXNKUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJEdW1wQXNK
Uy5oOyBwYXRoID0gYjMvYWlyL0FpckR1bXBBc0pTLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCURDNjA1QjU5MUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyRXZlbnQuY3BwOyBwYXRo
ID0gcHJvZmlsZXIvUHJvZmlsZXJFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCURDNjA1QjVBMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyRXZlbnQuaDsgcGF0aCA9IHByb2ZpbGVy
L1Byb2ZpbGVyRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREM2MDVCNUIx
Q0UyNkU5ODAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyVUlELmNwcDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVy
VUlELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyOTIsNiArNTMwMiw4IEBA
CiAJCQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKIAkJCQkwRkVDODRCNDFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEYyQzYz
QjMxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3BwICovLAorCQkJCTBGMkM2M0I0
MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi8sCiAJCQkJMEYyQzYzQUIxRTYw
QUUzQzAwQzEzODM5IC8qIEIzQmFuay5jcHAgKi8sCiAJCQkJMEYyQzYzQUMxRTYwQUUzQzAwQzEz
ODM5IC8qIEIzQmFuay5oICovLAogCQkJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suY3BwICovLApAQCAtNTM1NCw2ICs1MzY2LDcgQEAKIAkJCQkwRkVDODRDRDFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLywKIAkJCQkwRkVDODRDRTFCREFD
REFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8sCiAJCQkJMEZFQzg0Q0YxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzR2VuZXJhdGUuaCAqLywKKwkJCQkwRjJDNjNCNTFFNjM0M0U4MDBDMTM4Mzkg
LyogQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRkVDODREMDFCREFDREFD
MDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1QkYx
QkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCAqLywKIAkJCQkwRkVDODVDMDFCRTE2
N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuaCAqLywKQEAgLTUzNzgsNiArNTM5MSw3IEBACiAJ
CQkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLywKIAkJCQkw
RjMzOEUwMzFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmNwcCAqLywKIAkJCQkw
RjMzOEUwNDFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggKi8sCisJCQkJMEYy
QzYzQzExRTY2NEE1QTAwQzEzODM5IC8qIEIzTmF0aXZlVHJhaXRzLmggKi8sCiAJCQkJMEYzMzhF
MDUxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0LmggKi8sCiAJCQkJMEYzMzhF
MDYxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5jcHAgKi8sCiAJCQkJMEYz
MzhFMDcxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5oICovLApAQCAtNTQ2
OSw2ICs1NDgzLDggQEAKIAkJCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5s
aW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2Nr
LmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5o
ICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNl
dC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0
aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29y
a2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdD
b252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC01NDgwLDggKzU0OTYsNiBAQAogCQkJCTBGMTBGMUEy
MUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCAqLywKIAkJCQk3OUFCQjE3QjFFNUNDQjU3
MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmNwcCAqLywKIAkJCQk3OUFCQjE3QzFFNUNDQjU3
MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmggKi8sCi0JCQkJREM0NTRCOEExRDAwRTgxRjAw
NEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCAqLywKLQkJCQlEQzQ1NEI4QjFEMDBFODFGMDA0QzE4
QUYgLyogQWlyRHVtcEFzSlMuaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyog
QWlyRWxpbWluYXRlRGVhZENvZGUuY3BwICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYy
OSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oICovLAogCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5jcHAgKi8sCkBAIC03MzI2LDYgKzczNDAsNyBAQAogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRjFGRTUxQjE5MjJBM0JDMDA2
OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLywKKwkJCQkwRjJDNjNCRjFFNjYwRUE1MDBDMTM4Mzkg
LyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8sCiAJCQkJODYwMTYxREYwRjNBODNDMTAw
Rjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCAqLywKIAkJCQkwRjM3MzA5MDFDMENE
NzBDMDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggKi8sCiAJCQkJ
ODY0MDkyM0IxNTZFRUQzQjAwNTY2Q0IyIC8qIEFSTTY0QXNzZW1ibGVyLmggKi8sCkBAIC03MzU0
LDggKzczNjksOCBAQAogCQkJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2Vt
Ymxlck1JUFMuaCAqLywKIAkJCQlGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmNwcCAqLywKIAkJCQlGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyogTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmggKi8sCi0JCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi8sCisJCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJQTdBNEFFMDcxNzk3M0IyNjAwNTYxMkIx
IC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLywKIAkJCQk4NjAxNjFFMjBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3NzE4
NUE4RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywKQEAg
LTc5NDMsNyArNzk1OCw2IEBACiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckND
YWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTBGMUEzMUM0MjBCRjAwMDFDMDdE
MiAvKiBBaXJDdXN0b20uaCBpbiBIZWFkZXJzICovLAotCQkJCURDNDU0QjhEMUQwMEU4MjQwMDRD
MThBRiAvKiBBaXJEdW1wQXNKUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NTcwMzkxQkU0NEM5
MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjYxODMyRDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTc5NTYsNiArNzk3MCw3IEBACiAJCQkJMEZFQzg1ODAxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTgxMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3
RDcxRDlEQzQ0MjAwMUI5ODI1IC8qIEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2
M0JDMUU2MzQ0MEMwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjY4NEQ0MzgxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQ
cmVzc3VyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQ3LDYgKzgwNjIs
NyBAQAogCQkJCTQzNDIyQTYzMUMxNThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQ
dHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8q
IEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQjgxRTYzNDNG
NzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjMzOEUwRTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYzM0ZDRkMxQzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2QjhBRDkxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRl
VGFpbHMuaCBpbiBIZWFkZXJzICovLApAQCAtODIzNyw2ICs4MjUzLDcgQEAKIAkJCQlBNzdBNDIz
RTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJDNjNDMjFFNjY0QTVD
MDBDMTM4MzkgLyogQjNOYXRpdmVUcmFpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3
MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAy
QzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywK
QEAgLTgzNjYsNiArODM4Myw3IEBACiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERG
R09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdG
NTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
MzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3
MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKQEAgLTk3OTIsNiArOTgx
MCw3IEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJ
CQkJMEZGQTU0OTcxNkI4ODM1MDAwQjNBOTgyIC8qIEE2NERPcGNvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYyQzYzQzAxRTY2MEVBNzAwQzEzODM5IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUQ0OTM3QzMxRERCRTYxNDAwNzdDODA3IC8qIEFi
c3RyYWN0TW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVGMEY0MTREMTA2
MzkwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzNzBCNEY1
MUJGMjYyMDIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRCYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTgwMiw3ICs5ODIxLDYgQEAKIAkJCQkwRkVD
ODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJREM0NTRCOEMxRDAwRTgyMjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDU3MDM4MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYxODMyQzFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0REUxQ0Ux
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0xMDI0OCw2ICsxMDI2Niw3IEBACiAJCQkJOUU3Mjk0MDcxOTBGMDFBNTAwMUE5MUI1IC8q
IEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QjcxODVC
OEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEYyQzYzQjYxRTYzNDNFQTAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVk
U2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1
QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQw
RTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTEwMjY2LDYgKzEwMjg1LDcgQEAKIAkJCQlFMzVFMDM1RjFCN0FCNDNFMDA3M0FE
MkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MzI0MzhCMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRCNjExODgwOURENTAwNjhBNDZEIC8qIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJDNjNCQjFFNjM0NDBB
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU1MTY1RDIxQkRGMEI5ODAwM0I3NUMxIC8qIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3Bl
Y3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdB
NDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiIC8vIEhhdmUgdG8g
YnJlYWsgd2l0aCBzdHlsZSBiZWNhdXNlIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpcyBhIHNo
YWR5IGhlYWRlci4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBYnN0cmFjdE1hY3JvQXNzZW1i
bGVyQmFzZTo6U3RhdHVzQ29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmRp
dGlvbikgeworICAgIGNhc2UgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJhc2U6OlN1Y2Nlc3M6Cisg
ICAgICAgIG91dC5wcmludCgiU3VjY2VzcyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyQmFzZTo6RmFpbHVyZToKKyAgICAgICAgb3V0LnByaW50KCJG
YWlsdXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMiwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHd0
Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9tLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
NTAsOCArNTEsMjggQEAgbmFtZXNwYWNlIERGRyB7CiBzdHJ1Y3QgT1NSRXhpdDsKIH0KIAorY2xh
c3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJhc2UgeworcHVibGljOgorICAgIGVudW0gU3RhdHVz
Q29uZGl0aW9uIHsKKyAgICAgICAgU3VjY2VzcywKKyAgICAgICAgRmFpbHVyZQorICAgIH07Cisg
ICAgCisgICAgc3RhdGljIFN0YXR1c0NvbmRpdGlvbiBpbnZlcnQoU3RhdHVzQ29uZGl0aW9uIGNv
bmRpdGlvbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgICAgIGNh
c2UgU3VjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBGYWlsdXJlOworICAgICAgICBjYXNlIEZh
aWx1cmU6CisgICAgICAgICAgICByZXR1cm4gU3VjY2VzczsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gU3VjY2VzczsKKyAg
ICB9Cit9OworCiB0ZW1wbGF0ZSA8Y2xhc3MgQXNzZW1ibGVyVHlwZSwgY2xhc3MgTWFjcm9Bc3Nl
bWJsZXJUeXBlPgotY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlciB7CitjbGFzcyBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJCYXNlIHsKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZSwg
TWFjcm9Bc3NlbWJsZXJUeXBlPiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyVHlwZTsKICAgICB0eXBl
ZGVmIEFzc2VtYmxlclR5cGUgQXNzZW1ibGVyVHlwZV9UOwpAQCAtMTEwOCwzICsxMTI5LDE2IEBA
IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZSwgTWEKICNlbmRpZiAvLyBFTkFC
TEUoQVNTRU1CTEVSKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKKworI2lmIEVOQUJMRShBU1NFTUJM
RVIpCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJh
c2U6OlN0YXR1c0NvbmRpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEFTU0VNQkxFUikKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMi0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTM2LDYgKzEzNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IHR3b1RvVGhlMzI7IC8vIFRoaXMgaXMgc3VwZXIgdXNlZnVsIGZvciBzb21lIGRvdWJsZSBjb2Rl
LgogCiAgICAgLy8gVXRpbGl0aWVzIHVzZWQgYnkgdGhlIERGRyBKSVQuCisgICAgdXNpbmcgQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlckJhc2U6OmludmVydDsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxl
ckJhc2U6OmludmVydDsKICAgICAKICAgICBzdGF0aWMgRG91YmxlQ29uZGl0aW9uIGludmVydChE
b3VibGVDb25kaXRpb24gY29uZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDIx
Mjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3MSw2ICsxNzEsMTEgQEAgcHVi
bGljOgogICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBk
ZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZDMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfbXIoc3JjLm9mZnNldCwgc3Jj
LmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIGFk
ZDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CkBAIC0yNTEsMTYgKzI1
Niw3MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgc3Jj
LCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcm0oc3Jj
LCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZDE2KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7
CisgICAgfQorCisgICAgdm9pZCBhbmQxNihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRl
c3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ4
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5hbmRiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmQ4KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmFuZGJfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4
LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIGFuZDMyKEFkZHJlc3Mgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX21yKHNyYy5vZmZz
ZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDMyKEJhc2VJbmRleCBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfbXIo
c3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9
CisKICAgICB2b2lkIGFuZDMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKICAg
ICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgYW5kMzIoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRs
X2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDE2KFRydXN0ZWRJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHdf
aW0oc3RhdGljX2Nhc3Q8aW50MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kd19pbShzdGF0
aWNfY2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgYW5k
OChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5hbmRiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDgoVHJ1c3RlZElt
bTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5h
bmRiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAg
ICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBk
ZXN0KQogICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC00NTYsNiArNTE2LDMxIEBA
IHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubmVnbF9tKHNyY0Rlc3Qub2Zmc2V0LCBzcmNE
ZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgbmVnMzIoQmFzZUluZGV4IHNyY0Rlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWdsX20oc3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3Qu
YmFzZSwgc3JjRGVzdC5pbmRleCwgc3JjRGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBu
ZWcxNihBZGRyZXNzIHNyY0Rlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWd3X20o
c3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBuZWcxNihC
YXNlSW5kZXggc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZ3dfbShzcmNE
ZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlLCBzcmNEZXN0LmluZGV4LCBzcmNEZXN0LnNjYWxlKTsK
KyAgICB9CisKKyAgICB2b2lkIG5lZzgoQWRkcmVzcyBzcmNEZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubmVnYl9tKHNyY0Rlc3Qub2Zmc2V0LCBzcmNEZXN0LmJhc2UpOworICAgIH0K
KworICAgIHZvaWQgbmVnOChCYXNlSW5kZXggc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm5lZ2JfbShzcmNEZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlLCBzcmNEZXN0LmluZGV4
LCBzcmNEZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9ycihzcmMs
IGRlc3QpOwpAQCAtNDcxLDE2ICs1NTYsNzEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxl
ci5vcmxfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lk
IG9yMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIub3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwg
ZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjE2KFJlZ2lzdGVySUQgc3JjLCBBZGRy
ZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcndfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMTYoUmVnaXN0ZXJJRCBzcmMs
IEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X3JtKHNyYywg
ZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQor
CisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAg
IH0KKworICAgIHZvaWQgb3I4KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2Us
IGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgb3IzMihBZGRyZXNz
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX21y
KHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIG9yMzIoQmFz
ZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7
CisgICAgfQorCiAgICAgdm9pZCBvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVz
cykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9pbShpbW0ubV92YWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjMyKFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMTYoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3
X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X2ltKHN0YXRp
Y19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjgo
VHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIub3JiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIg
aW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9p
bShzdGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9p
ZCBvcjMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC02NTQsMTYgKzc5NCw3MSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3ViMTYoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19p
bShzdGF0aWNfY2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UpOworICAgIH0KKworICAgIHZvaWQgc3ViOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX2ltKHN0YXRpY19j
YXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
KyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9pbShpbW0ubV92YWx1ZSwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7
CisgICAgfQorCisgICAgdm9pZCBzdWIxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YndfaW0oc3RhdGljX2Nhc3Q8aW50
MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjgoVHJ1c3RlZElt
bTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5z
dWJiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAg
ICB2b2lkIHN1YjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAg
ICBtX2Fzc2VtYmxlci5zdWJsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9
CiAKKyAgICB2b2lkIHN1YjMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5p
bmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIHN1YjMyKFJlZ2lzdGVy
SUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX3Jt
KHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdWIxNihS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c3Vid19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQg
c3ViOChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc3ViYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAg
IHZvaWQgc3ViMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuc3VibF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3Qu
aW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgc3ViMTYoUmVnaXN0ZXJJRCBz
cmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19ybShz
cmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAg
IH0KKworICAgIHZvaWQgc3ViOChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCB4b3IzMihSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
eG9ybF9ycihzcmMsIGRlc3QpOwpAQCAtNjc3LDYgKzg3Miw1MCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci54b3JsX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRl
eCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubm90bF9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgs
IGRlc3Quc2NhbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3Js
X2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0
LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJl
c3MgZGVzdCkKKyAgICB7CisgICAgICAgIGltbS5tX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50MTZf
dD4oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gLTEpCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5ub3R3X20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcndfaW0oaW1tLm1fdmFsdWUsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9yMTYoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBpbW0ubV92YWx1ZSA9IHN0YXRp
Y19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09
IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci54b3J3X2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBk
ZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgaW1tLm1fdmFsdWUgPSBzdGF0
aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09
IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm90Yl9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JiX2ltKGltbS5t
X3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgo
VHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBpbW0ubV92
YWx1ZSA9IHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoaW1t
Lm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3RiX20oZGVzdC5vZmZz
ZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmJfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBk
ZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgeG9y
MzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYg
KGltbS5tX3ZhbHVlID09IC0xKQpAQCAtNjkwLDExICs5MjksNDEgQEAgcHVibGljOgogICAgICAg
ICBtX2Fzc2VtYmxlci54b3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAg
fQogCisgICAgdm9pZCB4b3IzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci54b3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCB4b3IxNihSZWdp
c3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9y
d19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9y
MTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIueG9yd19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRl
c3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywgQWRkcmVz
cyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yYl9ybShzcmMsIGRlc3Qub2Zm
c2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywg
QmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JiX3JtKHNyYywg
ZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQor
CiAgICAgdm9pZCB4b3IzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAg
ICAgICAgbV9hc3NlbWJsZXIueG9ybF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CiAg
ICAgfQogICAgIAorICAgIHZvaWQgeG9yMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9tcihzcmMub2Zmc2V0LCBzcmMuYmFz
ZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIHhv
cjMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAg
IHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC03NDEsNiArMTAxMCwzMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vdGxfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdDMyKEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm90bF9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Qu
c2NhbGUpOworICAgIH0KKworICAgIHZvaWQgbm90MTYoQWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0K
KworICAgIHZvaWQgbm90MTYoQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3R3X20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2Fs
ZSk7CisgICAgfQorCisgICAgdm9pZCBub3Q4KEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5vdGJfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAg
ICB2b2lkIG5vdDgoQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5u
b3RiX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7Cisg
ICAgfQorCiAgICAgdm9pZCBzcXJ0RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJ
RCBkc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zcXJ0c2RfcnIoc3JjLCBkc3QpOwpA
QCAtMTA3MSw0MiArMTM2NSwyMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0b3JlMTYoUmVnaXN0
ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQogICAgIHsKLSNpZiBDUFUoWDg2KQotICAgICAg
ICAvLyBPbiAzMi1iaXQgeDg2IHdlIGNhbiBvbmx5IHN0b3JlIGZyb20gdGhlIGZpcnN0IDQgcmVn
aXN0ZXJzOwotICAgICAgICAvLyBlc3AuLmVkaSBhcmUgbWFwcGVkIHRvIHRoZSAnaCcgcmVnaXN0
ZXJzIQotICAgICAgICBpZiAoc3JjID49IDQpIHsKLSAgICAgICAgICAgIC8vIFBpY2sgYSB0ZW1w
b3JhcnkgcmVnaXN0ZXIuCi0gICAgICAgICAgICBSZWdpc3RlcklEIHRlbXAgPSBnZXRVbnVzZWRS
ZWdpc3RlcihhZGRyZXNzKTsKLQotICAgICAgICAgICAgLy8gU3dhcCB0byB0aGUgdGVtcG9yYXJ5
IHJlZ2lzdGVyIHRvIHBlcmZvcm0gdGhlIHN0b3JlLgotICAgICAgICAgICAgc3dhcChzcmMsIHRl
bXApOwotICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d19ybSh0ZW1wLCBhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKLSAgICAgICAg
ICAgIHN3YXAoc3JjLCB0ZW1wKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2Vu
ZGlmCiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdndfcm0oc3JjLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKICAgICB9CiAKICAgICB2
b2lkIHN0b3JlMTYoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0jaWYg
Q1BVKFg4NikKLSAgICAgICAgLy8gT24gMzItYml0IHg4NiB3ZSBjYW4gb25seSBzdG9yZSBmcm9t
IHRoZSBmaXJzdCA0IHJlZ2lzdGVyczsKLSAgICAgICAgLy8gZXNwLi5lZGkgYXJlIG1hcHBlZCB0
byB0aGUgJ2gnIHJlZ2lzdGVycyEKLSAgICAgICAgaWYgKHNyYyA+PSA0KSB7Ci0gICAgICAgICAg
ICAvLyBQaWNrIGEgdGVtcG9yYXJ5IHJlZ2lzdGVyLgotICAgICAgICAgICAgUmVnaXN0ZXJJRCB0
ZW1wID0gZ2V0VW51c2VkUmVnaXN0ZXIoYWRkcmVzcyk7Ci0KLSAgICAgICAgICAgIC8vIFN3YXAg
dG8gdGhlIHRlbXBvcmFyeSByZWdpc3RlciB0byBwZXJmb3JtIHRoZSBzdG9yZS4KLSAgICAgICAg
ICAgIHN3YXAoc3JjLCB0ZW1wKTsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdndfcm0odGVt
cCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7Ci0gICAgICAgICAgICBzd2FwKHNyYywg
dGVtcCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgogICAgICAgICBt
X2Fzc2VtYmxlci5tb3Z3X3JtKHNyYywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAg
ICAgfQogCisgICAgdm9pZCBzdG9yZTE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92d19pbShzdGF0aWNfY2FzdDxpbnQx
Nl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
aW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUxNihUcnVzdGVk
SW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5t
b3Z3X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSk7CisgICAgfQogCiAgICAgLy8gRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9u
OgogICAgIC8vCkBAIC0yNzQzLDc0ICszMDE4LDgzOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX2ltKDAsIDAsIFg4NlJlZ2lz
dGVyczo6ZXNwKTsKICAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM4KFN0YXR1
c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklE
IG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsm
XSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsgfSk7CisgICAgfQogCi0gICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhh
dCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9ybWFsIHN0b3Jlcy4gU28sIGl0J3MgYSBuby1vcCBv
biB4ODYuCi0gICAgdm9pZCBzdG9yZUZlbmNlKCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzgo
U3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKICAg
ICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgcmVz
dWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZz
ZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOwogICAg
IH0KIAotICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVudHMgbW90aW9u
IG9mIG5vcm1hbCBsb2Fkcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4ODYuCi0gICAgdm9pZCBsb2Fk
RmVuY2UoKQorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgeworICAgICAgICBhdG9taWNTdHJv
bmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIu
Y21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFi
ZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAg
dm9pZCBhdG9taWNTdHJvbmdDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBl
eHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3Ms
IFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBsYWNl
V2l0aEp1bXAoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCBkZXN0aW5hdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4
cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3JtKG5l
d1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsgfSk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgbWF4SnVt
cFJlcGxhY2VtZW50U2l6ZSgpCisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0Nv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5l
d1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFg4NkFzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpOworICAgICAg
ICBhdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsg
bV9hc3NlbWJsZXIuY21weGNoZ2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UpOyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IHBhdGNoYWJsZUp1bXBT
aXplKCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5k
ZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgewotICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjpwYXRjaGFibGVKdW1wU2l6ZSgpOworICAgICAgICBhdG9taWNTdHJvbmdDQVMo
Y29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNo
Z2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5k
ZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c0Zsb2F0aW5nUG9pbnRSb3VuZGluZygpCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM4KFJlZ2lz
dGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRk
cmVzcykKICAgICB7Ci0gICAgICAgIGlmIChzX3NzZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVj
a1N0YXRlOjpOb3RDaGVja2VkKQotICAgICAgICAgICAgdXBkYXRlRWF4MUVjeEZsYWdzKCk7Ci0g
ICAgICAgIHJldHVybiBzX3NzZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVja1N0YXRlOjpTZXQ7
CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3Nl
bWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Up
OyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FWWCgpCisgICAgdm9pZCBh
dG9taWNTdHJvbmdDQVM4KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQg
bmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgLy8gQVZYIHN0aWxs
IGNhdXNlcyBteXN0ZXJpb3VzIHJlZ3Jlc3Npb25zIGFuZCB0aG9zZSByZWdyZXNzaW9ucyBjYW4g
YmUgbWFzc2l2ZS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdG9taWNTdHJvbmdD
QVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1Zh
bHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsgfSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdXBkYXRlRWF4MUVjeEZsYWdz
KCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0gICAgICAg
IGludCBmbGFncyA9IDA7Ci0jaWYgQ09NUElMRVIoTVNWQykKLSAgICAgICAgaW50IGNwdUluZm9b
NF07Ci0gICAgICAgIF9fY3B1aWQoY3B1SW5mbywgMHgxKTsKLSAgICAgICAgZmxhZ3MgPSBjcHVJ
bmZvWzJdOwotI2VsaWYgQ09NUElMRVIoR0NDX09SX0NMQU5HKQotI2lmIENQVShYODZfNjQpCi0g
ICAgICAgIGFzbSAoCi0gICAgICAgICAgICAibW92bCAkMHgxLCAlJWVheDsiCi0gICAgICAgICAg
ICAiY3B1aWQ7IgotICAgICAgICAgICAgIm1vdmwgJSVlY3gsICUwOyIKLSAgICAgICAgICAgIDog
Ij1nIiAoZmxhZ3MpCi0gICAgICAgICAgICA6Ci0gICAgICAgICAgICA6ICIlZWF4IiwgIiVlYngi
LCAiJWVjeCIsICIlZWR4IgotICAgICAgICAgICAgKTsKLSNlbHNlCi0gICAgICAgIGFzbSAoCi0g
ICAgICAgICAgICAibW92bCAkMHgxLCAlJWVheDsiCi0gICAgICAgICAgICAicHVzaGwgJSVlYng7
IgotICAgICAgICAgICAgImNwdWlkOyIKLSAgICAgICAgICAgICJwb3BsICUlZWJ4OyIKLSAgICAg
ICAgICAgICJtb3ZsICUlZWN4LCAlMDsiCi0gICAgICAgICAgICA6ICI9ZyIgKGZsYWdzKQotICAg
ICAgICAgICAgOgotICAgICAgICAgICAgOiAiJWVheCIsICIlZWN4IiwgIiVlZHgiCi0gICAgICAg
ICAgICApOwotI2VuZGlmCisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3Vs
dCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2
KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5k
UmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOwor
ICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMzIoUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxl
ci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0p
OworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMzIoUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNz
ZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hBdG9taWNTdHJvbmdDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRv
bWljU3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVz
dWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZz
ZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdD
QVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3Jt
KG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNv
bmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdW
YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIo
U3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBi
cmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNz
ZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
KTsgfSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVMzMihTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNo
QXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxl
ci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWlj
V2Vha0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1
bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVM4KGNvbmQsIGV4cGVjdGVkQW5kUmVz
dWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21p
Y1dlYWtDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVz
dWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBy
ZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVM4KGNvbmQsIGV4cGVjdGVkQW5k
UmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0
b21pY1dlYWtDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklE
IHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzE2KGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lk
IGF0b21pY1dlYWtDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lz
dGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMTYoY29uZCwgZXhw
ZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAg
IHZvaWQgYXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJl
Z2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMzIoY29uZCwg
ZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKwor
ICAgIHZvaWQgYXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVz
cywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMzMihj
b25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzgo
Y29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVM4KGNvbmQs
IGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2hBdG9taWNXZWFrQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
ZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBl
Y3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoQXRvbWljV2Vha0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVj
dGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBlY3Rl
ZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
QXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVk
QW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIoY29uZCwgZXhwZWN0ZWRBbmRS
ZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21p
Y1dlYWtDQVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJl
c3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIoY29uZCwgZXhwZWN0ZWRBbmRSZXN1
bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ4
KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY0FkZDgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDgoaW1tLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ4KFJlZ2lzdGVySUQgcmVn
LCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIGFkZDgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNB
ZGQ4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY0FkZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkMTYoaW1t
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQxNihUcnVzdGVkSW1t
MzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgYWRkMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNBZGQxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQxNihyZWcsIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5k
ZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
YWRkMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQzMihU
cnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQWRkMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKGltbSwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMzIoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgYWRkMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNBZGQzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKHJlZywgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1Yjgo
aW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWI4KFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBzdWI4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgYXRvbWljU3ViOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI4KHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViOChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1
YjgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWIxNihUcnVz
dGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIHN1YjE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljU3ViMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjE2KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMTYoUmVnaXN0ZXJJRCByZWcs
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgc3ViMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNT
dWIxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjE2KHJlZywgYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljU3ViMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWIzMihp
bW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjMyKFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBzdWIzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1N1YjMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjMyKHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMzIoUmVnaXN0ZXJJRCByZWcsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBzdWIzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDgo
VHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhbmQ4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQW5kOChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kOChpbW0sIGFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDgoUmVnaXN0ZXJJRCByZWcs
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgYW5kOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0Fu
ZDgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ4KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljQW5kMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQxNihpbW0s
IGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDE2KFRydXN0ZWRJbW0z
MiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBhbmQxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY0FuZDE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDE2KHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMTYoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRl
eCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBh
bmQxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDMyKFRy
dXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNBbmQzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIoaW1tLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQzMihSZWdpc3RlcklEIHJl
ZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBhbmQzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y0FuZDMyKFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNPcjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgoaW1t
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjgoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG9yOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY09yOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNPcjgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgocmVnLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgb3IxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y09yMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMTYocmVn
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFJlZ2lzdGVySUQg
cmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgb3IxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY09yMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjMyKGltbSwgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljT3IzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXgg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3Iz
MihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yMzIoUmVnaXN0
ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgb3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY09yMzIoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjMyKHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhv
cjgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3I4KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3I4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljWG9yOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I4KHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yOChSZWdpc3RlcklEIHJlZywgQmFzZUlu
ZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IHhvcjgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3IxNihU
cnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljWG9yMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KGltbSwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMTYoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgeG9yMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNYb3IxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KHJlZywgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3Iz
MihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjMyKFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3IzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hvcjMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjMyKHJlZywgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMzIoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICB4b3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05l
ZzgoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBuZWc4KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzgo
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIG5lZzgoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMTYo
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBuZWcxNihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWcxNihC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgbmVnMTYoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMzIo
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBuZWczMihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWczMihC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgbmVnMzIoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90OChB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIG5vdDgoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90OChCYXNl
SW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAg
ICAgbm90OChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3QxNihBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG5vdDE2KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDE2KEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBub3QxNihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3QzMihBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG5vdDMyKGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDMyKEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBub3QzMihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkOChS
ZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkYl9ybShyZWcsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGdBZGQ4
KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGJfcm0ocmVnLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkMTYoUmVnaXN0ZXJJRCByZWcsIEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIueGFkZHdfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkMTYoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBtX2Fzc2VtYmxlci54YWRkd19ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY1hjaGdBZGQzMihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkbF9y
bShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1hjaGdBZGQzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhh
ZGRsX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwg
YWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzgoUmVnaXN0
ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2Jfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnOChSZWdpc3Rl
cklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdiX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljWGNoZzE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LnhjaGd3X3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljWGNoZzE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIueGNoZ3dfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnMzIo
UmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0ocmVnLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnMzIo
UmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ybShyZWcsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3E4KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBsb2FkOChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxvYWRBY3E4KEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IGxvYWQ4KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZEFjcThTaWduZWRF
eHRlbmRUbzMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBs
b2FkOFNpZ25lZEV4dGVuZFRvMzIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBs
b2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbG9hZDhTaWduZWRFeHRlbmRUbzMyKHNyYywgZGVzdCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgbG9hZEFjcTE2KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBsb2FkMTYoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBs
b2FkQWNxMTYoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bG9hZDE2KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZEFjcTE2U2lnbmVk
RXh0ZW5kVG8zMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihzcmMsIGRlc3QpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3EzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgbG9hZEFjcTMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGxvYWQzMihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsOChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmU4KHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw4KFJlZ2lzdGVySUQgc3JjLCBC
YXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIHN0b3JlOChzcmMsIGRlc3QpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHN0b3JlUmVsOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3Qp
CisgICAgeworICAgICAgICBzdG9yZTgoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzdG9yZVJlbDgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAg
ICAgICBzdG9yZTgoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVJlbDE2
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KHNy
YywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwxNihSZWdpc3RlcklEIHNy
YywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KHNyYywgZGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KGltbSwgZGVzdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc3RvcmVSZWwxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAg
ICB7CisgICAgICAgIHN0b3JlMTYoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
dG9yZVJlbDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBz
dG9yZTMyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihSZWdp
c3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTMyKHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihUcnVzdGVkSW1tMzIgaW1t
LCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTMyKGltbSwgZGVzdCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIHN0b3JlMzIoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisg
ICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhhdCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9y
bWFsIHN0b3Jlcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4ODYuCisgICAgdm9pZCBzdG9yZUZlbmNl
KCkKKyAgICB7CisgICAgfQorCisgICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhhdCBpdCBw
cmV2ZW50cyBtb3Rpb24gb2Ygbm9ybWFsIGxvYWRzLiBTbywgaXQncyBhIG5vLW9wIG9uIHg4Ni4K
KyAgICB2b2lkIGxvYWRGZW5jZSgpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJl
cGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9j
YXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVw
bGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGVzdGlu
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJk
aWZmX3QgbWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCk7CisgICAgfQorCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBwYXRjaGFibGVKdW1wU2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjpwYXRjaGFibGVKdW1wU2l6ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzRmxvYXRpbmdQb2ludFJvdW5kaW5nKCkKKyAgICB7CisgICAgICAgIGlmIChzX3Nz
ZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVja1N0YXRlOjpOb3RDaGVja2VkKQorICAgICAgICAg
ICAgdXBkYXRlRWF4MUVjeEZsYWdzKCk7CisgICAgICAgIHJldHVybiBzX3NzZTRfMUNoZWNrU3Rh
dGUgPT0gQ1BVSURDaGVja1N0YXRlOjpTZXQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgc3Vw
cG9ydHNBVlgoKQorICAgIHsKKyAgICAgICAgLy8gQVZYIHN0aWxsIGNhdXNlcyBteXN0ZXJpb3Vz
IHJlZ3Jlc3Npb25zIGFuZCB0aG9zZSByZWdyZXNzaW9ucyBjYW4gYmUgbWFzc2l2ZS4KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUVheDFFY3hG
bGFncygpCisgICAgeworICAgICAgICBpbnQgZmxhZ3MgPSAwOworI2lmIENPTVBJTEVSKE1TVkMp
CisgICAgICAgIGludCBjcHVJbmZvWzRdOworICAgICAgICBfX2NwdWlkKGNwdUluZm8sIDB4MSk7
CisgICAgICAgIGZsYWdzID0gY3B1SW5mb1syXTsKKyNlbGlmIENPTVBJTEVSKEdDQ19PUl9DTEFO
RykKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBhc20gKAorICAgICAgICAgICAgIm1vdmwgJDB4
MSwgJSVlYXg7IgorICAgICAgICAgICAgImNwdWlkOyIKKyAgICAgICAgICAgICJtb3ZsICUlZWN4
LCAlMDsiCisgICAgICAgICAgICA6ICI9ZyIgKGZsYWdzKQorICAgICAgICAgICAgOgorICAgICAg
ICAgICAgOiAiJWVheCIsICIlZWJ4IiwgIiVlY3giLCAiJWVkeCIKKyAgICAgICAgICAgICk7Cisj
ZWxzZQorICAgICAgICBhc20gKAorICAgICAgICAgICAgIm1vdmwgJDB4MSwgJSVlYXg7IgorICAg
ICAgICAgICAgInB1c2hsICUlZWJ4OyIKKyAgICAgICAgICAgICJjcHVpZDsiCisgICAgICAgICAg
ICAicG9wbCAlJWVieDsiCisgICAgICAgICAgICAibW92bCAlJWVjeCwgJTA7IgorICAgICAgICAg
ICAgOiAiPWciIChmbGFncykKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgIDogIiVlYXgiLCAi
JWVjeCIsICIlZWR4IgorICAgICAgICAgICAgKTsKKyNlbmRpZgogI2VuZGlmIC8vIENPTVBJTEVS
KEdDQ19PUl9DTEFORykKICAgICAgICAgc19zc2U0XzFDaGVja1N0YXRlID0gKGZsYWdzICYgKDEg
PDwgMTkpKSA/IENQVUlEQ2hlY2tTdGF0ZTo6U2V0IDogQ1BVSURDaGVja1N0YXRlOjpDbGVhcjsK
ICAgICAgICAgc19hdnhDaGVja1N0YXRlID0gKGZsYWdzICYgKDEgPDwgMjgpKSA/IENQVUlEQ2hl
Y2tTdGF0ZTo6U2V0IDogQ1BVSURDaGVja1N0YXRlOjpDbGVhcjsKQEAgLTI4MzEsNiArMzg3MCwx
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxYODZBc3NlbWJsZXI6
OkNvbmRpdGlvbj4oY29uZCk7CiAgICAgfQogCisgICAgWDg2QXNzZW1ibGVyOjpDb25kaXRpb24g
eDg2Q29uZGl0aW9uKFN0YXR1c0NvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25kKSB7CisgICAgICAgIGNhc2UgU3VjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBYODZB
c3NlbWJsZXI6OkNvbmRpdGlvbkU7CisgICAgICAgIGNhc2UgRmFpbHVyZToKKyAgICAgICAgICAg
IHJldHVybiBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbk5FOworICAgICAgICB9CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6
OkNvbmRpdGlvbkU7CisgICAgfQorCiAgICAgdm9pZCBzZXQzMihYODZBc3NlbWJsZXI6OkNvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogI2lmIENQVShYODYpCkBAIC0yOTI1
LDYgKzM5NzYsMzUgQEAgcHJvdGVjdGVkOgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihzaXpl
T2ZSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIHNyY0lzTm9uWmVyby5saW5rKHRoaXMpOwogICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgYXRvbWljU3Ry
b25nQ0FTKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0
LCBSZWdpc3RlcklEIHJlc3VsdCwgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3
YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBmdW5jKCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRS
ZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgc2V0MzIoeDg2Q29uZGl0aW9uKGNv
bmQpLCByZXN1bHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
dm9pZCBhdG9taWNTdHJvbmdDQVMoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgY29uc3Qg
RnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJl
Z2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBmdW5j
KCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIEp1bXAgYnJhbmNoQXRv
bWljU3Ryb25nQ0FTKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5k
UmVzdWx0LCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgc3dhcChleHBlY3RlZEFu
ZFJlc3VsdCwgWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIGZ1bmMoKTsKKyAgICAgICAgc3dhcChleHBlY3RlZEFuZFJlc3VsdCwgWDg2UmVn
aXN0ZXJzOjplYXgpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29u
ZGl0aW9uKGNvbmQpKSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIC8vIE9ubHkgTWFjcm9Bc3Nl
bWJsZXJYODYgc2hvdWxkIGJlIHVzaW5nIHRoZSBmb2xsb3dpbmcgbWV0aG9kOyBTU0UyIGlzIGFs
d2F5cyBhdmFpbGFibGUgb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2NCwxMSArMjY0LDIxIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7
CiAgICAgfQogCisgICAgdm9pZCBhZGQ2NChCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNl
LCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBhZGQ2NChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkcV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQg
YWRkNjQoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYWRkcV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgs
IGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgYWRkNjQoQWJzb2x1dGVBZGRyZXNzIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHNy
Yy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKQEAgLTMwNiw2ICszMTYsMTQgQEAgcHVibGlj
OgogICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBhZGQ2NChUcnVzdGVkSW1t
MzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlmIChpbW0ubV92YWx1
ZSA9PSAxKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuaW5jcV9tKGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9
CisKICAgICB2b2lkIGFkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRy
ZXNzKQogICAgIHsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBz
Y3JhdGNoUmVnaXN0ZXIoKSk7CkBAIC0zNDIsMTEgKzM2MCw0MSBAQCBwdWJsaWM6CiAgICAgICAg
IG1fYXNzZW1ibGVyLmFuZHFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDY0
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5hbmRxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmQ2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5hbmRxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRl
eCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ2NChBZGRyZXNzIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9tcihzcmMub2Zm
c2V0LCBzcmMuYmFzZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhbmQ2NChCYXNlSW5kZXgg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX21y
KHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAg
fQorCiAgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3Qp
CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX2lyKGltbS5tX3ZhbHVlLCBzcmNEZXN0
KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfaW0oaW1tLm1fdmFsdWUsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX2lt
KGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNj
YWxlKTsKKyAgICB9CisKICAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3Rl
cklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBpbnRwdHJfdCBpbnRWYWx1ZSA9IGltbS5hc0lu
dHB0cigpOwpAQCAtNTUyLDExICs2MDAsNTEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxl
ci5uZWdxX3IoZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBuZWc2NChBZGRyZXNzIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWdxX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7
CisgICAgfQorCisgICAgdm9pZCBuZWc2NChCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5lZ3FfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBk
ZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9ycihzcmMsIGRlc3Qp
OwogICAgIH0KIAorICAgIHZvaWQgb3I2NChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9ybShzcmMsIGRlc3Qub2Zmc2V0
LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQg
b3I2NChBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIub3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIG9yNjQoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIub3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5z
Y2FsZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEFk
ZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9pbShpbW0ubV92YWx1
ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JxX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBk
ZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVn
aXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgaWYgKGltbS5tX3ZhbHVlIDw9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpCkBAIC02MTksMTYgKzcwNywzMSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3ViNjQoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJx
X2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHN1YjY0KEFkZHJlc3Mgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX21yKHNy
Yy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjY0KEJhc2VJ
bmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1
YnFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsK
KyAgICB9CisKICAgICB2b2lkIHN1YjY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdWI2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX3JtKHNyYywgZGVzdC5vZmZz
ZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9p
ZCB4b3I2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAg
bV9hc3NlbWJsZXIueG9ycV9ycihzcmMsIGRlc3QpOwpAQCAtNjUxLDYgKzc1NCwzMSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjY0KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfcm0oc3JjLCBkZXN0Lm9mZnNl
dCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lk
IHhvcjY0KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54b3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIHhvcjY0KEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnhvcnFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwg
c3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfaW0oaW1t
Lm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9y
NjQoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54b3JxX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0
LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnhv
cnFfaXIoaW1tLm1fdmFsdWUsIHNyY0Rlc3QpOwpAQCAtNjY2LDYgKzc5NCwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vdHFfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdDY0KEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm90cV9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Qu
c2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgbG9hZDY0KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNz
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX21yKGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGRlc3QpOwpAQCAtNzI1LDYgKzg1OCwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfaTMybShpbW0ubV92YWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdG9yZTY0KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92cV9pMzJtKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBh
ZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHN0b3JlNjQo
VHJ1c3RlZEltbTY0IGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAg
ICBpZiAoQ0FOX1NJR05fRVhURU5EXzMyXzY0KGltbS5tX3ZhbHVlKSkgewpAQCAtMTI5NCw3ICsx
NDMyLDI1NSBAQCBwdWJsaWM6CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjptb3Zl
KFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKICAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpicmFuY2hUZXN0OChjb25kLCBBZGRy
ZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSwgbWFzazgpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVk
QW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVl
LCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBh
dG9taWNTdHJvbmdDQVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lz
dGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVj
dGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1Zh
bHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM2NChSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsm
XSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM2NChSZWdp
c3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXgg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3Vs
dCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9
CiAKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FT
KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hncV9ybShu
ZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25k
LCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFs
dWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Mu
c2NhbGUpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVM2NChTdGF0dXNDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdW
YWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAg
IGF0b21pY1N0cm9uZ0NBUzY0KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRk
cmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVM2NChTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVl
LCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljV2Vha0NB
UzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBS
ZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1
cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1Zh
bHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM2NChT
dGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0
ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4g
YnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVl
LCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY0FkZDY0KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgYWRkNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNBZGQ2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkNjQoaW1tLCBhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ2
NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDY0KFJlZ2lz
dGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvY2soKTsKKyAgICAgICAgYWRkNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNTdWI2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjY0KGltbSwgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViNjQoVHJ1c3RlZEltbTMyIGltbSwg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIHN1YjY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWlj
U3ViNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNTdWI2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjY0KHJl
ZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBhbmQ2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY0FuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ2NChpbW0sIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDY0KFJlZ2lzdGVySUQgcmVnLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IGFuZDY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQo
UmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhbmQ2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY09yNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjY0KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I2NChUcnVzdGVkSW1tMzIgaW1t
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgb3I2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y09yNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY09yNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjY0KHJlZywg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yNjQoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICB4b3I2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1hvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I2NChpbW0sIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjY0KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhv
cjY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yNjQoUmVn
aXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3I2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY05lZzY0KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnNjQoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljTmVnNjQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY05vdDY0KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90NjQoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljTm90NjQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hjaGdBZGQ2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54
YWRkcV9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY1hjaGdBZGQ2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLnhhZGRxX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzY0
KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JtKHJlZywgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzY0
KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3Ffcm0ocmVnLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBsb2FkQWNxNjQoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGxvYWQ2NChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGxvYWRBY3E2NChCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBsb2FkNjQoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVJlbDY0
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KHNy
YywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw2NChSZWdpc3RlcklEIHNy
YywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KHNyYywgZGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KGltbSwgZGVzdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc3RvcmVSZWw2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAg
ICB7CisgICAgICAgIHN0b3JlNjQoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCB0
cnVuY2F0ZURvdWJsZVRvVWludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmN2dHRzZDJzaXFfcnIoc3JjLCBkZXN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAko
cmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZB
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5MCwxNiArMTkwLDIwIEBAIHBy
aXZhdGU6CiAgICAgICAgIE9QX0FERF9Fdkd2ICAgICAgICAgICAgICAgICAgICAgPSAweDAxLAog
ICAgICAgICBPUF9BRERfR3ZFdiAgICAgICAgICAgICAgICAgICAgID0gMHgwMywKICAgICAgICAg
T1BfQUREX0VBWEl2ICAgICAgICAgICAgICAgICAgICA9IDB4MDUsCisgICAgICAgIE9QX09SX0V2
R2IgICAgICAgICAgICAgICAgICAgICAgPSAweDA4LAogICAgICAgICBPUF9PUl9Fdkd2ICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwOSwKICAgICAgICAgT1BfT1JfR3ZFdiAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MEIsCiAgICAgICAgIE9QX09SX0VBWEl2ICAgICAgICAgICAgICAgICAgICAg
PSAweDBELAogICAgICAgICBPUF8yQllURV9FU0NBUEUgICAgICAgICAgICAgICAgID0gMHgwRiwK
KyAgICAgICAgT1BfQU5EX0V2R2IgICAgICAgICAgICAgICAgICAgICA9IDB4MjAsCiAgICAgICAg
IE9QX0FORF9Fdkd2ICAgICAgICAgICAgICAgICAgICAgPSAweDIxLAogICAgICAgICBPUF9BTkRf
R3ZFdiAgICAgICAgICAgICAgICAgICAgID0gMHgyMywKKyAgICAgICAgT1BfU1VCX0V2R2IgICAg
ICAgICAgICAgICAgICAgICA9IDB4MjgsCiAgICAgICAgIE9QX1NVQl9Fdkd2ICAgICAgICAgICAg
ICAgICAgICAgPSAweDI5LAogICAgICAgICBPUF9TVUJfR3ZFdiAgICAgICAgICAgICAgICAgICAg
ID0gMHgyQiwKICAgICAgICAgT1BfU1VCX0VBWEl2ICAgICAgICAgICAgICAgICAgICA9IDB4MkQs
CiAgICAgICAgIFBSRV9QUkVESUNUX0JSQU5DSF9OT1RfVEFLRU4gICAgPSAweDJFLAorICAgICAg
ICBPUF9YT1JfRXZHYiAgICAgICAgICAgICAgICAgICAgID0gMHgzMCwKICAgICAgICAgT1BfWE9S
X0V2R3YgICAgICAgICAgICAgICAgICAgICA9IDB4MzEsCiAgICAgICAgIE9QX1hPUl9HdkV2ICAg
ICAgICAgICAgICAgICAgICAgPSAweDMzLAogICAgICAgICBPUF9YT1JfRUFYSXYgICAgICAgICAg
ICAgICAgICAgID0gMHgzNSwKQEAgLTIyMyw2ICsyMjcsNyBAQCBwcml2YXRlOgogICAgICAgICBP
UF9HUk9VUDFfRXZJYiAgICAgICAgICAgICAgICAgID0gMHg4MywKICAgICAgICAgT1BfVEVTVF9F
YkdiICAgICAgICAgICAgICAgICAgICA9IDB4ODQsCiAgICAgICAgIE9QX1RFU1RfRXZHdiAgICAg
ICAgICAgICAgICAgICAgPSAweDg1LAorICAgICAgICBPUF9YQ0hHX0V2R2IgICAgICAgICAgICAg
ICAgICAgID0gMHg4NiwKICAgICAgICAgT1BfWENIR19Fdkd2ICAgICAgICAgICAgICAgICAgICA9
IDB4ODcsCiAgICAgICAgIE9QX01PVl9FYkdiICAgICAgICAgICAgICAgICAgICAgPSAweDg4LAog
ICAgICAgICBPUF9NT1ZfRXZHdiAgICAgICAgICAgICAgICAgICAgID0gMHg4OSwKQEAgLTI1Miw2
ICsyNTcsNyBAQCBwcml2YXRlOgogICAgICAgICBQUkVfU1NFX0YyICAgICAgICAgICAgICAgICAg
ICAgID0gMHhGMiwKICAgICAgICAgUFJFX1NTRV9GMyAgICAgICAgICAgICAgICAgICAgICA9IDB4
RjMsCiAgICAgICAgIE9QX0hMVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweEY0LAorICAg
ICAgICBPUF9HUk9VUDNfRWIgICAgICAgICAgICAgICAgICAgID0gMHhGNiwKICAgICAgICAgT1Bf
R1JPVVAzX0ViSWIgICAgICAgICAgICAgICAgICA9IDB4RjYsCiAgICAgICAgIE9QX0dST1VQM19F
diAgICAgICAgICAgICAgICAgICAgPSAweEY3LAogICAgICAgICBPUF9HUk9VUDNfRXZJeiAgICAg
ICAgICAgICAgICAgID0gMHhGNywgLy8gT1BfR1JPVVAzX0V2IGhhcyBhbiBpbW1lZGlhdGUsIHdo
ZW4gaW5zdHJ1Y3Rpb24gaXMgYSB0ZXN0LiAKQEAgLTI5MCw2ICsyOTYsOCBAQCBwcml2YXRlOgog
ICAgICAgICBPUF9TRVRDQyAgICAgICAgICAgID0gMHg5MCwKICAgICAgICAgT1AyXzNCWVRFX0VT
Q0FQRV9BRSA9IDB4QUUsCiAgICAgICAgIE9QMl9JTVVMX0d2RXYgICAgICAgPSAweEFGLAorICAg
ICAgICBPUDJfQ01QWENIR2IgICAgICAgID0gMHhCMCwKKyAgICAgICAgT1AyX0NNUFhDSEcgICAg
ICAgICA9IDB4QjEsCiAgICAgICAgIE9QMl9NT1ZaWF9HdkViICAgICAgPSAweEI2LAogICAgICAg
ICBPUDJfQlNGICAgICAgICAgICAgID0gMHhCQywKICAgICAgICAgT1AyX1RaQ05UICAgICAgICAg
ICA9IDB4QkMsCkBAIC0yOTgsNiArMzA2LDggQEAgcHJpdmF0ZToKICAgICAgICAgT1AyX01PVlNY
X0d2RWIgICAgICA9IDB4QkUsCiAgICAgICAgIE9QMl9NT1ZaWF9HdkV3ICAgICAgPSAweEI3LAog
ICAgICAgICBPUDJfTU9WU1hfR3ZFdyAgICAgID0gMHhCRiwKKyAgICAgICAgT1AyX1hBRERiICAg
ICAgICAgICA9IDB4QzAsCisgICAgICAgIE9QMl9YQUREICAgICAgICAgICAgPSAweEMxLAogICAg
ICAgICBPUDJfUEVYVFJXX0dkVWRJYiAgID0gMHhDNSwKICAgICAgICAgT1AyX1BTTExRX1VkcUli
ICAgICA9IDB4NzMsCiAgICAgICAgIE9QMl9QU1JMUV9VZHFJYiAgICAgPSAweDczLApAQCAtNDQw
LDYgKzQ1MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9B
RERfR3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGFkZGxf
bXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0FERF9HdkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9Cisg
ICAgCiAjaWYgIUNQVShYODZfNjQpCiAgICAgdm9pZCBhZGRsX21yKGNvbnN0IHZvaWQqIGFkZHIs
IFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTU2MiwxMSArNTc3LDIxIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0d2RXYsIGRzdCwgYmFzZSwgb2Zm
c2V0KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0d2RXYsIGRzdCwgYmFzZSwg
aW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYWRkcV9ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CiAKKyAgICB2b2lkIGFkZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNj
YWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYWRkcV9pcihpbnQgaW1tLCBSZWdpc3Rl
cklEIGRzdCkKICAgICB7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7
CkBAIC01OTEsNiArNjE2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTMyKGltbSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICB2b2lkIGFkZHFfaW0oaW50
IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgewor
ICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQ
MV9PUF9BREQsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9y
bWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfQURELCBiYXNl
LCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlh
dGUzMihpbW0pOworICAgICAgICB9CisgICAgfQogI2Vsc2UKICAgICB2b2lkIGFkZGxfaW0oaW50
IGltbSwgY29uc3Qgdm9pZCogYWRkcikKICAgICB7CkBAIC02MTQsMTEgKzY1MCw0MyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfR3ZFdiwgZHN0LCBiYXNl
LCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgYW5kbF9tcihpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0d2RXYsIGRzdCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYW5kbF9ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAg
ICAgfQogCisgICAgdm9pZCBhbmRsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBhbmR3X3JtKFJlZ2lzdGVySUQgc3JjLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5w
cmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIGFuZGxfcm0oc3JjLCBvZmZzZXQsIGJh
c2UpOworICAgIH0KKworICAgIHZvaWQgYW5kd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIGFu
ZGxfcm0oc3JjLCBvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmRiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0V2R2IsIHNyYywgYmFz
ZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZGJfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9FdkdiLCBzcmMsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIGFuZGxfaXIoaW50
IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5E
XzhfMzIoaW1tKSkgewpAQCAtNjQxLDYgKzcwOSw1MyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAKKyAgICB2b2lkIGFuZGxfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FO
X1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2
SXosIEdST1VQMV9PUF9BTkQsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIGFuZHdfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAg
ICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBvZmZzZXQp
OworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBH
Uk9VUDFfT1BfQU5ELCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1t
ZWRpYXRlMTYoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYW5kd19pbShpbnQg
aW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBz
Y2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpF
KTsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX0FORCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRp
YXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUs
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUxNihpbW0pOworICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCBhbmRiX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9H
Uk9VUDFfRWJJYiwgR1JPVVAxX09QX0FORCwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKworICAgIHZvaWQgYW5kYl9pbShpbnQgaW1t
LCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2Fs
ZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwg
R1JPVVAxX09QX0FORCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICBtX2Zv
cm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2
b2lkIGFuZHFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTY1
Nyw2ICs3NzIsNDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRl
MzIoaW1tKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHZvaWQgYW5kcV9tcihpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wNjQoT1BfQU5EX0d2RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3Rl
cklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQU5EX0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgYW5kcV9ybShSZWdpc3RlcklEIHNyYywgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIGFuZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKworICAgIHZvaWQgYW5kcV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkg
eworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdS
T1VQMV9PUF9BTkQsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1l
ZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX0FORCwgYmFzZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2b2lkIGFuZHFfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FO
X1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9BTkQsIGJhc2UsIGluZGV4LCBzY2FsZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQ
MV9Fdkl6LCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAg
ICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQog
I2Vsc2UKICAgICB2b2lkIGFuZGxfaW0oaW50IGltbSwgY29uc3Qgdm9pZCogYWRkcikKICAgICB7
CkBAIC03MDMsNiArODYwLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0dST1VQNV9FdiwgR1JPVVAxX09QX0FERCwgYmFzZSwgb2Zmc2V0KTsK
ICAgICB9CisKKyAgICB2b2lkIGluY3FfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcDY0KE9QX0dST1VQNV9FdiwgR1JPVVAxX09QX0FERCwgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KICNlbmRpZiAvLyBDUFUoWDg2XzY0KQogCiAgICAgdm9pZCBuZWds
X3IoUmVnaXN0ZXJJRCBkc3QpCkBAIC03MTUsNiArODc3LDE2IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JPVVAzX09QX05F
RywgZHN0KTsKICAgICB9CisKKyAgICB2b2lkIG5lZ3FfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNf
RXYsIEdST1VQM19PUF9ORUcsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBuZWdx
X20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYs
IEdST1VQM19PUF9ORUcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5k
aWYKIAogICAgIHZvaWQgbmVnbF9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKQEAgLTcy
Miw2ICs4OTQsMzMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1Bf
R1JPVVAzX0V2LCBHUk9VUDNfT1BfTkVHLCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZv
aWQgbmVnbF9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQ
M19FdiwgR1JPVVAzX09QX05FRywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0K
KworICAgIHZvaWQgbmVnd19tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbmVn
bF9tKG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBuZWd3X20oaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG5lZ2xf
bShvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBuZWdiX20o
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQM19FYiwgR1JPVVAzX09QX05FRywgYmFzZSwgb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICB2b2lkIG5lZ2JfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcChPUF9HUk9VUDNfRWIsIEdST1VQM19PUF9ORUcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICB9CisKICAgICB2b2lkIG5vdGxfcihSZWdpc3RlcklEIGRzdCkKICAgICB7CiAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1Qs
IGRzdCk7CkBAIC03MzIsNiArOTMxLDMzIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQM19FdiwgR1JPVVAzX09QX05PVCwgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdGxfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG5vdHdfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIG5vdGxfbShvZmZzZXQsIGJhc2UpOworICAgIH0KKworICAgIHZvaWQgbm90d19t
KGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOwor
ICAgICAgICBub3RsX20ob2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAg
IHZvaWQgbm90Yl9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRWIsIEdST1VQM19PUF9OT1QsIGJhc2Us
IG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBub3RiX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0ViLCBHUk9VUDNfT1BfTk9ULCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2b2lkIG5v
dHFfcihSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC03NDIsNiArOTY4LDExIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JP
VVAzX09QX05PVCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CisKKyAgICB2b2lkIG5vdHFfbShpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JPVVAz
X09QX05PVCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KICNlbmRpZgogCiAg
ICAgdm9pZCBvcmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpAQCAtNzU0LDEx
ICs5ODUsNDMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1Jf
R3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgb3JsX21yKGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9PUl9H
dkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lk
IG9ybF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAg
IHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R3YsIHNyYywgYmFzZSwg
b2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIG9ybF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfRXZHdiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBvcndfcm0oUmVnaXN0ZXJJ
RCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgb3JsX3JtKHNyYywgb2Zm
c2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yd19ybShSZWdpc3RlcklEIHNyYywgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAg
ICAgIG9ybF9ybShzcmMsIG9mZnNldCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R2IsIHNyYywg
YmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yYl9ybShSZWdpc3RlcklEIHNyYywg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfRXZHYiwgc3JjLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBvcmxfaXIoaW50
IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5E
XzhfMzIoaW1tKSkgewpAQCAtNzg0LDEyICsxMDQ3LDEwMSBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICB2b2lkIG9ybF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIGlmIChD
QU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9F
dkl6LCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIG9yd19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAg
IGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJeiwgR1JP
VVAxX09QX09SLCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRp
YXRlMTYoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgb3J3X2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOwor
ICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIGlu
ZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgo
aW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX09SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNl
dCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBvcmJfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9F
YkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7
CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwgR1JPVVAxX09Q
X09SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0KQogICAgIHZvaWQgb3JxX3Jy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcDY0KE9QX09SX0V2R3YsIHNyYywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lk
IG9ycV9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfT1JfR3ZFdiwgZHN0LCBiYXNl
LCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgb3JxX21yKGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX09SX0d2RXYsIGRzdCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgb3JxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9PUl9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7Cisg
ICAgfQorCisgICAgdm9pZCBvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfT1JfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBvcnFfaW0oaW50IGltbSwgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84
XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQ
MV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX09SLCBiYXNlLCBv
ZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgb3JxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
aWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9Q
X0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAg
ICB9CisKICAgICB2b2lkIG9ycV9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAg
ICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC04MzEsMTEgKzExODMs
NDMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0d2RXYs
IGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YmxfbXIoaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9HdkV2
LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIHN1
Ymxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7
CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBv
ZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgc3VibF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwg
aW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgc3Vid19ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3AoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIHN1Yndfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
cHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3Ao
T1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwor
ICAgIHZvaWQgc3ViYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9FdkdiLCBz
cmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBzdWJiX3JtKFJlZ2lzdGVySUQg
c3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBz
Y2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHYiwg
c3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBzdWJs
X2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdO
X0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTg2MSw2ICsxMjQ1LDUzIEBAIHB1YmxpYzoKICAgICAg
ICAgfQogICAgIH0KIAorICAgIHZvaWQgc3VibF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9TVUIsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9H
Uk9VUDFfRXZJeiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOwor
ICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgc3Vid19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9TVUIsIGJhc2Us
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0V2SXosIEdST1VQMV9PUF9TVUIsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWJ3
X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1Bf
U1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9TVUIsIGJhc2UsIGluZGV4
LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTE2KGlt
bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHN1YmJfaW0oaW50IGltbSwgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX0dST1VQMV9FYkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBvZmZzZXQpOworICAgICAg
ICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCisgICAgdm9pZCBzdWJiX2lt
KGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQ
MV9FYkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0
KQogICAgIHZvaWQgc3VicV9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ewpAQCAtODcyLDExICsxMzAzLDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfU1VCX0d2RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2
b2lkIHN1YnFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4
LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfU1VCX0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKwogICAgIHZvaWQgc3VicV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQo
T1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YnFf
cm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
NjQoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0K
KwogICAgIHZvaWQgc3VicV9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAg
ICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC05MDEsNiArMTM0MiwxNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOwogICAg
ICAgICB9CiAgICAgfQorCisgICAgdm9pZCBzdWJxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAg
ICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGlt
bSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZz
ZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAg
fQorICAgIH0KICNlbHNlCiAgICAgdm9pZCBzdWJsX2ltKGludCBpbW0sIGNvbnN0IHZvaWQqIGFk
ZHIpCiAgICAgewpAQCAtOTI0LDExICsxMzc2LDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX1hPUl9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CiAgICAgfQog
CisgICAgdm9pZCB4b3JsX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLm9uZUJ5dGVPcChPUF9YT1JfR3ZFdiwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgfQorCiAgICAgdm9pZCB4b3JsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3AoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHhv
cmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0
ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hPUl9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CisKICAgICB2b2lkIHhvcmxfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTk0
MCw2ICsxNDAyLDc1IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgeG9y
bF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5k
ZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihp
bW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIs
IEdST1VQMV9PUF9YT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1hPUiwg
YmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1t
ZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgeG9yd19ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICB4b3JsX3JtKHNy
Yywgb2Zmc2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcndfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNj
YWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUp
OworICAgICAgICB4b3JsX3JtKHNyYywgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAg
IH0KKworICAgIHZvaWQgeG9yd19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9YT1IsIGJhc2Us
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0V2SXosIEdST1VQMV9PUF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB4b3J3
X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1Bf
WE9SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9YT1IsIGJhc2UsIGluZGV4
LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTE2KGlt
bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHhvcmJfcm0oUmVnaXN0ZXJJRCBzcmMs
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcChPUF9YT1JfRXZHYiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAg
IHZvaWQgeG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfWE9SX0V2R2IsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKworICAgIHZvaWQgeG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0ViSWIsIEdST1VQMV9PUF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVy
LmltbWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcmJfaW0oaW50IGltbSwgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQ
MV9PUF9YT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0
ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKwogICAgIHZvaWQgeG9ybF9pcihpbnQgaW1tLCBS
ZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihp
bW0pKSB7CkBAIC05NzQsMTEgKzE1MDUsNDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
ICAgIAorICAgIHZvaWQgeG9ycV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9P
UF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4
KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCB4b3JxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9T
SUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFf
RXZJeiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKICAgICB2b2lkIHhvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hPUl9F
dkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCB4b3JxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hP
Ul9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIHhvcnFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YT1JfR3ZFdiwgZGVz
dCwgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcnFfbXIoaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hPUl9HdkV2
LCBkZXN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAg
ICB2b2lkIGx6Y250X3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKQEAgLTE1ODYs
MTEgKzIxNTMsMzggQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgeGNoZ2Jfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R2IsIHNyYywgYmFzZSwgb2Zmc2V0KTsK
KyAgICB9CisKKyAgICB2b2lkIHhjaGdiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R2IsIHNyYywgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgeGNoZ3dfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQg
eGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVn
aXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJl
Zml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1Bf
WENIR19Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAg
ICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBz
cmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCB4Y2hnbF9ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2
LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICNpZiBDUFUoWDg2
XzY0KQogICAgIHZvaWQgeGNoZ3FfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQog
ICAgIHsKQEAgLTE2MDYsNiArMjIwMCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CisKKyAgICB2b2lkIHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIG1vdmxfcnIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpAQCAtMTczMSw2ICsyMzMwLDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wOChPUF9NT1ZfRXZHdiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBtb3Z3X2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
LnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0dST1VQMTFfRXZJeiwgR1JPVVAxMV9NT1YsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1f
Zm9ybWF0dGVyLmltbWVkaWF0ZTE2KGltbSk7CisgICAgfQorCisgICAgdm9pZCBtb3Z3X2ltKGlu
dCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50
IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJ
WkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxMV9Fdkl6LCBHUk9V
UDExX01PViwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGUxNihpbW0pOworICAgIH0KKwogICAgIHZvaWQgbW92bF9FQVhtKGNvbnN0IHZv
aWQqIGFkZHIpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfTU9WX092
RUFYKTsKQEAgLTE4MDAsNiArMjQxMywxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVy
LmltbWVkaWF0ZTMyKGltbSk7CiAgICAgfQogCisgICAgdm9pZCBtb3ZxX2kzMm0oaW50IGltbSwg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDExX0V2SXos
IEdST1VQMTFfTU9WLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIG1fZm9y
bWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgfQorCiAgICAgdm9pZCBtb3ZxX2k2NHIoaW50
NjRfdCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfTU9WX0VBWEl2LCBkc3QpOwpAQCAtMjc3NSw2ICszMzk0LDkwIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9MT0NLKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBjbXB4Y2hnYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfQ01QWENI
R2IsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnYl9y
bShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklE
IGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4
KE9QMl9DTVBYQ0hHYiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY21weGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BF
UkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9DTVBYQ0hHLCBz
cmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY21weGNoZ3dfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNy
YywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNt
cHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFz
ZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnbF9ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcs
IHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGNtcHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Up
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfQ01QWENIRywgc3Jj
LCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9D
TVBYQ0hHLCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCB4YWRkYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfWEFERGIsIHNy
YywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkYl9ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBp
bnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KE9QMl9YQURE
Yiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgeGFkZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9YQURELCBzcmMsIGJhc2UsIG9mZnNldCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRsX3JtKFJlZ2lzdGVySUQgc3JjLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50
d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCB4YWRkbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci50d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2
NChPUDJfWEFERCwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhh
ZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5
dGVPcDY0KE9QMl9YQURELCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCBtZmVuY2UoKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIudGhy
ZWVCeXRlT3AoT1AyXzNCWVRFX0VTQ0FQRV9BRSwgT1AzX01GRU5DRSk7CkBAIC0zNzUxLDYgKzQ0
NTQsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHdyaXRlci5yZWdpc3Rlck1vZFJNKGdyb3Vw
T3AsIHJtKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgdHdvQnl0ZU9wOChUd29CeXRlT3Bj
b2RlSUQgb3Bjb2RlLCBpbnQgcmVnLCBSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFNpbmdsZUluc3RydWN0aW9uQnVmZmVyV3JpdGVyIHdyaXRlciht
X2J1ZmZlcik7CisgICAgICAgICAgICB3cml0ZXIuZW1pdFJleElmKGJ5dGVSZWdSZXF1aXJlc1Jl
eChyZWcsIGJhc2UpLCByZWcsIDAsIGJhc2UpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5dGVV
bmNoZWNrZWQoT1BfMkJZVEVfRVNDQVBFKTsKKyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRlVW5j
aGVja2VkKG9wY29kZSk7CisgICAgICAgICAgICB3cml0ZXIubWVtb3J5TW9kUk0ocmVnLCBiYXNl
LCBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB0d29CeXRlT3A4KFR3b0J5dGVP
cGNvZGVJRCBvcGNvZGUsIGludCByZWcsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlLCBpbnQgb2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBTaW5nbGVJ
bnN0cnVjdGlvbkJ1ZmZlcldyaXRlciB3cml0ZXIobV9idWZmZXIpOworICAgICAgICAgICAgd3Jp
dGVyLmVtaXRSZXhJZihieXRlUmVnUmVxdWlyZXNSZXgocmVnKSB8fCByZWdSZXF1aXJlc1JleChp
bmRleCwgYmFzZSksIHJlZywgaW5kZXgsIGJhc2UpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5
dGVVbmNoZWNrZWQoT1BfMkJZVEVfRVNDQVBFKTsKKyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRl
VW5jaGVja2VkKG9wY29kZSk7CisgICAgICAgICAgICB3cml0ZXIubWVtb3J5TW9kUk0ocmVnLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBJbW1l
ZGlhdGVzOgogICAgICAgICAvLwogICAgICAgICAvLyBBbiBpbW1lZGFpdGUgc2hvdWxkIGJlIGFw
cGVuZGVkIHdoZXJlIGFwcHJvcHJpYXRlIGFmdGVyIGFuIG9wIGhhcyBiZWVuIGVtaXR0ZWQuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQXRvbWlj
VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitBdG9taWNWYWx1ZTo6fkF0b21pY1ZhbHVlKCkKK3sKK30KKworV2lkdGggQXRv
bWljVmFsdWU6OmFjY2Vzc1dpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93aWR0aDsKK30K
Kwordm9pZCBBdG9taWNWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoY29tbWEsICJ3aWR0aCA9ICIsIG1f
d2lkdGgpOworICAgIAorICAgIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShjb21tYSwgb3V0KTsKK30K
KworVmFsdWUqIEF0b21pY1ZhbHVlOjpjbG9uZUltcGwoKSBjb25zdAoreworICAgIHJldHVybiBu
ZXcgQXRvbWljVmFsdWUoKnRoaXMpOworfQorCitBdG9taWNWYWx1ZTo6QXRvbWljVmFsdWUoS2lu
ZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBXaWR0aCB3aWR0aCwgVmFsdWUqIG9wZXJhbmQsIFZhbHVl
KiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCwgSGVhcFJhbmdlIHJhbmdlLCBIZWFwUmFuZ2UgZmVu
Y2VSYW5nZSkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIG9wZXJhbmQt
PnR5cGUoKSwgb3JpZ2luLCBvZmZzZXQsIHJhbmdlLCBmZW5jZVJhbmdlLCBvcGVyYW5kLCBwb2lu
dGVyKQorICAgICwgbV93aWR0aCh3aWR0aCkKK3sKKyAgICBBU1NFUlQoYmVzdFR5cGUoR1AsIG9w
ZXJhdGlvbldpZHRoKCkpID09IG9wZXJhdGlvblR5cGUoKSk7CisgICAgCisgICAgc3dpdGNoIChr
aW5kLm9wY29kZSgpKSB7CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWlj
WGNoZ0FuZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6
CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorfQorCitBdG9taWNWYWx1ZTo6QXRvbWljVmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2lu
LCBXaWR0aCB3aWR0aCwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBuZXdWYWx1ZSwgVmFs
dWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0LCBIZWFwUmFuZ2UgcmFuZ2UsIEhlYXBSYW5nZSBm
ZW5jZVJhbmdlKQorICAgIDogTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwga2luZC5v
cGNvZGUoKSA9PSBBdG9taWNXZWFrQ0FTID8gSW50MzIgOiBleHBlY3RlZFZhbHVlLT50eXBlKCks
IG9yaWdpbiwgb2Zmc2V0LCByYW5nZSwgZmVuY2VSYW5nZSwgZXhwZWN0ZWRWYWx1ZSwgbmV3VmFs
dWUsIHBvaW50ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIEFTU0VSVChiZXN0VHlw
ZShHUCwgb3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKworICAgIHN3aXRj
aCAoa2luZC5vcGNvZGUoKSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0
b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0F0b21pY1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQXRvbWljVmFsdWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNBdG9taWNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5j
bHVkZSAiQjNXaWR0aC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgSlNfRVhQT1JUX1BSSVZBVEUgQXRvbWljVmFsdWUgOiBwdWJsaWMgTWVtb3J5VmFsdWUgewor
cHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzQXRvbWljKGtpbmQub3Bjb2RlKCkpOworICAgIH0KKyAgICAKKyAgICB+QXRv
bWljVmFsdWUoKTsKKyAgICAKKyAgICBUeXBlIG9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJldHVy
biBjaGlsZCgwKS0+dHlwZSgpOyB9CisgICAgCisgICAgV2lkdGggb3BlcmF0aW9uV2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgCisgICAgLy8gU3lub255bSBmb3Igb3BlcmF0
aW9uV2lkdGgoKSwgaWYgeW91J3JlIGFjY2Vzc2luZyB2aWEgTWVtb3J5VmFsdWUuCisgICAgV2lk
dGggYWNjZXNzV2lkdGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgCisgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIEF0b21pY1ZhbHVl
KEtpbmQsIE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50
MzJfdCBvZmZzZXQgPSAwLCBIZWFwUmFuZ2UgcmFuZ2UgPSBIZWFwUmFuZ2U6OnRvcCgpLCBIZWFw
UmFuZ2UgZmVuY2VSYW5nZSA9IEhlYXBSYW5nZTo6dG9wKCkpOworICAgIAorICAgIEF0b21pY1Zh
bHVlKEtpbmQsIE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBleHBlY3RlZFZhbHVlLCBWYWx1ZSogbmV3
VmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDAsIEhlYXBSYW5nZSByYW5n
ZSA9IEhlYXBSYW5nZTo6dG9wKCksIEhlYXBSYW5nZSBmZW5jZVJhbmdlID0gSGVhcFJhbmdlOjp0
b3AoKSk7CisgICAgCisgICAgV2lkdGggbV93aWR0aDsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiAr
NDAsNyBAQCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIEluc2VydGlvblNldDsKIGNs
YXNzIFByb2NlZHVyZTsKIGNsYXNzIFZhbHVlOwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIEdl
bmVyaWNCbG9ja0luc2VydGlvblNldDsKIAogY2xhc3MgQmFzaWNCbG9jayB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CkBAIC0xNTgsNiArMTU5LDcgQEAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiAgICAgZnJpZW5kIGNsYXNzIElu
c2VydGlvblNldDsKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lPiBmcmllbmQgY2xhc3MgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0OwogICAgIAogICAg
IC8vIEluc3RhbnRpYXRlIHZpYSBQcm9jZWR1cmUuCiAgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBp
bmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzYsMzUgKzM2LDEzIEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogQmxv
Y2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KFByb2NlZHVyZSAmcHJvYykKLSAgICA6
IG1fcHJvYyhwcm9jKQorICAgIDogR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0KHByb2MubV9ibG9j
a3MpCisgICAgLCBtX3Byb2MocHJvYykKIHsKIH0KIAogQmxvY2tJbnNlcnRpb25TZXQ6On5CbG9j
a0luc2VydGlvblNldCgpIHsgfQogCi12b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoQmxv
Y2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCi17Ci0gICAgbV9pbnNlcnRpb25zLmFwcGVuZChXVEZN
b3ZlKGluc2VydGlvbikpOwotfQotCi1CYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5z
ZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQotewotICAgIHN0ZDo6dW5pcXVl
X3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhVSU5UX01BWCwgZnJlcXVlbmN5
KSk7Ci0gICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7Ci0gICAgaW5zZXJ0KEJs
b2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2NrKSkpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLUJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRCZWZvcmUoQmFzaWNC
bG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5KQotewotICAgIHJldHVybiBpbnNlcnQoYmVm
b3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYmVmb3Jl
LT5mcmVxdWVuY3koKSk7Ci19Ci0KLUJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNl
cnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSkKLXsKLSAgICByZXR1
cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZy
ZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7Ci19Ci0KIEJhc2ljQmxvY2sqIEJsb2NrSW5z
ZXJ0aW9uU2V0OjpzcGxpdEZvcndhcmQoCiAgICAgQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVk
JiB2YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqIGluc2VydGlvblNldCwgZG91YmxlIGZyZXF1ZW5j
eSkKIHsKQEAgLTEwMiwzMiArODAsNiBAQCBCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6
c3BsaXRGb3J3CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBCbG9ja0luc2VydGlvblNl
dDo6ZXhlY3V0ZSgpCi17Ci0gICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdp
dmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5lZWQgdG8gc29ydCB0aGVtIGJlZm9yZQot
ICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVy
IGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8gYmUKLSAgICAvLyBmYXN0LCBzbyB3ZSB1
c2UgYnViYmxlIHNvcnQuCi0gICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9p
bnNlcnRpb25zLmVuZCgpKTsKLQotICAgIGV4ZWN1dGVJbnNlcnRpb25zKG1fcHJvYy5tX2Jsb2Nr
cywgbV9pbnNlcnRpb25zKTsKLSAgICAKLSAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4g
VGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0J3MKLSAgICAvLyBoZWFsdGh5IHRv
IGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5nLgotICAgIG1fcHJvYy5tX2Jsb2Nrcy5y
ZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgWyZdIChzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9j
az4mIGJsb2NrUHRyKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7Ci0g
ICAgICAgIH0pOwotICAgIAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0
aGVpciBuZXcgaW5kaWNlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9jLm1f
YmxvY2tzLnNpemUoKTsgKytpKQotICAgICAgICBtX3Byb2MubV9ibG9ja3NbaV0tPm1faW5kZXgg
PSBpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAi
QjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgog
I2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0z
NSwyNiArMzYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIGNsYXNzIElu
c2VydGlvblNldDsKIAotdHlwZWRlZiBXVEY6Okluc2VydGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFz
aWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOwordHlwZWRlZiBHZW5lcmljQmxvY2tJbnNlcnRpb25T
ZXQ8QmFzaWNCbG9jaz46OkJsb2NrSW5zZXJ0aW9uIEJsb2NrSW5zZXJ0aW9uOwogCi1jbGFzcyBC
bG9ja0luc2VydGlvblNldCB7CitjbGFzcyBCbG9ja0luc2VydGlvblNldCA6IHB1YmxpYyBHZW5l
cmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz4gewogcHVibGljOgogICAgIEJsb2NrSW5z
ZXJ0aW9uU2V0KFByb2NlZHVyZSYpOwogICAgIH5CbG9ja0luc2VydGlvblNldCgpOwogICAgIAot
ICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYpOwotCi0gICAgLy8gSW5zZXJ0IGEgbmV3
IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCi0gICAgQmFzaWNCbG9jayogaW5zZXJ0KHVuc2lnbmVk
IGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7Ci0KLSAgICAvLyBJbnNlcnRzIGEgbmV3
IGJsb2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVzdWFsbHkgeW91IHdpbGwgbm90IHBhc3Mg
dGhlIGZyZXF1ZW5jeQotICAgIC8vIGFyZ3VtZW50LiBQYXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRv
IGp1c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdiZWZvcmUnIGJsb2NrLiBUaGF0J3MKLSAg
ICAvLyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCi0gICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3Jl
KEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOwotCi0gICAgLy8g
SW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2ZW4gYmxvY2suCi0gICAgQmFzaWNCbG9j
ayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFO
KTsKLQogICAgIC8vIEEgaGVscGVyIHRvIHNwbGl0IGEgYmxvY2sgd2hlbiBmb3J3YXJkIGl0ZXJh
dGluZyBvdmVyIGl0LiBJdCBjcmVhdGVzIGEgbmV3IGJsb2NrIHRvIGhvbGQKICAgICAvLyBldmVy
eXRoaW5nIGJlZm9yZSB0aGUgaW5zdHJ1Y3Rpb24gYXQgdmFsdWVJbmRleC4gVGhlIGN1cnJlbnQg
YmxvY2sgaXMgbGVmdCB3aXRoCiAgICAgLy8gZXZlcnl0aGluZyBhdCBhbmQgYWZ0ZXIgdmFsdWVJ
bmRleC4gSWYgdGhlIG9wdGlvbmFsIEluc2VydGlvblNldCBpcyBwcm92aWRlZCwgaXQgd2lsbCBn
ZXQKQEAgLTgwLDEyICs2OCw5IEBAIHB1YmxpYzoKICAgICBCYXNpY0Jsb2NrKiBzcGxpdEZvcndh
cmQoCiAgICAgICAgIEJhc2ljQmxvY2sqLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwgSW5zZXJ0aW9u
U2V0KiA9IG51bGxwdHIsCiAgICAgICAgIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLSAgICAK
LSAgICBib29sIGV4ZWN1dGUoKTsKIAogcHJpdmF0ZToKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsK
LSAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKIH07CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZm
ZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0
cy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vm
ZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODIsOCBAQCBib29sIEVmZmVjdHM6
OmludGVyZmVyZXMoY29uc3QgRWZmZWN0cyYgCiAgICAgICAgIHx8IGludGVyZmVyZXNXaXRoV3Jp
dGVzUGlubmVkKG90aGVyLCAqdGhpcykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVy
LndyaXRlcykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVyLnJlYWRzKQotICAgICAg
ICB8fCByZWFkcy5vdmVybGFwcyhvdGhlci53cml0ZXMpOworICAgICAgICB8fCByZWFkcy5vdmVy
bGFwcyhvdGhlci53cml0ZXMpCisgICAgICAgIHx8IChmZW5jZSAmJiBvdGhlci5mZW5jZSk7CiB9
CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3I9PShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QK
QEAgLTk1LDcgKzk2LDggQEAgYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0IEVmZmVjdHMm
IAogICAgICAgICAmJiB3cml0ZXNQaW5uZWQgPT0gb3RoZXIud3JpdGVzUGlubmVkCiAgICAgICAg
ICYmIHJlYWRzUGlubmVkID09IG90aGVyLnJlYWRzUGlubmVkCiAgICAgICAgICYmIHdyaXRlcyA9
PSBvdGhlci53cml0ZXMKLSAgICAgICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHM7CisgICAgICAg
ICYmIHJlYWRzID09IG90aGVyLnJlYWRzCisgICAgICAgICYmIGZlbmNlID09IG90aGVyLmZlbmNl
OwogfQogCiBib29sIEVmZmVjdHM6Om9wZXJhdG9yIT0oY29uc3QgRWZmZWN0cyYgb3RoZXIpIGNv
bnN0CkBAIC0xMjAsNiArMTIyLDggQEAgdm9pZCBFZmZlY3RzOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbgogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXcml0ZXNQaW5uZWQiKTsKICAgICBp
ZiAocmVhZHNQaW5uZWQpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlJlYWRzUGlubmVkIik7
CisgICAgaWYgKGZlbmNlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJGZW5jZSIpOwogICAg
IGlmICh3cml0ZXMpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlczoiLCB3cml0ZXMp
OwogICAgIGlmIChyZWFkcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVj
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJ
KHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDYgKzcxLDEwIEBAIHN0cnVjdCBFZmZlY3RzIHsKICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMTczCiAgICAg
Ym9vbCByZWFkc1Bpbm5lZCB7IGZhbHNlIH07CiAgICAgYm9vbCB3cml0ZXNQaW5uZWQgeyBmYWxz
ZSB9OworICAgIAorICAgIC8vIE1lbW9yeSBmZW5jZXMgY2Fubm90IGJlIHJlb3JkZXJlZCBhcm91
bmQgZWFjaCBvdGhlciByZWdhcmRsZXNzIG9mIHRoZWlyIGVmZmVjdHMuIFRoaXMgaXMgZmxhZ2dl
ZAorICAgIC8vIGlmIHRoZSBvcGVyYXRpb24gaXMgYSBtZW1vcnkgZmVuY2UuCisgICAgYm9vbCBm
ZW5jZSB7IGZhbHNlIH07CiAKICAgICBIZWFwUmFuZ2Ugd3JpdGVzOwogICAgIEhlYXBSYW5nZSBy
ZWFkczsKQEAgLTg5LDYgKzkzLDcgQEAgc3RydWN0IEVmZmVjdHMgewogICAgICAgICByZXN1bHQu
cmVhZHMgPSBIZWFwUmFuZ2U6OnRvcCgpOwogICAgICAgICByZXN1bHQucmVhZHNQaW5uZWQgPSB0
cnVlOwogICAgICAgICByZXN1bHQud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0
LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTEwMyw3
ICsxMDgsNyBAQCBzdHJ1Y3QgRWZmZWN0cyB7CiAKICAgICBib29sIG11c3RFeGVjdXRlKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiB0ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdy
aXRlc0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8IHdyaXRlc1Bpbm5lZDsKKyAgICAgICAgcmV0dXJu
IHRlcm1pbmFsIHx8IGV4aXRzU2lkZXdheXMgfHwgd3JpdGVzTG9jYWxTdGF0ZSB8fCB3cml0ZXMg
fHwgd3JpdGVzUGlubmVkIHx8IGZlbmNlOwogICAgIH0KIAogICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiByZW9yZGVyaW5nIGluc3RydWN0aW9ucyB3aXRoIHRoZXNlIHJlc3BlY3RpdmUgZWZmZWN0cyB3
b3VsZCBjaGFuZ2UgcHJvZ3JhbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxp
bWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkocmV2aXNp
b24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9u
U3ViZXhwcmVzc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Miw2ICsxNDIsNyBAQCBzdHJ1Y3Qg
SW1wdXJlQmxvY2tEYXRhIHsKIAogICAgIFJhbmdlU2V0PEhlYXBSYW5nZT4gcmVhZHM7IC8vIFRo
aXMgb25seSBnZXRzIHVzZWQgZm9yIGZvcndhcmQgc3RvcmUgZWxpbWluYXRpb24uCiAgICAgUmFu
Z2VTZXQ8SGVhcFJhbmdlPiB3cml0ZXM7IC8vIFRoaXMgZ2V0cyB1c2VkIGZvciBib3RoIGxvYWQg
YW5kIHN0b3JlIGVsaW1pbmF0aW9uLgorICAgIGJvb2wgZmVuY2U7CiAKICAgICBNZW1vcnlWYWx1
ZU1hcCBzdG9yZXNBdEhlYWQ7CiAgICAgTWVtb3J5VmFsdWVNYXAgbWVtb3J5VmFsdWVzQXRUYWls
OwpAQCAtMTc0LDEyICsxNzUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChtZW1vcnkgJiYgbWVtb3J5LT5pc1N0b3JlKCkKICAgICAgICAgICAgICAg
ICAgICAgJiYgIWRhdGEucmVhZHMub3ZlcmxhcHMobWVtb3J5LT5yYW5nZSgpKQotICAgICAgICAg
ICAgICAgICAgICAmJiAhZGF0YS53cml0ZXMub3ZlcmxhcHMobWVtb3J5LT5yYW5nZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgJiYgIWRhdGEud3JpdGVzLm92ZXJsYXBzKG1lbW9yeS0+cmFuZ2Uo
KSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKCFkYXRhLmZlbmNlIHx8ICFtZW1vcnktPmhhc0Zl
bmNlKCkpKQogICAgICAgICAgICAgICAgICAgICBkYXRhLnN0b3Jlc0F0SGVhZC5hZGQobWVtb3J5
KTsKICAgICAgICAgICAgICAgICBkYXRhLnJlYWRzLmFkZChlZmZlY3RzLnJlYWRzKTsKIAogICAg
ICAgICAgICAgICAgIGlmIChIZWFwUmFuZ2Ugd3JpdGVzID0gZWZmZWN0cy53cml0ZXMpCiAgICAg
ICAgICAgICAgICAgICAgIGNsb2JiZXIoZGF0YSwgd3JpdGVzKTsKKyAgICAgICAgICAgICAgICBk
YXRhLmZlbmNlIHw9IGVmZmVjdHMuZmVuY2U7CiAKICAgICAgICAgICAgICAgICBpZiAobWVtb3J5
KQogICAgICAgICAgICAgICAgICAgICBkYXRhLm1lbW9yeVZhbHVlc0F0VGFpbC5hZGQobWVtb3J5
KTsKQEAgLTQ0NSw4ICs0NDgsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGRhdGFMb2coIkJhZCBtZW1vcnkgdmFsdWU6ICIsIGRlZXBEdW1w
KG1fcHJvYywgbV92YWx1ZSksICJcbiIpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtNDc4
LDYgKzQ3OSw5IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyPgogICAg
IGJvb2wgZmluZFN0b3JlQWZ0ZXJDbG9iYmVyKFZhbHVlKiBwdHIsIEhlYXBSYW5nZSByYW5nZSwg
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgeworICAgICAgICBpZiAobV92YWx1ZS0+YXM8TWVt
b3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAogICAgICAgICAvLyBXZSBjYW4gZWxpbWluYXRlIGEgc3RvcmUgaWYgZXZlcnkgZm9yd2Fy
ZCBwYXRoIGhpdHMgYSBzdG9yZSB0byB0aGUgc2FtZSBsb2NhdGlvbiBiZWZvcmUKICAgICAgICAg
Ly8gaGl0dGluZyBhbnkgb3BlcmF0aW9uIHRoYXQgb2JzZXJ2ZXMgdGhlIHN0b3JlLiBUaGlzIHNl
YXJjaCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZQogICAgICAgICAvLyBleHBlbnNpdmUsIGJ1dCBp
biB0aGUgb3ZlcndoZWxtaW5nIG1ham9yaXR5IG9mIGNhc2VzIGl0IHdpbGwgYWxtb3N0IGltbWVk
aWF0ZWx5IGhpdCBhbiAKQEAgLTYxNCw2ICs2MTgsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCptX3ZhbHVlLCAiOiBsb29raW5nIGJhY2t3
YXJkIGZvciAiLCAqcHRyLCAiLi4uXG4iKTsKICAgICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEdpdmluZyB1cCBiZWNhdXNlIGZlbmNl
cy5cbiIpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKICAg
ICAgICAgaWYgKE1lbW9yeVZhbHVlKiBtYXRjaCA9IG1fZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwu
ZmluZChwdHIsIGZpbHRlcikpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBGb3VuZCAiLCAqbWF0Y2gsICIgbG9jYWxseS5cbiIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMjEyOTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtOTIsNiArOTIsNyBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9j
ZWR1cmUsCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTA1MDcKICAgICB9CiAKKyAgICAvLyBUaGlzIHB1dHMgdGhlIElSIGluIHF1aXJrcyBtb2Rl
LgogICAgIGxvd2VyTWFjcm9zKHByb2NlZHVyZSk7CiAKICAgICBpZiAob3B0TGV2ZWwgPj0gMSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9u
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Js
b2NrSW5zZXJ0aW9uU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiUHVyZU5hTi5o
IgorI2luY2x1ZGUgPHd0Zi9CdWJibGVTb3J0Lmg+CisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIEluc2VydGlvblNldDsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9j
az4KK2NsYXNzIEdlbmVyaWNCbG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBXVEY6Okluc2VydGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0
aW9uOworICAgIAorICAgIEdlbmVyaWNCbG9ja0luc2VydGlvblNldChWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEJhc2ljQmxvY2s+PiYgYmxvY2tzKQorICAgICAgICA6IG1fYmxvY2tzKGJsb2NrcykK
KyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYgaW5z
ZXJ0aW9uKQorICAgIHsKKyAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChXVEZNb3ZlKGluc2Vy
dGlvbikpOworICAgIH0KKworICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBhIGdpdmVuIGlu
ZGV4LgorICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1
ZW5jeSA9IFBOYU4pCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4g
YmxvY2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIGZyZXF1ZW5jeSkpOworICAgICAgICBCYXNp
Y0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICAgICAgaW5zZXJ0KEJsb2NrSW5zZXJ0
aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2NrKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYmVmb3JlIHRoZSBnaXZlbiBibG9jay4g
VXN1YWxseSB5b3Ugd2lsbCBub3QgcGFzcyB0aGUgZnJlcXVlbmN5CisgICAgLy8gYXJndW1lbnQu
IFBhc3NpbmcgUE5hTiBjYXVzZXMgdXMgdG8ganVzdCB1c2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUg
J2JlZm9yZScgYmxvY2suIFRoYXQncworICAgIC8vIHVzdWFsbHkgd2hhdCB5b3Ugd2FudC4KKyAg
ICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJl
cXVlbmN5ID0gUE5hTikKKyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRl
eCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVu
Y3koKSk7CisgICAgfQorCisgICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2
ZW4gYmxvY2suCisgICAgQmFzaWNCbG9jayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIs
IGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluc2VydChh
ZnRlci0+aW5kZXgoKSArIDEsIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBh
ZnRlci0+ZnJlcXVlbmN5KCkpOworICAgIH0KKworICAgIGJvb2wgZXhlY3V0ZSgpCisgICAgewor
ICAgICAgICBpZiAobV9pbnNlcnRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGFsbG93IGluc2VydGlvbnMgdG8gYmUgZ2l2
ZW4gdG8gdXMgaW4gYW55IG9yZGVyLiBTbywgd2UgbmVlZCB0byBzb3J0IHRoZW0gYmVmb3JlCisg
ICAgICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJl
ZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8gYmUKKyAgICAgICAgLy8gZmFzdCwg
c28gd2UgdXNlIGJ1YmJsZSBzb3J0LgorICAgICAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5i
ZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworICAgICAgICAKKyAgICAgICAgZXhlY3V0ZUlu
c2VydGlvbnMobV9ibG9ja3MsIG1faW5zZXJ0aW9ucyk7CisgICAgICAgIAorICAgICAgICAvLyBQ
cnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0
IGl0J3MKKyAgICAgICAgLy8gaGVhbHRoeSB0byBrZWVwIHRoZSBibG9jayBsaXN0IGZyb20gZ3Jv
d2luZy4KKyAgICAgICAgbV9ibG9ja3MucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBb
Jl0gKHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiYgYmxvY2tQdHIpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5k
aWNlcy4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgbV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRp
b24sIDg+IG1faW5zZXJ0aW9uczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0hlYXBSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hl
YXBSYW5nZS5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNIZWFwUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OCw2ICs4OCwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICB9CiAgICAgCisgICAgSGVhcFJhbmdl
IG9wZXJhdG9yfChjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIEhlYXBSYW5nZSgKKyAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1f
YmVnaW4pLAorICAgICAgICAgICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAg
fQorICAgIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2Jl
Z2luICE9IG1fZW5kOyB9CiAKICAgICB1bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
YmVnaW47IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0
LmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5z
ZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDYgKzU4LDExIEBAIFZhbHVlKiBJ
bnNlcnRpb25TZXQ6Omluc2VydEJvdHRvbShzaXplX3QKICAgICByZXR1cm4gaW5zZXJ0Qm90dG9t
KGluZGV4LCBsaWtlVmFsdWUtPm9yaWdpbigpLCBsaWtlVmFsdWUtPnR5cGUoKSk7CiB9CiAKK1Zh
bHVlKiBJbnNlcnRpb25TZXQ6Omluc2VydENsb25lKHNpemVfdCBpbmRleCwgVmFsdWUqIHZhbHVl
KQoreworICAgIHJldHVybiBpbnNlcnRWYWx1ZShpbmRleCwgbV9wcm9jZWR1cmUuY2xvbmUodmFs
dWUpKTsKK30KKwogdm9pZCBJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2sp
CiB7CiAgICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVu
ZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCShy
ZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25T
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDYgKzcxLDggQEAgcHVibGljOgogCiAgICAgVmFs
dWUqIGluc2VydEJvdHRvbShzaXplX3QgaW5kZXgsIE9yaWdpbiwgVHlwZSk7CiAgICAgVmFsdWUq
IGluc2VydEJvdHRvbShzaXplX3QgaW5kZXgsIFZhbHVlKik7CisgICAgCisgICAgVmFsdWUqIGlu
c2VydENsb25lKHNpemVfdCBpbmRleCwgVmFsdWUqKTsKIAogICAgIHZvaWQgZXhlY3V0ZShCYXNp
Y0Jsb2NrKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jv
cy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyTWFjcm9zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDExICsyOSwxMyBAQAogI2lmIEVO
QUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Uu
aCIKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkIzQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJCM0ND
YWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0Nhc2VDb2xsZWN0aW9uSW5saW5lcy5oIgogI2luY2x1
ZGUgIkIzQ29uc3RQdHJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1
ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIK
ICNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgpAQCAtNDIsNiArNDQsNyBAQAogI2luY2x1
ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCiAjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1
ZS5oIgogI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCisjaW5jbHVkZSAiQjNVc2VDb3VudHMu
aCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5o
IgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTU4LDExICs2MSwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9wcm9jKHByb2MpCiAgICAgICAgICwgbV9ibG9ja0luc2VydGlvblNldChwcm9j
KQogICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KHByb2MpCisgICAgICAgICwgbV91c2VDb3VudHMo
cHJvYykKICAgICB7CiAgICAgfQogCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fcHJvYy5oYXNRdWlya3MoKSk7CisgICAgICAgIAogICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gYmxv
Y2s7CiAgICAgICAgICAgICBwcm9jZXNzQ3VycmVudEJsb2NrKCk7CkBAIC03Miw2ICs3OCwxMCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBtX3Byb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKICAgICAg
ICAgICAgIG1fcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIFRoaXMgaW5kaWNhdGVzIHRoYXQgd2UndmUgCisgICAgICAgIG1fcHJvYy5zZXRIYXNR
dWlya3ModHJ1ZSk7CisgICAgICAgIAogICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0K
ICAgICAKQEAgLTE4NSw3ICsxOTUsMTE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbG9hZC1s
b2FkIGZlbmNlLiBUaGlzIGNvZGVnZW5zIHRvIG5vdGhpbmcgb24gWDg2LiBXZSB1c2UgaXQgdG8g
dGVsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcGlsZXIgbm90IHRvIGJsb2NrIGxv
YWQgbW90aW9uLgorICAgICAgICAgICAgICAgICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxGZW5jZVZhbHVlPihtX2luZGV4LCBtX29yaWdpbik7CisgICAgICAg
ICAgICAgICAgICAgIGZlbmNlLT5yZWFkID0gSGVhcFJhbmdlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGZlbmNlLT53cml0ZSA9IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAvLyBLaWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNob3VsZCB1
bmxvY2sgYSBidW5jaCBvZiBjb2RlIHNpbXBsaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5yZXBsYWNlV2l0aEJvdHRvbShtX2luc2VydGlvblNldCwgbV9pbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgY2FzZSBB
dG9taWNTdHJvbmdDQVM6IHsKKyAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQXRv
bWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAg
ICAgICAgIFdpZHRoIHdpZHRoID0gYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc0Nhbm9uaWNhbFdpZHRoKHdpZHRoKSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgVmFsdWUqIGV4cGVjdGVkVmFsdWUgPSBhdG9taWMtPmNoaWxkKDApOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vIE9uIEFSTSwgdGhlIGxvYWQgcGFydCBvZiB0aGUgQ0FT
IGRvZXMgYSBsb2FkIHdpdGggemVybyBleHRlbnNpb24uIFRoZXJlZm9yZSwgd2UgbmVlZAorICAg
ICAgICAgICAgICAgIC8vIHRvIHplcm8tZXh0ZW5kIHRoZSBpbnB1dC4KKyAgICAgICAgICAgICAg
ICBWYWx1ZSogbWFza2VkRXhwZWN0ZWRWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1
ZT4oCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEJpdEFuZCwgbV9vcmlnaW4sIGV4cGVj
dGVkVmFsdWUsCisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENv
bnN0YW50KG1faW5kZXgsIGV4cGVjdGVkVmFsdWUsIG1hc2sod2lkdGgpKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgYXRvbWljLT5jaGlsZCgwKSA9IG1hc2tlZEV4cGVjdGVk
VmFsdWU7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgQXRvbWljWGNoZ0FkZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAg
ICAgICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnU3Vi
OgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICAgICAgY2FzZSBBdG9t
aWNYY2hnOiB7CisgICAgICAgICAgICAgICAgLy8gT24gWDg2LCB0aGVzZSBtYXkgYWN0dWFsbHkg
cmV0dXJuIGdhcmJhZ2UgaW4gdGhlIGhpZ2ggYml0cy4gT24gQVJNNjQsIHRoZXNlIHNvcnRhCisg
ICAgICAgICAgICAgICAgLy8gemVyby1leHRlbmQgdGhlaXIgaGlnaCBiaXRzLCBleGNlcHQgdGhh
dCB0aGUgaGlnaCBiaXRzIG1pZ2h0IGdldCBwb2xsdXRlZCBieSBoaWdoCisgICAgICAgICAgICAg
ICAgLy8gYml0cyBpbiB0aGUgb3BlcmFuZC4gLiBTbywgZWl0aGVyIHdheSwgd2UgbmVlZCB0byB0
aHJvdyBhIHNpZ24tZXh0ZW5kIG9uIHRoZXNlCisgICAgICAgICAgICAgICAgLy8gdGhpbmdzLgor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5vcGNvZGUoKSA9PSBBdG9taWNYY2hnU3ViICYmIG1f
dXNlQ291bnRzLm51bVVzZXMobV92YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE9uIHg4NiwgeGNoZ2FkZCBpcyBiZXR0ZXIgdGhhbiB4Y2hnc3ViIGlmIGl0IGhhcyBhbnkgdXNl
cnMuCisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5zZXRPcGNvZGVVbnNhZmVseShB
dG9taWNYY2hnQWRkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDAp
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4LCBOZWcsIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGJvb2wgZXhlbXB0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1
ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnQW5kOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1hj
aGdYb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBleGVtcHQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAoZXhlbXB0KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEF0
b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAg
ICAgICAgICBXaWR0aCB3aWR0aCA9IGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNDYW5vbmljYWxXaWR0aCh3aWR0aCkpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIFZhbHVlKiBuZXdWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXgsIHNpZ25FeHRlbmRPcGNvZGUod2lkdGgpLCBtX29yaWdp
biwKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q2xvbmUobV9pbmRl
eCwgYXRvbWljKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV92YWx1ZS0+
cmVwbGFjZVdpdGhJZGVudGl0eShuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2Fk
MTZaOiB7CisgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgICAgICAgICBpZiAo
IW1lbW9yeS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gU3ViLXdpZHRoIGxvYWQtYWNxIG9uIEFSTTY0
IGFsd2F5cyBzaWduIGV4dGVuZHMuCisgICAgICAgICAgICAgICAgVmFsdWUqIG5ld0xvYWQgPSBt
X2luc2VydGlvblNldC5pbnNlcnRDbG9uZShtX2luZGV4LCBtZW1vcnkpOworICAgICAgICAgICAg
ICAgIG5ld0xvYWQtPnNldE9wY29kZVVuc2FmZWx5KG1lbW9yeS0+b3Bjb2RlKCkgPT0gTG9hZDha
ID8gTG9hZDhTIDogTG9hZDE2Uyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
VmFsdWUqIG5ld1ZhbHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleCwgQml0QW5kLCBtX29yaWdpbiwgbmV3TG9hZCwKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0SW50Q29uc3RhbnQoCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luZGV4LCBtX29yaWdpbiwgSW50MzIsIG1hc2sobWVtb3J5LT5sb2Fk
U3RvcmVXaWR0aCgpKSkpOwogCisgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJ
ZGVudGl0eShuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CkBAIC00NzAsNiArNTkyLDcgQEAgcHJpdmF0ZToKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKICAg
ICBCbG9ja0luc2VydGlvblNldCBtX2Jsb2NrSW5zZXJ0aW9uU2V0OwogICAgIEluc2VydGlvblNl
dCBtX2luc2VydGlvblNldDsKKyAgICBVc2VDb3VudHMgbV91c2VDb3VudHM7CiAgICAgQmFzaWNC
bG9jayogbV9ibG9jazsKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVl
OwpAQCAtNDc3LDIxICs2MDAsMTIgQEAgcHJpdmF0ZToKICAgICBib29sIG1fY2hhbmdlZCB7IGZh
bHNlIH07CiB9OwogCi1ib29sIGxvd2VyTWFjcm9zSW1wbChQcm9jZWR1cmUmIHByb2MpCi17Ci0g
ICAgTG93ZXJNYWNyb3MgbG93ZXJNYWNyb3MocHJvYyk7Ci0gICAgcmV0dXJuIGxvd2VyTWFjcm9z
LnJ1bigpOwotfQotCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAogYm9vbCBsb3dlck1hY3Jv
cyhQcm9jZWR1cmUmIHByb2MpCiB7Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJs
b3dlck1hY3JvcyIpOwotICAgIGJvb2wgcmVzdWx0ID0gbG93ZXJNYWNyb3NJbXBsKHByb2MpOwot
ICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFsb3dl
ck1hY3Jvc0ltcGwocHJvYykpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgTG93ZXJNYWNyb3Mg
bG93ZXJNYWNyb3MocHJvYyk7CisgICAgcmV0dXJuIGxvd2VyTWFjcm9zLnJ1bigpOwogfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9z
QWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NiwxNSArMTU2LDE0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFJvdEw6IHsKICAgICAgICAgICAgICAgICAv
LyBBUk02NCBkb2Vzbid0IGhhdmUgYSByb3RhdGUgbGVmdC4KICAgICAgICAgICAgICAgICBpZiAo
aXNBUk02NCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTaGlmdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dDxWYWx1ZT4obV9pbmRleCwgTmVnLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQo
MSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHJvdGF0ZSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgUm90UiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFs
dWUtPmNoaWxkKDApLCBuZXdTaGlmdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5yZXBsYWNlV2l0aElkZW50aXR5KHJvdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBWYWx1ZSog
bmV3U2hpZnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIE5lZywgbV92
YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICAgICAg
VmFsdWUqIHJvdGF0ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgUm90
UiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBuZXdTaGlmdCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocm90YXRlKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTIgKzI4LDE0IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVk
ZSAiQWlyQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIK
ICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCiAjaW5j
bHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNs
dWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCiAj
aW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQmxvY2tXb3JrbGlz
dC5oIgogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgpAQCAtNzIsNiArNzQsMTYgQEAgbmFtZXNw
YWNlIHsKIAogY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKKy8vIEZJWE1FOiBXZSB3b3Vs
ZG4ndCBuZWVkIHRoaXMgaWYgQWlyIHN1cHBvcnRlZCBXaWR0aCBtb2RpZmllcnMgaW4gQWlyOjpL
aW5kLgorLy8gT09QUyEhISAobmVlZCBhIGJ1ZyBVUkwpCisjZGVmaW5lIE9QQ09ERV9GT1JfV0lE
VEgob3Bjb2RlLCB3aWR0aCkgKCBcCisgICAgKHdpZHRoKSA9PSBXaWR0aDggPyBvcGNvZGUgIyMg
OCA6IFwKKyAgICAod2lkdGgpID09IFdpZHRoMTYgPyBvcGNvZGUgIyMgMTYgOiBcCisgICAgKHdp
ZHRoKSA9PSBXaWR0aDMyID8gb3Bjb2RlICMjIDMyIDogXAorICAgIG9wY29kZSAjIyA2NCkKKyNk
ZWZpbmUgT1BDT0RFX0ZPUl9DQU5PTklDQUxfV0lEVEgob3Bjb2RlLCB3aWR0aCkgKCBcCisgICAg
KHdpZHRoKSA9PSBXaWR0aDY0ID8gb3Bjb2RlICMjIDY0IDogb3Bjb2RlICMjIDMyKQorCiBjbGFz
cyBMb3dlclRvQWlyIHsKIHB1YmxpYzoKICAgICBMb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2Vk
dXJlKQpAQCAtODMsNiArOTUsMTIgQEAgcHVibGljOgogICAgICAgICAsIG1fZG9taW5hdG9ycyhw
cm9jZWR1cmUuZG9taW5hdG9ycygpKQogICAgICAgICAsIG1fcHJvY2VkdXJlKHByb2NlZHVyZSkK
ICAgICAgICAgLCBtX2NvZGUocHJvY2VkdXJlLmNvZGUoKSkKKyAgICAgICAgLCBtX2Jsb2NrSW5z
ZXJ0aW9uU2V0KG1fY29kZSkKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAgICAgICAs
IG1fZWF4KFg4NlJlZ2lzdGVyczo6ZWF4KQorICAgICAgICAsIG1fZWN4KFg4NlJlZ2lzdGVyczo6
ZWN4KQorICAgICAgICAsIG1fZWR4KFg4NlJlZ2lzdGVyczo6ZWR4KQorI2VuZGlmCiAgICAgewog
ICAgIH0KIApAQCAtMTI0LDE0ICsxNDIsMTggQEAgcHVibGljOgogICAgICAgICAvLyBob2lzdGVk
IGFkZHJlc3MgZXhwcmVzc2lvbiBiZWZvcmUgd2UgZHVwbGljYXRlIGl0IGJhY2sgaW50byB0aGUg
bG9vcC4KICAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2NlZHVyZS5i
bG9ja3NJblByZU9yZGVyKCkpIHsKICAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKLSAgICAg
ICAgICAgIC8vIFJlc2V0IHNvbWUgc3RhdGUuCi0gICAgICAgICAgICBtX2luc3RzLnJlc2l6ZSgw
KTsKIAogICAgICAgICAgICAgbV9pc1JhcmUgPSAhbV9mYXN0V29ya2xpc3Quc2F3KGJsb2NrKTsK
IAogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiTG93
ZXJpbmcgQmxvY2sgIiwgKmJsb2NrLCAiOlxuIik7CiAgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzdWNjZXNzb3JzIGFyZSBzZXQgdXAgY29ycmVjdGx5Lgor
ICAgICAgICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3NvciA6IGJsb2NrLT5z
dWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrVG9CbG9ja1tibG9ja10tPnN1
Y2Nlc3NvcnMoKS5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIEFpcjo6RnJlcXVlbnRlZEJs
b2NrKG1fYmxvY2tUb0Jsb2NrW3N1Y2Nlc3Nvci5ibG9jaygpXSwgc3VjY2Vzc29yLmZyZXF1ZW5j
eSgpKSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIFByb2Nlc3MgYmxvY2tzIGlu
IHJldmVyc2Ugb3JkZXIgc28gd2Ugc2VlIHVzZXMgYmVmb3JlIGRlZnMuIFRoYXQncyB3aGF0IGFs
bG93cyB1cwogICAgICAgICAgICAgLy8gdG8gbWF0Y2ggcGF0dGVybnMgZWZmZWN0aXZlbHkuCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7CkBAIC0x
NDksMTkgKzE3MSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBpbnN0cnVjdGlvbnMuIG1faW5zdHMg
Y29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCi0gICAgICAgICAg
ICAvLyBpdCBpbiByZXZlcnNlLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbnN0
cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBtX2lu
c3RzW2ldKQotICAgICAgICAgICAgICAgICAgICBtX2Jsb2NrVG9CbG9ja1tibG9ja10tPmFwcGVu
ZEluc3QoV1RGTW92ZShpbnN0KSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRoZSBzdWNjZXNzb3JzIGFyZSBzZXQgdXAgY29ycmVjdGx5LgotICAgICAg
ICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNz
b3JzKCkpIHsKLSAgICAgICAgICAgICAgICBtX2Jsb2NrVG9CbG9ja1tibG9ja10tPnN1Y2Nlc3Nv
cnMoKS5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIEFpcjo6RnJlcXVlbnRlZEJsb2NrKG1f
YmxvY2tUb0Jsb2NrW3N1Y2Nlc3Nvci5ibG9jaygpXSwgc3VjY2Vzc29yLmZyZXF1ZW5jeSgpKSk7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5pc2hBcHBlbmRpbmdJbnN0cnVjdGlvbnMo
bV9ibG9ja1RvQmxvY2tbYmxvY2tdKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9i
bG9ja0luc2VydGlvblNldC5leGVjdXRlKCk7CiAKICAgICAgICAgQWlyOjpJbnNlcnRpb25TZXQg
aW5zZXJ0aW9uU2V0KG1fY29kZSk7CiAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IG1fcHJvbG9n
dWUpCkBAIC01NjIsMTEgKzU3NSwxOSBAQCBwcml2YXRlOgogICAgIAogICAgIEFyZ1Byb21pc2Ug
bG9hZFByb21pc2VBbnlPcGNvZGUoVmFsdWUqIGxvYWRWYWx1ZSkKICAgICB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGxvYWRWYWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpOwogICAgICAgICBpZiAo
IWNhbkJlSW50ZXJuYWwobG9hZFZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKICAg
ICAgICAgaWYgKGNyb3NzZXNJbnRlcmZlcmVuY2UobG9hZFZhbHVlKSkKICAgICAgICAgICAgIHJl
dHVybiBBcmcoKTsKLSAgICAgICAgQXJnUHJvbWlzZSByZXN1bHQoYWRkcihsb2FkVmFsdWUpLCBs
b2FkVmFsdWUpOworICAgICAgICAvLyBPbiB4ODYsIGFsbCBsb2FkcyBoYXZlIGZlbmNlcy4gRG9p
bmcgdGhpcyBraW5kIG9mIGluc3RydWN0aW9uIHNlbGVjdGlvbiB3aWxsIG1vdmUgdGhlIGxvYWQs
CisgICAgICAgIC8vIGJ1dCB0aGF0J3MgZmluZSBiZWNhdXNlIG91ciBpbnRlcmZlcmVuY2UgYW5h
bHlzaXMgc3RvcHMgdGhlIG1vdGlvbiBvZiBmZW5jZXMgYXJvdW5kIG90aGVyCisgICAgICAgIC8v
IGZlbmNlcy4gU28sIGFueSBsb2FkIG1vdGlvbiB3ZSBpbnRyb2R1Y2UgaGVyZSB3b3VsZCBub3Qg
YmUgb2JzZXJ2YWJsZS4KKyAgICAgICAgaWYgKCFpc1g4NigpICYmIGxvYWRWYWx1ZS0+YXM8TWVt
b3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAg
ICAgIEFyZyBsb2FkQWRkciA9IGFkZHIobG9hZFZhbHVlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQobG9hZEFkZHIpOworICAgICAgICBBcmdQcm9taXNlIHJlc3VsdChsb2FkQWRkciwgbG9hZFZh
bHVlKTsKICAgICAgICAgaWYgKGxvYWRWYWx1ZS0+dHJhcHMoKSkKICAgICAgICAgICAgIHJlc3Vs
dC5zZXRUcmFwcyh0cnVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg5OCwxMSArOTE5
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0jaWYgQ1BV
KFg4NikgfHwgQ1BVKFg4Nl82NCkKICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcCh2YWx1ZSksIHRt
cChtX3ZhbHVlKSk7Ci0gICAgICAgIGFwcGVuZChNb3ZlLCB0bXAoYW1vdW50KSwgVG1wKFg4NlJl
Z2lzdGVyczo6ZWN4KSk7Ci0gICAgICAgIGFwcGVuZChvcGNvZGUsIFRtcChYODZSZWdpc3RlcnM6
OmVjeCksIHRtcChtX3ZhbHVlKSk7Ci0jZW5kaWYKKyAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChh
bW91bnQpLCBtX2VjeCk7CisgICAgICAgIGFwcGVuZChvcGNvZGUsIG1fZWN4LCB0bXAobV92YWx1
ZSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29kZTMyLCBBaXI6Ok9w
Y29kZSBvcGNvZGU2ND4KQEAgLTkzMSwxMCArOTUwLDE2IEBAIHByaXZhdGU6CiAgICAgICAgIEFp
cjo6T3Bjb2RlIG9wY29kZTMyLCBBaXI6Ok9wY29kZSBvcGNvZGU2NCwgQ29tbXV0YXRpdml0eSBj
b21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU+CiAgICAgYm9vbCB0cnlBcHBlbmRTdG9yZUJp
bk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSk7CisgICAgICAgIAogICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNvZGVGb3JUeXBlKG9wY29kZTMyLCBvcGNvZGU2NCwgbGVm
dC0+dHlwZSgpKTsKICAgICAgICAgaWYgKG9wY29kZSA9PSBBaXI6Ok9vcHMpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAorICAgICAgICAvLyBPbiB4ODYsIGFsbCBzdG9yZXMg
aGF2ZSBmZW5jZXMsIGFuZCB0aGlzIGlzbid0IHJlb3JkZXJpbmcgdGhlIHN0b3JlIGl0c2VsZi4K
KyAgICAgICAgaWYgKCFpc1g4NigpICYmIG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNG
ZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKICAgICAgICAgQXJn
IHN0b3JlQWRkciA9IGFkZHIobV92YWx1ZSk7CiAgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOwog
CkBAIC05OTQsMTEgKzEwMTksNTAgQEAgcHJpdmF0ZToKIAogICAgICAgICByZXR1cm4gSW5zdCht
b3ZlLCBtX3ZhbHVlLCB0bXAodmFsdWUpLCBkZXN0KTsKICAgICB9CisgICAgCisgICAgQWlyOjpP
cGNvZGUgc3RvcmVPcGNvZGUoV2lkdGggd2lkdGgsIEJhbmsgYmFuaywgYm9vbCByZWxlYXNlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAgICBjYXNlIFdpZHRoODoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhbmsgPT0gR1ApOworICAgICAgICAgICAgcmV0dXJu
IHJlbGVhc2UgPyBTdG9yZVJlbDggOiBBaXI6OlN0b3JlODsKKyAgICAgICAgY2FzZSBXaWR0aDE2
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFuayA9PSBHUCk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVsMTYgOiBBaXI6OlN0b3JlMTY7CisgICAgICAgIGNhc2Ug
V2lkdGgzMjoKKyAgICAgICAgICAgIHN3aXRjaCAoYmFuaykgeworICAgICAgICAgICAgY2FzZSBH
UDoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVsMzIgOiBNb3ZlMzI7
CisgICAgICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFy
ZWxlYXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW92ZUZsb2F0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGlzNjRCaXQoKSk7CisgICAgICAgICAgICBzd2l0Y2ggKGJhbmspIHsK
KyAgICAgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBT
dG9yZVJlbDY0IDogTW92ZTsKKyAgICAgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIXJlbGVhc2UpOworICAgICAgICAgICAgICAgIHJldHVybiBNb3ZlRG91
YmxlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgQWlyOjpP
cGNvZGUgc3RvcmVPcGNvZGUoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgTWVtb3J5VmFs
dWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQobWVtb3J5LT5pc1N0b3JlKCkpOworICAgICAgICByZXR1cm4gc3RvcmVPcGNvZGUobWVt
b3J5LT5sb2FkU3RvcmVXaWR0aCgpLCBtZW1vcnktPmFjY2Vzc0JhbmsoKSwgbWVtb3J5LT5oYXNG
ZW5jZSgpKTsKKyAgICB9CiAKICAgICBJbnN0IGNyZWF0ZVN0b3JlKFZhbHVlKiB2YWx1ZSwgY29u
c3QgQXJnJiBkZXN0KQogICAgIHsKLSAgICAgICAgQWlyOjpPcGNvZGUgbW92ZU9wY29kZSA9IG1v
dmVGb3JUeXBlKHZhbHVlLT50eXBlKCkpOwotICAgICAgICByZXR1cm4gY3JlYXRlU3RvcmUobW92
ZU9wY29kZSwgdmFsdWUsIGRlc3QpOworICAgICAgICBBaXI6Ok9wY29kZSBtb3ZlT3Bjb2RlID0g
c3RvcmVPcGNvZGUodmFsdWUpOworICAgICAgICByZXR1cm4gY3JlYXRlU3RvcmUobW92ZU9wY29k
ZSwgdmFsdWUtPmNoaWxkKDApLCBkZXN0KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmdzPgpAQCAtMTAwNiw3ICsxMDcwLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgY3JlYXRlU3RvcmUoc3RkOjpmb3J3YXJkPEFy
Z3M+KGFyZ3MpLi4uKSkpOwogICAgIH0KLQorICAgIAogICAgIEFpcjo6T3Bjb2RlIG1vdmVGb3JU
eXBlKFR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMTA3Myw3
ICsxMTM3LDQxIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBl
bmQoaW5zdCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rp
b25zKEFpcjo6QmFzaWNCbG9jayogdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gTm93IGFwcGVu
ZCB0aGUgaW5zdHJ1Y3Rpb25zLiBtX2luc3RzIGNvbnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRl
ciwgc28gd2UgcHJvY2VzcworICAgICAgICAvLyBpdCBpbiByZXZlcnNlLgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2luc3RzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgZm9yIChJ
bnN0JiBpbnN0IDogbV9pbnN0c1tpXSkKKyAgICAgICAgICAgICAgICB0YXJnZXQtPmFwcGVuZElu
c3QoV1RGTW92ZShpbnN0KSk7CisgICAgICAgIH0KKyAgICAgICAgbV9pbnN0cy5yZXNpemUoMCk7
CisgICAgfQorICAgIAorICAgIEFpcjo6QmFzaWNCbG9jayogbmV3QmxvY2soKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fYmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0QWZ0ZXIobV9ibG9ja1RvQmxv
Y2tbbV9ibG9ja10pOworICAgIH0KIAorICAgIC8vIE5PVEU6IFRoaXMgd2lsbCBjcmVhdGUgYSBj
b250aW51YXRpb24gYmxvY2sgKGBuZXh0QmxvY2tgKSAqYWZ0ZXIqIGFueSBibG9ja3MgeW91J3Zl
IGNyZWF0ZWQgdXNpbmcKKyAgICAvLyBuZXdCbG9jaygpLiBTbywgaXQncyBwcmVmZXJhYmxlIHRv
IGNyZWF0ZSBhbGwgb2YgeW91ciBibG9ja3MgdXBmcm9udCB1c2luZyBuZXdCbG9jaygpLiBBbHNv
IG5vdGUKKyAgICAvLyB0aGF0IGFueSBjb2RlIHlvdSBlbWl0IGJlZm9yZSB0aGlzIHdpbGwgYmUg
cHJlcGVuZGVkIHRvIHRoZSBjb250aW51YXRpb24sIGFuZCBhbnkgY29kZSB5b3UgZW1pdAorICAg
IC8vIGFmdGVyIHRoaXMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgcHJldmlvdXMgYmxvY2suCisg
ICAgdm9pZCBzcGxpdEJsb2NrKEFpcjo6QmFzaWNCbG9jayomIHByZXZpb3VzQmxvY2ssIEFpcjo6
QmFzaWNCbG9jayomIG5leHRCbG9jaykKKyAgICB7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayog
YmxvY2sgPSBtX2Jsb2NrVG9CbG9ja1ttX2Jsb2NrXTsKKyAgICAgICAgCisgICAgICAgIHByZXZp
b3VzQmxvY2sgPSBibG9jazsKKyAgICAgICAgbmV4dEJsb2NrID0gbV9ibG9ja0luc2VydGlvblNl
dC5pbnNlcnRBZnRlcihibG9jayk7CisgICAgICAgIAorICAgICAgICBmaW5pc2hBcHBlbmRpbmdJ
bnN0cnVjdGlvbnMobmV4dEJsb2NrKTsKKyAgICAgICAgbmV4dEJsb2NrLT5zdWNjZXNzb3JzKCkg
PSBibG9jay0+c3VjY2Vzc29ycygpOworICAgICAgICBibG9jay0+c3VjY2Vzc29ycygpLmNsZWFy
KCk7CisgICAgICAgIAorICAgICAgICBtX2luc3RzLmFwcGVuZChWZWN0b3I8SW5zdD4oKSk7Cisg
ICAgfQorICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KICAgICBUKiBlbnN1cmVTcGVjaWFsKFQqJiBmaWVsZCwgQXJndW1lbnRzJiYuLi4gYXJndW1l
bnRzKQogICAgIHsKQEAgLTExMjMsNyArMTIyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgogICAg
ICAgICAgICAgICAgIGFyZyA9IEFyZzo6Y2FsbEFyZyh2YWx1ZS5yZXAoKS5vZmZzZXRGcm9tU1Ao
KSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kU3RvcmUodmFsdWUudmFsdWUoKSwgYXJnKTsKKyAg
ICAgICAgICAgICAgICBhcHBlbmRTdG9yZShtb3ZlRm9yVHlwZSh2YWx1ZS52YWx1ZSgpLT50eXBl
KCkpLCB2YWx1ZS52YWx1ZSgpLCBhcmcpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMTk2MSw2ICsyMDU5LDMwOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKKyAgICB2b2lkIGFwcGVuZFg4NkRpdihCMzo6T3Bjb2RlIG9wKQorICAgIHsK
KyAgICAgICAgQWlyOjpPcGNvZGUgY29udmVydFRvRG91YmxlV29yZDsKKyAgICAgICAgQWlyOjpP
cGNvZGUgZGl2OworICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPnR5cGUoKSkgeworICAgICAgICBj
YXNlIEludDMyOgorICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRU
b0RvdWJsZVdvcmQzMjsKKyAgICAgICAgICAgIGRpdiA9IFg4NkRpdjMyOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVX
b3JkID0gWDg2Q29udmVydFRvUXVhZFdvcmQ2NDsKKyAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgQVNTRVJUKG9wID09IERpdiB8fCBvcCA9PSBNb2QpOworICAgICAgICBUbXAg
cmVzdWx0ID0gb3AgPT0gRGl2ID8gbV9lYXggOiBtX2VkeDsKKworICAgICAgICBhcHBlbmQoTW92
ZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgbV9lYXgpOworICAgICAgICBhcHBlbmQoY29udmVy
dFRvRG91YmxlV29yZCwgbV9lYXgsIG1fZWR4KTsKKyAgICAgICAgYXBwZW5kKGRpdiwgbV9lYXgs
IG1fZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIHJl
c3VsdCwgdG1wKG1fdmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZFg4NlVEaXYoQjM6
Ok9wY29kZSBvcCkKKyAgICB7CisgICAgICAgIEFpcjo6T3Bjb2RlIGRpdiA9IG1fdmFsdWUtPnR5
cGUoKSA9PSBJbnQzMiA/IFg4NlVEaXYzMiA6IFg4NlVEaXY2NDsKKworICAgICAgICBBU1NFUlQo
b3AgPT0gVURpdiB8fCBvcCA9PSBVTW9kKTsKKyAgICAgICAgVG1wIHJlc3VsdCA9IG9wID09IFVE
aXYgPyBtX2VheCA6IG1fZWR4OworCisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+
Y2hpbGQoMCkpLCBtX2VheCk7CisgICAgICAgIGFwcGVuZChYb3I2NCwgbV9lZHgsIG1fZWR4KTsK
KyAgICAgICAgYXBwZW5kKGRpdiwgbV9lYXgsIG1fZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkp
KTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIHJlc3VsdCwgdG1wKG1fdmFsdWUpKTsKKyAgICB9Cisg
ICAgCisgICAgQWlyOjpPcGNvZGUgbG9hZExpbmtPcGNvZGUoV2lkdGggd2lkdGgsIGJvb2wgZmVu
Y2UpCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2UgPyBPUENPREVfRk9SX1dJRFRIKExvYWRM
aW5rQWNxLCB3aWR0aCkgOiBPUENPREVfRk9SX1dJRFRIKExvYWRMaW5rLCB3aWR0aCk7CisgICAg
fQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlQ29uZE9wY29kZShXaWR0aCB3aWR0aCwgYm9v
bCBmZW5jZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmZW5jZSA/IE9QQ09ERV9GT1JfV0lEVEgo
U3RvcmVDb25kUmVsLCB3aWR0aCkgOiBPUENPREVfRk9SX1dJRFRIKFN0b3JlQ29uZCwgd2lkdGgp
OworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGNhbiBlbWl0IGNvZGUgZm9yIHRoZSBmb2xsb3dp
bmcgcGF0dGVybnM6CisgICAgLy8gQXRvbWljV2Vha0NBUworICAgIC8vIEJpdFhvcihBdG9taWNX
ZWFrQ0FTLCAxKQorICAgIC8vIEF0b21pY1N0cm9uZ0NBUworICAgIC8vIEVxdWFsKEF0b21pY1N0
cm9uZ0NBUywgZXhwZWN0ZWQpCisgICAgLy8gTm90RXF1YWwoQXRvbWljU3Ryb25nQ0FTLCBleHBl
Y3RlZCkKKyAgICAvLyBCcmFuY2goQXRvbWljV2Vha0NBUykKKyAgICAvLyBCcmFuY2goRXF1YWwo
QXRvbWljU3Ryb25nQ0FTLCBleHBlY3RlZCkpCisgICAgLy8gQnJhbmNoKE5vdEVxdWFsKEF0b21p
Y1N0cm9uZ0NBUywgZXhwZWN0ZWQpKQorICAgIC8vCisgICAgLy8gSXQgYXNzdW1lcyB0aGF0IGF0
b21pY1ZhbHVlIHBvaW50cyB0byB0aGUgQ0FTLCBhbmQgbV92YWx1ZSBwb2ludHMgdG8gdGhlIGlu
c3RydWN0aW9uIGJlaW5nCisgICAgLy8gZ2VuZXJhdGVkLiBJdCBhc3N1bWVzIHRoYXQgeW91J3Zl
IGNvbnN1bWVkIGV2ZXJ5dGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjb25zdW1lZC4KKyAgICB2b2lk
IGFwcGVuZENBUyhWYWx1ZSogYXRvbWljVmFsdWUsIGJvb2wgaW52ZXJ0KQorICAgIHsKKyAgICAg
ICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IGF0b21pY1ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXRvbWljKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wg
aXNCcmFuY2ggPSBtX3ZhbHVlLT5vcGNvZGUoKSA9PSBCcmFuY2g7CisgICAgICAgIGJvb2wgaXNT
dHJvbmcgPSBhdG9taWMtPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUzsKKyAgICAgICAgYm9v
bCByZXR1cm5zT2xkVmFsdWUgPSBtX3ZhbHVlLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVM7
CisgICAgICAgIAorICAgICAgICBXaWR0aCB3aWR0aCA9IGF0b21pYy0+b3BlcmF0aW9uV2lkdGgo
KTsKKyAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisKKyAgICAgICAgVG1wIHZh
bHVlUmVzdWx0VG1wOworICAgICAgICBUbXAgYm9vbFJlc3VsdFRtcDsKKyAgICAgICAgaWYgKHJl
dHVybnNPbGRWYWx1ZSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWludmVydCk7Cisg
ICAgICAgICAgICB2YWx1ZVJlc3VsdFRtcCA9IHRtcChtX3ZhbHVlKTsKKyAgICAgICAgICAgIGJv
b2xSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0Jy
YW5jaCkgeworICAgICAgICAgICAgdmFsdWVSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsK
KyAgICAgICAgICAgIGJvb2xSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7
CisgICAgICAgICAgICBib29sUmVzdWx0VG1wID0gdG1wKG1fdmFsdWUpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBUbXAgc3VjY2Vzc0Jvb2xSZXN1bHRUbXA7CisgICAgICAgIGlmIChp
c1N0cm9uZyAmJiAhaXNCcmFuY2gpCisgICAgICAgICAgICBzdWNjZXNzQm9vbFJlc3VsdFRtcCA9
IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdWNjZXNzQm9v
bFJlc3VsdFRtcCA9IGJvb2xSZXN1bHRUbXA7CisKKyAgICAgICAgVG1wIGV4cGVjdGVkVmFsdWVU
bXAgPSB0bXAoYXRvbWljLT5jaGlsZCgwKSk7CisgICAgICAgIFRtcCBuZXdWYWx1ZVRtcCA9IHRt
cChhdG9taWMtPmNoaWxkKDEpKTsKKyAgICAgICAgCisgICAgICAgIEFpcjo6RnJlcXVlbnRlZEJs
b2NrIHN1Y2Nlc3M7CisgICAgICAgIEFpcjo6RnJlcXVlbnRlZEJsb2NrIGZhaWx1cmU7CisgICAg
ICAgIGlmIChpc0JyYW5jaCkgeworICAgICAgICAgICAgc3VjY2VzcyA9IG1fYmxvY2tUb0Jsb2Nr
W21fYmxvY2tdLT5zdWNjZXNzb3IoaW52ZXJ0KTsKKyAgICAgICAgICAgIGZhaWx1cmUgPSBtX2Js
b2NrVG9CbG9ja1ttX2Jsb2NrXS0+c3VjY2Vzc29yKCFpbnZlcnQpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRN
b3ZlRm9yVHlwZShhdG9taWMtPm9wZXJhdGlvblR5cGUoKSksIGltbU9yVG1wKGF0b21pYy0+Y2hp
bGQoMCkpLCBtX2VheCk7CisgICAgICAgICAgICBpZiAocmV0dXJuc09sZFZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgYXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljU3Ryb25nQ0FTLCB3aWR0
aCksIG1fZWF4LCBuZXdWYWx1ZVRtcCwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgYXBwZW5k
KHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPm9wZXJhdGlvblR5cGUoKSksIG1fZWF4LCB2YWx1
ZVJlc3VsdFRtcCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQnJhbmNoKSB7CisgICAgICAg
ICAgICAgICAgYXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoQnJhbmNoQXRvbWljU3Ryb25nQ0FTLCB3
aWR0aCksIEFyZzo6c3RhdHVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6U3VjY2VzcyksIG1fZWF4LCBu
ZXdWYWx1ZVRtcCwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbbV9i
bG9ja10tPnNldFN1Y2Nlc3NvcnMoc3VjY2VzcywgZmFpbHVyZSk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNTdHJvbmdD
QVMsIHdpZHRoKSwgQXJnOjpzdGF0dXNDb25kKGludmVydCA/IE1hY3JvQXNzZW1ibGVyOjpGYWls
dXJlIDogTWFjcm9Bc3NlbWJsZXI6OlN1Y2Nlc3MpLCBtX2VheCwgdG1wKGF0b21pYy0+Y2hpbGQo
MSkpLCBhZGRyZXNzLCBib29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsKKyAgICAg
ICAgLy8gV2Ugd2lzaCB0byBlbWl0OgorICAgICAgICAvLworICAgICAgICAvLyBCbG9jayAjcmVs
b29wOgorICAgICAgICAvLyAgICAgTG9hZExpbmsKKyAgICAgICAgLy8gICAgIEJyYW5jaCBOb3RF
cXVhbAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6IFRoZW46I2ZhaWwsIEVsc2U6ICNzdG9yZQor
ICAgICAgICAvLyBCbG9jayAjc3RvcmU6CisgICAgICAgIC8vICAgICBTdG9yZUNvbmQKKyAgICAg
ICAgLy8gICAgIFhvciAkMSwgJXJlc3VsdCAgICA8LS0tIG9ubHkgaWYgIWludmVydAorICAgICAg
ICAvLyAgICAgSnVtcAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6ICNkb25lCisgICAgICAgIC8v
IEJsb2NrICNmYWlsOgorICAgICAgICAvLyAgICAgTW92ZSAkaW52ZXJ0LCAlcmVzdWx0CisgICAg
ICAgIC8vICAgICBKdW1wCisgICAgICAgIC8vICAgU3VjY2Vzc29yczogI2RvbmUKKyAgICAgICAg
Ly8gQmxvY2sgI2RvbmU6CisgICAgICAgIAorICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHJlbG9v
cEJsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBzdG9yZUJsb2Nr
ID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBzdWNjZXNzQmxvY2sgPSBu
dWxscHRyOworICAgICAgICBpZiAoIWlzQnJhbmNoICYmIGlzU3Ryb25nKQorICAgICAgICAgICAg
c3VjY2Vzc0Jsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBmYWls
QmxvY2sgPSBudWxscHRyOworICAgICAgICBpZiAoIWlzQnJhbmNoKQorICAgICAgICAgICAgZmFp
bEJsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBzdHJvbmdGYWls
QmxvY2s7CisgICAgICAgIGlmIChpc1N0cm9uZykKKyAgICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9j
ayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6RnJlcXVlbnRlZEJsb2NrIGNvbXBhcmlzb25G
YWlsOworICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayB3ZWFrRmFpbDsKKyAgICAgICAgaWYg
KGlzU3Ryb25nKSB7CisgICAgICAgICAgICBjb21wYXJpc29uRmFpbCA9IHN0cm9uZ0ZhaWxCbG9j
azsKKyAgICAgICAgICAgIHdlYWtGYWlsID0gcmVsb29wQmxvY2s7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAoaXNCcmFuY2gpCisgICAgICAgICAgICAgICAgY29tcGFyaXNvbkZh
aWwgPSBmYWlsdXJlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBhcmlz
b25GYWlsID0gZmFpbEJsb2NrOworICAgICAgICAgICAgd2Vha0ZhaWwgPSBmYWlsdXJlOworICAg
ICAgICB9CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogYmVnaW5CbG9jazsKKyAgICAgICAgQWly
OjpCYXNpY0Jsb2NrKiBkb25lQmxvY2s7CisgICAgICAgIHNwbGl0QmxvY2soYmVnaW5CbG9jaywg
ZG9uZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChBaXI6Okp1bXApOworICAgICAg
ICBiZWdpbkJsb2NrLT5zZXRTdWNjZXNzb3JzKHJlbG9vcEJsb2NrKTsKKyAgICAgICAgCisgICAg
ICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQobG9hZExpbmtPcGNvZGUod2lkdGgsIGF0b21pYy0+aGFz
RmVuY2UoKSksIG1fdmFsdWUsIGFkZHJlc3MsIHZhbHVlUmVzdWx0VG1wKTsKKyAgICAgICAgcmVs
b29wQmxvY2stPmFwcGVuZChPUENPREVfRk9SX0NBTk9OSUNBTF9XSURUSChCcmFuY2gsIHdpZHRo
KSwgbV92YWx1ZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIHZhbHVl
UmVzdWx0VG1wLCBleHBlY3RlZFZhbHVlVG1wKTsKKyAgICAgICAgcmVsb29wQmxvY2stPnNldFN1
Y2Nlc3NvcnMoY29tcGFyaXNvbkZhaWwsIHN0b3JlQmxvY2spOworICAgICAgICAKKyAgICAgICAg
c3RvcmVCbG9jay0+YXBwZW5kKHN0b3JlQ29uZE9wY29kZSh3aWR0aCwgYXRvbWljLT5oYXNGZW5j
ZSgpKSwgbV92YWx1ZSwgbmV3VmFsdWVUbXAsIGFkZHJlc3MsIHN1Y2Nlc3NCb29sUmVzdWx0VG1w
KTsKKyAgICAgICAgaWYgKGlzQnJhbmNoKSB7CisgICAgICAgICAgICBzdG9yZUJsb2NrLT5hcHBl
bmQoQnJhbmNoVGVzdDMyLCBtX3ZhbHVlLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8pLCBib29sUmVzdWx0VG1wLCBBcmc6OmJpdEltbSgtMSkpOworICAgICAgICAgICAgc3RvcmVC
bG9jay0+c2V0U3VjY2Vzc29ycyhzdWNjZXNzLCB3ZWFrRmFpbCk7CisgICAgICAgICAgICBkb25l
QmxvY2stPnN1Y2Nlc3NvcnMoKS5jbGVhcigpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWRvbmVCbG9jay0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGRvbmVCbG9jay0+YXBwZW5kKEFpcjo6
T29wcywgbV92YWx1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNTdHJv
bmcpIHsKKyAgICAgICAgICAgICAgICBzdG9yZUJsb2NrLT5hcHBlbmQoQnJhbmNoVGVzdDMyLCBt
X3ZhbHVlLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBzdWNjZXNzQm9vbFJl
c3VsdFRtcCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgICAgICAgICBzdG9yZUJsb2NrLT5z
ZXRTdWNjZXNzb3JzKHN1Y2Nlc3NCbG9jaywgcmVsb29wQmxvY2spOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHN1Y2Nlc3NCbG9jay0+YXBwZW5kKE1vdmUsIG1fdmFsdWUsIEFy
Zzo6aW1tKCFpbnZlcnQpLCBib29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgICAgICBzdWNjZXNz
QmxvY2stPmFwcGVuZChBaXI6Okp1bXAsIG1fdmFsdWUpOworICAgICAgICAgICAgICAgIHN1Y2Nl
c3NCbG9jay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2spOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWludmVydCkKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVC
bG9jay0+YXBwZW5kKFhvcjMyLCBtX3ZhbHVlLCBBcmc6OmJpdEltbSgxKSwgYm9vbFJlc3VsdFRt
cCwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3Rv
cmVCbG9jay0+YXBwZW5kKEFpcjo6SnVtcCwgbV92YWx1ZSk7CisgICAgICAgICAgICAgICAgc3Rv
cmVCbG9jay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2spOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBmYWlsQmxvY2stPmFwcGVuZChNb3ZlLCBtX3ZhbHVlLCBBcmc6
OmltbShpbnZlcnQpLCBib29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgIGZhaWxCbG9jay0+YXBw
ZW5kKEFpcjo6SnVtcCwgbV92YWx1ZSk7CisgICAgICAgICAgICBmYWlsQmxvY2stPnNldFN1Y2Nl
c3NvcnMoZG9uZUJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzU3Ry
b25nKSB7CisgICAgICAgICAgICBUbXAgdG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAg
ICAgICBzdHJvbmdGYWlsQmxvY2stPmFwcGVuZChzdG9yZUNvbmRPcGNvZGUod2lkdGgsIGF0b21p
Yy0+aGFzRmVuY2UoKSksIG1fdmFsdWUsIHZhbHVlUmVzdWx0VG1wLCBhZGRyZXNzLCB0bXApOwor
ICAgICAgICAgICAgc3Ryb25nRmFpbEJsb2NrLT5hcHBlbmQoQnJhbmNoVGVzdDMyLCBtX3ZhbHVl
LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCB0bXAsIEFyZzo6Yml0SW1tKC0x
KSk7CisgICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2stPnNldFN1Y2Nlc3NvcnMoZmFpbEJsb2Nr
LCByZWxvb3BCbG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBhcHBlbmRW
b2lkQXRvbWljKEFpcjo6T3Bjb2RlIGF0b21pY09wY29kZSkKKyAgICB7CisgICAgICAgIGlmICht
X3VzZUNvdW50cy5udW1Vc2VzKG1fdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKG1fdmFsdWUpOworICAgICAgICAK
KyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKGF0b21pY09wY29kZSwgQXJnOjpJbW0sIGFkZHJlc3Mu
a2luZCgpKSAmJiBpbW0obV92YWx1ZS0+Y2hpbGQoMCkpKSB7CisgICAgICAgICAgICBhcHBlbmQo
YXRvbWljT3Bjb2RlLCBpbW0obV92YWx1ZS0+Y2hpbGQoMCkpLCBhZGRyZXNzKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXNWYWxp
ZEZvcm0oYXRvbWljT3Bjb2RlLCBBcmc6OlRtcCwgYWRkcmVzcy5raW5kKCkpKSB7CisgICAgICAg
ICAgICBhcHBlbmQoYXRvbWljT3Bjb2RlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBhZGRyZXNz
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmRHZW5lcmFsQXRvbWlj
KEFpcjo6T3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMg
PSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgCisgICAgICAgIEFyZyBhZGRy
ZXNzID0gYWRkcihtX3ZhbHVlKTsKKyAgICAgICAgVG1wIG9sZFZhbHVlID0gbV9jb2RlLm5ld1Rt
cChHUCk7CisgICAgICAgIFRtcCBuZXdWYWx1ZSA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAg
ICAKKyAgICAgICAgLy8gV2UgbmVlZCBhIENBUyBsb29wIG9yIGEgTEwvU0MgbG9vcC4gVXNpbmcg
cHJlcGFyZS9hdHRlbXB0IGphcmdvbiwgd2Ugd2FudDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
QmxvY2sgI3JlbG9vcDoKKyAgICAgICAgLy8gICAgIFByZXBhcmUKKyAgICAgICAgLy8gICAgIG9w
Y29kZQorICAgICAgICAvLyAgICAgQXR0ZW1wdAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6IFRo
ZW46I2RvbmUsIEVsc2U6I3JlbG9vcAorICAgICAgICAvLyBCbG9jayAjZG9uZToKKyAgICAgICAg
Ly8gICAgIE1vdmUgb2xkVmFsdWUsIHJlc3VsdAorICAgICAgICAKKyAgICAgICAgYXBwZW5kKHJl
bGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUoKSksIG9sZFZhbHVlLCB0bXAoYXRvbWljKSk7
CisgICAgICAgIAorICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHJlbG9vcEJsb2NrID0gbmV3Qmxv
Y2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBiZWdpbkJsb2NrOworICAgICAgICBBaXI6
OkJhc2ljQmxvY2sqIGRvbmVCbG9jazsKKyAgICAgICAgc3BsaXRCbG9jayhiZWdpbkJsb2NrLCBk
b25lQmxvY2spOworICAgICAgICAKKyAgICAgICAgYXBwZW5kKEFpcjo6SnVtcCk7CisgICAgICAg
IGJlZ2luQmxvY2stPnNldFN1Y2Nlc3NvcnMocmVsb29wQmxvY2spOworICAgICAgICAKKyAgICAg
ICAgQWlyOjpPcGNvZGUgcHJlcGFyZU9wY29kZTsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSB7CisgICAgICAgICAg
ICBjYXNlIFdpZHRoODoKKyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTG9hZDhTaWdu
ZWRFeHRlbmRUbzMyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBX
aWR0aDE2OgorICAgICAgICAgICAgICAgIHByZXBhcmVPcGNvZGUgPSBMb2FkMTZTaWduZWRFeHRl
bmRUbzMyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXaWR0aDMy
OgorICAgICAgICAgICAgICAgIHByZXBhcmVPcGNvZGUgPSBNb3ZlMzI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICAgICAgcHJl
cGFyZU9wY29kZSA9IE1vdmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkp
OworICAgICAgICAgICAgb3Bjb2RlID0gbG9hZExpbmtPcGNvZGUoYXRvbWljLT5vcGVyYXRpb25X
aWR0aCgpLCBhdG9taWMtPmhhc0ZlbmNlKCkpOworICAgICAgICB9CisgICAgICAgIHJlbG9vcEJs
b2NrLT5hcHBlbmQocHJlcGFyZU9wY29kZSwgbV92YWx1ZSwgYWRkcmVzcywgb2xkVmFsdWUpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG9wY29kZSAhPSBBaXI6Ok5vcCkgeworICAgICAgICAgICAg
aWYgKGltbShhdG9taWMtPmNoaWxkKDApKSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1t
LCBBcmc6OlRtcCwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBl
bmQob3Bjb2RlLCBtX3ZhbHVlLCBpbW0oYXRvbWljLT5jaGlsZCgwKSksIG9sZFZhbHVlLCBuZXdW
YWx1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1w
LCBBcmc6OlRtcCwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBl
bmQob3Bjb2RlLCBtX3ZhbHVlLCB0bXAoYXRvbWljLT5jaGlsZCgwKSksIG9sZFZhbHVlLCBuZXdW
YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+
YXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUoKSksIG1fdmFsdWUsIG9sZFZh
bHVlLCBuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGltbShhdG9taWMtPmNoaWxkKDAp
KSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1tLCBBcmc6OlRtcCkpCisgICAgICAgICAg
ICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQob3Bjb2RlLCBtX3ZhbHVlLCBpbW0oYXRvbWlj
LT5jaGlsZCgwKSksIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQob3Bjb2RlLCBtX3ZhbHVlLCB0bXAoYXRvbWlj
LT5jaGlsZCgwKSksIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBjYXNPcGNvZGUgPSBP
UENPREVfRk9SX1dJRFRIKEJyYW5jaEF0b21pY1N0cm9uZ0NBUywgYXRvbWljLT5vcGVyYXRpb25X
aWR0aCgpKTsKKyAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQocmVsYXhlZE1vdmVGb3JU
eXBlKGF0b21pYy0+dHlwZSgpKSwgbV92YWx1ZSwgb2xkVmFsdWUsIG1fZWF4KTsKKyAgICAgICAg
ICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQoY2FzT3Bjb2RlLCBtX3ZhbHVlLCBBcmc6OnN0YXR1c0Nv
bmQoTWFjcm9Bc3NlbWJsZXI6OlN1Y2Nlc3MpLCBtX2VheCwgbmV3VmFsdWUsIGFkZHJlc3MpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsK
KyAgICAgICAgICAgIFRtcCBib29sUmVzdWx0ID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAg
ICAgICByZWxvb3BCbG9jay0+YXBwZW5kKHN0b3JlQ29uZE9wY29kZShhdG9taWMtPm9wZXJhdGlv
bldpZHRoKCksIGF0b21pYy0+aGFzRmVuY2UoKSksIG1fdmFsdWUsIG5ld1ZhbHVlLCBhZGRyZXNz
LCBib29sUmVzdWx0KTsKKyAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQoQnJhbmNoVGVz
dDMyLCBtX3ZhbHVlLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBib29sUmVz
dWx0LCBBcmc6OmJpdEltbSgtMSkpOworICAgICAgICB9CisgICAgICAgIHJlbG9vcEJsb2NrLT5z
ZXRTdWNjZXNzb3JzKGRvbmVCbG9jaywgcmVsb29wQmxvY2spOworICAgIH0KKyAgICAKICAgICB2
b2lkIGxvd2VyKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bjb2RlKCkpIHsK
QEAgLTE5NzEsMzAgKzIzNzEsNTAgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgTG9hZDogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdCht
X3ZhbHVlLCBtb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLCBtX3ZhbHVlLCBhZGRyKG1fdmFs
dWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBt
X3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29k
ZSA9IEFpcjo6T29wczsKKyAgICAgICAgICAgIGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpIHsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG1lbW9yeS0+dHlwZSgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gTG9hZEFjcTMyOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEludDY0OgorICAg
ICAgICAgICAgICAgICAgICBvcGNvZGUgPSBMb2FkQWNxNjQ7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG9w
Y29kZSA9IG1vdmVGb3JUeXBlKG1lbW9yeS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGFwcGVuZCh0
cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAo
bV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgTG9hZDhTOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0
KG1fdmFsdWUsIExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwg
dG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3E4U2lnbmVkRXh0ZW5kVG8z
MiA6IExvYWQ4U2lnbmVkRXh0ZW5kVG8zMjsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0lu
c3QobV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDha
OiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQ4LCBtX3Zh
bHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFpcjo6T3Bj
b2RlIG9wY29kZSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpID8gTG9h
ZEFjcTggOiBMb2FkODsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwg
b3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDE2UzogewotICAgICAg
ICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkMTZTaWduZWRFeHRlbmRUbzMy
LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFp
cjo6T3Bjb2RlIG9wY29kZSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgp
ID8gTG9hZEFjcTE2U2lnbmVkRXh0ZW5kVG8zMiA6IExvYWQxNlNpZ25lZEV4dGVuZFRvMzI7Cisg
ICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwg
YWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIExvYWQxNlo6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFw
cGluZ0luc3QobV92YWx1ZSwgTG9hZDE2LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92
YWx1ZSkpKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG1fdmFsdWUtPmFzPE1l
bW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpID8gTG9hZEFjcTE2IDogTG9hZDE2OworICAgICAgICAg
ICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92
YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0K
KyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFkZDogewogICAgICAgICAgICAgaWYgKHRyeUFw
cGVuZExlYSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTIwOTIsNyArMjUxMiw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNDaGlsbCgpKQogICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7CiAgICAgICAgICAgICBpZiAoaXNJbnQo
bV92YWx1ZS0+dHlwZSgpKSAmJiBpc1g4NigpKSB7Ci0gICAgICAgICAgICAgICAgbG93ZXJYODZE
aXYoRGl2KTsKKyAgICAgICAgICAgICAgICBhcHBlbmRYODZEaXYoRGl2KTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoIWlzWDg2KCkg
fHwgaXNGbG9hdChtX3ZhbHVlLT50eXBlKCkpKTsKQEAgLTIxMDMsNyArMjUyMyw3IEBAIHByaXZh
dGU6CiAKICAgICAgICAgY2FzZSBVRGl2OiB7CiAgICAgICAgICAgICBpZiAoaXNJbnQobV92YWx1
ZS0+dHlwZSgpKSAmJiBpc1g4NigpKSB7Ci0gICAgICAgICAgICAgICAgbG93ZXJYODZVRGl2KFVE
aXYpOworICAgICAgICAgICAgICAgIGFwcGVuZFg4NlVEaXYoVURpdik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0yMTE3LDEzICsyNTM3LDEzIEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgTW9kOiB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1g4
NigpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3ZhbHVlLT5pc0NoaWxsKCkpOwot
ICAgICAgICAgICAgbG93ZXJYODZEaXYoTW9kKTsKKyAgICAgICAgICAgIGFwcGVuZFg4NkRpdihN
b2QpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBVTW9k
OiB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKLSAgICAgICAgICAgIGxv
d2VyWDg2VURpdihVTW9kKTsKKyAgICAgICAgICAgIGFwcGVuZFg4NlVEaXYoVU1vZCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjE2MiwxMCArMjU4MiwyOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIGFwcGVuZFVuT3A8Tm90MzIsIE5vdDY0PihtX3ZhbHVlLT5j
aGlsZCgwKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIHBhdHRlcm4gaXMgc3VwZXIgdXNlZnVsIG9uIGJv
dGggeDg2IGFuZCBBUk02NCwgc2luY2UgdGhlIGludmVyc2lvbiBvZiB0aGUgQ0FTIHJlc3VsdAor
ICAgICAgICAgICAgLy8gY2FuIGJlIGRvbmUgd2l0aCB6ZXJvIGNvc3Qgb24geDg2IChqdXN0IGZs
aXAgdGhlIHNldCBmcm9tIEUgdG8gTkUpIGFuZCBpdCdzIGEgcHJvZ3Jlc3Npb24KKyAgICAgICAg
ICAgIC8vIG9uIEFSTTY0IChzaW5jZSBTVFggcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIHNvIG9yZGlu
YXJpbHkgd2UgaGF2ZSB0byBmbGlwIGl0KS4KKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgxKS0+aXNJbnQoMSkKKyAgICAgICAgICAgICAgICAmJiBpc0F0b21pY0NBUyhtX3ZhbHVlLT5j
aGlsZCgwKS0+b3Bjb2RlKCkpCisgICAgICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbChtX3Zh
bHVlLT5jaGlsZCgwKSkpIHsKKyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChtX3ZhbHVl
LT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kQ0FTKG1fdmFsdWUtPmNoaWxkKDAp
LCB0cnVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPFhvcjMyLCBYb3I2NCwgWG9yRG91YmxlLCBY
b3JGbG9hdCwgQ29tbXV0YXRpdmU+KAogICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDAp
LCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIERlcGVuZDogeworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXNBUk02NCgpKTsKKyAgICAgICAgICAgIGFwcGVuZFVuT3A8RGVwZW5kMzIsIERlcGVu
ZDY0PihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
IAogICAgICAgICBjYXNlIFNobDogewogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEp
LT5pc0ludDMyKDEpKSB7CkBAIC0yMjY2LDcgKzI3MDQsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYXBwZW5kU3RvcmUodmFsdWVU
b1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUs
IGFkZHIobV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIy
ODcsNyArMjcyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBlbmRTdG9yZShB
aXI6OlN0b3JlOCwgdmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFw
cGVuZFN0b3JlKG1fdmFsdWUsIGFkZHIobV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKQEAgLTIzMDgsNyArMjc0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBhcHBlbmRTdG9yZShBaXI6OlN0b3JlMTYsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVl
KSk7CisgICAgICAgICAgICBhcHBlbmRTdG9yZShtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yNDE2LDcgKzI4NTQsMjIgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgRXF1YWw6Ci0gICAgICAgIGNhc2UgTm90
RXF1YWw6CisgICAgICAgIGNhc2UgTm90RXF1YWw6IHsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTCisgICAgICAgICAgICAgICAg
JiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpCisgICAg
ICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5zKG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgxKSkpOworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9sb2NrZWQuY29udGFpbnMobV92
YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb21t
aXRJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kQ0FT
KG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5vcGNvZGUoKSA9PSBOb3RFcXVhbCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUobV92YWx1ZSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBMZXNzVGhhbjoKICAgICAgICAgY2FzZSBHcmVhdGVyVGhhbjoKICAgICAgICAgY2FzZSBMZXNz
RXF1YWw6CkBAIC0yNzI3LDYgKzMxODAsNDAgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2UgQnJhbmNoOiB7CisgICAgICAgICAgICBpZiAoY2FuQmVJbnRlcm5hbChtX3ZhbHVl
LT5jaGlsZCgwKSkpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogYnJhbmNoQ2hpbGQgPSBtX3Zh
bHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGJyYW5jaENoaWxkLT5vcGNv
ZGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAgICAg
ICAgICAgICAgY29tbWl0SW50ZXJuYWwoYnJhbmNoQ2hpbGQpOworICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRDQVMoYnJhbmNoQ2hpbGQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1N0
cm9uZ0NBUzoKKyAgICAgICAgICAgICAgICAgICAgLy8gQSBicmFuY2ggaXMgYSBjb21wYXJpc29u
IHRvIHplcm8uCisgICAgICAgICAgICAgICAgICAgIGlmIChicmFuY2hDaGlsZC0+Y2hpbGQoMCkt
PmlzSW50KDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChicmFu
Y2hDaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRDQVMoYnJhbmNoQ2hpbGQs
IHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIEVxdWFsOgorICAgICAgICAgICAgICAgIGNhc2UgTm90RXF1
YWw6CisgICAgICAgICAgICAgICAgICAgIGlmIChicmFuY2hDaGlsZC0+Y2hpbGQoMCktPm9wY29k
ZSgpID09IEF0b21pY1N0cm9uZ0NBUworICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2FuQmVJ
bnRlcm5hbChicmFuY2hDaGlsZC0+Y2hpbGQoMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAm
JiBicmFuY2hDaGlsZC0+Y2hpbGQoMCktPmNoaWxkKDApID09IGJyYW5jaENoaWxkLT5jaGlsZCgx
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwoYnJhbmNoQ2hpbGQp
OworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwoYnJhbmNoQ2hpbGQtPmNo
aWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENBUyhicmFuY2hDaGlsZC0+
Y2hpbGQoMCksIGJyYW5jaENoaWxkLT5vcGNvZGUoKSA9PSBOb3RFcXVhbCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBw
ZW5kKGNyZWF0ZUJyYW5jaChtX3ZhbHVlLT5jaGlsZCgwKSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkBAIC0yNzg0LDcgKzMyNzEsODEgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGFwcGVuZChBaXI6OkVudHJ5U3dpdGNoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAgY2Fz
ZSBBdG9taWNTdHJvbmdDQVM6IHsKKyAgICAgICAgICAgIGFwcGVuZENBUyhtX3ZhbHVlLCBmYWxz
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEF0b21pY1hjaGdBZGQ6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMg
PSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRWb2lk
QXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljQWRkLCBhdG9taWMtPm9wZXJhdGlvbldpZHRo
KCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEFyZyBhZGRyZXNzID0gYWRkcihhdG9taWMpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bj
b2RlID0gT1BDT0RFX0ZPUl9XSURUSChBdG9taWNYY2hnQWRkLCBhdG9taWMtPm9wZXJhdGlvbldp
ZHRoKCkpOworICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIGFk
ZHJlc3Mua2luZCgpKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5
cGUoYXRvbWljLT50eXBlKCkpLCB0bXAoYXRvbWljLT5jaGlsZCgwKSksIHRtcChhdG9taWMpKTsK
KyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoYXRvbWljKSwgYWRkcmVzcyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhcHBl
bmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfQ0FOT05JQ0FMX1dJRFRIKEFkZCwgYXRvbWljLT5v
cGVyYXRpb25XaWR0aCgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAorICAg
ICAgICBjYXNlIEF0b21pY1hjaGdTdWI6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9t
aWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRW
b2lkQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljU3ViLCBhdG9taWMtPm9wZXJhdGlvbldp
ZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9DQU5PTklDQUxfV0lEVEgoU3ViLCBh
dG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDogeworICAgICAgICAg
ICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAg
ICAgICAgICAgaWYgKGFwcGVuZFZvaWRBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNBbmQs
IGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX0NB
Tk9OSUNBTF9XSURUSChBbmQsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNY
Y2hnT3I6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxB
dG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWljKE9QQ09ERV9G
T1JfV0lEVEgoQXRvbWljT3IsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXBwZW5kR2VuZXJhbEF0
b21pYyhPUENPREVfRk9SX0NBTk9OSUNBTF9XSURUSChPciwgYXRvbWljLT5vcGVyYXRpb25XaWR0
aCgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEF0b21pY1hjaGdYb3I6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9t
aWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRW
b2lkQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljWG9yLCBhdG9taWMtPm9wZXJhdGlvbldp
ZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9DQU5PTklDQUxfV0lEVEgoWG9yLCBh
dG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljWGNoZzogeworICAgICAgICAgICAg
QXRvbWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBBcmcgYWRkcmVzcyA9IGFkZHIoYXRvbWljKTsKKyAgICAgICAg
ICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljWGNoZywgYXRv
bWljLT5vcGVyYXRpb25XaWR0aCgpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNv
ZGUsIEFyZzo6VG1wLCBhZGRyZXNzLmtpbmQoKSkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQo
cmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkp
LCB0bXAoYXRvbWljKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGF0b21p
YyksIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX0NB
Tk9OSUNBTF9XSURUSChYb3IsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNzkyLDY0ICszMzUzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgZGF0YUxvZygiRkFUQUw6IGNvdWxkIG5vdCBsb3dlciAiLCBkZWVwRHVtcCht
X3Byb2NlZHVyZSwgbV92YWx1ZSksICJcbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KLQotICAgIHZvaWQgbG93ZXJYODZEaXYoQjM6Ok9wY29kZSBvcCkK
LSAgICB7Ci0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKLSAgICAgICAgVG1wIGVheCA9IFRt
cChYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgICAgIFRtcCBlZHggPSBUbXAoWDg2UmVnaXN0ZXJz
OjplZHgpOwotCi0gICAgICAgIEFpcjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJsZVdvcmQ7Ci0gICAg
ICAgIEFpcjo6T3Bjb2RlIGRpdjsKLSAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT50eXBlKCkpIHsK
LSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBY
ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzI7Ci0gICAgICAgICAgICBkaXYgPSBYODZEaXYzMjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAgY29udmVy
dFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb1F1YWRXb3JkNjQ7Ci0gICAgICAgICAgICBkaXYg
PSBYODZEaXY2NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChvcCA9PSBEaXYgfHwgb3AgPT0gTW9kKTsKLSAg
ICAgICAgWDg2UmVnaXN0ZXJzOjpSZWdpc3RlcklEIHJlc3VsdCA9IG9wID09IERpdiA/IFg4NlJl
Z2lzdGVyczo6ZWF4IDogWDg2UmVnaXN0ZXJzOjplZHg7Ci0KLSAgICAgICAgYXBwZW5kKE1vdmUs
IHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIGVheCk7Ci0gICAgICAgIGFwcGVuZChjb252ZXJ0VG9E
b3VibGVXb3JkLCBlYXgsIGVkeCk7Ci0gICAgICAgIGFwcGVuZChkaXYsIGVheCwgZWR4LCB0bXAo
bV92YWx1ZS0+Y2hpbGQoMSkpKTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChyZXN1bHQpLCB0
bXAobV92YWx1ZSkpOwotCi0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAg
ICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHZvaWQg
bG93ZXJYODZVRGl2KEIzOjpPcGNvZGUgb3ApCi0gICAgewotI2lmIENQVShYODYpIHx8IENQVShY
ODZfNjQpCi0gICAgICAgIFRtcCBlYXggPSBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpOwotICAgICAg
ICBUbXAgZWR4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWR4KTsKLQotICAgICAgICBBaXI6Ok9wY29k
ZSBkaXYgPSBtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyBYODZVRGl2MzIgOiBYODZVRGl2NjQ7
Ci0KLSAgICAgICAgQVNTRVJUKG9wID09IFVEaXYgfHwgb3AgPT0gVU1vZCk7Ci0gICAgICAgIFg4
NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCByZXN1bHQgPSBvcCA9PSBVRGl2ID8gWDg2UmVnaXN0ZXJz
OjplYXggOiBYODZSZWdpc3RlcnM6OmVkeDsKLQotICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1f
dmFsdWUtPmNoaWxkKDApKSwgZWF4KTsKLSAgICAgICAgYXBwZW5kKFhvcjY0LCBlZHgsIGVkeCk7
Ci0gICAgICAgIGFwcGVuZChkaXYsIGVheCwgZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsK
LSAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChyZXN1bHQpLCB0bXAobV92YWx1ZSkpOwotI2Vsc2UK
LSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7Ci0jZW5kaWYKLSAgICB9Ci0KKyAgICAKICAgICBJbmRleFNldDxWYWx1ZT4gbV9sb2Nr
ZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4KICAg
ICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBtX3ZhbHVlVG9UbXA7IC8vIFRoZXNlIGFyZSB2YWx1ZXMg
dGhhdCBtdXN0IGhhdmUgYSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBhIFZhbHVlKiB3aXRoIGEg
bm9uLW51bGwgVG1wIGlzICJwaW5uZWQiLgogICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IG1fcGhp
VG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBUbXAuCkBAIC0yODY0LDcgKzMzNjgsNyBA
QCBwcml2YXRlOgogCiAgICAgVmVjdG9yPFZlY3RvcjxJbnN0LCA0Pj4gbV9pbnN0czsKICAgICBW
ZWN0b3I8SW5zdD4gbV9wcm9sb2d1ZTsKLQorICAgIAogICAgIEIzOjpCYXNpY0Jsb2NrKiBtX2Js
b2NrOwogICAgIGJvb2wgbV9pc1JhcmU7CiAgICAgdW5zaWduZWQgbV9pbmRleDsKQEAgLTI4NzUs
NiArMzM3OSwxMiBAQCBwcml2YXRlOgogCiAgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKICAg
ICBDb2RlJiBtX2NvZGU7CisKKyAgICBBaXI6OkJsb2NrSW5zZXJ0aW9uU2V0IG1fYmxvY2tJbnNl
cnRpb25TZXQ7CisKKyAgICBUbXAgbV9lYXg7CisgICAgVG1wIG1fZWN4OworICAgIFRtcCBtX2Vk
eDsKIH07CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIs
OCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIGNsYXNzIFByb2NlZHVyZTsKIG5h
bWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CiAKLS8vIFRoaXMgbG93ZXJzIHRoZSBjdXJyZW50
IEIzIHByb2NlZHVyZSB0byBhbiBBaXIgY29kZS4KKy8vIFRoaXMgbG93ZXJzIHRoZSBjdXJyZW50
IEIzIHByb2NlZHVyZSB0byBhbiBBaXIgY29kZS4gTm90ZSB0aGF0IHRoaXMgYXNzdW1lcyB0aGF0
IHRoZSBwcm9jZWR1cmUgaXMgaW4KKy8vIHF1aXJrcyBtb2RlLCBidXQgaXQgZG9lcyBub3QgYXNz
ZXJ0IHRoaXMsIHRvIHNpbXBsaWZ5IGhvdyB3ZSB3cml0ZSB0ZXN0cy4KIAogSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBsb3dlclRvQWlyKFByb2NlZHVyZSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDMwICszNCw0OCBAQCBNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVlKCkKIHsKIH0KIAorVHlw
ZSBNZW1vcnlWYWx1ZTo6YWNjZXNzVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZCgpKQor
ICAgICAgICByZXR1cm4gdHlwZSgpOworICAgIC8vIFRoaXMgaGFwcGVucyB0byB3b3JrIGZvciBh
dG9taWNzLCB0b28uIFRoYXQncyB3aHkgQXRvbWljVmFsdWUgZG9lcyBub3QgbmVlZCB0byBvdmVy
cmlkZSB0aGlzLgorICAgIHJldHVybiBjaGlsZCgwKS0+dHlwZSgpOworfQorCitCYW5rIE1lbW9y
eVZhbHVlOjphY2Nlc3NCYW5rKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYmFua0ZvclR5cGUoYWNj
ZXNzVHlwZSgpKTsKK30KKwogc2l6ZV90IE1lbW9yeVZhbHVlOjphY2Nlc3NCeXRlU2l6ZSgpIGNv
bnN0CiB7CisgICAgcmV0dXJuIGJ5dGVzKGFjY2Vzc1dpZHRoKCkpOworfQorCitXaWR0aCBNZW1v
cnlWYWx1ZTo6bG9hZFN0b3JlV2lkdGgoKSBjb25zdAorewogICAgIHN3aXRjaCAob3Bjb2RlKCkp
IHsKICAgICBjYXNlIExvYWQ4WjoKICAgICBjYXNlIExvYWQ4UzoKICAgICBjYXNlIFN0b3JlODoK
LSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiBXaWR0aDg7CiAgICAgY2FzZSBMb2Fk
MTZaOgogICAgIGNhc2UgTG9hZDE2UzoKICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIHJldHVy
biAyOworICAgICAgICByZXR1cm4gV2lkdGgxNjsKICAgICBjYXNlIExvYWQ6Ci0gICAgICAgIHJl
dHVybiBzaXplb2ZUeXBlKHR5cGUoKSk7CisgICAgICAgIHJldHVybiB3aWR0aEZvclR5cGUodHlw
ZSgpKTsKICAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXR1cm4gc2l6ZW9mVHlwZShjaGlsZCgw
KS0+dHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlwZShjaGlsZCgwKS0+dHlwZSgp
KTsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIFdpZHRoODsKICAgICB9CiB9CiAKIFdp
ZHRoIE1lbW9yeVZhbHVlOjphY2Nlc3NXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHdpZHRo
Rm9yQnl0ZXMoYWNjZXNzQnl0ZVNpemUoKSk7CisgICAgcmV0dXJuIGxvYWRTdG9yZVdpZHRoKCk7
CiB9CiAKIHZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC02NSw4ICs4MywxMSBAQCB2b2lkIE1lbW9yeVZhbHVl
OjpkdW1wTWV0YShDb21tYVByaW50ZXImCiAgICAgaWYgKG1fb2Zmc2V0KQogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJvZmZzZXQgPSAiLCBtX29mZnNldCk7CiAgICAgaWYgKChpc0xvYWQoKSAm
JiBlZmZlY3RzKCkucmVhZHMgIT0gcmFuZ2UoKSkKLSAgICAgICAgfHwgKGlzU3RvcmUoKSAmJiBl
ZmZlY3RzKCkud3JpdGVzICE9IHJhbmdlKCkpKQorICAgICAgICB8fCAoaXNTdG9yZSgpICYmIGVm
ZmVjdHMoKS53cml0ZXMgIT0gcmFuZ2UoKSkKKyAgICAgICAgfHwgZmVuY2VSYW5nZSgpKQogICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJyYW5nZSA9ICIsIHJhbmdlKCkpOworICAgIGlmIChmZW5j
ZVJhbmdlKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImZlbmNlUmFuZ2UgPSAiLCBmZW5j
ZVJhbmdlKCkpOwogfQogCiBWYWx1ZSogTWVtb3J5VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CkBA
IC03NCw2ICs5NSw2MiBAQCBWYWx1ZSogTWVtb3J5VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CiAg
ICAgcmV0dXJuIG5ldyBNZW1vcnlWYWx1ZSgqdGhpcyk7CiB9CiAKKy8vIFVzZSB0aGlzIGZvcm0g
Zm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhh
dCBoYXZlIGEgc3VmZml4IHRoYXQKKy8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCitN
ZW1vcnlWYWx1ZTo6TWVtb3J5VmFsdWUoS2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCwgSGVhcFJhbmdlIHJhbmdlLCBIZWFw
UmFuZ2UgZmVuY2VSYW5nZSkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUs
IG9yaWdpbiwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAsIG1fcmFuZ2Uo
cmFuZ2UpCisgICAgLCBtX2ZlbmNlUmFuZ2UoZmVuY2VSYW5nZSkKK3sKKyAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkgeworICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICAgICAg
Y2FzZSBMb2FkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZDhaOgorICAg
ICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBjYXNlIExv
YWQxNlM6CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAg
ICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9h
ZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCitNZW1vcnlWYWx1ZTo6TWVtb3J5
VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBv
ZmZzZXQsIEhlYXBSYW5nZSByYW5nZSwgSGVhcFJhbmdlIGZlbmNlUmFuZ2UpCisgICAgOiBNZW1v
cnlWYWx1ZShraW5kLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQsIHJhbmdlLCBmZW5j
ZVJhbmdlKQoreworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIHN3aXRjaCAo
a2luZC5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2Fk
OFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3Rv
cmVzLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQsIEhlYXBSYW5nZSBy
YW5nZSwgSGVhcFJhbmdlIGZlbmNlUmFuZ2UpCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBr
aW5kLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICwgbV9vZmZzZXQob2Zmc2V0
KQorICAgICwgbV9yYW5nZShyYW5nZSkKKyAgICAsIG1fZmVuY2VSYW5nZShmZW5jZVJhbmdlKQor
eworICAgIEFTU0VSVChCMzo6aXNTdG9yZShraW5kLm9wY29kZSgpKSk7Cit9CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMwogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMjEyOTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNDggKzI3LDE3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNC
YW5rLmgiCiAjaW5jbHVkZSAiQjNIZWFwUmFuZ2UuaCIKICNpbmNsdWRlICJCM1ZhbHVlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi0vLyBGSVhNRTogV2Ugd2FudCB0byBh
bGxvdyBmZW5jZWQgbWVtb3J5IGFjY2Vzc2VzIG9uIEFSTS4KLS8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzNDkKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUg
TWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGFj
Y2VwdHMoS2luZCBraW5kKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7
Ci0gICAgICAgIGNhc2UgTG9hZDhaOgotICAgICAgICBjYXNlIExvYWQ4UzoKLSAgICAgICAgY2Fz
ZSBMb2FkMTZaOgotICAgICAgICBjYXNlIExvYWQxNlM6Ci0gICAgICAgIGNhc2UgTG9hZDoKLSAg
ICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBT
dG9yZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wg
aXNTdG9yZShLaW5kIGtpbmQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkp
IHsKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAg
Y2FzZSBTdG9yZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGlj
IGJvb2wgaXNMb2FkKEtpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhY2NlcHRzKGtp
bmQpICYmICFpc1N0b3JlKGtpbmQpOworICAgICAgICByZXR1cm4gaXNNZW1vcnlBY2Nlc3Moa2lu
ZC5vcGNvZGUoKSk7CiAgICAgfQogCiAgICAgfk1lbW9yeVZhbHVlKCk7CkBAIC03OCw3NiArNDcs
NTggQEAgcHVibGljOgogCiAgICAgY29uc3QgSGVhcFJhbmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmFuZ2U7IH0KICAgICB2b2lkIHNldFJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2Up
IHsgbV9yYW5nZSA9IHJhbmdlOyB9CisgICAgCisgICAgLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3Ig
cmFuZ2UuCisgICAgY29uc3QgSGVhcFJhbmdlJiBhY2Nlc3NSYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IHJhbmdlKCk7IH0KKyAgICB2b2lkIHNldEFjY2Vzc1JhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFu
Z2UpIHsgc2V0UmFuZ2UocmFuZ2UpOyB9CisgICAgCisgICAgY29uc3QgSGVhcFJhbmdlJiBmZW5j
ZVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9mZW5jZVJhbmdlOyB9CisgICAgdm9pZCBzZXRGZW5j
ZVJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9mZW5jZVJhbmdlID0gcmFuZ2U7IH0K
KworICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIEIzOjppc1N0b3JlKG9wY29kZSgp
KTsgfQorICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyByZXR1cm4gQjM6OmlzTG9hZChvcGNvZGUo
KSk7IH0KIAotICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBWb2lk
OyB9Ci0gICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgIT0gVm9pZDsgfQor
ICAgIGJvb2wgaGFzRmVuY2UoKSBjb25zdCB7IHJldHVybiAhIWZlbmNlUmFuZ2UoKTsgfQogCisg
ICAgVHlwZSBhY2Nlc3NUeXBlKCkgY29uc3Q7CisgICAgQmFuayBhY2Nlc3NCYW5rKCkgY29uc3Q7
CiAgICAgc2l6ZV90IGFjY2Vzc0J5dGVTaXplKCkgY29uc3Q7Ci0gICAgV2lkdGggYWNjZXNzV2lk
dGgoKSBjb25zdDsKKyAgICAKKyAgICAvLyBTbGlnaHRseSBmYXN0ZXIgdmVyc2lvbiBvZiBhY2Nl
c3NXaWR0aCwgaWYgeW91IGtub3cgdGhhdCB5b3UncmUgd29ya2luZyB3aXRoIGEgbG9hZCBvciBz
dG9yZS4KKyAgICBXaWR0aCBsb2FkU3RvcmVXaWR0aCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1
YWwgV2lkdGggYWNjZXNzV2lkdGgoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZHVt
cE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBWYWx1ZSogY2xvbmVJbXBsKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgTWVtb3J5VmFsdWUoQ2hlY2tlZE9w
Y29kZVRhZywgS2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGludDMyX3Qgb2Zm
c2V0LCBIZWFwUmFuZ2UgcmFuZ2UsIEhlYXBSYW5nZSBmZW5jZVJhbmdlLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUsIG9y
aWdpbiwgYXJndW1lbnRzLi4uKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAg
LCBtX3JhbmdlKHJhbmdlKQorICAgICAgICAsIG1fZmVuY2VSYW5nZShmZW5jZVJhbmdlKQorICAg
IHsKKyAgICB9CisgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7Ci0K
KyAgICAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9h
ZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CiAgICAgLy8g
ZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQs
IFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0
ID0gMCkKLSAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4s
IHBvaW50ZXIpCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAsIG1fcmFuZ2Uo
SGVhcFJhbmdlOjp0b3AoKSkKLSAgICB7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2Ug
TG9hZDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTG9hZDhaOgot
ICAgICAgICAgICAgY2FzZSBMb2FkOFM6Ci0gICAgICAgICAgICBjYXNlIExvYWQxNlo6Ci0gICAg
ICAgICAgICBjYXNlIExvYWQxNlM6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50
MzIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdG9yZTg6Ci0g
ICAgICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOgotICAgICAg
ICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICBNZW1vcnlWYWx1ZShLaW5k
LCBUeXBlLCBPcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDAsIEhlYXBS
YW5nZSByYW5nZSA9IEhlYXBSYW5nZTo6dG9wKCksIEhlYXBSYW5nZSBmZW5jZVJhbmdlID0gSGVh
cFJhbmdlKCkpOwogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJl
dHVybiB0eXBlIGlzIGltcGxpZWQuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4g
b3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAgICA6IE1l
bW9yeVZhbHVlKGtpbmQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCkKLSAgICB7Ci0g
ICAgfQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMy
X3Qgb2Zmc2V0ID0gMCwgSGVhcFJhbmdlIHJhbmdlID0gSGVhcFJhbmdlOjp0b3AoKSwgSGVhcFJh
bmdlIGZlbmNlUmFuZ2UgPSBIZWFwUmFuZ2UoKSk7CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZv
ciBzdG9yZXMuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDog
VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikK
LSAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6
OnRvcCgpKQotICAgIHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBTdG9yZTg6Ci0g
ICAgICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOgotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFs
dWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwLCBIZWFwUmFuZ2Ug
cmFuZ2UgPSBIZWFwUmFuZ2U6OnRvcCgpLCBIZWFwUmFuZ2UgZmVuY2VSYW5nZSA9IEhlYXBSYW5n
ZSgpKTsKKyAgICAKICAgICBpbnQzMl90IG1fb2Zmc2V0IHsgMCB9OwotICAgIEhlYXBSYW5nZSBt
X3JhbmdlOworICAgIEhlYXBSYW5nZSBtX3JhbmdlIHsgSGVhcFJhbmdlOjp0b3AoKSB9OworICAg
IEhlYXBSYW5nZSBtX2ZlbmNlUmFuZ2UgeyBIZWFwUmFuZ2UoKSB9OwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXRpdmVU
cmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXRpdmVU
cmFpdHMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXRp
dmVUcmFpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0JhbmsuaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIK
KyNpbmNsdWRlICJCM1dpZHRoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IE5hdGl2ZVRyYWl0czsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgTmF0aXZlVHJhaXRzPGludDhfdD4geworICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsg
PSBHUDsKKyAgICBzdGF0aWMgY29uc3QgV2lkdGggd2lkdGggPSBXaWR0aDg7CisgICAgc3RhdGlj
IGNvbnN0IFR5cGUgdHlwZSA9IEludDMyOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZl
VHJhaXRzPHVpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgQmFuayBiYW5rID0gR1A7CisgICAg
c3RhdGljIGNvbnN0IFdpZHRoIHdpZHRoID0gV2lkdGg4OworICAgIHN0YXRpYyBjb25zdCBUeXBl
IHR5cGUgPSBJbnQzMjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVRyYWl0czxpbnQx
Nl90PiB7CisgICAgc3RhdGljIGNvbnN0IEJhbmsgYmFuayA9IEdQOworICAgIHN0YXRpYyBjb25z
dCBXaWR0aCB3aWR0aCA9IFdpZHRoMTY7CisgICAgc3RhdGljIGNvbnN0IFR5cGUgdHlwZSA9IElu
dDMyOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVHJhaXRzPHVpbnQxNl90PiB7Cisg
ICAgc3RhdGljIGNvbnN0IEJhbmsgYmFuayA9IEdQOworICAgIHN0YXRpYyBjb25zdCBXaWR0aCB3
aWR0aCA9IFdpZHRoMTY7CisgICAgc3RhdGljIGNvbnN0IFR5cGUgdHlwZSA9IEludDMyOworfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVHJhaXRzPGludDMyX3Q+IHsKKyAgICBzdGF0aWMg
Y29uc3QgQmFuayBiYW5rID0gR1A7CisgICAgc3RhdGljIGNvbnN0IFdpZHRoIHdpZHRoID0gV2lk
dGgzMjsKKyAgICBzdGF0aWMgY29uc3QgVHlwZSB0eXBlID0gSW50MzI7Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBOYXRpdmVUcmFpdHM8dWludDMyX3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgQmFu
ayBiYW5rID0gR1A7CisgICAgc3RhdGljIGNvbnN0IFdpZHRoIHdpZHRoID0gV2lkdGgzMjsKKyAg
ICBzdGF0aWMgY29uc3QgVHlwZSB0eXBlID0gSW50MzI7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBOYXRpdmVUcmFpdHM8aW50NjRfdD4geworICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBH
UDsKKyAgICBzdGF0aWMgY29uc3QgV2lkdGggd2lkdGggPSBXaWR0aDY0OworICAgIHN0YXRpYyBj
b25zdCBUeXBlIHR5cGUgPSBJbnQ2NDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVRy
YWl0czx1aW50NjRfdD4geworICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBHUDsKKyAgICBz
dGF0aWMgY29uc3QgV2lkdGggd2lkdGggPSBXaWR0aDY0OworICAgIHN0YXRpYyBjb25zdCBUeXBl
IHR5cGUgPSBJbnQ2NDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVRyYWl0czxmbG9h
dD4geworICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBGUDsKKyAgICBzdGF0aWMgY29uc3Qg
V2lkdGggd2lkdGggPSBXaWR0aDMyOworICAgIHN0YXRpYyBjb25zdCBUeXBlIHR5cGUgPSBGbG9h
dDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVRyYWl0czxkb3VibGU+IHsKKyAgICBz
dGF0aWMgY29uc3QgQmFuayBiYW5rID0gRlA7CisgICAgc3RhdGljIGNvbnN0IFdpZHRoIHdpZHRo
ID0gV2lkdGg2NDsKKyAgICBzdGF0aWMgY29uc3QgVHlwZSB0eXBlID0gRG91YmxlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHJldmlzaW9uIDIxMjk5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02OCw2ICs2OCwyMyBAQCBzdGQ6Om9wdGlvbmFsPE9wY29kZT4gaW52ZXJ0ZWRDb21wYXJl
KE9wCiAgICAgfQogfQogCitPcGNvZGUgc3RvcmVPcGNvZGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0
aCkKK3sKKyAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICBjYXNlIEdQOgorICAgICAgICBzd2l0Y2gg
KHdpZHRoKSB7CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAgcmV0dXJuIFN0b3Jl
ODsKKyAgICAgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICAgICAgcmV0dXJuIFN0b3JlMTY7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gU3RvcmU7CisgICAgICAgIH0KKyAg
ICBjYXNlIEZQOgorICAgICAgICByZXR1cm4gU3RvcmU7CisgICAgfQorfQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKIAogbmFtZXNwYWNlIFdURiB7CkBAIC0yNjMsNiArMjgwLDMzIEBAIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGMKICAgICBjYXNlIFN0b3JlOgog
ICAgICAgICBvdXQucHJpbnQoIlN0b3JlIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEF0
b21pY1dlYWtDQVM6CisgICAgICAgIG91dC5wcmludCgiQXRvbWljV2Vha0NBUyIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAgIG91dC5wcmludCgi
QXRvbWljU3Ryb25nQ0FTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEF0b21pY1hjaGdB
ZGQ6CisgICAgICAgIG91dC5wcmludCgiQXRvbWljWGNoZ0FkZCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgICAgICBvdXQucHJpbnQoIkF0b21pY1hjaGdB
bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgICAgICBv
dXQucHJpbnQoIkF0b21pY1hjaGdPciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBdG9t
aWNYY2hnU3ViOgorICAgICAgICBvdXQucHJpbnQoIkF0b21pY1hjaGdTdWIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICAgICAgb3V0LnByaW50KCJBdG9t
aWNYY2hnWG9yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEF0b21pY1hjaGc6CisgICAg
ICAgIG91dC5wcmludCgiQXRvbWljWGNoZyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBE
ZXBlbmQ6CisgICAgICAgIG91dC5wcmludCgiRGVwZW5kIik7CisgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIFdhc21BZGRyZXNzOgogICAgICAgICBvdXQucHJpbnQoIldhc21BZGRyZXNzIik7CiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5j
bHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSAiQjNXaWR0aC5oIgogI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtODIsNyArODMsNiBA
QCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIE1vZCwgLy8gQWxsIGJldHMgYXJlIG9mZiBh
cyB0byB3aGF0IHdpbGwgaGFwcGVuIHdoZW4geW91IGV4ZWN1dGUgdGhpcyBmb3IgLTJeMzElLTEg
YW5kIHglMC4KICAgICBVTW9kLAogCi0KICAgICAvLyBQb2x5bW9ycGhpYyBuZWdhdGlvbi4gTm90
ZSB0aGF0IHdlIG9ubHkgbmVlZCB0aGlzIGZvciBmbG9hdGluZyBwb2ludCwgc2luY2UgaW50ZWdl
ciBuZWdhdGlvbgogICAgIC8vIGlzIGV4YWN0bHkgbGlrZSBTdWIoMCwgeCkuIEJ1dCB0aGF0J3Mg
bm90IHRydWUgZm9yIGZsb2F0aW5nIHBvaW50LiBTdWIoMCwgMCkgaXMgMCwgd2hpbGUKICAgICAv
LyBOZWcoMCkgaXMgLTAuIEFsc28sIHdlIGNhbm9uaWNhbGl6ZSBTdWIoMCwgeCkgaW50byBOZWco
eCkgaW4gY2FzZSBvZiBpbnRlZ2Vycy4KQEAgLTE2Miw2ICsxNjIsMTA3IEBAIGVudW0gT3Bjb2Rl
IDogaW50MTZfdCB7CiAgICAgU3RvcmUxNiwKICAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMg
c3RvcmUgZm9yIEludDMyLCBJbnQ2NCwgRmxvYXQsIGFuZCBEb3VibGUuCiAgICAgU3RvcmUsCisg
ICAgCisgICAgLy8gQXRvbWljIGNvbXBhcmUgYW5kIHN3YXAgdGhhdCByZXR1cm5zIGEgYm9vbGVh
bi4gTWF5IGNob29zZSB0byBkbyBub3RoaW5nIGFuZCByZXR1cm4gZmFsc2UuIFlvdSBjYW4KKyAg
ICAvLyB1c3VhbGx5IGFzc3VtZSB0aGF0IHRoaXMgaXMgZmFzdGVyIGFuZCByZXN1bHRzIGluIGxl
c3MgY29kZSB0aGFuIEF0b21pY1N0cm9uZ0NBUywgdGhvdWdoIHRoYXQncworICAgIC8vIG5vdCBu
ZWNlc3NhcmlseSB0cnVlIG9uIEludGVsLCBpZiBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gZG9lcyBp
dHMgam9iLiBJbWFnaW5lIHRoYXQgdGhpcyBvcGNvZGUgaXMKKyAgICAvLyBhcyBpZiB5b3UgZGlk
IHRoaXMgYXRvbWljYWxseToKKyAgICAvLworICAgIC8vIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgLy8gYm9vbCBBdG9taWNXZWFrQ0FTKFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSwgVCog
cHRyKQorICAgIC8vIHsKKyAgICAvLyAgICAgaWYgKCFyYW5kKCkpCisgICAgLy8gICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIFJlYWwgd29ybGQgZXhhbXBsZSBvZiB0aGlzOiBjb250ZXh0IHN3aXRj
aCBvbiBBUk0gd2hpbGUgZG9pbmcgQ0FTLgorICAgIC8vICAgICBpZiAoKnB0ciAhPSBleHBlY3Rl
ZFZhbHVlKQorICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vICAgICAqcHRyID0g
bmV3VmFsdWU7CisgICAgLy8gICAgIHJldHVybiB0cnVlOworICAgIC8vIH0KKyAgICAvLworICAg
IC8vIE5vdGUgdGhhdCBhbGwgYXRvbWljcyBwdXQgdGhlIHBvaW50ZXIgbGFzdCB0byBiZSBjb25z
aXN0ZW50IHdpdGggaG93IGxvYWRzIGFuZCBzdG9yZXMgd29yay4gVGhpcworICAgIC8vIGlzIGEg
Z29vZnkgdHJhZGl0aW9uLCBidXQgaXQncyBoYXJtbGVzcywgYW5kIGJldHRlciB0aGFuIGJlaW5n
IGluY29uc2lzdGVudC4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB3ZWFrIENBUyBoYXMgbm8g
ZmVuY2luZyBndWFyYW50ZWVzIHdoZW4gaXQgZmFpbHMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9s
bG93aW5nCisgICAgLy8gdHJhbnNmb3JtYXRpb24gaXMgYWx3YXlzIHZhbGlkOgorICAgIC8vCisg
ICAgLy8gQmVmb3JlOgorICAgIC8vCisgICAgLy8gICAgICAgICBCcmFuY2goQXRvbWljV2Vha0NB
UyhleHBlY3RlZCwgbmV3LCBwdHIpKQorICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I3N1
Y2Nlc3MsIEVsc2U6I2ZhaWwKKyAgICAvLworICAgIC8vIEFmdGVyOgorICAgIC8vCisgICAgLy8g
ICAgICAgICBCcmFuY2goRXF1YWwoTG9hZChwdHIpLCBleHBlY3RlZCkpCisgICAgLy8gICAgICAg
U3VjY2Vzc29yczogVGhlbjojYXR0ZW1wdCwgRWxzZTojZmFpbAorICAgIC8vICAgICBCQiNhdHRl
bXB0OgorICAgIC8vICAgICAgICAgQnJhbmNoKEF0b21pY1dlYWtDQVMoZXhwZWN0ZWQsIG5ldywg
cHRyKSkKKyAgICAvLyAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiNzdWNjZXNzLCBFbHNlOiNmYWls
CisgICAgLy8KKyAgICAvLyBCb3RoIGtpbmRzIG9mIENBUyBmb3Igbm9uLWNhbm9uaWNhbCB3aWR0
aHMgKFdpZHRoOCBhbmQgV2lkdGgxNikgaWdub3JlIHRoZSBpcnJlbGV2YW50IGJpdHMgb2YgdGhl
CisgICAgLy8gaW5wdXQuCisgICAgQXRvbWljV2Vha0NBUywKKyAgICAKKyAgICAvLyBBdG9taWMg
Y29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgdGhlIG9sZCB2YWx1ZS4gRG9lcyBub3QgaGF2
ZSB0aGUgbm9uZGV0ZXJtaW5pc20gb2YgV2Vha0NBUy4KKyAgICAvLyBUaGlzIGlzIGEgYml0IG1v
cmUgY29kZSBhbmQgYSBiaXQgc2xvd2VyIGluIHNvbWUgY2FzZXMsIHRob3VnaCBub3QgYnkgYSBs
b3QuIEltYWdpbmUgdGhhdCB0aGlzCisgICAgLy8gb3Bjb2RlIGlzIGFzIGlmIHlvdSBkaWQgdGhp
cyBhdG9taWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAv
LyBUIEF0b21pY1N0cm9uZ0NBUyhUIGV4cGVjdGVkVmFsdWUsIFQgbmV3VmFsdWUsIFQqIHB0cikK
KyAgICAvLyB7CisgICAgLy8gICAgIFQgb2xkVmFsdWUgPSAqcHRyOworICAgIC8vICAgICBpZiAo
b2xkVmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZSkKKyAgICAvLyAgICAgICAgICpwdHIgPSBuZXdWYWx1
ZTsKKyAgICAvLyAgICAgcmV0dXJuIG9sZFZhbHVlCisgICAgLy8gfQorICAgIC8vCisgICAgLy8g
Tm90ZSB0aGF0IEF0b21pY1dlYWtDQVMgYW5kIEF0b21pY1N0cm9uZ0NBUyBzb3J0IG9mIGhhdmUg
dGhpcyBraW5kIG9mIGVxdWl2YWxlbmNlOgorICAgIC8vCisgICAgLy8gQXRvbWljV2Vha0NBUyhA
ZXhwLCBAbmV3LCBAcHRyKSA9PSBFcXVhbChBdG9taWNTdHJvbmdDQVMoQGV4cCwgQG5ldywgQHB0
ciksIEBleHApCisgICAgLy8KKyAgICAvLyBBc3N1bWluZyB0aGF0IHRoZSBXZWFrQ0FTIGRvZXMg
bm90IHNwdXJpb3VzbHkgZmFpbCwgb2YgY291cnNlLgorICAgIEF0b21pY1N0cm9uZ0NBUywKKyAg
ICAKKyAgICAvLyBBdG9taWNhbGx5IF9fXyBhIG1lbW9yeSBsb2NhdGlvbiBhbmQgcmV0dXJuIHRo
ZSBvbGQgdmFsdWUuIFN5bnRheDoKKyAgICAvLworICAgIC8vIEBvbGRWYWx1ZSA9IEF0b21pY1hj
aGdfX18oQG9wZXJhbmQsIEBwdHIpCisgICAgLy8KKyAgICAvLyBGb3Igbm9uLWNhbm9uaWNhbCB3
aWR0aHMgKFdpZHRoOCBhbmQgV2lkdGgxNiksIHRoZXNlIHJldHVybiBzaWduLWV4dGVuZGVkIHJl
c3VsdHMgYW5kIGlnbm9yZSB0aGUKKyAgICAvLyBpcnJlbGV2YW50IGJpdHMgb2YgdGhlaXIgaW5w
dXRzLgorICAgIEF0b21pY1hjaGdBZGQsCisgICAgQXRvbWljWGNoZ0FuZCwKKyAgICBBdG9taWNY
Y2hnT3IsCisgICAgQXRvbWljWGNoZ1N1YiwKKyAgICBBdG9taWNYY2hnWG9yLAorICAgIAorICAg
IC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgaGF2ZSBBdG9taWNYY2hnTmVnIGFuZCBBdG9taWNY
Y2hnTm90LgorICAgIAorICAgIC8vIEF0b21pY2FsbHkgZXhjaGFuZ2UgYSB2YWx1ZSB3aXRoIGEg
bWVtb3J5IGxvY2F0aW9uLiBTeW50YXg6CisgICAgLy8KKyAgICAvLyBAb2xkVmFsdWUgPSBBdG9t
aWNYY2hnKEBuZXdWYWx1ZSwgQHB0cikKKyAgICBBdG9taWNYY2hnLAorICAgIAorICAgIC8vIElu
dHJvZHVjZSBhbiBpbnZpc2libGUgZGVwZW5kZW5jeSBmb3IgYmxvY2tpbmcgbW90aW9uIG9mIGxv
YWRzIHdpdGggcmVzcGVjdCB0byBlYWNoIG90aGVyLiBTeW50YXg6CisgICAgLy8KKyAgICAvLyBA
cmVzdWx0ID0gRGVwZW5kKEBwaGFudG9tKQorICAgIC8vCisgICAgLy8gVGhpcyBpcyBldmVudHVh
bGx5IGNvZGVnZW5lcmF0ZWQgdG8gaGF2ZSBsb2NhbCBzZW1hbnRpY3MgYXMgaWYgd2UgZGlkOgor
ICAgIC8vCisgICAgLy8gQHJlc3VsdCA9ICQwCisgICAgLy8KKyAgICAvLyBCdXQgaXQgZW5zdXJl
cyB0aGF0IHRoZSB1c2VycyBvZiBAcmVzdWx0IGNhbm5vdCBleGVjdXRlIHVudGlsIEBwaGFudG9t
IGlzIGNvbXB1dGVkLgorICAgIC8vCisgICAgLy8gVGhlIGNvbXBpbGVyIGlzIG5vdCBhbGxvd2Vk
IHRvIHJlYXNvbiBhYm91dCB0aGUgZmFjdCB0aGF0IERlcGVuZCBjb2RlZ2VuZXJhdGVzIHRoaXMg
d2F5LiBBbnkga2luZAorICAgIC8vIG9mIHRyYW5zZm9ybWF0aW9uIG9yIGFuYWx5c2lzIHRoYXQg
cmVsaWVzIG9uIHRoZSBpbnNpZ2h0IHRoYXQgRGVwZW5kIGlzIHJlYWxseSB6ZXJvIGlzIHVuc291
bmQsCisgICAgLy8gYmVjYXVzZSBpdCB1bmxvY2tzIHJlb3JkZXJpbmcgb2YgdXNlcnMgb2YgQHJl
c3VsdCBhbmQgQHBoYW50b20uCisgICAgLy8KKyAgICAvLyBPbiBYODYsIHRoaXMgaXMgbG93ZXJl
ZCB0byBhIGxvYWQtbG9hZCBmZW5jZSBhbmQgQHJlc3VsdCB1c2VzIEBwaGFudG9tIGRpcmVjdGx5
LgorICAgIC8vCisgICAgLy8gT24gQVJNLCB0aGlzIGlzIGxvd2VyZWQgYXMgaWYgbGlrZToKKyAg
ICAvLworICAgIC8vIEByZXN1bHQgPSBCaXRYb3IoQHBoYW50b20sIEBwaGFudG9tKQorICAgIC8v
CisgICAgLy8gRXhjZXB0IHRoYXQgdGhlIGNvbXBpbGVyIG5ldmVyIGdldHMgYW4gb3Bwb3J0dW5p
dHkgdG8gc2ltcGxpZnkgb3V0IHRoZSBCaXRYb3IuCisgICAgRGVwZW5kLAogCiAgICAgLy8gVGhp
cyBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIGFjdHVhbCBhZGRyZXNzIG9mIGEgV2FzbSBtZW1vcnkg
b3BlcmF0aW9uLiBJdCB0YWtlcyBhbiBJbnRQdHIKICAgICAvLyBhbmQgYSBwaW5uZWQgcmVnaXN0
ZXIgdGhlbiBjb21wdXRlcyB0aGUgYXBwcm9wcmlhdGUgSW50UHRyIGFkZHJlc3MuIEZvciB0aGUg
dXNlLWNhc2Ugb2YKQEAgLTMwMSw2ICs0MDIsMTEyIEBAIGlubGluZSBib29sIGlzRGVmaW5pdGVs
eVRlcm1pbmFsKE9wY29kZSAKICAgICB9CiB9CiAKK2lubGluZSBib29sIGlzTG9hZChPcGNvZGUg
b3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBMb2FkOFo6CisgICAg
Y2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgorICAgIGNhc2UgTG9hZDE2UzoKKyAgICBj
YXNlIExvYWQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzU3RvcmUoT3Bjb2RlIG9wY29k
ZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgU3RvcmU4OgorICAgIGNhc2Ug
U3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0xv
YWRTdG9yZShPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2Fz
ZSBMb2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgorICAgIGNhc2Ug
TG9hZDE2UzoKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBTdG9yZTg6CisgICAgY2FzZSBTdG9y
ZTE2OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzQXRvbWlj
KE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIEF0b21p
Y1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgY2FzZSBBdG9taWNYY2hn
QWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAg
ICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2Ug
QXRvbWljWGNoZzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNBdG9taWNDQVMoT3Bjb2Rl
IG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NB
UzoKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wg
aXNBdG9taWNYY2hnKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2Ug
QXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hj
aGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBp
c01lbW9yeUFjY2VzcyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHJldHVybiBpc0F0b21pYyhvcGNv
ZGUpIHx8IGlzTG9hZFN0b3JlKG9wY29kZSk7Cit9CisKK2lubGluZSBPcGNvZGUgc2lnbkV4dGVu
ZE9wY29kZShXaWR0aCB3aWR0aCkKK3sKKyAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgY2FzZSBX
aWR0aDg6CisgICAgICAgIHJldHVybiBTRXh0ODsKKyAgICBjYXNlIFdpZHRoMTY6CisgICAgICAg
IHJldHVybiBTRXh0MTY7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9vcHM7CisgICAgfQorfQorCitKU19FWFBPUlRf
UFJJVkFURSBPcGNvZGUgc3RvcmVPcGNvZGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0aCk7CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAyLDYgKzIwMiw4IEBAIHZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMK
ICAgICAgICAgfQogICAgICAgICBkYXRhTG9nKCIgICAgIiwgZGVlcER1bXAoKnRoaXMsIHZhbHVl
KSwgIlxuIik7CiAgICAgfQorICAgIGlmIChoYXNRdWlya3MoKSkKKyAgICAgICAgb3V0LnByaW50
KCJIYXMgUXVpcmtzOiBUcnVlXG4iKTsKICAgICBpZiAodmFyaWFibGVzKCkuc2l6ZSgpKSB7CiAg
ICAgICAgIG91dC5wcmludCgiVmFyaWFibGVzOlxuIik7CiAgICAgICAgIGZvciAoVmFyaWFibGUq
IHZhcmlhYmxlIDogdmFyaWFibGVzKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmUuaAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNiArMTE3LDcgQEAgcHVibGlj
OgogICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChPcmlnaW4sIFR5cGUsIGludDY0X3QgdmFsdWUp
OwogICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChWYWx1ZSosIGludDY0X3QgdmFsdWUpOwogCisg
ICAgLy8gWW91J3JlIGd1YXJhbnRlZWQgdGhhdCBib3R0b20gaXMgemVyby4KICAgICBWYWx1ZSog
YWRkQm90dG9tKE9yaWdpbiwgVHlwZSk7CiAgICAgVmFsdWUqIGFkZEJvdHRvbShWYWx1ZSopOwog
CkBAIC0xOTUsNiArMTk2LDE3IEBAIHB1YmxpYzoKICAgICAvLyBhbGl2ZS4gR3JlYXQgZm9yIGNv
bXBpbGVyLWdlbmVyYXRlZCBkYXRhIHNlY3Rpb25zLCBsaWtlIHN3aXRjaCBqdW1wIHRhYmxlcyBh
bmQgY29uc3RhbnQgcG9vbHMuCiAgICAgLy8gVGhpcyByZXR1cm5zIG1lbW9yeSB0aGF0IGhhcyBi
ZWVuIHplcm8taW5pdGlhbGl6ZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWRkRGF0
YVNlY3Rpb24oc2l6ZV90KTsKKyAgICAKKyAgICAvLyBTb21lIG9wZXJhdGlvbnMgYXJlIHNwZWNp
ZmllZCBpbiBCMyBJUiB0byBiZWhhdmUgb25lIHdheSBidXQgb24gdGhpcyBnaXZlbiBDUFUgdGhl
eSBiZWhhdmUgYQorICAgIC8vIGRpZmZlcmVudCB3YXkuIFdoZW4gdHJ1ZSwgdGhvc2UgQjMgSVIg
b3BzIHN3aXRjaCB0byBiZWhhdmluZyB0aGUgQ1BVIHdheSwgYW5kIHRoZSBvcHRpbWl6ZXIgbWF5
CisgICAgLy8gc3RhcnQgdGFraW5nIGFkdmFudGFnZSBvZiBpdC4KKyAgICAvLworICAgIC8vIE9u
ZSB3YXkgdG8gdGhpbmsgb2YgaXQgaXMgbGlrZSB0aGlzLiBJbWFnaW5lIHRoYXQgeW91IGZpbmQg
dGhhdCB0aGUgY2xlYW5lc3Qgd2F5IG9mIGxvd2VyaW5nCisgICAgLy8gc29tZXRoaW5nIGluIGxv
d2VyTWFjcm9zIGlzIHRvIHVuY29uZGl0aW9uYWxseSByZXBsYWNlIG9uZSBvcGNvZGUgd2l0aCBh
bm90aGVyLiBUaGlzIGlzIGEgc2hvcnRjdXQKKyAgICAvLyB3aGVyZSB5b3UgaW5zdGVhZCBrZWVw
IHRoZSBzYW1lIG9wY29kZSwgYnV0IHJlbHkgb24gdGhlIG9wY29kZSdzIG1lYW5pbmcgY2hhbmdl
cyBvbmNlIGxvd2VyTWFjcm9zCisgICAgLy8gc2V0cyBoYXNRdWlya3MuCisgICAgYm9vbCBoYXNR
dWlya3MoKSBjb25zdCB7IHJldHVybiBtX2hhc1F1aXJrczsgfQorICAgIHZvaWQgc2V0SGFzUXVp
cmtzKGJvb2wgdmFsdWUpIHsgbV9oYXNRdWlya3MgPSB2YWx1ZTsgfQogCiAgICAgT3BhcXVlQnlw
cm9kdWN0cyYgYnlwcm9kdWN0cygpIHsgcmV0dXJuICptX2J5cHJvZHVjdHM7IH0KIApAQCAtMjUy
LDYgKzI2NCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChQcmludFN0
cmVhbSYsIE9yaWdpbik+PiBtX29yaWdpblByaW50ZXI7CiAgICAgY29uc3Qgdm9pZCogbV9mcm9u
dGVuZERhdGE7CiAgICAgUENUb09yaWdpbk1hcCBtX3BjVG9PcmlnaW5NYXA7CisgICAgYm9vbCBt
X2hhc1F1aXJrcyB7IGZhbHNlIH07CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRl
ICJCM0NvbXB1dGVEaXZpc2lvbk1hZ2ljLmgiCkBAIC02MDIsNyArNjAzLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIE5lZzoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTmVnKGNvbnN0YW50KQog
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiAtY29uc3RhbnQKQEAgLTEyOTUsNiArMTI5NiwxNiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9wcm9jLmhh
c1F1aXJrcygpKSB7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChBdG9taWNY
Y2hnX19fKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXworICAg
ICAgICAgICAgICAgIGlmIChpc0F0b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgp
KQorICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRvbWljVmFs
dWU+KCktPm9wZXJhdGlvbldpZHRoKCkgPT0gV2lkdGg4KSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIFNFeHQxNjoKQEAgLTEzNDMsNiArMTM1NCwxNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbV9wcm9jLmhhc1F1aXJrcygpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoQXRvbWljWGNoZ19fXykKKyAgICAg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEF0b21pY1hjaGdfX18KKyAgICAgICAgICAgICAgICBp
ZiAoaXNBdG9taWNYY2hnKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVlPigpLT5vcGVyYXRp
b25XaWR0aCgpID09IFdpZHRoMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJ
ZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGNhc2UgU0V4dDMyOgpAQCAtMjEwMSwyMiArMjEyMiwyNSBAQCBwcml2YXRlOgogICAg
ICAgICBBU1NFUlQobV92YWx1ZS0+bnVtQ2hpbGRyZW4oKSA+PSAyKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIExlYXZlIGl0IGFsb25lIGlmIHRoZSByaWdodCBjaGlsZCBpcyBhIGNvbnN0YW50Lgot
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgaWYg
KG1fdmFsdWUtPmNoaWxkKDEpLT5pc0NvbnN0YW50KCkKKyAgICAgICAgICAgIHx8IG1fdmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzQ29uc3RhbnQo
KSkgeworICAgICAgICBhdXRvIHN3YXAgPSBbJl0gKCkgewogICAgICAgICAgICAgc3RkOjpzd2Fw
KG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KKyAgICAgICAg
fTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNDb25zdGFudCgp
KQorICAgICAgICAgICAgcmV0dXJuIHN3YXAoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKQorICAgICAgICAgICAg
cmV0dXJuIHN3YXAoKTsKKyAgICAgICAgCiAgICAgICAgIC8vIFNvcnQgdGhlIG9wZXJhbmRzLiBU
aGlzIGlzIGFuIGltcG9ydGFudCBjYW5vbmljYWxpemF0aW9uLiBXZSB1c2UgdGhlIGluZGV4IGlu
c3RlYWQgb2YKICAgICAgICAgLy8gdGhlIGFkZHJlc3MgdG8gbWFrZSB0aGlzIGF0IGxlYXN0IHNs
aWdodGx5IGRldGVybWluaXN0aWMuCi0gICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aW5k
ZXgoKSA+IG1fdmFsdWUtPmNoaWxkKDEpLT5pbmRleCgpKSB7Ci0gICAgICAgICAgICBzdGQ6OnN3
YXAobV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pbmRleCgpID4gbV92YWx1ZS0+Y2hpbGQoMSktPmluZGV4
KCkpCisgICAgICAgICAgICByZXR1cm4gc3dhcCgpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCByZWFsbHkgYmUgYSBmb3J3YXJkIGFuYWx5c2lzLiBJbnN0ZWFkLCB3ZSB1c2Vz
IGEgYm91bmRlZC1zZWFyY2ggYmFja3dhcmRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAK
ICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisj
aW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMu
aCIKICNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgi
CkBAIC0zNDYsNiArMzQ3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJB
dCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09
IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2Uo
dmFsdWUpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBMb2FkOgpAQCAtMzUzLDYgKzM1
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRy
ZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAg
ICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBTdG9yZTg6CkBAIC0zNjIsNiArMzY1LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IElu
dDMyLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5j
aGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAg
ICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBTdG9yZToKQEAgLTM2OSw4ICszNzMsNDkgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwg
KnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBl
KCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgdmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVT
dGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5k
KCkuaXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5udW1DaGlsZHJlbigpID09IDMsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1
ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9p
bnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0
b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NB
UzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxk
cmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxk
KDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
aXNJbnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgICAgICAgICBjYXNl
IEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAg
ICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoK
KyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSgh
dmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgw
KS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlz
SW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOworICAgICAg
ICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBEZXBlbmQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
IXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5j
aGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtQWRkcmVzczoKICAgICAgICAgICAgICAg
ICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUp
KTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAo
IkF0ICIsICp2YWx1ZSkpOwpAQCAtNTM3LDYgKzU4MiwyMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZUZlbmNl
KFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpCisg
ICAgICAgICAgICBWQUxJREFURShtZW1vcnktPmFjY2Vzc0JhbmsoKSA9PSBHUCwgKCJGZW5jZSBh
dCAiLCAqbWVtb3J5KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGVBdG9taWMoVmFs
dWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IHZhbHVlLT5h
czxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgCisgICAgICAgIFZBTElEQVRFKGJlc3RUeXBlKEdQ
LCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpID09IGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgIH0KIAogICAgIHZvaWQgdmFsaWRhdGVTdGFja0FjY2VzcyhW
YWx1ZSogdmFsdWUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNw
cAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQp
CiAKICNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKyNpbmNsdWRlICJCM0F0b21pY1Zh
bHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQm90
dG9tUHJvdmlkZXIuaCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKQEAgLTUxMCw2ICs1MTEs
NyBAQCBib29sIFZhbHVlOjpyZXR1cm5zQm9vbCgpIGNvbnN0CiAgICAgY2FzZSBBYm92ZUVxdWFs
OgogICAgIGNhc2UgQmVsb3dFcXVhbDoKICAgICBjYXNlIEVxdWFsT3JVbm9yZGVyZWQ6CisgICAg
Y2FzZSBBdG9taWNXZWFrQ0FTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFBoaToK
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgc3RvcnkgaGVyZS4KQEAgLTU4OSw2
ICs1OTEsNyBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICBjYXNlIEJlbG93
RXF1YWw6CiAgICAgY2FzZSBFcXVhbE9yVW5vcmRlcmVkOgogICAgIGNhc2UgU2VsZWN0OgorICAg
IGNhc2UgRGVwZW5kOgogICAgICAgICBicmVhazsKICAgICBjYXNlIERpdjoKICAgICBjYXNlIFVE
aXY6CkBAIC02MDAsMTYgKzYwMyw0NCBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QK
ICAgICBjYXNlIExvYWQ4UzoKICAgICBjYXNlIExvYWQxNlo6CiAgICAgY2FzZSBMb2FkMTZTOgot
ICAgIGNhc2UgTG9hZDoKLSAgICAgICAgcmVzdWx0LnJlYWRzID0gYXM8TWVtb3J5VmFsdWU+KCkt
PnJhbmdlKCk7CisgICAgY2FzZSBMb2FkOiB7CisgICAgICAgIGNvbnN0IE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSBhczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5
LT5yYW5nZSgpOworICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKSB7CisgICAgICAgICAg
ICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5mZW5jZVJhbmdlKCk7CisgICAgICAgICAgICByZXN1
bHQuZmVuY2UgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5k
ZW50ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgU3RvcmU4OgogICAg
IGNhc2UgU3RvcmUxNjoKLSAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXN1bHQud3JpdGVzID0g
YXM8TWVtb3J5VmFsdWU+KCktPnJhbmdlKCk7CisgICAgY2FzZSBTdG9yZTogeworICAgICAgICBj
b25zdCBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gYXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIHJl
c3VsdC53cml0ZXMgPSBtZW1vcnktPnJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0Zl
bmNlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+ZmVuY2VSYW5nZSgp
OworICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgY2Fz
ZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21p
Y1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9y
OgorICAgIGNhc2UgQXRvbWljWGNoZzogeworICAgICAgICBjb25zdCBBdG9taWNWYWx1ZSogYXRv
bWljID0gYXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgIHJlc3VsdC5yZWFkcyA9IGF0b21pYy0+
cmFuZ2UoKSB8IGF0b21pYy0+ZmVuY2VSYW5nZSgpOworICAgICAgICByZXN1bHQud3JpdGVzID0g
YXRvbWljLT5yYW5nZSgpIHwgYXRvbWljLT5mZW5jZVJhbmdlKCk7CisgICAgICAgIGlmIChhdG9t
aWMtPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAg
ICByZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIH0K
ICAgICBjYXNlIFdhc21BZGRyZXNzOgogICAgICAgICByZXN1bHQucmVhZHNQaW5uZWQgPSB0cnVl
OwogICAgICAgICBicmVhazsKQEAgLTYxNywxOCArNjQ4LDcgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZm
ZWN0cygpIGNvbnN0CiAgICAgICAgIGNvbnN0IEZlbmNlVmFsdWUqIGZlbmNlID0gYXM8RmVuY2VW
YWx1ZT4oKTsKICAgICAgICAgcmVzdWx0LnJlYWRzID0gZmVuY2UtPnJlYWQ7CiAgICAgICAgIHJl
c3VsdC53cml0ZXMgPSBmZW5jZS0+d3JpdGU7Ci0gICAgICAgIAotICAgICAgICAvLyBQcmV2ZW50
IGtpbGxpbmcgb2YgZmVuY2VzIHRoYXQgY2xhaW0gbm90IHRvIHdyaXRlIGFueXRoaW5nLiBJdCdz
IGEgYml0IHdlaXJkIHRoYXQgd2UgdXNlCi0gICAgICAgIC8vIGxvY2FsIHN0YXRlIGFzIHRoZSB3
YXkgdG8gZG8gdGhpcywgYnV0IGl0IGhhcHBlbnMgdG8gd29yazogd2UgbXVzdCBhc3N1bWUgdGhh
dCB3ZSBjYW5ub3QKLSAgICAgICAgLy8ga2lsbCB3cml0ZXNMb2NhbFN0YXRlIHVubGVzcyB3ZSB1
bmRlcnN0YW5kcyBleGFjdGx5IHdoYXQgdGhlIGluc3RydWN0aW9uIGlzIGRvaW5nIChsaWtlCi0g
ICAgICAgIC8vIHRoZSB3YXkgdGhhdCBmaXhTU0EgdW5kZXJzdGFuZHMgU2V0L0dldCBhbmQgdGhl
IHdheSB0aGF0IHJlZHVjZVN0cmVuZ3RoIGFuZCBvdGhlcnMKLSAgICAgICAgLy8gdW5kZXJzdGFu
ZCBVcHNpbG9uKS4gVGhpcyB3b3VsZCBvbmx5IGJlY29tZSBhIHByb2JsZW0gaWYgd2UgaGFkIHNv
bWUgYW5hbHlzaXMgdGhhdCB3YXMKLSAgICAgICAgLy8gbG9va2luZyB0byB1c2UgdGhlIHdyaXRl
c0xvY2FsU3RhdGUgYml0IHRvIGludmFsaWRhdGUgYSBDU0Ugb3ZlciBsb2NhbCBzdGF0ZSBvcGVy
YXRpb25zLgotICAgICAgICAvLyBUaGVuIGEgRmVuY2Ugd291bGQgbG9vayBibG9jaywgc2F5LCB0
aGUgZWxpbWluYXRpb24gb2YgYSByZWR1bmRhbnQgR2V0LiBCdXQgaXQgbGlrZQotICAgICAgICAv
LyB0aGF0J3Mgbm90IGF0IGFsbCBob3cgb3VyIG9wdGltaXphdGlvbnMgZm9yIFNldC9HZXQvVXBz
aWxvbi9QaGkgd29yayAtIHRoZXkgZ3JvayB0aGVpcgotICAgICAgICAvLyBvcGVyYXRpb25zIGRl
ZXBseSBlbm91Z2ggdGhhdCB0aGV5IGhhdmUgbm8gbmVlZCB0byBjaGVjayB0aGlzIGJpdCAtIHNv
IHRoaXMgY2hlYXQgaXMKLSAgICAgICAgLy8gZmluZS4KLSAgICAgICAgcmVzdWx0LndyaXRlc0xv
Y2FsU3RhdGUgPSB0cnVlOworICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBDQ2FsbDoKQEAgLTY5NCw2ICs3MTQsNyBAQCBWYWx1ZUtl
eSBWYWx1ZTo6a2V5KCkgY29uc3QKICAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgQml0d2lzZUNh
c3Q6CiAgICAgY2FzZSBOZWc6CisgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAgIHJldHVybiBWYWx1
ZUtleShraW5kKCksIHR5cGUoKSwgY2hpbGQoMCkpOwogICAgIGNhc2UgQWRkOgogICAgIGNhc2Ug
U3ViOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OCw2ICs2OCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKS5vcGNvZGUoKTsgfQogICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUg
a2luZCBpcyBtZWFudCB0byBiZSBpbW11dGFibGUuIERvIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0
IHRoaXMgaXMgc2FmZS4gSXQncyBub3QKKyAgICAvLyB1c3VhbGx5IHNhZmUuCisgICAgdm9pZCBz
ZXRLaW5kVW5zYWZlbHkoS2luZCBraW5kKSB7IG1fa2luZCA9IGtpbmQ7IH0KKyAgICB2b2lkIHNl
dE9wY29kZVVuc2FmZWx5KE9wY29kZSBvcGNvZGUpIHsgbV9raW5kLnNldE9wY29kZShvcGNvZGUp
OyB9CisgICAgCiAgICAgLy8gSXQncyBnb29kIHByYWN0aWNlIHRvIG1pcnJvciBLaW5kIG1ldGhv
ZHMgaGVyZSwgc28geW91IGNhbiBzYXkgdmFsdWUtPmlzQmxhaCgpCiAgICAgLy8gaW5zdGVhZCBv
ZiB2YWx1ZS0+a2luZCgpLmlzQmxhaCgpLgogICAgIGJvb2wgaXNDaGlsbCgpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKS5pc0NoaWxsKCk7IH0KQEAgLTEwNyw2ICsxMTIsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gdmFsdWVzIHdpdGggSWRlbnRpdGllcyBvbiBib3R0b20gY29uc3RhbnRzLiBGb3IgdGhpcyBy
ZWFzb24sIHRoaXMgdGFrZXMgYSBjYWxsYmFjayB0aGF0IGlzCiAgICAgLy8gcmVzcG9uc2libGUg
Zm9yIGNyZWF0aW5nIGJvdHRvbXMuIFRoZXJlJ3MgYSB1dGlsaXR5IGZvciB0aGlzLCBzZWUgQjNC
b3R0b21Qcm92aWRlci5oLiBZb3UKICAgICAvLyBjYW4gYWxzbyBhY2Nlc3MgdGhhdCB1dGlsaXR5
IHVzaW5nIHJlcGxhY2VXaXRoQm90dG9tKEluc2VydGlvblNldCYsIHNpemVfdCkuCisgICAgLy8K
KyAgICAvLyBZb3UncmUgZ3VhcmFudGVlZCB0aGF0IGJvdHRvbSBpcyB6ZXJvLgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEJvdHRvbVByb3ZpZGVyPgogICAgIHZvaWQgcmVwbGFjZVdpdGhCb3R0b20o
Y29uc3QgQm90dG9tUHJvdmlkZXImKTsKICAgICAKQEAgLTMyMSw2ICszMjgsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIElUb0Y6CiAgICAgICAgIGNhc2UgQml0d2lzZUNhc3Q6CiAgICAgICAg
IGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIERlcGVuZDoKICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShudW1BcmdzICE9IDEpKQogICAgICAgICAgICAgICAgIGJhZEtpbmQoa2luZCwgbnVtQXJn
cyk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1dpZHRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0
aC5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dp
ZHRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMzggQEAKIAogI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgogCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVHlw
ZSBiZXN0VHlwZShCYW5rIGJhbmssIFdpZHRoIHdpZHRoKQoreworICAgIHN3aXRjaCAod2lkdGgp
IHsKKyAgICBjYXNlIFdpZHRoODoKKyAgICBjYXNlIFdpZHRoMTY6CisgICAgY2FzZSBXaWR0aDMy
OgorICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAg
IHJldHVybiBJbnQzMjsKKyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBGbG9h
dDsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gVm9pZDsKKyAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgIHN3aXRjaCAoYmFu
aykgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIEludDY0OworICAgICAg
ICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICAgICAgfQorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVm9pZDsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVm9pZDsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKIG5hbWVzcGFjZSBXVEYgewogCiB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpCMzo6V2lkdGggd2lkdGgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYg
KzYyLDE4IEBAIGlubGluZSBXaWR0aCB3aWR0aEZvclR5cGUoVHlwZSB0eXBlKQogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCitpbmxpbmUgV2lkdGggY2Fub25pY2FsV2lkdGgoV2lkdGgg
d2lkdGgpCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KFdpZHRoMzIsIHdpZHRoKTsKK30KKworaW5s
aW5lIGJvb2wgaXNDYW5vbmljYWxXaWR0aChXaWR0aCB3aWR0aCkKK3sKKyAgICByZXR1cm4gd2lk
dGggPj0gV2lkdGgzMjsKK30KKworVHlwZSBiZXN0VHlwZShCYW5rIGJhbmssIFdpZHRoIHdpZHRo
KTsKKwogaW5saW5lIFdpZHRoIGNvbnNlcnZhdGl2ZVdpZHRoKEJhbmsgYmFuaykKIHsKICAgICBy
ZXR1cm4gYmFuayA9PSBHUCA/IHBvaW50ZXJXaWR0aCgpIDogV2lkdGg2NDsKQEAgLTkzLDYgKzEw
NSwyMCBAQCBpbmxpbmUgV2lkdGggd2lkdGhGb3JCeXRlcyh1bnNpZ25lZCBieXRlCiAgICAgfQog
fQogCitpbmxpbmUgdWludDY0X3QgbWFzayhXaWR0aCB3aWR0aCkKK3sKKyAgICBzd2l0Y2ggKHdp
ZHRoKSB7CisgICAgY2FzZSBXaWR0aDg6CisgICAgICAgIHJldHVybiAweDAwMDAwMDAwMDAwMDAw
ZmZsbHU7CisgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICByZXR1cm4gMHgwMDAwMDAwMDAwMDBm
ZmZmbGx1OworICAgIGNhc2UgV2lkdGgzMjoKKyAgICAgICAgcmV0dXJuIDB4MDAwMDAwMDBmZmZm
ZmZmZmxsdTsKKyAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgIHJldHVybiAweGZmZmZmZmZmZmZm
ZmZmZmZsbHU7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogbmFtZXNw
YWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24g
MjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgogI2luY2x1
ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1ZGUgIkIzQXJndW1l
bnRSZWdWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQXRvbWljVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCiAjaW5jbHVkZSAi
QjNDb21waWxhdGlvbi5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIkIzTWF0aEV4dHJh
cy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM01vdmVDb25zdGFu
dHMuaCIKKyNpbmNsdWRlICJCM05hdGl2ZVRyYWl0cy5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJl
LmgiCiAjaW5jbHVkZSAiQjNSZWR1Y2VTdHJlbmd0aC5oIgogI2luY2x1ZGUgIkIzU2xvdEJhc2VW
YWx1ZS5oIgpAQCAtMjk3LDYgKzI5OSwyNCBAQCB2b2lkIHRlc3RMb2FkNDIoKQogICAgIENIRUNL
KGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSA9PSA0Mik7CiB9CiAKK3ZvaWQgdGVzdExvYWRBY3E0
MigpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBpbnQgeCA9IDQyOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmln
aW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgJngpLAorICAgICAgICAgICAgMCwgSGVhcFJhbmdlKDQyKSwgSGVhcFJhbmdlKDQy
KSkpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgp
KQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxkYSIpOworICAgIENIRUNL
KGludm9rZTxpbnQ+KCpjb2RlKSA9PSA0Mik7Cit9CisKIHZvaWQgdGVzdExvYWRXaXRoT2Zmc2V0
SW1wbChpbnQzMl90IG9mZnNldDY0LCBpbnQzMl90IG9mZnNldDMyKQogewogICAgIHsKQEAgLTU3
NDgsNiArNTc2OCwzNSBAQCB2b2lkIHRlc3RTdG9yZUFkZExvYWQzMihpbnQgYW1vdW50KQogICAg
IENIRUNLKHNsb3QgPT0gMzcgKyBhbW91bnQpOwogfQogCit2b2lkIHRlc3RTdG9yZVJlbEFkZExv
YWRBY3EzMihpbnQgYW1vdW50KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IHNsb3QgPSAzNzsKKyAgICBDb25z
dFB0clZhbHVlKiBzbG90UHRyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAmc2xvdCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAg
ICAgICAgcHJvYywgU3RvcmUsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgTG9hZCwgSW50
MzIsIE9yaWdpbigpLCBzbG90UHRyLCAwLCBIZWFwUmFuZ2UoNDIpLCBIZWFwUmFuZ2UoNDIpKSwK
KyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJv
YywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpLAor
ICAgICAgICBzbG90UHRyLCAwLCBIZWFwUmFuZ2UoNDIpLCBIZWFwUmFuZ2UoNDIpKTsKKyAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAwKSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGlmIChpc0FSTTY0
KCkpIHsKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsZGEiKTsKKyAgICAg
ICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzdGwiKTsKKyAgICB9CisgICAgQ0hFQ0so
IWludm9rZTxpbnQ+KCpjb2RlLCBhbW91bnQpKTsKKyAgICBDSEVDSyhzbG90ID09IDM3ICsgYW1v
dW50KTsKK30KKwogdm9pZCB0ZXN0U3RvcmVBZGRMb2FkSW1tMzIoaW50IGFtb3VudCkKIHsKICAg
ICBQcm9jZWR1cmUgcHJvYzsKQEAgLTU3OTIsNiArNTg0MSw3NCBAQCB2b2lkIHRlc3RTdG9yZUFk
ZExvYWQ4KGludCBhbW91bnQsIEIzOjpPCiAgICAgQ0hFQ0soc2xvdCA9PSAzNyArIGFtb3VudCk7
CiB9CiAKK3ZvaWQgdGVzdFN0b3JlUmVsQWRkTG9hZEFjcTgoaW50IGFtb3VudCwgQjM6Ok9wY29k
ZSBsb2FkT3Bjb2RlKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50OF90IHNsb3QgPSAzNzsKKyAgICBDb25zdFB0
clZhbHVlKiBzbG90UHRyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAmc2xvdCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAg
ICAgcHJvYywgU3RvcmU4LCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIGxvYWRPcGNvZGUs
IE9yaWdpbigpLCBzbG90UHRyLCAwLCBIZWFwUmFuZ2UoNDIpLCBIZWFwUmFuZ2UoNDIpKSwKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywg
VHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpLAorICAg
ICAgICBzbG90UHRyLCAwLCBIZWFwUmFuZ2UoNDIpLCBIZWFwUmFuZ2UoNDIpKTsKKyAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAw
KSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkp
IHsKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsZGEiKTsKKyAgICAgICAg
Y2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzdGwiKTsKKyAgICB9CisgICAgQ0hFQ0soIWlu
dm9rZTxpbnQ+KCpjb2RlLCBhbW91bnQpKTsKKyAgICBDSEVDSyhzbG90ID09IDM3ICsgYW1vdW50
KTsKK30KKwordm9pZCB0ZXN0U3RvcmVSZWxBZGRGZW5jZUxvYWRBY3E4KGludCBhbW91bnQsIEIz
OjpPcGNvZGUgbG9hZE9wY29kZSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIGludDhfdCBzbG90ID0gMzc7CisgICAg
Q29uc3RQdHJWYWx1ZSogc2xvdFB0ciA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgJnNsb3QpOworICAgIFZhbHVlKiBsb2FkZWRWYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgIHByb2MsIGxvYWRPcGNvZGUsIE9yaWdpbigp
LCBzbG90UHRyLCAwLCBIZWFwUmFuZ2UoNDIpLCBIZWFwUmFuZ2UoNDIpKTsKKyAgICBQYXRjaHBv
aW50VmFsdWUqIHBhdGNocG9pbnQgPSByb290LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihw
cm9jLCBWb2lkLCBPcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNl
dDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgaml0LnN0b3JlOChDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigweGJlZWYpLCAmc2xvdCk7CisgICAgICAgIH0pOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5m
ZW5jZSA9IHRydWU7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAg
cHJvYywgU3RvcmU4LCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICBsb2FkZWRWYWx1
ZSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAg
cHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkp
LAorICAgICAgICBzbG90UHRyLCAwLCBIZWFwUmFuZ2UoNDIpLCBIZWFwUmFuZ2UoNDIpKTsKKyAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCAwKSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGlmIChpc0FS
TTY0KCkpIHsKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsZGEiKTsKKyAg
ICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzdGwiKTsKKyAgICB9CisgICAgQ0hF
Q0soIWludm9rZTxpbnQ+KCpjb2RlLCBhbW91bnQpKTsKKyAgICBDSEVDSyhzbG90ID09IDM3ICsg
YW1vdW50KTsKK30KKwogdm9pZCB0ZXN0U3RvcmVBZGRMb2FkSW1tOChpbnQgYW1vdW50LCBCMzo6
T3Bjb2RlIGxvYWRPcGNvZGUpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC01ODM2LDYgKzU5
NTMsMzUgQEAgdm9pZCB0ZXN0U3RvcmVBZGRMb2FkMTYoaW50IGFtb3VudCwgQjM6OgogICAgIENI
RUNLKHNsb3QgPT0gMzcgKyBhbW91bnQpOwogfQogCit2b2lkIHRlc3RTdG9yZVJlbEFkZExvYWRB
Y3ExNihpbnQgYW1vdW50LCBCMzo6T3Bjb2RlIGxvYWRPcGNvZGUpCit7CisgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQx
Nl90IHNsb3QgPSAzNzsKKyAgICBDb25zdFB0clZhbHVlKiBzbG90UHRyID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmc2xvdCk7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgcHJvYywgU3RvcmUxNiwgT3JpZ2luKCksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9y
aWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAg
ICAgICAgICAgICBwcm9jLCBsb2FkT3Bjb2RlLCBPcmlnaW4oKSwgc2xvdFB0ciwgMCwgSGVhcFJh
bmdlKDQyKSwgSGVhcFJhbmdlKDQyKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpKSwKKyAgICAgICAgc2xvdFB0ciwgMCwgSGVhcFJhbmdlKDQy
KSwgSGVhcFJhbmdlKDQyKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAg
ICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOworCisgICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0
aW9uKCpjb2RlLCAibGRhIik7CisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAi
c3RsIik7CisgICAgfQorICAgIENIRUNLKCFpbnZva2U8aW50PigqY29kZSwgYW1vdW50KSk7Cisg
ICAgQ0hFQ0soc2xvdCA9PSAzNyArIGFtb3VudCk7Cit9CisKIHZvaWQgdGVzdFN0b3JlQWRkTG9h
ZEltbTE2KGludCBhbW91bnQsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSkKIHsKICAgICBQcm9jZWR1
cmUgcHJvYzsKQEAgLTU4NzgsNiArNjAyNCwzMyBAQCB2b2lkIHRlc3RTdG9yZUFkZExvYWQ2NChp
bnQgYW1vdW50KQogICAgIENIRUNLKHNsb3QgPT0gMzcwMDAwMDAwMDBsbCArIGFtb3VudCk7CiB9
CiAKK3ZvaWQgdGVzdFN0b3JlUmVsQWRkTG9hZEFjcTY0KGludCBhbW91bnQpCit7CisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBpbnQ2NF90IHNsb3QgPSAzNzAwMDAwMDAwMGxsOworICAgIENvbnN0UHRyVmFsdWUqIHNsb3RQ
dHIgPSByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZzbG90
KTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICBwcm9jLCBTdG9y
ZSwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksIHNs
b3RQdHIsIDAsIEhlYXBSYW5nZSg0MiksIEhlYXBSYW5nZSg0MikpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApKSwKKyAgICAgICAgc2xvdFB0ciwgMCwgSGVhcFJhbmdlKDQyKSwgSGVhcFJh
bmdlKDQyKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgMCkpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2Rl
LCAibGRhIik7CisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAic3RsIik7Cisg
ICAgfQorICAgIENIRUNLKCFpbnZva2U8aW50PigqY29kZSwgYW1vdW50KSk7CisgICAgQ0hFQ0so
c2xvdCA9PSAzNzAwMDAwMDAwMGxsICsgYW1vdW50KTsKK30KKwogdm9pZCB0ZXN0U3RvcmVBZGRM
b2FkSW1tNjQoaW50NjRfdCBhbW91bnQpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0xMzc5
MSw3ICsxMzk2NCw3IEBAIHZvaWQgdGVzdFRyYXBwaW5nU3RvcmVFbGltaW5hdGlvbigpCiAgICAg
Y29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpOwogICAgIHVuc2lnbmVkIHN0b3JlQ291bnQgPSAwOwog
ICAgIGZvciAoVmFsdWUqIHZhbHVlIDogcHJvYy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoTWVt
b3J5VmFsdWU6OmlzU3RvcmUodmFsdWUtPm9wY29kZSgpKSkKKyAgICAgICAgaWYgKGlzU3RvcmUo
dmFsdWUtPm9wY29kZSgpKSkKICAgICAgICAgICAgIHN0b3JlQ291bnQrKzsKICAgICB9CiAgICAg
Q0hFQ0tfRVEoc3RvcmVDb3VudCwgMnUpOwpAQCAtMTQyNzcsNiArMTQ0NTAsNDgxIEBAIHZvaWQg
dGVzdE9wdGltaXplTWF0ZXJpYWxpemF0aW9uKCkKICAgICBDSEVDSyhmb3VuZCk7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRlc3RBdG9taWNXZWFrQ0FTKCkKK3sKKyAgICBUeXBl
IHR5cGUgPSBOYXRpdmVUcmFpdHM8VD46OnR5cGU7CisgICAgV2lkdGggd2lkdGggPSBOYXRpdmVU
cmFpdHM8VD46OndpZHRoOworICAgIAorICAgIGF1dG8gY2hlY2tNeURpc2Fzc2VtYmx5ID0gWyZd
IChDb21waWxhdGlvbiYgY29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAg
ICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKGNvbXBpbGF0aW9uLCAibG9jayIpOworICAg
ICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oY29tcGlsYXRpb24sICJjbXB4Y2hnIik7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGVja0Rpc2Fzc2VtYmx5KAorICAgICAgICAg
ICAgICAgIGNvbXBpbGF0aW9uLAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgY2hhciogZGlz
YXNzZW1ibHkpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHN0cnN0cihk
aXNhc3NlbWJseSwgImxkeCIpIHx8IHN0cnN0cihkaXNhc3NlbWJseSwgImxkYXgiKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICYmIChzdHJzdHIoZGlzYXNzZW1ibHksICJzdHgiKSB8fCBzdHJz
dHIoZGlzYXNzZW1ibHksICJzdGx4IikpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgIkV4cGVjdGVkIHRvIGZpbmQgbGR4L2xkYXggYW5kIHN0eC9zdGx4IGJ1dCBkaWRuJ3Qh
Iik7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAg
IEJhc2ljQmxvY2sqIHJlbG9vcCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9j
ayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlKiBwdHIg
PSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
SnVtcCwgT3JpZ2luKCkpOworICAgICAgICByb290LT5zZXRTdWNjZXNzb3JzKHJlbG9vcCk7Cisg
ICAgICAgIAorICAgICAgICByZWxvb3AtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBw
cm9jLCBCcmFuY2gsIE9yaWdpbigpLAorICAgICAgICAgICAgcmVsb29wLT5hcHBlbmROZXc8QXRv
bWljVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEF0b21pY1dlYWtDQVMsIE9yaWdpbigp
LCB3aWR0aCwKKyAgICAgICAgICAgICAgICByZWxvb3AtPmFwcGVuZEludENvbnN0YW50KHByb2Ms
IE9yaWdpbigpLCB0eXBlLCA0MiksCisgICAgICAgICAgICAgICAgcmVsb29wLT5hcHBlbmRJbnRD
b25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgMHhiZWVmKSwKKyAgICAgICAgICAgICAgICBw
dHIpKTsKKyAgICAgICAgcmVsb29wLT5zZXRTdWNjZXNzb3JzKGRvbmUsIHJlbG9vcCk7CisgICAg
ICAgIAorICAgICAgICBkb25lLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2lu
KCkpOworICAgICAgICAKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAg
ICAgY2hlY2tNeURpc2Fzc2VtYmx5KCpjb2RlKTsKKyAgICAgICAgVCB2YWx1ZVsyXTsKKyAgICAg
ICAgdmFsdWVbMF0gPSA0MjsKKyAgICAgICAgdmFsdWVbMV0gPSAxMzsKKyAgICAgICAgaW52b2tl
PHZvaWQ+KCpjb2RlLCB2YWx1ZSk7CisgICAgICAgIENIRUNLX0VRKHZhbHVlWzBdLCBzdGF0aWNf
Y2FzdDxUPigweGJlZWYpKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWVbMV0sIDEzKTsKKyAgICB9
CisgICAgCisgICAgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogcmVsb29wID0g
cHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9j
aygpOworICAgICAgICAKKyAgICAgICAgVmFsdWUqIHB0ciA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBKdW1wLCBPcmlnaW4oKSk7CisgICAg
ICAgIHJvb3QtPnNldFN1Y2Nlc3NvcnMocmVsb29wKTsKKyAgICAgICAgCisgICAgICAgIHJlbG9v
cC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCks
CisgICAgICAgICAgICByZWxvb3AtPmFwcGVuZE5ldzxBdG9taWNWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgcHJvYywgQXRvbWljV2Vha0NBUywgT3JpZ2luKCksIHdpZHRoLAorICAgICAgICAgICAg
ICAgIHJlbG9vcC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSwK
KyAgICAgICAgICAgICAgICByZWxvb3AtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigp
LCB0eXBlLCAweGJlZWYpLAorICAgICAgICAgICAgICAgIHB0ciwgMCwgSGVhcFJhbmdlKDQyKSwg
SGVhcFJhbmdlKCkpKTsKKyAgICAgICAgcmVsb29wLT5zZXRTdWNjZXNzb3JzKGRvbmUsIHJlbG9v
cCk7CisgICAgICAgIAorICAgICAgICBkb25lLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCkpOworICAgICAgICAKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICAgICAgY2hlY2tNeURpc2Fzc2VtYmx5KCpjb2RlKTsKKyAgICAgICAgVCB2YWx1ZVsy
XTsKKyAgICAgICAgdmFsdWVbMF0gPSA0MjsKKyAgICAgICAgdmFsdWVbMV0gPSAxMzsKKyAgICAg
ICAgaW52b2tlPHZvaWQ+KCpjb2RlLCB2YWx1ZSk7CisgICAgICAgIENIRUNLX0VRKHZhbHVlWzBd
LCBzdGF0aWNfY2FzdDxUPigweGJlZWYpKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWVbMV0sIDEz
KTsKKyAgICB9CisgICAgCisgICAgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayog
c3VjYyA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogZmFpbCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlKiBwdHIgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBC
cmFuY2gsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEF0b21pY1ZhbHVl
PigKKyAgICAgICAgICAgICAgICBwcm9jLCBBdG9taWNXZWFrQ0FTLCBPcmlnaW4oKSwgd2lkdGgs
CisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCks
IHR5cGUsIDQyKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9j
LCBPcmlnaW4oKSwgdHlwZSwgMHhiZWVmKSwKKyAgICAgICAgICAgICAgICBwdHIpKTsKKyAgICAg
ICAgcm9vdC0+c2V0U3VjY2Vzc29ycyhzdWNjLCBmYWlsKTsKKyAgICAgICAgCisgICAgICAgIHN1
Y2MtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBzdG9yZU9wY29k
ZShHUCwgd2lkdGgpLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHN1Y2MtPmFwcGVuZEludENvbnN0
YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCAxMDApLAorICAgICAgICAgICAgcHRyKTsKKyAgICAg
ICAgc3VjYy0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKKyAgICAg
ICAgCisgICAgICAgIGZhaWwtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4o
KSk7CisgICAgICAgIAorICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAg
ICBjaGVja015RGlzYXNzZW1ibHkoKmNvZGUpOworICAgICAgICBUIHZhbHVlWzJdOworICAgICAg
ICB2YWx1ZVswXSA9IDQyOworICAgICAgICB2YWx1ZVsxXSA9IDEzOworICAgICAgICB3aGlsZSAo
dmFsdWVbMF0gPT0gNDIpCisgICAgICAgICAgICBpbnZva2U8dm9pZD4oKmNvZGUsIHZhbHVlKTsK
KyAgICAgICAgQ0hFQ0tfRVEodmFsdWVbMF0sIHN0YXRpY19jYXN0PFQ+KDEwMCkpOworICAgICAg
ICBDSEVDS19FUSh2YWx1ZVsxXSwgMTMpOworICAgICAgICB2YWx1ZVswXSA9IHN0YXRpY19jYXN0
PFQ+KDMwMCk7CisgICAgICAgIGludm9rZTx2b2lkPigqY29kZSwgdmFsdWUpOworICAgICAgICBD
SEVDS19FUSh2YWx1ZVswXSwgc3RhdGljX2Nhc3Q8VD4oMzAwKSk7CisgICAgICAgIENIRUNLX0VR
KHZhbHVlWzFdLCAxMyk7CisgICAgfQorICAgIAorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAg
IEJhc2ljQmxvY2sqIHN1Y2MgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sq
IGZhaWwgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIAorICAgICAgICBWYWx1ZSogcHRyID0g
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICAgICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgRXF1YWwsIE9yaWdpbigpLAorICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBdG9taWNWYWx1ZT4oCisgICAgICAgICAgICAgICAg
ICAgIHByb2MsIEF0b21pY1dlYWtDQVMsIE9yaWdpbigpLCB3aWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSwK
KyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2lu
KCksIHR5cGUsIDB4YmVlZiksCisgICAgICAgICAgICAgICAgICAgIHB0ciksCisgICAgICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCAwKSkp
OworICAgICAgICByb290LT5zZXRTdWNjZXNzb3JzKGZhaWwsIHN1Y2MpOworICAgICAgICAKKyAg
ICAgICAgc3VjYy0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIHN0
b3JlT3Bjb2RlKEdQLCB3aWR0aCksIE9yaWdpbigpLAorICAgICAgICAgICAgc3VjYy0+YXBwZW5k
SW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDEwMCksCisgICAgICAgICAgICBwdHIp
OworICAgICAgICBzdWNjLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkp
OworICAgICAgICAKKyAgICAgICAgZmFpbC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4s
IE9yaWdpbigpKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgICAgIGNoZWNrTXlEaXNhc3NlbWJseSgqY29kZSk7CisgICAgICAgIFQgdmFsdWVbMl07
CisgICAgICAgIHZhbHVlWzBdID0gNDI7CisgICAgICAgIHZhbHVlWzFdID0gMTM7CisgICAgICAg
IHdoaWxlICh2YWx1ZVswXSA9PSA0MikKKyAgICAgICAgICAgIGludm9rZTx2b2lkPigqY29kZSwg
dmFsdWUpOworICAgICAgICBDSEVDS19FUSh2YWx1ZVswXSwgc3RhdGljX2Nhc3Q8VD4oMTAwKSk7
CisgICAgICAgIENIRUNLX0VRKHZhbHVlWzFdLCAxMyk7CisgICAgICAgIHZhbHVlWzBdID0gc3Rh
dGljX2Nhc3Q8VD4oMzAwKTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpjb2RlLCB2YWx1ZSk7Cisg
ICAgICAgIENIRUNLX0VRKHZhbHVlWzBdLCBzdGF0aWNfY2FzdDxUPigzMDApKTsKKyAgICAgICAg
Q0hFQ0tfRVEodmFsdWVbMV0sIDEzKTsKKyAgICB9CisgICAgCisgICAgeworICAgICAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXRvbWljVmFsdWU+KAor
ICAgICAgICAgICAgICAgIHByb2MsIEF0b21pY1dlYWtDQVMsIE9yaWdpbigpLCB3aWR0aCwKKyAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlw
ZSwgNDIpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9y
aWdpbigpLCB0eXBlLCAweGJlZWYpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkp
OworICAgICAgICAKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAg
Y2hlY2tNeURpc2Fzc2VtYmx5KCpjb2RlKTsKKyAgICAgICAgVCB2YWx1ZVsyXTsKKyAgICAgICAg
dmFsdWVbMF0gPSA0MjsKKyAgICAgICAgdmFsdWVbMV0gPSAxMzsKKyAgICAgICAgd2hpbGUgKCFp
bnZva2U8Ym9vbD4oKmNvZGUsIHZhbHVlKSkgeyB9CisgICAgICAgIENIRUNLX0VRKHZhbHVlWzBd
LCBzdGF0aWNfY2FzdDxUPigweGJlZWYpKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWVbMV0sIDEz
KTsKKyAgICAgICAgCisgICAgICAgIHZhbHVlWzBdID0gc3RhdGljX2Nhc3Q8VD4oMzAwKTsKKyAg
ICAgICAgQ0hFQ0soIWludm9rZTxib29sPigqY29kZSwgdmFsdWUpKTsKKyAgICAgICAgQ0hFQ0tf
RVEodmFsdWVbMF0sIHN0YXRpY19jYXN0PFQ+KDMwMCkpOworICAgICAgICBDSEVDS19FUSh2YWx1
ZVsxXSwgMTMpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgdGVzdEF0
b21pY1N0cm9uZ0NBUygpCit7CisgICAgVHlwZSB0eXBlID0gTmF0aXZlVHJhaXRzPFQ+Ojp0eXBl
OworICAgIFdpZHRoIHdpZHRoID0gTmF0aXZlVHJhaXRzPFQ+Ojp3aWR0aDsKKyAgICAKKyAgICBh
dXRvIGNoZWNrTXlEaXNhc3NlbWJseSA9IFsmXSAoQ29tcGlsYXRpb24mIGNvbXBpbGF0aW9uKSB7
CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bihjb21waWxhdGlvbiwgImxvY2siKTsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9u
KGNvbXBpbGF0aW9uLCAiY21weGNoZyIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Y2hlY2tEaXNhc3NlbWJseSgKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbiwKKyAgICAgICAg
ICAgICAgICBbJl0gKGNvbnN0IGNoYXIqIGRpc2Fzc2VtYmx5KSAtPiBib29sIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIChzdHJzdHIoZGlzYXNzZW1ibHksICJsZHgiKSB8fCBzdHJzdHIo
ZGlzYXNzZW1ibHksICJsZGF4IikpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoc3Ryc3Ry
KGRpc2Fzc2VtYmx5LCAic3R4IikgfHwgc3Ryc3RyKGRpc2Fzc2VtYmx5LCAic3RseCIpKTsKKyAg
ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJFeHBlY3RlZCB0byBmaW5kIGxkeC9s
ZGF4IGFuZCBzdHgvc3RseCBidXQgZGlkbid0ISIpOworICAgICAgICB9CisgICAgfTsKKyAgICAK
KyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjID0gcHJvYy5hZGRC
bG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBmYWlsID0gcHJvYy5hZGRCbG9jaygpOworICAg
ICAgICAKKyAgICAgICAgVmFsdWUqIHB0ciA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCks
CisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHBy
b2MsIEVxdWFsLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXRv
bWljVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBBdG9taWNTdHJvbmdDQVMsIE9y
aWdpbigpLCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3Rh
bnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDB4YmVlZiksCisgICAgICAg
ICAgICAgICAgICAgIHB0ciksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3Rh
bnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSkpOworICAgICAgICByb290LT5zZXRTdWNjZXNz
b3JzKHN1Y2MsIGZhaWwpOworICAgICAgICAKKyAgICAgICAgc3VjYy0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIHN0b3JlT3Bjb2RlKEdQLCB3aWR0aCksIE9yaWdp
bigpLAorICAgICAgICAgICAgc3VjYy0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCks
IHR5cGUsIDEwMCksCisgICAgICAgICAgICBwdHIpOworICAgICAgICBzdWNjLT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOworICAgICAgICAKKyAgICAgICAgZmFpbC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKKyAgICAgICAgCisgICAg
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGNoZWNrTXlEaXNhc3NlbWJs
eSgqY29kZSk7CisgICAgICAgIFQgdmFsdWVbMl07CisgICAgICAgIHZhbHVlWzBdID0gNDI7Cisg
ICAgICAgIHZhbHVlWzFdID0gMTM7CisgICAgICAgIGludm9rZTx2b2lkPigqY29kZSwgdmFsdWUp
OworICAgICAgICBDSEVDS19FUSh2YWx1ZVswXSwgc3RhdGljX2Nhc3Q8VD4oMTAwKSk7CisgICAg
ICAgIENIRUNLX0VRKHZhbHVlWzFdLCAxMyk7CisgICAgICAgIHZhbHVlWzBdID0gc3RhdGljX2Nh
c3Q8VD4oMzAwKTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpjb2RlLCB2YWx1ZSk7CisgICAgICAg
IENIRUNLX0VRKHZhbHVlWzBdLCBzdGF0aWNfY2FzdDxUPigzMDApKTsKKyAgICAgICAgQ0hFQ0tf
RVEodmFsdWVbMV0sIDEzKTsKKyAgICB9CisgICAgCisgICAgeworICAgICAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAg
ICAgQmFzaWNCbG9jayogc3VjYyA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9j
ayogZmFpbCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlKiBwdHIg
PSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgICAgICBwcm9jLCBCcmFuY2gsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBOb3RFcXVhbCwgT3JpZ2luKCksCisg
ICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEF0b21pY1ZhbHVlPigKKyAgICAgICAgICAg
ICAgICAgICAgcHJvYywgQXRvbWljU3Ryb25nQ0FTLCBPcmlnaW4oKSwgd2lkdGgsCisgICAgICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBl
LCA0MiksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2Ms
IE9yaWdpbigpLCB0eXBlLCAweGJlZWYpLAorICAgICAgICAgICAgICAgICAgICBwdHIpLAorICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBl
LCA0MikpKTsKKyAgICAgICAgcm9vdC0+c2V0U3VjY2Vzc29ycyhmYWlsLCBzdWNjKTsKKyAgICAg
ICAgCisgICAgICAgIHN1Y2MtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICBw
cm9jLCBzdG9yZU9wY29kZShHUCwgd2lkdGgpLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHN1Y2Mt
PmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCAxMDApLAorICAgICAgICAg
ICAgcHRyKTsKKyAgICAgICAgc3VjYy0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9y
aWdpbigpKTsKKyAgICAgICAgCisgICAgICAgIGZhaWwtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSk7CisgICAgICAgIAorICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworICAgICAgICBjaGVja015RGlzYXNzZW1ibHkoKmNvZGUpOworICAgICAgICBUIHZh
bHVlWzJdOworICAgICAgICB2YWx1ZVswXSA9IDQyOworICAgICAgICB2YWx1ZVsxXSA9IDEzOwor
ICAgICAgICBpbnZva2U8dm9pZD4oKmNvZGUsIHZhbHVlKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFs
dWVbMF0sIHN0YXRpY19jYXN0PFQ+KDEwMCkpOworICAgICAgICBDSEVDS19FUSh2YWx1ZVsxXSwg
MTMpOworICAgICAgICB2YWx1ZVswXSA9IHN0YXRpY19jYXN0PFQ+KDMwMCk7CisgICAgICAgIGlu
dm9rZTx2b2lkPigqY29kZSwgdmFsdWUpOworICAgICAgICBDSEVDS19FUSh2YWx1ZVswXSwgc3Rh
dGljX2Nhc3Q8VD4oMzAwKSk7CisgICAgICAgIENIRUNLX0VRKHZhbHVlWzFdLCAxMyk7CisgICAg
fQorICAgIAorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEF0b21pY1ZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBBdG9taWNT
dHJvbmdDQVMsIE9yaWdpbigpLCB3aWR0aCwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJ
bnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIpLAorICAgICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCAweGJlZWYpLAorICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOworICAgICAgICAKKyAgICAgICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgY2hlY2tNeURpc2Fzc2VtYmx5KCpjb2RlKTsK
KyAgICAgICAgVCB2YWx1ZVsyXTsKKyAgICAgICAgdmFsdWVbMF0gPSA0MjsKKyAgICAgICAgdmFs
dWVbMV0gPSAxMzsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPFQ+KCpjb2RlLCB2YWx1ZSksIDQy
KTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWVbMF0sIHN0YXRpY19jYXN0PFQ+KDB4YmVlZikpOwor
ICAgICAgICBDSEVDS19FUSh2YWx1ZVsxXSwgMTMpOworICAgICAgICB2YWx1ZVswXSA9IHN0YXRp
Y19jYXN0PFQ+KDMwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxUPigqY29kZSwgdmFsdWUp
LCBzdGF0aWNfY2FzdDxUPigzMDApKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWVbMF0sIHN0YXRp
Y19jYXN0PFQ+KDMwMCkpOworICAgICAgICBDSEVDS19FUSh2YWx1ZVsxXSwgMTMpOworICAgIH0K
KyAgICAKKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgRXF1YWwsIE9yaWdpbigp
LAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBdG9taWNWYWx1ZT4oCisgICAgICAg
ICAgICAgICAgICAgIHByb2MsIEF0b21pY1N0cm9uZ0NBUywgT3JpZ2luKCksIHdpZHRoLAorICAg
ICAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwg
dHlwZSwgNDIpLAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChw
cm9jLCBPcmlnaW4oKSwgdHlwZSwgMHhiZWVmKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9j
LCBPcmlnaW4oKSwgdHlwZSwgNDIpKSk7CisgICAgICAgIAorICAgICAgICBhdXRvIGNvZGUgPSBj
b21waWxlKHByb2MpOworICAgICAgICBjaGVja015RGlzYXNzZW1ibHkoKmNvZGUpOworICAgICAg
ICBUIHZhbHVlWzJdOworICAgICAgICB2YWx1ZVswXSA9IDQyOworICAgICAgICB2YWx1ZVsxXSA9
IDEzOworICAgICAgICBDSEVDSyhpbnZva2U8Ym9vbD4oKmNvZGUsIHZhbHVlKSk7CisgICAgICAg
IENIRUNLX0VRKHZhbHVlWzBdLCBzdGF0aWNfY2FzdDxUPigweGJlZWYpKTsKKyAgICAgICAgQ0hF
Q0tfRVEodmFsdWVbMV0sIDEzKTsKKyAgICAgICAgdmFsdWVbMF0gPSBzdGF0aWNfY2FzdDxUPigz
MDApOworICAgICAgICBDSEVDSyghaW52b2tlPGJvb2w+KCpjb2RlLCB2YWx1ZSkpOworICAgICAg
ICBDSEVDS19FUSh2YWx1ZVswXSwgc3RhdGljX2Nhc3Q8VD4oMzAwKSk7CisgICAgICAgIENIRUNL
X0VRKHZhbHVlWzFdLCAxMyk7CisgICAgfQorICAgIAorICAgIHsKKyAgICAgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
ICAgICBwcm9jLCBFcXVhbCwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgTm90RXF1YWwsIE9yaWdpbigp
LAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXRvbWljVmFsdWU+KAorICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvYywgQXRvbWljU3Ryb25nQ0FTLCBPcmlnaW4oKSwgd2lk
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9j
LCBPcmlnaW4oKSwgdHlwZSwgNDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDB4YmVlZiksCisgICAgICAgICAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAorICAgICAgICAgICAgICAgICAgICByb290
LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIpKSwKKyAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkp
KTsKKyAgICAgICAgICAgIAorICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAg
ICAgICBjaGVja015RGlzYXNzZW1ibHkoKmNvZGUpOworICAgICAgICBUIHZhbHVlWzJdOworICAg
ICAgICB2YWx1ZVswXSA9IDQyOworICAgICAgICB2YWx1ZVsxXSA9IDEzOworICAgICAgICBDSEVD
SyhpbnZva2U8Ym9vbD4oKmNvZGUsIHZhbHVlKSk7CisgICAgICAgIENIRUNLX0VRKHZhbHVlWzBd
LCBzdGF0aWNfY2FzdDxUPigweGJlZWYpKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWVbMV0sIDEz
KTsKKyAgICAgICAgdmFsdWVbMF0gPSBzdGF0aWNfY2FzdDxUPigzMDApOworICAgICAgICBDSEVD
SyghaW52b2tlPGJvb2w+KCpjb2RlLCAmdmFsdWUpKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWVb
MF0sIHN0YXRpY19jYXN0PFQ+KDMwMCkpOworICAgICAgICBDSEVDS19FUSh2YWx1ZVsxXSwgMTMp
OworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgdGVzdEF0b21pY1hjaGco
QjM6Ok9wY29kZSBvcGNvZGUpCit7CisgICAgVHlwZSB0eXBlID0gTmF0aXZlVHJhaXRzPFQ+Ojp0
eXBlOworICAgIFdpZHRoIHdpZHRoID0gTmF0aXZlVHJhaXRzPFQ+Ojp3aWR0aDsKKyAgICAKKyAg
ICBhdXRvIGRvVGhlTWF0aCA9IFsmXSAoVCYgbWVtb3J5LCBUIG9wZXJhbmQpIC0+IFQgeworICAg
ICAgICBUIG9sZFZhbHVlID0gbWVtb3J5OworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAg
ICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgICAgICAgICBtZW1vcnkgKz0gb3BlcmFuZDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEF0b21pY1hjaGdBbmQ6CisgICAgICAg
ICAgICBtZW1vcnkgJj0gb3BlcmFuZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEF0b21pY1hjaGdPcjoKKyAgICAgICAgICAgIG1lbW9yeSB8PSBvcGVyYW5kOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAgICAgICAgIG1lbW9y
eSAtPSBvcGVyYW5kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXRvbWljWGNo
Z1hvcjoKKyAgICAgICAgICAgIG1lbW9yeSBePSBvcGVyYW5kOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgICAgIG1lbW9yeSA9IG9wZXJhbmQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9sZFZh
bHVlOworICAgIH07CisgICAgCisgICAgYXV0byBvbGRWYWx1ZSA9IFsmXSAoVCBtZW1vcnksIFQg
b3BlcmFuZCkgLT4gVCB7CisgICAgICAgIHJldHVybiBkb1RoZU1hdGgobWVtb3J5LCBvcGVyYW5k
KTsKKyAgICB9OworICAgIAorICAgIGF1dG8gbmV3VmFsdWUgPSBbJl0gKFQgbWVtb3J5LCBUIG9w
ZXJhbmQpIC0+IFQgeworICAgICAgICBkb1RoZU1hdGgobWVtb3J5LCBvcGVyYW5kKTsKKyAgICAg
ICAgcmV0dXJuIG1lbW9yeTsKKyAgICB9OworICAgIAorICAgIGF1dG8gY2hlY2tNeURpc2Fzc2Vt
Ymx5ID0gWyZdIChDb21waWxhdGlvbiYgY29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKGlzWDg2
KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbihjb21waWxhdGlvbiwgImxvY2si
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjaGVja0Rpc2Fzc2VtYmx5KAorICAgICAg
ICAgICAgICAgIGNvbXBpbGF0aW9uLAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgY2hhciog
ZGlzYXNzZW1ibHkpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHN0cnN0
cihkaXNhc3NlbWJseSwgImxkeCIpIHx8IHN0cnN0cihkaXNhc3NlbWJseSwgImxkYXgiKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICYmIChzdHJzdHIoZGlzYXNzZW1ibHksICJzdHgiKSB8fCBz
dHJzdHIoZGlzYXNzZW1ibHksICJzdGx4IikpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgIkV4cGVjdGVkIHRvIGZpbmQgbGR4L2xkYXggYW5kIHN0eC9zdGx4IGJ1dCBkaWRu
J3QhIik7IAorICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICB7CisgICAgICAgIFByb2NlZHVy
ZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBdG9taWNWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgcHJvYywgb3Bjb2RlLCBPcmlnaW4oKSwgd2lkdGgsCisgICAgICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSwKKyAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsKKyAgICAKKyAgICAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgY2hlY2tNeURpc2Fzc2VtYmx5KCpjb2RlKTsKKyAg
ICAgICAgVCB2YWx1ZVsyXTsKKyAgICAgICAgdmFsdWVbMF0gPSA1OworICAgICAgICB2YWx1ZVsx
XSA9IDEwMDsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPFQ+KCpjb2RlLCB2YWx1ZSksIG9sZFZh
bHVlKDUsIDQyKSk7CisgICAgICAgIENIRUNLX0VRKHZhbHVlWzBdLCBuZXdWYWx1ZSg1LCA0Mikp
OworICAgICAgICBDSEVDS19FUSh2YWx1ZVsxXSwgMTAwKTsKKyAgICB9CisgICAgCisgICAgewor
ICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEF0b21pY1ZhbHVlPigKKyAgICAg
ICAgICAgIHByb2MsIG9wY29kZSwgT3JpZ2luKCksIHdpZHRoLAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSk7CisgICAgCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisgICAgICAgIGNoZWNrTXlEaXNhc3NlbWJseSgqY29kZSk7CisgICAgICAgIFQgdmFsdWVb
Ml07CisgICAgICAgIHZhbHVlWzBdID0gNTsKKyAgICAgICAgdmFsdWVbMV0gPSAxMDA7CisgICAg
ICAgIGludm9rZTxUPigqY29kZSwgdmFsdWUpOworICAgICAgICBDSEVDS19FUSh2YWx1ZVswXSwg
bmV3VmFsdWUoNSwgNDIpKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWVbMV0sIDEwMCk7CisgICAg
fQorfQorCiB2b2lkIHRlc3RXYXNtQm91bmRzQ2hlY2sodW5zaWduZWQgb2Zmc2V0KQogewogICAg
IFByb2NlZHVyZSBwcm9jOwpAQCAtMTQzNzAsNiArMTUwMTgsMTMgQEAgZG91YmxlIG5lZ2F0aXZl
WmVybygpCiAgICAgcmV0dXJuIC16ZXJvKCk7CiB9CiAKKyNkZWZpbmUgUlVOX05PVyh0ZXN0KSBk
byB7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3Qp
KSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YUxvZygjdGVzdCAiLi4uXG4iKTsgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgdGVzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgZGF0YUxvZygjdGVzdCAiOiBPSyFcbiIpOyAgICAgICAgICAgICAgIFwKKyAg
ICB9IHdoaWxlIChmYWxzZSkKICNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
QEAgLTE0NDIxLDEyICsxNTA3NiwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAg
ICAgICAgIHJldHVybiAhZmlsdGVyIHx8ICEhc3RyY2FzZXN0cih0ZXN0TmFtZSwgZmlsdGVyKTsK
ICAgICB9OwogCi0gICAgLy8gV2UgcnVuIHRoaXMgdGVzdCBmaXJzdCBiZWNhdXNlIGl0IGZpZGRs
ZXMgd2l0aCBzb21lCi0gICAgLy8gSlNDIG9wdGlvbnMuCi0gICAgdGVzdFRlcm1pbmFsUGF0Y2hw
b2ludFRoYXROZWVkc1RvQmVTcGlsbGVkMigpOworICAgIFJVTl9OT1codGVzdFRlcm1pbmFsUGF0
Y2hwb2ludFRoYXROZWVkc1RvQmVTcGlsbGVkMigpKTsKIAogICAgIFJVTih0ZXN0NDIoKSk7CiAg
ICAgUlVOKHRlc3RMb2FkNDIoKSk7CisgICAgUlVOKHRlc3RMb2FkQWNxNDIoKSk7CiAgICAgUlVO
KHRlc3RMb2FkT2Zmc2V0SW1tOU1heCgpKTsKICAgICBSVU4odGVzdExvYWRPZmZzZXRJbW05TWF4
UGx1c09uZSgpKTsKICAgICBSVU4odGVzdExvYWRPZmZzZXRJbW05TWF4UGx1c1R3bygpKTsKQEAg
LTE1MDk5LDE2ICsxNTc1MywyMyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAg
UlVOKHRlc3ROZWczMig1MikpOwogICAgIFJVTih0ZXN0TmVnUHRyKDUzKSk7CiAgICAgUlVOKHRl
c3RTdG9yZUFkZExvYWQzMig0NikpOworICAgIFJVTih0ZXN0U3RvcmVSZWxBZGRMb2FkQWNxMzIo
NDYpKTsKICAgICBSVU4odGVzdFN0b3JlQWRkTG9hZEltbTMyKDQ2KSk7CiAgICAgUlVOKHRlc3RT
dG9yZUFkZExvYWQ2NCg0NjAwKSk7CisgICAgUlVOKHRlc3RTdG9yZVJlbEFkZExvYWRBY3E2NCg0
NjAwKSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExvYWRJbW02NCg0NjAwKSk7CiAgICAgUlVOKHRl
c3RTdG9yZUFkZExvYWQ4KDQsIExvYWQ4WikpOworICAgIFJVTih0ZXN0U3RvcmVSZWxBZGRMb2Fk
QWNxOCg0LCBMb2FkOFopKTsKKyAgICBSVU4odGVzdFN0b3JlUmVsQWRkRmVuY2VMb2FkQWNxOCg0
LCBMb2FkOFopKTsKICAgICBSVU4odGVzdFN0b3JlQWRkTG9hZEltbTgoNCwgTG9hZDhaKSk7CiAg
ICAgUlVOKHRlc3RTdG9yZUFkZExvYWQ4KDQsIExvYWQ4UykpOworICAgIFJVTih0ZXN0U3RvcmVS
ZWxBZGRMb2FkQWNxOCg0LCBMb2FkOFMpKTsKICAgICBSVU4odGVzdFN0b3JlQWRkTG9hZEltbTgo
NCwgTG9hZDhTKSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExvYWQxNig2LCBMb2FkMTZaKSk7Cisg
ICAgUlVOKHRlc3RTdG9yZVJlbEFkZExvYWRBY3ExNig2LCBMb2FkMTZaKSk7CiAgICAgUlVOKHRl
c3RTdG9yZUFkZExvYWRJbW0xNig2LCBMb2FkMTZaKSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExv
YWQxNig2LCBMb2FkMTZTKSk7CisgICAgUlVOKHRlc3RTdG9yZVJlbEFkZExvYWRBY3ExNig2LCBM
b2FkMTZTKSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExvYWRJbW0xNig2LCBMb2FkMTZTKSk7CiAg
ICAgUlVOKHRlc3RTdG9yZUFkZExvYWQzMkluZGV4KDQ2KSk7CiAgICAgUlVOKHRlc3RTdG9yZUFk
ZExvYWRJbW0zMkluZGV4KDQ2KSk7CkBAIC0xNTgzMSw2ICsxNjQ5MiwzOSBAQCB2b2lkIHJ1bihj
b25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RMb2FkQmFzZUluZGV4U2hpZnQyKCkpOwog
ICAgIFJVTih0ZXN0TG9hZEJhc2VJbmRleFNoaWZ0MzIoKSk7CiAgICAgUlVOKHRlc3RPcHRpbWl6
ZU1hdGVyaWFsaXphdGlvbigpKTsKKyAgICAKKyAgICBSVU4odGVzdEF0b21pY1dlYWtDQVM8aW50
OF90PigpKTsKKyAgICBSVU4odGVzdEF0b21pY1dlYWtDQVM8aW50MTZfdD4oKSk7CisgICAgUlVO
KHRlc3RBdG9taWNXZWFrQ0FTPGludDMyX3Q+KCkpOworICAgIFJVTih0ZXN0QXRvbWljV2Vha0NB
UzxpbnQ2NF90PigpKTsKKyAgICBSVU4odGVzdEF0b21pY1N0cm9uZ0NBUzxpbnQ4X3Q+KCkpOwor
ICAgIFJVTih0ZXN0QXRvbWljU3Ryb25nQ0FTPGludDE2X3Q+KCkpOworICAgIFJVTih0ZXN0QXRv
bWljU3Ryb25nQ0FTPGludDMyX3Q+KCkpOworICAgIFJVTih0ZXN0QXRvbWljU3Ryb25nQ0FTPGlu
dDY0X3Q+KCkpOworICAgIFJVTih0ZXN0QXRvbWljWGNoZzxpbnQ4X3Q+KEF0b21pY1hjaGdBZGQp
KTsKKyAgICBSVU4odGVzdEF0b21pY1hjaGc8aW50MTZfdD4oQXRvbWljWGNoZ0FkZCkpOworICAg
IFJVTih0ZXN0QXRvbWljWGNoZzxpbnQzMl90PihBdG9taWNYY2hnQWRkKSk7CisgICAgUlVOKHRl
c3RBdG9taWNYY2hnPGludDY0X3Q+KEF0b21pY1hjaGdBZGQpKTsKKyAgICBSVU4odGVzdEF0b21p
Y1hjaGc8aW50OF90PihBdG9taWNYY2hnQW5kKSk7CisgICAgUlVOKHRlc3RBdG9taWNYY2hnPGlu
dDE2X3Q+KEF0b21pY1hjaGdBbmQpKTsKKyAgICBSVU4odGVzdEF0b21pY1hjaGc8aW50MzJfdD4o
QXRvbWljWGNoZ0FuZCkpOworICAgIFJVTih0ZXN0QXRvbWljWGNoZzxpbnQ2NF90PihBdG9taWNY
Y2hnQW5kKSk7CisgICAgUlVOKHRlc3RBdG9taWNYY2hnPGludDhfdD4oQXRvbWljWGNoZ09yKSk7
CisgICAgUlVOKHRlc3RBdG9taWNYY2hnPGludDE2X3Q+KEF0b21pY1hjaGdPcikpOworICAgIFJV
Tih0ZXN0QXRvbWljWGNoZzxpbnQzMl90PihBdG9taWNYY2hnT3IpKTsKKyAgICBSVU4odGVzdEF0
b21pY1hjaGc8aW50NjRfdD4oQXRvbWljWGNoZ09yKSk7CisgICAgUlVOKHRlc3RBdG9taWNYY2hn
PGludDhfdD4oQXRvbWljWGNoZ1N1YikpOworICAgIFJVTih0ZXN0QXRvbWljWGNoZzxpbnQxNl90
PihBdG9taWNYY2hnU3ViKSk7CisgICAgUlVOKHRlc3RBdG9taWNYY2hnPGludDMyX3Q+KEF0b21p
Y1hjaGdTdWIpKTsKKyAgICBSVU4odGVzdEF0b21pY1hjaGc8aW50NjRfdD4oQXRvbWljWGNoZ1N1
YikpOworICAgIFJVTih0ZXN0QXRvbWljWGNoZzxpbnQ4X3Q+KEF0b21pY1hjaGdYb3IpKTsKKyAg
ICBSVU4odGVzdEF0b21pY1hjaGc8aW50MTZfdD4oQXRvbWljWGNoZ1hvcikpOworICAgIFJVTih0
ZXN0QXRvbWljWGNoZzxpbnQzMl90PihBdG9taWNYY2hnWG9yKSk7CisgICAgUlVOKHRlc3RBdG9t
aWNYY2hnPGludDY0X3Q+KEF0b21pY1hjaGdYb3IpKTsKKyAgICBSVU4odGVzdEF0b21pY1hjaGc8
aW50OF90PihBdG9taWNYY2hnKSk7CisgICAgUlVOKHRlc3RBdG9taWNYY2hnPGludDE2X3Q+KEF0
b21pY1hjaGcpKTsKKyAgICBSVU4odGVzdEF0b21pY1hjaGc8aW50MzJfdD4oQXRvbWljWGNoZykp
OworICAgIFJVTih0ZXN0QXRvbWljWGNoZzxpbnQ2NF90PihBdG9taWNYY2hnKSk7CiAKICAgICBS
VU4odGVzdFdhc21Cb3VuZHNDaGVjaygwKSk7CiAgICAgUlVOKHRlc3RXYXNtQm91bmRzQ2hlY2so
MTAwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZp
c2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsNyBAQCB1bnNpZ25lZCBBcmc6OmpzSGFzaCgp
IGNvbnN0CiAgICAgY2FzZSBSZWxDb25kOgogICAgIGNhc2UgUmVzQ29uZDoKICAgICBjYXNlIERv
dWJsZUNvbmQ6CisgICAgY2FzZSBTdGF0dXNDb25kOgogICAgIGNhc2UgV2lkdGhBcmc6CiAgICAg
ICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vZmZzZXQpOwogICAgICAgICBi
cmVhazsKQEAgLTE4Miw2ICsxODMsOSBAQCB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgb3V0LnByaW50KGFzRG91Ymxl
Q29uZGl0aW9uKCkpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGF0dXNDb25kOgorICAg
ICAgICBvdXQucHJpbnQoYXNTdGF0dXNDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIFNwZWNpYWw6CiAgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFsKCkp
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQxLDYgKzI0NSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFyZzo6RG91YmxlQ29uZDoKICAgICAg
ICAgb3V0LnByaW50KCJEb3VibGVDb25kIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFy
Zzo6U3RhdHVzQ29uZDoKKyAgICAgICAgb3V0LnByaW50KCJTdGF0dXNDb25kIik7CisgICAgICAg
IHJldHVybjsKICAgICBjYXNlIEFyZzo6U3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KCJTcGVj
aWFsIik7CiAgICAgICAgIHJldHVybjsKQEAgLTI4NSw2ICsyOTIsOSBAQCB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgogICAg
ICAgICBvdXQucHJpbnQoIkVhcmx5RGVmIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFy
Zzo6RWFybHlaRGVmOgorICAgICAgICBvdXQucHJpbnQoIkVhcmx5WkRlZiIpOworICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBBcmc6OlNjcmF0Y2g6CiAgICAgICAgIG91dC5wcmludCgiU2NyYXRj
aCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmgJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDcgQEAgcHVibGljOgogICAgICAg
ICBSZWxDb25kLAogICAgICAgICBSZXNDb25kLAogICAgICAgICBEb3VibGVDb25kLAorICAgICAg
ICBTdGF0dXNDb25kLAogICAgICAgICBTcGVjaWFsLAogICAgICAgICBXaWR0aEFyZwogICAgIH07
CkBAIC0xNTEsNiArMTUyLDggQEAgcHVibGljOgogICAgICAgICAvLyBhcyBVc2UgaGFzIHVuZGVm
aW5lZCBiZWhhdmlvcjogdGhlIHVzZSBtYXkgaGFwcGVuIGJlZm9yZSB0aGUgZGVmLCBvciBpdCBt
YXkgaGFwcGVuIGFmdGVyCiAgICAgICAgIC8vIGl0LgogICAgICAgICBFYXJseURlZiwKKyAgICAg
ICAgICAgIAorICAgICAgICBFYXJseVpEZWYsCiAKICAgICAgICAgLy8gU29tZSBpbnN0cnVjdGlv
bnMgbmVlZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuIFdlIG1vZGVsIHRoaXMgYnkgc2F5aW5nIHRoYXQg
dGhlIHRlbXBvcmFyeSBpcwogICAgICAgICAvLyBkZWZpbmVkIGVhcmx5IGFuZCB1c2VkIGxhdGUu
IFRoaXMgcm9sZSBpbXBsaWVzIHRoYXQuCkBAIC0xODYsNiArMTg5LDcgQEAgcHVibGljOgogICAg
ICAgICBjYXNlIFpEZWY6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBFYXJs
eURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMDYsNiArMjEw
LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgU2NyYXRj
aDoKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yMjgsNiArMjMzLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFVzZUFkZHI6
CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAg
Y2FzZSBFYXJseVpEZWY6CiAgICAgICAgICAgICByZXR1cm4gcm9sZTsKICAgICAgICAgY2FzZSBV
c2U6CiAgICAgICAgICAgICByZXR1cm4gQ29sZFVzZTsKQEAgLTI1Myw2ICsyNTksNyBAQCBwdWJs
aWM6CiAgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAg
ICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0yNzQsNiArMjgxLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFpEZWY6CiAgICAgICAg
IGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJs
eVpEZWY6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yOTQsNiArMzAyLDcgQEAgcHVibGljOgogICAgICAgICBj
YXNlIFpEZWY6CiAgICAgICAgIGNhc2UgVXNlWkRlZjoKICAgICAgICAgY2FzZSBFYXJseURlZjoK
KyAgICAgICAgY2FzZSBFYXJseVpEZWY6CiAgICAgICAgIGNhc2UgU2NyYXRjaDoKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMTUsNiArMzI0LDcgQEAgcHVibGljOgog
ICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKICAgICAgICAgY2Fz
ZSBTY3JhdGNoOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTMzMCw2
ICszNDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBM
YXRlVXNlOgogICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoK
ICAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzU4LDYgKzM2OSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZVpE
ZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01MzMsNiArNTQ1LDE0
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBzdGF0aWMg
QXJnIHN0YXR1c0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlN0YXR1c0NvbmRpdGlvbiBjb25kaXRpb24p
CisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3Rh
dHVzQ29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNp
YWwqIHNwZWNpYWwpCiAgICAgewogICAgICAgICBBcmcgcmVzdWx0OwpAQCAtNjU4LDEyICs2Nzgs
MTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IERvdWJsZUNvbmQ7CiAgICAg
fQogCisgICAgYm9vbCBpc1N0YXR1c0NvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGtpbmQoKSA9PSBTdGF0dXNDb25kOworICAgIH0KKwogICAgIGJvb2wgaXNDb25kaXRpb24oKSBj
b25zdAogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKICAgICAgICAgY2FzZSBSZWxD
b25kOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKKyAg
ICAgICAgY2FzZSBTdGF0dXNDb25kOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04NTEsNiArODc3LDcgQEAg
cHVibGljOgogICAgICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAg
ICAgICAgY2FzZSBEb3VibGVDb25kOgorICAgICAgICBjYXNlIFN0YXR1c0NvbmQ6CiAgICAgICAg
IGNhc2UgU3BlY2lhbDoKICAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtODcyLDYgKzg5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWxDb25k
OgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKKyAgICAg
ICAgY2FzZSBTdGF0dXNDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CiAgICAgICAgIGNhc2Ug
V2lkdGhBcmc6CiAgICAgICAgIGNhc2UgSW52YWxpZDoKQEAgLTEwNTgsNiArMTA4Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAg
ICAgIGNhc2UgRG91YmxlQ29uZDoKKyAgICAgICAgY2FzZSBTdGF0dXNDb25kOgogICAgICAgICBj
YXNlIFNwZWNpYWw6CiAgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTExNzcsNiArMTIwNiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uPihtX29mZnNldCk7CiAgICAg
fQogICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpTdGF0dXNDb25kaXRpb24gYXNTdGF0dXNDb25k
aXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU3RhdHVzQ29uZCgpKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpTdGF0dXNDb25kaXRpb24+
KG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCiAgICAgLy8gVGVsbHMgeW91IGlmIHRoZSBBcmcgaXMg
aW52ZXJ0aWJsZS4gT25seSBjb25kaXRpb24gYXJndW1lbnRzIGFyZSBpbnZlcnRpYmxlLCBhbmQg
ZXZlbiBmb3IgdGhvc2UsIHRoZXJlCiAgICAgLy8gYXJlIGEgZmV3IGV4Y2VwdGlvbnMgLSBub3Rh
Ymx5IE92ZXJmbG93IGFuZCBTaWduZWQuCiAgICAgYm9vbCBpc0ludmVydGlibGUoKSBjb25zdApA
QCAtMTE4NCw2ICsxMjE5LDcgQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewog
ICAgICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKKyAgICAgICAg
Y2FzZSBTdGF0dXNDb25kOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2Ug
UmVzQ29uZDoKICAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6aXNJbnZlcnRpYmxl
KGFzUmVzdWx0Q29uZGl0aW9uKCkpOwpAQCAtMTIwNCw2ICsxMjQwLDggQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuIHJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc1Jlc3VsdENv
bmRpdGlvbigpKSk7CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgICAgIHJldHVy
biBkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjppbnZlcnQoYXNEb3VibGVDb25kaXRpb24oKSkp
OworICAgICAgICBjYXNlIFN0YXR1c0NvbmQ6CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0KGFzU3RhdHVzQ29uZGl0aW9uKCkpKTsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICByZXR1cm4gQXJnKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNiAr
MzUsMTkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogCiBjb25z
dCBjaGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpkdW1wUHJlZml4ID0gIiMiOwogCit2b2lkIEJhc2lj
QmxvY2s6OnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrIHRhcmdldCkKK3sKKyAgICBtX3N1
Y2Nlc3NvcnMucmVzaXplKDEpOworICAgIG1fc3VjY2Vzc29yc1swXSA9IHRhcmdldDsKK30KKwor
dm9pZCBCYXNpY0Jsb2NrOjpzZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayB0YWtlbiwgRnJl
cXVlbnRlZEJsb2NrIG5vdFRha2VuKQoreworICAgIG1fc3VjY2Vzc29ycy5yZXNpemUoMik7Cisg
ICAgbV9zdWNjZXNzb3JzWzBdID0gdGFrZW47CisgICAgbV9zdWNjZXNzb3JzWzFdID0gbm90VGFr
ZW47Cit9CisKIGJvb2wgQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxv
Y2spCiB7CiAgICAgcmV0dXJuIEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNp
b24gMjEyOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMywxMSBAQAogI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKLW5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9u
U2V0OworCituYW1lc3BhY2UgQWlyIHsKIAogY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFz
cyBDb2RlOwpAQCAtOTksNiArMTAzLDkgQEAgcHVibGljOgogICAgIGNvbnN0IFN1Y2Nlc3Nvckxp
c3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KICAgICBTdWNj
ZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CiAKKyAgICB2
b2lkIHNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKTsKKyAgICB2b2lkIHNldFN1Y2Nlc3Nv
cnMoRnJlcXVlbnRlZEJsb2NrLCBGcmVxdWVudGVkQmxvY2spOworCiAgICAgQmFzaWNCbG9jayog
c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3Nvcihp
bmRleCkuYmxvY2soKTsgfQogICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1bnNpZ25l
ZCBpbmRleCkgeyByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CiAgICAgU3VjY2Vz
c29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3Mo
KQpAQCAtMTMzLDYgKzE0MCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5z
ZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBjbGFzcyBDb2RlOwogICAgIGZyaWVuZCBjbGFzcyBJbnNl
cnRpb25TZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWU+IGZyaWVuZCBjbGFzcyBCMzo6R2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0OwogICAgIAogICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgs
IGRvdWJsZSBmcmVxdWVuY3kpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJCbG9j
a0luc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJh
c2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSA8d3RmL0J1YmJsZVNv
cnQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CitCbG9ja0luc2VydGlvblNldDo6QmxvY2tJbnNlcnRpb25TZXQoQ29kZSAmY29kZSkKKyAgICA6
IEdlbmVyaWNCbG9ja0luc2VydGlvblNldChjb2RlLm1fYmxvY2tzKQoreworfQorCitCbG9ja0lu
c2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0KCkKK3sKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2Nr
SW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5o
IgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK2NsYXNzIEluc2VydGlvblNldDsKKwordHlwZWRlZiBHZW5lcmljQmxv
Y2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz46OkJsb2NrSW5zZXJ0aW9uIEJsb2NrSW5zZXJ0aW9u
OworCitjbGFzcyBCbG9ja0luc2VydGlvblNldCA6IHB1YmxpYyBHZW5lcmljQmxvY2tJbnNlcnRp
b25TZXQ8QmFzaWNCbG9jaz4geworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0aW9uU2V0KENvZGUm
KTsKKyAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGV2ZW50dWFsbHkgaW1wbGVtZW50IEIzOjpCbG9ja0luc2VydGlvblNldCdzIHNwbGl0Rm9y
d2FyZCgpLgorfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
RHVtcEFzSlMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyRHVtcEFzSlMuY3BwCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckR1bXBBc0pTLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDI0NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFpckR1bXBBc0pTLmgiCi0KLSNpZiBFTkFCTEUo
QjNfSklUKQotCi0jaW5jbHVkZSAiQWlyQ29kZS5oIgotI2luY2x1ZGUgIkFpckluc3RJbmxpbmVz
LmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKLQot
bmFtZXNwYWNlIHsKLQotQ1N0cmluZyB2YXJOYW1lRm9yQmxvY2tBdEluZGV4KHVuc2lnbmVkIGlu
ZGV4KQotewotICAgIHJldHVybiB0b0NTdHJpbmcoImJiIiwgaW5kZXgpOwotfQotCi1DU3RyaW5n
IHZhck5hbWUoQmFzaWNCbG9jayogYmxvY2spCi17Ci0gICAgcmV0dXJuIHZhck5hbWVGb3JCbG9j
a0F0SW5kZXgoYmxvY2stPmluZGV4KCkpOwotfQotCi1DU3RyaW5nIHZhck5hbWVGb3JTdGFja1Ns
b3RBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiB0b0NTdHJpbmcoInNsb3Qi
LCBpbmRleCk7Ci19Ci0KLUNTdHJpbmcgdmFyTmFtZShTdGFja1Nsb3QqIHNsb3QpCi17Ci0gICAg
cmV0dXJuIHZhck5hbWVGb3JTdGFja1Nsb3RBdEluZGV4KHNsb3QtPmluZGV4KCkpOwotfQotCi1D
U3RyaW5nIHZhck5hbWUoUmVnIHJlZykKLXsKLSAgICByZXR1cm4gdG9DU3RyaW5nKCJSZWcuIiwg
cmVnLmRlYnVnTmFtZSgpKTsKLX0KLQotQ1N0cmluZyB2YXJOYW1lRm9yVG1wV2l0aEJhbmtBbmRJ
bmRleChCYW5rIGJhbmssIHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiB0b0NTdHJpbmco
YmFuayA9PSBGUCA/ICJmIiA6ICIiLCAidG1wIiwgaW5kZXgpOwotfQotCi1DU3RyaW5nIHZhck5h
bWUoVG1wIHRtcCkKLXsKLSAgICBpZiAodG1wLmlzUmVnKCkpCi0gICAgICAgIHJldHVybiB2YXJO
YW1lKHRtcC5yZWcoKSk7Ci0gICAgcmV0dXJuIHZhck5hbWVGb3JUbXBXaXRoQmFua0FuZEluZGV4
KEFyZyh0bXApLmJhbmsoKSwgdG1wLnRtcEluZGV4KCkpOwotfQotCi19IC8vIGFub255bW91cyBu
YW1lc3BhY2UKLQotdm9pZCBkdW1wQXNKUyhDb2RlJiBjb2RlLCBQcmludFN0cmVhbSYgb3V0KQot
ewotICAgIG91dC5wcmludGxuKCJsZXQgY29kZSA9IG5ldyBDb2RlKCk7Iik7Ci0gICAgCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIG91dC5w
cmludGxuKCJsZXQgIiwgdmFyTmFtZUZvckJsb2NrQXRJbmRleChpKSwgIiA9IGNvZGUuYWRkQmxv
Y2soKTsiKTsKLSAgICAKLSAgICBvdXQucHJpbnRsbigibGV0IGhhc2g7Iik7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgU3RhY2tTbG90KiBzbG90ID0gY29kZS5zdGFja1Nsb3RzKClbaV07Ci0gICAgICAgIGlm
IChzbG90KSB7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigibGV0ICIsIHZhck5hbWUoc2xvdCks
ICIgPSBjb2RlLmFkZFN0YWNrU2xvdCgiLCBzbG90LT5ieXRlU2l6ZSgpLCAiLCAiLCBzbG90LT5r
aW5kKCksICIpOyIpOwotICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKQotICAg
ICAgICAgICAgICAgIG91dC5wcmludGxuKHZhck5hbWUoc2xvdCksICIuc2V0T2Zmc2V0RnJvbUZQ
KCIsIHNsb3QtPm9mZnNldEZyb21GUCgpLCAiKTsiKTsKLSAgICAgICAgICAgIG91dC5wcmludGxu
KCJoYXNoID0gIiwgdmFyTmFtZShzbG90KSwgIi5oYXNoKCk7Iik7Ci0gICAgICAgICAgICBvdXQu
cHJpbnRsbigiaWYgKGhhc2ggIT0gIiwgc2xvdC0+anNIYXNoKCksICIpIik7Ci0gICAgICAgICAg
ICBvdXQucHJpbnRsbigiICAgIHRocm93IG5ldyBFcnJvcihcIkJhZCBoYXNoOiBcIiArIGhhc2gp
OyIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG91dC5wcmludGxuKCJjb2RlLmFkZFN0
YWNrU2xvdCgxLCBTcGlsbCk7Iik7Ci0gICAgfQotICAgIAotICAgIGZvckVhY2hCYW5rKAotICAg
ICAgICBbJl0gKEJhbmsgYmFuaykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29k
ZS5udW1UbXBzKGJhbmspOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50bG4oCi0g
ICAgICAgICAgICAgICAgICAgICJsZXQgIiwgdmFyTmFtZUZvclRtcFdpdGhCYW5rQW5kSW5kZXgo
YmFuaywgaSksICIgPSBjb2RlLm5ld1RtcCgiLCBiYW5rLCAiKTsiKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSk7Ci0gICAgCi0gICAgb3V0LnByaW50bG4oImxldCBpbnN0OyIpOwotICAgIG91
dC5wcmludGxuKCJsZXQgYXJnOyIpOwotICAgIAotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBjb2RlKSB7Ci0gICAgICAgIGZvciAoRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3NvciA6IGJsb2Nr
LT5zdWNjZXNzb3JzKCkpIHsKLSAgICAgICAgICAgIG91dC5wcmludGxuKAotICAgICAgICAgICAg
ICAgIHZhck5hbWUoYmxvY2spLCAiLnN1Y2Nlc3NvcnMucHVzaChuZXcgRnJlcXVlbnRlZEJsb2Nr
KCIsCi0gICAgICAgICAgICAgICAgdmFyTmFtZShzdWNjZXNzb3IuYmxvY2soKSksICIsICIsIHN1
Y2Nlc3Nvci5mcmVxdWVuY3koKSwgIikpOyIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRlY2Vzc29ycygpKQot
ICAgICAgICAgICAgb3V0LnByaW50bG4odmFyTmFtZShibG9jayksICIucHJlZGVjZXNzb3JzLnB1
c2goIiwgdmFyTmFtZShwcmVkZWNlc3NvciksICIpOyIpOwotICAgICAgICAKLSAgICAgICAgZm9y
IChJbnN0JiBpbnN0IDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgZG8gc29tZXRoaW5nIGZvciBmbGFncy4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI3NTEKLSAgICAgICAgICAgIG91dC5wcmludGxu
KCJpbnN0ID0gbmV3IEluc3QoIiwgaW5zdC5raW5kLm9wY29kZSwgIik7Iik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICBbJl0gKEFy
ZyYgYXJnLCBBcmc6OlJvbGUsIEJhbmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoYXJnLmtpbmQoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6SW52YWxp
ZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VG1wOgotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50bG4oImFyZyA9IEFyZy5jcmVhdGVUbXAoIiwgdmFyTmFtZShhcmcudG1w
KCkpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpJbW06Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0ZUltbSgiLCBhcmcu
dmFsdWUoKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6QmlnSW1tOgot
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImFyZyA9IEFyZy5jcmVhdGVCaWdJbW0oIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihhcmcudmFsdWUoKSksICIsICIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oYXJnLnZhbHVlKCkgPj4g
MzIpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpCaXRJbW06Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiYXJnID0gQXJnLmNyZWF0ZUJpdEltbSgi
LCBhcmcudmFsdWUoKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Qml0
SW1tNjQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiYXJnID0gQXJnLmNyZWF0ZUJpdEltbTY0KCIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oYXJnLnZhbHVlKCkpLCAiLCAi
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KGFyZy52
YWx1ZSgpID4+IDMyKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6QWRk
cjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJhcmcgPSBBcmcuY3JlYXRlQWRkcigiLCB2YXJOYW1lKGFyZy5iYXNlKCkp
LCAiLCAiLCBhcmcub2Zmc2V0KCksICIpOyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OlN0YWNrOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImFyZyA9IEFyZy5jcmVhdGVTdGFjaygiLCB2YXJOYW1lKGFy
Zy5zdGFja1Nsb3QoKSksICIsICIsIGFyZy5vZmZzZXQoKSwgIik7Iik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5w
cmludGxuKCJhcmcgPSBBcmcuY3JlYXRlQ2FsbEFyZygiLCBhcmcub2Zmc2V0KCksICIpOyIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkluZGV4OgotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZyA9IEFy
Zy5jcmVhdGVJbmRleCgiLCB2YXJOYW1lKGFyZy5iYXNlKCkpLCAiLCAiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhck5hbWUoYXJnLmluZGV4KCkpLCAiLCAiLCBhcmcuc2NhbGUoKSwg
IiwgIiwgYXJnLm9mZnNldCgpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJn
OjpSZWxDb25kOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImFyZyA9IEFy
Zy5jcmVhdGVSZWxDb25kKCIsIGFyZy5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSwgIik7Iik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6UmVzQ29uZDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRlUmVzQ29uZCgiLCBhcmcuYXNSZXN1
bHRDb25kaXRpb24oKSwgIik7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RG91
YmxlQ29uZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcu
Y3JlYXRlRG91YmxlQ29uZCgiLCBhcmcuYXNEb3VibGVDb25kaXRpb24oKSwgIik7Iik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3BlY2lhbDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG91dC5wcmludGxuKCJhcmcgPSBBcmcuY3JlYXRlU3BlY2lhbCgpOyIpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoQXJnOgotICAgICAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50bG4oImFyZyA9IEFyZy5jcmVhdGVXaWR0aEFyZygiLCBhcmcud2lkdGgoKSwgIik7
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4o
Imluc3QuYXJncy5wdXNoKGFyZyk7Iik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGluc3QuaGFzTm9uQXJnRWZmZWN0cygpKQotICAgICAgICAgICAgICAgICAg
ICBvdXQucHJpbnRsbigiaW5zdC5wYXRjaEhhc05vbkFyZ0VmZmVjdHMgPSB0cnVlOyIpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmV4dHJhRWFy
bHlDbG9iYmVyZWRSZWdzID0gbmV3IFNldCgpOyIpOwotICAgICAgICAgICAgICAgIG91dC5wcmlu
dGxuKCJpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncyA9IG5ldyBTZXQoKTsiKTsKLSAgICAgICAgICAg
ICAgICBpbnN0LmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKLSAgICAgICAgICAg
ICAgICAgICAgWyZdIChSZWcgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnRsbigiaW5zdC5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncy5hZGQoIiwgdmFyTmFtZShyZWcpLCAi
KTsiKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgaW5zdC5leHRy
YUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAotICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyBy
ZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmV4dHJhQ2xv
YmJlcmVkUmVncy5hZGQoIiwgdmFyTmFtZShyZWcpLCAiKTsiKTsKLSAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgb3V0LnByaW50bG4oImlu
c3QucGF0Y2hBcmdEYXRhID0gW107Iik7Ci0gICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJn
KAotICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYsIEFyZzo6Um9sZSByb2xlLCBCYW5rIGJh
bmssIFdpZHRoIHdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5zdC5wYXRjaEFyZ0RhdGEucHVzaCh7cm9s
ZTogQXJnLiIsIHJvbGUsICIsIHR5cGU6ICIsIGJhbmssCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiwgd2lkdGg6ICIsIHdpZHRoLCAifSk7Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5zdC5raW5k
Lm9wY29kZSA9PSBDQ2FsbCB8fCBpbnN0LmtpbmQub3Bjb2RlID09IENvbGRDQ2FsbCkgewotICAg
ICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmNDYWxsVHlwZSA9ICIsIGluc3Qub3JpZ2lu
LT50eXBlKCkpOwotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0LmNDYWxsQXJnVHlw
ZXMgPSBbXTsiKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgaW5z
dC5vcmlnaW4tPm51bUNoaWxkcmVuKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnBy
aW50bG4oImluc3QuY0NhbGxBcmdUeXBlcy5wdXNoKCIsIGluc3Qub3JpZ2luLT5jaGlsZChpKS0+
dHlwZSgpLCAiKTsiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
b3V0LnByaW50bG4oImhhc2ggPSBpbnN0Lmhhc2goKTsiKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dGxuKCJpZiAoaGFzaCAhPSAiLCBpbnN0LmpzSGFzaCgpLCAiKSIpOwotICAgICAgICAgICAgb3V0
LnByaW50bG4oIiAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgaGFzaDogXCIgKyBoYXNoKTsiKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgb3V0LnByaW50bG4odmFyTmFtZShibG9jayksICIu
YXBwZW5kKGluc3QpOyIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi19IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCi0KLSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckR1bXBBc0pTLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEdW1wQXNKUy5oCShyZXZpc2lvbiAyMTI5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckR1bXBBc0pTLmgJKG5vbmV4aXN0
ZW50KQpAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQotI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7Ci0KLWNsYXNzIENvZGU7Ci0KLS8vIFRoaXMgaXMgdXNlZCBmb3IgYmVu
Y2htYXJraW5nLiBWYXJpb3VzIG9wZXJhdGlvbnMgb24gQWlyIGFyZSBpbnRlcmVzdGluZyBmcm9t
IGEgYmVuY2htYXJraW5nCi0vLyBzdGFuZHBvaW50LiBXZSBjYW4gd3JpdGUgc29tZSBBaXIgcGhh
c2VzIGluIEpTIGFuZCB0aGVuIHVzZSB0aGF0IHRvIGJlbmNobWFyayBKUy4gVGhlIGJlbmNobWFy
awotLy8gaXMgY2FsbGVkIEpTQWlyLCBhbmQgaXQncyBpbiBQZXJmb3JtYW5jZVRlc3RzL0pTQWly
Lgotdm9pZCBkdW1wQXNKUyhDb2RlJiwgUHJpbnRTdHJlYW0mKTsKLQotfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgotCi0jZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTI5
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lz
dGVyc0J5R3JhcGhDb2xvcmluZy5oIgogI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKICNp
bmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlyRHVtcEFzSlMuaCIKICNpbmNsdWRlICJB
aXJFbGltaW5hdGVEZWFkQ29kZS5oIgogI2luY2x1ZGUgIkFpckZpeE9idmlvdXNTcGlsbHMuaCIK
ICNpbmNsdWRlICJBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCIKQEAgLTczLDYgKzcyLDgg
QEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAgICAgICBkYXRhTG9n
KCJJbml0aWFsIGFpcjpcbiIpOwogICAgICAgICBkYXRhTG9nKGNvZGUpOwogICAgIH0KKyAgICAK
KyAgICBzaW1wbGlmeUNGRyhjb2RlKTsKIAogICAgIGxvd2VyTWFjcm9zKGNvZGUpOwogCkBAIC0x
MDcsMjMgKzEwOCwxMSBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAg
ICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlmeSB3aGljaCBjYWxsZWUtc2F2ZXMgd2UncmUg
dXNpbmcgYW5kIHNhdmVzIHRoZW0uCiAgICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7CiAgICAg
Ci0gICAgaWYgKE9wdGlvbnM6OmR1bXBBaXJBc0pTQmVmb3JlQWxsb2NhdGVTdGFjaygpKSB7Ci0g
ICAgICAgIGRhdGFMb2coIkR1bXBpbmcgQWlyIGFzIEpTIGJlZm9yZSBhbGxvY2F0ZVN0YWNrOlxu
Iik7Ci0gICAgICAgIGR1bXBBc0pTKGNvZGUsIFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgIGRh
dGFMb2coIkFpciBoYXNoOiAiLCBjb2RlLmpzSGFzaCgpLCAiXG4iKTsKLSAgICB9Ci0KICAgICAv
LyBUaGlzIHR1cm5zIGFsbCBTdGFjayBhbmQgQ2FsbEFyZyBBcmdzIGludG8gQWRkciBhcmdzIHRo
YXQgdXNlIHRoZSBmcmFtZSBwb2ludGVyLiBJdCBkb2VzCiAgICAgLy8gdGhpcyBieSBmaXJzdC1m
aXQgYWxsb2NhdGluZyBzdGFjayBzbG90cy4gSXQgc2hvdWxkIGJlIHByZXR0eSBkYXJuIGNsb3Nl
IHRvIG9wdGltYWwsIHNvIHdlCiAgICAgLy8gc2hvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQg
dGhpcyB2ZXJ5IG11Y2guCiAgICAgYWxsb2NhdGVTdGFjayhjb2RlKTsKICAgICAKLSAgICBpZiAo
T3B0aW9uczo6ZHVtcEFpckFmdGVyQWxsb2NhdGVTdGFjaygpKSB7Ci0gICAgICAgIGRhdGFMb2co
IkR1bXBpbmcgQWlyIGFmdGVyIGFsbG9jYXRlU3RhY2s6XG4iKTsKLSAgICAgICAgZGF0YUxvZyhj
b2RlKTsKLSAgICAgICAgZGF0YUxvZygiQWlyIGhhc2g6ICIsIGNvZGUuanNIYXNoKCksICJcbiIp
OwotICAgIH0KLQogICAgIC8vIElmIHdlIGNvYWxlc2NlZCBtb3ZlcyB0aGVuIHdlIGNhbiB1bmJy
ZWFrIGNyaXRpY2FsIGVkZ2VzLiBUaGlzIGlzIHRoZSBtYWluIHJlYXNvbiBmb3IgdGhpcwogICAg
IC8vIHBoYXNlLgogICAgIHNpbXBsaWZ5Q0ZHKGNvZGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMjEyOTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzcsNiArMjc3LDY1IEBAIGlubGluZSBib29sIGlzWDg2VURpdjY0VmFsaWQoY29u
c3QgSW5zdCYKICAgICByZXR1cm4gaXNYODZEaXZIZWxwZXJWYWxpZChpbnN0KTsKIH0KIAoraW5s
aW5lIGJvb2wgaXNBdG9taWNTdHJvbmdDQVNWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworI2lm
IENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgc3dpdGNoIChpbnN0LmFyZ3Muc2l6ZSgpKSB7
CisgICAgY2FzZSAzOgorICAgICAgICByZXR1cm4gaW5zdC5hcmdzWzBdID09IFRtcChYODZSZWdp
c3RlcnM6OmVheCk7CisgICAgY2FzZSA1OgorICAgICAgICByZXR1cm4gaW5zdC5hcmdzWzFdID09
IFRtcChYODZSZWdpc3RlcnM6OmVheCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyNlbmRpZiAvLyBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorfQorCitpbmxp
bmUgYm9vbCBpc0JyYW5jaEF0b21pY1N0cm9uZ0NBU1ZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7
CisgICAgcmV0dXJuIGluc3QuYXJnc1sxXSA9PSBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpOworfQor
CitpbmxpbmUgYm9vbCBpc0F0b21pY1N0cm9uZ0NBUzhWYWxpZChjb25zdCBJbnN0JiBpbnN0KQor
eworICAgIHJldHVybiBpc0F0b21pY1N0cm9uZ0NBU1ZhbGlkKGluc3QpOworfQorCitpbmxpbmUg
Ym9vbCBpc0F0b21pY1N0cm9uZ0NBUzE2VmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICBy
ZXR1cm4gaXNBdG9taWNTdHJvbmdDQVNWYWxpZChpbnN0KTsKK30KKworaW5saW5lIGJvb2wgaXNB
dG9taWNTdHJvbmdDQVMzMlZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlz
QXRvbWljU3Ryb25nQ0FTVmFsaWQoaW5zdCk7Cit9CisKK2lubGluZSBib29sIGlzQXRvbWljU3Ry
b25nQ0FTNjRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc0F0b21pY1N0
cm9uZ0NBU1ZhbGlkKGluc3QpOworfQorCitpbmxpbmUgYm9vbCBpc0JyYW5jaEF0b21pY1N0cm9u
Z0NBUzhWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc0JyYW5jaEF0b21p
Y1N0cm9uZ0NBU1ZhbGlkKGluc3QpOworfQorCitpbmxpbmUgYm9vbCBpc0JyYW5jaEF0b21pY1N0
cm9uZ0NBUzE2VmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNCcmFuY2hB
dG9taWNTdHJvbmdDQVNWYWxpZChpbnN0KTsKK30KKworaW5saW5lIGJvb2wgaXNCcmFuY2hBdG9t
aWNTdHJvbmdDQVMzMlZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzQnJh
bmNoQXRvbWljU3Ryb25nQ0FTVmFsaWQoaW5zdCk7Cit9CisKK2lubGluZSBib29sIGlzQnJhbmNo
QXRvbWljU3Ryb25nQ0FTNjRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBp
c0JyYW5jaEF0b21pY1N0cm9uZ0NBU1ZhbGlkKGluc3QpOworfQorCiB9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAy
MTI5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTE3LDYgKzExNyw3IEBAIEFkZDMyIFU6RzozMiwgVVpEOkc6MzIKICAgICB4
ODY6IEltbSwgSW5kZXgKICAgICBJbW0sIFRtcAogICAgIHg4NjogQWRkciwgVG1wCisgICAgeDg2
OiBJbmRleCwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKICAgICB4ODY6IFRtcCwgSW5kZXgKIApA
QCAtMTM1LDkgKzEzNiwxMiBAQCB4ODY6IEFkZDE2IFU6RzoxNiwgVUQ6RzoxNgogNjQ6IEFkZDY0
IFU6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCiAgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4
ODY6IEltbSwgSW5kZXgKICAgICBJbW0sIFRtcAogICAgIHg4NjogQWRkciwgVG1wCisgICAgeDg2
OiBJbmRleCwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKKyAgICB4ODY6IFRtcCwgSW5kZXgKIAog
NjQ6IEFkZDY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBJbW0sIFRtcCwgVG1wCkBAIC0x
NjYsOSArMTcwLDEyIEBAIHg4NjogQWRkRmxvYXQgVTpGOjMyLCBVRDpGOjMyCiBTdWIzMiBVOkc6
MzIsIFVaRDpHOjMyCiAgICAgVG1wLCBUbXAKICAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4Njog
SW1tLCBJbmRleAogICAgIEltbSwgVG1wCiAgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IElu
ZGV4LCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgorICAgIHg4NjogVG1wLCBJbmRleAogCiBhcm02
NDogU3ViMzIgVTpHOjMyLCBVOkc6MzIsIEQ6RzozMgogICAgIFRtcCwgVG1wLCBUbXAKQEAgLTE3
Niw5ICsxODMsMTIgQEAgYXJtNjQ6IFN1YjMyIFU6RzozMiwgVTpHOjMyLCBEOkc6MzIKIDY0OiBT
dWI2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRtcAogICAgIHg4NjogSW1tLCBBZGRyCisg
ICAgeDg2OiBJbW0sIEluZGV4CiAgICAgSW1tLCBUbXAKICAgICB4ODY6IEFkZHIsIFRtcAorICAg
IHg4NjogSW5kZXgsIFRtcAogICAgIHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4
CiAKIGFybTY0OiBTdWI2NCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRt
cApAQCAtMjA0LDkgKzIxNCwxMiBAQCB4ODY6IFN1YkZsb2F0IFU6RjozMiwgVUQ6RjozMgogTmVn
MzIgVVpEOkc6MzIKICAgICBUbXAKICAgICB4ODY6IEFkZHIKKyAgICB4ODY6IEluZGV4CiAKIDY0
OiBOZWc2NCBVRDpHOjY0CiAgICAgVG1wCisgICAgeDg2OiBBZGRyCisgICAgeDg2OiBJbmRleAog
CiBhcm02NDogTmVnYXRlRG91YmxlIFU6Rjo2NCwgRDpGOjY0CiAgICAgVG1wLCBUbXAKQEAgLTMz
MCw4ICszNDMsMTEgQEAgQW5kMzIgVTpHOjMyLCBVWkQ6RzozMgogICAgIFRtcCwgVG1wCiAgICAg
eDg2OiBJbW0sIFRtcAogICAgIHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4CiAg
ICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBUbXAKICAgICB4ODY6IEltbSwgQWRk
cgorICAgIHg4NjogSW1tLCBJbmRleAogCiA2NDogQW5kNjQgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2
NAogICAgIFRtcCwgVG1wLCBUbXAKQEAgLTMzOSw3ICszNTUsMTMgQEAgQW5kMzIgVTpHOjMyLCBV
WkQ6RzozMgogCiB4ODZfNjQ6IEFuZDY0IFU6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCi0g
ICAgeDg2OiBJbW0sIFRtcAorICAgIEltbSwgVG1wCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJ
bmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKyAgICBBZGRyLCBUbXAKKyAgICBJ
bmRleCwgVG1wCiAKIEFuZERvdWJsZSBVOkY6NjQsIFU6Rjo2NCwgRDpGOjY0CiAgICAgVG1wLCBU
bXAsIFRtcApAQCAtNDU5LDggKzQ4MSwxMSBAQCBPcjMyIFU6RzozMiwgVVpEOkc6MzIKICAgICBU
bXAsIFRtcAogICAgIHg4NjogSW1tLCBUbXAKICAgICB4ODY6IFRtcCwgQWRkcgorICAgIHg4Njog
VG1wLCBJbmRleAogICAgIHg4NjogQWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1wCiAgICAg
eDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKIAogNjQ6IE9yNjQgVTpHOjY0LCBV
Okc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBUbXAKQEAgLTQ2OSw2ICs0OTQsMTIgQEAgT3Iz
MiBVOkc6MzIsIFVaRDpHOjMyCiA2NDogT3I2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRt
cAogICAgIHg4NjogSW1tLCBUbXAKKyAgICB4ODY6IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJ
bmRleAorICAgIHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAsIEluZGV4CisgICAgeDg2OiBB
ZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBUbXAKIAogWG9yMzIgVTpHOjMyLCBVOkc6MzIsIFpE
Okc6MzIKICAgICBUbXAsIFRtcCwgVG1wCkBAIC00ODAsOCArNTExLDExIEBAIFhvcjMyIFU6Rzoz
MiwgVVpEOkc6MzIKICAgICBUbXAsIFRtcAogICAgIHg4NjogSW1tLCBUbXAKICAgICB4ODY6IFRt
cCwgQWRkcgorICAgIHg4NjogVG1wLCBJbmRleAogICAgIHg4NjogQWRkciwgVG1wCisgICAgeDg2
OiBJbmRleCwgVG1wCiAgICAgeDg2OiBJbW0sIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKIAog
NjQ6IFhvcjY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcCwgVG1wCkBAIC00
OTAsNiArNTI0LDExIEBAIFhvcjMyIFU6RzozMiwgVVpEOkc6MzIKIDY0OiBYb3I2NCBVOkc6NjQs
IFVEOkc6NjQKICAgICBUbXAsIFRtcAogICAgIHg4NjogVG1wLCBBZGRyCisgICAgeDg2OiBUbXAs
IEluZGV4CisgICAgeDg2OiBBZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBUbXAKKyAgICB4ODY6
IEltbSwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAogICAgIHg4NjogSW1tLCBUbXAKIAogYXJt
NjQ6IE5vdDMyIFU6RzozMiwgWkQ6RzozMgpAQCAtNDk4LDEzICs1MzcsMTUgQEAgYXJtNjQ6IE5v
dDMyIFU6RzozMiwgWkQ6RzozMgogeDg2OiBOb3QzMiBVWkQ6RzozMgogICAgIFRtcAogICAgIEFk
ZHIKKyAgICBJbmRleAogCiBhcm02NDogTm90NjQgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRt
cAogCi14ODY6IE5vdDY0IFVEOkc6NjQKK3g4Nl82NDogTm90NjQgVUQ6Rzo2NAogICAgIFRtcAog
ICAgIEFkZHIKKyAgICBJbmRleAogCiBhcm02NDogQWJzRG91YmxlIFU6Rjo2NCwgRDpGOjY0CiAg
ICAgVG1wLCBUbXAKQEAgLTY2OCwyNyArNzA5LDM4MyBAQCBMb2FkOCBVOkc6OCwgWkQ6RzozMgog
ICAgIEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9hZEFjcTggVTpHOjgsIFpEOkc6MzIK
KyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKIFN0b3JlOCBVOkc6OCwgRDpHOjgKICAg
ICBUbXAsIEluZGV4CiAgICAgVG1wLCBBZGRyCiAgICAgeDg2OiBJbW0sIEluZGV4CiAgICAgeDg2
OiBJbW0sIEFkZHIKIAorU3RvcmVSZWw4IFU6Rzo4LCBEOkc6OAorICAgIFRtcCwgSW5kZXgKKyAg
ICBUbXAsIEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKyAgICB4ODY6IEltbSwgQWRkcgorCiBM
b2FkOFNpZ25lZEV4dGVuZFRvMzIgVTpHOjgsIFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJ
bmRleCwgVG1wCiAKK0xvYWRBY3E4U2lnbmVkRXh0ZW5kVG8zMiBVOkc6OCwgWkQ6RzozMgorICAg
IEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogTG9hZDE2IFU6RzoxNiwgWkQ6RzozMgogICAg
IEFkZHIsIFRtcAogICAgIEluZGV4LCBUbXAKIAorTG9hZEFjcTE2IFU6RzoxNiwgWkQ6RzozMgor
ICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKwogTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMiBV
Okc6MTYsIFpEOkc6MzIKICAgICBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKK0xvYWRBY3Ex
NlNpZ25lZEV4dGVuZFRvMzIgVTpHOjE2LCBaRDpHOjMyCisgICAgQWRkciwgVG1wCisgICAgSW5k
ZXgsIFRtcAorCiBTdG9yZTE2IFU6RzoxNiwgRDpHOjE2CiAgICAgVG1wLCBJbmRleAogICAgIFRt
cCwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorICAgIHg4NjogSW1tLCBBZGRyCisKK1N0b3Jl
UmVsMTYgVTpHOjE2LCBEOkc6MTYKKyAgICBUbXAsIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAg
eDg2OiBJbW0sIEluZGV4CisgICAgeDg2OiBJbW0sIEFkZHIKKworTG9hZEFjcTMyIFU6RzozMiwg
WkQ6RzozMgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworU3RvcmVSZWwzMiBVOkc6
MzIsIFpEOkc6MzIKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisgICAgeDg2OiBJbW0s
IEFkZHIKKyAgICB4ODY6IEltbSwgSW5kZXgKKworNjQ6IExvYWRBY3E2NCBVOkc6NjQsIFpEOkc6
NjQKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKKzY0OiBTdG9yZVJlbDY0IFU6Rzo2
NCwgWkQ6Rzo2NAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKyAgICB4ODY6IEltbSwg
QWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorCisjIFRoZSBmaXJzdCBvcGVyYW5kIGlzIHJheC4K
KyMgRklYTUU6IFRoaXMgZm9ybXVsYXRpb24gbWVhbnMgdGhhdCB0aGUgYm9vbGVhbiByZXN1bHQg
Y2Fubm90IGJlIHB1dCBpbiBlYXgsIGV2ZW4gdGhvdWdoIGFsbCB1c2VycworIyBvZiB0aGlzIHdv
dWxkIGJlIE9LIHdpdGggdGhhdC4KK3g4NjogQXRvbWljU3Ryb25nQ0FTOCBVOkc6MzIsIFVEOkc6
OCwgVTpHOjgsIFVEOkc6OCwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRy
LCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9t
aWNTdHJvbmdDQVMxNiBVOkc6MzIsIFVEOkc6MTYsIFU6RzozMiwgVUQ6RzoxNiwgWkQ6Rzo4Cisg
ICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAq
LCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVMzMiBVOkc6MzIsIFVEOkc6
MzIsIFU6RzozMiwgVUQ6RzozMiwgWkQ6Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBB
ZGRyLCBUbXAKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2XzY0
OiBBdG9taWNTdHJvbmdDQVM2NCBVOkc6MzIsIFVEOkc6NjQsIFU6Rzo2NCwgVUQ6Rzo2NCwgWkQ6
Rzo4CisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyLCBUbXAKKyAgICBTdGF0dXNDb25k
LCBUbXAqLCBUbXAsIEluZGV4LCBUbXAKKworeDg2OiBBdG9taWNTdHJvbmdDQVM4IFVEOkc6OCwg
VTpHOjgsIFVEOkc6OAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgK
KworeDg2OiBBdG9taWNTdHJvbmdDQVMxNiBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYKKyAgICBU
bXAqLCBUbXAsIEFkZHIKKyAgICBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljU3Ryb25n
Q0FTMzIgVUQ6RzozMiwgVTpHOjMyLCBVRDpHOjMyCisgICAgVG1wKiwgVG1wLCBBZGRyCisgICAg
VG1wKiwgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1N0cm9uZ0NBUzY0IFVEOkc6NjQsIFU6
Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCosIFRtcCwgQWRkcgorICAgIFRtcCosIFRtcCwgSW5kZXgK
KworeDg2OiBCcmFuY2hBdG9taWNTdHJvbmdDQVM4IFU6RzozMiwgVUQ6Rzo4LCBVOkc6OCwgVUQ6
Rzo4IC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEFkZHIKKyAgICBTdGF0dXND
b25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQnJhbmNoQXRvbWljU3Ryb25nQ0FTMTYgVTpH
OjMyLCBVRDpHOjE2LCBVOkc6MzIsIFVEOkc6MTYgL2JyYW5jaAorICAgIFN0YXR1c0NvbmQsIFRt
cCosIFRtcCwgQWRkcgorICAgIFN0YXR1c0NvbmQsIFRtcCosIFRtcCwgSW5kZXgKKworeDg2OiBC
cmFuY2hBdG9taWNTdHJvbmdDQVMzMiBVOkc6MzIsIFVEOkc6MzIsIFU6RzozMiwgVUQ6RzozMiAv
YnJhbmNoCisgICAgU3RhdHVzQ29uZCwgVG1wKiwgVG1wLCBBZGRyCisgICAgU3RhdHVzQ29uZCwg
VG1wKiwgVG1wLCBJbmRleAorCit4ODZfNjQ6IEJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0IFU6Rzoz
MiwgVUQ6Rzo2NCwgVTpHOjY0LCBVRDpHOjY0IC9icmFuY2gKKyAgICBTdGF0dXNDb25kLCBUbXAq
LCBUbXAsIEFkZHIKKyAgICBTdGF0dXNDb25kLCBUbXAqLCBUbXAsIEluZGV4CisKK3g4NjogQXRv
bWljQWRkOCBVOkc6OCwgVUQ6Rzo4CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJbmRleAorICAg
IFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNBZGQxNiBVOkc6MTYsIFVE
Okc6MTYKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAg
VG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FkZDMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwg
QWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4
Nl82NDogQXRvbWljQWRkNjQgVTpHOjY0LCBVRDpHOjY0CisgICAgSW1tLCBBZGRyCisgICAgSW1t
LCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNTdWI4
IFU6Rzo4LCBVRDpHOjgKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1N1YjE2IFU6RzoxNiwgVUQ6RzoxNgor
ICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIElu
ZGV4CisKK3g4NjogQXRvbWljU3ViMzIgVTpHOjMyLCBVRDpHOjMyCisgICAgSW1tLCBBZGRyCisg
ICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2XzY0OiBB
dG9taWNTdWI2NCBVOkc6NjQsIFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4
CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY0FuZDggVTpHOjgs
IFVEOkc6OAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAg
ICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljQW5kMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1t
LCBBZGRyCisgICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKwor
eDg2OiBBdG9taWNBbmQzMiBVOkc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0s
IEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY0Fu
ZDY0IFU6Rzo2NCwgVUQ6Rzo2NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBU
bXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4NjogQXRvbWljT3I4IFU6Rzo4LCBVRDpHOjgK
KyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJ
bmRleAorCit4ODY6IEF0b21pY09yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisg
ICAgSW1tLCBJbmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9t
aWNPcjMyIFU6RzozMiwgVUQ6RzozMgorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAg
ICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4Nl82NDogQXRvbWljT3I2NCBVOkc6NjQs
IFVEOkc6NjQKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBBZGRyCisg
ICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hvcjggVTpHOjgsIFVEOkc6OAorICAgIEltbSwg
QWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAsIEluZGV4CisKK3g4
NjogQXRvbWljWG9yMTYgVTpHOjE2LCBVRDpHOjE2CisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBJ
bmRleAorICAgIFRtcCwgQWRkcgorICAgIFRtcCwgSW5kZXgKKworeDg2OiBBdG9taWNYb3IzMiBV
Okc6MzIsIFVEOkc6MzIKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIEluZGV4CisgICAgVG1wLCBB
ZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1hvcjY0IFU6Rzo2NCwgVUQ6Rzo2
NAorICAgIEltbSwgQWRkcgorICAgIEltbSwgSW5kZXgKKyAgICBUbXAsIEFkZHIKKyAgICBUbXAs
IEluZGV4CisKK3g4NjogQXRvbWljTmVnOCBVRDpHOjgKKyAgICBBZGRyCisgICAgSW5kZXgKKwor
eDg2OiBBdG9taWNOZWcxNiBVRDpHOjE2CisgICAgQWRkcgorICAgIEluZGV4CisKK3g4NjogQXRv
bWljTmVnMzIgVUQ6RzozMgorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODZfNjQ6IEF0b21pY05l
ZzY0IFVEOkc6NjQKKyAgICBBZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOb3Q4IFVEOkc6
OAorICAgIEFkZHIKKyAgICBJbmRleAorCit4ODY6IEF0b21pY05vdDE2IFVEOkc6MTYKKyAgICBB
ZGRyCisgICAgSW5kZXgKKworeDg2OiBBdG9taWNOb3QzMiBVRDpHOjMyCisgICAgQWRkcgorICAg
IEluZGV4CisKK3g4Nl82NDogQXRvbWljTm90NjQgVUQ6Rzo2NAorICAgIEFkZHIKKyAgICBJbmRl
eAorCit4ODY6IEF0b21pY1hjaGdBZGQ4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBBZGRyCisg
ICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQxNiBVRDpHOjE2LCBVRDpHOjE2Cisg
ICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGdBZGQzMiBVRDpH
OjMyLCBVRDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0
b21pY1hjaGdBZGQ2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJ
bmRleAorCit4ODY6IEF0b21pY1hjaGc4IFVEOkc6OCwgVUQ6Rzo4CisgICAgVG1wLCBBZGRyCisg
ICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGcxNiBVRDpHOjE2LCBVRDpHOjE2CisgICAg
VG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODY6IEF0b21pY1hjaGczMiBVRDpHOjMyLCBV
RDpHOjMyCisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCit4ODZfNjQ6IEF0b21pY1hj
aGc2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBBZGRyCisgICAgVG1wLCBJbmRleAorCith
cm02NDogTG9hZExpbms4IFU6Rzo4LCBaRDpHOjgKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwg
VG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTggVTpHOjgsIFpEOkc6OAorICAgIEFkZHIsIFRtcAor
ICAgIEluZGV4LCBUbXAKKworIyBTdXBlciBjb25mdXNpbmcgZmFjdDogdGhpcyByZXR1cm5zIDAg
dG8gbWVhbiBzdWNjZXNzLCAxIHRvIG1lYW4gZmFpbHVyZS4KK2FybTY0OiBTdG9yZUNvbmQ4IFU6
Rzo4LCBEOkc6OCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwg
VG1wCisKK2FybTY0OiBTdG9yZUNvbmRSZWw4IFU6Rzo4LCBEOkc6OCwgRVpEOkc6OAorICAgIFRt
cCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGluazE2IFU6
RzoxNiwgWkQ6RzoxNgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IExv
YWRMaW5rQWNxMTYgVTpHOjE2LCBaRDpHOjE2CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRt
cAorCithcm02NDogU3RvcmVDb25kMTYgVTpHOjE2LCBEOkc6MTYsIEVaRDpHOjgKKyAgICBUbXAs
IEFkZHIsIFRtcAorICAgIFRtcCwgSW5kZXgsIFRtcAorCithcm02NDogU3RvcmVDb25kUmVsMTYg
VTpHOjE2LCBEOkc6MTYsIEVaRDpHOjgKKyAgICBUbXAsIEFkZHIsIFRtcAorICAgIFRtcCwgSW5k
ZXgsIFRtcAorCithcm02NDogTG9hZExpbmszMiBVOkc6MzIsIFpEOkc6MzIKKyAgICBBZGRyLCBU
bXAKKyAgICBJbmRleCwgVG1wCisKK2FybTY0OiBMb2FkTGlua0FjcTMyIFU6RzozMiwgWkQ6Rzoz
MgorICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZDMyIFU6
RzozMiwgRDpHOjMyLCBFWkQ6Rzo4CisgICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4
LCBUbXAKKworYXJtNjQ6IFN0b3JlQ29uZFJlbDMyIFU6RzozMiwgRDpHOjMyLCBFWkQ6Rzo4Cisg
ICAgVG1wLCBBZGRyLCBUbXAKKyAgICBUbXAsIEluZGV4LCBUbXAKKworYXJtNjQ6IExvYWRMaW5r
NjQgVTpHOjY0LCBaRDpHOjY0CisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCithcm02
NDogTG9hZExpbmtBY3E2NCBVOkc6NjQsIFpEOkc6NjQKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRl
eCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmQ2NCBVOkc6NjQsIEQ6Rzo2NCwgRVpEOkc6OAorICAg
IFRtcCwgQWRkciwgVG1wCisgICAgVG1wLCBJbmRleCwgVG1wCisKK2FybTY0OiBTdG9yZUNvbmRS
ZWw2NCBVOkc6NjQsIEQ6Rzo2NCwgRVpEOkc6OAorICAgIFRtcCwgQWRkciwgVG1wCisgICAgVG1w
LCBJbmRleCwgVG1wCisKK2FybTY0OiBEZXBlbmQzMiBVOkc6MzIsIEQ6RzozMgorICAgIFRtcCwg
VG1wCisKK2FybTY0OiBEZXBlbmQ2NCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wCiAKIENv
bXBhcmUzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCiAgICAgUmVsQ29uZCwgVG1w
LCBUbXAsIFRtcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6
ZUJsb2NrT3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkocmV2aXNpb24gMjEyOTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTc3LDYgKzE3NywxMCBAQCB2b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2Rl
JiBjb2RlKQogICAgICAgICBjYXNlIEJyYW5jaFN1YjY0OgogICAgICAgICBjYXNlIEJyYW5jaE5l
ZzMyOgogICAgICAgICBjYXNlIEJyYW5jaE5lZzY0OgorICAgICAgICBjYXNlIEJyYW5jaEF0b21p
Y1N0cm9uZ0NBUzg6CisgICAgICAgIGNhc2UgQnJhbmNoQXRvbWljU3Ryb25nQ0FTMTY6CisgICAg
ICAgIGNhc2UgQnJhbmNoQXRvbWljU3Ryb25nQ0FTMzI6CisgICAgICAgIGNhc2UgQnJhbmNoQXRv
bWljU3Ryb25nQ0FTNjQ6CiAgICAgICAgICAgICBpZiAoY29kZS5maW5kTmV4dEJsb2NrKGJsb2Nr
KSA9PSBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkgJiYgYnJhbmNoLmFyZ3NbMF0uaXNJbnZlcnRp
YmxlKCkpIHsKICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoYmxvY2stPnN1Y2Nlc3NvcigwKSwg
YmxvY2stPnN1Y2Nlc3NvcigxKSk7CiAgICAgICAgICAgICAgICAgYnJhbmNoLmFyZ3NbMF0gPSBi
cmFuY2guYXJnc1swXS5pbnZlcnRlZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNlLmNwcAkocmV2aXNpb24gMjEyOTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHZvaWQgcGFkSW50ZXJmZXJlbmNlKENvZGUm
IGNvZGUpCiAgICAgICAgICAgICAgICAgWyZdIChBcmcmLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywg
V2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OkVhcmx5WkRlZjoKICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vhcmx5RGVmID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6TGF0ZVVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDIxMjk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU1LDYgKzE1NSw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUp
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlQ29sZFVzZToKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OlNjcmF0Y2g6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJn
OjpFYXJseURlZjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5WkRlZjoKICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGNvZGUucmVnc0luUHJpb3JpdHlP
cmRlcihiYW5rKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3Jl
LmdldChyZWcpICYmICFzZXRBZnRlci5nZXQocmVnKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDIxMjk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsMTQgKzUxLDQ5IEBAIGNsYXNzIEFyZwogICAgICAgICBAYmFuayA9IGJh
bmsKICAgICAgICAgQHdpZHRoID0gd2lkdGgKICAgICBlbmQKLQotICAgIGRlZiB3aWR0aENvZGUK
KyAgICAKKyAgICBkZWYgc2VsZi53aWR0aENvZGUod2lkdGgpCiAgICAgICAgIGlmIHdpZHRoID09
ICJQdHIiCiAgICAgICAgICAgICAicG9pbnRlcldpZHRoKCkiCiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICJXaWR0aCN7d2lkdGh9IgogICAgICAgICBlbmQKICAgICBlbmQKKworICAgIGRlZiB3
aWR0aENvZGUKKyAgICAgICAgQXJnLndpZHRoQ29kZSh3aWR0aCkKKyAgICBlbmQKKyAgICAKKyAg
ICBkZWYgc2VsZi5yb2xlQ29kZShyb2xlKQorICAgICAgICBjYXNlIHJvbGUKKyAgICAgICAgd2hl
biAiVSIKKyAgICAgICAgICAgICJVc2UiCisgICAgICAgIHdoZW4gIkQiCisgICAgICAgICAgICAi
RGVmIgorICAgICAgICB3aGVuICJaRCIKKyAgICAgICAgICAgICJaRGVmIgorICAgICAgICB3aGVu
ICJVRCIKKyAgICAgICAgICAgICJVc2VEZWYiCisgICAgICAgIHdoZW4gIlVaRCIKKyAgICAgICAg
ICAgICJVc2VaRGVmIgorICAgICAgICB3aGVuICJVQSIKKyAgICAgICAgICAgICJVc2VBZGRyIgor
ICAgICAgICB3aGVuICJTIgorICAgICAgICAgICAgIlNjcmF0Y2giCisgICAgICAgIHdoZW4gIkVE
IgorICAgICAgICAgICAgIkVhcmx5RGVmIgorICAgICAgICB3aGVuICJFWkQiCisgICAgICAgICAg
ICAiRWFybHlaRGVmIgorICAgICAgICB3aGVuICJMVSIKKyAgICAgICAgICAgICJMYXRlVXNlIgor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbmQKKyAgICBlbmQKKyAg
ICAKKyAgICBkZWYgcm9sZUNvZGUKKyAgICAgICAgQXJnLnJvbGVDb2RlKHJvbGUpCisgICAgZW5k
CiBlbmQKIAogY2xhc3MgT3ZlcmxvYWQKQEAgLTE4Miw3ICsyMTcsNyBAQCBkZWYgbGV4KHN0ciwg
ZmlsZU5hbWUpCiBlbmQKIAogZGVmIGlzUm9sZSh0b2tlbikKLSAgICB0b2tlbiA9fiAvXEEoKFUp
fChEKXwoVUQpfChaRCl8KFVaRCl8KFVBKXwoUykpXFovCisgICAgdG9rZW4gPX4gL1xBKChVKXwo
RCl8KFVEKXwoWkQpfChVWkQpfChVQSl8KFMpfChFRCl8KEVaRCl8KExVKSlcWi8KIGVuZAogCiBk
ZWYgaXNHRih0b2tlbikKQEAgLTE5MCw3ICsyMjUsNyBAQCBkZWYgaXNHRih0b2tlbikKIGVuZAog
CiBkZWYgaXNLaW5kKHRva2VuKQotICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1t
KXwoQml0SW1tKXwoQml0SW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8
KERvdWJsZUNvbmQpKVxaLworICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwo
Qml0SW1tKXwoQml0SW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERv
dWJsZUNvbmQpfChTdGF0dXNDb25kKSlcWi8KIGVuZAogCiBkZWYgaXNBcmNoKHRva2VuKQpAQCAt
MjY0LDcgKzI5OSw3IEBAIGNsYXNzIFBhcnNlcgogCiAgICAgZGVmIGNvbnN1bWVLaW5kCiAgICAg
ICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwotICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBr
aW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVs
Q29uZCwgUmVzQ29uZCwgb3IgRG91YmxlQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAg
ICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdEltbSwgQml0
SW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIERvdWJsZUNvbmQsIG9y
IFN0YXR1c0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCiAgICAgICAgIGFkdmFuY2UKICAg
ICAgICAgcmVzdWx0CiAgICAgZW5kCkBAIC02MzQsMjggKzY2OSw3IEBAIHdyaXRlSCgiT3Bjb2Rl
VXRpbHMiKSB7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5l
YWNoX3dpdGhfaW5kZXggewogICAgICAgICAgICAgICAgIHwgYXJnLCBpbmRleCB8Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgcm9sZSA9IG5pbAotICAgICAgICAgICAgICAgIGNh
c2UgYXJnLnJvbGUKLSAgICAgICAgICAgICAgICB3aGVuICJVIgotICAgICAgICAgICAgICAgICAg
ICByb2xlID0gIlVzZSIKLSAgICAgICAgICAgICAgICB3aGVuICJEIgotICAgICAgICAgICAgICAg
ICAgICByb2xlID0gIkRlZiIKLSAgICAgICAgICAgICAgICB3aGVuICJaRCIKLSAgICAgICAgICAg
ICAgICAgICAgcm9sZSA9ICJaRGVmIgotICAgICAgICAgICAgICAgIHdoZW4gIlVEIgotICAgICAg
ICAgICAgICAgICAgICByb2xlID0gIlVzZURlZiIKLSAgICAgICAgICAgICAgICB3aGVuICJVWkQi
Ci0gICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlWkRlZiIKLSAgICAgICAgICAgICAgICB3
aGVuICJVQSIKLSAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VBZGRyIgotICAgICAgICAg
ICAgICAgIHdoZW4gIlMiCi0gICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiU2NyYXRjaCIKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAg
ICAgICAgZW5kCi0KLSAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1sje2lu
ZGV4fV0sIEFyZzo6I3tyb2xlfSwgI3thcmcuYmFua31QLCAje2FyZy53aWR0aENvZGV9KTsiCisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRleH1dLCBBcmc6OiN7
YXJnLnJvbGVDb2RlfSwgI3thcmcuYmFua31QLCAje2FyZy53aWR0aENvZGV9KTsiCiAgICAgICAg
ICAgICB9CiAgICAgICAgIGVuZAogICAgIH0KQEAgLTgxOSw2ICs4MzMsNyBAQCB3cml0ZUgoIk9w
Y29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgogICAgICAg
ICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCiAgICAgICAgICAgICAgICAgd2hlbiAiRG91YmxlQ29u
ZCIKKyAgICAgICAgICAgICAgICB3aGVuICJTdGF0dXNDb25kIgogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgIlVuZXhwZWN0ZWQga2luZDogI3traW5kLm5h
bWV9IgogICAgICAgICAgICAgICAgIGVuZApAQCAtMTEwNSw2ICsxMTIwLDggQEAgd3JpdGVIKCJP
cGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3Nb
I3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiRG91
YmxlQ29uZCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0u
YXNEb3VibGVDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICB3aGVuICJTdGF0dXNDb25kIgor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1N0YXR1c0Nv
bmRpdGlvbigpIgogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgfQogCkBAIC0xMTQ4
LDI3ICsxMTY1LDcgQEAgRmlsZS5vcGVuKCJKU0Fpcl9vcGNvZGUuanMiLCAidyIpIHsKICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToi
IGlmIG5lZWRPdmVybG9hZFN3aXRjaAogICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVy
ZS5lYWNoX3dpdGhfaW5kZXggewogICAgICAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXggfAot
ICAgICAgICAgICAgICAgICAgICByb2xlID0gbmlsCi0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
YXJnLnJvbGUKLSAgICAgICAgICAgICAgICAgICAgd2hlbiAiVSIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJvbGUgPSAiVXNlIgotICAgICAgICAgICAgICAgICAgICB3aGVuICJEIgotICAgICAg
ICAgICAgICAgICAgICAgICAgcm9sZSA9ICJEZWYiCi0gICAgICAgICAgICAgICAgICAgIHdoZW4g
IlpEIgotICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJaRGVmIgotICAgICAgICAgICAg
ICAgICAgICB3aGVuICJVRCIKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlRGVm
IgotICAgICAgICAgICAgICAgICAgICB3aGVuICJVWkQiCi0gICAgICAgICAgICAgICAgICAgICAg
ICByb2xlID0gIlVzZVpEZWYiCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gIlVBIgotICAgICAg
ICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VBZGRyIgotICAgICAgICAgICAgICAgICAgICB3
aGVuICJTIgotICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJTY3JhdGNoIgotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAg
ICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiaW5zdC52aXNpdEFyZygje2luZGV4fSwgZnVuYywgQXJnLiN7cm9sZX0s
ICN7YXJnLmJhbmt9UCwgI3thcmcud2lkdGh9KTsiCisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiaW5zdC52aXNpdEFyZygje2luZGV4fSwgZnVuYywgQXJnLiN7YXJnLnJvbGVDb2RlfSwg
I3thcmcuYmFua31QLCAje2FyZy53aWR0aH0pOyIKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMTI5OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
Myw5ICs0MTMsNiBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJv
b2wsIGR1bXBNb2R1bGVMb2FkaW5nU3RhdGUsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGJvb2wsIGV4cG9zZUludGVybmFsTW9kdWxlTG9hZGVyLCBmYWxzZSwgTm9ybWFsLCAiZXhw
b3NlIHRoZSBpbnRlcm5hbCBtb2R1bGUgbG9hZGVyIG9iamVjdCB0byB0aGUgZ2xvYmFsIHNwYWNl
IGZvciBkZWJ1Z2dpbmciKSBcCiAgICAgXAotICAgIHYoYm9vbCwgZHVtcEFpckFzSlNCZWZvcmVB
bGxvY2F0ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihib29sLCBkdW1w
QWlyQWZ0ZXJBbGxvY2F0ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgXAog
ICAgIHYoYm9vbCwgdXNlU3VwZXJTYW1wbGVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgXAogICAgIHYoYm9vbCwgcmVwb3J0TExJbnRTdGF0cywgZmFsc2UsIENvbmZpZ3VyYWJsZSwg
IlJlcG9ydHMgTExJbnQgc3RhdGlzdGljcyIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303170</attachid>
            <date>2017-03-01 20:52:47 -0800</date>
            <delta_ts>2017-03-02 14:06:53 -0800</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>299679</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTMyNjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMyBAQAogCQkwRjJDNjNCMDFFNjBB
RTQzMDBDMTM4MzkgLyogQjNCYW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi87IH07
CiAJCTBGMkM2M0IxMUU2MEFFNDUwMEMxMzgzOSAvKiBCM1dpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0FEMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM1dpZHRoLmNwcCAqLzsgfTsKIAkJMEYyQzYzQjIxRTYwQUU0NzAwQzEzODM5IC8qIEIz
V2lkdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM2M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi87IH07CisJCTBGMkM2M0I2MUU2
MzQzRUEwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0
b21pY1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRv
bWljVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkM2M0I0MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi87IH07CisJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQjUxRTYz
NDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCOTFFNjM0NDA4
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRjJDNjNCQzFF
NjM0NDBDMDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0JBMUU2MzQ0MDgwMEMxMzgzOSAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkwRjJDNjNDMDFFNjYwRUE3MDBDMTM4
MzkgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNCRjFFNjYwRUE1MDBDMTM4MzkgLyogQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGMkM2M0MyMUU2NjRBNUMwMEMxMzgzOSAv
KiBCM05hdGl2ZVRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQzYzQzExRTY2NEE1QTAwQzEzODM5IC8qIEIzTmF0aXZlVHJhaXRzLmggKi87
IH07CiAJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERCMTk4MzJE
MzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCAqLzsgfTsKIAkJMEYyRDREREUxOTgzMkQz
NDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkQ0RERDMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNj
b3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYyRDRERTgxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJENERFNTE5ODMyREFDMDA3RDRC
MTkgLyogVG9UaGlzU3RhdHVzLmNwcCAqLzsgfTsKQEAgLTIyNDUsOCArMjI1Miw2IEBACiAJCURD
MjE0MzA4MUNBMzJFNTgwMDBBODg2OSAvKiBJQ1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMjE0MzA1MUNBMzJFNTIwMDBBODg2OSAvKiBJ
Q1N0YXRzLmNwcCAqLzsgfTsKIAkJREMzRDJCMEExRDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzNEMkIw
OTFEMzQzMTYxMDBCQTkxOEMgLyogSGVhcENlbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEQzNEMkIwQzFEMzQzNzcwMDBCQTkxOEMgLyogSGVh
cENlbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
REMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8qIEhlYXBDZWxsLmNwcCAqLzsgfTsKLQkJREM0NTRC
OEMxRDAwRTgyMjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNDU0QjhBMUQwMEU4MUYwMDRDMThBRiAvKiBB
aXJEdW1wQXNKUy5jcHAgKi87IH07Ci0JCURDNDU0QjhEMUQwMEU4MjQwMDRDMThBRiAvKiBBaXJE
dW1wQXNKUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
REM0NTRCOEIxRDAwRTgxRjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmggKi87IH07CiAJCURDNjA1
QjVEMUNFMjZFQTAwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjU5MUNFMjZFOTgwMDU5MzcxOCAv
KiBQcm9maWxlckV2ZW50LmNwcCAqLzsgfTsKIAkJREM2MDVCNUUxQ0UyNkVBMjAwNTkzNzE4IC8q
IFByb2ZpbGVyRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IERDNjA1QjVBMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREM2MDVCNUYxQ0Uy
NkVBNTAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjA1QjVCMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxl
clVJRC5jcHAgKi87IH07CkBAIC0yNzcxLDYgKzI3NzYsMTMgQEAKIAkJMEYyQzYzQUMxRTYwQUUz
QzAwQzEzODM5IC8qIEIzQmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M0JhbmsuaDsgcGF0aCA9IGIzL0IzQmFuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjJDNjNBRDFFNjBBRTNDMDBDMTM4MzkgLyogQjNXaWR0aC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dpZHRoLmNwcDsgcGF0aCA9IGIzL0IzV2lkdGguY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNjNBRTFFNjBBRTNEMDBDMTM4Mzkg
LyogQjNXaWR0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dpZHRoLmg7
IHBhdGggPSBiMy9CM1dpZHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2
M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQXRvbWljVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBdG9t
aWNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0I0MUU2MzQz
RTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzQXRvbWljVmFsdWUuaDsgcGF0aCA9IGIzL0IzQXRvbWljVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2Vu
ZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0dlbmVyaWNCbG9ja0lu
c2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDNjNCOTFFNjM0
NDA4MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMv
YWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBh
dGggPSBiMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQzYzQkYxRTY2MEVBNTAwQzEzODM5IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0MxMUU2
NjRBNUEwMEMxMzgzOSAvKiBCM05hdGl2ZVRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM05hdGl2ZVRyYWl0cy5oOyBwYXRoID0gYjMvQjNOYXRpdmVUcmFpdHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRDREREIxOTgzMkQzNDAwN0Q0QjE5IC8q
IERlYnVnZ2VyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGVidWdnZXJTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkQ0RERD
MTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlYnVnZ2VyU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyRDREREYxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXJMb2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNDc4Nyw4ICs0Nzk5LDYgQEAKIAkJREMyMTQzMDYxQ0EzMkU1MjAwMEE4ODY5IC8q
IElDU3RhdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSUNTdGF0cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzNEMkIwOTFEMzQzMTYxMDBCQTkxOEMgLyog
SGVhcENlbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcENlbGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8q
IEhlYXBDZWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBD
ZWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJREM0NTRCOEExRDAwRTgxRjAw
NEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEFpckR1bXBBc0pTLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJEdW1wQXNKUy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURDNDU0QjhCMUQwMEU4MUYwMDRDMThBRiAvKiBB
aXJEdW1wQXNKUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJEdW1wQXNK
Uy5oOyBwYXRoID0gYjMvYWlyL0FpckR1bXBBc0pTLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCURDNjA1QjU5MUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyRXZlbnQuY3BwOyBwYXRo
ID0gcHJvZmlsZXIvUHJvZmlsZXJFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCURDNjA1QjVBMUNFMjZFOTgwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyRXZlbnQuaDsgcGF0aCA9IHByb2ZpbGVy
L1Byb2ZpbGVyRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREM2MDVCNUIx
Q0UyNkU5ODAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyVUlELmNwcDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVy
VUlELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUzMDYsNiArNTMxNiw4IEBA
CiAJCQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKIAkJCQkwRkVDODRCNDFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEYyQzYz
QjMxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3BwICovLAorCQkJCTBGMkM2M0I0
MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggKi8sCiAJCQkJMEYyQzYzQUIxRTYw
QUUzQzAwQzEzODM5IC8qIEIzQmFuay5jcHAgKi8sCiAJCQkJMEYyQzYzQUMxRTYwQUUzQzAwQzEz
ODM5IC8qIEIzQmFuay5oICovLAogCQkJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suY3BwICovLApAQCAtNTM2OCw2ICs1MzgwLDcgQEAKIAkJCQkwRkVDODRDRDFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLywKIAkJCQkwRkVDODRDRTFCREFD
REFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8sCiAJCQkJMEZFQzg0Q0YxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzR2VuZXJhdGUuaCAqLywKKwkJCQkwRjJDNjNCNTFFNjM0M0U4MDBDMTM4Mzkg
LyogQjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRkVDODREMDFCREFDREFD
MDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1QkYx
QkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCAqLywKIAkJCQkwRkVDODVDMDFCRTE2
N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuaCAqLywKQEAgLTUzOTIsNiArNTQwNSw3IEBACiAJ
CQkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLywKIAkJCQkw
RjMzOEUwMzFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmNwcCAqLywKIAkJCQkw
RjMzOEUwNDFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggKi8sCisJCQkJMEYy
QzYzQzExRTY2NEE1QTAwQzEzODM5IC8qIEIzTmF0aXZlVHJhaXRzLmggKi8sCiAJCQkJMEYzMzhF
MDUxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0LmggKi8sCiAJCQkJMEYzMzhF
MDYxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5jcHAgKi8sCiAJCQkJMEYz
MzhFMDcxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5oICovLApAQCAtNTQ4
Myw2ICs1NDk3LDggQEAKIAkJCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5s
aW5lcy5oICovLAogCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2Nr
LmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5o
ICovLAorCQkJCTBGMkM2M0I5MUU2MzQ0MDgwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNl
dC5jcHAgKi8sCisJCQkJMEYyQzYzQkExRTYzNDQwODAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0
aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29y
a2xpc3QuaCAqLywKIAkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdD
b252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmggKi8sCkBAIC01NDk0LDggKzU1MTAsNiBAQAogCQkJCTBGMTBGMUEy
MUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCAqLywKIAkJCQk3OUFCQjE3QjFFNUNDQjU3
MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmNwcCAqLywKIAkJCQk3OUFCQjE3QzFFNUNDQjU3
MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmggKi8sCi0JCQkJREM0NTRCOEExRDAwRTgxRjAw
NEMxOEFGIC8qIEFpckR1bXBBc0pTLmNwcCAqLywKLQkJCQlEQzQ1NEI4QjFEMDBFODFGMDA0QzE4
QUYgLyogQWlyRHVtcEFzSlMuaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyog
QWlyRWxpbWluYXRlRGVhZENvZGUuY3BwICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYy
OSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oICovLAogCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5jcHAgKi8sCkBAIC03MzQ1LDYgKzczNTksNyBAQAogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRjFGRTUxQjE5MjJBM0JDMDA2
OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLywKKwkJCQkwRjJDNjNCRjFFNjYwRUE1MDBDMTM4Mzkg
LyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAgKi8sCiAJCQkJODYwMTYxREYwRjNBODNDMTAw
Rjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCAqLywKIAkJCQkwRjM3MzA5MDFDMENE
NzBDMDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggKi8sCiAJCQkJ
ODY0MDkyM0IxNTZFRUQzQjAwNTY2Q0IyIC8qIEFSTTY0QXNzZW1ibGVyLmggKi8sCkBAIC03Mzcz
LDggKzczODgsOCBAQAogCQkJCTg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2Vt
Ymxlck1JUFMuaCAqLywKIAkJCQlGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmNwcCAqLywKIAkJCQlGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyogTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmggKi8sCi0JCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi8sCisJCQkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJQTdBNEFFMDcxNzk3M0IyNjAwNTYxMkIx
IC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLywKIAkJCQk4NjAxNjFFMjBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3NzE4
NUE4RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywKQEAg
LTc5NjQsNyArNzk3OSw2IEBACiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckND
YWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTBGMUEzMUM0MjBCRjAwMDFDMDdE
MiAvKiBBaXJDdXN0b20uaCBpbiBIZWFkZXJzICovLAotCQkJCURDNDU0QjhEMUQwMEU4MjQwMDRD
MThBRiAvKiBBaXJEdW1wQXNKUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NTcwMzkxQkU0NEM5
MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjYxODMyRDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTc5NzcsNiArNzk5MSw3IEBACiAJCQkJMEZFQzg1ODAxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTgxMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3
RDcxRDlEQzQ0MjAwMUI5ODI1IC8qIEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkM2
M0JDMUU2MzQ0MEMwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjY4NEQ0MzgxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQ
cmVzc3VyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDY4LDYgKzgwODMs
NyBAQAogCQkJCTQzNDIyQTYzMUMxNThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQ
dHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8q
IEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQzYzQjgxRTYzNDNG
NzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjMzOEUwRTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYzM0ZDRkMxQzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2QjhBRDkxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRl
VGFpbHMuaCBpbiBIZWFkZXJzICovLApAQCAtODI1OCw2ICs4Mjc0LDcgQEAKIAkJCQlBNzdBNDIz
RTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJDNjNDMjFFNjY0QTVD
MDBDMTM4MzkgLyogQjNOYXRpdmVUcmFpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3
MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAy
QzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywK
QEAgLTgzODgsNiArODQwNSw3IEBACiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERG
R09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdG
NTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
MzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQzYzQjcxRTYzNDNFRDAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3
MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKQEAgLTk4MTcsNiArOTgz
NSw3IEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJ
CQkJMEZGQTU0OTcxNkI4ODM1MDAwQjNBOTgyIC8qIEE2NERPcGNvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYyQzYzQzAxRTY2MEVBNzAwQzEzODM5IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUQ0OTM3QzMxRERCRTYxNDAwNzdDODA3IC8qIEFi
c3RyYWN0TW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVGMEY0MTREMTA2
MzkwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzNzBCNEY1
MUJGMjYyMDIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRCYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTgyNyw3ICs5ODQ2LDYgQEAKIAkJCQkwRkVD
ODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJREM0NTRCOEMxRDAwRTgyMjAwNEMxOEFGIC8qIEFpckR1bXBBc0pTLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDU3MDM4MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYxODMyQzFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0REUxQ0Ux
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0xMDI3NCw2ICsxMDI5Miw3IEBACiAJCQkJOUU3Mjk0MDcxOTBGMDFBNTAwMUE5MUI1IC8q
IEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QjcxODVC
OEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEYyQzYzQjYxRTYzNDNFQTAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVk
U2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1
QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQw
RTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTEwMjkyLDYgKzEwMzExLDcgQEAKIAkJCQlFMzVFMDM1RjFCN0FCNDNFMDA3M0FE
MkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MzI0MzhCMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRCNjExODgwOURENTAwNjhBNDZEIC8qIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJDNjNCQjFFNjM0NDBB
MDBDMTM4MzkgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU1MTY1RDIxQkRGMEI5ODAwM0I3NUMxIC8qIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3Bl
Y3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdB
NDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiIC8vIEhhdmUgdG8g
YnJlYWsgd2l0aCBzdHlsZSBiZWNhdXNlIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpcyBhIHNo
YWR5IGhlYWRlci4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBYnN0cmFjdE1hY3JvQXNzZW1i
bGVyQmFzZTo6U3RhdHVzQ29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmRp
dGlvbikgeworICAgIGNhc2UgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJhc2U6OlN1Y2Nlc3M6Cisg
ICAgICAgIG91dC5wcmludCgiU3VjY2VzcyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyQmFzZTo6RmFpbHVyZToKKyAgICAgICAgb3V0LnByaW50KCJG
YWlsdXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMzI2MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMiwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHd0
Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9tLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
NTAsOCArNTEsMjggQEAgbmFtZXNwYWNlIERGRyB7CiBzdHJ1Y3QgT1NSRXhpdDsKIH0KIAorY2xh
c3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJhc2UgeworcHVibGljOgorICAgIGVudW0gU3RhdHVz
Q29uZGl0aW9uIHsKKyAgICAgICAgU3VjY2VzcywKKyAgICAgICAgRmFpbHVyZQorICAgIH07Cisg
ICAgCisgICAgc3RhdGljIFN0YXR1c0NvbmRpdGlvbiBpbnZlcnQoU3RhdHVzQ29uZGl0aW9uIGNv
bmRpdGlvbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7CisgICAgICAgIGNh
c2UgU3VjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBGYWlsdXJlOworICAgICAgICBjYXNlIEZh
aWx1cmU6CisgICAgICAgICAgICByZXR1cm4gU3VjY2VzczsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gU3VjY2VzczsKKyAg
ICB9Cit9OworCiB0ZW1wbGF0ZSA8Y2xhc3MgQXNzZW1ibGVyVHlwZSwgY2xhc3MgTWFjcm9Bc3Nl
bWJsZXJUeXBlPgotY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlciB7CitjbGFzcyBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJCYXNlIHsKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZSwg
TWFjcm9Bc3NlbWJsZXJUeXBlPiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyVHlwZTsKICAgICB0eXBl
ZGVmIEFzc2VtYmxlclR5cGUgQXNzZW1ibGVyVHlwZV9UOwpAQCAtMTEwOCwzICsxMTI5LDE2IEBA
IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZSwgTWEKICNlbmRpZiAvLyBFTkFC
TEUoQVNTRU1CTEVSKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKKworI2lmIEVOQUJMRShBU1NFTUJM
RVIpCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlckJh
c2U6OlN0YXR1c0NvbmRpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEFTU0VNQkxFUikKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjEzMjYxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMi0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTM2LDYgKzEzNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IHR3b1RvVGhlMzI7IC8vIFRoaXMgaXMgc3VwZXIgdXNlZnVsIGZvciBzb21lIGRvdWJsZSBjb2Rl
LgogCiAgICAgLy8gVXRpbGl0aWVzIHVzZWQgYnkgdGhlIERGRyBKSVQuCisgICAgdXNpbmcgQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlckJhc2U6OmludmVydDsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxl
ckJhc2U6OmludmVydDsKICAgICAKICAgICBzdGF0aWMgRG91YmxlQ29uZGl0aW9uIGludmVydChE
b3VibGVDb25kaXRpb24gY29uZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDIx
MzI2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3MSw2ICsxNzEsMTEgQEAgcHVi
bGljOgogICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBk
ZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZDMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfbXIoc3JjLm9mZnNldCwgc3Jj
LmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIGFk
ZDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CkBAIC0yNTEsMTYgKzI1
Niw3MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgc3Jj
LCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcm0oc3Jj
LCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZDE2KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7
CisgICAgfQorCisgICAgdm9pZCBhbmQxNihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmR3X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRl
c3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ4
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5hbmRiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmQ4KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmFuZGJfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4
LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIGFuZDMyKEFkZHJlc3Mgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX21yKHNyYy5vZmZz
ZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDMyKEJhc2VJbmRleCBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfbXIo
c3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9
CisKICAgICB2b2lkIGFuZDMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKICAg
ICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgYW5kMzIoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRs
X2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDE2KFRydXN0ZWRJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHdf
aW0oc3RhdGljX2Nhc3Q8aW50MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kd19pbShzdGF0
aWNfY2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgYW5k
OChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5hbmRiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDgoVHJ1c3RlZElt
bTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5h
bmRiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAg
ICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBk
ZXN0KQogICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC00NTYsNiArNTE2LDMxIEBA
IHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubmVnbF9tKHNyY0Rlc3Qub2Zmc2V0LCBzcmNE
ZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgbmVnMzIoQmFzZUluZGV4IHNyY0Rlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWdsX20oc3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3Qu
YmFzZSwgc3JjRGVzdC5pbmRleCwgc3JjRGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBu
ZWcxNihBZGRyZXNzIHNyY0Rlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWd3X20o
c3JjRGVzdC5vZmZzZXQsIHNyY0Rlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBuZWcxNihC
YXNlSW5kZXggc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZ3dfbShzcmNE
ZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlLCBzcmNEZXN0LmluZGV4LCBzcmNEZXN0LnNjYWxlKTsK
KyAgICB9CisKKyAgICB2b2lkIG5lZzgoQWRkcmVzcyBzcmNEZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubmVnYl9tKHNyY0Rlc3Qub2Zmc2V0LCBzcmNEZXN0LmJhc2UpOworICAgIH0K
KworICAgIHZvaWQgbmVnOChCYXNlSW5kZXggc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm5lZ2JfbShzcmNEZXN0Lm9mZnNldCwgc3JjRGVzdC5iYXNlLCBzcmNEZXN0LmluZGV4
LCBzcmNEZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9ycihzcmMs
IGRlc3QpOwpAQCAtNDcxLDE2ICs1NTYsNzEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxl
ci5vcmxfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKKyAgICB2b2lk
IG9yMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIub3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwg
ZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjE2KFJlZ2lzdGVySUQgc3JjLCBBZGRy
ZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcndfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMTYoUmVnaXN0ZXJJRCBzcmMs
IEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X3JtKHNyYywg
ZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQor
CisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAg
IH0KKworICAgIHZvaWQgb3I4KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2Us
IGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgb3IzMihBZGRyZXNz
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX21y
KHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIG9yMzIoQmFz
ZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7
CisgICAgfQorCiAgICAgdm9pZCBvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVz
cykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9pbShpbW0ubV92YWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjMyKFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMTYoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3
X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3J3X2ltKHN0YXRp
Y19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBvcjgo
VHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIub3JiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIg
aW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9p
bShzdGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCiAgICAgdm9p
ZCBvcjMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC02NTQsMTYgKzc5NCw3MSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3ViMTYoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19p
bShzdGF0aWNfY2FzdDxpbnQxNl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UpOworICAgIH0KKworICAgIHZvaWQgc3ViOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX2ltKHN0YXRpY19j
YXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
KyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9pbShpbW0ubV92YWx1ZSwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7
CisgICAgfQorCisgICAgdm9pZCBzdWIxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YndfaW0oc3RhdGljX2Nhc3Q8aW50
MTZfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjgoVHJ1c3RlZElt
bTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5z
dWJiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAg
ICB2b2lkIHN1YjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAg
ICBtX2Fzc2VtYmxlci5zdWJsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9
CiAKKyAgICB2b2lkIHN1YjMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5p
bmRleCwgc3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIHN1YjMyKFJlZ2lzdGVy
SUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX3Jt
KHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdWIxNihS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c3Vid19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQg
c3ViOChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc3ViYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAg
IHZvaWQgc3ViMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuc3VibF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3Qu
aW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgc3ViMTYoUmVnaXN0ZXJJRCBz
cmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vid19ybShz
cmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAg
IH0KKworICAgIHZvaWQgc3ViOChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5zdWJiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9pZCB4b3IzMihSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
eG9ybF9ycihzcmMsIGRlc3QpOwpAQCAtNjc3LDYgKzg3Miw1MCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci54b3JsX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjMyKFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRl
eCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubm90bF9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgs
IGRlc3Quc2NhbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3Js
X2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0
LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJl
c3MgZGVzdCkKKyAgICB7CisgICAgICAgIGltbS5tX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50MTZf
dD4oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gLTEpCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5ub3R3X20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcndfaW0oaW1tLm1fdmFsdWUsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9yMTYoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBpbW0ubV92YWx1ZSA9IHN0YXRp
Y19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09
IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci54b3J3X2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBk
ZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgaW1tLm1fdmFsdWUgPSBzdGF0
aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09
IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm90Yl9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJh
c2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JiX2ltKGltbS5t
X3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjgo
VHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBpbW0ubV92
YWx1ZSA9IHN0YXRpY19jYXN0PGludDhfdD4oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoaW1t
Lm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3RiX20oZGVzdC5vZmZz
ZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmJfaW0oaW1tLm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBk
ZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgeG9y
MzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYg
KGltbS5tX3ZhbHVlID09IC0xKQpAQCAtNjkwLDExICs5MjksNDEgQEAgcHVibGljOgogICAgICAg
ICBtX2Fzc2VtYmxlci54b3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAg
fQogCisgICAgdm9pZCB4b3IzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci54b3JsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFz
ZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCB4b3IxNihSZWdp
c3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9y
d19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9y
MTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIueG9yd19ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRl
c3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywgQWRkcmVz
cyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yYl9ybShzcmMsIGRlc3Qub2Zm
c2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9yOChSZWdpc3RlcklEIHNyYywg
QmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JiX3JtKHNyYywg
ZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQor
CiAgICAgdm9pZCB4b3IzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAg
ICAgICAgbV9hc3NlbWJsZXIueG9ybF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CiAg
ICAgfQogICAgIAorICAgIHZvaWQgeG9yMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9tcihzcmMub2Zmc2V0LCBzcmMuYmFz
ZSwgc3JjLmluZGV4LCBzcmMuc2NhbGUsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIHhv
cjMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAg
IHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCkBAIC03NDEsNiArMTAxMCwzMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vdGxfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdDMyKEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm90bF9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Qu
c2NhbGUpOworICAgIH0KKworICAgIHZvaWQgbm90MTYoQWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubm90d19tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0K
KworICAgIHZvaWQgbm90MTYoQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3R3X20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2Fs
ZSk7CisgICAgfQorCisgICAgdm9pZCBub3Q4KEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5vdGJfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAgICB9CisKKyAg
ICB2b2lkIG5vdDgoQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5u
b3RiX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7Cisg
ICAgfQorCiAgICAgdm9pZCBzcXJ0RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJ
RCBkc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zcXJ0c2RfcnIoc3JjLCBkc3QpOwpA
QCAtMTA3MSw0MiArMTM2NSwyMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0b3JlMTYoUmVnaXN0
ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQogICAgIHsKLSNpZiBDUFUoWDg2KQotICAgICAg
ICAvLyBPbiAzMi1iaXQgeDg2IHdlIGNhbiBvbmx5IHN0b3JlIGZyb20gdGhlIGZpcnN0IDQgcmVn
aXN0ZXJzOwotICAgICAgICAvLyBlc3AuLmVkaSBhcmUgbWFwcGVkIHRvIHRoZSAnaCcgcmVnaXN0
ZXJzIQotICAgICAgICBpZiAoc3JjID49IDQpIHsKLSAgICAgICAgICAgIC8vIFBpY2sgYSB0ZW1w
b3JhcnkgcmVnaXN0ZXIuCi0gICAgICAgICAgICBSZWdpc3RlcklEIHRlbXAgPSBnZXRVbnVzZWRS
ZWdpc3RlcihhZGRyZXNzKTsKLQotICAgICAgICAgICAgLy8gU3dhcCB0byB0aGUgdGVtcG9yYXJ5
IHJlZ2lzdGVyIHRvIHBlcmZvcm0gdGhlIHN0b3JlLgotICAgICAgICAgICAgc3dhcChzcmMsIHRl
bXApOwotICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d19ybSh0ZW1wLCBhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKLSAgICAgICAg
ICAgIHN3YXAoc3JjLCB0ZW1wKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2Vu
ZGlmCiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdndfcm0oc3JjLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKICAgICB9CiAKICAgICB2
b2lkIHN0b3JlMTYoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0jaWYg
Q1BVKFg4NikKLSAgICAgICAgLy8gT24gMzItYml0IHg4NiB3ZSBjYW4gb25seSBzdG9yZSBmcm9t
IHRoZSBmaXJzdCA0IHJlZ2lzdGVyczsKLSAgICAgICAgLy8gZXNwLi5lZGkgYXJlIG1hcHBlZCB0
byB0aGUgJ2gnIHJlZ2lzdGVycyEKLSAgICAgICAgaWYgKHNyYyA+PSA0KSB7Ci0gICAgICAgICAg
ICAvLyBQaWNrIGEgdGVtcG9yYXJ5IHJlZ2lzdGVyLgotICAgICAgICAgICAgUmVnaXN0ZXJJRCB0
ZW1wID0gZ2V0VW51c2VkUmVnaXN0ZXIoYWRkcmVzcyk7Ci0KLSAgICAgICAgICAgIC8vIFN3YXAg
dG8gdGhlIHRlbXBvcmFyeSByZWdpc3RlciB0byBwZXJmb3JtIHRoZSBzdG9yZS4KLSAgICAgICAg
ICAgIHN3YXAoc3JjLCB0ZW1wKTsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdndfcm0odGVt
cCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7Ci0gICAgICAgICAgICBzd2FwKHNyYywg
dGVtcCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgogICAgICAgICBt
X2Fzc2VtYmxlci5tb3Z3X3JtKHNyYywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAg
ICAgfQogCisgICAgdm9pZCBzdG9yZTE2KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92d19pbShzdGF0aWNfY2FzdDxpbnQx
Nl90PihpbW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
aW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUxNihUcnVzdGVk
SW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5t
b3Z3X2ltKHN0YXRpY19jYXN0PGludDE2X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSk7CisgICAgfQogCiAgICAgLy8gRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9u
OgogICAgIC8vCkBAIC0yNzQzLDc0ICszMDE4LDgzOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX2ltKDAsIDAsIFg4NlJlZ2lz
dGVyczo6ZXNwKTsKICAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM4KFN0YXR1
c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklE
IG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsm
XSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsgfSk7CisgICAgfQogCi0gICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhh
dCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9ybWFsIHN0b3Jlcy4gU28sIGl0J3MgYSBuby1vcCBv
biB4ODYuCi0gICAgdm9pZCBzdG9yZUZlbmNlKCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzgo
U3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKICAg
ICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhjb25kLCBleHBlY3RlZEFuZFJlc3VsdCwgcmVz
dWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZz
ZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOwogICAg
IH0KIAotICAgIC8vIFdlIHRha2UgdGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVudHMgbW90aW9u
IG9mIG5vcm1hbCBsb2Fkcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4ODYuCi0gICAgdm9pZCBsb2Fk
RmVuY2UoKQorICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgeworICAgICAgICBhdG9taWNTdHJv
bmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIu
Y21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOyB9KTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFi
ZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAg
dm9pZCBhdG9taWNTdHJvbmdDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBl
eHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3Ms
IFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBsYWNl
V2l0aEp1bXAoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCBkZXN0aW5hdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4
cGVjdGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3JtKG5l
d1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsgfSk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgbWF4SnVt
cFJlcGxhY2VtZW50U2l6ZSgpCisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0Nv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5l
d1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFg4NkFzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpOworICAgICAg
ICBhdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsg
bV9hc3NlbWJsZXIuY21weGNoZ2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UpOyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IHBhdGNoYWJsZUp1bXBT
aXplKCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5k
ZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1bHQpCiAgICAgewotICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjpwYXRjaGFibGVKdW1wU2l6ZSgpOworICAgICAgICBhdG9taWNTdHJvbmdDQVMo
Y29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIHJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNo
Z2xfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5k
ZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c0Zsb2F0aW5nUG9pbnRSb3VuZGluZygpCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM4KFJlZ2lz
dGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRk
cmVzcykKICAgICB7Ci0gICAgICAgIGlmIChzX3NzZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVj
a1N0YXRlOjpOb3RDaGVja2VkKQotICAgICAgICAgICAgdXBkYXRlRWF4MUVjeEZsYWdzKCk7Ci0g
ICAgICAgIHJldHVybiBzX3NzZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVja1N0YXRlOjpTZXQ7
CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3Nl
bWJsZXIuY21weGNoZ2Jfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Up
OyB9KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FWWCgpCisgICAgdm9pZCBh
dG9taWNTdHJvbmdDQVM4KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQg
bmV3VmFsdWUsIEJhc2VJbmRleCBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgLy8gQVZYIHN0aWxs
IGNhdXNlcyBteXN0ZXJpb3VzIHJlZ3Jlc3Npb25zIGFuZCB0aG9zZSByZWdyZXNzaW9ucyBjYW4g
YmUgbWFzc2l2ZS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdG9taWNTdHJvbmdD
QVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdiX3JtKG5ld1Zh
bHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsgfSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdXBkYXRlRWF4MUVjeEZsYWdz
KCkKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0gICAgICAg
IGludCBmbGFncyA9IDA7Ci0jaWYgQ09NUElMRVIoTVNWQykKLSAgICAgICAgaW50IGNwdUluZm9b
NF07Ci0gICAgICAgIF9fY3B1aWQoY3B1SW5mbywgMHgxKTsKLSAgICAgICAgZmxhZ3MgPSBjcHVJ
bmZvWzJdOwotI2VsaWYgQ09NUElMRVIoR0NDX09SX0NMQU5HKQotI2lmIENQVShYODZfNjQpCi0g
ICAgICAgIGFzbSAoCi0gICAgICAgICAgICAibW92bCAkMHgxLCAlJWVheDsiCi0gICAgICAgICAg
ICAiY3B1aWQ7IgotICAgICAgICAgICAgIm1vdmwgJSVlY3gsICUwOyIKLSAgICAgICAgICAgIDog
Ij1nIiAoZmxhZ3MpCi0gICAgICAgICAgICA6Ci0gICAgICAgICAgICA6ICIlZWF4IiwgIiVlYngi
LCAiJWVjeCIsICIlZWR4IgotICAgICAgICAgICAgKTsKLSNlbHNlCi0gICAgICAgIGFzbSAoCi0g
ICAgICAgICAgICAibW92bCAkMHgxLCAlJWVheDsiCi0gICAgICAgICAgICAicHVzaGwgJSVlYng7
IgotICAgICAgICAgICAgImNwdWlkOyIKLSAgICAgICAgICAgICJwb3BsICUlZWJ4OyIKLSAgICAg
ICAgICAgICJtb3ZsICUlZWN4LCAlMDsiCi0gICAgICAgICAgICA6ICI9ZyIgKGZsYWdzKQotICAg
ICAgICAgICAgOgotICAgICAgICAgICAgOiAiJWVheCIsICIlZWN4IiwgIiVlZHgiCi0gICAgICAg
ICAgICApOwotI2VuZGlmCisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3Vs
dCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3dfcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1N0cm9uZ0NBUzE2
KFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5k
UmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdWYWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOwor
ICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMzIoUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTKGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxl
ci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0p
OworICAgIH0KKworICAgIHZvaWQgYXRvbWljU3Ryb25nQ0FTMzIoUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNz
ZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hBdG9taWNTdHJvbmdDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRv
bWljU3Ryb25nQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVz
dWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnYl9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZz
ZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdD
QVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGd3X3Jt
KG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTKGNv
bmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hnd19ybShuZXdW
YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIo
U3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lz
dGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBi
cmFuY2hBdG9taWNTdHJvbmdDQVMoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIFsmXSB7IG1fYXNz
ZW1ibGVyLmNtcHhjaGdsX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
KTsgfSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBdG9taWNTdHJvbmdDQVMzMihTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNo
QXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxl
ci5jbXB4Y2hnbF9ybShuZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7IH0pOworICAgIH0KKworICAgIHZvaWQgYXRvbWlj
V2Vha0NBUzgoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgZXhwZWN0ZWRBbmRSZXN1
bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZXN1
bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVM4KGNvbmQsIGV4cGVjdGVkQW5kUmVz
dWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21p
Y1dlYWtDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVz
dWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBy
ZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVM4KGNvbmQsIGV4cGVjdGVkQW5k
UmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0
b21pY1dlYWtDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFu
ZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklE
IHJlc3VsdCkKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUzE2KGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lk
IGF0b21pY1dlYWtDQVMxNihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lz
dGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMTYoY29uZCwgZXhw
ZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAg
IHZvaWQgYXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4
cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJl
Z2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTMzIoY29uZCwg
ZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKwor
ICAgIHZvaWQgYXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVz
cywgUmVnaXN0ZXJJRCByZXN1bHQpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMzMihj
b25kLCBleHBlY3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MsIHJlc3VsdCk7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2hBdG9taWNXZWFrQ0FTOChTdGF0dXNDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzgo
Y29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM4KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVM4KGNvbmQs
IGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2hBdG9taWNXZWFrQ0FTMTYoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
ZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBl
Y3RlZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoQXRvbWljV2Vha0NBUzE2KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVj
dGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXggYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIHJldHVybiBicmFuY2hBdG9taWNTdHJvbmdDQVMxNihjb25kLCBleHBlY3Rl
ZEFuZFJlc3VsdCwgbmV3VmFsdWUsIGFkZHJlc3MpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
QXRvbWljV2Vha0NBUzMyKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVk
QW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIoY29uZCwgZXhwZWN0ZWRBbmRS
ZXN1bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21p
Y1dlYWtDQVMzMihTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJl
c3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTMzIoY29uZCwgZXhwZWN0ZWRBbmRSZXN1
bHQsIG5ld1ZhbHVlLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ4
KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY0FkZDgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDgoaW1tLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ4KFJlZ2lzdGVySUQgcmVn
LCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIGFkZDgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNB
ZGQ4KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY0FkZDE2KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkMTYoaW1t
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQxNihUcnVzdGVkSW1t
MzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgYWRkMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhdG9taWNBZGQxNihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQxNihyZWcsIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5k
ZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
YWRkMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQzMihU
cnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQWRkMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKGltbSwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQWRkMzIoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgYWRkMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNBZGQzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFkZDMyKHJlZywgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1Yjgo
aW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWI4KFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBzdWI4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgYXRvbWljU3ViOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWI4KHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViOChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1
YjgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNTdWIxNihUcnVz
dGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2NrKCk7CisgICAgICAgIHN1YjE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljU3ViMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjE2KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMTYoUmVnaXN0ZXJJRCByZWcs
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgc3ViMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNT
dWIxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjE2KHJlZywgYWRkcmVzcyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXRvbWljU3ViMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBzdWIzMihp
bW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1N1YjMyKFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9jaygpOworICAgICAgICBzdWIzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1N1YjMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjMyKHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViMzIoUmVnaXN0ZXJJRCByZWcsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBzdWIzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDgo
VHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhbmQ4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljQW5kOChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kOChpbW0sIGFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDgoUmVnaXN0ZXJJRCByZWcs
IEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgYW5kOChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0Fu
ZDgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ4KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljQW5kMTYoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQxNihpbW0s
IGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDE2KFRydXN0ZWRJbW0z
MiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBhbmQxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY0FuZDE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIGFuZDE2KHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kMTYoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRl
eCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBh
bmQxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDMyKFRy
dXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhdG9taWNBbmQzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIoaW1tLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBbmQzMihSZWdpc3RlcklEIHJl
ZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBhbmQzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y0FuZDMyKFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYW5kMzIocmVnLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNPcjgoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgoaW1t
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjgoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2Nr
KCk7CisgICAgICAgIG9yOChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY09yOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNPcjgoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjgocmVnLCBh
ZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgb3IxNihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y09yMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMTYoaW1tLCBhZGRyZXNzKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG9yMTYocmVn
LCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNPcjE2KFJlZ2lzdGVySUQg
cmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2so
KTsKKyAgICAgICAgb3IxNihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY09yMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjMyKGltbSwgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljT3IzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXgg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3Iz
MihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY09yMzIoUmVnaXN0
ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgb3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY09yMzIoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjMyKHJlZywgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhv
cjgoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3I4KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3I4KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljWG9yOChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I4KHJlZywgYWRkcmVzcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yOChSZWdpc3RlcklEIHJlZywgQmFzZUlu
ZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IHhvcjgocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYb3IxNihU
cnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXRvbWljWG9yMTYoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KGltbSwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMTYoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgeG9yMTYocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNYb3IxNihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjE2KHJlZywgYWRkcmVzcyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3Iz
MihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjMyKFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3IzMihpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hvcjMyKFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhvcjMyKHJlZywgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yMzIoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICB4b3IzMihyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05l
ZzgoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOwor
ICAgICAgICBuZWc4KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05lZzgo
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIG5lZzgoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMTYo
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBuZWcxNihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWcxNihC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgbmVnMTYoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTmVnMzIo
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBuZWczMihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOZWczMihC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAg
ICAgICAgbmVnMzIoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90OChB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAg
ICAgIG5vdDgoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljTm90OChCYXNl
SW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAg
ICAgbm90OChhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3QxNihBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG5vdDE2KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDE2KEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBub3QxNihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNOb3QzMihBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IG5vdDMyKGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY05vdDMyKEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAg
ICBub3QzMihhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkOChS
ZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkYl9ybShyZWcsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hjaGdBZGQ4
KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGFkZGJfcm0ocmVnLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkMTYoUmVnaXN0ZXJJRCByZWcsIEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIueGFkZHdfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnQWRkMTYoUmVnaXN0ZXJJRCByZWcsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAg
ICAgICBtX2Fzc2VtYmxlci54YWRkd19ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY1hjaGdBZGQzMihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54YWRkbF9y
bShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGF0b21pY1hjaGdBZGQzMihSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhh
ZGRsX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwg
YWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzgoUmVnaXN0
ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
Y2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2Jfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnOChSZWdpc3Rl
cklEIHJlZywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5s
b2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdiX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljWGNoZzE2KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LnhjaGd3X3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXRvbWljWGNoZzE2KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIueGNoZ3dfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnMzIo
UmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0ocmVnLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9taWNYY2hnMzIo
UmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ybShyZWcsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3E4KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBsb2FkOChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxvYWRBY3E4KEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IGxvYWQ4KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZEFjcThTaWduZWRF
eHRlbmRUbzMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBs
b2FkOFNpZ25lZEV4dGVuZFRvMzIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBs
b2FkQWNxOFNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbG9hZDhTaWduZWRFeHRlbmRUbzMyKHNyYywgZGVzdCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgbG9hZEFjcTE2KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBsb2FkMTYoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBs
b2FkQWNxMTYoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bG9hZDE2KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZEFjcTE2U2lnbmVk
RXh0ZW5kVG8zMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxvYWRBY3ExNlNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihzcmMsIGRlc3QpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGxvYWRBY3EzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgbG9hZEFjcTMyKEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGxvYWQzMihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUmVsOChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmU4KHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw4KFJlZ2lzdGVySUQgc3JjLCBC
YXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAgIHN0b3JlOChzcmMsIGRlc3QpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHN0b3JlUmVsOChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3Qp
CisgICAgeworICAgICAgICBzdG9yZTgoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzdG9yZVJlbDgoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAg
ICAgICBzdG9yZTgoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVJlbDE2
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KHNy
YywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwxNihSZWdpc3RlcklEIHNy
YywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KHNyYywgZGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwxNihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTE2KGltbSwgZGVzdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc3RvcmVSZWwxNihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAg
ICB7CisgICAgICAgIHN0b3JlMTYoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
dG9yZVJlbDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBz
dG9yZTMyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihSZWdp
c3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTMyKHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihUcnVzdGVkSW1tMzIgaW1t
LCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTMyKGltbSwgZGVzdCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc3RvcmVSZWwzMihUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIHN0b3JlMzIoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisg
ICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhhdCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9y
bWFsIHN0b3Jlcy4gU28sIGl0J3MgYSBuby1vcCBvbiB4ODYuCisgICAgdm9pZCBzdG9yZUZlbmNl
KCkKKyAgICB7CisgICAgfQorCisgICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhhdCBpdCBw
cmV2ZW50cyBtb3Rpb24gb2Ygbm9ybWFsIGxvYWRzLiBTbywgaXQncyBhIG5vLW9wIG9uIHg4Ni4K
KyAgICB2b2lkIGxvYWRGZW5jZSgpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJl
cGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9j
YXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVw
bGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGVzdGlu
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJk
aWZmX3QgbWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCk7CisgICAgfQorCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBwYXRjaGFibGVKdW1wU2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gWDg2
QXNzZW1ibGVyOjpwYXRjaGFibGVKdW1wU2l6ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzRmxvYXRpbmdQb2ludFJvdW5kaW5nKCkKKyAgICB7CisgICAgICAgIGlmIChzX3Nz
ZTRfMUNoZWNrU3RhdGUgPT0gQ1BVSURDaGVja1N0YXRlOjpOb3RDaGVja2VkKQorICAgICAgICAg
ICAgdXBkYXRlRWF4MUVjeEZsYWdzKCk7CisgICAgICAgIHJldHVybiBzX3NzZTRfMUNoZWNrU3Rh
dGUgPT0gQ1BVSURDaGVja1N0YXRlOjpTZXQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgc3Vw
cG9ydHNBVlgoKQorICAgIHsKKyAgICAgICAgLy8gQVZYIHN0aWxsIGNhdXNlcyBteXN0ZXJpb3Vz
IHJlZ3Jlc3Npb25zIGFuZCB0aG9zZSByZWdyZXNzaW9ucyBjYW4gYmUgbWFzc2l2ZS4KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUVheDFFY3hG
bGFncygpCisgICAgeworICAgICAgICBpbnQgZmxhZ3MgPSAwOworI2lmIENPTVBJTEVSKE1TVkMp
CisgICAgICAgIGludCBjcHVJbmZvWzRdOworICAgICAgICBfX2NwdWlkKGNwdUluZm8sIDB4MSk7
CisgICAgICAgIGZsYWdzID0gY3B1SW5mb1syXTsKKyNlbGlmIENPTVBJTEVSKEdDQ19PUl9DTEFO
RykKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBhc20gKAorICAgICAgICAgICAgIm1vdmwgJDB4
MSwgJSVlYXg7IgorICAgICAgICAgICAgImNwdWlkOyIKKyAgICAgICAgICAgICJtb3ZsICUlZWN4
LCAlMDsiCisgICAgICAgICAgICA6ICI9ZyIgKGZsYWdzKQorICAgICAgICAgICAgOgorICAgICAg
ICAgICAgOiAiJWVheCIsICIlZWJ4IiwgIiVlY3giLCAiJWVkeCIKKyAgICAgICAgICAgICk7Cisj
ZWxzZQorICAgICAgICBhc20gKAorICAgICAgICAgICAgIm1vdmwgJDB4MSwgJSVlYXg7IgorICAg
ICAgICAgICAgInB1c2hsICUlZWJ4OyIKKyAgICAgICAgICAgICJjcHVpZDsiCisgICAgICAgICAg
ICAicG9wbCAlJWVieDsiCisgICAgICAgICAgICAibW92bCAlJWVjeCwgJTA7IgorICAgICAgICAg
ICAgOiAiPWciIChmbGFncykKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgIDogIiVlYXgiLCAi
JWVjeCIsICIlZWR4IgorICAgICAgICAgICAgKTsKKyNlbmRpZgogI2VuZGlmIC8vIENPTVBJTEVS
KEdDQ19PUl9DTEFORykKICAgICAgICAgc19zc2U0XzFDaGVja1N0YXRlID0gKGZsYWdzICYgKDEg
PDwgMTkpKSA/IENQVUlEQ2hlY2tTdGF0ZTo6U2V0IDogQ1BVSURDaGVja1N0YXRlOjpDbGVhcjsK
ICAgICAgICAgc19hdnhDaGVja1N0YXRlID0gKGZsYWdzICYgKDEgPDwgMjgpKSA/IENQVUlEQ2hl
Y2tTdGF0ZTo6U2V0IDogQ1BVSURDaGVja1N0YXRlOjpDbGVhcjsKQEAgLTI4MzEsNiArMzg3MCwx
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxYODZBc3NlbWJsZXI6
OkNvbmRpdGlvbj4oY29uZCk7CiAgICAgfQogCisgICAgWDg2QXNzZW1ibGVyOjpDb25kaXRpb24g
eDg2Q29uZGl0aW9uKFN0YXR1c0NvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25kKSB7CisgICAgICAgIGNhc2UgU3VjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBYODZB
c3NlbWJsZXI6OkNvbmRpdGlvbkU7CisgICAgICAgIGNhc2UgRmFpbHVyZToKKyAgICAgICAgICAg
IHJldHVybiBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbk5FOworICAgICAgICB9CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6
OkNvbmRpdGlvbkU7CisgICAgfQorCiAgICAgdm9pZCBzZXQzMihYODZBc3NlbWJsZXI6OkNvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogI2lmIENQVShYODYpCkBAIC0yOTI1
LDYgKzM5NzYsMzUgQEAgcHJvdGVjdGVkOgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihzaXpl
T2ZSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIHNyY0lzTm9uWmVyby5saW5rKHRoaXMpOwogICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgYXRvbWljU3Ry
b25nQ0FTKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0
LCBSZWdpc3RlcklEIHJlc3VsdCwgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3
YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBmdW5jKCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRS
ZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgc2V0MzIoeDg2Q29uZGl0aW9uKGNv
bmQpLCByZXN1bHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
dm9pZCBhdG9taWNTdHJvbmdDQVMoUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgY29uc3Qg
RnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJl
Z2lzdGVyczo6ZWF4KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBmdW5j
KCk7CisgICAgICAgIHN3YXAoZXhwZWN0ZWRBbmRSZXN1bHQsIFg4NlJlZ2lzdGVyczo6ZWF4KTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIEp1bXAgYnJhbmNoQXRv
bWljU3Ryb25nQ0FTKFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5k
UmVzdWx0LCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgc3dhcChleHBlY3RlZEFu
ZFJlc3VsdCwgWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7
CisgICAgICAgIGZ1bmMoKTsKKyAgICAgICAgc3dhcChleHBlY3RlZEFuZFJlc3VsdCwgWDg2UmVn
aXN0ZXJzOjplYXgpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29u
ZGl0aW9uKGNvbmQpKSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIC8vIE9ubHkgTWFjcm9Bc3Nl
bWJsZXJYODYgc2hvdWxkIGJlIHVzaW5nIHRoZSBmb2xsb3dpbmcgbWV0aG9kOyBTU0UyIGlzIGFs
d2F5cyBhdmFpbGFibGUgb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDIxMzI2MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2NCwxMSArMjY0LDIxIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7
CiAgICAgfQogCisgICAgdm9pZCBhZGQ2NChCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNl
LCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBhZGQ2NChS
ZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkcV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQg
YWRkNjQoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYWRkcV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgs
IGRlc3Quc2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgYWRkNjQoQWJzb2x1dGVBZGRyZXNzIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHNy
Yy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKQEAgLTMwNiw2ICszMTYsMTQgQEAgcHVibGlj
OgogICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBhZGQ2NChUcnVzdGVkSW1t
MzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlmIChpbW0ubV92YWx1
ZSA9PSAxKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuaW5jcV9tKGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9
CisKICAgICB2b2lkIGFkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRy
ZXNzKQogICAgIHsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBz
Y3JhdGNoUmVnaXN0ZXIoKSk7CkBAIC0zNDIsMTEgKzM2MCw0MSBAQCBwdWJsaWM6CiAgICAgICAg
IG1fYXNzZW1ibGVyLmFuZHFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDY0
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5hbmRxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmQ2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5hbmRxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRl
eCwgZGVzdC5zY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBhbmQ2NChBZGRyZXNzIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9tcihzcmMub2Zm
c2V0LCBzcmMuYmFzZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhbmQ2NChCYXNlSW5kZXgg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX21y
KHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5zY2FsZSwgZGVzdCk7CisgICAg
fQorCiAgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3Qp
CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX2lyKGltbS5tX3ZhbHVlLCBzcmNEZXN0
KTsKICAgICB9CiAKKyAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfaW0oaW1tLm1fdmFsdWUsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX2lt
KGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNj
YWxlKTsKKyAgICB9CisKICAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3Rl
cklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBpbnRwdHJfdCBpbnRWYWx1ZSA9IGltbS5hc0lu
dHB0cigpOwpAQCAtNTUyLDExICs2MDAsNTEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxl
ci5uZWdxX3IoZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBuZWc2NChBZGRyZXNzIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWdxX20oZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7
CisgICAgfQorCisgICAgdm9pZCBuZWc2NChCYXNlSW5kZXggZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5lZ3FfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBk
ZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9ycihzcmMsIGRlc3Qp
OwogICAgIH0KIAorICAgIHZvaWQgb3I2NChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9ybShzcmMsIGRlc3Qub2Zmc2V0
LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOworICAgIH0KKworICAgIHZvaWQg
b3I2NChBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIub3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIG9yNjQoQmFzZUluZGV4IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIub3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBzcmMuaW5kZXgsIHNyYy5z
Y2FsZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEFk
ZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9pbShpbW0ubV92YWx1
ZSwgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBvcjY0KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
b3JxX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBk
ZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIG9yNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVn
aXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgaWYgKGltbS5tX3ZhbHVlIDw9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpCkBAIC02MTksMTYgKzcwNywzMSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgc3ViNjQoVHJ1c3RlZEltbTMy
IGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJx
X2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHN1YjY0KEFkZHJlc3Mgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX21yKHNy
Yy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YjY0KEJhc2VJ
bmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1
YnFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwgc3JjLnNjYWxlLCBkZXN0KTsK
KyAgICB9CisKICAgICB2b2lkIHN1YjY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdWI2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX3JtKHNyYywgZGVzdC5vZmZz
ZXQsIGRlc3QuYmFzZSwgZGVzdC5pbmRleCwgZGVzdC5zY2FsZSk7CisgICAgfQorCiAgICAgdm9p
ZCB4b3I2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAg
bV9hc3NlbWJsZXIueG9ycV9ycihzcmMsIGRlc3QpOwpAQCAtNjUxLDYgKzc1NCwzMSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5i
YXNlKTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjY0KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXgg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfcm0oc3JjLCBkZXN0Lm9mZnNl
dCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKKyAgICB2b2lk
IHhvcjY0KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54b3JxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIHhvcjY0KEJhc2VJbmRleCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnhvcnFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIHNyYy5pbmRleCwg
c3JjLnNjYWxlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfaW0oaW1t
Lm1fdmFsdWUsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKworICAgIHZvaWQgeG9y
NjQoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54b3JxX2ltKGltbS5tX3ZhbHVlLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0
LmluZGV4LCBkZXN0LnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnhv
cnFfaXIoaW1tLm1fdmFsdWUsIHNyY0Rlc3QpOwpAQCAtNjY2LDYgKzc5NCwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vdHFfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdDY0KEJhc2VJbmRleCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm90cV9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Qu
c2NhbGUpOworICAgIH0KKwogICAgIHZvaWQgbG9hZDY0KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNz
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX21yKGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGRlc3QpOwpAQCAtNzI1LDYgKzg1OCwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfaTMybShpbW0ubV92YWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCisgICAgdm9pZCBzdG9yZTY0KFRydXN0
ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92cV9pMzJtKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBh
ZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisKICAgICB2b2lkIHN0b3JlNjQo
VHJ1c3RlZEltbTY0IGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAg
ICBpZiAoQ0FOX1NJR05fRVhURU5EXzMyXzY0KGltbS5tX3ZhbHVlKSkgewpAQCAtMTI5NCw3ICsx
NDMyLDI1NSBAQCBwdWJsaWM6CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjptb3Zl
KFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKICAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpicmFuY2hUZXN0OChjb25kLCBBZGRy
ZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSwgbWFzazgpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVk
QW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVjdGVk
QW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVl
LCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBh
dG9taWNTdHJvbmdDQVM2NChTdGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3Rl
ZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lz
dGVySUQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgYXRvbWljU3Ryb25nQ0FTKGNvbmQsIGV4cGVj
dGVkQW5kUmVzdWx0LCByZXN1bHQsIFsmXSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1Zh
bHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM2NChSZWdpc3Rl
cklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBhdG9taWNTdHJvbmdDQVMoZXhwZWN0ZWRBbmRSZXN1bHQsIFsm
XSB7IG1fYXNzZW1ibGVyLmNtcHhjaGdxX3JtKG5ld1ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBhdG9taWNTdHJvbmdDQVM2NChSZWdp
c3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBCYXNlSW5kZXgg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIGF0b21pY1N0cm9uZ0NBUyhleHBlY3RlZEFuZFJlc3Vs
dCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFsdWUsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOyB9KTsKKyAgICB9
CiAKKyAgICBKdW1wIGJyYW5jaEF0b21pY1N0cm9uZ0NBUzY0KFN0YXR1c0NvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBSZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FT
KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBbJl0geyBtX2Fzc2VtYmxlci5jbXB4Y2hncV9ybShu
ZXdWYWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7IH0pOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoU3RhdHVzQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgZXhwZWN0ZWRBbmRSZXN1bHQsIFJlZ2lzdGVySUQgbmV3VmFsdWUsIEJhc2VJbmRleCBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEF0b21pY1N0cm9uZ0NBUyhjb25k
LCBleHBlY3RlZEFuZFJlc3VsdCwgWyZdIHsgbV9hc3NlbWJsZXIuY21weGNoZ3Ffcm0obmV3VmFs
dWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Mu
c2NhbGUpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVM2NChTdGF0dXNDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBuZXdW
YWx1ZSwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB7CisgICAgICAg
IGF0b21pY1N0cm9uZ0NBUzY0KGNvbmQsIGV4cGVjdGVkQW5kUmVzdWx0LCBuZXdWYWx1ZSwgYWRk
cmVzcywgcmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY1dlYWtDQVM2NChTdGF0dXND
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0ZXJJRCBu
ZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHsKKyAg
ICAgICAgYXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVl
LCBhZGRyZXNzLCByZXN1bHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQXRvbWljV2Vha0NB
UzY0KFN0YXR1c0NvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGV4cGVjdGVkQW5kUmVzdWx0LCBS
ZWdpc3RlcklEIG5ld1ZhbHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1
cm4gYnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1Zh
bHVlLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEF0b21pY1dlYWtDQVM2NChT
dGF0dXNDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBleHBlY3RlZEFuZFJlc3VsdCwgUmVnaXN0
ZXJJRCBuZXdWYWx1ZSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4g
YnJhbmNoQXRvbWljU3Ryb25nQ0FTNjQoY29uZCwgZXhwZWN0ZWRBbmRSZXN1bHQsIG5ld1ZhbHVl
LCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIGF0b21pY0FkZDY0KFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgYWRkNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdG9t
aWNBZGQ2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgYWRkNjQoaW1tLCBhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdG9taWNBZGQ2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhZGQ2
NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FkZDY0KFJlZ2lz
dGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvY2soKTsKKyAgICAgICAgYWRkNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdG9taWNTdWI2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjY0KGltbSwgYWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljU3ViNjQoVHJ1c3RlZEltbTMyIGltbSwg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7Cisg
ICAgICAgIHN1YjY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWlj
U3ViNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgc3ViNjQocmVnLCBhZGRyZXNzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhdG9taWNTdWI2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHN1YjY0KHJl
ZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQoVHJ1c3RlZElt
bTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9j
aygpOworICAgICAgICBhbmQ2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGF0b21pY0FuZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBhbmQ2NChpbW0sIGFkZHJlc3Mp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY0FuZDY0KFJlZ2lzdGVySUQgcmVnLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAg
IGFuZDY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljQW5kNjQo
UmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9jaygpOworICAgICAgICBhbmQ2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY09yNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjY0KGltbSwgYWRk
cmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljT3I2NChUcnVzdGVkSW1tMzIgaW1t
LCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvY2soKTsK
KyAgICAgICAgb3I2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21p
Y09yNjQoUmVnaXN0ZXJJRCByZWcsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvY2soKTsKKyAgICAgICAgb3I2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGF0b21pY09yNjQoUmVnaXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBvcjY0KHJlZywg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yNjQoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygp
OworICAgICAgICB4b3I2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
b21pY1hvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICB4b3I2NChpbW0sIGFkZHJlc3MpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGF0b21pY1hvcjY0KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIHhv
cjY0KHJlZywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWG9yNjQoUmVn
aXN0ZXJJRCByZWcsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9jaygpOworICAgICAgICB4b3I2NChyZWcsIGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY05lZzY0KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbmVnNjQoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljTmVnNjQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5lZzY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY05vdDY0KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbm90NjQoYWRkcmVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXRvbWljTm90NjQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2NrKCk7CisgICAgICAgIG5vdDY0KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGF0b21pY1hjaGdBZGQ2NChSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9jaygpOworICAgICAgICBtX2Fzc2VtYmxlci54
YWRkcV9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0b21pY1hjaGdBZGQ2NChSZWdpc3RlcklEIHJlZywgQmFzZUluZGV4IGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLnhhZGRxX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzY0
KFJlZ2lzdGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2NrKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JtKHJlZywgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXRvbWljWGNoZzY0
KFJlZ2lzdGVySUQgcmVnLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvY2soKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3Ffcm0ocmVnLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBsb2FkQWNxNjQoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGxvYWQ2NChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGxvYWRBY3E2NChCYXNlSW5kZXggc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBsb2FkNjQoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVJlbDY0
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KHNy
YywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw2NChSZWdpc3RlcklEIHNy
YywgQmFzZUluZGV4IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KHNyYywgZGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVSZWw2NChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNz
IGRlc3QpCisgICAgeworICAgICAgICBzdG9yZTY0KGltbSwgZGVzdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc3RvcmVSZWw2NChUcnVzdGVkSW1tMzIgaW1tLCBCYXNlSW5kZXggZGVzdCkKKyAg
ICB7CisgICAgICAgIHN0b3JlNjQoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCB0
cnVuY2F0ZURvdWJsZVRvVWludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmN2dHRzZDJzaXFfcnIoc3JjLCBkZXN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAko
cmV2aXNpb24gMjEzMjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZB
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5MCwxNiArMTkwLDIwIEBAIHBy
aXZhdGU6CiAgICAgICAgIE9QX0FERF9Fdkd2ICAgICAgICAgICAgICAgICAgICAgPSAweDAxLAog
ICAgICAgICBPUF9BRERfR3ZFdiAgICAgICAgICAgICAgICAgICAgID0gMHgwMywKICAgICAgICAg
T1BfQUREX0VBWEl2ICAgICAgICAgICAgICAgICAgICA9IDB4MDUsCisgICAgICAgIE9QX09SX0V2
R2IgICAgICAgICAgICAgICAgICAgICAgPSAweDA4LAogICAgICAgICBPUF9PUl9Fdkd2ICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwOSwKICAgICAgICAgT1BfT1JfR3ZFdiAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MEIsCiAgICAgICAgIE9QX09SX0VBWEl2ICAgICAgICAgICAgICAgICAgICAg
PSAweDBELAogICAgICAgICBPUF8yQllURV9FU0NBUEUgICAgICAgICAgICAgICAgID0gMHgwRiwK
KyAgICAgICAgT1BfQU5EX0V2R2IgICAgICAgICAgICAgICAgICAgICA9IDB4MjAsCiAgICAgICAg
IE9QX0FORF9Fdkd2ICAgICAgICAgICAgICAgICAgICAgPSAweDIxLAogICAgICAgICBPUF9BTkRf
R3ZFdiAgICAgICAgICAgICAgICAgICAgID0gMHgyMywKKyAgICAgICAgT1BfU1VCX0V2R2IgICAg
ICAgICAgICAgICAgICAgICA9IDB4MjgsCiAgICAgICAgIE9QX1NVQl9Fdkd2ICAgICAgICAgICAg
ICAgICAgICAgPSAweDI5LAogICAgICAgICBPUF9TVUJfR3ZFdiAgICAgICAgICAgICAgICAgICAg
ID0gMHgyQiwKICAgICAgICAgT1BfU1VCX0VBWEl2ICAgICAgICAgICAgICAgICAgICA9IDB4MkQs
CiAgICAgICAgIFBSRV9QUkVESUNUX0JSQU5DSF9OT1RfVEFLRU4gICAgPSAweDJFLAorICAgICAg
ICBPUF9YT1JfRXZHYiAgICAgICAgICAgICAgICAgICAgID0gMHgzMCwKICAgICAgICAgT1BfWE9S
X0V2R3YgICAgICAgICAgICAgICAgICAgICA9IDB4MzEsCiAgICAgICAgIE9QX1hPUl9HdkV2ICAg
ICAgICAgICAgICAgICAgICAgPSAweDMzLAogICAgICAgICBPUF9YT1JfRUFYSXYgICAgICAgICAg
ICAgICAgICAgID0gMHgzNSwKQEAgLTIyMyw2ICsyMjcsNyBAQCBwcml2YXRlOgogICAgICAgICBP
UF9HUk9VUDFfRXZJYiAgICAgICAgICAgICAgICAgID0gMHg4MywKICAgICAgICAgT1BfVEVTVF9F
YkdiICAgICAgICAgICAgICAgICAgICA9IDB4ODQsCiAgICAgICAgIE9QX1RFU1RfRXZHdiAgICAg
ICAgICAgICAgICAgICAgPSAweDg1LAorICAgICAgICBPUF9YQ0hHX0V2R2IgICAgICAgICAgICAg
ICAgICAgID0gMHg4NiwKICAgICAgICAgT1BfWENIR19Fdkd2ICAgICAgICAgICAgICAgICAgICA9
IDB4ODcsCiAgICAgICAgIE9QX01PVl9FYkdiICAgICAgICAgICAgICAgICAgICAgPSAweDg4LAog
ICAgICAgICBPUF9NT1ZfRXZHdiAgICAgICAgICAgICAgICAgICAgID0gMHg4OSwKQEAgLTI1Miw2
ICsyNTcsNyBAQCBwcml2YXRlOgogICAgICAgICBQUkVfU1NFX0YyICAgICAgICAgICAgICAgICAg
ICAgID0gMHhGMiwKICAgICAgICAgUFJFX1NTRV9GMyAgICAgICAgICAgICAgICAgICAgICA9IDB4
RjMsCiAgICAgICAgIE9QX0hMVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweEY0LAorICAg
ICAgICBPUF9HUk9VUDNfRWIgICAgICAgICAgICAgICAgICAgID0gMHhGNiwKICAgICAgICAgT1Bf
R1JPVVAzX0ViSWIgICAgICAgICAgICAgICAgICA9IDB4RjYsCiAgICAgICAgIE9QX0dST1VQM19F
diAgICAgICAgICAgICAgICAgICAgPSAweEY3LAogICAgICAgICBPUF9HUk9VUDNfRXZJeiAgICAg
ICAgICAgICAgICAgID0gMHhGNywgLy8gT1BfR1JPVVAzX0V2IGhhcyBhbiBpbW1lZGlhdGUsIHdo
ZW4gaW5zdHJ1Y3Rpb24gaXMgYSB0ZXN0LiAKQEAgLTI5MCw2ICsyOTYsOCBAQCBwcml2YXRlOgog
ICAgICAgICBPUF9TRVRDQyAgICAgICAgICAgID0gMHg5MCwKICAgICAgICAgT1AyXzNCWVRFX0VT
Q0FQRV9BRSA9IDB4QUUsCiAgICAgICAgIE9QMl9JTVVMX0d2RXYgICAgICAgPSAweEFGLAorICAg
ICAgICBPUDJfQ01QWENIR2IgICAgICAgID0gMHhCMCwKKyAgICAgICAgT1AyX0NNUFhDSEcgICAg
ICAgICA9IDB4QjEsCiAgICAgICAgIE9QMl9NT1ZaWF9HdkViICAgICAgPSAweEI2LAogICAgICAg
ICBPUDJfQlNGICAgICAgICAgICAgID0gMHhCQywKICAgICAgICAgT1AyX1RaQ05UICAgICAgICAg
ICA9IDB4QkMsCkBAIC0yOTgsNiArMzA2LDggQEAgcHJpdmF0ZToKICAgICAgICAgT1AyX01PVlNY
X0d2RWIgICAgICA9IDB4QkUsCiAgICAgICAgIE9QMl9NT1ZaWF9HdkV3ICAgICAgPSAweEI3LAog
ICAgICAgICBPUDJfTU9WU1hfR3ZFdyAgICAgID0gMHhCRiwKKyAgICAgICAgT1AyX1hBRERiICAg
ICAgICAgICA9IDB4QzAsCisgICAgICAgIE9QMl9YQUREICAgICAgICAgICAgPSAweEMxLAogICAg
ICAgICBPUDJfUEVYVFJXX0dkVWRJYiAgID0gMHhDNSwKICAgICAgICAgT1AyX1BTTExRX1VkcUli
ICAgICA9IDB4NzMsCiAgICAgICAgIE9QMl9QU1JMUV9VZHFJYiAgICAgPSAweDczLApAQCAtNDQw
LDYgKzQ1MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9B
RERfR3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGFkZGxf
bXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0FERF9HdkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9Cisg
ICAgCiAjaWYgIUNQVShYODZfNjQpCiAgICAgdm9pZCBhZGRsX21yKGNvbnN0IHZvaWQqIGFkZHIs
IFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTU2MiwxMSArNTc3LDIxIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0d2RXYsIGRzdCwgYmFzZSwgb2Zm
c2V0KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0d2RXYsIGRzdCwgYmFzZSwg
aW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYWRkcV9ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CiAKKyAgICB2b2lkIGFkZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNj
YWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYWRkcV9pcihpbnQgaW1tLCBSZWdpc3Rl
cklEIGRzdCkKICAgICB7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7
CkBAIC01OTEsNiArNjE2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTMyKGltbSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICB2b2lkIGFkZHFfaW0oaW50
IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgewor
ICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQ
MV9PUF9BREQsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9y
bWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfQURELCBiYXNl
LCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlh
dGUzMihpbW0pOworICAgICAgICB9CisgICAgfQogI2Vsc2UKICAgICB2b2lkIGFkZGxfaW0oaW50
IGltbSwgY29uc3Qgdm9pZCogYWRkcikKICAgICB7CkBAIC02MTQsMTEgKzY1MCw0MyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfR3ZFdiwgZHN0LCBiYXNl
LCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgYW5kbF9tcihpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0d2RXYsIGRzdCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwogICAgIHZvaWQgYW5kbF9ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAg
ICAgfQogCisgICAgdm9pZCBhbmRsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BTkRfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBhbmR3X3JtKFJlZ2lzdGVySUQgc3JjLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5w
cmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIGFuZGxfcm0oc3JjLCBvZmZzZXQsIGJh
c2UpOworICAgIH0KKworICAgIHZvaWQgYW5kd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgewor
ICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIGFu
ZGxfcm0oc3JjLCBvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmRiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQU5EX0V2R2IsIHNyYywgYmFz
ZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZGJfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FORF9FdkdiLCBzcmMsIGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIGFuZGxfaXIoaW50
IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5E
XzhfMzIoaW1tKSkgewpAQCAtNjQxLDYgKzcwOSw1MyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAKKyAgICB2b2lkIGFuZGxfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FO
X1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2
SXosIEdST1VQMV9PUF9BTkQsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIGFuZHdfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAg
ICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBvZmZzZXQp
OworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBH
Uk9VUDFfT1BfQU5ELCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1t
ZWRpYXRlMTYoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYW5kd19pbShpbnQg
aW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBz
Y2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpF
KTsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJYiwgR1JPVVAxX09QX0FORCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRp
YXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUs
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUxNihpbW0pOworICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCBhbmRiX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9H
Uk9VUDFfRWJJYiwgR1JPVVAxX09QX0FORCwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKworICAgIHZvaWQgYW5kYl9pbShpbnQgaW1t
LCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2Fs
ZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwg
R1JPVVAxX09QX0FORCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICBtX2Zv
cm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2
b2lkIGFuZHFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTY1
Nyw2ICs3NzIsNDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRl
MzIoaW1tKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHZvaWQgYW5kcV9tcihpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wNjQoT1BfQU5EX0d2RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3Rl
cklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQU5EX0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgYW5kcV9ybShSZWdpc3RlcklEIHNyYywgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIGFuZHFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfQU5EX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKworICAgIHZvaWQgYW5kcV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkg
eworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdS
T1VQMV9PUF9BTkQsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1l
ZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX0FORCwgYmFzZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2b2lkIGFuZHFfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBpZiAoQ0FO
X1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9BTkQsIGJhc2UsIGluZGV4LCBzY2FsZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQ
MV9Fdkl6LCBHUk9VUDFfT1BfQU5ELCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAg
ICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOworICAgICAgICB9CisgICAgfQog
I2Vsc2UKICAgICB2b2lkIGFuZGxfaW0oaW50IGltbSwgY29uc3Qgdm9pZCogYWRkcikKICAgICB7
CkBAIC03MDMsNiArODYwLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0dST1VQNV9FdiwgR1JPVVAxX09QX0FERCwgYmFzZSwgb2Zmc2V0KTsK
ICAgICB9CisKKyAgICB2b2lkIGluY3FfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcDY0KE9QX0dST1VQNV9FdiwgR1JPVVAxX09QX0FERCwgYmFzZSwgaW5kZXgsIHNjYWxl
LCBvZmZzZXQpOworICAgIH0KICNlbmRpZiAvLyBDUFUoWDg2XzY0KQogCiAgICAgdm9pZCBuZWds
X3IoUmVnaXN0ZXJJRCBkc3QpCkBAIC03MTUsNiArODc3LDE2IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JPVVAzX09QX05F
RywgZHN0KTsKICAgICB9CisKKyAgICB2b2lkIG5lZ3FfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNf
RXYsIEdST1VQM19PUF9ORUcsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBuZWdx
X20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYs
IEdST1VQM19PUF9ORUcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5k
aWYKIAogICAgIHZvaWQgbmVnbF9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKQEAgLTcy
Miw2ICs4OTQsMzMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1Bf
R1JPVVAzX0V2LCBHUk9VUDNfT1BfTkVHLCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZv
aWQgbmVnbF9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQ
M19FdiwgR1JPVVAzX09QX05FRywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0K
KworICAgIHZvaWQgbmVnd19tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbmVn
bF9tKG9mZnNldCwgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBuZWd3X20oaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgIG5lZ2xf
bShvZmZzZXQsIGJhc2UsIGluZGV4LCBzY2FsZSk7CisgICAgfQorCisgICAgdm9pZCBuZWdiX20o
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQM19FYiwgR1JPVVAzX09QX05FRywgYmFzZSwgb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICB2b2lkIG5lZ2JfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcChPUF9HUk9VUDNfRWIsIEdST1VQM19PUF9ORUcsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICB9CisKICAgICB2b2lkIG5vdGxfcihSZWdpc3RlcklEIGRzdCkKICAgICB7CiAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1Qs
IGRzdCk7CkBAIC03MzIsNiArOTMxLDMzIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQM19FdiwgR1JPVVAzX09QX05PVCwgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CiAKKyAgICB2b2lkIG5vdGxfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9OT1QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zm
c2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG5vdHdfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIG5vdGxfbShvZmZzZXQsIGJhc2UpOworICAgIH0KKworICAgIHZvaWQgbm90d19t
KGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOwor
ICAgICAgICBub3RsX20ob2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAgIH0KKworICAg
IHZvaWQgbm90Yl9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRWIsIEdST1VQM19PUF9OT1QsIGJhc2Us
IG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBub3RiX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0ViLCBHUk9VUDNfT1BfTk9ULCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2b2lkIG5v
dHFfcihSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC03NDIsNiArOTY4LDExIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JP
VVAzX09QX05PVCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CisKKyAgICB2b2lkIG5vdHFfbShpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQM19FdiwgR1JPVVAz
X09QX05PVCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KICNlbmRpZgogCiAg
ICAgdm9pZCBvcmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpAQCAtNzU0LDEx
ICs5ODUsNDMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1Jf
R3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgb3JsX21yKGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9PUl9H
dkV2LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lk
IG9ybF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAg
IHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R3YsIHNyYywgYmFzZSwg
b2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIG9ybF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfRXZHdiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBvcndfcm0oUmVnaXN0ZXJJ
RCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgb3JsX3JtKHNyYywgb2Zm
c2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yd19ybShSZWdpc3RlcklEIHNyYywgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAg
ICAgIG9ybF9ybShzcmMsIG9mZnNldCwgYmFzZSwgaW5kZXgsIHNjYWxlKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX09SX0V2R2IsIHNyYywg
YmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yYl9ybShSZWdpc3RlcklEIHNyYywg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfT1JfRXZHYiwgc3JjLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBvcmxfaXIoaW50
IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5E
XzhfMzIoaW1tKSkgewpAQCAtNzg0LDEyICsxMDQ3LDEwMSBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICB2b2lkIG9ybF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIGlmIChD
QU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9F
dkl6LCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIG9yd19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAg
IGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9PUiwgYmFzZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJeiwgR1JP
VVAxX09QX09SLCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRp
YXRlMTYoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgb3J3X2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOwor
ICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIGlu
ZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgo
aW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX09SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNl
dCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBvcmJfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9F
YkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7
CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRWJJYiwgR1JPVVAxX09Q
X09SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0KQogICAgIHZvaWQgb3JxX3Jy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcDY0KE9QX09SX0V2R3YsIHNyYywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lk
IG9ycV9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfT1JfR3ZFdiwgZHN0LCBiYXNl
LCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgb3JxX21yKGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX09SX0d2RXYsIGRzdCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgb3JxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9PUl9Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7Cisg
ICAgfQorCisgICAgdm9pZCBvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfT1JfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBvcnFfaW0oaW50IGltbSwgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84
XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQ
MV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX09SLCBiYXNlLCBv
ZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgb3JxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAg
aWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9Q
X0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAg
ICB9CisKICAgICB2b2lkIG9ycV9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAg
ICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC04MzEsMTEgKzExODMs
NDMgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0d2RXYs
IGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YmxfbXIoaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9HdkV2
LCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIHN1
Ymxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7
CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHdiwgc3JjLCBiYXNlLCBv
ZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgc3VibF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAg
eworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwg
aW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgc3Vid19ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3AoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIHN1Yndfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
cHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3Ao
T1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKwor
ICAgIHZvaWQgc3ViYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1NVQl9FdkdiLCBz
cmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBzdWJiX3JtKFJlZ2lzdGVySUQg
c3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBz
Y2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9TVUJfRXZHYiwg
c3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBzdWJs
X2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdO
X0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTg2MSw2ICsxMjQ1LDUzIEBAIHB1YmxpYzoKICAgICAg
ICAgfQogICAgIH0KIAorICAgIHZvaWQgc3VibF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9TVUIsIGJhc2UsIGluZGV4LCBz
Y2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9H
Uk9VUDFfRXZJeiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOwor
ICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgc3Vid19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9TVUIsIGJhc2Us
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0V2SXosIEdST1VQMV9PUF9TVUIsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWJ3
X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1Bf
U1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9TVUIsIGJhc2UsIGluZGV4
LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTE2KGlt
bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHN1YmJfaW0oaW50IGltbSwgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX0dST1VQMV9FYkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBvZmZzZXQpOworICAgICAg
ICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgfQorCisgICAgdm9pZCBzdWJiX2lt
KGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQ
MV9FYkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAg
ICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0
KQogICAgIHZvaWQgc3VicV9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ewpAQCAtODcyLDExICsxMzAzLDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfU1VCX0d2RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2
b2lkIHN1YnFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4
LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfU1VCX0d2RXYsIGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKwogICAgIHZvaWQgc3VicV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQo
T1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHN1YnFf
cm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
NjQoT1BfU1VCX0V2R3YsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0K
KwogICAgIHZvaWQgc3VicV9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAg
ICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC05MDEsNiArMTM0MiwxNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUzMihpbW0pOwogICAg
ICAgICB9CiAgICAgfQorCisgICAgdm9pZCBzdWJxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAg
ICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfU1VCLCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGlt
bSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1NVQiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZz
ZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAg
fQorICAgIH0KICNlbHNlCiAgICAgdm9pZCBzdWJsX2ltKGludCBpbW0sIGNvbnN0IHZvaWQqIGFk
ZHIpCiAgICAgewpAQCAtOTI0LDExICsxMzc2LDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX1hPUl9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CiAgICAgfQog
CisgICAgdm9pZCB4b3JsX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9y
bWF0dGVyLm9uZUJ5dGVPcChPUF9YT1JfR3ZFdiwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgfQorCiAgICAgdm9pZCB4b3JsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3AoT1BfWE9SX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHhv
cmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0
ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hPUl9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CisKICAgICB2b2lkIHhvcmxfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQogICAgIHsKICAgICAgICAgaWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTk0
MCw2ICsxNDAyLDc1IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgeG9y
bF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5k
ZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihp
bW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIs
IEdST1VQMV9PUF9YT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1hPUiwg
YmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1t
ZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgeG9yd19ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICB4b3JsX3JtKHNy
Yywgb2Zmc2V0LCBiYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcndfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNj
YWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUp
OworICAgICAgICB4b3JsX3JtKHNyYywgb2Zmc2V0LCBiYXNlLCBpbmRleCwgc2NhbGUpOworICAg
IH0KKworICAgIHZvaWQgeG9yd19pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7
CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9YT1IsIGJhc2Us
IG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0V2SXosIEdST1VQMV9PUF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB4b3J3
X2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1Bf
WE9SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9YT1IsIGJhc2UsIGluZGV4
LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTE2KGlt
bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHhvcmJfcm0oUmVnaXN0ZXJJRCBzcmMs
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZUJ5dGVPcChPUF9YT1JfRXZHYiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAg
IHZvaWQgeG9yYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3AoT1BfWE9SX0V2R2IsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQp
OworICAgIH0KKworICAgIHZvaWQgeG9yYl9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAx
X0ViSWIsIEdST1VQMV9PUF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1fZm9ybWF0dGVy
LmltbWVkaWF0ZTgoaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcmJfaW0oaW50IGltbSwgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0ViSWIsIEdST1VQ
MV9PUF9YT1IsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0
ZXIuaW1tZWRpYXRlOChpbW0pOworICAgIH0KKwogICAgIHZvaWQgeG9ybF9pcihpbnQgaW1tLCBS
ZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihp
bW0pKSB7CkBAIC05NzQsMTEgKzE1MDUsNDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
ICAgIAorICAgIHZvaWQgeG9ycV9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9P
UF9YT1IsIGJhc2UsIG9mZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4
KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3A2NChPUF9HUk9VUDFfRXZJeiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCB4b3JxX2ltKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgaWYgKENBTl9T
SUdOX0VYVEVORF84XzMyKGltbSkpIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cDY0KE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfWE9SLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9m
ZnNldCk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDFf
RXZJeiwgR1JPVVAxX09QX1hPUiwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMzIoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKICAgICB2b2lkIHhvcnFfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hPUl9F
dkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCB4b3JxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hP
Ul9Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIHhvcnFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YT1JfR3ZFdiwgZGVz
dCwgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcnFfbXIoaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hPUl9HdkV2
LCBkZXN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAg
ICB2b2lkIGx6Y250X3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKQEAgLTE1ODYs
MTEgKzIxNTMsMzggQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgeGNoZ2Jfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R2IsIHNyYywgYmFzZSwgb2Zmc2V0KTsK
KyAgICB9CisKKyAgICB2b2lkIHhjaGdiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R2IsIHNyYywgYmFzZSwgaW5kZXgs
IHNjYWxlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgeGNoZ3dfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAgIHZvaWQg
eGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVn
aXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJl
Zml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1Bf
WENIR19Fdkd2LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICAg
ICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBz
cmMsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCB4Y2hnbF9ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2
LCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisKICNpZiBDUFUoWDg2
XzY0KQogICAgIHZvaWQgeGNoZ3FfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQog
ICAgIHsKQEAgLTE2MDYsNiArMjIwMCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CisKKyAgICB2b2lkIHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIG1vdmxfcnIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpAQCAtMTczMSw2ICsyMzMwLDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wOChPUF9NT1ZfRXZHdiwgc3JjLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBtb3Z3X2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
LnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9w
KE9QX0dST1VQMTFfRXZJeiwgR1JPVVAxMV9NT1YsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG1f
Zm9ybWF0dGVyLmltbWVkaWF0ZTE2KGltbSk7CisgICAgfQorCisgICAgdm9pZCBtb3Z3X2ltKGlu
dCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50
IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJ
WkUpOworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxMV9Fdkl6LCBHUk9V
UDExX01PViwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgICAgICBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGUxNihpbW0pOworICAgIH0KKwogICAgIHZvaWQgbW92bF9FQVhtKGNvbnN0IHZv
aWQqIGFkZHIpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfTU9WX092
RUFYKTsKQEAgLTE4MDAsNiArMjQxMywxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVy
LmltbWVkaWF0ZTMyKGltbSk7CiAgICAgfQogCisgICAgdm9pZCBtb3ZxX2kzMm0oaW50IGltbSwg
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDExX0V2SXos
IEdST1VQMTFfTU9WLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIG1fZm9y
bWF0dGVyLmltbWVkaWF0ZTMyKGltbSk7CisgICAgfQorCiAgICAgdm9pZCBtb3ZxX2k2NHIoaW50
NjRfdCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfTU9WX0VBWEl2LCBkc3QpOwpAQCAtMjc3NSw2ICszMzk0LDkwIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9MT0NLKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBjbXB4Y2hnYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfQ01QWENI
R2IsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnYl9y
bShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklE
IGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4
KE9QMl9DTVBYQ0hHYiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY21weGNoZ3dfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BF
UkFORF9TSVpFKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9DTVBYQ0hHLCBz
cmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY21weGNoZ3dfcm0oUmVn
aXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVS
QU5EX1NJWkUpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNy
YywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNt
cHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcsIHNyYywgYmFz
ZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXB4Y2hnbF9ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0NNUFhDSEcs
IHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGNtcHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Up
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfQ01QWENIRywgc3Jj
LCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcHhjaGdxX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9D
TVBYQ0hHLCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCB4YWRkYl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfWEFERGIsIHNy
YywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4YWRkYl9ybShSZWdpc3Rl
cklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBp
bnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KE9QMl9YQURE
Yiwgc3JjLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgeGFkZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9YQURELCBzcmMsIGJhc2UsIG9mZnNldCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgeGFkZHdfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBv
ZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRsX3JtKFJlZ2lzdGVySUQgc3JjLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50
d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCB4YWRkbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci50d29CeXRlT3AoT1AyX1hBREQsIHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHhhZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2
NChPUDJfWEFERCwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhh
ZGRxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5
dGVPcDY0KE9QMl9YQURELCBzcmMsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCBtZmVuY2UoKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIudGhy
ZWVCeXRlT3AoT1AyXzNCWVRFX0VTQ0FQRV9BRSwgT1AzX01GRU5DRSk7CkBAIC0zNzUxLDYgKzQ0
NTQsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHdyaXRlci5yZWdpc3Rlck1vZFJNKGdyb3Vw
T3AsIHJtKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgdHdvQnl0ZU9wOChUd29CeXRlT3Bj
b2RlSUQgb3Bjb2RlLCBpbnQgcmVnLCBSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFNpbmdsZUluc3RydWN0aW9uQnVmZmVyV3JpdGVyIHdyaXRlciht
X2J1ZmZlcik7CisgICAgICAgICAgICB3cml0ZXIuZW1pdFJleElmKGJ5dGVSZWdSZXF1aXJlc1Jl
eChyZWcsIGJhc2UpLCByZWcsIDAsIGJhc2UpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5dGVV
bmNoZWNrZWQoT1BfMkJZVEVfRVNDQVBFKTsKKyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRlVW5j
aGVja2VkKG9wY29kZSk7CisgICAgICAgICAgICB3cml0ZXIubWVtb3J5TW9kUk0ocmVnLCBiYXNl
LCBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB0d29CeXRlT3A4KFR3b0J5dGVP
cGNvZGVJRCBvcGNvZGUsIGludCByZWcsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlLCBpbnQgb2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBTaW5nbGVJ
bnN0cnVjdGlvbkJ1ZmZlcldyaXRlciB3cml0ZXIobV9idWZmZXIpOworICAgICAgICAgICAgd3Jp
dGVyLmVtaXRSZXhJZihieXRlUmVnUmVxdWlyZXNSZXgocmVnKSB8fCByZWdSZXF1aXJlc1JleChp
bmRleCwgYmFzZSksIHJlZywgaW5kZXgsIGJhc2UpOworICAgICAgICAgICAgd3JpdGVyLnB1dEJ5
dGVVbmNoZWNrZWQoT1BfMkJZVEVfRVNDQVBFKTsKKyAgICAgICAgICAgIHdyaXRlci5wdXRCeXRl
VW5jaGVja2VkKG9wY29kZSk7CisgICAgICAgICAgICB3cml0ZXIubWVtb3J5TW9kUk0ocmVnLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBJbW1l
ZGlhdGVzOgogICAgICAgICAvLwogICAgICAgICAvLyBBbiBpbW1lZGFpdGUgc2hvdWxkIGJlIGFw
cGVuZGVkIHdoZXJlIGFwcHJvcHJpYXRlIGFmdGVyIGFuIG9wIGhhcyBiZWVuIGVtaXR0ZWQuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBdG9taWNWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXRvbWljVmFsdWUuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0F0b21pY1ZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQXRvbWlj
VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitBdG9taWNWYWx1ZTo6fkF0b21pY1ZhbHVlKCkKK3sKK30KKworV2lkdGggQXRv
bWljVmFsdWU6OmFjY2Vzc1dpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93aWR0aDsKK30K
Kwordm9pZCBBdG9taWNWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoY29tbWEsICJ3aWR0aCA9ICIsIG1f
d2lkdGgpOworICAgIAorICAgIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShjb21tYSwgb3V0KTsKK30K
KworVmFsdWUqIEF0b21pY1ZhbHVlOjpjbG9uZUltcGwoKSBjb25zdAoreworICAgIHJldHVybiBu
ZXcgQXRvbWljVmFsdWUoKnRoaXMpOworfQorCitBdG9taWNWYWx1ZTo6QXRvbWljVmFsdWUoS2lu
ZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBXaWR0aCB3aWR0aCwgVmFsdWUqIG9wZXJhbmQsIFZhbHVl
KiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCwgSGVhcFJhbmdlIHJhbmdlLCBIZWFwUmFuZ2UgZmVu
Y2VSYW5nZSkKKyAgICA6IE1lbW9yeVZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIG9wZXJhbmQt
PnR5cGUoKSwgb3JpZ2luLCBvZmZzZXQsIHJhbmdlLCBmZW5jZVJhbmdlLCBvcGVyYW5kLCBwb2lu
dGVyKQorICAgICwgbV93aWR0aCh3aWR0aCkKK3sKKyAgICBBU1NFUlQoYmVzdFR5cGUoR1AsIG9w
ZXJhdGlvbldpZHRoKCkpID09IG9wZXJhdGlvblR5cGUoKSk7CisgICAgCisgICAgc3dpdGNoIChr
aW5kLm9wY29kZSgpKSB7CisgICAgY2FzZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWlj
WGNoZ0FuZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6
CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorfQorCitBdG9taWNWYWx1ZTo6QXRvbWljVmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2lu
LCBXaWR0aCB3aWR0aCwgVmFsdWUqIGV4cGVjdGVkVmFsdWUsIFZhbHVlKiBuZXdWYWx1ZSwgVmFs
dWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0LCBIZWFwUmFuZ2UgcmFuZ2UsIEhlYXBSYW5nZSBm
ZW5jZVJhbmdlKQorICAgIDogTWVtb3J5VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwga2luZC5v
cGNvZGUoKSA9PSBBdG9taWNXZWFrQ0FTID8gSW50MzIgOiBleHBlY3RlZFZhbHVlLT50eXBlKCks
IG9yaWdpbiwgb2Zmc2V0LCByYW5nZSwgZmVuY2VSYW5nZSwgZXhwZWN0ZWRWYWx1ZSwgbmV3VmFs
dWUsIHBvaW50ZXIpCisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworICAgIEFTU0VSVChiZXN0VHlw
ZShHUCwgb3BlcmF0aW9uV2lkdGgoKSkgPT0gb3BlcmF0aW9uVHlwZSgpKTsKKworICAgIHN3aXRj
aCAoa2luZC5vcGNvZGUoKSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICBjYXNlIEF0
b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0F0b21pY1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQXRvbWljVmFsdWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNBdG9taWNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5j
bHVkZSAiQjNXaWR0aC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgSlNfRVhQT1JUX1BSSVZBVEUgQXRvbWljVmFsdWUgOiBwdWJsaWMgTWVtb3J5VmFsdWUgewor
cHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoS2luZCBraW5kKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzQXRvbWljKGtpbmQub3Bjb2RlKCkpOworICAgIH0KKyAgICAKKyAgICB+QXRv
bWljVmFsdWUoKTsKKyAgICAKKyAgICBUeXBlIG9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJldHVy
biBjaGlsZCgwKS0+dHlwZSgpOyB9CisgICAgCisgICAgV2lkdGggb3BlcmF0aW9uV2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgCisgICAgLy8gU3lub255bSBmb3Igb3BlcmF0
aW9uV2lkdGgoKSwgaWYgeW91J3JlIGFjY2Vzc2luZyB2aWEgTWVtb3J5VmFsdWUuCisgICAgV2lk
dGggYWNjZXNzV2lkdGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgCisgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIEF0b21pY1ZhbHVl
KEtpbmQsIE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBvcGVyYW5kLCBWYWx1ZSogcG9pbnRlciwgaW50
MzJfdCBvZmZzZXQgPSAwLCBIZWFwUmFuZ2UgcmFuZ2UgPSBIZWFwUmFuZ2U6OnRvcCgpLCBIZWFw
UmFuZ2UgZmVuY2VSYW5nZSA9IEhlYXBSYW5nZTo6dG9wKCkpOworICAgIAorICAgIEF0b21pY1Zh
bHVlKEtpbmQsIE9yaWdpbiwgV2lkdGgsIFZhbHVlKiBleHBlY3RlZFZhbHVlLCBWYWx1ZSogbmV3
VmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDAsIEhlYXBSYW5nZSByYW5n
ZSA9IEhlYXBSYW5nZTo6dG9wKCksIEhlYXBSYW5nZSBmZW5jZVJhbmdlID0gSGVhcFJhbmdlOjp0
b3AoKSk7CisgICAgCisgICAgV2lkdGggbV93aWR0aDsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMjEzMjYxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiAr
NDAsNyBAQCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIEluc2VydGlvblNldDsKIGNs
YXNzIFByb2NlZHVyZTsKIGNsYXNzIFZhbHVlOwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIEdl
bmVyaWNCbG9ja0luc2VydGlvblNldDsKIAogY2xhc3MgQmFzaWNCbG9jayB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CkBAIC0xNTgsNiArMTU5LDcgQEAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiAgICAgZnJpZW5kIGNsYXNzIElu
c2VydGlvblNldDsKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lPiBmcmllbmQgY2xhc3MgR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0OwogICAgIAogICAg
IC8vIEluc3RhbnRpYXRlIHZpYSBQcm9jZWR1cmUuCiAgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBp
bmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAyMTMyNjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzYsMzUgKzM2LDEzIEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogQmxv
Y2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KFByb2NlZHVyZSAmcHJvYykKLSAgICA6
IG1fcHJvYyhwcm9jKQorICAgIDogR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0KHByb2MubV9ibG9j
a3MpCisgICAgLCBtX3Byb2MocHJvYykKIHsKIH0KIAogQmxvY2tJbnNlcnRpb25TZXQ6On5CbG9j
a0luc2VydGlvblNldCgpIHsgfQogCi12b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoQmxv
Y2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCi17Ci0gICAgbV9pbnNlcnRpb25zLmFwcGVuZChXVEZN
b3ZlKGluc2VydGlvbikpOwotfQotCi1CYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5z
ZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQotewotICAgIHN0ZDo6dW5pcXVl
X3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhVSU5UX01BWCwgZnJlcXVlbmN5
KSk7Ci0gICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7Ci0gICAgaW5zZXJ0KEJs
b2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2NrKSkpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLUJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRCZWZvcmUoQmFzaWNC
bG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5KQotewotICAgIHJldHVybiBpbnNlcnQoYmVm
b3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYmVmb3Jl
LT5mcmVxdWVuY3koKSk7Ci19Ci0KLUJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNl
cnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSkKLXsKLSAgICByZXR1
cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZy
ZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7Ci19Ci0KIEJhc2ljQmxvY2sqIEJsb2NrSW5z
ZXJ0aW9uU2V0OjpzcGxpdEZvcndhcmQoCiAgICAgQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVk
JiB2YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqIGluc2VydGlvblNldCwgZG91YmxlIGZyZXF1ZW5j
eSkKIHsKQEAgLTEwMiwzMiArODAsNiBAQCBCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6
c3BsaXRGb3J3CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBCbG9ja0luc2VydGlvblNl
dDo6ZXhlY3V0ZSgpCi17Ci0gICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdp
dmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5lZWQgdG8gc29ydCB0aGVtIGJlZm9yZQot
ICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVy
IGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8gYmUKLSAgICAvLyBmYXN0LCBzbyB3ZSB1
c2UgYnViYmxlIHNvcnQuCi0gICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9p
bnNlcnRpb25zLmVuZCgpKTsKLQotICAgIGV4ZWN1dGVJbnNlcnRpb25zKG1fcHJvYy5tX2Jsb2Nr
cywgbV9pbnNlcnRpb25zKTsKLSAgICAKLSAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4g
VGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0J3MKLSAgICAvLyBoZWFsdGh5IHRv
IGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5nLgotICAgIG1fcHJvYy5tX2Jsb2Nrcy5y
ZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgWyZdIChzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9j
az4mIGJsb2NrUHRyKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7Ci0g
ICAgICAgIH0pOwotICAgIAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0
aGVpciBuZXcgaW5kaWNlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9jLm1f
YmxvY2tzLnNpemUoKTsgKytpKQotICAgICAgICBtX3Byb2MubV9ibG9ja3NbaV0tPm1faW5kZXgg
PSBpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDIxMzI2MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAi
QjNHZW5lcmljQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgog
I2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0z
NSwyNiArMzYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIGNsYXNzIElu
c2VydGlvblNldDsKIAotdHlwZWRlZiBXVEY6Okluc2VydGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFz
aWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOwordHlwZWRlZiBHZW5lcmljQmxvY2tJbnNlcnRpb25T
ZXQ8QmFzaWNCbG9jaz46OkJsb2NrSW5zZXJ0aW9uIEJsb2NrSW5zZXJ0aW9uOwogCi1jbGFzcyBC
bG9ja0luc2VydGlvblNldCB7CitjbGFzcyBCbG9ja0luc2VydGlvblNldCA6IHB1YmxpYyBHZW5l
cmljQmxvY2tJbnNlcnRpb25TZXQ8QmFzaWNCbG9jaz4gewogcHVibGljOgogICAgIEJsb2NrSW5z
ZXJ0aW9uU2V0KFByb2NlZHVyZSYpOwogICAgIH5CbG9ja0luc2VydGlvblNldCgpOwogICAgIAot
ICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYpOwotCi0gICAgLy8gSW5zZXJ0IGEgbmV3
IGJsb2NrIGF0IGEgZ2l2ZW4gaW5kZXguCi0gICAgQmFzaWNCbG9jayogaW5zZXJ0KHVuc2lnbmVk
IGluZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7Ci0KLSAgICAvLyBJbnNlcnRzIGEgbmV3
IGJsb2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVzdWFsbHkgeW91IHdpbGwgbm90IHBhc3Mg
dGhlIGZyZXF1ZW5jeQotICAgIC8vIGFyZ3VtZW50LiBQYXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRv
IGp1c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdiZWZvcmUnIGJsb2NrLiBUaGF0J3MKLSAg
ICAvLyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCi0gICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3Jl
KEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOwotCi0gICAgLy8g
SW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2ZW4gYmxvY2suCi0gICAgQmFzaWNCbG9j
ayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFO
KTsKLQogICAgIC8vIEEgaGVscGVyIHRvIHNwbGl0IGEgYmxvY2sgd2hlbiBmb3J3YXJkIGl0ZXJh
dGluZyBvdmVyIGl0LiBJdCBjcmVhdGVzIGEgbmV3IGJsb2NrIHRvIGhvbGQKICAgICAvLyBldmVy
eXRoaW5nIGJlZm9yZSB0aGUgaW5zdHJ1Y3Rpb24gYXQgdmFsdWVJbmRleC4gVGhlIGN1cnJlbnQg
YmxvY2sgaXMgbGVmdCB3aXRoCiAgICAgLy8gZXZlcnl0aGluZyBhdCBhbmQgYWZ0ZXIgdmFsdWVJ
bmRleC4gSWYgdGhlIG9wdGlvbmFsIEluc2VydGlvblNldCBpcyBwcm92aWRlZCwgaXQgd2lsbCBn
ZXQKQEAgLTgwLDEyICs2OCw5IEBAIHB1YmxpYzoKICAgICBCYXNpY0Jsb2NrKiBzcGxpdEZvcndh
cmQoCiAgICAgICAgIEJhc2ljQmxvY2sqLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwgSW5zZXJ0aW9u
U2V0KiA9IG51bGxwdHIsCiAgICAgICAgIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKLSAgICAK
LSAgICBib29sIGV4ZWN1dGUoKTsKIAogcHJpdmF0ZToKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsK
LSAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKIH07CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZm
ZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0
cy5jcHAJKHJldmlzaW9uIDIxMzI2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vm
ZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODIsOCBAQCBib29sIEVmZmVjdHM6
OmludGVyZmVyZXMoY29uc3QgRWZmZWN0cyYgCiAgICAgICAgIHx8IGludGVyZmVyZXNXaXRoV3Jp
dGVzUGlubmVkKG90aGVyLCAqdGhpcykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVy
LndyaXRlcykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVyLnJlYWRzKQotICAgICAg
ICB8fCByZWFkcy5vdmVybGFwcyhvdGhlci53cml0ZXMpOworICAgICAgICB8fCByZWFkcy5vdmVy
bGFwcyhvdGhlci53cml0ZXMpCisgICAgICAgIHx8IChmZW5jZSAmJiBvdGhlci5mZW5jZSk7CiB9
CiAKIGJvb2wgRWZmZWN0czo6b3BlcmF0b3I9PShjb25zdCBFZmZlY3RzJiBvdGhlcikgY29uc3QK
QEAgLTk1LDcgKzk2LDggQEAgYm9vbCBFZmZlY3RzOjpvcGVyYXRvcj09KGNvbnN0IEVmZmVjdHMm
IAogICAgICAgICAmJiB3cml0ZXNQaW5uZWQgPT0gb3RoZXIud3JpdGVzUGlubmVkCiAgICAgICAg
ICYmIHJlYWRzUGlubmVkID09IG90aGVyLnJlYWRzUGlubmVkCiAgICAgICAgICYmIHdyaXRlcyA9
PSBvdGhlci53cml0ZXMKLSAgICAgICAgJiYgcmVhZHMgPT0gb3RoZXIucmVhZHM7CisgICAgICAg
ICYmIHJlYWRzID09IG90aGVyLnJlYWRzCisgICAgICAgICYmIGZlbmNlID09IG90aGVyLmZlbmNl
OwogfQogCiBib29sIEVmZmVjdHM6Om9wZXJhdG9yIT0oY29uc3QgRWZmZWN0cyYgb3RoZXIpIGNv
bnN0CkBAIC0xMjAsNiArMTIyLDggQEAgdm9pZCBFZmZlY3RzOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbgogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXcml0ZXNQaW5uZWQiKTsKICAgICBp
ZiAocmVhZHNQaW5uZWQpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlJlYWRzUGlubmVkIik7
CisgICAgaWYgKGZlbmNlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJGZW5jZSIpOwogICAg
IGlmICh3cml0ZXMpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlczoiLCB3cml0ZXMp
OwogICAgIGlmIChyZWFkcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVj
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJ
KHJldmlzaW9uIDIxMzI2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDYgKzcxLDEwIEBAIHN0cnVjdCBFZmZlY3RzIHsKICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMTczCiAgICAg
Ym9vbCByZWFkc1Bpbm5lZCB7IGZhbHNlIH07CiAgICAgYm9vbCB3cml0ZXNQaW5uZWQgeyBmYWxz
ZSB9OworICAgIAorICAgIC8vIE1lbW9yeSBmZW5jZXMgY2Fubm90IGJlIHJlb3JkZXJlZCBhcm91
bmQgZWFjaCBvdGhlciByZWdhcmRsZXNzIG9mIHRoZWlyIGVmZmVjdHMuIFRoaXMgaXMgZmxhZ2dl
ZAorICAgIC8vIGlmIHRoZSBvcGVyYXRpb24gaXMgYSBtZW1vcnkgZmVuY2UuCisgICAgYm9vbCBm
ZW5jZSB7IGZhbHNlIH07CiAKICAgICBIZWFwUmFuZ2Ugd3JpdGVzOwogICAgIEhlYXBSYW5nZSBy
ZWFkczsKQEAgLTg5LDYgKzkzLDcgQEAgc3RydWN0IEVmZmVjdHMgewogICAgICAgICByZXN1bHQu
cmVhZHMgPSBIZWFwUmFuZ2U6OnRvcCgpOwogICAgICAgICByZXN1bHQucmVhZHNQaW5uZWQgPSB0
cnVlOwogICAgICAgICByZXN1bHQud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0
LmZlbmNlID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTEwMyw3
ICsxMDgsNyBAQCBzdHJ1Y3QgRWZmZWN0cyB7CiAKICAgICBib29sIG11c3RFeGVjdXRlKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiB0ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdy
aXRlc0xvY2FsU3RhdGUgfHwgd3JpdGVzIHx8IHdyaXRlc1Bpbm5lZDsKKyAgICAgICAgcmV0dXJu
IHRlcm1pbmFsIHx8IGV4aXRzU2lkZXdheXMgfHwgd3JpdGVzTG9jYWxTdGF0ZSB8fCB3cml0ZXMg
fHwgd3JpdGVzUGlubmVkIHx8IGZlbmNlOwogICAgIH0KIAogICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiByZW9yZGVyaW5nIGluc3RydWN0aW9ucyB3aXRoIHRoZXNlIHJlc3BlY3RpdmUgZWZmZWN0cyB3
b3VsZCBjaGFuZ2UgcHJvZ3JhbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxp
bWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkocmV2aXNp
b24gMjEzMjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9u
U3ViZXhwcmVzc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Miw2ICsxNDIsNyBAQCBzdHJ1Y3Qg
SW1wdXJlQmxvY2tEYXRhIHsKIAogICAgIFJhbmdlU2V0PEhlYXBSYW5nZT4gcmVhZHM7IC8vIFRo
aXMgb25seSBnZXRzIHVzZWQgZm9yIGZvcndhcmQgc3RvcmUgZWxpbWluYXRpb24uCiAgICAgUmFu
Z2VTZXQ8SGVhcFJhbmdlPiB3cml0ZXM7IC8vIFRoaXMgZ2V0cyB1c2VkIGZvciBib3RoIGxvYWQg
YW5kIHN0b3JlIGVsaW1pbmF0aW9uLgorICAgIGJvb2wgZmVuY2U7CiAKICAgICBNZW1vcnlWYWx1
ZU1hcCBzdG9yZXNBdEhlYWQ7CiAgICAgTWVtb3J5VmFsdWVNYXAgbWVtb3J5VmFsdWVzQXRUYWls
OwpAQCAtMTc0LDEyICsxNzUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChtZW1vcnkgJiYgbWVtb3J5LT5pc1N0b3JlKCkKICAgICAgICAgICAgICAg
ICAgICAgJiYgIWRhdGEucmVhZHMub3ZlcmxhcHMobWVtb3J5LT5yYW5nZSgpKQotICAgICAgICAg
ICAgICAgICAgICAmJiAhZGF0YS53cml0ZXMub3ZlcmxhcHMobWVtb3J5LT5yYW5nZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgJiYgIWRhdGEud3JpdGVzLm92ZXJsYXBzKG1lbW9yeS0+cmFuZ2Uo
KSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKCFkYXRhLmZlbmNlIHx8ICFtZW1vcnktPmhhc0Zl
bmNlKCkpKQogICAgICAgICAgICAgICAgICAgICBkYXRhLnN0b3Jlc0F0SGVhZC5hZGQobWVtb3J5
KTsKICAgICAgICAgICAgICAgICBkYXRhLnJlYWRzLmFkZChlZmZlY3RzLnJlYWRzKTsKIAogICAg
ICAgICAgICAgICAgIGlmIChIZWFwUmFuZ2Ugd3JpdGVzID0gZWZmZWN0cy53cml0ZXMpCiAgICAg
ICAgICAgICAgICAgICAgIGNsb2JiZXIoZGF0YSwgd3JpdGVzKTsKKyAgICAgICAgICAgICAgICBk
YXRhLmZlbmNlIHw9IGVmZmVjdHMuZmVuY2U7CiAKICAgICAgICAgICAgICAgICBpZiAobWVtb3J5
KQogICAgICAgICAgICAgICAgICAgICBkYXRhLm1lbW9yeVZhbHVlc0F0VGFpbC5hZGQobWVtb3J5
KTsKQEAgLTQ0NSw4ICs0NDgsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGRhdGFMb2coIkJhZCBtZW1vcnkgdmFsdWU6ICIsIGRlZXBEdW1w
KG1fcHJvYywgbV92YWx1ZSksICJcbiIpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtNDc4
LDYgKzQ3OSw5IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyPgogICAg
IGJvb2wgZmluZFN0b3JlQWZ0ZXJDbG9iYmVyKFZhbHVlKiBwdHIsIEhlYXBSYW5nZSByYW5nZSwg
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgeworICAgICAgICBpZiAobV92YWx1ZS0+YXM8TWVt
b3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAogICAgICAgICAvLyBXZSBjYW4gZWxpbWluYXRlIGEgc3RvcmUgaWYgZXZlcnkgZm9yd2Fy
ZCBwYXRoIGhpdHMgYSBzdG9yZSB0byB0aGUgc2FtZSBsb2NhdGlvbiBiZWZvcmUKICAgICAgICAg
Ly8gaGl0dGluZyBhbnkgb3BlcmF0aW9uIHRoYXQgb2JzZXJ2ZXMgdGhlIHN0b3JlLiBUaGlzIHNl
YXJjaCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZQogICAgICAgICAvLyBleHBlbnNpdmUsIGJ1dCBp
biB0aGUgb3ZlcndoZWxtaW5nIG1ham9yaXR5IG9mIGNhc2VzIGl0IHdpbGwgYWxtb3N0IGltbWVk
aWF0ZWx5IGhpdCBhbiAKQEAgLTYxNCw2ICs2MTgsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCptX3ZhbHVlLCAiOiBsb29raW5nIGJhY2t3
YXJkIGZvciAiLCAqcHRyLCAiLi4uXG4iKTsKICAgICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEdpdmluZyB1cCBiZWNhdXNlIGZlbmNl
cy5cbiIpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKICAg
ICAgICAgaWYgKE1lbW9yeVZhbHVlKiBtYXRjaCA9IG1fZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwu
ZmluZChwdHIsIGZpbHRlcikpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBGb3VuZCAiLCAqbWF0Y2gsICIgbG9jYWxseS5cbiIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMjEzMjYx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtOTIsNiArOTIsNyBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9j
ZWR1cmUsCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTA1MDcKICAgICB9CiAKKyAgICAvLyBUaGlzIHB1dHMgdGhlIElSIGluIHF1aXJrcyBtb2Rl
LgogICAgIGxvd2VyTWFjcm9zKHByb2NlZHVyZSk7CiAKICAgICBpZiAob3B0TGV2ZWwgPj0gMSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9u
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Js
b2NrSW5zZXJ0aW9uU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiUHVyZU5hTi5o
IgorI2luY2x1ZGUgPHd0Zi9CdWJibGVTb3J0Lmg+CisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIEluc2VydGlvblNldDsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9j
az4KK2NsYXNzIEdlbmVyaWNCbG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBXVEY6Okluc2VydGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0
aW9uOworICAgIAorICAgIEdlbmVyaWNCbG9ja0luc2VydGlvblNldChWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEJhc2ljQmxvY2s+PiYgYmxvY2tzKQorICAgICAgICA6IG1fYmxvY2tzKGJsb2NrcykK
KyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYgaW5z
ZXJ0aW9uKQorICAgIHsKKyAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChXVEZNb3ZlKGluc2Vy
dGlvbikpOworICAgIH0KKworICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBhIGdpdmVuIGlu
ZGV4LgorICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1
ZW5jeSA9IFBOYU4pCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4g
YmxvY2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIGZyZXF1ZW5jeSkpOworICAgICAgICBCYXNp
Y0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICAgICAgaW5zZXJ0KEJsb2NrSW5zZXJ0
aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2NrKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYmVmb3JlIHRoZSBnaXZlbiBibG9jay4g
VXN1YWxseSB5b3Ugd2lsbCBub3QgcGFzcyB0aGUgZnJlcXVlbmN5CisgICAgLy8gYXJndW1lbnQu
IFBhc3NpbmcgUE5hTiBjYXVzZXMgdXMgdG8ganVzdCB1c2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUg
J2JlZm9yZScgYmxvY2suIFRoYXQncworICAgIC8vIHVzdWFsbHkgd2hhdCB5b3Ugd2FudC4KKyAg
ICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJl
cXVlbmN5ID0gUE5hTikKKyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRl
eCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVu
Y3koKSk7CisgICAgfQorCisgICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBhZnRlciB0aGUgZ2l2
ZW4gYmxvY2suCisgICAgQmFzaWNCbG9jayogaW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIs
IGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluc2VydChh
ZnRlci0+aW5kZXgoKSArIDEsIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBh
ZnRlci0+ZnJlcXVlbmN5KCkpOworICAgIH0KKworICAgIGJvb2wgZXhlY3V0ZSgpCisgICAgewor
ICAgICAgICBpZiAobV9pbnNlcnRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGFsbG93IGluc2VydGlvbnMgdG8gYmUgZ2l2
ZW4gdG8gdXMgaW4gYW55IG9yZGVyLiBTbywgd2UgbmVlZCB0byBzb3J0IHRoZW0gYmVmb3JlCisg
ICAgICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJl
ZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8gYmUKKyAgICAgICAgLy8gZmFzdCwg
c28gd2UgdXNlIGJ1YmJsZSBzb3J0LgorICAgICAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5i
ZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworICAgICAgICAKKyAgICAgICAgZXhlY3V0ZUlu
c2VydGlvbnMobV9ibG9ja3MsIG1faW5zZXJ0aW9ucyk7CisgICAgICAgIAorICAgICAgICAvLyBQ
cnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0
IGl0J3MKKyAgICAgICAgLy8gaGVhbHRoeSB0byBrZWVwIHRoZSBibG9jayBsaXN0IGZyb20gZ3Jv
d2luZy4KKyAgICAgICAgbV9ibG9ja3MucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBb
Jl0gKHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiYgYmxvY2tQdHIpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5k
aWNlcy4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgbV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRp
b24sIDg+IG1faW5zZXJ0aW9uczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0hlYXBSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hl
YXBSYW5nZS5oCShyZXZpc2lvbiAyMTMyNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNIZWFwUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OCw2ICs4OCwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICB9CiAgICAgCisgICAgSGVhcFJhbmdl
IG9wZXJhdG9yfChjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIEhlYXBSYW5nZSgKKyAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1f
YmVnaW4pLAorICAgICAgICAgICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAg
fQorICAgIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2Jl
Z2luICE9IG1fZW5kOyB9CiAKICAgICB1bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
YmVnaW47IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0
LmNwcAkocmV2aXNpb24gMjEzMjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5z
ZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDYgKzU4LDExIEBAIFZhbHVlKiBJ
bnNlcnRpb25TZXQ6Omluc2VydEJvdHRvbShzaXplX3QKICAgICByZXR1cm4gaW5zZXJ0Qm90dG9t
KGluZGV4LCBsaWtlVmFsdWUtPm9yaWdpbigpLCBsaWtlVmFsdWUtPnR5cGUoKSk7CiB9CiAKK1Zh
bHVlKiBJbnNlcnRpb25TZXQ6Omluc2VydENsb25lKHNpemVfdCBpbmRleCwgVmFsdWUqIHZhbHVl
KQoreworICAgIHJldHVybiBpbnNlcnRWYWx1ZShpbmRleCwgbV9wcm9jZWR1cmUuY2xvbmUodmFs
dWUpKTsKK30KKwogdm9pZCBJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2sp
CiB7CiAgICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVu
ZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCShy
ZXZpc2lvbiAyMTMyNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25T
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDYgKzcxLDggQEAgcHVibGljOgogCiAgICAgVmFs
dWUqIGluc2VydEJvdHRvbShzaXplX3QgaW5kZXgsIE9yaWdpbiwgVHlwZSk7CiAgICAgVmFsdWUq
IGluc2VydEJvdHRvbShzaXplX3QgaW5kZXgsIFZhbHVlKik7CisgICAgCisgICAgVmFsdWUqIGlu
c2VydENsb25lKHNpemVfdCBpbmRleCwgVmFsdWUqKTsKIAogICAgIHZvaWQgZXhlY3V0ZShCYXNp
Y0Jsb2NrKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jv
cy5jcHAJKHJldmlzaW9uIDIxMzI2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyTWFjcm9zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDExICsyOSwxMyBAQAogI2lmIEVO
QUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Uu
aCIKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkIzQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJCM0ND
YWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0Nhc2VDb2xsZWN0aW9uSW5saW5lcy5oIgogI2luY2x1
ZGUgIkIzQ29uc3RQdHJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1
ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIK
ICNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgpAQCAtNDIsNiArNDQsNyBAQAogI2luY2x1
ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCiAjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1
ZS5oIgogI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCisjaW5jbHVkZSAiQjNVc2VDb3VudHMu
aCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5o
IgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTU4LDExICs2MSwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9wcm9jKHByb2MpCiAgICAgICAgICwgbV9ibG9ja0luc2VydGlvblNldChwcm9j
KQogICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KHByb2MpCisgICAgICAgICwgbV91c2VDb3VudHMo
cHJvYykKICAgICB7CiAgICAgfQogCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fcHJvYy5oYXNRdWlya3MoKSk7CisgICAgICAgIAogICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gYmxv
Y2s7CiAgICAgICAgICAgICBwcm9jZXNzQ3VycmVudEJsb2NrKCk7CkBAIC03Miw2ICs3OCwxMCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBtX3Byb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKICAgICAg
ICAgICAgIG1fcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIFRoaXMgaW5kaWNhdGVzIHRoYXQgd2UndmUgCisgICAgICAgIG1fcHJvYy5zZXRIYXNR
dWlya3ModHJ1ZSk7CisgICAgICAgIAogICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0K
ICAgICAKQEAgLTE4NSw3ICsxOTUsMTE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRGVwZW5kOiB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbG9hZC1s
b2FkIGZlbmNlLiBUaGlzIGNvZGVnZW5zIHRvIG5vdGhpbmcgb24gWDg2LiBXZSB1c2UgaXQgdG8g
dGVsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcGlsZXIgbm90IHRvIGJsb2NrIGxv
YWQgbW90aW9uLgorICAgICAgICAgICAgICAgICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxGZW5jZVZhbHVlPihtX2luZGV4LCBtX29yaWdpbik7CisgICAgICAg
ICAgICAgICAgICAgIGZlbmNlLT5yZWFkID0gSGVhcFJhbmdlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGZlbmNlLT53cml0ZSA9IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAvLyBLaWxsIHRoZSBEZXBlbmQsIHdoaWNoIHNob3VsZCB1
bmxvY2sgYSBidW5jaCBvZiBjb2RlIHNpbXBsaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5yZXBsYWNlV2l0aEJvdHRvbShtX2luc2VydGlvblNldCwgbV9pbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY2FzZSBBdG9taWNXZWFrQ0FTOgorICAgICAgICAgICAgY2FzZSBB
dG9taWNTdHJvbmdDQVM6IHsKKyAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQXRv
bWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAgICAg
ICAgICAgIFdpZHRoIHdpZHRoID0gYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc0Nhbm9uaWNhbFdpZHRoKHdpZHRoKSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgVmFsdWUqIGV4cGVjdGVkVmFsdWUgPSBhdG9taWMtPmNoaWxkKDApOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vIE9uIEFSTSwgdGhlIGxvYWQgcGFydCBvZiB0aGUgQ0FT
IGRvZXMgYSBsb2FkIHdpdGggemVybyBleHRlbnNpb24uIFRoZXJlZm9yZSwgd2UgbmVlZAorICAg
ICAgICAgICAgICAgIC8vIHRvIHplcm8tZXh0ZW5kIHRoZSBpbnB1dC4KKyAgICAgICAgICAgICAg
ICBWYWx1ZSogbWFza2VkRXhwZWN0ZWRWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1
ZT4oCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEJpdEFuZCwgbV9vcmlnaW4sIGV4cGVj
dGVkVmFsdWUsCisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENv
bnN0YW50KG1faW5kZXgsIGV4cGVjdGVkVmFsdWUsIG1hc2sod2lkdGgpKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgYXRvbWljLT5jaGlsZCgwKSA9IG1hc2tlZEV4cGVjdGVk
VmFsdWU7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgQXRvbWljWGNoZ0FkZDoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICAg
ICAgICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnU3Vi
OgorICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgICAgICAgICAgY2FzZSBBdG9t
aWNYY2hnOiB7CisgICAgICAgICAgICAgICAgLy8gT24gWDg2LCB0aGVzZSBtYXkgYWN0dWFsbHkg
cmV0dXJuIGdhcmJhZ2UgaW4gdGhlIGhpZ2ggYml0cy4gT24gQVJNNjQsIHRoZXNlIHNvcnRhCisg
ICAgICAgICAgICAgICAgLy8gemVyby1leHRlbmQgdGhlaXIgaGlnaCBiaXRzLCBleGNlcHQgdGhh
dCB0aGUgaGlnaCBiaXRzIG1pZ2h0IGdldCBwb2xsdXRlZCBieSBoaWdoCisgICAgICAgICAgICAg
ICAgLy8gYml0cyBpbiB0aGUgb3BlcmFuZC4gLiBTbywgZWl0aGVyIHdheSwgd2UgbmVlZCB0byB0
aHJvdyBhIHNpZ24tZXh0ZW5kIG9uIHRoZXNlCisgICAgICAgICAgICAgICAgLy8gdGhpbmdzLgor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5vcGNvZGUoKSA9PSBBdG9taWNYY2hnU3ViICYmIG1f
dXNlQ291bnRzLm51bVVzZXMobV92YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE9uIHg4NiwgeGNoZ2FkZCBpcyBiZXR0ZXIgdGhhbiB4Y2hnc3ViIGlmIGl0IGhhcyBhbnkgdXNl
cnMuCisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5zZXRPcGNvZGVVbnNhZmVseShB
dG9taWNYY2hnQWRkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDAp
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4LCBOZWcsIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGJvb2wgZXhlbXB0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1
ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9taWNYY2hnQW5kOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBBdG9taWNYY2hnU3ViOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1hj
aGdYb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBleGVtcHQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAoZXhlbXB0KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEF0
b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAg
ICAgICAgICBXaWR0aCB3aWR0aCA9IGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNDYW5vbmljYWxXaWR0aCh3aWR0aCkpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIFZhbHVlKiBuZXdWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXgsIHNpZ25FeHRlbmRPcGNvZGUod2lkdGgpLCBtX29yaWdp
biwKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q2xvbmUobV9pbmRl
eCwgYXRvbWljKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV92YWx1ZS0+
cmVwbGFjZVdpdGhJZGVudGl0eShuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2Fk
MTZaOiB7CisgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgICAgICAgICBpZiAo
IW1lbW9yeS0+aGFzRmVuY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gU3ViLXdpZHRoIGxvYWQtYWNxIG9uIEFSTTY0
IGFsd2F5cyBzaWduIGV4dGVuZHMuCisgICAgICAgICAgICAgICAgVmFsdWUqIG5ld0xvYWQgPSBt
X2luc2VydGlvblNldC5pbnNlcnRDbG9uZShtX2luZGV4LCBtZW1vcnkpOworICAgICAgICAgICAg
ICAgIG5ld0xvYWQtPnNldE9wY29kZVVuc2FmZWx5KG1lbW9yeS0+b3Bjb2RlKCkgPT0gTG9hZDha
ID8gTG9hZDhTIDogTG9hZDE2Uyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
VmFsdWUqIG5ld1ZhbHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleCwgQml0QW5kLCBtX29yaWdpbiwgbmV3TG9hZCwKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0SW50Q29uc3RhbnQoCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luZGV4LCBtX29yaWdpbiwgSW50MzIsIG1hc2sobWVtb3J5LT5sb2Fk
U3RvcmVXaWR0aCgpKSkpOwogCisgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJ
ZGVudGl0eShuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CkBAIC00NzAsNiArNTkyLDcgQEAgcHJpdmF0ZToKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKICAg
ICBCbG9ja0luc2VydGlvblNldCBtX2Jsb2NrSW5zZXJ0aW9uU2V0OwogICAgIEluc2VydGlvblNl
dCBtX2luc2VydGlvblNldDsKKyAgICBVc2VDb3VudHMgbV91c2VDb3VudHM7CiAgICAgQmFzaWNC
bG9jayogbV9ibG9jazsKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVl
OwpAQCAtNDc3LDIxICs2MDAsMTIgQEAgcHJpdmF0ZToKICAgICBib29sIG1fY2hhbmdlZCB7IGZh
bHNlIH07CiB9OwogCi1ib29sIGxvd2VyTWFjcm9zSW1wbChQcm9jZWR1cmUmIHByb2MpCi17Ci0g
ICAgTG93ZXJNYWNyb3MgbG93ZXJNYWNyb3MocHJvYyk7Ci0gICAgcmV0dXJuIGxvd2VyTWFjcm9z
LnJ1bigpOwotfQotCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAogYm9vbCBsb3dlck1hY3Jv
cyhQcm9jZWR1cmUmIHByb2MpCiB7Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJs
b3dlck1hY3JvcyIpOwotICAgIGJvb2wgcmVzdWx0ID0gbG93ZXJNYWNyb3NJbXBsKHByb2MpOwot
ICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFsb3dl
ck1hY3Jvc0ltcGwocHJvYykpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgTG93ZXJNYWNyb3Mg
bG93ZXJNYWNyb3MocHJvYyk7CisgICAgcmV0dXJuIGxvd2VyTWFjcm9zLnJ1bigpOwogfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHAJKHJl
dmlzaW9uIDIxMzI2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9z
QWZ0ZXJPcHRpbWl6YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NiwxNSArMTU2LDE0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFJvdEw6IHsKICAgICAgICAgICAgICAgICAv
LyBBUk02NCBkb2Vzbid0IGhhdmUgYSByb3RhdGUgbGVmdC4KICAgICAgICAgICAgICAgICBpZiAo
aXNBUk02NCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTaGlmdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dDxWYWx1ZT4obV9pbmRleCwgTmVnLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQo
MSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHJvdGF0ZSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgUm90UiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFs
dWUtPmNoaWxkKDApLCBuZXdTaGlmdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5yZXBsYWNlV2l0aElkZW50aXR5KHJvdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBWYWx1ZSog
bmV3U2hpZnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIE5lZywgbV92
YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICAgICAg
VmFsdWUqIHJvdGF0ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgUm90
UiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBuZXdTaGlmdCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocm90YXRlKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAyMTMyNjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTIgKzI4LDE0IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVk
ZSAiQWlyQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIK
ICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCiAjaW5j
bHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNs
dWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCiAj
aW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQmxvY2tXb3JrbGlz
dC5oIgogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgpAQCAtNzIsNiArNzQsMTYgQEAgbmFtZXNw
YWNlIHsKIAogY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKKy8vIEZJWE1FOiBXZSB3b3Vs
ZG4ndCBuZWVkIHRoaXMgaWYgQWlyIHN1cHBvcnRlZCBXaWR0aCBtb2RpZmllcnMgaW4gQWlyOjpL
aW5kLgorLy8gT09QUyEhISAobmVlZCBhIGJ1ZyBVUkwpCisjZGVmaW5lIE9QQ09ERV9GT1JfV0lE
VEgob3Bjb2RlLCB3aWR0aCkgKCBcCisgICAgKHdpZHRoKSA9PSBXaWR0aDggPyBvcGNvZGUgIyMg
OCA6IFwKKyAgICAod2lkdGgpID09IFdpZHRoMTYgPyBvcGNvZGUgIyMgMTYgOiBcCisgICAgKHdp
ZHRoKSA9PSBXaWR0aDMyID8gb3Bjb2RlICMjIDMyIDogXAorICAgIG9wY29kZSAjIyA2NCkKKyNk
ZWZpbmUgT1BDT0RFX0ZPUl9DQU5PTklDQUxfV0lEVEgob3Bjb2RlLCB3aWR0aCkgKCBcCisgICAg
KHdpZHRoKSA9PSBXaWR0aDY0ID8gb3Bjb2RlICMjIDY0IDogb3Bjb2RlICMjIDMyKQorCiBjbGFz
cyBMb3dlclRvQWlyIHsKIHB1YmxpYzoKICAgICBMb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2Vk
dXJlKQpAQCAtODMsNiArOTUsMTIgQEAgcHVibGljOgogICAgICAgICAsIG1fZG9taW5hdG9ycyhw
cm9jZWR1cmUuZG9taW5hdG9ycygpKQogICAgICAgICAsIG1fcHJvY2VkdXJlKHByb2NlZHVyZSkK
ICAgICAgICAgLCBtX2NvZGUocHJvY2VkdXJlLmNvZGUoKSkKKyAgICAgICAgLCBtX2Jsb2NrSW5z
ZXJ0aW9uU2V0KG1fY29kZSkKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAgICAgICAs
IG1fZWF4KFg4NlJlZ2lzdGVyczo6ZWF4KQorICAgICAgICAsIG1fZWN4KFg4NlJlZ2lzdGVyczo6
ZWN4KQorICAgICAgICAsIG1fZWR4KFg4NlJlZ2lzdGVyczo6ZWR4KQorI2VuZGlmCiAgICAgewog
ICAgIH0KIApAQCAtMTI0LDE0ICsxNDIsMTggQEAgcHVibGljOgogICAgICAgICAvLyBob2lzdGVk
IGFkZHJlc3MgZXhwcmVzc2lvbiBiZWZvcmUgd2UgZHVwbGljYXRlIGl0IGJhY2sgaW50byB0aGUg
bG9vcC4KICAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2NlZHVyZS5i
bG9ja3NJblByZU9yZGVyKCkpIHsKICAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKLSAgICAg
ICAgICAgIC8vIFJlc2V0IHNvbWUgc3RhdGUuCi0gICAgICAgICAgICBtX2luc3RzLnJlc2l6ZSgw
KTsKIAogICAgICAgICAgICAgbV9pc1JhcmUgPSAhbV9mYXN0V29ya2xpc3Quc2F3KGJsb2NrKTsK
IAogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiTG93
ZXJpbmcgQmxvY2sgIiwgKmJsb2NrLCAiOlxuIik7CiAgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzdWNjZXNzb3JzIGFyZSBzZXQgdXAgY29ycmVjdGx5Lgor
ICAgICAgICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3NvciA6IGJsb2NrLT5z
dWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrVG9CbG9ja1tibG9ja10tPnN1
Y2Nlc3NvcnMoKS5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIEFpcjo6RnJlcXVlbnRlZEJs
b2NrKG1fYmxvY2tUb0Jsb2NrW3N1Y2Nlc3Nvci5ibG9jaygpXSwgc3VjY2Vzc29yLmZyZXF1ZW5j
eSgpKSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIFByb2Nlc3MgYmxvY2tzIGlu
IHJldmVyc2Ugb3JkZXIgc28gd2Ugc2VlIHVzZXMgYmVmb3JlIGRlZnMuIFRoYXQncyB3aGF0IGFs
bG93cyB1cwogICAgICAgICAgICAgLy8gdG8gbWF0Y2ggcGF0dGVybnMgZWZmZWN0aXZlbHkuCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7CkBAIC0x
NDksMTkgKzE3MSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBpbnN0cnVjdGlvbnMuIG1faW5zdHMg
Y29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCi0gICAgICAgICAg
ICAvLyBpdCBpbiByZXZlcnNlLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbnN0
cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBtX2lu
c3RzW2ldKQotICAgICAgICAgICAgICAgICAgICBtX2Jsb2NrVG9CbG9ja1tibG9ja10tPmFwcGVu
ZEluc3QoV1RGTW92ZShpbnN0KSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRoZSBzdWNjZXNzb3JzIGFyZSBzZXQgdXAgY29ycmVjdGx5LgotICAgICAg
ICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNz
b3JzKCkpIHsKLSAgICAgICAgICAgICAgICBtX2Jsb2NrVG9CbG9ja1tibG9ja10tPnN1Y2Nlc3Nv
cnMoKS5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIEFpcjo6RnJlcXVlbnRlZEJsb2NrKG1f
YmxvY2tUb0Jsb2NrW3N1Y2Nlc3Nvci5ibG9jaygpXSwgc3VjY2Vzc29yLmZyZXF1ZW5jeSgpKSk7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5pc2hBcHBlbmRpbmdJbnN0cnVjdGlvbnMo
bV9ibG9ja1RvQmxvY2tbYmxvY2tdKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9i
bG9ja0luc2VydGlvblNldC5leGVjdXRlKCk7CiAKICAgICAgICAgQWlyOjpJbnNlcnRpb25TZXQg
aW5zZXJ0aW9uU2V0KG1fY29kZSk7CiAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IG1fcHJvbG9n
dWUpCkBAIC01NjIsMTEgKzU3NSwxOSBAQCBwcml2YXRlOgogICAgIAogICAgIEFyZ1Byb21pc2Ug
bG9hZFByb21pc2VBbnlPcGNvZGUoVmFsdWUqIGxvYWRWYWx1ZSkKICAgICB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGxvYWRWYWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpOwogICAgICAgICBpZiAo
IWNhbkJlSW50ZXJuYWwobG9hZFZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKICAg
ICAgICAgaWYgKGNyb3NzZXNJbnRlcmZlcmVuY2UobG9hZFZhbHVlKSkKICAgICAgICAgICAgIHJl
dHVybiBBcmcoKTsKLSAgICAgICAgQXJnUHJvbWlzZSByZXN1bHQoYWRkcihsb2FkVmFsdWUpLCBs
b2FkVmFsdWUpOworICAgICAgICAvLyBPbiB4ODYsIGFsbCBsb2FkcyBoYXZlIGZlbmNlcy4gRG9p
bmcgdGhpcyBraW5kIG9mIGluc3RydWN0aW9uIHNlbGVjdGlvbiB3aWxsIG1vdmUgdGhlIGxvYWQs
CisgICAgICAgIC8vIGJ1dCB0aGF0J3MgZmluZSBiZWNhdXNlIG91ciBpbnRlcmZlcmVuY2UgYW5h
bHlzaXMgc3RvcHMgdGhlIG1vdGlvbiBvZiBmZW5jZXMgYXJvdW5kIG90aGVyCisgICAgICAgIC8v
IGZlbmNlcy4gU28sIGFueSBsb2FkIG1vdGlvbiB3ZSBpbnRyb2R1Y2UgaGVyZSB3b3VsZCBub3Qg
YmUgb2JzZXJ2YWJsZS4KKyAgICAgICAgaWYgKCFpc1g4NigpICYmIGxvYWRWYWx1ZS0+YXM8TWVt
b3J5VmFsdWU+KCktPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAg
ICAgIEFyZyBsb2FkQWRkciA9IGFkZHIobG9hZFZhbHVlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQobG9hZEFkZHIpOworICAgICAgICBBcmdQcm9taXNlIHJlc3VsdChsb2FkQWRkciwgbG9hZFZh
bHVlKTsKICAgICAgICAgaWYgKGxvYWRWYWx1ZS0+dHJhcHMoKSkKICAgICAgICAgICAgIHJlc3Vs
dC5zZXRUcmFwcyh0cnVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg5OCwxMSArOTE5
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0jaWYgQ1BV
KFg4NikgfHwgQ1BVKFg4Nl82NCkKICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcCh2YWx1ZSksIHRt
cChtX3ZhbHVlKSk7Ci0gICAgICAgIGFwcGVuZChNb3ZlLCB0bXAoYW1vdW50KSwgVG1wKFg4NlJl
Z2lzdGVyczo6ZWN4KSk7Ci0gICAgICAgIGFwcGVuZChvcGNvZGUsIFRtcChYODZSZWdpc3RlcnM6
OmVjeCksIHRtcChtX3ZhbHVlKSk7Ci0jZW5kaWYKKyAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChh
bW91bnQpLCBtX2VjeCk7CisgICAgICAgIGFwcGVuZChvcGNvZGUsIG1fZWN4LCB0bXAobV92YWx1
ZSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29kZTMyLCBBaXI6Ok9w
Y29kZSBvcGNvZGU2ND4KQEAgLTkzMSwxMCArOTUwLDE2IEBAIHByaXZhdGU6CiAgICAgICAgIEFp
cjo6T3Bjb2RlIG9wY29kZTMyLCBBaXI6Ok9wY29kZSBvcGNvZGU2NCwgQ29tbXV0YXRpdml0eSBj
b21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU+CiAgICAgYm9vbCB0cnlBcHBlbmRTdG9yZUJp
bk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSk7CisgICAgICAgIAogICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNvZGVGb3JUeXBlKG9wY29kZTMyLCBvcGNvZGU2NCwgbGVm
dC0+dHlwZSgpKTsKICAgICAgICAgaWYgKG9wY29kZSA9PSBBaXI6Ok9vcHMpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAorICAgICAgICAvLyBPbiB4ODYsIGFsbCBzdG9yZXMg
aGF2ZSBmZW5jZXMsIGFuZCB0aGlzIGlzbid0IHJlb3JkZXJpbmcgdGhlIHN0b3JlIGl0c2VsZi4K
KyAgICAgICAgaWYgKCFpc1g4NigpICYmIG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNG
ZW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKICAgICAgICAgQXJn
IHN0b3JlQWRkciA9IGFkZHIobV92YWx1ZSk7CiAgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOwog
CkBAIC05OTQsMTEgKzEwMTksNTAgQEAgcHJpdmF0ZToKIAogICAgICAgICByZXR1cm4gSW5zdCht
b3ZlLCBtX3ZhbHVlLCB0bXAodmFsdWUpLCBkZXN0KTsKICAgICB9CisgICAgCisgICAgQWlyOjpP
cGNvZGUgc3RvcmVPcGNvZGUoV2lkdGggd2lkdGgsIEJhbmsgYmFuaywgYm9vbCByZWxlYXNlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAgICBjYXNlIFdpZHRoODoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhbmsgPT0gR1ApOworICAgICAgICAgICAgcmV0dXJu
IHJlbGVhc2UgPyBTdG9yZVJlbDggOiBBaXI6OlN0b3JlODsKKyAgICAgICAgY2FzZSBXaWR0aDE2
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFuayA9PSBHUCk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVsMTYgOiBBaXI6OlN0b3JlMTY7CisgICAgICAgIGNhc2Ug
V2lkdGgzMjoKKyAgICAgICAgICAgIHN3aXRjaCAoYmFuaykgeworICAgICAgICAgICAgY2FzZSBH
UDoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVsZWFzZSA/IFN0b3JlUmVsMzIgOiBNb3ZlMzI7
CisgICAgICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFy
ZWxlYXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW92ZUZsb2F0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGlzNjRCaXQoKSk7CisgICAgICAgICAgICBzd2l0Y2ggKGJhbmspIHsK
KyAgICAgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UgPyBT
dG9yZVJlbDY0IDogTW92ZTsKKyAgICAgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIXJlbGVhc2UpOworICAgICAgICAgICAgICAgIHJldHVybiBNb3ZlRG91
YmxlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgQWlyOjpP
cGNvZGUgc3RvcmVPcGNvZGUoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgTWVtb3J5VmFs
dWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQobWVtb3J5LT5pc1N0b3JlKCkpOworICAgICAgICByZXR1cm4gc3RvcmVPcGNvZGUobWVt
b3J5LT5sb2FkU3RvcmVXaWR0aCgpLCBtZW1vcnktPmFjY2Vzc0JhbmsoKSwgbWVtb3J5LT5oYXNG
ZW5jZSgpKTsKKyAgICB9CiAKICAgICBJbnN0IGNyZWF0ZVN0b3JlKFZhbHVlKiB2YWx1ZSwgY29u
c3QgQXJnJiBkZXN0KQogICAgIHsKLSAgICAgICAgQWlyOjpPcGNvZGUgbW92ZU9wY29kZSA9IG1v
dmVGb3JUeXBlKHZhbHVlLT50eXBlKCkpOwotICAgICAgICByZXR1cm4gY3JlYXRlU3RvcmUobW92
ZU9wY29kZSwgdmFsdWUsIGRlc3QpOworICAgICAgICBBaXI6Ok9wY29kZSBtb3ZlT3Bjb2RlID0g
c3RvcmVPcGNvZGUodmFsdWUpOworICAgICAgICByZXR1cm4gY3JlYXRlU3RvcmUobW92ZU9wY29k
ZSwgdmFsdWUtPmNoaWxkKDApLCBkZXN0KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmdzPgpAQCAtMTAwNiw3ICsxMDcwLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgY3JlYXRlU3RvcmUoc3RkOjpmb3J3YXJkPEFy
Z3M+KGFyZ3MpLi4uKSkpOwogICAgIH0KLQorICAgIAogICAgIEFpcjo6T3Bjb2RlIG1vdmVGb3JU
eXBlKFR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMTA3Myw3
ICsxMTM3LDQxIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBl
bmQoaW5zdCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgZmluaXNoQXBwZW5kaW5nSW5zdHJ1Y3Rp
b25zKEFpcjo6QmFzaWNCbG9jayogdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gTm93IGFwcGVu
ZCB0aGUgaW5zdHJ1Y3Rpb25zLiBtX2luc3RzIGNvbnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRl
ciwgc28gd2UgcHJvY2VzcworICAgICAgICAvLyBpdCBpbiByZXZlcnNlLgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2luc3RzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgZm9yIChJ
bnN0JiBpbnN0IDogbV9pbnN0c1tpXSkKKyAgICAgICAgICAgICAgICB0YXJnZXQtPmFwcGVuZElu
c3QoV1RGTW92ZShpbnN0KSk7CisgICAgICAgIH0KKyAgICAgICAgbV9pbnN0cy5yZXNpemUoMCk7
CisgICAgfQorICAgIAorICAgIEFpcjo6QmFzaWNCbG9jayogbmV3QmxvY2soKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fYmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0QWZ0ZXIobV9ibG9ja1RvQmxv
Y2tbbV9ibG9ja10pOworICAgIH0KIAorICAgIC8vIE5PVEU6IFRoaXMgd2lsbCBjcmVhdGUgYSBj
b250aW51YXRpb24gYmxvY2sgKGBuZXh0QmxvY2tgKSAqYWZ0ZXIqIGFueSBibG9ja3MgeW91J3Zl
IGNyZWF0ZWQgdXNpbmcKKyAgICAvLyBuZXdCbG9jaygpLiBTbywgaXQncyBwcmVmZXJhYmxlIHRv
IGNyZWF0ZSBhbGwgb2YgeW91ciBibG9ja3MgdXBmcm9udCB1c2luZyBuZXdCbG9jaygpLiBBbHNv
IG5vdGUKKyAgICAvLyB0aGF0IGFueSBjb2RlIHlvdSBlbWl0IGJlZm9yZSB0aGlzIHdpbGwgYmUg
cHJlcGVuZGVkIHRvIHRoZSBjb250aW51YXRpb24sIGFuZCBhbnkgY29kZSB5b3UgZW1pdAorICAg
IC8vIGFmdGVyIHRoaXMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgcHJldmlvdXMgYmxvY2suCisg
ICAgdm9pZCBzcGxpdEJsb2NrKEFpcjo6QmFzaWNCbG9jayomIHByZXZpb3VzQmxvY2ssIEFpcjo6
QmFzaWNCbG9jayomIG5leHRCbG9jaykKKyAgICB7CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayog
YmxvY2sgPSBtX2Jsb2NrVG9CbG9ja1ttX2Jsb2NrXTsKKyAgICAgICAgCisgICAgICAgIHByZXZp
b3VzQmxvY2sgPSBibG9jazsKKyAgICAgICAgbmV4dEJsb2NrID0gbV9ibG9ja0luc2VydGlvblNl
dC5pbnNlcnRBZnRlcihibG9jayk7CisgICAgICAgIAorICAgICAgICBmaW5pc2hBcHBlbmRpbmdJ
bnN0cnVjdGlvbnMobmV4dEJsb2NrKTsKKyAgICAgICAgbmV4dEJsb2NrLT5zdWNjZXNzb3JzKCkg
PSBibG9jay0+c3VjY2Vzc29ycygpOworICAgICAgICBibG9jay0+c3VjY2Vzc29ycygpLmNsZWFy
KCk7CisgICAgICAgIAorICAgICAgICBtX2luc3RzLmFwcGVuZChWZWN0b3I8SW5zdD4oKSk7Cisg
ICAgfQorICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KICAgICBUKiBlbnN1cmVTcGVjaWFsKFQqJiBmaWVsZCwgQXJndW1lbnRzJiYuLi4gYXJndW1l
bnRzKQogICAgIHsKQEAgLTExMjMsNyArMTIyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgogICAg
ICAgICAgICAgICAgIGFyZyA9IEFyZzo6Y2FsbEFyZyh2YWx1ZS5yZXAoKS5vZmZzZXRGcm9tU1Ao
KSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kU3RvcmUodmFsdWUudmFsdWUoKSwgYXJnKTsKKyAg
ICAgICAgICAgICAgICBhcHBlbmRTdG9yZShtb3ZlRm9yVHlwZSh2YWx1ZS52YWx1ZSgpLT50eXBl
KCkpLCB2YWx1ZS52YWx1ZSgpLCBhcmcpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMTk2MSw2ICsyMDU5LDMwOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKKyAgICB2b2lkIGFwcGVuZFg4NkRpdihCMzo6T3Bjb2RlIG9wKQorICAgIHsK
KyAgICAgICAgQWlyOjpPcGNvZGUgY29udmVydFRvRG91YmxlV29yZDsKKyAgICAgICAgQWlyOjpP
cGNvZGUgZGl2OworICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPnR5cGUoKSkgeworICAgICAgICBj
YXNlIEludDMyOgorICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRU
b0RvdWJsZVdvcmQzMjsKKyAgICAgICAgICAgIGRpdiA9IFg4NkRpdjMyOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVX
b3JkID0gWDg2Q29udmVydFRvUXVhZFdvcmQ2NDsKKyAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgQVNTRVJUKG9wID09IERpdiB8fCBvcCA9PSBNb2QpOworICAgICAgICBUbXAg
cmVzdWx0ID0gb3AgPT0gRGl2ID8gbV9lYXggOiBtX2VkeDsKKworICAgICAgICBhcHBlbmQoTW92
ZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgbV9lYXgpOworICAgICAgICBhcHBlbmQoY29udmVy
dFRvRG91YmxlV29yZCwgbV9lYXgsIG1fZWR4KTsKKyAgICAgICAgYXBwZW5kKGRpdiwgbV9lYXgs
IG1fZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIHJl
c3VsdCwgdG1wKG1fdmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZFg4NlVEaXYoQjM6
Ok9wY29kZSBvcCkKKyAgICB7CisgICAgICAgIEFpcjo6T3Bjb2RlIGRpdiA9IG1fdmFsdWUtPnR5
cGUoKSA9PSBJbnQzMiA/IFg4NlVEaXYzMiA6IFg4NlVEaXY2NDsKKworICAgICAgICBBU1NFUlQo
b3AgPT0gVURpdiB8fCBvcCA9PSBVTW9kKTsKKyAgICAgICAgVG1wIHJlc3VsdCA9IG9wID09IFVE
aXYgPyBtX2VheCA6IG1fZWR4OworCisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+
Y2hpbGQoMCkpLCBtX2VheCk7CisgICAgICAgIGFwcGVuZChYb3I2NCwgbV9lZHgsIG1fZWR4KTsK
KyAgICAgICAgYXBwZW5kKGRpdiwgbV9lYXgsIG1fZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkp
KTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIHJlc3VsdCwgdG1wKG1fdmFsdWUpKTsKKyAgICB9Cisg
ICAgCisgICAgQWlyOjpPcGNvZGUgbG9hZExpbmtPcGNvZGUoV2lkdGggd2lkdGgsIGJvb2wgZmVu
Y2UpCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2UgPyBPUENPREVfRk9SX1dJRFRIKExvYWRM
aW5rQWNxLCB3aWR0aCkgOiBPUENPREVfRk9SX1dJRFRIKExvYWRMaW5rLCB3aWR0aCk7CisgICAg
fQorICAgIAorICAgIEFpcjo6T3Bjb2RlIHN0b3JlQ29uZE9wY29kZShXaWR0aCB3aWR0aCwgYm9v
bCBmZW5jZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmZW5jZSA/IE9QQ09ERV9GT1JfV0lEVEgo
U3RvcmVDb25kUmVsLCB3aWR0aCkgOiBPUENPREVfRk9SX1dJRFRIKFN0b3JlQ29uZCwgd2lkdGgp
OworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGNhbiBlbWl0IGNvZGUgZm9yIHRoZSBmb2xsb3dp
bmcgcGF0dGVybnM6CisgICAgLy8gQXRvbWljV2Vha0NBUworICAgIC8vIEJpdFhvcihBdG9taWNX
ZWFrQ0FTLCAxKQorICAgIC8vIEF0b21pY1N0cm9uZ0NBUworICAgIC8vIEVxdWFsKEF0b21pY1N0
cm9uZ0NBUywgZXhwZWN0ZWQpCisgICAgLy8gTm90RXF1YWwoQXRvbWljU3Ryb25nQ0FTLCBleHBl
Y3RlZCkKKyAgICAvLyBCcmFuY2goQXRvbWljV2Vha0NBUykKKyAgICAvLyBCcmFuY2goRXF1YWwo
QXRvbWljU3Ryb25nQ0FTLCBleHBlY3RlZCkpCisgICAgLy8gQnJhbmNoKE5vdEVxdWFsKEF0b21p
Y1N0cm9uZ0NBUywgZXhwZWN0ZWQpKQorICAgIC8vCisgICAgLy8gSXQgYXNzdW1lcyB0aGF0IGF0
b21pY1ZhbHVlIHBvaW50cyB0byB0aGUgQ0FTLCBhbmQgbV92YWx1ZSBwb2ludHMgdG8gdGhlIGlu
c3RydWN0aW9uIGJlaW5nCisgICAgLy8gZ2VuZXJhdGVkLiBJdCBhc3N1bWVzIHRoYXQgeW91J3Zl
IGNvbnN1bWVkIGV2ZXJ5dGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjb25zdW1lZC4KKyAgICB2b2lk
IGFwcGVuZENBUyhWYWx1ZSogYXRvbWljVmFsdWUsIGJvb2wgaW52ZXJ0KQorICAgIHsKKyAgICAg
ICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IGF0b21pY1ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXRvbWljKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wg
aXNCcmFuY2ggPSBtX3ZhbHVlLT5vcGNvZGUoKSA9PSBCcmFuY2g7CisgICAgICAgIGJvb2wgaXNT
dHJvbmcgPSBhdG9taWMtPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUzsKKyAgICAgICAgYm9v
bCByZXR1cm5zT2xkVmFsdWUgPSBtX3ZhbHVlLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVM7
CisgICAgICAgIAorICAgICAgICBXaWR0aCB3aWR0aCA9IGF0b21pYy0+b3BlcmF0aW9uV2lkdGgo
KTsKKyAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKGF0b21pYyk7CisKKyAgICAgICAgVG1wIHZh
bHVlUmVzdWx0VG1wOworICAgICAgICBUbXAgYm9vbFJlc3VsdFRtcDsKKyAgICAgICAgaWYgKHJl
dHVybnNPbGRWYWx1ZSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWludmVydCk7Cisg
ICAgICAgICAgICB2YWx1ZVJlc3VsdFRtcCA9IHRtcChtX3ZhbHVlKTsKKyAgICAgICAgICAgIGJv
b2xSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0Jy
YW5jaCkgeworICAgICAgICAgICAgdmFsdWVSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsK
KyAgICAgICAgICAgIGJvb2xSZXN1bHRUbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlUmVzdWx0VG1wID0gbV9jb2RlLm5ld1RtcChHUCk7
CisgICAgICAgICAgICBib29sUmVzdWx0VG1wID0gdG1wKG1fdmFsdWUpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBUbXAgc3VjY2Vzc0Jvb2xSZXN1bHRUbXA7CisgICAgICAgIGlmIChp
c1N0cm9uZyAmJiAhaXNCcmFuY2gpCisgICAgICAgICAgICBzdWNjZXNzQm9vbFJlc3VsdFRtcCA9
IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdWNjZXNzQm9v
bFJlc3VsdFRtcCA9IGJvb2xSZXN1bHRUbXA7CisKKyAgICAgICAgVG1wIGV4cGVjdGVkVmFsdWVU
bXAgPSB0bXAoYXRvbWljLT5jaGlsZCgwKSk7CisgICAgICAgIFRtcCBuZXdWYWx1ZVRtcCA9IHRt
cChhdG9taWMtPmNoaWxkKDEpKTsKKyAgICAgICAgCisgICAgICAgIEFpcjo6RnJlcXVlbnRlZEJs
b2NrIHN1Y2Nlc3M7CisgICAgICAgIEFpcjo6RnJlcXVlbnRlZEJsb2NrIGZhaWx1cmU7CisgICAg
ICAgIGlmIChpc0JyYW5jaCkgeworICAgICAgICAgICAgc3VjY2VzcyA9IG1fYmxvY2tUb0Jsb2Nr
W21fYmxvY2tdLT5zdWNjZXNzb3IoaW52ZXJ0KTsKKyAgICAgICAgICAgIGZhaWx1cmUgPSBtX2Js
b2NrVG9CbG9ja1ttX2Jsb2NrXS0+c3VjY2Vzc29yKCFpbnZlcnQpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRN
b3ZlRm9yVHlwZShhdG9taWMtPm9wZXJhdGlvblR5cGUoKSksIGltbU9yVG1wKGF0b21pYy0+Y2hp
bGQoMCkpLCBtX2VheCk7CisgICAgICAgICAgICBpZiAocmV0dXJuc09sZFZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgYXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljU3Ryb25nQ0FTLCB3aWR0
aCksIG1fZWF4LCBuZXdWYWx1ZVRtcCwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgYXBwZW5k
KHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPm9wZXJhdGlvblR5cGUoKSksIG1fZWF4LCB2YWx1
ZVJlc3VsdFRtcCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQnJhbmNoKSB7CisgICAgICAg
ICAgICAgICAgYXBwZW5kKE9QQ09ERV9GT1JfV0lEVEgoQnJhbmNoQXRvbWljU3Ryb25nQ0FTLCB3
aWR0aCksIEFyZzo6c3RhdHVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6U3VjY2VzcyksIG1fZWF4LCBu
ZXdWYWx1ZVRtcCwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbbV9i
bG9ja10tPnNldFN1Y2Nlc3NvcnMoc3VjY2VzcywgZmFpbHVyZSk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBhcHBlbmQoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNTdHJvbmdD
QVMsIHdpZHRoKSwgQXJnOjpzdGF0dXNDb25kKGludmVydCA/IE1hY3JvQXNzZW1ibGVyOjpGYWls
dXJlIDogTWFjcm9Bc3NlbWJsZXI6OlN1Y2Nlc3MpLCBtX2VheCwgdG1wKGF0b21pYy0+Y2hpbGQo
MSkpLCBhZGRyZXNzLCBib29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsKKyAgICAg
ICAgLy8gV2Ugd2lzaCB0byBlbWl0OgorICAgICAgICAvLworICAgICAgICAvLyBCbG9jayAjcmVs
b29wOgorICAgICAgICAvLyAgICAgTG9hZExpbmsKKyAgICAgICAgLy8gICAgIEJyYW5jaCBOb3RF
cXVhbAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6IFRoZW46I2ZhaWwsIEVsc2U6ICNzdG9yZQor
ICAgICAgICAvLyBCbG9jayAjc3RvcmU6CisgICAgICAgIC8vICAgICBTdG9yZUNvbmQKKyAgICAg
ICAgLy8gICAgIFhvciAkMSwgJXJlc3VsdCAgICA8LS0tIG9ubHkgaWYgIWludmVydAorICAgICAg
ICAvLyAgICAgSnVtcAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6ICNkb25lCisgICAgICAgIC8v
IEJsb2NrICNmYWlsOgorICAgICAgICAvLyAgICAgTW92ZSAkaW52ZXJ0LCAlcmVzdWx0CisgICAg
ICAgIC8vICAgICBKdW1wCisgICAgICAgIC8vICAgU3VjY2Vzc29yczogI2RvbmUKKyAgICAgICAg
Ly8gQmxvY2sgI2RvbmU6CisgICAgICAgIAorICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHJlbG9v
cEJsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBzdG9yZUJsb2Nr
ID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBzdWNjZXNzQmxvY2sgPSBu
dWxscHRyOworICAgICAgICBpZiAoIWlzQnJhbmNoICYmIGlzU3Ryb25nKQorICAgICAgICAgICAg
c3VjY2Vzc0Jsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBmYWls
QmxvY2sgPSBudWxscHRyOworICAgICAgICBpZiAoIWlzQnJhbmNoKQorICAgICAgICAgICAgZmFp
bEJsb2NrID0gbmV3QmxvY2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBzdHJvbmdGYWls
QmxvY2s7CisgICAgICAgIGlmIChpc1N0cm9uZykKKyAgICAgICAgICAgIHN0cm9uZ0ZhaWxCbG9j
ayA9IG5ld0Jsb2NrKCk7CisgICAgICAgIEFpcjo6RnJlcXVlbnRlZEJsb2NrIGNvbXBhcmlzb25G
YWlsOworICAgICAgICBBaXI6OkZyZXF1ZW50ZWRCbG9jayB3ZWFrRmFpbDsKKyAgICAgICAgaWYg
KGlzU3Ryb25nKSB7CisgICAgICAgICAgICBjb21wYXJpc29uRmFpbCA9IHN0cm9uZ0ZhaWxCbG9j
azsKKyAgICAgICAgICAgIHdlYWtGYWlsID0gcmVsb29wQmxvY2s7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAoaXNCcmFuY2gpCisgICAgICAgICAgICAgICAgY29tcGFyaXNvbkZh
aWwgPSBmYWlsdXJlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBhcmlz
b25GYWlsID0gZmFpbEJsb2NrOworICAgICAgICAgICAgd2Vha0ZhaWwgPSBmYWlsdXJlOworICAg
ICAgICB9CisgICAgICAgIEFpcjo6QmFzaWNCbG9jayogYmVnaW5CbG9jazsKKyAgICAgICAgQWly
OjpCYXNpY0Jsb2NrKiBkb25lQmxvY2s7CisgICAgICAgIHNwbGl0QmxvY2soYmVnaW5CbG9jaywg
ZG9uZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChBaXI6Okp1bXApOworICAgICAg
ICBiZWdpbkJsb2NrLT5zZXRTdWNjZXNzb3JzKHJlbG9vcEJsb2NrKTsKKyAgICAgICAgCisgICAg
ICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQobG9hZExpbmtPcGNvZGUod2lkdGgsIGF0b21pYy0+aGFz
RmVuY2UoKSksIG1fdmFsdWUsIGFkZHJlc3MsIHZhbHVlUmVzdWx0VG1wKTsKKyAgICAgICAgcmVs
b29wQmxvY2stPmFwcGVuZChPUENPREVfRk9SX0NBTk9OSUNBTF9XSURUSChCcmFuY2gsIHdpZHRo
KSwgbV92YWx1ZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIHZhbHVl
UmVzdWx0VG1wLCBleHBlY3RlZFZhbHVlVG1wKTsKKyAgICAgICAgcmVsb29wQmxvY2stPnNldFN1
Y2Nlc3NvcnMoY29tcGFyaXNvbkZhaWwsIHN0b3JlQmxvY2spOworICAgICAgICAKKyAgICAgICAg
c3RvcmVCbG9jay0+YXBwZW5kKHN0b3JlQ29uZE9wY29kZSh3aWR0aCwgYXRvbWljLT5oYXNGZW5j
ZSgpKSwgbV92YWx1ZSwgbmV3VmFsdWVUbXAsIGFkZHJlc3MsIHN1Y2Nlc3NCb29sUmVzdWx0VG1w
KTsKKyAgICAgICAgaWYgKGlzQnJhbmNoKSB7CisgICAgICAgICAgICBzdG9yZUJsb2NrLT5hcHBl
bmQoQnJhbmNoVGVzdDMyLCBtX3ZhbHVlLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8pLCBib29sUmVzdWx0VG1wLCBBcmc6OmJpdEltbSgtMSkpOworICAgICAgICAgICAgc3RvcmVC
bG9jay0+c2V0U3VjY2Vzc29ycyhzdWNjZXNzLCB3ZWFrRmFpbCk7CisgICAgICAgICAgICBkb25l
QmxvY2stPnN1Y2Nlc3NvcnMoKS5jbGVhcigpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWRvbmVCbG9jay0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGRvbmVCbG9jay0+YXBwZW5kKEFpcjo6
T29wcywgbV92YWx1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNTdHJv
bmcpIHsKKyAgICAgICAgICAgICAgICBzdG9yZUJsb2NrLT5hcHBlbmQoQnJhbmNoVGVzdDMyLCBt
X3ZhbHVlLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBzdWNjZXNzQm9vbFJl
c3VsdFRtcCwgQXJnOjpiaXRJbW0oLTEpKTsKKyAgICAgICAgICAgICAgICBzdG9yZUJsb2NrLT5z
ZXRTdWNjZXNzb3JzKHN1Y2Nlc3NCbG9jaywgcmVsb29wQmxvY2spOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHN1Y2Nlc3NCbG9jay0+YXBwZW5kKE1vdmUsIG1fdmFsdWUsIEFy
Zzo6aW1tKCFpbnZlcnQpLCBib29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgICAgICBzdWNjZXNz
QmxvY2stPmFwcGVuZChBaXI6Okp1bXAsIG1fdmFsdWUpOworICAgICAgICAgICAgICAgIHN1Y2Nl
c3NCbG9jay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2spOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWludmVydCkKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVC
bG9jay0+YXBwZW5kKFhvcjMyLCBtX3ZhbHVlLCBBcmc6OmJpdEltbSgxKSwgYm9vbFJlc3VsdFRt
cCwgYm9vbFJlc3VsdFRtcCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3Rv
cmVCbG9jay0+YXBwZW5kKEFpcjo6SnVtcCwgbV92YWx1ZSk7CisgICAgICAgICAgICAgICAgc3Rv
cmVCbG9jay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2spOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBmYWlsQmxvY2stPmFwcGVuZChNb3ZlLCBtX3ZhbHVlLCBBcmc6
OmltbShpbnZlcnQpLCBib29sUmVzdWx0VG1wKTsKKyAgICAgICAgICAgIGZhaWxCbG9jay0+YXBw
ZW5kKEFpcjo6SnVtcCwgbV92YWx1ZSk7CisgICAgICAgICAgICBmYWlsQmxvY2stPnNldFN1Y2Nl
c3NvcnMoZG9uZUJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzU3Ry
b25nKSB7CisgICAgICAgICAgICBUbXAgdG1wID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAg
ICAgICBzdHJvbmdGYWlsQmxvY2stPmFwcGVuZChzdG9yZUNvbmRPcGNvZGUod2lkdGgsIGF0b21p
Yy0+aGFzRmVuY2UoKSksIG1fdmFsdWUsIHZhbHVlUmVzdWx0VG1wLCBhZGRyZXNzLCB0bXApOwor
ICAgICAgICAgICAgc3Ryb25nRmFpbEJsb2NrLT5hcHBlbmQoQnJhbmNoVGVzdDMyLCBtX3ZhbHVl
LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCB0bXAsIEFyZzo6Yml0SW1tKC0x
KSk7CisgICAgICAgICAgICBzdHJvbmdGYWlsQmxvY2stPnNldFN1Y2Nlc3NvcnMoZmFpbEJsb2Nr
LCByZWxvb3BCbG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBhcHBlbmRW
b2lkQXRvbWljKEFpcjo6T3Bjb2RlIGF0b21pY09wY29kZSkKKyAgICB7CisgICAgICAgIGlmICht
X3VzZUNvdW50cy5udW1Vc2VzKG1fdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgQXJnIGFkZHJlc3MgPSBhZGRyKG1fdmFsdWUpOworICAgICAgICAK
KyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKGF0b21pY09wY29kZSwgQXJnOjpJbW0sIGFkZHJlc3Mu
a2luZCgpKSAmJiBpbW0obV92YWx1ZS0+Y2hpbGQoMCkpKSB7CisgICAgICAgICAgICBhcHBlbmQo
YXRvbWljT3Bjb2RlLCBpbW0obV92YWx1ZS0+Y2hpbGQoMCkpLCBhZGRyZXNzKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXNWYWxp
ZEZvcm0oYXRvbWljT3Bjb2RlLCBBcmc6OlRtcCwgYWRkcmVzcy5raW5kKCkpKSB7CisgICAgICAg
ICAgICBhcHBlbmQoYXRvbWljT3Bjb2RlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBhZGRyZXNz
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmRHZW5lcmFsQXRvbWlj
KEFpcjo6T3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMg
PSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgCisgICAgICAgIEFyZyBhZGRy
ZXNzID0gYWRkcihtX3ZhbHVlKTsKKyAgICAgICAgVG1wIG9sZFZhbHVlID0gbV9jb2RlLm5ld1Rt
cChHUCk7CisgICAgICAgIFRtcCBuZXdWYWx1ZSA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAg
ICAKKyAgICAgICAgLy8gV2UgbmVlZCBhIENBUyBsb29wIG9yIGEgTEwvU0MgbG9vcC4gVXNpbmcg
cHJlcGFyZS9hdHRlbXB0IGphcmdvbiwgd2Ugd2FudDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
QmxvY2sgI3JlbG9vcDoKKyAgICAgICAgLy8gICAgIFByZXBhcmUKKyAgICAgICAgLy8gICAgIG9w
Y29kZQorICAgICAgICAvLyAgICAgQXR0ZW1wdAorICAgICAgICAvLyAgIFN1Y2Nlc3NvcnM6IFRo
ZW46I2RvbmUsIEVsc2U6I3JlbG9vcAorICAgICAgICAvLyBCbG9jayAjZG9uZToKKyAgICAgICAg
Ly8gICAgIE1vdmUgb2xkVmFsdWUsIHJlc3VsdAorICAgICAgICAKKyAgICAgICAgYXBwZW5kKHJl
bGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUoKSksIG9sZFZhbHVlLCB0bXAoYXRvbWljKSk7
CisgICAgICAgIAorICAgICAgICBBaXI6OkJhc2ljQmxvY2sqIHJlbG9vcEJsb2NrID0gbmV3Qmxv
Y2soKTsKKyAgICAgICAgQWlyOjpCYXNpY0Jsb2NrKiBiZWdpbkJsb2NrOworICAgICAgICBBaXI6
OkJhc2ljQmxvY2sqIGRvbmVCbG9jazsKKyAgICAgICAgc3BsaXRCbG9jayhiZWdpbkJsb2NrLCBk
b25lQmxvY2spOworICAgICAgICAKKyAgICAgICAgYXBwZW5kKEFpcjo6SnVtcCk7CisgICAgICAg
IGJlZ2luQmxvY2stPnNldFN1Y2Nlc3NvcnMocmVsb29wQmxvY2spOworICAgICAgICAKKyAgICAg
ICAgQWlyOjpPcGNvZGUgcHJlcGFyZU9wY29kZTsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoYXRvbWljLT5vcGVyYXRpb25XaWR0aCgpKSB7CisgICAgICAgICAg
ICBjYXNlIFdpZHRoODoKKyAgICAgICAgICAgICAgICBwcmVwYXJlT3Bjb2RlID0gTG9hZDhTaWdu
ZWRFeHRlbmRUbzMyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBX
aWR0aDE2OgorICAgICAgICAgICAgICAgIHByZXBhcmVPcGNvZGUgPSBMb2FkMTZTaWduZWRFeHRl
bmRUbzMyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXaWR0aDMy
OgorICAgICAgICAgICAgICAgIHByZXBhcmVPcGNvZGUgPSBNb3ZlMzI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICAgICAgcHJl
cGFyZU9wY29kZSA9IE1vdmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0FSTTY0KCkp
OworICAgICAgICAgICAgb3Bjb2RlID0gbG9hZExpbmtPcGNvZGUoYXRvbWljLT5vcGVyYXRpb25X
aWR0aCgpLCBhdG9taWMtPmhhc0ZlbmNlKCkpOworICAgICAgICB9CisgICAgICAgIHJlbG9vcEJs
b2NrLT5hcHBlbmQocHJlcGFyZU9wY29kZSwgbV92YWx1ZSwgYWRkcmVzcywgb2xkVmFsdWUpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG9wY29kZSAhPSBBaXI6Ok5vcCkgeworICAgICAgICAgICAg
aWYgKGltbShhdG9taWMtPmNoaWxkKDApKSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1t
LCBBcmc6OlRtcCwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBl
bmQob3Bjb2RlLCBtX3ZhbHVlLCBpbW0oYXRvbWljLT5jaGlsZCgwKSksIG9sZFZhbHVlLCBuZXdW
YWx1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1w
LCBBcmc6OlRtcCwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBl
bmQob3Bjb2RlLCBtX3ZhbHVlLCB0bXAoYXRvbWljLT5jaGlsZCgwKSksIG9sZFZhbHVlLCBuZXdW
YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZWxvb3BCbG9jay0+
YXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhdG9taWMtPnR5cGUoKSksIG1fdmFsdWUsIG9sZFZh
bHVlLCBuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGltbShhdG9taWMtPmNoaWxkKDAp
KSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1tLCBBcmc6OlRtcCkpCisgICAgICAgICAg
ICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQob3Bjb2RlLCBtX3ZhbHVlLCBpbW0oYXRvbWlj
LT5jaGlsZCgwKSksIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQob3Bjb2RlLCBtX3ZhbHVlLCB0bXAoYXRvbWlj
LT5jaGlsZCgwKSksIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBjYXNPcGNvZGUgPSBP
UENPREVfRk9SX1dJRFRIKEJyYW5jaEF0b21pY1N0cm9uZ0NBUywgYXRvbWljLT5vcGVyYXRpb25X
aWR0aCgpKTsKKyAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQocmVsYXhlZE1vdmVGb3JU
eXBlKGF0b21pYy0+dHlwZSgpKSwgbV92YWx1ZSwgb2xkVmFsdWUsIG1fZWF4KTsKKyAgICAgICAg
ICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQoY2FzT3Bjb2RlLCBtX3ZhbHVlLCBBcmc6OnN0YXR1c0Nv
bmQoTWFjcm9Bc3NlbWJsZXI6OlN1Y2Nlc3MpLCBtX2VheCwgbmV3VmFsdWUsIGFkZHJlc3MpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBUk02NCgpKTsK
KyAgICAgICAgICAgIFRtcCBib29sUmVzdWx0ID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAg
ICAgICByZWxvb3BCbG9jay0+YXBwZW5kKHN0b3JlQ29uZE9wY29kZShhdG9taWMtPm9wZXJhdGlv
bldpZHRoKCksIGF0b21pYy0+aGFzRmVuY2UoKSksIG1fdmFsdWUsIG5ld1ZhbHVlLCBhZGRyZXNz
LCBib29sUmVzdWx0KTsKKyAgICAgICAgICAgIHJlbG9vcEJsb2NrLT5hcHBlbmQoQnJhbmNoVGVz
dDMyLCBtX3ZhbHVlLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBib29sUmVz
dWx0LCBBcmc6OmJpdEltbSgtMSkpOworICAgICAgICB9CisgICAgICAgIHJlbG9vcEJsb2NrLT5z
ZXRTdWNjZXNzb3JzKGRvbmVCbG9jaywgcmVsb29wQmxvY2spOworICAgIH0KKyAgICAKICAgICB2
b2lkIGxvd2VyKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bjb2RlKCkpIHsK
QEAgLTE5NzEsMzAgKzIzNzEsNTAgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgTG9hZDogewotICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdCht
X3ZhbHVlLCBtb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLCBtX3ZhbHVlLCBhZGRyKG1fdmFs
dWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBt
X3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29k
ZSA9IEFpcjo6T29wczsKKyAgICAgICAgICAgIGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpIHsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG1lbW9yeS0+dHlwZSgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gTG9hZEFjcTMyOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEludDY0OgorICAg
ICAgICAgICAgICAgICAgICBvcGNvZGUgPSBMb2FkQWNxNjQ7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG9w
Y29kZSA9IG1vdmVGb3JUeXBlKG1lbW9yeS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGFwcGVuZCh0
cmFwcGluZ0luc3QobV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAo
bV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgTG9hZDhTOiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0
KG1fdmFsdWUsIExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwg
dG1wKG1fdmFsdWUpKSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBtX3ZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKS0+aGFzRmVuY2UoKSA/IExvYWRBY3E4U2lnbmVkRXh0ZW5kVG8z
MiA6IExvYWQ4U2lnbmVkRXh0ZW5kVG8zMjsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0lu
c3QobV92YWx1ZSwgb3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDha
OiB7Ci0gICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQ4LCBtX3Zh
bHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFpcjo6T3Bj
b2RlIG9wY29kZSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpID8gTG9h
ZEFjcTggOiBMb2FkODsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwg
b3Bjb2RlLCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDE2UzogewotICAgICAg
ICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkMTZTaWduZWRFeHRlbmRUbzMy
LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIEFp
cjo6T3Bjb2RlIG9wY29kZSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgp
ID8gTG9hZEFjcTE2U2lnbmVkRXh0ZW5kVG8zMiA6IExvYWQxNlNpZ25lZEV4dGVuZFRvMzI7Cisg
ICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG9wY29kZSwgbV92YWx1ZSwg
YWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIExvYWQxNlo6IHsKLSAgICAgICAgICAgIGFwcGVuZCh0cmFw
cGluZ0luc3QobV92YWx1ZSwgTG9hZDE2LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92
YWx1ZSkpKTsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG1fdmFsdWUtPmFzPE1l
bW9yeVZhbHVlPigpLT5oYXNGZW5jZSgpID8gTG9hZEFjcTE2IDogTG9hZDE2OworICAgICAgICAg
ICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBvcGNvZGUsIG1fdmFsdWUsIGFkZHIobV92
YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0K
KyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFkZDogewogICAgICAgICAgICAgaWYgKHRyeUFw
cGVuZExlYSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTIwOTIsNyArMjUxMiw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNDaGlsbCgpKQogICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQVJNNjQoKSk7CiAgICAgICAgICAgICBpZiAoaXNJbnQo
bV92YWx1ZS0+dHlwZSgpKSAmJiBpc1g4NigpKSB7Ci0gICAgICAgICAgICAgICAgbG93ZXJYODZE
aXYoRGl2KTsKKyAgICAgICAgICAgICAgICBhcHBlbmRYODZEaXYoRGl2KTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoIWlzWDg2KCkg
fHwgaXNGbG9hdChtX3ZhbHVlLT50eXBlKCkpKTsKQEAgLTIxMDMsNyArMjUyMyw3IEBAIHByaXZh
dGU6CiAKICAgICAgICAgY2FzZSBVRGl2OiB7CiAgICAgICAgICAgICBpZiAoaXNJbnQobV92YWx1
ZS0+dHlwZSgpKSAmJiBpc1g4NigpKSB7Ci0gICAgICAgICAgICAgICAgbG93ZXJYODZVRGl2KFVE
aXYpOworICAgICAgICAgICAgICAgIGFwcGVuZFg4NlVEaXYoVURpdik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0yMTE3LDEzICsyNTM3LDEzIEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgTW9kOiB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1g4
NigpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3ZhbHVlLT5pc0NoaWxsKCkpOwot
ICAgICAgICAgICAgbG93ZXJYODZEaXYoTW9kKTsKKyAgICAgICAgICAgIGFwcGVuZFg4NkRpdihN
b2QpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBVTW9k
OiB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKLSAgICAgICAgICAgIGxv
d2VyWDg2VURpdihVTW9kKTsKKyAgICAgICAgICAgIGFwcGVuZFg4NlVEaXYoVU1vZCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjE2MiwxMCArMjU4MiwyOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIGFwcGVuZFVuT3A8Tm90MzIsIE5vdDY0PihtX3ZhbHVlLT5j
aGlsZCgwKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIHBhdHRlcm4gaXMgc3VwZXIgdXNlZnVsIG9uIGJv
dGggeDg2IGFuZCBBUk02NCwgc2luY2UgdGhlIGludmVyc2lvbiBvZiB0aGUgQ0FTIHJlc3VsdAor
ICAgICAgICAgICAgLy8gY2FuIGJlIGRvbmUgd2l0aCB6ZXJvIGNvc3Qgb24geDg2IChqdXN0IGZs
aXAgdGhlIHNldCBmcm9tIEUgdG8gTkUpIGFuZCBpdCdzIGEgcHJvZ3Jlc3Npb24KKyAgICAgICAg
ICAgIC8vIG9uIEFSTTY0IChzaW5jZSBTVFggcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIHNvIG9yZGlu
YXJpbHkgd2UgaGF2ZSB0byBmbGlwIGl0KS4KKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgxKS0+aXNJbnQoMSkKKyAgICAgICAgICAgICAgICAmJiBpc0F0b21pY0NBUyhtX3ZhbHVlLT5j
aGlsZCgwKS0+b3Bjb2RlKCkpCisgICAgICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbChtX3Zh
bHVlLT5jaGlsZCgwKSkpIHsKKyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChtX3ZhbHVl
LT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kQ0FTKG1fdmFsdWUtPmNoaWxkKDAp
LCB0cnVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPFhvcjMyLCBYb3I2NCwgWG9yRG91YmxlLCBY
b3JGbG9hdCwgQ29tbXV0YXRpdmU+KAogICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDAp
LCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIERlcGVuZDogeworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXNBUk02NCgpKTsKKyAgICAgICAgICAgIGFwcGVuZFVuT3A8RGVwZW5kMzIsIERlcGVu
ZDY0PihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
IAogICAgICAgICBjYXNlIFNobDogewogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEp
LT5pc0ludDMyKDEpKSB7CkBAIC0yMjY2LDcgKzI3MDQsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYXBwZW5kU3RvcmUodmFsdWVU
b1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUs
IGFkZHIobV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIy
ODcsNyArMjcyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBlbmRTdG9yZShB
aXI6OlN0b3JlOCwgdmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFw
cGVuZFN0b3JlKG1fdmFsdWUsIGFkZHIobV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKQEAgLTIzMDgsNyArMjc0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBhcHBlbmRTdG9yZShBaXI6OlN0b3JlMTYsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVl
KSk7CisgICAgICAgICAgICBhcHBlbmRTdG9yZShtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yNDE2LDcgKzI4NTQsMjIgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgRXF1YWw6Ci0gICAgICAgIGNhc2UgTm90
RXF1YWw6CisgICAgICAgIGNhc2UgTm90RXF1YWw6IHsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTCisgICAgICAgICAgICAgICAg
JiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpCisgICAg
ICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5zKG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgxKSkpOworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9sb2NrZWQuY29udGFpbnMobV92
YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb21t
aXRJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kQ0FT
KG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5vcGNvZGUoKSA9PSBOb3RFcXVhbCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUobV92YWx1ZSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBMZXNzVGhhbjoKICAgICAgICAgY2FzZSBHcmVhdGVyVGhhbjoKICAgICAgICAgY2FzZSBMZXNz
RXF1YWw6CkBAIC0yNzI3LDYgKzMxODAsNDAgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2UgQnJhbmNoOiB7CisgICAgICAgICAgICBpZiAoY2FuQmVJbnRlcm5hbChtX3ZhbHVl
LT5jaGlsZCgwKSkpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogYnJhbmNoQ2hpbGQgPSBtX3Zh
bHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGJyYW5jaENoaWxkLT5vcGNv
ZGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAgICAg
ICAgICAgICAgY29tbWl0SW50ZXJuYWwoYnJhbmNoQ2hpbGQpOworICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRDQVMoYnJhbmNoQ2hpbGQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEF0b21pY1N0
cm9uZ0NBUzoKKyAgICAgICAgICAgICAgICAgICAgLy8gQSBicmFuY2ggaXMgYSBjb21wYXJpc29u
IHRvIHplcm8uCisgICAgICAgICAgICAgICAgICAgIGlmIChicmFuY2hDaGlsZC0+Y2hpbGQoMCkt
PmlzSW50KDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChicmFu
Y2hDaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRDQVMoYnJhbmNoQ2hpbGQs
IHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIEVxdWFsOgorICAgICAgICAgICAgICAgIGNhc2UgTm90RXF1
YWw6CisgICAgICAgICAgICAgICAgICAgIGlmIChicmFuY2hDaGlsZC0+Y2hpbGQoMCktPm9wY29k
ZSgpID09IEF0b21pY1N0cm9uZ0NBUworICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2FuQmVJ
bnRlcm5hbChicmFuY2hDaGlsZC0+Y2hpbGQoMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAm
JiBicmFuY2hDaGlsZC0+Y2hpbGQoMCktPmNoaWxkKDApID09IGJyYW5jaENoaWxkLT5jaGlsZCgx
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwoYnJhbmNoQ2hpbGQp
OworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwoYnJhbmNoQ2hpbGQtPmNo
aWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENBUyhicmFuY2hDaGlsZC0+
Y2hpbGQoMCksIGJyYW5jaENoaWxkLT5vcGNvZGUoKSA9PSBOb3RFcXVhbCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBw
ZW5kKGNyZWF0ZUJyYW5jaChtX3ZhbHVlLT5jaGlsZCgwKSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkBAIC0yNzg0LDcgKzMyNzEsODEgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGFwcGVuZChBaXI6OkVudHJ5U3dpdGNoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljV2Vha0NBUzoKKyAgICAgICAgY2Fz
ZSBBdG9taWNTdHJvbmdDQVM6IHsKKyAgICAgICAgICAgIGFwcGVuZENBUyhtX3ZhbHVlLCBmYWxz
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEF0b21pY1hjaGdBZGQ6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMg
PSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRWb2lk
QXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljQWRkLCBhdG9taWMtPm9wZXJhdGlvbldpZHRo
KCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEFyZyBhZGRyZXNzID0gYWRkcihhdG9taWMpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bj
b2RlID0gT1BDT0RFX0ZPUl9XSURUSChBdG9taWNYY2hnQWRkLCBhdG9taWMtPm9wZXJhdGlvbldp
ZHRoKCkpOworICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIGFk
ZHJlc3Mua2luZCgpKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5
cGUoYXRvbWljLT50eXBlKCkpLCB0bXAoYXRvbWljLT5jaGlsZCgwKSksIHRtcChhdG9taWMpKTsK
KyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoYXRvbWljKSwgYWRkcmVzcyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhcHBl
bmRHZW5lcmFsQXRvbWljKE9QQ09ERV9GT1JfQ0FOT05JQ0FMX1dJRFRIKEFkZCwgYXRvbWljLT5v
cGVyYXRpb25XaWR0aCgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAorICAg
ICAgICBjYXNlIEF0b21pY1hjaGdTdWI6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9t
aWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRW
b2lkQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljU3ViLCBhdG9taWMtPm9wZXJhdGlvbldp
ZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9DQU5PTklDQUxfV0lEVEgoU3ViLCBh
dG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljWGNoZ0FuZDogeworICAgICAgICAg
ICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAg
ICAgICAgICAgaWYgKGFwcGVuZFZvaWRBdG9taWMoT1BDT0RFX0ZPUl9XSURUSChBdG9taWNBbmQs
IGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX0NB
Tk9OSUNBTF9XSURUSChBbmQsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBdG9taWNY
Y2hnT3I6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9taWMgPSBtX3ZhbHVlLT5hczxB
dG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRWb2lkQXRvbWljKE9QQ09ERV9G
T1JfV0lEVEgoQXRvbWljT3IsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXBwZW5kR2VuZXJhbEF0
b21pYyhPUENPREVfRk9SX0NBTk9OSUNBTF9XSURUSChPciwgYXRvbWljLT5vcGVyYXRpb25XaWR0
aCgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEF0b21pY1hjaGdYb3I6IHsKKyAgICAgICAgICAgIEF0b21pY1ZhbHVlKiBhdG9t
aWMgPSBtX3ZhbHVlLT5hczxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmIChhcHBlbmRW
b2lkQXRvbWljKE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljWG9yLCBhdG9taWMtPm9wZXJhdGlvbldp
ZHRoKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGFwcGVuZEdlbmVyYWxBdG9taWMoT1BDT0RFX0ZPUl9DQU5PTklDQUxfV0lEVEgoWG9yLCBh
dG9taWMtPm9wZXJhdGlvbldpZHRoKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXRvbWljWGNoZzogeworICAgICAgICAgICAg
QXRvbWljVmFsdWUqIGF0b21pYyA9IG1fdmFsdWUtPmFzPEF0b21pY1ZhbHVlPigpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBBcmcgYWRkcmVzcyA9IGFkZHIoYXRvbWljKTsKKyAgICAgICAg
ICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IE9QQ09ERV9GT1JfV0lEVEgoQXRvbWljWGNoZywgYXRv
bWljLT5vcGVyYXRpb25XaWR0aCgpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNv
ZGUsIEFyZzo6VG1wLCBhZGRyZXNzLmtpbmQoKSkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQo
cmVsYXhlZE1vdmVGb3JUeXBlKGF0b21pYy0+dHlwZSgpKSwgdG1wKGF0b21pYy0+Y2hpbGQoMCkp
LCB0bXAoYXRvbWljKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGF0b21p
YyksIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYXBwZW5kR2VuZXJhbEF0b21pYyhPUENPREVfRk9SX0NB
Tk9OSUNBTF9XSURUSChYb3IsIGF0b21pYy0+b3BlcmF0aW9uV2lkdGgoKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNzkyLDY0ICszMzUzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgZGF0YUxvZygiRkFUQUw6IGNvdWxkIG5vdCBsb3dlciAiLCBkZWVwRHVtcCht
X3Byb2NlZHVyZSwgbV92YWx1ZSksICJcbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KLQotICAgIHZvaWQgbG93ZXJYODZEaXYoQjM6Ok9wY29kZSBvcCkK
LSAgICB7Ci0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKLSAgICAgICAgVG1wIGVheCA9IFRt
cChYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgICAgIFRtcCBlZHggPSBUbXAoWDg2UmVnaXN0ZXJz
OjplZHgpOwotCi0gICAgICAgIEFpcjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJsZVdvcmQ7Ci0gICAg
ICAgIEFpcjo6T3Bjb2RlIGRpdjsKLSAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT50eXBlKCkpIHsK
LSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBY
ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzI7Ci0gICAgICAgICAgICBkaXYgPSBYODZEaXYzMjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAgY29udmVy
dFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb1F1YWRXb3JkNjQ7Ci0gICAgICAgICAgICBkaXYg
PSBYODZEaXY2NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChvcCA9PSBEaXYgfHwgb3AgPT0gTW9kKTsKLSAg
ICAgICAgWDg2UmVnaXN0ZXJzOjpSZWdpc3RlcklEIHJlc3VsdCA9IG9wID09IERpdiA/IFg4NlJl
Z2lzdGVyczo6ZWF4IDogWDg2UmVnaXN0ZXJzOjplZHg7Ci0KLSAgICAgICAgYXBwZW5kKE1vdmUs
IHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIGVheCk7Ci0gICAgICAgIGFwcGVuZChjb252ZXJ0VG9E
b3VibGVXb3JkLCBlYXgsIGVkeCk7Ci0gICAgICAgIGFwcGVuZChkaXYsIGVheCwgZWR4LCB0bXAo
bV92YWx1ZS0+Y2hpbGQoMSkpKTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChyZXN1bHQpLCB0
bXAobV92YWx1ZSkpOwotCi0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAg
ICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHZvaWQg
bG93ZXJYODZVRGl2KEIzOjpPcGNvZGUgb3ApCi0gICAgewotI2lmIENQVShYODYpIHx8IENQVShY
ODZfNjQpCi0gICAgICAgIFRtcCBlYXggPSBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpOwotICAgICAg
ICBUbXAgZWR4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWR4KTsKLQotICAgICAgICBBaXI6Ok9wY29k
ZSBkaXYgPSBtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyBYODZVRGl2MzIgOiBYODZVRGl2NjQ7
Ci0KLSAgICAgICAgQVNTRVJUKG9wID09IFVEaXYgfHwgb3AgPT0gVU1vZCk7Ci0gICAgICAgIFg4
NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCByZXN1bHQgPSBvcCA9PSBVRGl2ID8gWDg2UmVnaXN0ZXJz
OjplYXggOiBYODZSZWdpc3RlcnM6OmVkeDsKLQotICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1f
dmFsdWUtPmNoaWxkKDApKSwgZWF4KTsKLSAgICAgICAgYXBwZW5kKFhvcjY0LCBlZHgsIGVkeCk7
Ci0gICAgICAgIGFwcGVuZChkaXYsIGVheCwgZWR4LCB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpKTsK
LSAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChyZXN1bHQpLCB0bXAobV92YWx1ZSkpOwotI2Vsc2UK
LSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7Ci0jZW5kaWYKLSAgICB9Ci0KKyAgICAKICAgICBJbmRleFNldDxWYWx1ZT4gbV9sb2Nr
ZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4KICAg
ICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBtX3ZhbHVlVG9UbXA7IC8vIFRoZXNlIGFyZSB2YWx1ZXMg
dGhhdCBtdXN0IGhhdmUgYSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBhIFZhbHVlKiB3aXRoIGEg
bm9uLW51bGwgVG1wIGlzICJwaW5uZWQiLgogICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IG1fcGhp
VG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBUbXAuCkBAIC0yODY0LDcgKzMzNjgsNyBA
QCBwcml2YXRlOgogCiAgICAgVmVjdG9yPFZlY3RvcjxJbnN0LCA0Pj4gbV9pbnN0czsKICAgICBW
ZWN0b3I8SW5zdD4gbV9wcm9sb2d1ZTsKLQorICAgIAogICAgIEIzOjpCYXNpY0Jsb2NrKiBtX2Js
b2NrOwogICAgIGJvb2wgbV9pc1JhcmU7CiAgICAgdW5zaWduZWQgbV9pbmRleDsKQEAgLTI4NzUs
NiArMzM3OSwxMiBAQCBwcml2YXRlOgogCiAgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKICAg
ICBDb2RlJiBtX2NvZGU7CisKKyAgICBBaXI6OkJsb2NrSW5zZXJ0aW9uU2V0IG1fYmxvY2tJbnNl
cnRpb25TZXQ7CisKKyAgICBUbXAgbV9lYXg7CisgICAgVG1wIG1fZWN4OworICAgIFRtcCBtX2Vk
eDsKIH07CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAkocmV2aXNpb24gMjEzMjYxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIs
OCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIGNsYXNzIFByb2NlZHVyZTsKIG5h
bWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CiAKLS8vIFRoaXMgbG93ZXJzIHRoZSBjdXJyZW50
IEIzIHByb2NlZHVyZSB0byBhbiBBaXIgY29kZS4KKy8vIFRoaXMgbG93ZXJzIHRoZSBjdXJyZW50
IEIzIHByb2NlZHVyZSB0byBhbiBBaXIgY29kZS4gTm90ZSB0aGF0IHRoaXMgYXNzdW1lcyB0aGF0
IHRoZSBwcm9jZWR1cmUgaXMgaW4KKy8vIHF1aXJrcyBtb2RlLCBidXQgaXQgZG9lcyBub3QgYXNz
ZXJ0IHRoaXMsIHRvIHNpbXBsaWZ5IGhvdyB3ZSB3cml0ZSB0ZXN0cy4KIAogSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBsb3dlclRvQWlyKFByb2NlZHVyZSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAyMTMyNjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDMwICszNCw0OCBAQCBNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVlKCkKIHsKIH0KIAorVHlw
ZSBNZW1vcnlWYWx1ZTo6YWNjZXNzVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZCgpKQor
ICAgICAgICByZXR1cm4gdHlwZSgpOworICAgIC8vIFRoaXMgaGFwcGVucyB0byB3b3JrIGZvciBh
dG9taWNzLCB0b28uIFRoYXQncyB3aHkgQXRvbWljVmFsdWUgZG9lcyBub3QgbmVlZCB0byBvdmVy
cmlkZSB0aGlzLgorICAgIHJldHVybiBjaGlsZCgwKS0+dHlwZSgpOworfQorCitCYW5rIE1lbW9y
eVZhbHVlOjphY2Nlc3NCYW5rKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYmFua0ZvclR5cGUoYWNj
ZXNzVHlwZSgpKTsKK30KKwogc2l6ZV90IE1lbW9yeVZhbHVlOjphY2Nlc3NCeXRlU2l6ZSgpIGNv
bnN0CiB7CisgICAgcmV0dXJuIGJ5dGVzKGFjY2Vzc1dpZHRoKCkpOworfQorCitXaWR0aCBNZW1v
cnlWYWx1ZTo6bG9hZFN0b3JlV2lkdGgoKSBjb25zdAorewogICAgIHN3aXRjaCAob3Bjb2RlKCkp
IHsKICAgICBjYXNlIExvYWQ4WjoKICAgICBjYXNlIExvYWQ4UzoKICAgICBjYXNlIFN0b3JlODoK
LSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiBXaWR0aDg7CiAgICAgY2FzZSBMb2Fk
MTZaOgogICAgIGNhc2UgTG9hZDE2UzoKICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgIHJldHVy
biAyOworICAgICAgICByZXR1cm4gV2lkdGgxNjsKICAgICBjYXNlIExvYWQ6Ci0gICAgICAgIHJl
dHVybiBzaXplb2ZUeXBlKHR5cGUoKSk7CisgICAgICAgIHJldHVybiB3aWR0aEZvclR5cGUodHlw
ZSgpKTsKICAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXR1cm4gc2l6ZW9mVHlwZShjaGlsZCgw
KS0+dHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yVHlwZShjaGlsZCgwKS0+dHlwZSgp
KTsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIFdpZHRoODsKICAgICB9CiB9CiAKIFdp
ZHRoIE1lbW9yeVZhbHVlOjphY2Nlc3NXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHdpZHRo
Rm9yQnl0ZXMoYWNjZXNzQnl0ZVNpemUoKSk7CisgICAgcmV0dXJuIGxvYWRTdG9yZVdpZHRoKCk7
CiB9CiAKIHZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC02NSw4ICs4MywxMSBAQCB2b2lkIE1lbW9yeVZhbHVl
OjpkdW1wTWV0YShDb21tYVByaW50ZXImCiAgICAgaWYgKG1fb2Zmc2V0KQogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJvZmZzZXQgPSAiLCBtX29mZnNldCk7CiAgICAgaWYgKChpc0xvYWQoKSAm
JiBlZmZlY3RzKCkucmVhZHMgIT0gcmFuZ2UoKSkKLSAgICAgICAgfHwgKGlzU3RvcmUoKSAmJiBl
ZmZlY3RzKCkud3JpdGVzICE9IHJhbmdlKCkpKQorICAgICAgICB8fCAoaXNTdG9yZSgpICYmIGVm
ZmVjdHMoKS53cml0ZXMgIT0gcmFuZ2UoKSkKKyAgICAgICAgfHwgZmVuY2VSYW5nZSgpKQogICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJyYW5nZSA9ICIsIHJhbmdlKCkpOworICAgIGlmIChmZW5j
ZVJhbmdlKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImZlbmNlUmFuZ2UgPSAiLCBmZW5j
ZVJhbmdlKCkpOwogfQogCiBWYWx1ZSogTWVtb3J5VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CkBA
IC03NCw2ICs5NSw2MiBAQCBWYWx1ZSogTWVtb3J5VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CiAg
ICAgcmV0dXJuIG5ldyBNZW1vcnlWYWx1ZSgqdGhpcyk7CiB9CiAKKy8vIFVzZSB0aGlzIGZvcm0g
Zm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhh
dCBoYXZlIGEgc3VmZml4IHRoYXQKKy8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCitN
ZW1vcnlWYWx1ZTo6TWVtb3J5VmFsdWUoS2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCwgSGVhcFJhbmdlIHJhbmdlLCBIZWFw
UmFuZ2UgZmVuY2VSYW5nZSkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUs
IG9yaWdpbiwgcG9pbnRlcikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAsIG1fcmFuZ2Uo
cmFuZ2UpCisgICAgLCBtX2ZlbmNlUmFuZ2UoZmVuY2VSYW5nZSkKK3sKKyAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkgeworICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKKyAgICAgICAg
Y2FzZSBMb2FkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZDhaOgorICAg
ICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBjYXNlIExv
YWQxNlM6CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAg
ICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9h
ZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCitNZW1vcnlWYWx1ZTo6TWVtb3J5
VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBv
ZmZzZXQsIEhlYXBSYW5nZSByYW5nZSwgSGVhcFJhbmdlIGZlbmNlUmFuZ2UpCisgICAgOiBNZW1v
cnlWYWx1ZShraW5kLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQsIHJhbmdlLCBmZW5j
ZVJhbmdlKQoreworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIHN3aXRjaCAo
a2luZC5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2Fk
OFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3Rv
cmVzLgorTWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKEtpbmQga2luZCwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQsIEhlYXBSYW5nZSBy
YW5nZSwgSGVhcFJhbmdlIGZlbmNlUmFuZ2UpCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBr
aW5kLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICwgbV9vZmZzZXQob2Zmc2V0
KQorICAgICwgbV9yYW5nZShyYW5nZSkKKyAgICAsIG1fZmVuY2VSYW5nZShmZW5jZVJhbmdlKQor
eworICAgIEFTU0VSVChCMzo6aXNTdG9yZShraW5kLm9wY29kZSgpKSk7Cit9CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMwogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMjEzMjYxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNDggKzI3LDE3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNC
YW5rLmgiCiAjaW5jbHVkZSAiQjNIZWFwUmFuZ2UuaCIKICNpbmNsdWRlICJCM1ZhbHVlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi0vLyBGSVhNRTogV2Ugd2FudCB0byBh
bGxvdyBmZW5jZWQgbWVtb3J5IGFjY2Vzc2VzIG9uIEFSTS4KLS8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzNDkKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUg
TWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGFj
Y2VwdHMoS2luZCBraW5kKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kLm9wY29kZSgpKSB7
Ci0gICAgICAgIGNhc2UgTG9hZDhaOgotICAgICAgICBjYXNlIExvYWQ4UzoKLSAgICAgICAgY2Fz
ZSBMb2FkMTZaOgotICAgICAgICBjYXNlIExvYWQxNlM6Ci0gICAgICAgIGNhc2UgTG9hZDoKLSAg
ICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBT
dG9yZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wg
aXNTdG9yZShLaW5kIGtpbmQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkp
IHsKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAg
Y2FzZSBTdG9yZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGlj
IGJvb2wgaXNMb2FkKEtpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhY2NlcHRzKGtp
bmQpICYmICFpc1N0b3JlKGtpbmQpOworICAgICAgICByZXR1cm4gaXNNZW1vcnlBY2Nlc3Moa2lu
ZC5vcGNvZGUoKSk7CiAgICAgfQogCiAgICAgfk1lbW9yeVZhbHVlKCk7CkBAIC03OCw3NiArNDcs
NTggQEAgcHVibGljOgogCiAgICAgY29uc3QgSGVhcFJhbmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmFuZ2U7IH0KICAgICB2b2lkIHNldFJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2Up
IHsgbV9yYW5nZSA9IHJhbmdlOyB9CisgICAgCisgICAgLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3Ig
cmFuZ2UuCisgICAgY29uc3QgSGVhcFJhbmdlJiBhY2Nlc3NSYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IHJhbmdlKCk7IH0KKyAgICB2b2lkIHNldEFjY2Vzc1JhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFu
Z2UpIHsgc2V0UmFuZ2UocmFuZ2UpOyB9CisgICAgCisgICAgY29uc3QgSGVhcFJhbmdlJiBmZW5j
ZVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9mZW5jZVJhbmdlOyB9CisgICAgdm9pZCBzZXRGZW5j
ZVJhbmdlKGNvbnN0IEhlYXBSYW5nZSYgcmFuZ2UpIHsgbV9mZW5jZVJhbmdlID0gcmFuZ2U7IH0K
KworICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIEIzOjppc1N0b3JlKG9wY29kZSgp
KTsgfQorICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyByZXR1cm4gQjM6OmlzTG9hZChvcGNvZGUo
KSk7IH0KIAotICAgIGJvb2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBWb2lk
OyB9Ci0gICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgIT0gVm9pZDsgfQor
ICAgIGJvb2wgaGFzRmVuY2UoKSBjb25zdCB7IHJldHVybiAhIWZlbmNlUmFuZ2UoKTsgfQogCisg
ICAgVHlwZSBhY2Nlc3NUeXBlKCkgY29uc3Q7CisgICAgQmFuayBhY2Nlc3NCYW5rKCkgY29uc3Q7
CiAgICAgc2l6ZV90IGFjY2Vzc0J5dGVTaXplKCkgY29uc3Q7Ci0gICAgV2lkdGggYWNjZXNzV2lk
dGgoKSBjb25zdDsKKyAgICAKKyAgICAvLyBTbGlnaHRseSBmYXN0ZXIgdmVyc2lvbiBvZiBhY2Nl
c3NXaWR0aCwgaWYgeW91IGtub3cgdGhhdCB5b3UncmUgd29ya2luZyB3aXRoIGEgbG9hZCBvciBz
dG9yZS4KKyAgICBXaWR0aCBsb2FkU3RvcmVXaWR0aCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1
YWwgV2lkdGggYWNjZXNzV2lkdGgoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZHVt
cE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBWYWx1ZSogY2xvbmVJbXBsKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgTWVtb3J5VmFsdWUoQ2hlY2tlZE9w
Y29kZVRhZywgS2luZCBraW5kLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGludDMyX3Qgb2Zm
c2V0LCBIZWFwUmFuZ2UgcmFuZ2UsIEhlYXBSYW5nZSBmZW5jZVJhbmdlLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIGtpbmQsIHR5cGUsIG9y
aWdpbiwgYXJndW1lbnRzLi4uKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAg
LCBtX3JhbmdlKHJhbmdlKQorICAgICAgICAsIG1fZmVuY2VSYW5nZShmZW5jZVJhbmdlKQorICAg
IHsKKyAgICB9CisgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7Ci0K
KyAgICAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9h
ZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CiAgICAgLy8g
ZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KLSAgICBNZW1vcnlWYWx1ZShLaW5kIGtpbmQs
IFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0
ID0gMCkKLSAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBraW5kLCB0eXBlLCBvcmlnaW4s
IHBvaW50ZXIpCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAsIG1fcmFuZ2Uo
SGVhcFJhbmdlOjp0b3AoKSkKLSAgICB7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGtpbmQub3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2Ug
TG9hZDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTG9hZDhaOgot
ICAgICAgICAgICAgY2FzZSBMb2FkOFM6Ci0gICAgICAgICAgICBjYXNlIExvYWQxNlo6Ci0gICAg
ICAgICAgICBjYXNlIExvYWQxNlM6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50
MzIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdG9yZTg6Ci0g
ICAgICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOgotICAgICAg
ICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICBNZW1vcnlWYWx1ZShLaW5k
LCBUeXBlLCBPcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDAsIEhlYXBS
YW5nZSByYW5nZSA9IEhlYXBSYW5nZTo6dG9wKCksIEhlYXBSYW5nZSBmZW5jZVJhbmdlID0gSGVh
cFJhbmdlKCkpOwogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJl
dHVybiB0eXBlIGlzIGltcGxpZWQuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4g
b3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAgICA6IE1l
bW9yeVZhbHVlKGtpbmQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCkKLSAgICB7Ci0g
ICAgfQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMy
X3Qgb2Zmc2V0ID0gMCwgSGVhcFJhbmdlIHJhbmdlID0gSGVhcFJhbmdlOjp0b3AoKSwgSGVhcFJh
bmdlIGZlbmNlUmFuZ2UgPSBIZWFwUmFuZ2UoKSk7CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZv
ciBzdG9yZXMuCi0gICAgTWVtb3J5VmFsdWUoS2luZCBraW5kLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDog
VmFsdWUoQ2hlY2tlZE9wY29kZSwga2luZCwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikK
LSAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6
OnRvcCgpKQotICAgIHsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAoa2luZC5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBTdG9yZTg6Ci0g
ICAgICAgICAgICBjYXNlIFN0b3JlMTY6Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOgotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQorICAgIE1lbW9yeVZhbHVlKEtpbmQsIE9yaWdpbiwgVmFs
dWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwLCBIZWFwUmFuZ2Ug
cmFuZ2UgPSBIZWFwUmFuZ2U6OnRvcCgpLCBIZWFwUmFuZ2UgZmVuY2VSYW5nZSA9IEhlYXBSYW5n
ZSgpKTsKKyAgICAKICAgICBpbnQzMl90IG1fb2Zmc2V0IHsgMCB9OwotICAgIEhlYXBSYW5nZSBt
X3JhbmdlOworICAgIEhlYXBSYW5nZSBtX3JhbmdlIHsgSGVhcFJhbmdlOjp0b3AoKSB9OworICAg
IEhlYXBSYW5nZSBtX2ZlbmNlUmFuZ2UgeyBIZWFwUmFuZ2UoKSB9OwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXRpdmVU
cmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXRpdmVU
cmFpdHMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXRp
dmVUcmFpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0JhbmsuaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIK
KyNpbmNsdWRlICJCM1dpZHRoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IE5hdGl2ZVRyYWl0czsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgTmF0aXZlVHJhaXRzPGludDhfdD4geworICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsg
PSBHUDsKKyAgICBzdGF0aWMgY29uc3QgV2lkdGggd2lkdGggPSBXaWR0aDg7CisgICAgc3RhdGlj
IGNvbnN0IFR5cGUgdHlwZSA9IEludDMyOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZl
VHJhaXRzPHVpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgQmFuayBiYW5rID0gR1A7CisgICAg
c3RhdGljIGNvbnN0IFdpZHRoIHdpZHRoID0gV2lkdGg4OworICAgIHN0YXRpYyBjb25zdCBUeXBl
IHR5cGUgPSBJbnQzMjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVRyYWl0czxpbnQx
Nl90PiB7CisgICAgc3RhdGljIGNvbnN0IEJhbmsgYmFuayA9IEdQOworICAgIHN0YXRpYyBjb25z
dCBXaWR0aCB3aWR0aCA9IFdpZHRoMTY7CisgICAgc3RhdGljIGNvbnN0IFR5cGUgdHlwZSA9IElu
dDMyOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVHJhaXRzPHVpbnQxNl90PiB7Cisg
ICAgc3RhdGljIGNvbnN0IEJhbmsgYmFuayA9IEdQOworICAgIHN0YXRpYyBjb25zdCBXaWR0aCB3
aWR0aCA9IFdpZHRoMTY7CisgICAgc3RhdGljIGNvbnN0IFR5cGUgdHlwZSA9IEludDMyOworfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVHJhaXRzPGludDMyX3Q+IHsKKyAgICBzdGF0aWMg
Y29uc3QgQmFuayBiYW5rID0gR1A7CisgICAgc3RhdGljIGNvbnN0IFdpZHRoIHdpZHRoID0gV2lk
dGgzMjsKKyAgICBzdGF0aWMgY29uc3QgVHlwZSB0eXBlID0gSW50MzI7Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBOYXRpdmVUcmFpdHM8dWludDMyX3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgQmFu
ayBiYW5rID0gR1A7CisgICAgc3RhdGljIGNvbnN0IFdpZHRoIHdpZHRoID0gV2lkdGgzMjsKKyAg
ICBzdGF0aWMgY29uc3QgVHlwZSB0eXBlID0gSW50MzI7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBOYXRpdmVUcmFpdHM8aW50NjRfdD4geworICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBH
UDsKKyAgICBzdGF0aWMgY29uc3QgV2lkdGggd2lkdGggPSBXaWR0aDY0OworICAgIHN0YXRpYyBj
b25zdCBUeXBlIHR5cGUgPSBJbnQ2NDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVRy
YWl0czx1aW50NjRfdD4geworICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBHUDsKKyAgICBz
dGF0aWMgY29uc3QgV2lkdGggd2lkdGggPSBXaWR0aDY0OworICAgIHN0YXRpYyBjb25zdCBUeXBl
IHR5cGUgPSBJbnQ2NDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVRyYWl0czxmbG9h
dD4geworICAgIHN0YXRpYyBjb25zdCBCYW5rIGJhbmsgPSBGUDsKKyAgICBzdGF0aWMgY29uc3Qg
V2lkdGggd2lkdGggPSBXaWR0aDMyOworICAgIHN0YXRpYyBjb25zdCBUeXBlIHR5cGUgPSBGbG9h
dDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVRyYWl0czxkb3VibGU+IHsKKyAgICBz
dGF0aWMgY29uc3QgQmFuayBiYW5rID0gRlA7CisgICAgc3RhdGljIGNvbnN0IFdpZHRoIHdpZHRo
ID0gV2lkdGg2NDsKKyAgICBzdGF0aWMgY29uc3QgVHlwZSB0eXBlID0gRG91YmxlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHJldmlzaW9uIDIxMzI2MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02OCw2ICs2OCwyMyBAQCBzdGQ6Om9wdGlvbmFsPE9wY29kZT4gaW52ZXJ0ZWRDb21wYXJl
KE9wCiAgICAgfQogfQogCitPcGNvZGUgc3RvcmVPcGNvZGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0
aCkKK3sKKyAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICBjYXNlIEdQOgorICAgICAgICBzd2l0Y2gg
KHdpZHRoKSB7CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAgcmV0dXJuIFN0b3Jl
ODsKKyAgICAgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICAgICAgcmV0dXJuIFN0b3JlMTY7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gU3RvcmU7CisgICAgICAgIH0KKyAg
ICBjYXNlIEZQOgorICAgICAgICByZXR1cm4gU3RvcmU7CisgICAgfQorfQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKIAogbmFtZXNwYWNlIFdURiB7CkBAIC0yNjMsNiArMjgwLDMzIEBAIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGMKICAgICBjYXNlIFN0b3JlOgog
ICAgICAgICBvdXQucHJpbnQoIlN0b3JlIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEF0
b21pY1dlYWtDQVM6CisgICAgICAgIG91dC5wcmludCgiQXRvbWljV2Vha0NBUyIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgICAgIG91dC5wcmludCgi
QXRvbWljU3Ryb25nQ0FTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEF0b21pY1hjaGdB
ZGQ6CisgICAgICAgIG91dC5wcmludCgiQXRvbWljWGNoZ0FkZCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgICAgICBvdXQucHJpbnQoIkF0b21pY1hjaGdB
bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXRvbWljWGNoZ09yOgorICAgICAgICBv
dXQucHJpbnQoIkF0b21pY1hjaGdPciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBdG9t
aWNYY2hnU3ViOgorICAgICAgICBvdXQucHJpbnQoIkF0b21pY1hjaGdTdWIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoKKyAgICAgICAgb3V0LnByaW50KCJBdG9t
aWNYY2hnWG9yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEF0b21pY1hjaGc6CisgICAg
ICAgIG91dC5wcmludCgiQXRvbWljWGNoZyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBE
ZXBlbmQ6CisgICAgICAgIG91dC5wcmludCgiRGVwZW5kIik7CisgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIFdhc21BZGRyZXNzOgogICAgICAgICBvdXQucHJpbnQoIldhc21BZGRyZXNzIik7CiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZp
c2lvbiAyMTMyNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5j
bHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSAiQjNXaWR0aC5oIgogI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtODIsNyArODMsNiBA
QCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIE1vZCwgLy8gQWxsIGJldHMgYXJlIG9mZiBh
cyB0byB3aGF0IHdpbGwgaGFwcGVuIHdoZW4geW91IGV4ZWN1dGUgdGhpcyBmb3IgLTJeMzElLTEg
YW5kIHglMC4KICAgICBVTW9kLAogCi0KICAgICAvLyBQb2x5bW9ycGhpYyBuZWdhdGlvbi4gTm90
ZSB0aGF0IHdlIG9ubHkgbmVlZCB0aGlzIGZvciBmbG9hdGluZyBwb2ludCwgc2luY2UgaW50ZWdl
ciBuZWdhdGlvbgogICAgIC8vIGlzIGV4YWN0bHkgbGlrZSBTdWIoMCwgeCkuIEJ1dCB0aGF0J3Mg
bm90IHRydWUgZm9yIGZsb2F0aW5nIHBvaW50LiBTdWIoMCwgMCkgaXMgMCwgd2hpbGUKICAgICAv
LyBOZWcoMCkgaXMgLTAuIEFsc28sIHdlIGNhbm9uaWNhbGl6ZSBTdWIoMCwgeCkgaW50byBOZWco
eCkgaW4gY2FzZSBvZiBpbnRlZ2Vycy4KQEAgLTE2Miw2ICsxNjIsMTA3IEBAIGVudW0gT3Bjb2Rl
IDogaW50MTZfdCB7CiAgICAgU3RvcmUxNiwKICAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMg
c3RvcmUgZm9yIEludDMyLCBJbnQ2NCwgRmxvYXQsIGFuZCBEb3VibGUuCiAgICAgU3RvcmUsCisg
ICAgCisgICAgLy8gQXRvbWljIGNvbXBhcmUgYW5kIHN3YXAgdGhhdCByZXR1cm5zIGEgYm9vbGVh
bi4gTWF5IGNob29zZSB0byBkbyBub3RoaW5nIGFuZCByZXR1cm4gZmFsc2UuIFlvdSBjYW4KKyAg
ICAvLyB1c3VhbGx5IGFzc3VtZSB0aGF0IHRoaXMgaXMgZmFzdGVyIGFuZCByZXN1bHRzIGluIGxl
c3MgY29kZSB0aGFuIEF0b21pY1N0cm9uZ0NBUywgdGhvdWdoIHRoYXQncworICAgIC8vIG5vdCBu
ZWNlc3NhcmlseSB0cnVlIG9uIEludGVsLCBpZiBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gZG9lcyBp
dHMgam9iLiBJbWFnaW5lIHRoYXQgdGhpcyBvcGNvZGUgaXMKKyAgICAvLyBhcyBpZiB5b3UgZGlk
IHRoaXMgYXRvbWljYWxseToKKyAgICAvLworICAgIC8vIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgLy8gYm9vbCBBdG9taWNXZWFrQ0FTKFQgZXhwZWN0ZWRWYWx1ZSwgVCBuZXdWYWx1ZSwgVCog
cHRyKQorICAgIC8vIHsKKyAgICAvLyAgICAgaWYgKCFyYW5kKCkpCisgICAgLy8gICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIFJlYWwgd29ybGQgZXhhbXBsZSBvZiB0aGlzOiBjb250ZXh0IHN3aXRj
aCBvbiBBUk0gd2hpbGUgZG9pbmcgQ0FTLgorICAgIC8vICAgICBpZiAoKnB0ciAhPSBleHBlY3Rl
ZFZhbHVlKQorICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vICAgICAqcHRyID0g
bmV3VmFsdWU7CisgICAgLy8gICAgIHJldHVybiB0cnVlOworICAgIC8vIH0KKyAgICAvLworICAg
IC8vIE5vdGUgdGhhdCBhbGwgYXRvbWljcyBwdXQgdGhlIHBvaW50ZXIgbGFzdCB0byBiZSBjb25z
aXN0ZW50IHdpdGggaG93IGxvYWRzIGFuZCBzdG9yZXMgd29yay4gVGhpcworICAgIC8vIGlzIGEg
Z29vZnkgdHJhZGl0aW9uLCBidXQgaXQncyBoYXJtbGVzcywgYW5kIGJldHRlciB0aGFuIGJlaW5n
IGluY29uc2lzdGVudC4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB3ZWFrIENBUyBoYXMgbm8g
ZmVuY2luZyBndWFyYW50ZWVzIHdoZW4gaXQgZmFpbHMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9s
bG93aW5nCisgICAgLy8gdHJhbnNmb3JtYXRpb24gaXMgYWx3YXlzIHZhbGlkOgorICAgIC8vCisg
ICAgLy8gQmVmb3JlOgorICAgIC8vCisgICAgLy8gICAgICAgICBCcmFuY2goQXRvbWljV2Vha0NB
UyhleHBlY3RlZCwgbmV3LCBwdHIpKQorICAgIC8vICAgICAgIFN1Y2Nlc3NvcnM6IFRoZW46I3N1
Y2Nlc3MsIEVsc2U6I2ZhaWwKKyAgICAvLworICAgIC8vIEFmdGVyOgorICAgIC8vCisgICAgLy8g
ICAgICAgICBCcmFuY2goRXF1YWwoTG9hZChwdHIpLCBleHBlY3RlZCkpCisgICAgLy8gICAgICAg
U3VjY2Vzc29yczogVGhlbjojYXR0ZW1wdCwgRWxzZTojZmFpbAorICAgIC8vICAgICBCQiNhdHRl
bXB0OgorICAgIC8vICAgICAgICAgQnJhbmNoKEF0b21pY1dlYWtDQVMoZXhwZWN0ZWQsIG5ldywg
cHRyKSkKKyAgICAvLyAgICAgICBTdWNjZXNzb3JzOiBUaGVuOiNzdWNjZXNzLCBFbHNlOiNmYWls
CisgICAgLy8KKyAgICAvLyBCb3RoIGtpbmRzIG9mIENBUyBmb3Igbm9uLWNhbm9uaWNhbCB3aWR0
aHMgKFdpZHRoOCBhbmQgV2lkdGgxNikgaWdub3JlIHRoZSBpcnJlbGV2YW50IGJpdHMgb2YgdGhl
CisgICAgLy8gaW5wdXQuCisgICAgQXRvbWljV2Vha0NBUywKKyAgICAKKyAgICAvLyBBdG9taWMg
Y29tcGFyZSBhbmQgc3dhcCB0aGF0IHJldHVybnMgdGhlIG9sZCB2YWx1ZS4gRG9lcyBub3QgaGF2
ZSB0aGUgbm9uZGV0ZXJtaW5pc20gb2YgV2Vha0NBUy4KKyAgICAvLyBUaGlzIGlzIGEgYml0IG1v
cmUgY29kZSBhbmQgYSBiaXQgc2xvd2VyIGluIHNvbWUgY2FzZXMsIHRob3VnaCBub3QgYnkgYSBs
b3QuIEltYWdpbmUgdGhhdCB0aGlzCisgICAgLy8gb3Bjb2RlIGlzIGFzIGlmIHlvdSBkaWQgdGhp
cyBhdG9taWNhbGx5OgorICAgIC8vCisgICAgLy8gdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAv
LyBUIEF0b21pY1N0cm9uZ0NBUyhUIGV4cGVjdGVkVmFsdWUsIFQgbmV3VmFsdWUsIFQqIHB0cikK
KyAgICAvLyB7CisgICAgLy8gICAgIFQgb2xkVmFsdWUgPSAqcHRyOworICAgIC8vICAgICBpZiAo
b2xkVmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZSkKKyAgICAvLyAgICAgICAgICpwdHIgPSBuZXdWYWx1
ZTsKKyAgICAvLyAgICAgcmV0dXJuIG9sZFZhbHVlCisgICAgLy8gfQorICAgIC8vCisgICAgLy8g
Tm90ZSB0aGF0IEF0b21pY1dlYWtDQVMgYW5kIEF0b21pY1N0cm9uZ0NBUyBzb3J0IG9mIGhhdmUg
dGhpcyBraW5kIG9mIGVxdWl2YWxlbmNlOgorICAgIC8vCisgICAgLy8gQXRvbWljV2Vha0NBUyhA
ZXhwLCBAbmV3LCBAcHRyKSA9PSBFcXVhbChBdG9taWNTdHJvbmdDQVMoQGV4cCwgQG5ldywgQHB0
ciksIEBleHApCisgICAgLy8KKyAgICAvLyBBc3N1bWluZyB0aGF0IHRoZSBXZWFrQ0FTIGRvZXMg
bm90IHNwdXJpb3VzbHkgZmFpbCwgb2YgY291cnNlLgorICAgIEF0b21pY1N0cm9uZ0NBUywKKyAg
ICAKKyAgICAvLyBBdG9taWNhbGx5IF9fXyBhIG1lbW9yeSBsb2NhdGlvbiBhbmQgcmV0dXJuIHRo
ZSBvbGQgdmFsdWUuIFN5bnRheDoKKyAgICAvLworICAgIC8vIEBvbGRWYWx1ZSA9IEF0b21pY1hj
aGdfX18oQG9wZXJhbmQsIEBwdHIpCisgICAgLy8KKyAgICAvLyBGb3Igbm9uLWNhbm9uaWNhbCB3
aWR0aHMgKFdpZHRoOCBhbmQgV2lkdGgxNiksIHRoZXNlIHJldHVybiBzaWduLWV4dGVuZGVkIHJl
c3VsdHMgYW5kIGlnbm9yZSB0aGUKKyAgICAvLyBpcnJlbGV2YW50IGJpdHMgb2YgdGhlaXIgaW5w
dXRzLgorICAgIEF0b21pY1hjaGdBZGQsCisgICAgQXRvbWljWGNoZ0FuZCwKKyAgICBBdG9taWNY
Y2hnT3IsCisgICAgQXRvbWljWGNoZ1N1YiwKKyAgICBBdG9taWNYY2hnWG9yLAorICAgIAorICAg
IC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgaGF2ZSBBdG9taWNYY2hnTmVnIGFuZCBBdG9taWNY
Y2hnTm90LgorICAgIAorICAgIC8vIEF0b21pY2FsbHkgZXhjaGFuZ2UgYSB2YWx1ZSB3aXRoIGEg
bWVtb3J5IGxvY2F0aW9uLiBTeW50YXg6CisgICAgLy8KKyAgICAvLyBAb2xkVmFsdWUgPSBBdG9t
aWNYY2hnKEBuZXdWYWx1ZSwgQHB0cikKKyAgICBBdG9taWNYY2hnLAorICAgIAorICAgIC8vIElu
dHJvZHVjZSBhbiBpbnZpc2libGUgZGVwZW5kZW5jeSBmb3IgYmxvY2tpbmcgbW90aW9uIG9mIGxv
YWRzIHdpdGggcmVzcGVjdCB0byBlYWNoIG90aGVyLiBTeW50YXg6CisgICAgLy8KKyAgICAvLyBA
cmVzdWx0ID0gRGVwZW5kKEBwaGFudG9tKQorICAgIC8vCisgICAgLy8gVGhpcyBpcyBldmVudHVh
bGx5IGNvZGVnZW5lcmF0ZWQgdG8gaGF2ZSBsb2NhbCBzZW1hbnRpY3MgYXMgaWYgd2UgZGlkOgor
ICAgIC8vCisgICAgLy8gQHJlc3VsdCA9ICQwCisgICAgLy8KKyAgICAvLyBCdXQgaXQgZW5zdXJl
cyB0aGF0IHRoZSB1c2VycyBvZiBAcmVzdWx0IGNhbm5vdCBleGVjdXRlIHVudGlsIEBwaGFudG9t
IGlzIGNvbXB1dGVkLgorICAgIC8vCisgICAgLy8gVGhlIGNvbXBpbGVyIGlzIG5vdCBhbGxvd2Vk
IHRvIHJlYXNvbiBhYm91dCB0aGUgZmFjdCB0aGF0IERlcGVuZCBjb2RlZ2VuZXJhdGVzIHRoaXMg
d2F5LiBBbnkga2luZAorICAgIC8vIG9mIHRyYW5zZm9ybWF0aW9uIG9yIGFuYWx5c2lzIHRoYXQg
cmVsaWVzIG9uIHRoZSBpbnNpZ2h0IHRoYXQgRGVwZW5kIGlzIHJlYWxseSB6ZXJvIGlzIHVuc291
bmQsCisgICAgLy8gYmVjYXVzZSBpdCB1bmxvY2tzIHJlb3JkZXJpbmcgb2YgdXNlcnMgb2YgQHJl
c3VsdCBhbmQgQHBoYW50b20uCisgICAgLy8KKyAgICAvLyBPbiBYODYsIHRoaXMgaXMgbG93ZXJl
ZCB0byBhIGxvYWQtbG9hZCBmZW5jZSBhbmQgQHJlc3VsdCB1c2VzIEBwaGFudG9tIGRpcmVjdGx5
LgorICAgIC8vCisgICAgLy8gT24gQVJNLCB0aGlzIGlzIGxvd2VyZWQgYXMgaWYgbGlrZToKKyAg
ICAvLworICAgIC8vIEByZXN1bHQgPSBCaXRYb3IoQHBoYW50b20sIEBwaGFudG9tKQorICAgIC8v
CisgICAgLy8gRXhjZXB0IHRoYXQgdGhlIGNvbXBpbGVyIG5ldmVyIGdldHMgYW4gb3Bwb3J0dW5p
dHkgdG8gc2ltcGxpZnkgb3V0IHRoZSBCaXRYb3IuCisgICAgRGVwZW5kLAogCiAgICAgLy8gVGhp
cyBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIGFjdHVhbCBhZGRyZXNzIG9mIGEgV2FzbSBtZW1vcnkg
b3BlcmF0aW9uLiBJdCB0YWtlcyBhbiBJbnRQdHIKICAgICAvLyBhbmQgYSBwaW5uZWQgcmVnaXN0
ZXIgdGhlbiBjb21wdXRlcyB0aGUgYXBwcm9wcmlhdGUgSW50UHRyIGFkZHJlc3MuIEZvciB0aGUg
dXNlLWNhc2Ugb2YKQEAgLTMwMSw2ICs0MDIsMTEyIEBAIGlubGluZSBib29sIGlzRGVmaW5pdGVs
eVRlcm1pbmFsKE9wY29kZSAKICAgICB9CiB9CiAKK2lubGluZSBib29sIGlzTG9hZChPcGNvZGUg
b3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBMb2FkOFo6CisgICAg
Y2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgorICAgIGNhc2UgTG9hZDE2UzoKKyAgICBj
YXNlIExvYWQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzU3RvcmUoT3Bjb2RlIG9wY29k
ZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgU3RvcmU4OgorICAgIGNhc2Ug
U3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0xv
YWRTdG9yZShPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2Fz
ZSBMb2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgorICAgIGNhc2Ug
TG9hZDE2UzoKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBTdG9yZTg6CisgICAgY2FzZSBTdG9y
ZTE2OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzQXRvbWlj
KE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIEF0b21p
Y1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgY2FzZSBBdG9taWNYY2hn
QWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAg
ICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9yOgorICAgIGNhc2Ug
QXRvbWljWGNoZzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNBdG9taWNDQVMoT3Bjb2Rl
IG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgQXRvbWljV2Vha0NB
UzoKKyAgICBjYXNlIEF0b21pY1N0cm9uZ0NBUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wg
aXNBdG9taWNYY2hnKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgY2FzZSBBdG9taWNYY2hnQW5kOgorICAgIGNhc2Ug
QXRvbWljWGNoZ09yOgorICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICBjYXNlIEF0b21pY1hj
aGdYb3I6CisgICAgY2FzZSBBdG9taWNYY2hnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBp
c01lbW9yeUFjY2VzcyhPcGNvZGUgb3Bjb2RlKQoreworICAgIHJldHVybiBpc0F0b21pYyhvcGNv
ZGUpIHx8IGlzTG9hZFN0b3JlKG9wY29kZSk7Cit9CisKK2lubGluZSBPcGNvZGUgc2lnbkV4dGVu
ZE9wY29kZShXaWR0aCB3aWR0aCkKK3sKKyAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgY2FzZSBX
aWR0aDg6CisgICAgICAgIHJldHVybiBTRXh0ODsKKyAgICBjYXNlIFdpZHRoMTY6CisgICAgICAg
IHJldHVybiBTRXh0MTY7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE9vcHM7CisgICAgfQorfQorCitKU19FWFBPUlRf
UFJJVkFURSBPcGNvZGUgc3RvcmVPcGNvZGUoQmFuayBiYW5rLCBXaWR0aCB3aWR0aCk7CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMjEzMjYxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAyLDYgKzIwMiw4IEBAIHZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMK
ICAgICAgICAgfQogICAgICAgICBkYXRhTG9nKCIgICAgIiwgZGVlcER1bXAoKnRoaXMsIHZhbHVl
KSwgIlxuIik7CiAgICAgfQorICAgIGlmIChoYXNRdWlya3MoKSkKKyAgICAgICAgb3V0LnByaW50
KCJIYXMgUXVpcmtzOiBUcnVlXG4iKTsKICAgICBpZiAodmFyaWFibGVzKCkuc2l6ZSgpKSB7CiAg
ICAgICAgIG91dC5wcmludCgiVmFyaWFibGVzOlxuIik7CiAgICAgICAgIGZvciAoVmFyaWFibGUq
IHZhcmlhYmxlIDogdmFyaWFibGVzKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmUuaAkocmV2aXNpb24gMjEzMjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsNiArMTE3LDcgQEAgcHVibGlj
OgogICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChPcmlnaW4sIFR5cGUsIGludDY0X3QgdmFsdWUp
OwogICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChWYWx1ZSosIGludDY0X3QgdmFsdWUpOwogCisg
ICAgLy8gWW91J3JlIGd1YXJhbnRlZWQgdGhhdCBib3R0b20gaXMgemVyby4KICAgICBWYWx1ZSog
YWRkQm90dG9tKE9yaWdpbiwgVHlwZSk7CiAgICAgVmFsdWUqIGFkZEJvdHRvbShWYWx1ZSopOwog
CkBAIC0xOTUsNiArMTk2LDE3IEBAIHB1YmxpYzoKICAgICAvLyBhbGl2ZS4gR3JlYXQgZm9yIGNv
bXBpbGVyLWdlbmVyYXRlZCBkYXRhIHNlY3Rpb25zLCBsaWtlIHN3aXRjaCBqdW1wIHRhYmxlcyBh
bmQgY29uc3RhbnQgcG9vbHMuCiAgICAgLy8gVGhpcyByZXR1cm5zIG1lbW9yeSB0aGF0IGhhcyBi
ZWVuIHplcm8taW5pdGlhbGl6ZWQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWRkRGF0
YVNlY3Rpb24oc2l6ZV90KTsKKyAgICAKKyAgICAvLyBTb21lIG9wZXJhdGlvbnMgYXJlIHNwZWNp
ZmllZCBpbiBCMyBJUiB0byBiZWhhdmUgb25lIHdheSBidXQgb24gdGhpcyBnaXZlbiBDUFUgdGhl
eSBiZWhhdmUgYQorICAgIC8vIGRpZmZlcmVudCB3YXkuIFdoZW4gdHJ1ZSwgdGhvc2UgQjMgSVIg
b3BzIHN3aXRjaCB0byBiZWhhdmluZyB0aGUgQ1BVIHdheSwgYW5kIHRoZSBvcHRpbWl6ZXIgbWF5
CisgICAgLy8gc3RhcnQgdGFraW5nIGFkdmFudGFnZSBvZiBpdC4KKyAgICAvLworICAgIC8vIE9u
ZSB3YXkgdG8gdGhpbmsgb2YgaXQgaXMgbGlrZSB0aGlzLiBJbWFnaW5lIHRoYXQgeW91IGZpbmQg
dGhhdCB0aGUgY2xlYW5lc3Qgd2F5IG9mIGxvd2VyaW5nCisgICAgLy8gc29tZXRoaW5nIGluIGxv
d2VyTWFjcm9zIGlzIHRvIHVuY29uZGl0aW9uYWxseSByZXBsYWNlIG9uZSBvcGNvZGUgd2l0aCBh
bm90aGVyLiBUaGlzIGlzIGEgc2hvcnRjdXQKKyAgICAvLyB3aGVyZSB5b3UgaW5zdGVhZCBrZWVw
IHRoZSBzYW1lIG9wY29kZSwgYnV0IHJlbHkgb24gdGhlIG9wY29kZSdzIG1lYW5pbmcgY2hhbmdl
cyBvbmNlIGxvd2VyTWFjcm9zCisgICAgLy8gc2V0cyBoYXNRdWlya3MuCisgICAgYm9vbCBoYXNR
dWlya3MoKSBjb25zdCB7IHJldHVybiBtX2hhc1F1aXJrczsgfQorICAgIHZvaWQgc2V0SGFzUXVp
cmtzKGJvb2wgdmFsdWUpIHsgbV9oYXNRdWlya3MgPSB2YWx1ZTsgfQogCiAgICAgT3BhcXVlQnlw
cm9kdWN0cyYgYnlwcm9kdWN0cygpIHsgcmV0dXJuICptX2J5cHJvZHVjdHM7IH0KIApAQCAtMjUy
LDYgKzI2NCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChQcmludFN0
cmVhbSYsIE9yaWdpbik+PiBtX29yaWdpblByaW50ZXI7CiAgICAgY29uc3Qgdm9pZCogbV9mcm9u
dGVuZERhdGE7CiAgICAgUENUb09yaWdpbk1hcCBtX3BjVG9PcmlnaW5NYXA7CisgICAgYm9vbCBt
X2hhc1F1aXJrcyB7IGZhbHNlIH07CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxMzI2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKKyNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRl
ICJCM0NvbXB1dGVEaXZpc2lvbk1hZ2ljLmgiCkBAIC02MDIsNyArNjAzLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIE5lZzoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTmVnKGNvbnN0YW50KQog
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiAtY29uc3RhbnQKQEAgLTEyOTUsNiArMTI5NiwxNiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9wcm9jLmhh
c1F1aXJrcygpKSB7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChBdG9taWNY
Y2hnX19fKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXworICAg
ICAgICAgICAgICAgIGlmIChpc0F0b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgp
KQorICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRvbWljVmFs
dWU+KCktPm9wZXJhdGlvbldpZHRoKCkgPT0gV2lkdGg4KSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIFNFeHQxNjoKQEAgLTEzNDMsNiArMTM1NCwxNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbV9wcm9jLmhhc1F1aXJrcygpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoQXRvbWljWGNoZ19fXykKKyAgICAg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEF0b21pY1hjaGdfX18KKyAgICAgICAgICAgICAgICBp
ZiAoaXNBdG9taWNYY2hnKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVlPigpLT5vcGVyYXRp
b25XaWR0aCgpID09IFdpZHRoMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJ
ZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGNhc2UgU0V4dDMyOgpAQCAtMjEwMSwyMiArMjEyMiwyNSBAQCBwcml2YXRlOgogICAg
ICAgICBBU1NFUlQobV92YWx1ZS0+bnVtQ2hpbGRyZW4oKSA+PSAyKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIExlYXZlIGl0IGFsb25lIGlmIHRoZSByaWdodCBjaGlsZCBpcyBhIGNvbnN0YW50Lgot
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgaWYg
KG1fdmFsdWUtPmNoaWxkKDEpLT5pc0NvbnN0YW50KCkKKyAgICAgICAgICAgIHx8IG1fdmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzQ29uc3RhbnQo
KSkgeworICAgICAgICBhdXRvIHN3YXAgPSBbJl0gKCkgewogICAgICAgICAgICAgc3RkOjpzd2Fw
KG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KKyAgICAgICAg
fTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNDb25zdGFudCgp
KQorICAgICAgICAgICAgcmV0dXJuIHN3YXAoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKQorICAgICAgICAgICAg
cmV0dXJuIHN3YXAoKTsKKyAgICAgICAgCiAgICAgICAgIC8vIFNvcnQgdGhlIG9wZXJhbmRzLiBU
aGlzIGlzIGFuIGltcG9ydGFudCBjYW5vbmljYWxpemF0aW9uLiBXZSB1c2UgdGhlIGluZGV4IGlu
c3RlYWQgb2YKICAgICAgICAgLy8gdGhlIGFkZHJlc3MgdG8gbWFrZSB0aGlzIGF0IGxlYXN0IHNs
aWdodGx5IGRldGVybWluaXN0aWMuCi0gICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aW5k
ZXgoKSA+IG1fdmFsdWUtPmNoaWxkKDEpLT5pbmRleCgpKSB7Ci0gICAgICAgICAgICBzdGQ6OnN3
YXAobV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pbmRleCgpID4gbV92YWx1ZS0+Y2hpbGQoMSktPmluZGV4
KCkpCisgICAgICAgICAgICByZXR1cm4gc3dhcCgpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCByZWFsbHkgYmUgYSBmb3J3YXJkIGFuYWx5c2lzLiBJbnN0ZWFkLCB3ZSB1c2Vz
IGEgYm91bmRlZC1zZWFyY2ggYmFja3dhcmRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMTMyNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAK
ICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisj
aW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMu
aCIKICNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgi
CkBAIC0zNDYsNiArMzQ3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJB
dCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09
IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2Uo
dmFsdWUpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBMb2FkOgpAQCAtMzUzLDYgKzM1
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRy
ZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAg
ICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBTdG9yZTg6CkBAIC0zNjIsNiArMzY1LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IElu
dDMyLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5j
aGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlRmVuY2UodmFsdWUpOwogICAgICAgICAgICAg
ICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBTdG9yZToKQEAgLTM2OSw4ICszNzMsNDkgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwg
KnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBl
KCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgdmFsaWRhdGVGZW5jZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVT
dGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEF0b21pY1dlYWtDQVM6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5k
KCkuaXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5udW1DaGlsZHJlbigpID09IDMsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1
ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9p
bnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0
b21pYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1N0cm9uZ0NB
UzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxk
cmVuKCkgPT0gMywgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxk
KDEpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
aXNJbnQodmFsdWUtPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPmNoaWxkKDIpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUF0b21pYyh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdBZGQ6CisgICAgICAgICAgICBjYXNl
IEF0b21pY1hjaGdBbmQ6CisgICAgICAgICAgICBjYXNlIEF0b21pY1hjaGdPcjoKKyAgICAgICAg
ICAgIGNhc2UgQXRvbWljWGNoZ1N1YjoKKyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZ1hvcjoK
KyAgICAgICAgICAgIGNhc2UgQXRvbWljWGNoZzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSgh
dmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgw
KS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlz
SW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVBdG9taWModmFsdWUpOworICAgICAg
ICAgICAgICAgIHZhbGlkYXRlU3RhY2tBY2Nlc3ModmFsdWUpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBEZXBlbmQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
IXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5j
aGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKGlzSW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtQWRkcmVzczoKICAgICAgICAgICAgICAg
ICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUp
KTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAo
IkF0ICIsICp2YWx1ZSkpOwpAQCAtNTM3LDYgKzU4MiwyMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZUZlbmNl
KFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0ZlbmNlKCkpCisg
ICAgICAgICAgICBWQUxJREFURShtZW1vcnktPmFjY2Vzc0JhbmsoKSA9PSBHUCwgKCJGZW5jZSBh
dCAiLCAqbWVtb3J5KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGVBdG9taWMoVmFs
dWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgQXRvbWljVmFsdWUqIGF0b21pYyA9IHZhbHVlLT5h
czxBdG9taWNWYWx1ZT4oKTsKKyAgICAgICAgCisgICAgICAgIFZBTElEQVRFKGJlc3RUeXBlKEdQ
LCBhdG9taWMtPm9wZXJhdGlvbldpZHRoKCkpID09IGF0b21pYy0+b3BlcmF0aW9uVHlwZSgpLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgIH0KIAogICAgIHZvaWQgdmFsaWRhdGVTdGFja0FjY2VzcyhW
YWx1ZSogdmFsdWUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNw
cAkocmV2aXNpb24gMjEzMjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQp
CiAKICNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKyNpbmNsdWRlICJCM0F0b21pY1Zh
bHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQm90
dG9tUHJvdmlkZXIuaCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKQEAgLTUxMCw2ICs1MTEs
NyBAQCBib29sIFZhbHVlOjpyZXR1cm5zQm9vbCgpIGNvbnN0CiAgICAgY2FzZSBBYm92ZUVxdWFs
OgogICAgIGNhc2UgQmVsb3dFcXVhbDoKICAgICBjYXNlIEVxdWFsT3JVbm9yZGVyZWQ6CisgICAg
Y2FzZSBBdG9taWNXZWFrQ0FTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFBoaToK
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgc3RvcnkgaGVyZS4KQEAgLTU4OSw2
ICs1OTEsNyBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICBjYXNlIEJlbG93
RXF1YWw6CiAgICAgY2FzZSBFcXVhbE9yVW5vcmRlcmVkOgogICAgIGNhc2UgU2VsZWN0OgorICAg
IGNhc2UgRGVwZW5kOgogICAgICAgICBicmVhazsKICAgICBjYXNlIERpdjoKICAgICBjYXNlIFVE
aXY6CkBAIC02MDAsMTYgKzYwMyw0NCBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QK
ICAgICBjYXNlIExvYWQ4UzoKICAgICBjYXNlIExvYWQxNlo6CiAgICAgY2FzZSBMb2FkMTZTOgot
ICAgIGNhc2UgTG9hZDoKLSAgICAgICAgcmVzdWx0LnJlYWRzID0gYXM8TWVtb3J5VmFsdWU+KCkt
PnJhbmdlKCk7CisgICAgY2FzZSBMb2FkOiB7CisgICAgICAgIGNvbnN0IE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSBhczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmVzdWx0LnJlYWRzID0gbWVtb3J5
LT5yYW5nZSgpOworICAgICAgICBpZiAobWVtb3J5LT5oYXNGZW5jZSgpKSB7CisgICAgICAgICAg
ICByZXN1bHQud3JpdGVzID0gbWVtb3J5LT5mZW5jZVJhbmdlKCk7CisgICAgICAgICAgICByZXN1
bHQuZmVuY2UgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIHJlc3VsdC5jb250cm9sRGVwZW5k
ZW50ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgU3RvcmU4OgogICAg
IGNhc2UgU3RvcmUxNjoKLSAgICBjYXNlIFN0b3JlOgotICAgICAgICByZXN1bHQud3JpdGVzID0g
YXM8TWVtb3J5VmFsdWU+KCktPnJhbmdlKCk7CisgICAgY2FzZSBTdG9yZTogeworICAgICAgICBj
b25zdCBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gYXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIHJl
c3VsdC53cml0ZXMgPSBtZW1vcnktPnJhbmdlKCk7CisgICAgICAgIGlmIChtZW1vcnktPmhhc0Zl
bmNlKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5yZWFkcyA9IG1lbW9yeS0+ZmVuY2VSYW5nZSgp
OworICAgICAgICAgICAgcmVzdWx0LmZlbmNlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEF0b21pY1dlYWtDQVM6CisgICAgY2FzZSBBdG9taWNTdHJvbmdDQVM6CisgICAgY2Fz
ZSBBdG9taWNYY2hnQWRkOgorICAgIGNhc2UgQXRvbWljWGNoZ0FuZDoKKyAgICBjYXNlIEF0b21p
Y1hjaGdPcjoKKyAgICBjYXNlIEF0b21pY1hjaGdTdWI6CisgICAgY2FzZSBBdG9taWNYY2hnWG9y
OgorICAgIGNhc2UgQXRvbWljWGNoZzogeworICAgICAgICBjb25zdCBBdG9taWNWYWx1ZSogYXRv
bWljID0gYXM8QXRvbWljVmFsdWU+KCk7CisgICAgICAgIHJlc3VsdC5yZWFkcyA9IGF0b21pYy0+
cmFuZ2UoKSB8IGF0b21pYy0+ZmVuY2VSYW5nZSgpOworICAgICAgICByZXN1bHQud3JpdGVzID0g
YXRvbWljLT5yYW5nZSgpIHwgYXRvbWljLT5mZW5jZVJhbmdlKCk7CisgICAgICAgIGlmIChhdG9t
aWMtPmhhc0ZlbmNlKCkpCisgICAgICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAg
ICByZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIH0K
ICAgICBjYXNlIFdhc21BZGRyZXNzOgogICAgICAgICByZXN1bHQucmVhZHNQaW5uZWQgPSB0cnVl
OwogICAgICAgICBicmVhazsKQEAgLTYxNywxOCArNjQ4LDcgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZm
ZWN0cygpIGNvbnN0CiAgICAgICAgIGNvbnN0IEZlbmNlVmFsdWUqIGZlbmNlID0gYXM8RmVuY2VW
YWx1ZT4oKTsKICAgICAgICAgcmVzdWx0LnJlYWRzID0gZmVuY2UtPnJlYWQ7CiAgICAgICAgIHJl
c3VsdC53cml0ZXMgPSBmZW5jZS0+d3JpdGU7Ci0gICAgICAgIAotICAgICAgICAvLyBQcmV2ZW50
IGtpbGxpbmcgb2YgZmVuY2VzIHRoYXQgY2xhaW0gbm90IHRvIHdyaXRlIGFueXRoaW5nLiBJdCdz
IGEgYml0IHdlaXJkIHRoYXQgd2UgdXNlCi0gICAgICAgIC8vIGxvY2FsIHN0YXRlIGFzIHRoZSB3
YXkgdG8gZG8gdGhpcywgYnV0IGl0IGhhcHBlbnMgdG8gd29yazogd2UgbXVzdCBhc3N1bWUgdGhh
dCB3ZSBjYW5ub3QKLSAgICAgICAgLy8ga2lsbCB3cml0ZXNMb2NhbFN0YXRlIHVubGVzcyB3ZSB1
bmRlcnN0YW5kcyBleGFjdGx5IHdoYXQgdGhlIGluc3RydWN0aW9uIGlzIGRvaW5nIChsaWtlCi0g
ICAgICAgIC8vIHRoZSB3YXkgdGhhdCBmaXhTU0EgdW5kZXJzdGFuZHMgU2V0L0dldCBhbmQgdGhl
IHdheSB0aGF0IHJlZHVjZVN0cmVuZ3RoIGFuZCBvdGhlcnMKLSAgICAgICAgLy8gdW5kZXJzdGFu
ZCBVcHNpbG9uKS4gVGhpcyB3b3VsZCBvbmx5IGJlY29tZSBhIHByb2JsZW0gaWYgd2UgaGFkIHNv
bWUgYW5hbHlzaXMgdGhhdCB3YXMKLSAgICAgICAgLy8gbG9va2luZyB0byB1c2UgdGhlIHdyaXRl
c0xvY2FsU3RhdGUgYml0IHRvIGludmFsaWRhdGUgYSBDU0Ugb3ZlciBsb2NhbCBzdGF0ZSBvcGVy
YXRpb25zLgotICAgICAgICAvLyBUaGVuIGEgRmVuY2Ugd291bGQgbG9vayBibG9jaywgc2F5LCB0
aGUgZWxpbWluYXRpb24gb2YgYSByZWR1bmRhbnQgR2V0LiBCdXQgaXQgbGlrZQotICAgICAgICAv
LyB0aGF0J3Mgbm90IGF0IGFsbCBob3cgb3VyIG9wdGltaXphdGlvbnMgZm9yIFNldC9HZXQvVXBz
aWxvbi9QaGkgd29yayAtIHRoZXkgZ3JvayB0aGVpcgotICAgICAgICAvLyBvcGVyYXRpb25zIGRl
ZXBseSBlbm91Z2ggdGhhdCB0aGV5IGhhdmUgbm8gbmVlZCB0byBjaGVjayB0aGlzIGJpdCAtIHNv
IHRoaXMgY2hlYXQgaXMKLSAgICAgICAgLy8gZmluZS4KLSAgICAgICAgcmVzdWx0LndyaXRlc0xv
Y2FsU3RhdGUgPSB0cnVlOworICAgICAgICByZXN1bHQuZmVuY2UgPSB0cnVlOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBDQ2FsbDoKQEAgLTY5NCw2ICs3MTQsNyBAQCBWYWx1ZUtl
eSBWYWx1ZTo6a2V5KCkgY29uc3QKICAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgQml0d2lzZUNh
c3Q6CiAgICAgY2FzZSBOZWc6CisgICAgY2FzZSBEZXBlbmQ6CiAgICAgICAgIHJldHVybiBWYWx1
ZUtleShraW5kKCksIHR5cGUoKSwgY2hpbGQoMCkpOwogICAgIGNhc2UgQWRkOgogICAgIGNhc2Ug
U3ViOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAyMTMyNjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OCw2ICs2OCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKS5vcGNvZGUoKTsgfQogICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUg
a2luZCBpcyBtZWFudCB0byBiZSBpbW11dGFibGUuIERvIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0
IHRoaXMgaXMgc2FmZS4gSXQncyBub3QKKyAgICAvLyB1c3VhbGx5IHNhZmUuCisgICAgdm9pZCBz
ZXRLaW5kVW5zYWZlbHkoS2luZCBraW5kKSB7IG1fa2luZCA9IGtpbmQ7IH0KKyAgICB2b2lkIHNl
dE9wY29kZVVuc2FmZWx5KE9wY29kZSBvcGNvZGUpIHsgbV9raW5kLnNldE9wY29kZShvcGNvZGUp
OyB9CisgICAgCiAgICAgLy8gSXQncyBnb29kIHByYWN0aWNlIHRvIG1pcnJvciBLaW5kIG1ldGhv
ZHMgaGVyZSwgc28geW91IGNhbiBzYXkgdmFsdWUtPmlzQmxhaCgpCiAgICAgLy8gaW5zdGVhZCBv
ZiB2YWx1ZS0+a2luZCgpLmlzQmxhaCgpLgogICAgIGJvb2wgaXNDaGlsbCgpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKS5pc0NoaWxsKCk7IH0KQEAgLTEwNyw2ICsxMTIsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gdmFsdWVzIHdpdGggSWRlbnRpdGllcyBvbiBib3R0b20gY29uc3RhbnRzLiBGb3IgdGhpcyBy
ZWFzb24sIHRoaXMgdGFrZXMgYSBjYWxsYmFjayB0aGF0IGlzCiAgICAgLy8gcmVzcG9uc2libGUg
Zm9yIGNyZWF0aW5nIGJvdHRvbXMuIFRoZXJlJ3MgYSB1dGlsaXR5IGZvciB0aGlzLCBzZWUgQjNC
b3R0b21Qcm92aWRlci5oLiBZb3UKICAgICAvLyBjYW4gYWxzbyBhY2Nlc3MgdGhhdCB1dGlsaXR5
IHVzaW5nIHJlcGxhY2VXaXRoQm90dG9tKEluc2VydGlvblNldCYsIHNpemVfdCkuCisgICAgLy8K
KyAgICAvLyBZb3UncmUgZ3VhcmFudGVlZCB0aGF0IGJvdHRvbSBpcyB6ZXJvLgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEJvdHRvbVByb3ZpZGVyPgogICAgIHZvaWQgcmVwbGFjZVdpdGhCb3R0b20o
Y29uc3QgQm90dG9tUHJvdmlkZXImKTsKICAgICAKQEAgLTMyMSw2ICszMjgsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIElUb0Y6CiAgICAgICAgIGNhc2UgQml0d2lzZUNhc3Q6CiAgICAgICAg
IGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIERlcGVuZDoKICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShudW1BcmdzICE9IDEpKQogICAgICAgICAgICAgICAgIGJhZEtpbmQoa2luZCwgbnVtQXJn
cyk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1dpZHRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0
aC5jcHAJKHJldmlzaW9uIDIxMzI2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dp
ZHRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMzggQEAKIAogI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgogCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVHlw
ZSBiZXN0VHlwZShCYW5rIGJhbmssIFdpZHRoIHdpZHRoKQoreworICAgIHN3aXRjaCAod2lkdGgp
IHsKKyAgICBjYXNlIFdpZHRoODoKKyAgICBjYXNlIFdpZHRoMTY6CisgICAgY2FzZSBXaWR0aDMy
OgorICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAg
IHJldHVybiBJbnQzMjsKKyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBGbG9h
dDsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gVm9pZDsKKyAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgIHN3aXRjaCAoYmFu
aykgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIEludDY0OworICAgICAg
ICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICAgICAgfQorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVm9pZDsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVm9pZDsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKIG5hbWVzcGFjZSBXVEYgewogCiB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpCMzo6V2lkdGggd2lkdGgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXaWR0aC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgJKHJldmlzaW9uIDIxMzI2MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dpZHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYg
KzYyLDE4IEBAIGlubGluZSBXaWR0aCB3aWR0aEZvclR5cGUoVHlwZSB0eXBlKQogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCitpbmxpbmUgV2lkdGggY2Fub25pY2FsV2lkdGgoV2lkdGgg
d2lkdGgpCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KFdpZHRoMzIsIHdpZHRoKTsKK30KKworaW5s
aW5lIGJvb2wgaXNDYW5vbmljYWxXaWR0aChXaWR0aCB3aWR0aCkKK3sKKyAgICByZXR1cm4gd2lk
dGggPj0gV2lkdGgzMjsKK30KKworVHlwZSBiZXN0VHlwZShCYW5rIGJhbmssIFdpZHRoIHdpZHRo
KTsKKwogaW5saW5lIFdpZHRoIGNvbnNlcnZhdGl2ZVdpZHRoKEJhbmsgYmFuaykKIHsKICAgICBy
ZXR1cm4gYmFuayA9PSBHUCA/IHBvaW50ZXJXaWR0aCgpIDogV2lkdGg2NDsKQEAgLTkzLDYgKzEw
NSwyMCBAQCBpbmxpbmUgV2lkdGggd2lkdGhGb3JCeXRlcyh1bnNpZ25lZCBieXRlCiAgICAgfQog
fQogCitpbmxpbmUgdWludDY0X3QgbWFzayhXaWR0aCB3aWR0aCkKK3sKKyAgICBzd2l0Y2ggKHdp
ZHRoKSB7CisgICAgY2FzZSBXaWR0aDg6CisgICAgICAgIHJldHVybiAweDAwMDAwMDAwMDAwMDAw
ZmZsbHU7CisgICAgY2FzZSBXaWR0aDE2OgorICAgICAgICByZXR1cm4gMHgwMDAwMDAwMDAwMDBm
ZmZmbGx1OworICAgIGNhc2UgV2lkdGgzMjoKKyAgICAgICAgcmV0dXJuIDB4MDAwMDAwMDBmZmZm
ZmZmZmxsdTsKKyAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgIHJldHVybiAweGZmZmZmZmZmZmZm
ZmZmZmZsbHU7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogbmFtZXNw
YWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24g
MjEzMjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgogI2luY2x1
ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1ZGUgIkIzQXJndW1l
bnRSZWdWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQXRvbWljVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCiAjaW5jbHVkZSAi
QjNDb21waWxhdGlvbi5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIkIzTWF0aEV4dHJh
cy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM01vdmVDb25zdGFu
dHMuaCIKKyNpbmNsdWRlICJCM05hdGl2ZVRyYWl0cy5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJl
LmgiCiAjaW5jbHVkZSAiQjNSZWR1Y2VTdHJlbmd0aC5oIgogI2luY2x1ZGUgIkIzU2xvdEJhc2VW
YWx1ZS5oIgpAQCAtMjk3LDYgKzI5OSwyNCBAQCB2b2lkIHRlc3RMb2FkNDIoKQogICAgIENIRUNL
KGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSA9PSA0Mik7CiB9CiAKK3ZvaWQgdGVzdExvYWRBY3E0
MigpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBpbnQgeCA9IDQyOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmln
aW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgJngpLAorICAgICAgICAgICAgMCwgSGVhcFJhbmdlKDQyKSwgSGVhcFJhbmdlKDQy
KSkpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgp
KQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxkYSIpOworICAgIENIRUNL
KGludm9rZTxpbnQ+KCpjb2RlKSA9PSA0Mik7Cit9CisKIHZvaWQgdGVzdExvYWRXaXRoT2Zmc2V0
SW1wbChpbnQzMl90IG9mZnNldDY0LCBpbnQzMl90IG9mZnNldDMyKQogewogICAgIHsKQEAgLTU3
NDgsNiArNTc2OCwzNSBAQCB2b2lkIHRlc3RTdG9yZUFkZExvYWQzMihpbnQgYW1vdW50KQogICAg
IENIRUNLKHNsb3QgPT0gMzcgKyBhbW91bnQpOwogfQogCit2b2lkIHRlc3RTdG9yZVJlbEFkZExv
YWRBY3EzMihpbnQgYW1vdW50KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IHNsb3QgPSAzNzsKKyAgICBDb25z
dFB0clZhbHVlKiBzbG90UHRyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAmc2xvdCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAg
ICAgICAgcHJvYywgU3RvcmUsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgTG9hZCwgSW50
MzIsIE9yaWdpbigpLCBzbG90UHRyLCAwLCBIZWFwUmFuZ2UoNDIpLCBIZWFwUmFuZ2UoNDIpKSwK
KyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJv
YywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpLAor
ICAgICAgICBzbG90UHRyLCAwLCBIZWFwUmFuZ2UoNDIpLCBIZWFwUmFuZ2UoNDIpKTsKKyAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAwKSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGlmIChpc0FSTTY0
KCkpIHsKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsZGEiKTsKKyAgICAg
ICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzdGwiKTsKKyAgICB9CisgICAgQ0hFQ0so
IWludm9rZTxpbnQ+KCpjb2RlLCBhbW91bnQpKTsKKyAgICBDSEVDSyhzbG90ID09IDM3ICsgYW1v
dW50KTsKK30KKwogdm9pZCB0ZXN0U3RvcmVBZGRMb2FkSW1tMzIoaW50IGFtb3VudCkKIHsKICAg
ICBQcm9jZWR1cmUgcHJvYzsKQEAgLTU3OTIsNiArNTg0MSw3NCBAQCB2b2lkIHRlc3RTdG9yZUFk
ZExvYWQ4KGludCBhbW91bnQsIEIzOjpPCiAgICAgQ0hFQ0soc2xvdCA9PSAzNyArIGFtb3VudCk7
CiB9CiAKK3ZvaWQgdGVzdFN0b3JlUmVsQWRkTG9hZEFjcTgoaW50IGFtb3VudCwgQjM6Ok9wY29k
ZSBsb2FkT3Bjb2RlKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50OF90IHNsb3QgPSAzNzsKKyAgICBDb25zdFB0
clZhbHVlKiBzbG90UHRyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAmc2xvdCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAg
ICAgcHJvYywgU3RvcmU4LCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIGxvYWRPcGNvZGUs
IE9yaWdpbigpLCBzbG90UHRyLCAwLCBIZWFwUmFuZ2UoNDIpLCBIZWFwUmFuZ2UoNDIpKSwKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywg
VHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpLAorICAg
ICAgICBzbG90UHRyLCAwLCBIZWFwUmFuZ2UoNDIpLCBIZWFwUmFuZ2UoNDIpKTsKKyAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAw
KSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkp
IHsKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsZGEiKTsKKyAgICAgICAg
Y2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzdGwiKTsKKyAgICB9CisgICAgQ0hFQ0soIWlu
dm9rZTxpbnQ+KCpjb2RlLCBhbW91bnQpKTsKKyAgICBDSEVDSyhzbG90ID09IDM3ICsgYW1vdW50
KTsKK30KKwordm9pZCB0ZXN0U3RvcmVSZWxBZGRGZW5jZUxvYWRBY3E4KGludCBhbW91bnQsIEIz
OjpPcGNvZGUgbG9hZE9wY29kZSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIGludDhfdCBzbG90ID0gMzc7CisgICAg
Q29uc3RQdHJWYWx1ZSogc2xvdFB0ciA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgJnNsb3QpOworICAgIFZhbHVlKiBsb2FkZWRWYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgIHByb2MsIGxvYWRPcGNvZGUsIE9yaWdpbigp
LCBzbG90UHRyLCAwLCBIZWFwUmFuZ2UoNDIpLCBIZWFwUmFuZ2UoNDIpKTsKKyAgICBQYXRjaHBv
aW50VmFsdWUqIHBhdGNocG9pbnQgPSByb290LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihw
cm9jLCBWb2lkLCBPcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNl
dDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgaml0LnN0b3JlOChDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigweGJlZWYpLCAmc2xvdCk7CisgICAgICAgIH0pOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5m
ZW5jZSA9IHRydWU7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAg
cHJvYywgU3RvcmU4LCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICBsb2FkZWRWYWx1
ZSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAg
cHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkp
LAorICAgICAgICBzbG90UHRyLCAwLCBIZWFwUmFuZ2UoNDIpLCBIZWFwUmFuZ2UoNDIpKTsKKyAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCAwKSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGlmIChpc0FS
TTY0KCkpIHsKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsZGEiKTsKKyAg
ICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzdGwiKTsKKyAgICB9CisgICAgQ0hF
Q0soIWludm9rZTxpbnQ+KCpjb2RlLCBhbW91bnQpKTsKKyAgICBDSEVDSyhzbG90ID09IDM3ICsg
YW1vdW50KTsKK30KKwogdm9pZCB0ZXN0U3RvcmVBZGRMb2FkSW1tOChpbnQgYW1vdW50LCBCMzo6
T3Bjb2RlIGxvYWRPcGNvZGUpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC01ODM2LDYgKzU5
NTMsMzUgQEAgdm9pZCB0ZXN0U3RvcmVBZGRMb2FkMTYoaW50IGFtb3VudCwgQjM6OgogICAgIENI
RUNLKHNsb3QgPT0gMzcgKyBhbW91bnQpOwogfQogCit2b2lkIHRlc3RTdG9yZVJlbEFkZExvYWRB
Y3ExNihpbnQgYW1vdW50LCBCMzo6T3Bjb2RlIGxvYWRPcGNvZGUpCit7CisgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQx
Nl90IHNsb3QgPSAzNzsKKyAgICBDb25zdFB0clZhbHVlKiBzbG90UHRyID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmc2xvdCk7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgcHJvYywgU3RvcmUxNiwgT3JpZ2luKCksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9y
aWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAg
ICAgICAgICAgICBwcm9jLCBsb2FkT3Bjb2RlLCBPcmlnaW4oKSwgc2xvdFB0ciwgMCwgSGVhcFJh
bmdlKDQyKSwgSGVhcFJhbmdlKDQyKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpKSwKKyAgICAgICAgc2xvdFB0ciwgMCwgSGVhcFJhbmdlKDQy
KSwgSGVhcFJhbmdlKDQyKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAg
ICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOworCisgICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0
aW9uKCpjb2RlLCAibGRhIik7CisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAi
c3RsIik7CisgICAgfQorICAgIENIRUNLKCFpbnZva2U8aW50PigqY29kZSwgYW1vdW50KSk7Cisg
ICAgQ0hFQ0soc2xvdCA9PSAzNyArIGFtb3VudCk7Cit9CisKIHZvaWQgdGVzdFN0b3JlQWRkTG9h
ZEltbTE2KGludCBhbW91bnQsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSkKIHsKICAgICBQcm9jZWR1
cmUgcHJvYzsKQEAgLTU4NzgsNiArNjAyNCwzMyBAQCB2b2lkIHRlc3RTdG9yZUFkZExvYWQ2NChp
bnQgYW1vdW50KQogICAgIENIRUNLKHNsb3QgPT0gMzcwMDAwMDAwMDBsbCArIGFtb3VudCk7CiB9
CiAKK3ZvaWQgdGVzdFN0b3JlUmVsQWRkTG9hZEFjcTY0KGludCBhbW91bnQpCit7CisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBpbnQ2NF90IHNsb3QgPSAzNzAwMDAwMDAwMGxsOworICAgIENvbnN0UHRyVmFsdWUqIHNsb3RQ
dHIgPSByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZzbG90
KTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICBwcm9jLCBTdG9y
ZSwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksIHNs
b3RQdHIsIDAsIEhlYXBSYW5nZSg0MiksIEhlYXBSYW5nZSg0MikpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApKSwKKyAgICAgICAgc2xvdFB0ciwgMCwgSGVhcFJhbmdlKDQyKSwgSGVhcFJh
bmdlKDQyKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgMCkpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2Rl
LCAibGRhIik7CisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAic3RsIik7Cisg
ICAgfQorICAgIENIRUNLKCFpbnZva2U8aW50PigqY29kZSwgYW1vdW50KSk7CisgICAgQ0hFQ0so
c2xvdCA9PSAzNzAwMDAwMDAwMGxsICsgYW1vdW50KTsKK30KKwogdm9pZCB0ZXN0U3RvcmVBZGRM
b2FkSW1tNjQoaW50NjRfdCBhbW91bnQpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0xMzc5
MSw3ICsxMzk2NCw3IEBAIHZvaWQgdGVzdFRyYXBwaW5nU3RvcmVFbGltaW5hdGlvbigpCiAgICAg
Y29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpOwogICAgIHVuc2lnbmVkIHN0b3JlQ291bnQgPSAwOwog
ICAgIGZvciAoVmFsdWUqIHZhbHVlIDogcHJvYy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoTWVt
b3J5VmFsdWU6OmlzU3RvcmUodmFsdWUtPm9wY29kZSgpKSkKKyAgICAgICAgaWYgKGlzU3RvcmUo
dmFsdWUtPm9wY29kZSgpKSkKICAgICAgICAgICAgIHN0b3JlQ291bnQrKzsKICAgICB9CiAgICAg
Q0hFQ0tfRVEoc3RvcmVDb3VudCwgMnUpOwpAQCAtMTQyNzcsNiArMTQ0NTAsNDgxIEBAIHZvaWQg
dGVzdE9wdGltaXplTWF0ZXJpYWxpemF0aW9uKCkKICAgICBDSEVDSyhmb3VuZCk7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRlc3RBdG9taWNXZWFrQ0FTKCkKK3sKKyAgICBUeXBl
IHR5cGUgPSBOYXRpdmVUcmFpdHM8VD46OnR5cGU7CisgICAgV2lkdGggd2lkdGggPSBOYXRpdmVU
cmFpdHM8VD46OndpZHRoOworICAgIAorICAgIGF1dG8gY2hlY2tNeURpc2Fzc2VtYmx5ID0gWyZd
IChDb21waWxhdGlvbiYgY29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAg
ICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKGNvbXBpbGF0aW9uLCAibG9jayIpOworICAg
ICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oY29tcGlsYXRpb24sICJjbXB4Y2hnIik7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGVja0Rpc2Fzc2VtYmx5KAorICAgICAgICAg
ICAgICAgIGNvbXBpbGF0aW9uLAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgY2hhciogZGlz
YXNzZW1ibHkpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHN0cnN0cihk
aXNhc3NlbWJseSwgImxkeCIpIHx8IHN0cnN0cihkaXNhc3NlbWJseSwgImxkYXgiKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICYmIChzdHJzdHIoZGlzYXNzZW1ibHksICJzdHgiKSB8fCBzdHJz
dHIoZGlzYXNzZW1ibHksICJzdGx4IikpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgIkV4cGVjdGVkIHRvIGZpbmQgbGR4L2xkYXggYW5kIHN0eC9zdGx4IGJ1dCBkaWRuJ3Qh
Iik7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAg
IEJhc2ljQmxvY2sqIHJlbG9vcCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9j
ayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlKiBwdHIg
PSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
SnVtcCwgT3JpZ2luKCkpOworICAgICAgICByb290LT5zZXRTdWNjZXNzb3JzKHJlbG9vcCk7Cisg
ICAgICAgIAorICAgICAgICByZWxvb3AtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBw
cm9jLCBCcmFuY2gsIE9yaWdpbigpLAorICAgICAgICAgICAgcmVsb29wLT5hcHBlbmROZXc8QXRv
bWljVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEF0b21pY1dlYWtDQVMsIE9yaWdpbigp
LCB3aWR0aCwKKyAgICAgICAgICAgICAgICByZWxvb3AtPmFwcGVuZEludENvbnN0YW50KHByb2Ms
IE9yaWdpbigpLCB0eXBlLCA0MiksCisgICAgICAgICAgICAgICAgcmVsb29wLT5hcHBlbmRJbnRD
b25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgMHhiZWVmKSwKKyAgICAgICAgICAgICAgICBw
dHIpKTsKKyAgICAgICAgcmVsb29wLT5zZXRTdWNjZXNzb3JzKGRvbmUsIHJlbG9vcCk7CisgICAg
ICAgIAorICAgICAgICBkb25lLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2lu
KCkpOworICAgICAgICAKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAg
ICAgY2hlY2tNeURpc2Fzc2VtYmx5KCpjb2RlKTsKKyAgICAgICAgVCB2YWx1ZVsyXTsKKyAgICAg
ICAgdmFsdWVbMF0gPSA0MjsKKyAgICAgICAgdmFsdWVbMV0gPSAxMzsKKyAgICAgICAgaW52b2tl
PHZvaWQ+KCpjb2RlLCB2YWx1ZSk7CisgICAgICAgIENIRUNLX0VRKHZhbHVlWzBdLCBzdGF0aWNf
Y2FzdDxUPigweGJlZWYpKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWVbMV0sIDEzKTsKKyAgICB9
CisgICAgCisgICAgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogcmVsb29wID0g
cHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9j
aygpOworICAgICAgICAKKyAgICAgICAgVmFsdWUqIHB0ciA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBKdW1wLCBPcmlnaW4oKSk7CisgICAg
ICAgIHJvb3QtPnNldFN1Y2Nlc3NvcnMocmVsb29wKTsKKyAgICAgICAgCisgICAgICAgIHJlbG9v
cC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCks
CisgICAgICAgICAgICByZWxvb3AtPmFwcGVuZE5ldzxBdG9taWNWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgcHJvYywgQXRvbWljV2Vha0NBUywgT3JpZ2luKCksIHdpZHRoLAorICAgICAgICAgICAg
ICAgIHJlbG9vcC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSwK
KyAgICAgICAgICAgICAgICByZWxvb3AtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigp
LCB0eXBlLCAweGJlZWYpLAorICAgICAgICAgICAgICAgIHB0ciwgMCwgSGVhcFJhbmdlKDQyKSwg
SGVhcFJhbmdlKCkpKTsKKyAgICAgICAgcmVsb29wLT5zZXRTdWNjZXNzb3JzKGRvbmUsIHJlbG9v
cCk7CisgICAgICAgIAorICAgICAgICBkb25lLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCkpOworICAgICAgICAKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICAgICAgY2hlY2tNeURpc2Fzc2VtYmx5KCpjb2RlKTsKKyAgICAgICAgVCB2YWx1ZVsy
XTsKKyAgICAgICAgdmFsdWVbMF0gPSA0MjsKKyAgICAgICAgdmFsdWVbMV0gPSAxMzsKKyAgICAg
ICAgaW52b2tlPHZvaWQ+KCpjb2RlLCB2YWx1ZSk7CisgICAgICAgIENIRUNLX0VRKHZhbHVlWzBd
LCBzdGF0aWNfY2FzdDxUPigweGJlZWYpKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWVbMV0sIDEz
KTsKKyAgICB9CisgICAgCisgICAgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayog
c3VjYyA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogZmFpbCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlKiBwdHIgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBC
cmFuY2gsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEF0b21pY1ZhbHVl
PigKKyAgICAgICAgICAgICAgICBwcm9jLCBBdG9taWNXZWFrQ0FTLCBPcmlnaW4oKSwgd2lkdGgs
CisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCks
IHR5cGUsIDQyKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9j
LCBPcmlnaW4oKSwgdHlwZSwgMHhiZWVmKSwKKyAgICAgICAgICAgICAgICBwdHIpKTsKKyAgICAg
ICAgcm9vdC0+c2V0U3VjY2Vzc29ycyhzdWNjLCBmYWlsKTsKKyAgICAgICAgCisgICAgICAgIHN1
Y2MtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBzdG9yZU9wY29k
ZShHUCwgd2lkdGgpLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHN1Y2MtPmFwcGVuZEludENvbnN0
YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCAxMDApLAorICAgICAgICAgICAgcHRyKTsKKyAgICAg
ICAgc3VjYy0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKKyAgICAg
ICAgCisgICAgICAgIGZhaWwtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4o
KSk7CisgICAgICAgIAorICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAg
ICBjaGVja015RGlzYXNzZW1ibHkoKmNvZGUpOworICAgICAgICBUIHZhbHVlWzJdOworICAgICAg
ICB2YWx1ZVswXSA9IDQyOworICAgICAgICB2YWx1ZVsxXSA9IDEzOworICAgICAgICB3aGlsZSAo
dmFsdWVbMF0gPT0gNDIpCisgICAgICAgICAgICBpbnZva2U8dm9pZD4oKmNvZGUsIHZhbHVlKTsK
KyAgICAgICAgQ0hFQ0tfRVEodmFsdWVbMF0sIHN0YXRpY19jYXN0PFQ+KDEwMCkpOworICAgICAg
ICBDSEVDS19FUSh2YWx1ZVsxXSwgMTMpOworICAgICAgICB2YWx1ZVswXSA9IHN0YXRpY19jYXN0
PFQ+KDMwMCk7CisgICAgICAgIGludm9rZTx2b2lkPigqY29kZSwgdmFsdWUpOworICAgICAgICBD
SEVDS19FUSh2YWx1ZVswXSwgc3RhdGljX2Nhc3Q8VD4oMzAwKSk7CisgICAgICAgIENIRUNLX0VR
KHZhbHVlWzFdLCAxMyk7CisgICAgfQorICAgIAorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAg
IEJhc2ljQmxvY2sqIHN1Y2MgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sq
IGZhaWwgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIAorICAgICAgICBWYWx1ZSogcHRyID0g
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICAgICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgRXF1YWwsIE9yaWdpbigpLAorICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBdG9taWNWYWx1ZT4oCisgICAgICAgICAgICAgICAg
ICAgIHByb2MsIEF0b21pY1dlYWtDQVMsIE9yaWdpbigpLCB3aWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSwK
KyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2lu
KCksIHR5cGUsIDB4YmVlZiksCisgICAgICAgICAgICAgICAgICAgIHB0ciksCisgICAgICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCAwKSkp
OworICAgICAgICByb290LT5zZXRTdWNjZXNzb3JzKGZhaWwsIHN1Y2MpOworICAgICAgICAKKyAg
ICAgICAgc3VjYy0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIHN0
b3JlT3Bjb2RlKEdQLCB3aWR0aCksIE9yaWdpbigpLAorICAgICAgICAgICAgc3VjYy0+YXBwZW5k
SW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDEwMCksCisgICAgICAgICAgICBwdHIp
OworICAgICAgICBzdWNjLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkp
OworICAgICAgICAKKyAgICAgICAgZmFpbC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4s
IE9yaWdpbigpKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgICAgIGNoZWNrTXlEaXNhc3NlbWJseSgqY29kZSk7CisgICAgICAgIFQgdmFsdWVbMl07
CisgICAgICAgIHZhbHVlWzBdID0gNDI7CisgICAgICAgIHZhbHVlWzFdID0gMTM7CisgICAgICAg
IHdoaWxlICh2YWx1ZVswXSA9PSA0MikKKyAgICAgICAgICAgIGludm9rZTx2b2lkPigqY29kZSwg
dmFsdWUpOworICAgICAgICBDSEVDS19FUSh2YWx1ZVswXSwgc3RhdGljX2Nhc3Q8VD4oMTAwKSk7
CisgICAgICAgIENIRUNLX0VRKHZhbHVlWzFdLCAxMyk7CisgICAgICAgIHZhbHVlWzBdID0gc3Rh
dGljX2Nhc3Q8VD4oMzAwKTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpjb2RlLCB2YWx1ZSk7Cisg
ICAgICAgIENIRUNLX0VRKHZhbHVlWzBdLCBzdGF0aWNfY2FzdDxUPigzMDApKTsKKyAgICAgICAg
Q0hFQ0tfRVEodmFsdWVbMV0sIDEzKTsKKyAgICB9CisgICAgCisgICAgeworICAgICAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXRvbWljVmFsdWU+KAor
ICAgICAgICAgICAgICAgIHByb2MsIEF0b21pY1dlYWtDQVMsIE9yaWdpbigpLCB3aWR0aCwKKyAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlw
ZSwgNDIpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9y
aWdpbigpLCB0eXBlLCAweGJlZWYpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkp
OworICAgICAgICAKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAg
Y2hlY2tNeURpc2Fzc2VtYmx5KCpjb2RlKTsKKyAgICAgICAgVCB2YWx1ZVsyXTsKKyAgICAgICAg
dmFsdWVbMF0gPSA0MjsKKyAgICAgICAgdmFsdWVbMV0gPSAxMzsKKyAgICAgICAgd2hpbGUgKCFp
bnZva2U8Ym9vbD4oKmNvZGUsIHZhbHVlKSkgeyB9CisgICAgICAgIENIRUNLX0VRKHZhbHVlWzBd
LCBzdGF0aWNfY2FzdDxUPigweGJlZWYpKTsKKyAgICAgICAgQ0hFQ0tfRVEodmFsdWVbMV0sIDEz
KTsKKyAgICAgICAgCisgICAgICAgIHZhbHVlWzBdID0gc3RhdGljX2Nhc3Q8VD4oMzAwKTsKKyAg
ICAgICAgQ0hFQ0soIWludm9rZTxib29sPigqY29kZSwgdmFsdWUpKTsKKyAgICAgICAgQ0hFQ0tf
RVEodmFsdWVbMF0sIHN0YXRpY19jYXN0PFQ+KDMwMCkpOworICAgICAgICBDSEVDS19FUSh2YWx1
ZVsxXSwgMTMpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgdGVzdEF0
b21pY1N0cm9uZ0NBUygpCit7CisgICAgVHlwZSB0eXBlID0gTmF0aXZlVHJhaXRzPFQ+Ojp0eXBl
OworICAgIFdpZHRoIHdpZHRoID0gTmF0aXZlVHJhaXRzPFQ+Ojp3aWR0aDsKKyAgICAKKyAgICBh
dXRvIGNoZWNrTXlEaXNhc3NlbWJseSA9IFsmXSAoQ29tcGlsYXRpb24mIGNvbXBpbGF0aW9uKSB7
CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bihjb21waWxhdGlvbiwgImxvY2siKTsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9u
KGNvbXBpbGF0aW9uLCAiY21weGNoZyIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Y2hlY2tEaXNhc3NlbWJseSgKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbiwKKyAgICAgICAg
ICAgICAgICBbJl0gKGNvbnN0IGNoYXIqIGRpc2Fzc2VtYmx5KSAtPiBib29sIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIChzdHJzdHIoZGlzYXNzZW1ibHksICJsZHgiKSB8fCBzdHJzdHIo
ZGlzYXNzZW1ibHksICJsZGF4IikpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoc3Ryc3Ry
KGRpc2Fzc2VtYmx5LCAic3R4IikgfHwgc3Ryc3RyKGRpc2Fzc2VtYmx5LCAic3RseCIpKTsKKyAg
ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJFeHBlY3RlZCB0byBmaW5kIGxkeC9s
ZGF4IGFuZCBzdHgvc3RseCBidXQgZGlkbid0ISIpOworICAgICAgICB9CisgICAgfTsKKyAgICAK
KyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjID0gcHJvYy5hZGRC
bG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBmYWlsID0gcHJvYy5hZGRCbG9jaygpOworICAg
ICAgICAKKyAgICAgICAgVmFsdWUqIHB0ciA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCks
CisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHBy
b2MsIEVxdWFsLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXRv
bWljVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBBdG9taWNTdHJvbmdDQVMsIE9y
aWdpbigpLCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3Rh
bnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDB4YmVlZiksCisgICAgICAg
ICAgICAgICAgICAgIHB0ciksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3Rh
bnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSkpOworICAgICAgICByb290LT5zZXRTdWNjZXNz
b3JzKHN1Y2MsIGZhaWwpOworICAgICAgICAKKyAgICAgICAgc3VjYy0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIHN0b3JlT3Bjb2RlKEdQLCB3aWR0aCksIE9yaWdp
bigpLAorICAgICAgICAgICAgc3VjYy0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCks
IHR5cGUsIDEwMCksCisgICAgICAgICAgICBwdHIpOworICAgICAgICBzdWNjLT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOworICAgICAgICAKKyAgICAgICAgZmFpbC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKKyAgICAgICAgCisgICAg
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGNoZWNrTXlEaXNhc3NlbWJs
eSgqY29kZSk7CisgICAgICAgIFQgdmFsdWVbMl07CisgICAgICAgIHZhbHVlWzBdID0gNDI7Cisg
ICAgICAgIHZhbHVlWzFdID0gMTM7CisgICAgICAgIGludm9rZTx2b2lkPigqY29kZSwgdmFsdWUp
OworICAgICAgICBDSEVDS19FUSh2YWx1ZVswXSwgc3RhdGljX2Nhc3Q8VD4oMTAwKSk7CisgICAg
ICAgIENIRUNLX0VRKHZhbHVlWzFdLCAxMyk7CisgICAgICAgIHZhbHVlWzBdID0gc3RhdGljX2Nh
c3Q8VD4oMzAwKTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpjb2RlLCB2YWx1ZSk7CisgICAgICAg
IENIRUNLX0VRKHZhbHVlWzBdLCBzdGF0aWNfY2FzdDxUPigzMDApKTsKKyAgICAgICAgQ0hFQ0tf
RVEodmFsdWVbMV0sIDEzKTsKKyAgICB9CisgICAgCisgICAgeworICAgICAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAg
ICAgQmFzaW